Inviare stringa dati su porta seriale
Home › Forum › Programmazione IEC 61131 (LogicLab) › Inviare stringa dati su porta seriale
Taggato: #RS232, #SysSerial, #WORD
- Questo topic ha 1 risposta, 2 partecipanti ed è stato aggiornato l'ultima volta 4 anni, 6 mesi fa da
Sergio Bertana.
-
AutorePost
-
Ottobre 15, 2020 alle 10:56 am #57923
nikolas de stephanis
PartecipanteDevo inviare dei dati ad un display matriciale tramite la porta seriale dello slimLine “COM0”. Ho realizzato il cablaggio del connettore RJ45 – DB9 seguendo le istruzioni sul sito Elsist e sul manuale del produttore del pannello eseguendo una semplice connessione a tre fili con incrocio dei segnali Tx e Rx.
Sulla parte di configurazione e di cablaggio sono abbastanza sicuro e di conseguenza penso di aver mal usato il codice per la comunicazione rs232. Il messaggio da inviare al display è:
DData[0]:=13; //0D HEAD 1 DData[1]:=3; //03 HEAD 2 DData[2]:=1; //01 HEAD 3 DData[3]:=1; //01 ID DData[4]:=1; //01 COMMAND 1 = NEXT 2= ON DEMAND DData[5]:=1; //01 NUMERO PAGINA O NEXT SE 1 E COMMAND 1 DData[6]:=0; //00 DData[7]:=0; //00
Devo concatenare i valori come se fossero dei char e inviarli tutti sulla porta?
Aggiungo che inviando tale sequenza da uartAssistant il display cambia il messaggio regolarmente.Ottobre 15, 2020 alle 11:02 am #57929Sergio Bertana
Amministratore del forumScusa se ho un po corretto il tuo post riportando solo le cose essenziali, cioè la stringa da inviare al display. Nel tuo programma l’errore era che nell’utilizzare la funzione Sysfputc non hai usato il corretto file pointer. Ho corretto il tuo programma utilizzando la funzione Sysfwrite.
VAR Start : BOOL; (* Comando start *) Pulse : BOOL; (* Pulse *) i : UDINT; (* Auxiliary variable *) DData : ARRAY[0..7] OF BYTE; (* Display data *) Serial : SysSerialPort; (* Serial port management *) END_VAR // ***************************************************************************** // PROGRAM "DisplayOut" // ***************************************************************************** // Questo programma esegue l'invio di una stringa ad una stampante. // ----------------------------------------------------------------------------- // ------------------------------------------------------------------------- // INITIALIZATION // ------------------------------------------------------------------------- IF (SysFirstLoop) THEN // Inizializzo porta seriale. Serial.COM:=ADR('COM0'); //COM port definition Serial.Baudrate:=9600; //Baudrate Serial.Parity:='N'; //Parity Serial.DataBits:=8; //Data bits Serial.StopBits:=1; //Stop bits Serial.DTRManagement:=DTR_AUTO_WO_TIMES; //DTR management Serial.DTRComplement:=FALSE; //DTR complement Serial.EchoFlush:=FALSE; //Received echo flush Serial.DTROnTime:=0; //DTR On time delay (mS) Serial.DTROffTime:=0; //DTR Off time delay (mS) Serial.FlushTm:=0; //Flush time (mS) Serial.RxSize:=0; //Rx buffer size Serial.TxSize:=0; //Tx buffer size // Preparo messaggio da inviare. DData[0]:=13; //0D HEAD 1 DData[1]:=3; //03 HEAD 2 DData[2]:=1; //01 HEAD 3 DData[3]:=1; //01 ID DData[4]:=1; //01 COMMAND 1 = NEXT 2= ON DEMAND DData[5]:=1; //01 NUMERO PAGINA O NEXT SE 1 E COMMAND 1 DData[6]:=0; //00 DData[7]:=0; //00 END_IF; // ------------------------------------------------------------------------- // ESEGUO INVIO MESSAGGIO // ------------------------------------------------------------------------- // Controllo variazione comando start. IF (Start <> Pulse) THEN Pulse:=Start; //Pulse // Eseguo invio solo su fronte attivazione. IF (Start) THEN i:=Sysfwrite(ADR(DData), 8, 1, Serial.File); END_IF; END_IF; // [End of File]
-
AutorePost
- Devi essere connesso per rispondere a questo topic.