Problema nella gestione uscite PWM
Home › Forum › Controllori SlimLine e Netsyst (LogicLab) › Problema nella gestione uscite PWM
Taggato: 6 PWM
- Questo topic ha 8 risposte, 2 partecipanti ed è stato aggiornato l'ultima volta 1 settimana, 1 giorno fa da
marco66.
-
AutorePost
-
Maggio 7, 2025 alle 5:42 pm #82112
marco66
PartecipanteHo 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?
Maggio 7, 2025 alle 5:49 pm #82117Sergio Bertana
Amministratore del forumNel 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.
Maggio 8, 2025 alle 2:49 pm #82173marco66
PartecipanteFB 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.
Maggio 9, 2025 alle 8:40 am #82176Sergio Bertana
Amministratore del forumHo 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.
Maggio 12, 2025 alle 10:26 am #82203marco66
PartecipanteHo 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.
Maggio 13, 2025 alle 9:54 am #82207Sergio Bertana
Amministratore del forumLe 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.
Maggio 19, 2025 alle 8:09 am #82337marco66
PartecipantePurtroppo è 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.
Maggio 19, 2025 alle 8:18 am #82343Sergio Bertana
Amministratore del forumIntato 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.
Maggio 22, 2025 alle 6:25 pm #82402marco66
PartecipantePurtroppo 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.
-
AutorePost
- Devi essere connesso per rispondere a questo topic.