Trasmissione stringa su porta seriale con valore di corrente
Home › Forum › Programmazione IEC 61131 (LogicLab) › Trasmissione stringa su porta seriale con valore di corrente
- Questo topic ha 4 risposte, 2 partecipanti ed è stato aggiornato l'ultima volta 13 anni, 10 mesi fa da
Sergio Bertana.
-
AutorePost
-
Giugno 4, 2011 alle 4:16 am #35022
Roberto
PartecipanteDovrei acquisire il valore in uscita da un indicatore di livello 4-20 mA, convertire il valore acquisito ed inviare su porta seriale una stringa con l’indicazione del valore. In questo modo posso da un PC acquisire il valore ed effettuarne la storicizzazione.
Posso avere un esempio di programma che esegua l’invio di una stringa con il valore di corrente su porta seriale.
Giugno 4, 2011 alle 4:21 am #36758Sergio Bertana
Amministratore del forumRicordo che SlimLine gestisce il protocollo Modbus sia Rtu che Ascii, pertanto è possibile da PC inviare comando modbus lettura registri codice 03, Read holding registers, ed acquisire valori da variabili allocate nella DB 100 dello SlimLine dove si può appoggiare il valore di corrente acquisito dal blocco funzione SysGetAnInp, get analog input.
Ma se per semplicità preferisci che sia SlimLine ad inviare una stringa ascii con il valore di corrente acquisito, ecco una semplice FB che invia su seriale una stringa del tipo xx.x mA<CR><LF>, allego programma per download.
VAR_INPUT
Send : BOOL; { DE:”Comando di invio stringa” }
File : FILEP; { DE:”File pointer” }
Current : REAL; { DE:”Current value” }
END_VARVAR
SPulse : BOOL; { DE:”Send pulse” }
i : INT; { DE:”Auxiliary variable” }
END_VAR{ CODE:ST } (* Gestione impulso di “Send” ed uscita stringa. *)
IF NOT(Send) THEN SPulse:=FALSE; RETURN; END_IF;
IF SPulse THEN RETURN; END_IF;
SPulse:=TRUE; (* Send pulse *)
i:=SysVarfprintf(File, ‘%4.1f mA$r$n’, REAL_TYPE, ADR(Current));Giugno 4, 2011 alle 9:14 am #36761Roberto
PartecipanteSe al posto dell’uscita seriale RS232 (od in parallelo alla seriale RS232) volessi attivare anche la porta ethernet per consentire al sistema di controllo di “Pescare” i valori letti dal PLC, pensa sarebbe molto più complicato ?
E’ disponibile qualche esempio di codice relativamente alla comunicazione PLC-PC via TCP/IP ?
Giugno 4, 2011 alle 9:21 am #36762Sergio Bertana
Amministratore del forumRicordo che SlimLine gestisce il protocollo Modbus Over-IP, quindi è sempre possibile con un client modbus effettuare la lettura dei registri via TCP/IP. Ma se tu vuoi una soluzione tipo seriale dove lo SlimLine invia i dati su rete ethernet, puoi utilizzare una connessione UDP.
In pratica utilizzando il blocco funzione SysUDPSktSend, UDP socket send è possibile inviare con protocollo UDP dei dati verso un indirizzo IP ed una porta definiti. Sul PC basta avere la porta aperta in attesa di dati da socket UDP. Il blocco funzione che eseguiva l’uscita dei dati su porta seriale è stato modificato nella parte di uscita verso seriale.
NrOfCh:=SysVarsnprintf(ADR(SOut), 32, ‘%04.1f mA$r$n’, REAL_TYPE, ADR(Current));
NrOfCh:=SysUDPSktSend(File, ADR(SOut), TO_UINT(NrOfCh),’192.168.0.31′, 120);Come si vede la funzione SysVarfprintf è stata sostituita dalla SysVarsnprintf che stampa i dati in una stringa e di seguito la funzione SysUDPSktSend invia la stringa verso la porta UDP 120 del dispositivo con indirizzo 192.168.0.31.
Allego il progetto precedente modificato per inviare i dati sia su porta seriale che su porta UDP, download.
Giugno 6, 2011 alle 6:37 am #36766Sergio Bertana
Amministratore del forumPer il test su PC, è possibile utilizzare la nostra utility Toolly. E’ possibile utilizzarlo sia come normale emulazione terminale seriale, che come client o server sia TCP/IP che UDP.
Nello screnshoot è visualizzato nella configurazione UDP server in ascolto sulla porta 120 della stringa in arrivo dallo SlimLine.
-
AutorePost
- Devi essere connesso per rispondere a questo topic.