Salve a tutti, ho un problema con la gestione dello stream su seriale. Devo realizzare utilizzando il device SlimLine la seguente logica che descrivo a steps:
1) Apertura seriale a 9600
2) Invio comando a 9600
3) Ricezione risposta device a 9600
4) Chiusura porta
5) Riapertura Seriale a 19200
6) Invio comando a 19200
7) Ricezione risposta device a 19200
8) Chiusura seriale
Ho realizzato la seguente logica, FpSeriale è una variabile globale. La com si apre sempre a 115200 ma togliendo la sysfclose si apre a 9600. La logica e eseguita nel task Back .
(* Apro la COM0 port in read/write. *)
IF (FpSeriale = NULL) THEN
FpSeriale:=Sysfopen(‘COM0’, ‘rw’);
i:=SysGetSerialMode(ADR(Sm), FpSeriale);
Sm.Baudrate:=9600;
Sm.Parity:=’E’;
Sm.DTRManagement:=DTR_ON;
i:=SysSetSerialMode(ADR(Sm), FpSeriale);
END_IF;
IF (SysClock1000 = Pulse) THEN RETURN; END_IF;
Pulse:=SysClock1000;
(* Invio carattere alla seriale *)
IF (FpSeriale <> NULL) THEN
TxString:=’/?51034716!$r$n’;
TxChars:=Sysfwrite(ADR(TxString), LEN(TxString), 1, FpSeriale); (* Transmitted characters *)
END_IF;
Come posso fare ad aprire la porta ad una velocità chiuderla e riaprila ad un’altra velocità ?
Concettualmente farei sysfopen a 9600 poi le operazioni sysfclose() di nuovo sysfopen a 19200 e sysfclose() ma non riesco a far funzionare questa logica la porta si riapre sempre a 115200.
Infine esiste uno sleep che mi permette di attendere n ms? Devo fare un tick per contare il tempo ?