Vai al contenuto
PLC Forum


Implementare una macchina a stati in KOP su S300


DiegoNic

Messaggi consigliati

Buongiorno,

volevo condividere un'idea che magari (se dovessi ricevere feedback positivi) potrebbe essere utile a chi si trova ad affrontare una situazione simile.

Sto scrivendo un programma per la gestione di un dispositivo e vorrei implentare la logica con una macchina a stati.

In passato, programmando in codesys in testo strutturato, ho fatto una cosa del genere con un semplice swich-case.

Ogni case era uno "stato" e usavo una variabile numerica, che impostavo di volta in volta all'interno di ogni case a seconda di determinate condizioni, per passare da uno stato ad un altro.

Ora, dovendo programmare in KOP, inizialmente avevo pensato di usare più o meno lo stesso metodo, usando una variabile INT da aggiornare di volta in volta alla fine dell'FC e di mettere all'inizio di ogni segmento un blocchetto CMP==I con gli opportuni numeri interi che mi facesse da condizione di esecuzione o meno del segmento.

 

Così facendo però il PLC deve effettuare un sacco di CMP inutilmente, per tutti quei segmenti che in uno specifico ciclo non dovranno essere eseguiti... quindi mi è venuto in mente che potrei usare i JMP e le Label, facendo una cosa del genere:

Uso delle Label al posto dei CASE e al posto della variabile per lo switch uso dei Jump. Ho allegato una bozza su carta.

 

Quello che mi chiedo... è una buona idea o sarebbe meglio usare un'altra tecnica?

 

Grazie in anticipo

Buona giornata

Diego

 

 

 

 

20230123_115555.jpg

Link al commento
Condividi su altri siti


Se non ho problemi di tempo ciclo, in KOP questi salti non mi piacciono, avere delle parti di programma che in alcuni casi non vengono eseguiti può portare ad errori, esempio se metti una bobina per portare a 1 un bit, se poi non esegui quel ramo il bit resta congelato in quello stato.

Dato che considero il kop una programmazione plastica, fluida, oltre ad essere più ingombrante e quindi un jmp potrebbe essere qualche segmento sopra e quindi non visibile, preferisco evitare salti ed avere sempre tutto il programma eseguito.

Cosa differente è se programmo in SCL o in AWL, dove i salti sono imprescindibili, ma sono linguaggi più ragionati, meno automatici, è normale tenere in considerazione le parti di programma non eseguiti.

Ovviamente è una mia considerazione personale, comunque mi è capitato spesso di vedere programmi fatti da altri e nel kop sono rarissime le volte in cui ho trovato dei salti.

Link al commento
Condividi su altri siti

Ciao @acquamangrazie per il tuo feedback. In effetti l'unica mia perplessità era proprio questa, i possibili errori legati a qualche salto non pensato bene, quando si salta da una parte all'altra di un codice bisogna stare molto attenti perché la mente può fare qualche passaggio logico "in background" (passami l'espressione) che il PLC ovviamente non fa.

Però (non volendo passare per facilone o per spaccone) se costruisco tutti i flussi logici per bene, facendo attenzione a non tralasciare nulla e a rendere le condizioni di salto mutuamente esclusive, insomma un codice regionato e non scritto di getto, non dovrei avere problemi. In quel caso sarebbe una pura scelta di stile, sei d'accordo?

 

Grazie

Ciao

Diego

 

Link al commento
Condividi su altri siti

2 minuti fa, DiegoNic ha scritto:

In quel caso sarebbe una pura scelta di stile, sei d'accordo?

Assolutamente si, come dicevo quando vado in kop non ho la mentalità del ragionamento con i salti, con altri linguaggi si.

Tieni presente che oltre allo sviluppo c'è la parte più importante che è la messa in servizio, dove spesso ha fretta e la pressione ti porta a ragionare meno e a fare le modifiche più di getto, ed è li che spesso si sottovalutano le situazioni, ed è per quello che evito di procurarmi problemi evitando di implementare logiche di salto.

Link al commento
Condividi su altri siti

3 minuti fa, acquaman ha scritto:

Assolutamente si, come dicevo quando vado in kop non ho la mentalità del ragionamento con i salti, con altri linguaggi si.

Tieni presente che oltre allo sviluppo c'è la parte più importante che è la messa in servizio, dove spesso ha fretta e la pressione ti porta a ragionare meno e a fare le modifiche più di getto, ed è li che spesso si sottovalutano le situazioni, ed è per quello che evito di procurarmi problemi evitando di implementare logiche di salto.

Grazie @acquamanquesto è un consiglio d'oro... da chi ha fronteggiato sia la fase di puro sviluppo che la messa in servizio.

Grazie mille, lo terrò a mente.

 

Buona giornata

Diego

 

Link al commento
Condividi su altri siti

Crea un account o accedi per commentare

Devi essere un utente per poter lasciare un commento

Crea un account

Registrati per un nuovo account nella nostra comunità. è facile!

Registra un nuovo account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...