Home › Forum › Programmazione IEC 61131 (LogicLab) › Utilizzo funzioni Sysfopen e Sysfclose su porta seriale
- Questo topic ha 1 risposta, 2 partecipanti ed è stato aggiornato l'ultima volta 11 anni, 11 mesi fa da Sergio Bertana.
-
AutorePost
-
Maggio 30, 2012 alle 12:59 pm #35218MichelePartecipante
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 serialeHo 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 ?
Maggio 31, 2012 alle 6:49 am #37258Sergio BertanaAmministratore del forumPer modificare i parametri di comunicazione della porta seriale è necessario eseguirne l’apertura con la Sysfopen poi è possibile con la SysSetSerialMode modificarne i parametri di comunicazione senza doverla chiudere e riaprire. Ogni volta che apri la porta con la Sysfopen la porta viene settata con i parametri di default 115200, e, 8, 1.
SlimLine è un PLC quindi non è possibile arrestare il programma, l’esecuzione ciclica del programma deve sempre continuare. Per eseguire attese puoi creare un programma a stati (Usa lo statement CASE) e puoi controllare il passaggio del tempo di sistema in uS tornato dalla funzione SysGetSysTime.
Ti allego la stampa ed il codice sorgente di un programma che esegue la ricerca della impostazione di un modem. Il programma invia su seriale la stringa “AT<CR>” e controlla la ricezione della stringa di risposta da parte del modem “OK<CR>”, credo sia molto simile a quello che devi fare tu.
-
AutorePost
- Devi essere connesso per rispondere a questo topic.