Sergio Bertana
Risposte nei forum create
-
AutorePost
-
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.
Gennaio 18, 2021 alle 8:30 am in risposta a: Connessioni Modbus RTU/TCP con rete di dispositivi #58812Sergio Bertana
Amministratore del forumSi certo puoi usare il FB ModbusMaster con connessione seriale per gestire la comunicazione in RTU e visto che mi parli di Host PC credo che anche loro agiscano come slave Modbus quindi puoi usare il FB ModbusMaster anche per comunicare con loro in TCP/IP usando il FB SysTCPClient. C’è già un esempio nella pagina del FB ModbusMaster.
Se i registri sono continuativi puoi utilizzare più istanze della FB ModbusMaster in cascata, in pratica il Done della 1a FB si connette all’Enable della successiva e così via fino all’ultima il cui Done negato si connette all’Enable della 1a.
Se invece i registri sono distanti tra di loro e devi quindi gestire più richieste Modbus puoi utilizzare il FB ACModbus.
Siccome devi collegarti a più hosts se vuoi avere più velocità puoi istanziare 6…8 FB SysTCPClient e altrettante istanze ModbusMaster in modo da poter comnunicare in parallelo con tutti gli Hosts.
Gennaio 15, 2021 alle 10:56 am in risposta a: Comunicazione Modbus RTU con Energy meter SDM120 #58807Sergio Bertana
Amministratore del forumQuindi se ho capito non utilizzi il FB EastronSDM120, ma vuoi provare a realizzare tu il programma con il FB ModbusMaster?
Allora se devi comunicare con più dispositivi in RS485 multidrop devi utilizzare la tecnica delle FB in cascata, in pratica istanzi più FB ModbusMaster tutte condividono il File in uscita dalla SysSerialPort. Il Done della prima FB lo colleghi all’Enable della seconda e così via, il Done dell’ultima istanza lo colleghi invertito all’Enable della prima. Puoi intrudurre una pausa di attesa tra le comunicazioni defindendo il valore di Delay.
Ma molto meglio in questo caso utilizzare il FB ACModbus, che ti permette di connetterti a più dispositivi in multidrop utilizzando un solo FB ModbusMaster.
Sergio Bertana
Amministratore del forumYes the SlimLine must be powered with a voltage from 10 to 30 Vdc.
Gennaio 15, 2021 alle 8:23 am in risposta a: Comunicazione Modbus RTU con Energy meter SDM120 #58798Sergio Bertana
Amministratore del forumQuando parli di tutorial credo tu ti riferisca a questo video, dove ho spiegato come eseguire l’acquisizione dei dati dagli Energy meter SDM120.
Ora immagino tu abbia utilizzato per la lettura il FB EastronSDM120, che ne gestisce completamente la lettura. Ma come vedi il FB ha il parametro Node dove devi definire il nodo Modbus del meter da acquisisre.
In pratica ogni SDM120 deve avere il proprio indirizzo di nodo uno diverso dall’altro, di default l’indirizzo di nodo è 1, per cambiarlo devi seguire le informazioni del manuale, in pratica devi tenere premutoil tasto sul frontale per entrare in Set parametri e poi inviare un comando Modbus di scrittura indirizzo di nodo.
Sergio Bertana
Amministratore del forumRicordo che attualmente SlimLine Raspberry rispetto alle altre versioni di SlimLine, non è realtime e quindi i task Slow e Fast sono eseguiti con jitter che potrebbero essere elevati in relazione al carico dei vari core della CPU. Quindi nel tuo caso non conoscendo quanto il server MySQL appesantisca la CPU, non posso darti una risposta precisa.
Può lanciare il comando “top” o “htop” da una connessione SSH (Utilizza Putty o MobaXTerm) per verificare il carico CPU.
Prossimamente ma al momento non ho una data, nelle prossime versioni del runtime LogicLab, ci sarà una FB utilizzabile per calcolare sia i tempi di esecuzione dei vari task che i jitter di ognuno di essi.
-
AutorePost