Vai al contenuto
PLC Forum


Beckhoff & ModBus TCP / IP


Raffaele De Martino

Messaggi consigliati

Raffaele De Martino

Buongiorno,

innanzitutto complimenti per il Forum, lo seguo sempre con molto interesse, pur non avendone mai preso parte.

 

Mi trovo a dover mettere le mani su un PLC Beckhoff che dovrà interrogare via ModBus TCP / IP alcuni Slave (1 PLC non Beckhoff e 1 PLC Beckhoff) e fare anche da Master.

- Master vs. PLC non Beckhoff.

- Master e Slave vs. PLC non Beckhoff.

 

Sto da alcuni giorni studiando il tutto, ma con scarsi risultati, in particolare fatico a comprendere la metodologia di esecuzione delle chiamate ModBus verso gli altri sistemi. In particolare quello che non riesco a figurarmi è la gestione degli indirizzamenti delle chiamate. Mi rendo conto sia una problematica banale, ma da profano al mondo Beckhoff, non vorrei mal interpretare il tutto.

 

Faccio un esempio.Se dovessi andare a leggere il Registro ModBus n. 3786 dal PLC non Beckhoff, mi basterebbe usare la "FB_MBReadRegs" indirizzandola verso l'IP del Partner e impostando "nMBAddr" a 3786? E, se questo fosse il caso, tramite il "pDestAddr" andrei poi a definire dove appoggiare il registro letto? Dovendo invece leggere dal PLC Beckhoff cambierebbe qualcosa?

 

Secondariamente, visto che i 2 PLC Beckhoff sarebbero sulla stessa Rete, per lo scambio dati vi sono altre modalità oltre al ModBus?

 

Grazie in anticipo a tutti per il tempo.

 

Raffaele De Martino

A.V.A. srl

Link al commento
Condividi su altri siti


ciao,

 

questo è un esempio di una lettura dati da una bilancia in modbus TCP

dichiarazioni:

            LEGGI_BILANCIA : FB_MBReadRegs;

            DATI_LETTI    :ARRAY[0..10] OF WORD;

 

 codice:

// LEGGI DA BILANCIA con FB_MBReadRegs

LEGGI_BILANCIA (

            sIPAddr:= '192.168.10.23',

            nTCPPort:= 502,

            nUnitID:= unitID, // nel mio caso = 255 dipende comunque dall'oggetto in cui vai a leggere

            nQuantity:= 7, // quantità di word da leggere

            nMBAddr:= 3786, // partendo dall'indirizzo 3786 della prima word da leggere

            cbLength:= SIZEOF(DATI_LETTI_ROV_1), // lettura lunghezza dei dati in cui verranno scritti i valori letti

            pDestAddr:= ADR(DATI_LETTI_ROV_1), // estrazione indirizzo dei dati in cui verranno scritti i valori letti

            bExecute:= CmdRead , // comando di lettura eseguito su fronte 

            tTimeout:= T#500MS,

            bBusy=> , // uscita di lettura in corso

            bError=> ,

// eventuale segnale di errore (bool)

            nErrId=> , // codice dell'errore

            cbRead=> ); // quantita di dati letti

==========================================================================

se devi parlare tra due cpu Beckhoff esiste la possibilità di configurare la modalità EAP

funzionalità semplice per scambiare dati tra plc Beckhoff

qui di seguito trovi il riferimento all'information system di Beckhoff.

immagine.thumb.png.7c5f771c00253721e94aaf1d028b16db.png

inoltre ti ricordo che per comunicare in modbus tcp devi installare la apposita applicazione sul plc Beckhoff

che puoi scaricare dal sito Beckhoff in Download, software, Twincat3 (o Twincat 2), TFxxxx Function, connettivity, tc3 modbus tcp.

Devi anche sapere che per default, se vai a leggere in modbus tcp in un Plc Beckhoff la MW0 corrisponde all'indirizzo modbus 12288 0 16#3000 in esadecimale.

In ogni caso questa cosa può essere cambiata.

 

spero di esserti stato utile.

un saluto

Valvolina

 

 

Link al commento
Condividi su altri siti

Crea un account o accedi per commentare

Devi essere un utente per poter lasciare un commento

Crea un account

Registrati per un nuovo account nella nostra comunità. è facile!

Registra un nuovo account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...