Sergio Bertana
Risposte nei forum create
-
AutorePost
-
Sergio Bertana
Amministratore del forumIl mouse USB è supportato da tutti i terminali.
Utilizzando im mouse è possibile muovere il cursore sullo schermo ed agendo sul pulsante del mouse effettuare il click sull’oggetto puntato proprio come toccandolo sullo schermo con il dito.
Gennaio 28, 2021 alle 11:30 am in risposta a: Comunicazione Modbus RTU con Energy meter SDM120 #58898Sergio Bertana
Amministratore del forumUn pò di ordine tra le idee… e una occhiata a questo post potrebbe essere utile.
I dati in lettura e scrittura sul meter sono sempre in float 32 bit IEE754, che in IEC61131 si identificano con il formato REAL. Quindi con la funzione VarSwap non fai nessuna conversione. Usi questa funzione perchè essendo il valore espresso su 32 bits si utilizzano 2 registri Modbus per la lettura/scrittura e siccome il protocollo Modbus non specifica l’endiannes sui valori multiregistro ognuno fà come vuole.
La funzione VarSwap sistema proprio l’endiannes dei dati quindi puoi usarla sia per convertire i dati in lettura che quelli in scrittura. Quindi per scrivere un valore sul meter appoggi il dato REAL nel buffer del FB ModbusMaster (Che definirei di tipo DWORD) utilizzando la funzione VarSwap.
Sergio Bertana
Amministratore del forumSi passa per un puntatore per “fregare” il compilatore, se assegnassi il valore 16#7F8FFFFF (Decimale 2.140.143.615) ad una variabile REAL essa assumerebbe il valore 16#4EFF2000 (Come puoi verificare con un convertitore come questo).
Per poter impostare un valore esadecimale devo avere una variabile di tipo DWORD, nel linguaggio ST non c’è il costrutto UNION che permette di unire variabili di tipo diverso, quindi l’unico escamotage che ho trovato è utilizzare un puntatore.
Ma magari nel forum c’è qualcuno che ha una idea migliore.
Sergio Bertana
Amministratore del forumCome vedi nello screenshot devi configurare un nuovo dispositivo MODBUS RTU (Hex Addressing), configurato sulla porta seriale RS485 con i parametri di comunicazione 2400, n, 8, 1 e nodo Modbus 1.
Siccome devi gestire variabili REAL a 32 bits devi sincronizzare l’endiannes sull’acquisizione, attiva con il tasto Data Conversion e metti il tick sulla voce corrispondente.
Ora puoi nella finestra del terminale inserire un oggetto di visualizzazione numerica, definendo l’origine dei dati da protocollo Modbus indicando il modo 3x_Double con indirizzo 0. E nel formato dati il formato 32-bit Float.
Sergio Bertana
Amministratore del forumHo ricreato la prova in laboratorio, vediamo intanto le connessioni Modbus:
- Il segnale RS485- và collegato con il morsetto 9 dello strumento
- Il segnale RS485+ và collegato con il morsetto 10 dello strumento
- I parametri di comunicazione di default sono 2400, n, 8, 1
Utilizzando Toolly menù Utilities -> Modbus master, ecco come si presenta la prova (Screenshot). Come si vede ho eseguito la lettura con il comando 04 Read Input Registers di 2 registri partendo da indirizzo 0 (Ricordo che Modbus ha offset 1 ecco spiegata la discordanza tra il manuale SDM120 che cita indirizzo 1).
Tutti i dati letti dallo strumento sono espressi in float IEE754 a 32 bit, il valore letto è quindi 0x4368333 che in decimale (Puoi utilizzare un convertitore on-line come questo) equivale a 232.199 Volts.
Sergio Bertana
Amministratore del forumIl PTP128 è un vecchio dimostrativo, per prendere pratica con le pagine web ti rimando a questo articolo dove puoi eseguire il download di alcuni esempi.
Ricordo che il simulatore su PC permette di eseguire programmi logici e matematici, non è gestito dal simulatore tutto quello che riguarda la comunicazione sia seriale che TCP.
Inoltre il simulatore non ha un server HTTP attivo, quindi per provare le pagine web devi necessariamente utilizzare un modulo CPU SlimLine.
Sergio Bertana
Amministratore del forumLa definizione NaN è un acronimo che indica “Not A Number”. I valore NAN per una variabile REAL in formato IEE754 è un valore che ha tutti gli 8 bit di esponente a “1” e la mantissa diversa da “0”, il segno non importa.
Quindi se lo rappresentiamo in esadecimale sarà un numero del tipo 16#7F8FFFFF, ma qualsiasi altro numero che mantenga tutti gli 8 bit di esponente a “1” e la mantissa diversa da “0” verrà indicato cone un NaN. Risulta quindi evidente che non c’è un numero univoco per rappresentare il NaN, se vuoi settare una variabile a NaN puoi utilizzare una definizione del tipo:
VAR APtr : @DWORD; RVars : ARRAY[0..3] OF REAL; END_VAR // Definizione valori REAL in esadecimale. Vedi sito: // https://www.binaryconvert.com/convert_float.html APtr:=ADR(RVars[0]); @APtr:=16#41280000; //10.5 APtr:=ADR(RVars[1]); @APtr:=16#42C80000; //100.0 APtr:=ADR(RVars[2]); @APtr:=16#7F8FFFFF; //NaN (Not a number) APtr:=ADR(RVars[3]); @APtr:=16#7F800001; //NaN (Not a number)
Come vedi dall’esempio sia il valore 16#7F8FFFFF che 16#7F800001 sono riconosciuti come NaN. Da quanto espresso si deduce che non è possibile fare comparazioni sul valore NaN, e certamente potrebbero servire due cose:
- Una definizione di NaN per settare il valore in una variabile.
- Una funzione di verifica se un numero REAL e NAN. La funzione deve verificare se il numero ha gli 8 bit di esponente a “1” e la mantissa diversa da “0”.
Sergio Bertana
Amministratore del forumLa lettura delle termoresistenze viene effettuata con una corrente (Generata da IExc) di 200uA, che su una resistenza da 100 Ohm danno una tensione di 20mV. La corrente è mantenuta così bassa per non riscaldare l’elemento resistivo, ma è evidente che eseguendo la lettura di valori di tensionre dell’ordine di mV è molto facile acquisisre anche i disturbi a 50Hz captati dai cavi.
Il firmware della scheda acquisisce gli ingressi alla massima velocità possibile quindi può succedere che lasciando gli ingressi “appesi” vengano acquisiti anche i disturbi.
Come suggerimento posso dirti di controllare l’uscita di Fault e utilizzando un timer considerare il valore acquisito corretto solo se l’uscita è disattiva per un tempo.
Gennaio 22, 2021 alle 5:19 pm in risposta a: Allocazione in memoria delle variabili strutturate #58864Sergio Bertana
Amministratore del forumIl problema è dovuto ad un errore nella libreria eLLabXTargetAdjLib, è errata la definizione di eNULL, ho provveduto a creare la nuova versione di libreria si può scaricare dal sito.
Sergio Bertana
Amministratore del forumSi puoi farlo e sul pannello cMT puoi aggiungere i pannelli MT80(5/7)1IP quindi il PLC come remoto cosi da poter prelevare direttamente i dati con le nomenclature del PLC e poi passarli in OPC UA.
Sergio Bertana
Amministratore del forumMi cospargo il capo di cenere…
Ho commesso un errore nella copia dell’esempio, mi sono dimenticato di definire il file pointer (Stream di comunicazione) che deve utilizzare il FB SysDMXMng. Ho corretto l’esempio, in pratica sulla chiamata del FB devi definire il file pointer.
FBDMX(File:=Sp.File); //DMX manager
Sergio Bertana
Amministratore del forumSe utilizzi Modbus RTU puoi utilizzare un MPS054, comunicando a 57600 puoi trasferire oltre 5000 caratteri al secondo. Quindi il tempo di rinfresco dei dati dipenderà da quanti caratteri devi trasmettere per la richiesta e ricevere per la risposta Modbus.
Se invece vuoi utilizzare CANOpen devi utilizzare un modulo MPS055 dove puoi configurare i PDU da ricevere e probabilmente sei più veloce rispetto al Modbus ma è un po più complesso da configurare.
Sergio Bertana
Amministratore del forumL’errore che riporti indica che non viene trovato il FB SysDMXMng che è un FB di sistema quindi sicuramente presente.
Nel frattempo ho riportato nel manuale on-line la spiegazione del FB SysDMXMng, ti consiglio di provare ad utilizzare l’esempio riportato nella pagina.
Gennaio 20, 2021 alle 1:57 pm in risposta a: Allocazione in memoria delle variabili strutturate #58824Sergio Bertana
Amministratore del forumC’è stata una versione di LogicLab che aveva questo problema ma sull’ultima versione scaricabile dal nostro sito il problema dovrebbe essere risolto. Io ho provato con questa versione e non ho riscontrato il problema, la mia versione è:
Version: 3.1.1.0
Build Jul 10 2020 17:0007 – 5.12.0.36Puoi verficare la versione che stai utilizzando?
Gennaio 18, 2021 alle 9:08 am in risposta a: Realizzare una comunicazione TCP/IP con protocollo libero #58813Sergio Bertana
Amministratore del forumPuoi provare a creare 2 macro per inviare 2000 caratteri per volta che richiamerai in modalita sincrona dalla tua macro. Credo che il tutto possa funzionare senza troppe latenze.
SYNC_TRIG_MACRO: Triggers the execution of a macro synchronously in a running macro. The current macro will pause until the end of execution of this called macro.
-
AutorePost