Scrivere i dati nello slave con offset
Utilizzate questa istruzione per scrivere i dati da un master in uno slave tramite la porta di comunicazione che utilizza il protocollo MEWTOCOL-COM o Modbus RTU, come definito nei registri di sistema della porta utilizzata. Assicuratevi di impostare lo stesso protocollo per master e slave. Master e slave devono avere area di memoria uguali.
Per le trasmissioni di dati con il protocollo Modbus, il compilatore genera comandi Modbus basati sui numeri di riferimento Modbus.Ingresso
Specifica le porte di comunicazione (in base al tipo di PLC):
Porta COM p.es. SYS_COM0_PORT
Porta Ethernet p.es. SYS_ETHERNET_USER_CONNECTION_1
MCU/SCU p.es. 16#xx01 (xx = numero slot) in COM01
Numero della stazione dello slave (MEWTOCOL: 1–99,MODBUS: 1–247)
Impostato su 1 se una SYS_ETHERNET_USER_CONNECTION_xx è applicata all'ingresso Port
Area word o registro sull'unità master per il dato da scrivere nello slave.
Numero di word (bit) da trasmettere.
O:
Numero di parole
per Modbus RTU: 16#001–16#07F
per MEWTOCOL-COM: 16#001–16#1FD o 16#001–16#1B (FP0, FP-e)
Oppure:
Word di controllo per il trasferimento bit: 16#8T0F con T per trasferimento bit al master e F per trasferimento bit allo slave (non si applica a FP7).
Area di memoria nello slave in cui memorizzare il dato (destinazione = SlaveMemoryArea + SlaveMemoryOffset).
Tipo area di memoria |
Variabile di sistema |
---|---|
Relè interni |
|
Flag di link |
|
Ingressi esterni |
|
Uscite esterne |
|
Relè interni |
|
Valore nominale per timer/counter |
|
Valore corrente per timer/counter |
|
Registri dati |
|
Flag di link |
|
Registro di link |
|
Registri file |
|
Registri ingressi |
|
Registri di uscita |
Offset dell'area di memoria in cui memorizzare il dato nello slave (destinazione = SlaveMemoryArea + SlaveMemoryOffset).
Uscita
Solo per FP7: Per una descrizione di tutti i codici di errore, fare riferimento alla tabella dei codici di errore di comunicazione Modbus/MEWTOCOL.
Per gli altri PLC: impostato su 0
Durante l'invio: Flag di invio della comunicazione master è TRUE
Invio effettuato: Flag di invio della comunicazione master è FALSE
Completamento normale: FALSE
Completamento anomalo: TRUE
se l'area specificata utilizzando il registro indice eccede il limite.
se il numero di dati inviati specificati da Words_Bits non è corretto.
se l'area specificata utilizzando il registro indice eccede il limite.
se il numero di dati inviati specificati da Words_Bits non è corretto.
Tutte le variabili di ingresso e uscita utilizzate per programmare questa funzione sono state dichiarate nell'intestazione del POU. La stessa intestazione del POU è utilizzata per tutti i linguaggi di programmazione.
VAR
bSetParameters: BOOL:=FALSE;
wWriteToSlaveResult: WORD:=0;
(*result of write to slave instruction*)
iSlaveStationNumber: INT:=0;
(*slave station number*)
arrParameters: ARRAY [0..15] OF DINT;
(*Array of parameters to be send to slave station*)
iSlaveMemoryOffset: INT:=100;
bBool: BOOL:=FALSE;
END_VAR
VAR CONSTANT
iSlaveMemoryArea_Bool: INT:=10000;
(*memory Area in slave station*)
iSlaveMemoryArea_Word: INT:=5;
(*memory Area in slave station*)
END_VAR
VAR
END_VAR
BODY
WORKSPACE
NETWORK_LIST_TYPE := NWTYPELD ;
ACTIVE_NETWORK := 0 ;
END_WORKSPACE
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 9 ;
NETWORK_BODY
B(B_VARIN,,SYS_COM1_PORT,18,2,20,4,);
B(B_VARIN,,iSlaveStationNumber,18,3,20,5,);
B(B_VARIN,,arrParameters,11,4,13,6,);
B(B_CONTACT,,bSetParameters,4,1,6,3,);
B(B_VAROUT,,wWriteToSlaveResult,36,2,38,4,);
B(B_F,Size_Of_Var!,,13,5,20,7,,?D?C);
B(B_F,FP_WRITE_TO_SLAVE_AREA_OFFS!,,20,0,36,9,,?DEN?DnPort?DStationNumber?DSource?DWords_Bits?HSlaveMemoryArea?DSlaveMemoryOffset?AENO?CResult);
B(B_VARIN,,SYS_MEMORY_AREA_DT,18,6,20,8,);
B(B_VARIN,,iSlaveMemoryOffset,18,7,20,9,);
L(13,5,13,6);
L(1,2,4,2);
L(13,5,20,5);
L(6,2,20,2);
L(1,0,1,9);
END_NETWORK_BODY
END_NET_WORK
END_BODY
if (bSetParameters) then
FP_WRITE_TO_SLAVE_AREA_OFFS(Port := SYS_COM1_PORT,
StationNumber := iSlaveStationNumber,
Source := arrParameters[0],
Words_Bits := Size_Of_Var(arrParameters[0]),
SlaveMemoryArea := SYS_MEMORY_AREA_DT,
SlaveMemoryOffset := iSlaveMemoryOffset,
Result => wWriteToSlaveResult);
end_if;