Vai al contenuto

Utilizzo funzioni Sysfopen e Sysfclose su porta seriale

Home Forum Programmazione IEC 61131 (LogicLab) Utilizzo funzioni Sysfopen e Sysfclose su porta seriale

Stai visualizzando 2 post - dal 1 a 2 (di 2 totali)
  • Autore
    Post
  • #35218
    Michele
    Partecipante

    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 ?

    #37258
    Sergio Bertana
    Amministratore del forum

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

Stai visualizzando 2 post - dal 1 a 2 (di 2 totali)
  • Devi essere connesso per rispondere a questo topic.