Vai al contenuto

Trasmissione stringa su porta seriale con valore di corrente

Home Forum Programmazione IEC 61131 (LogicLab) Trasmissione stringa su porta seriale con valore di corrente

Stai visualizzando 5 post - dal 1 a 5 (di 5 totali)
  • Autore
    Post
  • #35022
    Roberto
    Partecipante

    Dovrei acquisire il valore in uscita da un indicatore di livello 4-20 mA, convertire il valore acquisito ed inviare su porta seriale una stringa con l’indicazione del valore. In questo modo posso da un PC acquisire il valore ed effettuarne la storicizzazione.

    Posso avere un esempio di programma che esegua l’invio di una stringa con il valore di corrente su porta seriale.

    #36758
    Sergio Bertana
    Amministratore del forum

    Ricordo che SlimLine gestisce il protocollo Modbus sia Rtu che Ascii, pertanto è possibile da PC inviare comando modbus lettura registri codice 03, Read holding registers, ed acquisire valori da variabili allocate nella DB 100 dello SlimLine dove si può appoggiare il valore di corrente acquisito dal blocco funzione SysGetAnInp, get analog input.

    Ma se per semplicità preferisci che sia SlimLine ad inviare una stringa ascii con il valore di corrente acquisito, ecco una semplice FB che invia su seriale una stringa del tipo xx.x mA<CR><LF>, allego programma per download.

        VAR_INPUT
        Send : BOOL; { DE:”Comando di invio stringa” }
        File : FILEP; { DE:”File pointer” }
        Current : REAL; { DE:”Current value” }
        END_VAR

        VAR
        SPulse : BOOL; { DE:”Send pulse” }
        i : INT; { DE:”Auxiliary variable” }
        END_VAR

        { CODE:ST } (* Gestione impulso di “Send” ed uscita stringa. *)

        IF NOT(Send) THEN SPulse:=FALSE; RETURN; END_IF;
        IF SPulse THEN RETURN; END_IF;
        SPulse:=TRUE; (* Send pulse *)
        i:=SysVarfprintf(File, ‘%4.1f mA$r$n’, REAL_TYPE, ADR(Current));

    #36761
    Roberto
    Partecipante

    Se al posto dell’uscita seriale RS232 (od in parallelo alla seriale RS232) volessi attivare anche la porta ethernet per consentire al sistema di controllo di “Pescare” i valori letti dal PLC, pensa sarebbe molto più complicato ?

    E’ disponibile qualche esempio di codice relativamente alla comunicazione PLC-PC via TCP/IP ?

    #36762
    Sergio Bertana
    Amministratore del forum

    Ricordo che SlimLine gestisce il protocollo Modbus Over-IP, quindi è sempre possibile con un client modbus effettuare la lettura dei registri via TCP/IP. Ma se tu vuoi una soluzione tipo seriale dove lo SlimLine invia i dati su rete ethernet, puoi utilizzare una connessione UDP.

    In pratica utilizzando il blocco funzione SysUDPSktSend, UDP socket send è possibile inviare con protocollo UDP dei dati verso un indirizzo IP ed una porta definiti. Sul PC basta avere la porta aperta in attesa di dati da socket UDP. Il blocco funzione che eseguiva l’uscita dei dati su porta seriale è stato modificato nella parte di uscita verso seriale.

        NrOfCh:=SysVarsnprintf(ADR(SOut), 32, ‘%04.1f mA$r$n’, REAL_TYPE, ADR(Current));
        NrOfCh:=SysUDPSktSend(File, ADR(SOut), TO_UINT(NrOfCh),’192.168.0.31′, 120);

    Come si vede la funzione SysVarfprintf è stata sostituita dalla SysVarsnprintf che stampa i dati in una stringa e di seguito la funzione SysUDPSktSend invia la stringa verso la porta UDP 120 del dispositivo con indirizzo 192.168.0.31.

    Allego il progetto precedente modificato per inviare i dati sia su porta seriale che su porta UDP, download.

    #36766
    Sergio Bertana
    Amministratore del forum

    Per il test su PC, è possibile utilizzare la nostra utility Toolly. E’ possibile utilizzarlo sia come normale emulazione terminale seriale, che come client o server sia TCP/IP che UDP.

    Nello screnshoot è visualizzato nella configurazione UDP server in ascolto sulla porta 120 della stringa in arrivo dallo SlimLine.

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