Scrivere i dati nello slave con tipo e 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. 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–255, Broadcasting: 0)
Impostato su 1 se una SYS_ETHERNET_USER_CONNECTION_xx è applicata all'ingresso Port
Indirizzo di origine sul master per il dato da scrivere nello slave.
Tipo di indirizzo di destinazione nello slave. Specificare un offset di zero, p.es. DT0 o WL0.
L'offset dell'indirizzo iniziale nello slave su cui viene scritto il dato. Il tipo di indirizzo è definito da SlaveWordAddressType.
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).
Anziché utilizzare questa istruzione F, si consiglia di utilizzare l'istruzione FP7 corrispondente: FP_WRITE_TO_SLAVE_AREA_OFFS.
Le istruzioni F145 o F146 possono essere eseguite solo se né l'una né l'altra istruzione è attiva. Valutate il flag "F145/F146 non attiva" nel programma per controllare lo stato delle istruzioni.
L'istruzione F145 richiede unicamente l'invio dei dati allo slave. L'effettiva elaborazione avviene al termine della scansione.
Valutate il flag "Errore F145/F146" per verificare se la trasmissione si è conclusa correttamente o con un errore.
Durante il broadcast (SlaveAddress impostato su 0), assicuratevi che la trasmissione venga eseguita solo al termine del tempo massimo di scansione.
Le istruzioni F145 o F146 non possono essere eseguite se l'indirizzo di destinazione è un flag interno speciale (da R9000), un registro dati speciale (da DT9000/DT90000) o un registro file FL.
se i dati slave o master eccedono l'intervallo di indirizzi disponibili.
Se SlaveWordAddressType: Offset ¹ 0
se la modalità di comunicazione non è impostata su MEWTOCOL-COM Master/Slave o su Modbus RTU Master/Slave.
se la porta COM selezionata richiede un cassetto di comunicazione che non è stato installato.
se i dati slave o master eccedono l'intervallo di indirizzi disponibili.
Se SlaveWordAddressType: Offset ¹ 0
se la modalità di comunicazione non è impostata su MEWTOCOL-COM Master/Slave o su Modbus RTU Master/Slave.
se la porta COM selezionata richiede un cassetto di comunicazione che non è stato installato.
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
bBool1: BOOL:=FALSE;
bRead1: BOOL:=FALSE;
bWrite1: BOOL:=FALSE;
Bool16_OverlappingDut_1: BOOL16_OVERLAPPING_DUT;
END_VAR
VAR_EXTERNAL
Printer: WORD:=0;
END_VAR
VAR
END_VAR
La variabile di sistema sys_bPulse1s viene copiata in bBool1 e Bool16_OverlappingDut_1.b0. Se bWrite1 e sys_bIsComPort1F145F146NotActive sono impostati su TRUE, bBool1 viene scritto nell'uscita Y38 dello slave 2 tramite Bool16_OverlappingDut_1.b0.
BODY
WORKSPACE
NETWORK_LIST_TYPE := NWTYPELD ;
ACTIVE_NETWORK := 0 ;
END_WORKSPACE
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 3 ;
NETWORK_BODY
B(B_CONTACT,,sys_bPulse1s,3,1,5,3,);
B(B_COIL,,bBool1,15,1,17,3,);
L(5,2,15,2);
L(1,2,3,2);
L(1,0,1,3);
END_NETWORK_BODY
END_NET_WORK
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 3 ;
NETWORK_BODY
B(B_CONTACT,,bBool1,3,1,5,3,);
B(B_COIL,,Bool16_OverlappingDut_1.b0,15,1,17,3,);
L(5,2,15,2);
L(1,2,3,2);
L(1,0,1,3);
END_NETWORK_BODY
END_NET_WORK
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 13 ;
NETWORK_BODY
B(B_CONTACT,,sys_bIsComPort1F145F146NotActive,8,1,10,3,);
B(B_CONTACT,,bWrite1,18,1,20,3,);
B(B_COIL,,bRead1,46,1,48,3,S);
B(B_VARIN,,2,23,3,25,5,);
B(B_VARIN,,Bool16_OverlappingDut_1.w0,23,4,25,6,);
B(B_VARIN,,WY0,23,5,25,7,);
B(B_VARIN,,3,23,6,25,8,);
B(B_VARIN,,16#8800,23,7,25,9,);
B(B_F,F145_WRITE_DATA_TYPE_OFFS!,Instance,25,0,40,9,,?DEN?DPort?DSlaveAddress?DMasterWordData?DSlaveWordAddressType?DSlaveWordAddressOffs?DNumberOfWords_BitsInWords?AENO);
B(B_VARIN,,SYS_COM1_PORT,23,2,25,4,);
B(B_COIL,,bWrite1,42,1,44,3,E);
L(1,2,8,2);
L(10,2,18,2);
L(20,2,25,2);
L(44,2,46,2);
L(40,2,42,2);
L(1,0,1,13);
END_NETWORK_BODY
END_NET_WORK
END_BODY
bBool1 := sys_bPulse1s;
Bool16_OverlappingDut_1.b0 := bBool1;
if (bWrite1 and sys_bIsComPort1F145F146NotActive) then
F145_WRITE_DATA_TYPE_OFFS(Port := SYS_COM1_PORT,
SlaveAddress := 2,
MasterWordData := Bool16_OverlappingDut_1.w0,
SlaveWordAddressType := WY0,
SlaveWordAddressOffs := 3,
NumberOfWords_BitsInWords := 16#8800);
bRead1 := true;
bWrite1 := false;
end_if;