Scrivere i dati su dispositivi esterni tramite protocollo MC
Il PLC ha il diritto di trasmissione nella comunicazione master. La comunicazione viene eseguita inviando comandi ai dispositivi che supportano il protocollo MC e ricevendo le risposte. Specificando un indirizzo di memoria ed eseguendo un'istruzione di scrittura in un programma utente, il PLC genera automaticamente un messaggio secondo il protocollo.
Ingresso
Porta Ethernet p.es. SYS_ETHERNET_USER_CONNECTION_1
Area word o registro sull'unità master per il dato da scrivere nello slave.
Il metodo di trasferimento varia in base al tipo di dati della Source.
Area di memoria specificata in Source |
Metodo di trasferimento |
N. di dati trasmessi |
Note |
---|---|---|---|
Area di memoria a 16 bit WX, WY, WR, WL, DT, LD |
Trasmissione word |
1–960 word |
|
Area di memoria a 1 bit X,Y,R,L,DT,n,LD,n |
Trasmissione bit |
1–7168 bit |
Quando il numero dei dati trasmessi è dispari, viene aggiunto il codice dummy a 4 bit 16#0. |
Area di memoria sullo slave in cui viene scritto il dato.
Unit |
Tipo area di memoria |
Variabile di sistema |
||
---|---|---|---|---|
Bit |
Ingresso |
X | Esadecimale SYS_MC_PROTOCOL_MEMORY_AREA_INPUT_X |
|
Uscita |
Y | Esadecimale SYS_MC_PROTOCOL_MEMORY_AREA_OUTPUT_Y |
||
Flag di link |
B | Esadecimale SYS_MC_PROTOCOL_MEMORY_AREA_LINK_RELAY_B |
||
Flag interno |
M | Decimale SYS_MC_PROTOCOL_MEMORY_AREA_INTERNAL_RELAY_M |
||
Relè di latch |
L | Decimale SYS_MC_PROTOCOL_MEMORY_AREA_LATCH_RELAY_L |
||
Word |
Registro dati |
D | Decimale SYS_MC_PROTOCOL_MEMORY_AREA_DATA_REGISTER_D |
|
Registro file |
R | Decimale SYS_MC_PROTOCOL_MEMORY_AREA_FILE_REGISTER_R |
||
ZR | Esadecimale SYS_MC_PROTOCOL_MEMORY_AREA_FILE_REGISTER_ZR |
|||
Registro di link |
W | Esadecimale SYS_MC_PROTOCOL_MEMORY_AREA_LINK_REGISTER_W |
Offset dell'area di memoria nello slave su cui viene scritto il dato.
Campo: 16#0–16#F7FFFF (0–16252927)
Uscita
Solo per FP7:
0: Completamento normale
1: La porta di comunicazione è utilizzata per la comunicazione master
2: La porta di comunicazione è utilizzata per la comunicazione slave
3: Il numero di istruzioni di comunicazione master utilizzabili contemporaneamente è stato superato
4: Timeout trasferimento
5: Timeout in attesa di una risposta
6: Errore nei dati ricevuti
Questo errore si verifica quando viene ricevuto un telegramma anomalo, ad esempio in presenza di un errore di formato nell'intestazione. In questo caso i dati ricevuti vengono scartati.
7: Area riservata insufficiente nella mappa I/O
Questo errore si verifica quando il numero di connessioni Ethernet supera un numero di 16 (comunicazione Ethernet avanzata). Verificare se l'area word riservata ai flag di controllo della comunicazione è sufficiente per il numero di connessioni Ethernet.
8: Buffer di invio attualmente in uso
Questo errore può verificarsi per i PLC FP7 con versione firmware 4.57 o successiva.
In caso di errori di comunicazione, è possibile impostare altri codici di errore specifici per il protocollo MC. Per maggiori dettagli fare riferimento alla documentazione del PLC utilizzato.
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 la porta Ethernet non è corretta o se la connessione Ethernet è chiusa.
se il numero di dati inviati specificati da Words_Bits non è corretto.
se l'area specificata utilizzando il registro indice eccede il limite.
se la porta Ethernet non è corretta o se la connessione Ethernet è chiusa.
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
bEnable: BOOL:=FALSE;
awValues: ARRAY [0..2] OF WORD:=[3(0)];
diMemoryOffset: DINT:=0;
iResult: INT:=0;
abValues: ARRAY [0..2] OF BOOL:=[3(FALSE)];
iPort: INT:=0;
END_VAR
BODY
WORKSPACE
NETWORK_LIST_TYPE := NWTYPELD ;
ACTIVE_NETWORK := 0 ;
END_WORKSPACE
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 6 ;
NETWORK_BODY
B(B_COMMENT,,Bit transfer,2,0,10,1,);
B(B_COMMENT,,Memory Areas: SYS_MC_PROTOCOL_MEMORY_AREA_INPUT_X ^SYS_MC_PROTOCOL_MEMORY_AREA_OUTPUT_Y ^SYS_MC_PROTOCOL_MEMORY_AREA_LINK_RELAY_B ^SYS_MC_PROTOCOL_MEMORY_AREA_INTERNAL_RELAY_M ^SYS_MC_PROTOCOL_MEMORY_AREA_LATCH_RELAY_L,13,0,39,6,);
L(1,0,1,6);
END_NETWORK_BODY
END_NET_WORK
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 8 ;
NETWORK_BODY
B(B_VARIN,,iPort,26,2,28,4,);
B(B_VARIN,,abValues,18,3,20,5,);
B(B_VARIN,,SYS_MC_PROTOCOL_MEMORY_AREA_INPUT_X,26,5,28,7,);
B(B_VARIN,,diMemoryOffset,26,6,28,8,);
B(B_VAROUT,,iResult,41,2,43,4,);
B(B_CONTACT,,bEnable,5,1,7,3,);
B(B_F,FP_MC_PROTOCOL_WRITE!,,28,0,41,8,,?DEN?DPort?DSource?DWords_Bits?HDestMemoryArea?DDestMemoryOffset?AENO?CResult);
B(B_F,Size_Of_Var!,,21,4,28,6,,?D?C);
L(1,2,5,2);
L(7,2,28,2);
L(20,4,28,4);
L(21,4,21,5);
L(1,0,1,8);
END_NETWORK_BODY
END_NET_WORK
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 5 ;
NETWORK_BODY
B(B_COMMENT,,Memory Areas: ^SYS_MC_PROTOCOL_MEMORY_AREA_DATA_REGISTER_D ^SYS_MC_PROTOCOL_MEMORY_AREA_FILE_REGISTER_R ^SYS_MC_PROTOCOL_MEMORY_AREA_FILE_REGISTER_ZR ^SYS_MC_PROTOCOL_MEMORY_AREA_LINK_REGISTER_W,13,0,39,5,);
B(B_COMMENT,,Word Transfer,2,0,10,1,);
L(1,0,1,5);
END_NETWORK_BODY
END_NET_WORK
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 8 ;
NETWORK_BODY
B(B_VARIN,,iPort,26,2,28,4,);
B(B_VARIN,,awValues,18,3,20,5,);
B(B_VARIN,,SYS_MC_PROTOCOL_MEMORY_AREA_DATA_REGISTER_D,26,5,28,7,);
B(B_VARIN,,diMemoryOffset,26,6,28,8,);
B(B_VAROUT,,iResult,41,2,43,4,);
B(B_CONTACT,,bEnable,5,1,7,3,);
B(B_F,FP_MC_PROTOCOL_WRITE!,,28,0,41,8,,?DEN?DPort?DSource?DWords_Bits?HDestMemoryArea?DDestMemoryOffset?AENO?CResult);
B(B_F,Size_Of_Var!,,21,4,28,6,,?D?C);
L(1,2,5,2);
L(7,2,28,2);
L(20,4,28,4);
L(21,4,21,5);
L(1,0,1,8);
END_NETWORK_BODY
END_NET_WORK
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 5 ;
NETWORK_BODY
B(B_COMMENT,,only valid for ethernet ports! ^--> Valid Ports: SYS_ETHERNET_USER_CONNECTION_1 - SYS_ETHERNET_USER_CONNECTION_216,3,1,52,4,);
L(1,0,1,5);
END_NETWORK_BODY
END_NET_WORK
END_BODY
(*Bit transfer*)
If (bEnable) then
FP_MC_PROTOCOL_WRITE(Port := iPort,
Source := abValues,
Words_Bits := Size_Of_Var(abValues),
DestMemoryArea := SYS_MC_PROTOCOL_MEMORY_AREA_INPUT_X,
DestMemoryOffset := diMemoryOffset,
Result => iResult);
End_if;
(*Word transfer*)
If (bEnable) then
FP_MC_PROTOCOL_WRITE(Port := iPort,
Source := awValues,
Words_Bits := Size_Of_Var(awValues),
DestMemoryArea := SYS_MC_PROTOCOL_MEMORY_AREA_DATA_REGISTER_D,
DestMemoryOffset := diMemoryOffset,
Result => iResult);
End_if;