Vai al contenuto

Inviare stringa dati su porta seriale

Home Forum Programmazione IEC 61131 (LogicLab) Inviare stringa dati su porta seriale

Taggato: , ,

Stai visualizzando 2 post - dal 1 a 2 (di 2 totali)
  • Autore
    Post
  • #57923
    nikolas de stephanis
    Partecipante

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

    #57929
    Sergio Bertana
    Amministratore del forum

    Scusa 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]
Stai visualizzando 2 post - dal 1 a 2 (di 2 totali)
  • Devi essere connesso per rispondere a questo topic.