Questo blocco funzione esegue il trasferimento di un blocco di memoria tra due sistemi in File occore definire lo stream di comunicazione utilizzato (La comunicazione deve essere Full-duplex). L’uscita Linked si attiva quando si è verificata la corretta connessione tra i due sistemi, e per garantire che i due sistemi siano sempre correttamente interconnessi anche se non vi è variazione nei dati da trasmettere viene comunque inviato un pacchetto dati ogni tempo definito in Heartbeat.
Il parametro Timeout definisce il tempo massimo per il trasferimento dei dati, l’invio dei dati si conclude con la ricezione di un acknowledge da parte dell’altro sistema, un ciclo di invio dati e ricezione acknowledge richiede al minimo 2 loop di esecuzione programma. Se dopo l’invio non viene ricevuto acknowledge entro il tempo definito viene generato errore.
L’invio dei dati è automatico sulla variazione di uno qualsiasi dei bytes del buffer di trasmissione, RxDataOk si attiva per un loop ad ogni ricezione dati dall’altro sistema, TxDataSent si attiva per un loop al termine della trasmissione dei dati verso l’altro sistema.
Programma “DataExchange”
E’ disponibile il progetto LogicLab DataExchange (Download) che trasferito su 2 sistemi SlimLine, tramite una pagina web di configurazione permette di realizzare lo scambio dati tra i due sistemi con protocollo UDP. Il sistema server utilizza il FB SysUDPServer mentre il sistema client utilizza il FB SysUDPClient.
Utilizzando LogicLab è possibile modificare il programma secondo le proprie esigenze per permettere la comunicazione con protocollo TCP o utilizzando la comunicazione seriale. L’area di scambio dati può essere ridimensionata a proprio piacere per permettere lo scambio non solo di I/O logici ma anche di valori analogici o altre informazioni.
Descrizione
Enable (BOOL) Comando abilitazione.
SpyOn (BOOL) Se attivo permette di spiare il funzionamento della FB (Vedi articolo).
TXData (BOOL) Se attivato comanda la trasmissione dei dati all’altro sistema. Và resettato su attivazione di TxDataSent.
AutoTxD (BOOL) Se attivo i dati sono inviati automaticamente all’altro sistema su variazione dati in TxDBuffer.
File (eFILEP) Stream di comunicazione con l’altro sistema.
RxDBuffer (PVOID) Indirizzo buffer dove devono essere trasferiti i dati ricevuti.
RxDSize (UDINT) Dimensione buffer dati ricevuti. Deve coincidere con il valore di TxDSize dell’altro sistema.
TxDBuffer (PVOID) Indirizzo buffer dati da inviare. Ad ogni variazione del contenuto del buffer l’intero buffer è inviato all’altro sistema.
TxDSize (UDINT) Dimensione buffer dati da inviare. Deve coincidere con il valore di RxDSize dell’altro sistema.
Heartbeat (REAL) Tempo massimo in cui deve esserci uno scambio dati tra i due sistemi espresso in secondi. Se non vi è variazione nei dati da trasmettere ogni tempo definito il sistema client invia un pacchetto dati. Deve essere definito lo stesso valore in entrambi i sistemi.
Timeout (REAL) Tempo massimo ricezione acknowledge su invio dati espresso in secondi. Se a seguito di un invio dati nel tempo definito non viene ricevuto l’acknowledge si genera errore. Deve essere definito lo stesso valore in entrambi i sistemi.
Connect (BOOL) Comanda la connessione con l’altro sistema.
Linked (BOOL) Si attiva se i due sistemi client e server sono correttamente interconnessi.
Fault (BOOL) Attivo per un loop se errore esecuzione.
RxDataOk (BOOL) Attivo per un loop alla ricezione dati.
TxDataSent (BOOL) Attivo per un loop su alla ricezione dell’acknoledge dati inviati all’altro sistema.
RxPackets (UDINT) Contatore pacchetti ricevuti.
TxPackets (UDINT) Contatore pacchetti trasmessi.
CTime (REAL) Tempo comunicazione (S).
Errors (UDINT) Numero di errori.

Trigger di spy
Se SpyOn attivo è possibile utilizzare la console di spionaggio per verificare il funzionamento della FB. Sono previsti vari livelli di triggers.
Livelli di trigger
Trigger | Descrizione |
16#00000001 | Tx: Trasmissione dati e/o acknowledge. |
16#00000002 | Rx: Ricezione dati e/o acknowledge. |
16#40000000 | Error: Errore esecuzione. |
Esempi
Come utilizzare gli esempi.
Nell’esempio è gestito lo scambio dati su di uno stesso sistema utilizzando una connessione UDP in localhost (IP 127.0.0.1).