Definizione macro per calcolo orari
Home › Forum › Terminali operatore (Weintek) › Definizione macro per calcolo orari
- Questo topic ha 4 risposte, 2 partecipanti ed è stato aggiornato l'ultima volta 12 anni, 9 mesi fa da
Sergio Bertana.
-
AutorePost
-
Giugno 26, 2012 alle 2:43 pm #35234
Fabio
PartecipanteHo un PLC Eliwell dove ho una programmazione oraria che dovrei riportare anche sul mio pannello operatore in modo da poter fare modifiche da li. Il problema è che sulla logica del mio PLC invece di avere le ore 18:00 o un numero intero 1080. Ho capito che per leggere sul mio Weintek il numero in modo corretto dovrei fare un divisione, dovrei dividere tutto per 60.
Io la macro l’ho creata ma evidentemente devo aver fatto qualche errore perchè non mi fa questa divisione ma mi legge solo il numero intero. La macro che ho creato è questa:
macro_command main()
short a
GetData(a, “MODBUS TCP/IP”, 4x, 20372, 1)
a = a/60
SetData(a, “Local HMI”, LW, 0, 1)
end macro_commandPoi l’ho lanciata da Funzione PLC dove ho impostato Local HMI con indirizzo 9000. Tutto ciò senza ottenere risultati… perchè ?
Giugno 26, 2012 alle 5:00 pm #37301Sergio Bertana
Amministratore del forumQuello che hai fatto è corretto, in pratica con la macro esegui la lettura tramite protocollo Modbus/TCP del registro 20372 dal PLC Eliwell e ne trasferisci il valore nella variabile a. Poi esegui la divisione e salvi il risultato nella variabile interna al pannello LW 0.
Non ho ben capito però in che modo esegui la macro. Il modo megliore per eseguirla è eseguirla in modo ciclico ogni tempo definito (Vedi post). Ho realizzato un programma utilizzando la tua macro, ho collegato il pannello ad un modulo CPU SlimLine dove nella variabile modbus 40008 (Naturalmente ho modificato l’indirizzo nella macro) ho definito il valore 1080. Eseguendo la macro a tempo ecco il risultato, vsono visualizzati sia il valore reale letto dal PLC che il valore dopo l’operazione (Screenshot).
Giugno 27, 2012 alle 6:17 am #37302Sergio Bertana
Amministratore del forumUtilizzando la macro se da un lato risolvi il problema della visualizzazione dovrai però pensare come gestire l’eventuale inputazione di un valore. Su inputazione dovrai eseguire l’operazione inversa, cioè moltiplicare il valore inputato per 60.
Per questo ti consiglio di non utilizzare la macro, ma di effettuare la conversione del valore in unità ingegnristica direttamente nell’oggetto di visualizzazione e/o inputazione numerica. In questo modo verranno automaticamente eseguite le conversioni sia in visualizazione che in inputazione (Screenshot).
Come vedi si definisce la conversione del valore definendo la scalatura in unità ingegneristica (Nel tuo caso il valore è compreso tra 0 e 60), e poi definisci i valori minimo e massimo della variabile (Nel tuo caso il valore è compreso tra 0 e 3600). In questo modo il valore letto dal registro del PLC viene convertito con la formula:
Value=[Engineering low]+(PLC Register-[Input low])×Ratio
Ratio=([Engineering high]-[Engineering low])/([Input high]-[Input low])Nella inputazione di un valore viene eseguito il calcolo opposto in modo da scrivere il valore corretto nel registro PLC.
Giugno 28, 2012 alle 10:25 am #37312Fabio
PartecipanteGrazie per l’aiuto tempestivo e mattutino…. funziona tutto regolarmente, tranne i minuti che non corrispondono esattamente nel senso che se scrivo dal display del PLC es. 10,02 dal Weintek leggo 10,03; se sul weintek scrivo 10,30 sul display del PLC leggo 10,18 e piu i minuti si avvicinano a 60 maggiore è la differenza tra i due “minutaggi”.
Ancora una cosa dovrei limitare la scrittura dei minuti a 59 e non 60 giusto ? perche se scrivo dal weintek 10.60 dovrebbe corrispondere sul plc alle 11,00 invece che 10,36. Non ci capisco più nullla, sono nel pallone. help meeeee!!
Giugno 29, 2012 alle 6:52 am #37313Sergio Bertana
Amministratore del forumCerco di leggere tra le righe del tuo messaggio, non capisco cosa intendi per scrivere sul terminale 10,03 ecc. Ritengo che tu abbia definito due oggetti di introduzione numerica, uno per le ore ed uno per i minuti, ma non sò se è così ? Se è così vuol dire che per leggere le ore ti appoggi ad un’altro registro del PLC, quale ?
Comunque per capire meglio il problema dovresti aggiungere due oggetti di visualizzazione numerica è visualizzare il valore reale del registro PLC senza scalature così possiamo vedere dove si commettono gli errori di scala. Se vuoi puoi mandarmi il tuo programma per Email, trovi l’indirizzo del supporto tecnico sul sito.
-
AutorePost
- Devi essere connesso per rispondere a questo topic.