Funzioni ed FB comunicazione multimaster (eMMasterDTxferLib)

Attenzione! Per utilizzare la libreria occorre importarla nel proprio progetto. Vedere capitolo relativo all”import delle librerie.

Questa libreria rende disponibili una serie di funzioni e di blocchi funzione per la gestione della comunicazione multimaster su linea seriale. La possibilità di fare dialogare su una unica linea seriale RS422/485 più dispositivi master permette di velocizzare il dialogo tra i sistemi ottimizzando l’impegno della linea seriale.

Questa particolarità è molto apprezzata nelle connessioni radio, dove radiomodems che sfruttano tutti la stessa frequenza possono dialogare tra di loro minimizzando l’impegno della banda ed aumentando i tempi di trasferimento delle informazioni.

Nelle comunicazioni tra diversi sistemi su doppino seriale e/o con radiomodems tipicamente si utilizza un protocollo a pacchetto (Esempio modbus) ed uno dei sistemi che funge da master dialoga ciclicamente con tutti gli altri sistemi della rete scambiando le informazioni tra di loro. Come si può ben capire questa soluzione ha i seguenti difetti:

  1. Tutta la comunicazione è delegata al sistema master, nel caso di guasto di quest’ultimo tutta la rete è ferma.
  2. Il sistema master deve interrogare i vari sistemi slaves per conoscere se hanno dati da inviare al master od agli altri slaves. Questo implica un impegno del canale di comunicazione anche quando gli slaves non hanno informazioni utili da scambiare.
  3. Lo scambio dati tra due sistemi slaves deve passare dal sistema master e questo rallenta l’invio dei dati da un sistema all’altro oltre ad un maggiore impegno del canale di comunicazione.

Utilizzando questa libreria è possibile fare dialogare i diversi sistemi direttamente tra di loro in modalità peer to peer. In questo modo un sistema invia dati all’altro solo quando è necessario garantendo un rapido invio dei dati con il minimo impegno del canale di comunicazione.

Comunicazione in broadcast

Nel caso in cui un dispositivo su di un nodo della rete sia in comunicazione con molti altri dispositivi ed i dati in scambio siano gli stessi per tutti i dispositivi è possibile utilizzare il blocco funzione BroadcastDataSend che invia il pacchetto dati in broadcast, tutti i dispositivi che hanno come nodo di destinazione ToNode nel blocco funzione DataTxferClient l’indirizzo del nodo che invia il messaggio in broacast lo riceveranno senza pero inviare l’acknowledge.

Questo significa che la trasmissione in broadcast permette di velocizzare il trasferimento dati da un nodo ad altri nodi permettendo altresì la ricezione simultanea dei dati inviati su tutti i nodi. Ma non è certa l’avvenuta ricezione dei dati da parte dei nodi destinatari, quindi conviene fare seguire ad una trasmissione in broadcast anche una trasmissione peer to peer. Nella figura seguente è riportato uno scenario tipico di comunicazione multimaster via radiomodem.

Il PLC nodo 0 scambia dati con i PLC nodo 1 e 2.

Il PLC nodo 1 scambia i dati con i PLC nodo 0, 2 e 3.

Il PLC nodo 2 scambia i dati con i PLC nodo 0, 1 e 3.

Il PLC nodo 3 scambia i dati con i PLC nodo 1 e 2.

Nel PLC nodo 0 è gestita anche la FB di invio in broadcast, attivando la trasmissione i dati saranno ricevuti solo dai PLC nodo 1 e 2 e non dal PLC nodo 3 perchè non ha attivo nessun scambio con il PLC del nodo che ha inviato il messaggio di broadcast.

image0

MMasterDataTxfer, multimaster data transfer

Type Library
FB eMMasterDTxferLib_C00 0

image1

Questo blocco funzione esegue l’interfaccia con il terminale di I/O definito in File per gestire la comunicazione multimaster su rete multidrop. Questo è un blocco funzione protetto per utilizzarlo occorre richiedere il codice di protezione, vedi protezione funzioni e blocchi funzione. E” comunque possibile utilizzarlo liberamente in modo test per 30 Min.

Il blocco funzione agisce da server di comunicazione gestendo il dispositivo di I/O, verranno poi connessi dei blocchi funzione client che gestiscono lo scambio dati tra i sistemi. L’FB ritorna un MMDtTxfID che deve essere passato alle FB client (Esempio DataTxferClient).

In MyNode occorre definire il numero di nodo del sistema, in una rete il numero di nodo deve essere univoco. Tutti i messaggi che hanno come nodo di destinazione il valore di MyNode saranno ricevuti dalla FB che li passerà alle FB clients per la verifica.

La comunicazione multimaster si basa sul controllo del canale di comunicazione libero e sulla gestione delle collisioni, i parametri per questa gestione sono impostabili in MinFreeTm e MaxFreeTm. In questi parametri occorrerà definire tempi piccoli per comunicazioni su linea seriale e tempi più lunghi nel caso di comunicazione via radiomodem.

In MinChkTm e MaxChkTm è possibile impostare un tempo per l’invio di un messaggio di controllo verso gli altri sistemi della rete. L’FB abiliterà a turno sequenzialmente le varie FB clients per uno scambio dati con il peer con cui l’FB dialoga controllando la connessione. Se uno o entrambi i valori sono impostati a 0 il controllo non viene eseguito.

In RxErrors è ritornato il conteggio degli errori di ricezione, l’FB monitora continuamente il canale di comunicazione e se i dati ricevuti sono in errore viene incrementato il contatore. Errori possono manifestarsi in caso di collisioni sul canale di comunicazione. In caso di errore esecuzione viene attivata per un loop l’uscita Fault.

Enable (BOOL) Comando di abilitazione blocco funzione.
File (FILEP) Flusso dati stream ritornato dalla funzione Sysfopen.
MyNode (USINT) Nodo identificativo del sistema (Range da 0 a 250).
Timeout (UDINT) Tempo attesa frame di acknowledge dal sistema peer (mS).
MinFreeTm (REAL) Tempo minimo attesa canale di comunicazione libero (S).
MaxFreeTm (REAL) Tempo massimo attesa canale di comunicazione libero (S).
MinChkTm (REAL) Tempo minimo attesa invio frame controllo verso sistema peer (S).
MaxChkTm (REAL) Tempo massimo attesa invio frame controllo verso sistema peer (S).
Enabled (BOOL) Attivo su abilitazione blocco funzione.
Fault (BOOL) Attivo per un loop su errore esecuzione.
MMDtTxfID (UDINT) ID server multimaster da passare alle FB clients (Esempio DataTxferClient).
RxFrames (UDINT) Counter frame dati ricevuti. Sono conteggiati tutti i frames corretti indipendentemente se diretti a questo nodo.
TxFrames (UDINT) Counter frame dati trasmessi.
RxErrors (UDINT) Counter errori frame dati ricevuti.

Codici di errore

In caso di errore si attiva l’uscita Fault, con SysGetLastError è possibile rilevare il codice di errore.

10040010 Valore di File non definito.
10040020 FB protetta, terminato tempo funzionamento in modo demo.
10040050 Timeout esecuzione.
10040070 Errore case gestione.

DataTxfer Client, Data transfer client

Type Library
FB eMMasterDTxferLib_C00 0

image2

Questo blocco funzione esegue lo scambio dati con un altro sistema su canale di comunicazione. Si collega al blocco funzione MMasterDataTxfer di gestione dispositivo di comunicazione, occorre passare MMDtTxfID in uscita dal blocco funzione server.

Il blocco funzione scambia i dati con il sistema definito in ToNode. In pratica il valore di ToNode deve coincidere con il valore di MyNode della FB MmasterDataTxfer dell’altro sistema.

In RxData ed in TxData occorre definire l’indirizzo del buffer dati che si vuole scambiare con il sistema peer. In DLen la dimensione in bytes del buffer dati in scambio (I buffers RxData e TxData devono avere la stessa dimensione). L’FB controlla se vi è una variazione dei dati nel buffer TxData e ne esegue immediatamente l’invio al sistema peer che risponde con i dati del proprio buffer TxData che saranno trasferiti nel buffer RxData.

L’uscita PeerOk è attiva se la comunicazione con il sistema peer è operativa, in caso di errori di comunicazione l’uscita si disattiva. In RxFrames e TxFrames è ritornato il conteggio dei frames dati ricevuti ed inviati dalla FB verso il sistema peer, in AckErrors il numero di errori di acknowledge da parte del sistema peer. In caso di errore esecuzione viene attivata per un loop l’uscita Fault.

Enable (BOOL) Comando di abilitazione blocco funzione.
MMDtTxfID (UDINT) ID server multimaster in uscita dalla FB server (MmasterDataTxfer).
ToNode (USINT) Nodo identificativo del sistema peer con cui scambiare i dati (Range da 0 a 250).
RxData (@USINT) Puntatore al buffer dove devono essere trasferiti i dati ricevuti.
TxData (@USINT) Puntatore al buffer dove sono presenti i dati da trasmettere.
DLen (UDINT) Numero di bytes scambiati (Max 32).
Enabled (BOOL) Attivo su abilitazione blocco funzione.
Fault (BOOL) Attivo per un loop su errore esecuzione.
RxOk (BOOL) Attivo per un loop ad ogni ricezione dati da sistema peer.
PeerOk (BOOL) Attivo se scambio dati con sistema peer è Ok.
RxFrames (UDINT) Counter frame dati ricevuti.
TxFrames (UDINT) Counter frame dati trasmessi.
AckErrors (UDINT) Counter errori acknowledge dati da sistema peer.

Codici di errore

In caso di errore si attiva l’uscita Fault, con SysGetLastError è possibile rilevare il codice di errore.

10041010 MMDtTxfID non definito.
10041020 MMDtTxfID non corretto.
10041050 Valore DLen errato.
10041200 Frame dati ricevuto da sistema peer ha lunghezza errata. Verificare DLen sistema peer.

Esempi

Nell’esempio è gestito lo scambio di 8 BOOL con il sistema peer nodo 1 (MyNode=1).

Definizione variabili

image3

Esempio LD

image4

Broadcast DataSend, broadcast data send

Type Library
FB eMMasterDTxferLib_C00 0

image5

Questo blocco funzione esegue l’invio di dati in modo broadcast. Si collega al blocco funzione MMasterDataTxfer di gestione dispositivo di comunicazione, occorre passare MMDtTxfID in uscita dal blocco funzione server.

Il blocco funzione invia i dati presenti nel buffer puntato da TxData con indirizzo di broadcast 16#FF. Tutti i sistemi che eseguono la FB DataTxferClient che hanno ToNode uguale al valore di Node definito nella MMasterDataTxfer riceveranno i dati inviati.

In TxData occorre definire l’indirizzo del buffer ed in DLen la dimensione in bytes del buffer dati che si vuole scambiare con i sistemi peer Ad ogni attivazione dell’ingresso Enable viene eseguito l’invio dei dati in broadcast, terminato l’invio si attiva l’uscita Done che rimane attiva sino alla disattivazione dell’ingresso Enable. Per effettuare una nuova trasmissione occorre disattivare e poi riattivare l’ingresso Enable.

Enable (BOOL) Comando di abilitazione blocco funzione.
MMDtTxfID (UDINT) ID server multimaster in uscita dalla FB server (MmasterDataTxfer).
TxData (@USINT) Puntatore al buffer dove sono presenti i dati da trasmettere.
DLen (UDINT) Numero di bytes scambiati (Max 32).
Done (BOOL) Attivo al termine dell’invio dei dati, rimane attivo fino alla disabilitazione di Enable.
Fault (BOOL) Attivo per un loop su errore esecuzione.
TxFrames (UDINT) Counter frame dati trasmessi.

Codici di errore

In caso di errore si attiva l’uscita Fault, con SysGetLastError è possibile rilevare il codice di errore.

10044010 MMDtTxfID non definito.
10044020 MMDtTxfID non corretto.
10044050 Valore DLen errato.