drugo66 Inserito: 17 aprile 2015 Segnala Share Inserito: 17 aprile 2015 Ciao a tutti, per l'impianto che sto implementando è venuto fuori che il cliente vuole il testo del messaggio dell'allarme attivo in una variabile del PLC, che poi andrà a prendersi, credo, da far visualizzare in un suo display; quando l'ho saputo mi è subito venuto freddo a pensare di dover copiare a mano i testi del pannello nel PLC, ma poi ho scoperto che sul pannello (Panel Plus 1000) è possibile inserire una variabile STRING in cui, al trigger dell'allarme, viene copiato l'intero testo dell'allarme ed anche nella lingua selezionata dal pannello: l'ho provato e funziona anche bene Il problema nasce quando si attivano 2 o più allarmi in sequenza, ovviamente il pannello mi copia nella variabile l'ultimo arrivato, e quando proprio l'ultimo arrivato viene azzerato; l'allarme precedente, che si era attivato prima, essendo già attivo, non effettua nessuna copia nella variabile, che quindi rimane con il testo dell'allarme azzerato. Ho pensato di crearmi una lista, in pratica un array che dovrò shiftare in un senso o nell'altro a seconda di chi entra (è attivo) o chi esce (è stato resettato) e quindi andarmi a copiare il testo corretto (in pratica sempre il primo), ma non credo che esistano istruzioni per shiftare un array di STRING (dovrò scriverla e testarla per benino), quindi mi stavo chiedendo se ne vale veramente la pena di tentare una strada del genere o meglio inserire tutti i testi in un array ( ). Che ne dite ? Qualcuno ha già affrontato una situazione simile ? Grazie a tutti Link al commento Condividi su altri siti More sharing options...
Henon Inserita: 17 aprile 2015 Segnala Share Inserita: 17 aprile 2015 puoi fare degli array di stringhe standard 80 Chr, poi usare l'istruzione FAL oppure la CPS. Quando hai un array di stringhe puoi fare uno shift considerando un array come un area contigua di memoria. ti basta puntare il primo elemento di String[0].len e copiare a raffica con CPS verso un array di DINT[0] per una lunghezza di byte corrispondente a tutte i caratteri delle stringhe +len Ma penso che se usi la FAL risolvi velocemente lo shift tra stringhe. puoi farti il Linguaggio ST uno shift di stringhe copiando progressivamente in ordine invero l'ultima stringa nella penultima e cosi via. Usi un ciclo While o ciclo For. ci sono vari modi. L'istruzione FAL e' molto polivalente puo' fare un sacco di cose. Link al commento Condividi su altri siti More sharing options...
drugo66 Inserita: 17 aprile 2015 Autore Segnala Share Inserita: 17 aprile 2015 Grazie Henon: ho giusto sbirciato la FAL ed in effetti mi sembra interessante; appena posso provo e ti farò sapere. Link al commento Condividi su altri siti More sharing options...
drugo66 Inserita: 21 aprile 2015 Autore Segnala Share Inserita: 21 aprile 2015 Ieri abbiamo scelto di fare in questo modo (l'idea non è farina del mio sacco, ma devo dire che mi soddisfa): ho scritto una routine che scatena tutti gli allarmi in sequenza, uno per volta, e copia il testo dal pannello (o meglio, dalla variabile che comunica con il pannello) in un array del PLC; ci mette meno di dieci minuti e mentre è in esecuzione inibisco qualsiasi altro funzionamento; ho già il numero dell'ultimo allarme, quindi, in funzionamento normale, devo solo usarlo come indice per l'array che menzionavo prima ed il gioco è fatto. Link al commento Condividi su altri siti More sharing options...
Messaggi consigliati
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 accountAccedi
Hai già un account? Accedi qui.
Accedi ora