tommas.cavallini
Risposte nei forum create
-
AutorePost
-
Febbraio 8, 2021 alle 5:58 pm in risposta a: Comunicazione Modbus RTU con Energy meter SDM120 #58986
tommas.cavallini
PartecipanteAnzitutto mi scuso per la confusione: devo leggere sia gli EnergyMeter che le elettrovavole, su queste ultime devo effettuare anche la scrittura: dato che entrambe comunicano in RTU ho pensato di poter chiedere direttamente qui senza dover per forza aprire un altro topic.
Venendo a noi, non ho ben capito la soluzione proposta: pensavo di separare la fase di lettura e scrittura non collegando i FB in cascata. Infatti, la lettura deve essere continuativa mentre la scrittura avviene solo quando e se voglio cambiare dei parametri.
Febbraio 8, 2021 alle 11:33 am in risposta a: Comunicazione Modbus RTU con Energy meter SDM120 #58983tommas.cavallini
PartecipantePerfetto, adesso il mio problema sta nella gestione temporale di lettura e scrittura di dieci elettrovalvole.
Se per la lettura basta associare il programma al task Back in modo tale da essere eseguita periodicamente, la scrittura invece vorrei poterla eseguire solo in seguito ad una particolare condizione: ho visto che LogicLab non mette a disposizione dei task ad evento, quindi come potrei fare?
tommas.cavallini
PartecipantePerfetto, ho provato tutto per come mi ha spiegato Lei e funziona, quindi La ringrazio davvero.
Adesso però ho un altro problema: mi è stato chiesto di ritardare la lettura in Modbus in modo da eseguire una lettura al minuto. Per fare ciò ho pensato di agire sulla voce Delay: è corretto mettere un delay di 60 per il mio fine o sarebbe meglio mettere un eTON prima di Enable in modo da ritardare con il timer?
Nel caso in cui vada a modificare il Delay (mettendo 60), avendo due modbusMaster in cascata, alla voce Delay del secondo FB dovrei mettere 61 (60 del precedente + 1 di ritardo tra le due letture) o mi basta solo inserire il ritardo tra le due letture (1 sec) e nel primo lasciare 60?
tommas.cavallini
PartecipanteLe dico subito che purtroppo la lettura dei valori dal datataker non va a buon fine se uso VarSwap (avevo pensato di usare proprio questo all’inizio, ma viene fuori un numero altissimo) mentre se uso il FB BEArrayToVar funziona e mi restituisce il valore letto in modo corretto.
Per il resto, 36 dei 40 sono in registri consecutivi, quindi per questi posso eseguire un unico comando di lettura (specificando alla voce Address il primo indirizzo da cui partire e alla voce Points del ModbusMaster quanti dati voglio leggere, nel mio caso 36*2, 72). Nel buffer del ModbusMaster quindi metterò un array che sia in grado di contenere 36 dati (chiamato per intenderci ArrayA), questo array poi sarà collegato a BEArrayToVar alla voce Source e in Destination metterò un altro array (ArrayB) che conterrà tutti i valori letti in modo corretto, giusto?
La mia domanda è: automaticamente, dopo ogni lettura, il dato letto va in ArrayA, viene eseguito BEArrayToVar e viene memorizzato in ArrayB. Al ciclo di lettura successivo, il secondo dato letto va in ArrayA subito dopo il precendente in automatico, per poi andare in ArrayB memorizzato sempre di fila, giusto?
tommas.cavallini
PartecipanteHo realizzato una comunicazione Modbus TCP/IP con un datataker utilizzando i FB SysTCPClient e ModbusMaster, al termine del quale, una volta ricevuto il dato in IEE754, ho effettuato una conversione con il FB BEArrayToVar.
A questo punto, il problema è che devo leggere 40 valori dallo stesso dispositivo e salvare ciascuno di essi in una variabile a sé stante: come potrei fare?
Ho visto anche il FB consigliato da lei, il ACModbus, ma il problema è che una volta lette queste variabili devo necessariamente effettuare la conversione con BEArrayToVar per ciascuno di essi singolarmente e instanziare una variabile per ciascuno dei dati, quindi temo che non posso utilizzarlo.
Cosa mi consiglia di fare per risolvere il problema?
Gennaio 28, 2021 alle 11:21 am in risposta a: Comunicazione Modbus RTU con Energy meter SDM120 #58894tommas.cavallini
PartecipanteAdesso è venuto fuori il problema che tramite connessione ModBus RTU voglio anche scrivere dei dati. Mi chiedevo quindi: se per la lettura usavamo il FB varSwap per convertire in REAL i valori, per la scrittura come faccio?
Pensavo di inserire i valori da scrivere alla voce Buffer del FB ModbusMaster, ma credo di aver capito che non posso scrivere un valore REAL ma un valore nello standard IEE754, giusto?
Come faccio ad eseguire quindi la conversione inversa di VarSwap?
Gennaio 15, 2021 alle 6:14 pm in risposta a: Comunicazione Modbus RTU con Energy meter SDM120 #58808tommas.cavallini
PartecipanteHo provato il metodo con i FB ModbusMaster in cascata e funziona, grazie mille per l’aiuto!
I suoi video e le sue spiegazioni sono stati fondamentali soprattutto perchè mi sono appena affacciato al mondo dei PLC, gliene sono veramente grato. Nel caso avessi altri dubbi, scriverò sul forum che è molto ben fatto e le risposte sono più celeri di quanto mi aspettassi.
Gennaio 15, 2021 alle 10:36 am in risposta a: Comunicazione Modbus RTU con Energy meter SDM120 #58805tommas.cavallini
PartecipanteBuongiorno, intanto grazie mille per l’attenzione. Nel mio progetto ho utilizzato i FB SysSerialPort e ModbusMaster e VarSwap.
Ho provato in seguito a collegare un altro FB ModbusMaster (che identifica il secondo SDM120 avente nodo 2) utilizzando lo stesso FB per la porta seriale. Nella porta EN del secondo ModbusMaster ho aggiunto un eTON con tempo di 200ms, però riesco sempre a leggere solo il primo (collegato al primo FB ModbusMaster). Ho provato anche a separare il tutto in due programmi diversi associandoli anche a task diversi, ma il risultato non cambia, anzi, non legge più nemmeno il primo.
Come posso risolvere? Grazie ancora in anticipo.
-
AutorePost