Home › Forum › Programmazione IEC 61131 (LogicLab) › Invio stringa dati su porta seriale
- Questo topic ha 1 risposta, 1 partecipante ed è stato aggiornato l'ultima volta 10 mesi fa da
Sergio Bertana.
Stai visualizzando 2 post - dal 1 a 2 (di 2 totali)
-
AutorePost
-
Dicembre 5, 2025 alle 11:50 am #84507
Anonimo
InattivoIn una mia applicazione devo invia un comando su porta seriale. Ho realizzato questo programma:
VAR Send : BOOL; (* Comando invio *) CFrame : ARRAY[0..7] OF BYTE; (* Frame comando *) Sp : SysSerialPort; (* Serial port management *) END_VAR IF (SysFirstLoop) THEN Sp.COM:=ADR('COM0'); //COM port definition Sp.Baudrate:=19200; //Baudrate Sp.Parity:='E'; //Parity Sp.DataBits:=8; //Data bits Sp.StopBits:=1; //Stop bits Sp.DTRManagement:=DTR_AUTO_WO_TIMES; //DTR management Sp.DTRComplement:=FALSE; //DTR complement Sp.EchoFlush:=FALSE; //Received echo flush Sp.DTROnTime:=0; //DTR On time delay (mS) Sp.DTROffTime:=0; //DTR Off time delay (mS) Sp.FlushTm:=0; //Flush time (mS) Sp.RxSize:=0; //Rx buffer size Sp.TxSize:=0; //Tx buffer size END_IF; Sp(Open:=TRUE); //Serial port management // Eseguo invio comando IF (Send) THEN Send:=FALSE; //Comando invio CFrame[0]:=16#41; //A CFrame[1]:=16#54; //T CFrame[2]:=16#44; //D CFrame[3]:=16#41; //A CFrame[4]:=16#0D; //<CR> CFrame[5]:=16#30; //0 CFrame[6]:=16#44; //D CFrame[7]:=16#0D; //<CR> eTO_JUNK(Sysfwrite(ADR(CFrame), 1, 8, Sp.File)); END_IF;Il programma funziona ma chiedevo se è possibile ottimizzare il codice inviando direttamente la stringa senza doverla appoggiare sulla variabile CFrame.
Dicembre 5, 2025 alle 12:00 pm #84515Sergio Bertana
Amministratore del forumCi sono diversi modi per ottenere quello che hai chiedi. Ecco la parte di programma interessata con due diverse opzioni di invio:
// Eseguo invio comando IF (Send) THEN Send:=FALSE; //Comando invio eTO_JUNK(SysVfprintf(Sp.File, ADR('%s'), STRING_TYPE, ADR('ATDA$r0D$r'))); eTO_JUNK(Sysfwrite(ADR('ATDA$r0D$r'), 8, 1, Sp.File)); END_IF;- Nella prima ipotesi ho utilizzato la funzione SysVfprintf, indicando in Format il tipo stringa %s. In questo modo viene inviata la stringa calcolandone automaticamente la lunghezza.
- Nella seconda ipotesi ho utilizzato come nel tuo esempio la funzione Sysfwrite, ma in questo caso ho dovuto indicarne la lunghezza di 8 caratteri in Size.
-
AutorePost
Stai visualizzando 2 post - dal 1 a 2 (di 2 totali)
- Devi essere connesso per rispondere a questo topic.