Vai al contenuto

Configurazione Modbus Slave su SlimLine

Home Forum Programmazione IEC 61131 (LogicLab) Configurazione Modbus Slave su SlimLine

Stai visualizzando 6 post - dal 1 a 6 (di 6 totali)
  • Autore
    Post
  • #79154
    info
    Partecipante

    Sto cercando di capire come utilizzare FB ModbusSlave lato comandi specifici (ok per il resto indirizzi, porte, etc…).

    Ho una apparecchiatura che chiede lo stato di 8 ingressi all’indirizzo 0 (con comando 2) e scrive lo stato di 8 uscite sempre all’indirizzo 0 (con comando 15)

    Ho guardato tutti i vari post ed esempi ma non capisco come rispondere ai 2 comandi perchè vedo che nel FB c’è solo un area di memoria che penso sia l’area di scambio. Penso di aver capito che con il Done posso leggere la memoria per capire che comando mi è stato inviato ed in caso di scrittura prendo i valori inviati e facce le mie operazioni, ma se il comando è la lettura dove scrivo i valori e come attivo la risposta? o la risposta la gestisce sempre la FB automaticamente ma in questo caso da dove prende i valori da restituire?

    Grazie spero di essere stato abbastanza chiaro.

    #79158
    Sergio Bertana
    Amministratore del forum

    Il FB ModbusSlave permette di gestire in modo autonomo le funzioni Modbus supportate (FCode) agendo sull’area di memoria definita nei parametri. Forse riesco a darti una spiegazione più chiara rispondendo alla tue necessità.

    Partiamo con l’indirizzo, Modbus standard parte da indirizzo 1 ma sottrae 1 nel frame di richiesta, quindi in realtà chiede indirizzo 0. Ci sono molti dispositivi che utilizzano un Modbus zero based dove l’indirizzo definito è l’indirizzo inviato nel frame Modbus. Visto che mi parli di indirizzo 0 mi sembra di capire che il tuo dispositivo appartenga a questa categoria. Il FB ModbusSlave ha l’ingresso Absolute che permette di gestire questa differenza.

    “Chiede lo stato di 8 ingressi all’indirizzo 0 (con comando 2)”: Al FB arriverà un frame di richiesta con codice 16#02 Read input status con indirizzo 0. Il FB sottrae dall’indirizzo il valore di Offset, che quindi dovrai impostare a 0. Leggerà lo stato di 8 variabili BOOL dal buffer di memoria definito in Buffer e ne ritornerà il valore in un frame Modbus di risposta al tuo dispositivo.

    “Scrive lo stato di 8 uscite all’indirizzo 0 (con comando 15)”: Al FB arriverà un frame di richiesta con codice 16#0F Force Multiple Coils con indirizzo 0. Il FB sottrae dall’indirizzo il valore di Offset, che quindi dovrai impostare a 0. Scriverà lo stato di 8 variabili BOOL nel buffer di memoria definito in Buffer con i valori presenti nel frame Modbus di comando ed invierà un frame Modbus di risposta al tuo dispositivo.

    La stranezza è che il tuo dispositivo legge e scrive le stesse 8 variabili BOOL, quindi in pratica è lui che si autoaggiorna. Mi sembrava più logico che leggesse e scrivesse ad indirizzi diversi.

    #79164
    Sergio Bertana
    Amministratore del forum

    Aggiungo per gli esperti di Modbus la possibilità d utilizzare il FB ModbusGateway per modificare i frame Modbus ricevuti da un dispositivo prima di inoltrarli ad un’altro dispositivo. Il FB gestisce due stream di comunicazione, i frame Modbus ricevuti da IFile con il tipo di protocollo definito in IType sono elaborati ed inviati in uscita su OFile con con il tipo di protocollo definito in OType.

    Volendo utilizzare il gateway per comunicare con il FB ModbusSlave sullo stesso modulo SlimLine dovrai gestire una connessione socket in localhost dove OFile del gateway è connesso ad un SysTCPClient che si connette all’indirizzo 127.0.0.1 di un SysTCPServer cui connetti il File della FB ModbusSlave. In questo modo i dati in IFile del gateway che arrivano dal tuo dispositivo verranno rediretti alla FB ModbusSlave.

    Ora volendo modificare gli indirizzi di lettura e scrittura potrai eseguire le modifiche sui frame in ingresso collegandoti ad ITrigger e modificare i frame in risposta collegandoti a OTrigger.

    #79175
    info
    Partecipante

    Ma in realtà lavorando con schede IO remote è normale che la scrittura delle uscite e la lettura degli ingressi sia sullo stesso indirizzo perchè il comando ovviamente fa una operazione diversa.

    Qui mi pare di intuire che il FB lavora autonomamente sul buffer indicato quindi sia che uso un comando Force Multiple Coil o Write Multiple Register ottengo i dati nella stessa posizione (a parte la dimensione).

    In questo modo però se per la lettura il FB legge sempre dalla stessa memoria in modo autonomo io non so che dati sono stati richiesti per preparare lo stato degli ingressi o lo stato di registri da mettere nel buffer in risposta al comando di lettura.

    Se è così purtroppo devo cambiare sistema oppure realizzare completamente il protocollo con la semplice connessione TCP.

    #79179
    Sergio Bertana
    Amministratore del forum

    Quindi se ho ben capito tu vuoi utilizzare un  modulo SlimLine come I/O remoto di un dispositivo Modbus master che legge/scrive gli I/O utilizzando i comandi 16#02 Read input status e 16#0F Force Multiple Coils mappandoli sempre ad indirizzo 0.

    Se è così purtroppo è come hai giustamente detto tu, il FB opera in modo autonomo operando sempre sullo stesso buffer di memoria quindi non è possibile intercettare i comandi di lettura/scrittura per aggiornare gli I/O.

    #79180
    info
    Partecipante

    Si esatto, speravo, come ho trovato su tanti altri plc, bus coupler, etc.., che il modbus gestito in automatico dal sistema rispondesse con lo stato degli ingressi fisici e mi permettesse di scrivere le uscite fisiche.

    Peccato, in questo modo devo vedere se mi costa meno fare una gestione completa dei comandi modbus che mi servono o cambiare sistema.

    Grazie comunque delle informazioni.

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