In 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.