Vai al contenuto

Problema nella gestione uscite PWM

Home Forum Controllori SlimLine e Netsyst (LogicLab) Problema nella gestione uscite PWM

Taggato: 

Stai visualizzando 9 post - dal 1 a 9 (di 9 totali)
  • Autore
    Post
  • #82112
    marco66
    Partecipante

    Ho ripreso in mano un progetto dell’anno scorso che utilizza 6 PWM di tipo veloce. Premetto che avevamo trasferito la licenza previo pagamento.

    Il mio collega (che ora non è più con noi) ha gestito la funzione SysSetPWMOut all’interno di 6 FB. Per stoppare la funzione ha lavorato sui parametri Frequency e Duty (Screenshot programma).

    Talvolta almeno una delle uscite PWM non si ferma anche  se Frequency  e Duty sono a zero.

    Talvolta almeno una delle uscite PWM non parte anche se Frequency  e Duty sono diversi da zero.

    Suggerimenti?

    #82117
    Sergio Bertana
    Amministratore del forum

    Nel FB SysSetPWMOut azzerando Frequency e/o azzerando Duty l’uscita PWM deve azzerarsi, così come impostando un valore nei due parametri l’uscita deve generare la frequenza impostata, trovo strano che questo non succeda.

    Nel tuo programma vedo che le variabili APPO_FREQ ed APPO_DUTY sono di tipo UINT mentre il FB vuole variabili di tipo REAL, credo che nella compilazione del programma ti vengano segnalate warnings ad indicare questa incongruità di tipo sulle variabili.

    Teoricamente LogicLab dovrebbe effettuare il cast del valore corettamente, comunque proverei ad inserire il cast sui valori.

    FB_PWM_OUT(Address:=ADDR, Channel:=CHAN, Frequency:=TO_REAL(APPO_FREQ), Duty:=TO_REAL(APPO_DUTY));
    • Il FB da te realizzato è sempre eseguito?
    • In che task lo stai eseguendo?
    • Puoi verificare con il comando SysLog se hai errori di esecuzione?
    • Eventualmente puoi inviare il programma alla nostra eMail di supporto e proviamo a dare una occhiata.
    #82173
    marco66
    Partecipante

    FB sempre eseguito all’interno di un’altra FB istanziata 6 volte

    FB_C_M1(ENAB:=FB_C_M1_EN,ADDR:=255,CHAN:=0,FREQ:=REC_ACT.FREQ,DUTY:=DUTY_C_M1);
    FB_C_M2(ENAB:=FB_C_M2_EN,ADDR:=255,CHAN:=1,FREQ:=REC_ACT.FREQ,DUTY:=DUTY_C_M2);
    FB_C_M3(ENAB:=FB_C_M3_EN,ADDR:=1,CHAN:=0,FREQ:=REC_ACT.FREQ,DUTY:=DUTY_C_M3);
    FB_C_M4(ENAB:=FB_C_M4_EN,ADDR:=1,CHAN:=1,FREQ:=REC_ACT.FREQ,DUTY:=DUTY_C_M4);
    FB_C_M5(ENAB:=FB_C_M5_EN,ADDR:=1,CHAN:=2,FREQ:=REC_ACT.FREQ,DUTY:=DUTY_C_M5);
    FB_C_M6(ENAB:=FB_C_M6_EN,ADDR:=1,CHAN:=3,FREQ:=REC_ACT.FREQ,DUTY:=DUTY_C_M6);
    
    // ABILITAZIONE PWM
    
    IF ENAB=TRUE THEN
        APPO_DUTY:=DUTY;
        APPO_FREQ:=FREQ;
    ELSE
        APPO_DUTY:=0;
        APPO_FREQ:=0;
    END_IF;
    
    FB_PWM_OUT(Address:=ADDR,Channel:=CHAN,Frequency:=APPO_FREQ,Duty:=APPO_DUTY);

    Invio copia programma alla Vs eMail di supporto per una analisi.

    #82176
    Sergio Bertana
    Amministratore del forum

    Ho analizzato il programma che hai mandato è molto complesso quindi mi è difficile capire cosa succede ma ho notato alcune cose:

    Hai eseguito in task Fast il programma CYCLE che gestisce l’abilitazione delle tue FB di gestione PWM le quali però sono eseguite in task Slow.  Questa soluzione non dà vantaggi perchè i tempi di gestione del PWM sono comunque quelli della task Slow. Inoltre gestire variabili cross task con la task Fast può nascondere delle insidie la task Fast non gestisce l’immagine di processo sulle variabili. Quindi il primo consiglio è di spostare il programma CYCLE in task Slow.

    Puoi dirmi la versione del firmware del modulo CPU e la versione del firmware del modulo di I/O che gestisce il PWM. Per visualizzare la versione devi connetterti in telnet ed utilizzare il comando SLineInfos.

    Quando dici “Talvolta almeno una delle uscite PWM non si ferma anche se Frequency e Duty sono a zero” intendi che non si ferma immediatamente oppure che continua a generare l’uscita.

    Quando dici “Talvolta almeno una delle uscite PWM non parte anche se Frequency e Duty sono diversi da zero” in questo caso il valore di Frequency è comunque maggiore del valore minimo gestito da quel canale PWM. I valori li trovi qui nel capitolo “Moduli supportati”.

    Per completezza e rifacendomi al cast delle variabili ho visto che la compilazione del tuo programma genera 260 warnings. Certo le warnings solitamente non generano problemi ma attenzione warning come questa

    P_OB1(58) - warning G0082:  DUTY_C_M3 => Writing a signed value into an unsigned variable

    Satnno ad indicare che stai copiando il valore di una variabile con segno nel tuo caso di tipo INT in una variabile senza segno nel tuo caso UINT. Ora se il valore della variabile INT diventa negativo (Ad esempio -1) il valore della variabile UINT divente 65535. Quindi in questi casi bisogna essere certi che la variabile con segno non diventi mai negativa.

    #82203
    marco66
    Partecipante

    Ho messo il programma CYCLE nel task SLOW ma nulla è cambiato

    Il report del SlinInfos è il seguente:

    [0x1] PCode:PCB124B01*, SCode:SFW196C000, Sn:0
    [0x2] PCode:PCB126C170, SCode:SFW173C400, Sn:0
    [0x3] PCode:PCB126C170, SCode:SFW173C400, Sn:0
    [0x4] PCode:PCB126C170, SCode:SFW173C400, Sn:0
    [0x5] PCode:PCB126C170, SCode:SFW173C400, Sn:0
    [0x6] PCode:PCB126C130, SCode:SFW173C400, Sn:0
    [0x7] PCode:PCB126C110, SCode:SFW173C400, Sn:0
    [0x8] PCode:PCB124B000, SCode:SFW169D210, Sn:0

    Ho 6 output gestiti in PWM e quando eseguo contemporaneamente le FB con gli stessi parametri qualche output non funziona (LEDuscita spenta).

    Talvolta quando azzero DUTY CYCLE e FREQUENCY una o più uscite continuano ad essere attivate gestite dal modulo PWM.

    #82207
    Sergio Bertana
    Amministratore del forum

    Le versioni dei firmware sui moduli sono aggiornate…

    Ma riguardando il tuo programma mi sono accorto che nella task Slow esegui una ventina di acquisizioni analogiche (FB SysGetAnInp), come riportato nel capitolo Multiplexing acquisizione del FB l’acquisizione analogica sul bus di estensione richiede un tempo variabile tra i 300-500uS quindi di media occorrono circa 8mS per acquisire tutti i moduli, considerando che il task Slow viene seguito ogni 10mS re dovendo anche gestrire sia gli I/O logici che le uscite PWM si rischia di saturare completamente il tempo e non lasciare più tempo per eseguire la task Back.

    Quindi il consiglio è di sequenziare le acquisizioni analogiche tanto è inutile eseguirle ogni 10mS visto che il tempo di conversione A/D è di minimo 60mS e che quando si acquisiscono temperature le variazioni sono molto lente. Alcune informazioni aggiuntive:

    • Mi sono perso l’inizio della storia, questo programma inizialmente funzionava e poi ha smesso di funzionare, oppure si hanno sempre avuti problemi fin dall’inizio.
    • Le uscite PWM che hanno problemi sono sempre e solo quelle del modulo di estensione oppure sono anche quelle del modulo CPU.
    • Puoi inviare al supporto tecnico il file di log del sistema. Lo trovi nella cartella C:\System e lo puoi scaricare via FTP.
    • Puoi verificare i tempi di esecuzione delle varie tasks. Puoi mettere in debug la variabili con i tempi presenti in libreria.
    #82337
    marco66
    Partecipante

    Purtroppo è un progetto che è stato iniziato da un mio ex collega che non ha trasferito informazioni. Poi è stato abortito momentaneamente dal nostro cliente.

    Ora ho la necessità di prendere in mano il tutto e farlo funzionare.

    Le uscite che hanno problemi non hanno una logica. Talvolta quelle sulla CPU, talvolta quelle sul modulo di espansione. Ho notato l’errore User program error:9951085.

    Ho inviato per eMail il file di log.

    #82343
    Sergio Bertana
    Amministratore del forum

    Intato se vai alla pagina di definizione errori e cerchi l’errore 9951085, troverai l’indicazione “Terminato tempo utilizzo per FB protetta”. Quindi non hai definito correttamente la licenza per l’utilizzo dei PWM, per questo che terminato il tempo di funzionamento in demo hai il blocco di alcuni dei PWM in modo casuale.

    Quindi la prima operazione è impostare correttamente la licenza, trattandosi di licenza DID verificare se il tipo di modulo e il numero seriale corrispondono al modulo CPU che stai utilizzando. Nel tuo programma non trovo la funzione SysPCodeVerify di impostazione licenza quindi immagino sia stata definita da pagina Web.

    Guardando il file di log che hai inviato non vedo stranezze, dando una occhiata agli ultimi records vedo:

    [16/05/2025 13:45:01.000] [L] SFW198[ 5003] MPS054C110-00488 power on       
    [16/05/2025 13:45:01.000] [L] SFW198[ 5005] Starting Op. System SFW210B040  
    [16/05/2025 13:45:06.931] [L] SFR050[14025] Ethernet Link ok                
    [16/05/2025 13:45:07.513] [L] SFW198[ 6000] Run ApplID:0x61FCA90C           
    [19/05/2025 07:39:31.007] [L] SFW198[ 6010] Stop ApplID:0x61FCA90C          
    [19/05/2025 07:39:33.715] [L] SFW198[ 6050] LogicLab executable download end
    [19/05/2025 07:39:36.168] [L] SFW198[ 6000] Run ApplID:0xF5BA33F9

    L’ultima volta il sistema è stato acceso il 16/05 alle 13:45, poi al 19/05 alle 7:39 hai caricato il programma con LogicLab, la fase di caricamento esegue uno stop del programma e poi manda in esecuzione il programma indicandone il valore di HASH.

    #82402
    marco66
    Partecipante

    Purtroppo ho visto che  su 3 delle 4 apparecchiature non sono state inserite le licenze (anche se acquistate).

    Sono stato tratto in inganno dal fatto che il funzionamento dei canali PWM mi è sembrato molto “random”.

    Comunque chiedo scusa per il disguido.

     

Stai visualizzando 9 post - dal 1 a 9 (di 9 totali)
  • Devi essere connesso per rispondere a questo topic.