[Automazione] Controllo velocità Motore DC con PLC
Sto lavorando ad un progetto di automazione su zelio soft. Devo controllare la velocità di un motore DC (pwm) tramite un segnale in ingresso. Il tutto attraverso l'uso di un PLC. Voglio trattare due casi. Il primo caso con PID e il secondo senza PID.
Ho impostato gli algoritmi FBD su zelio, ma non so se sono corretti.


Questi diagrammi sono corretti? Come posso simulare questo progetto per capire se è tutto corretto? Poi perdonate la domanda stupida, ma è la prima volta che mi interfaccio a Zelio e al linguaggio FBD. Gli I1,I2... e Q1, Q2... sono rispettivamente ingressi e uscite del PLC, giusto? Nel mio caso dovrei utilizzarli sono se voglio creare un progetto fisico e quindi collegare fisicamente qualcosa al plc?
Poi vorrei anche sapere se lo schema va bene così o se posso aggiungere dei blocchi per renderlo più completo.
Stavo pensando che potrei simulare dei carici, in modo da vedere il comportamento dimanico del caso con PID e metterlo a confronto con quello senza PID (con stessi carichi), ma non so se è possibile simulare dei carichi in zelio, ne come effetivamente esportare i dati e caricarli ad esempio su matlab....
Ho impostato gli algoritmi FBD su zelio, ma non so se sono corretti.


Questi diagrammi sono corretti? Come posso simulare questo progetto per capire se è tutto corretto? Poi perdonate la domanda stupida, ma è la prima volta che mi interfaccio a Zelio e al linguaggio FBD. Gli I1,I2... e Q1, Q2... sono rispettivamente ingressi e uscite del PLC, giusto? Nel mio caso dovrei utilizzarli sono se voglio creare un progetto fisico e quindi collegare fisicamente qualcosa al plc?
Poi vorrei anche sapere se lo schema va bene così o se posso aggiungere dei blocchi per renderlo più completo.
Stavo pensando che potrei simulare dei carici, in modo da vedere il comportamento dimanico del caso con PID e metterlo a confronto con quello senza PID (con stessi carichi), ma non so se è possibile simulare dei carichi in zelio, ne come effetivamente esportare i dati e caricarli ad esempio su matlab....
Risposte
Non sono un grande esperto di PLC Schneider, ma ho lavorato con altri PLC per cui provo lo stesso a darti una mano. Ma fai poi tutte le verifiche del caso sul manuale dello Zelio.
Quello che hai realizzato è una simulazione in quanto hai inserito anche il motore. Ovviamente l'algoritmo di controllo invece prevede che l'uscita sia solo il comando al motore che è esterno.
Come schema di simulazione va bene. In realtà il motore dovrebbe avere anche una dinamica (qualche secondo di ritardo) ma non mi pare che sia disponibile una costante di tempo. Se ti vuoi divertire potresti crearla con un PID solo integrale retroazionato su se stesso.
Per vedere i risultati credo che tu possa mettere l'uscita sul display.
SI, orientativamente se supponiamo il setpoint proveniente dall'esterno I1 sarà il setpoint e I2 la misura di velocità. L'uscita del PID (analogica o PWM a seconda di cosa si aspetta in ingresso il motore) andrà su Q1.
A seconda dell'importanza e della taglia del motore si possono mettere diversi accorgimenti aggiuntivi quali ad es.:
1) se è possibile accorgersi della perdita di misura di velocità si passa ad uno schema degradato (simile al secondo che hai fatto)
2) andrebbe inserita una protezione di sovravelocità che annulli il comando verso il motore (che alla fine possiamo dire essere rappresentativo della corrente e della coppia richiesta) quando la velocità supera una soglia (relè interno al SW con memoria che può essere resettata solo da un comando esterno).
3) Se disponibili, si acquisiscono anche altre grandezze (temperatura del motore, vibrazione) sempre per motivi di protezione.
Nel caso di un carico la linea d'asse va simulata meglio. Per esempio se alla fine il comando, a parte un guadagno G è rappresentativo della coppia motrice varrà la seguente equazione, avendo anche inserito un attrito dipendente dalla velocità.
$G*text(comando) - text(carico) - k*omega= J (d omega)/dt$
Quindi si calcola il membro di sinistra e poi si integra con un PID solo integrale per ottenere la velocità che verrà posta in retroazione per ottenere il termine viscoso. In particolare se il carico è nullo si ottiene il PID retroazionato di cui sopra. Per evitare che all'inizio il carico faccia andare il motore in senso contrario l'uscita del PID deve essere limitata inferiormente a zero.
"Carmelo99":
Questi diagrammi sono corretti?
Quello che hai realizzato è una simulazione in quanto hai inserito anche il motore. Ovviamente l'algoritmo di controllo invece prevede che l'uscita sia solo il comando al motore che è esterno.
Come schema di simulazione va bene. In realtà il motore dovrebbe avere anche una dinamica (qualche secondo di ritardo) ma non mi pare che sia disponibile una costante di tempo. Se ti vuoi divertire potresti crearla con un PID solo integrale retroazionato su se stesso.
Per vedere i risultati credo che tu possa mettere l'uscita sul display.
"Carmelo99":
Poi perdonate la domanda stupida, ma è la prima volta che mi interfaccio a Zelio e al linguaggio FBD. Gli I1,I2... e Q1, Q2... sono rispettivamente ingressi e uscite del PLC, giusto? Nel mio caso dovrei utilizzarli sono se voglio creare un progetto fisico e quindi collegare fisicamente qualcosa al plc?
SI, orientativamente se supponiamo il setpoint proveniente dall'esterno I1 sarà il setpoint e I2 la misura di velocità. L'uscita del PID (analogica o PWM a seconda di cosa si aspetta in ingresso il motore) andrà su Q1.
"Carmelo99":
Poi vorrei anche sapere se lo schema va bene così o se posso aggiungere dei blocchi per renderlo più completo.
A seconda dell'importanza e della taglia del motore si possono mettere diversi accorgimenti aggiuntivi quali ad es.:
1) se è possibile accorgersi della perdita di misura di velocità si passa ad uno schema degradato (simile al secondo che hai fatto)
2) andrebbe inserita una protezione di sovravelocità che annulli il comando verso il motore (che alla fine possiamo dire essere rappresentativo della corrente e della coppia richiesta) quando la velocità supera una soglia (relè interno al SW con memoria che può essere resettata solo da un comando esterno).
3) Se disponibili, si acquisiscono anche altre grandezze (temperatura del motore, vibrazione) sempre per motivi di protezione.
"Carmelo99":
Stavo pensando che potrei simulare dei carici, in modo da vedere il comportamento dimanico del caso con PID e metterlo a confronto con quello senza PID (con stessi carichi), ma non so se è possibile simulare dei carichi in zelio, ne come effetivamente esportare i dati e caricarli ad esempio su matlab....
Nel caso di un carico la linea d'asse va simulata meglio. Per esempio se alla fine il comando, a parte un guadagno G è rappresentativo della coppia motrice varrà la seguente equazione, avendo anche inserito un attrito dipendente dalla velocità.
$G*text(comando) - text(carico) - k*omega= J (d omega)/dt$
Quindi si calcola il membro di sinistra e poi si integra con un PID solo integrale per ottenere la velocità che verrà posta in retroazione per ottenere il termine viscoso. In particolare se il carico è nullo si ottiene il PID retroazionato di cui sopra. Per evitare che all'inizio il carico faccia andare il motore in senso contrario l'uscita del PID deve essere limitata inferiormente a zero.