Daten von externen Geräten über das MC-Protokoll lesen
Die SPS hat das Übertragungsrecht in der Master-Kommunikation. Die Kommunikation findet statt durch das Senden von Befehlen an Geräte, die das MC-Protokoll unterstützen, und das Empfangen von Antworten. Durch die Angabe einer Speicheradresse und die Ausführung eines Lesebefehls in einem Anwenderprogramm erzeugt die SPS automatisch eine Nachricht gemäß dem Protokoll.
Eingang
Ethernet-Schnittstelle z.B. SYS_ETHERNET_USER_CONNECTION_1
Speicherbereich auf dem Slave, aus dem die Daten abgefragt werden sollen.
Modul |
Speicherbereichstyp |
Systemvariable |
||
---|---|---|---|---|
Bit |
Eingang |
X |
Hexadezimal SYS_MC_PROTOCOL_MEMORY_AREA_INPUT_X |
|
Ausgang |
Y |
Hexadezimal SYS_MC_PROTOCOL_MEMORY_AREA_OUTPUT_Y |
||
Koppelmerker |
B |
Hexadezimal SYS_MC_PROTOCOL_MEMORY_AREA_LINK_RELAY_B |
||
Interner Merker |
M |
Dezimal SYS_MC_PROTOCOL_MEMORY_AREA_INTERNAL_RELAY_M |
||
Latch-Merker |
L |
Dezimal SYS_MC_PROTOCOL_MEMORY_AREA_LATCH_RELAY_L |
||
Wort |
Datenregister |
D |
Dezimal SYS_MC_PROTOCOL_MEMORY_AREA_DATA_REGISTER_D |
|
File-Register |
R |
Dezimal SYS_MC_PROTOCOL_MEMORY_AREA_FILE_REGISTER_R |
||
ZR |
Hexadezimal SYS_MC_PROTOCOL_MEMORY_AREA_FILE_REGISTER_ZR |
|||
Koppeldatenregister |
W |
Hexadezimal SYS_MC_PROTOCOL_MEMORY_AREA_LINK_REGISTER_W |
Offset des Speicherbereichs auf dem Slave, aus dem die Daten abgefragt werden sollen.
Bereich: 16#0–16#F7FFFF (0–16252927)
Die Übertragungsmethode variiert je nach Datentyp von Destination.
Speicherbereich angegeben in Destination |
Übertragungsart |
Anzahl der übertragenen Daten |
Anmerkungen |
---|---|---|---|
16-Bit-Speicherbereich WX, WY, WR, WL, DT, LD |
Wortübertragung |
1-960 Worte |
|
1-Bit-Speicherbereich X,Y,R,L,DT,n,LD,n |
Bit-Übertragung |
1–7168 Bits |
Wenn die Anzahl der übertragenen Daten ungerade ist, wird der 4-Bit-Dummy-Code 16#0 hinzugefügt. |
Ausgang
Wortbereich oder Register auf dem Mastermodul, in das die angeforderten Daten geschrieben werden.
Nur für FP7:
0: Normaler Abschluss
1: Kommunikationsschnittstelle wird für die Master-Kommunikation verwendet
2: Kommunikationsschnittstelle wird für die Slave-Kommunikation verwendet
3: Anzahl der Master-Kommunikationsbefehle, die gleichzeitig verwendet werden können, ist überschritten
4: Zeitüberschreitung bei der Übertragung
5: Zeitüberschreitung beim Warten auf eine Antwort
6: Fehler in den empfangenen Daten
Dieser Fehler tritt auf, wenn ein abnormales Telegramm empfangen wird, z. B. wenn ein Formatfehler im Header vorliegt. In diesem Fall werden die empfangenen Daten verworfen.
7: Unzureichender reservierter Bereich in der E/A-Adressliste
Dieser Fehler tritt auf, wenn die Anzahl der Ethernet-Verbindungen 16 übersteigt (erweiterte Ethernet-Kommunikation). Prüfen Sie, ob der für Kommunikationskontrollmerker reservierte Wortdatenbereich für die Anzahl der Ethernet-Verbindungen ausreicht.
8: Sendepuffer derzeit in Verwendung
Dieser Fehler kann bei FP7-SPS mit Firmware-Version 4.57 oder später auftreten.
Im Falle von Kommunikationsfehlern können andere, für das MC-Protokoll spezifische Fehlercodes gesetzt werden. Weitere Einzelheiten können Sie der Dokumentation der verwendeten SPS entnehmen.
Für andere SPS: auf 0 gesetzt
Beim Senden: Sendemerker Master-Kommunikation ist TRUE
Senden abgeschlossen: Sendemerker Master-Kommunikation ist FALSE
Normaler Abschluss: FALSE
Abschluss mit Fehler: TRUE
wenn der mit dem Index-Modifizierer definierte Bereich größer ist als der zulässige Bereich
wenn die Ethernet-Schnittstelle falsch ist oder die Ethernet-Verbindung geschlossen ist.
wenn die durch Words_Bits angegebene Anzahl der gesendeten Daten falsch ist.
wenn der mit dem Index-Modifizierer definierte Bereich größer ist als der zulässige Bereich
wenn die Ethernet-Schnittstelle falsch ist oder die Ethernet-Verbindung geschlossen ist.
wenn die durch Words_Bits angegebene Anzahl der gesendeten Daten falsch ist.
Im POE-Kopf werden alle Ein- und Ausgangsvariablen deklariert, die für die Programmierung dieser Funktion verwendet werden. Für alle Programmiersprachen wird der gleiche POE-Kopf verwendet.
VAR
diMemoryOffset: DINT:=0;
awValues: ARRAY [0..2] OF WORD:=[3(0)];
iResult: INT:=0;
bEnable: BOOL:=FALSE;
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 := 7 ;
NETWORK_BODY
B(B_VARIN,,iPort,26,2,28,4,);
B(B_VAROUT,,abValues,41,2,43,4,);
B(B_VARIN,,SYS_MC_PROTOCOL_MEMORY_AREA_INPUT_X,26,3,28,5,);
B(B_VARIN,,diMemoryOffset,26,4,28,6,);
B(B_VAROUT,,iResult,41,3,43,5,);
B(B_CONTACT,,bEnable,5,1,7,3,);
B(B_F,FP_MC_PROTOCOL_READ!,,28,0,41,7,,?DEN?DPort?HSourceMemoryArea?DSourceMemoryOffset?DWords_Bits?AENO?CDestination?CResult);
B(B_F,Size_Of_Var!,,21,5,28,7,,?D?C);
B(B_VARIN,,abValues,19,5,21,7,);
L(7,2,28,2);
L(1,2,5,2);
L(1,0,1,7);
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 := 7 ;
NETWORK_BODY
B(B_VARIN,,iPort,26,2,28,4,);
B(B_VAROUT,,awValues,41,2,43,4,);
B(B_VARIN,,SYS_MC_PROTOCOL_MEMORY_AREA_DATA_REGISTER_D,26,3,28,5,);
B(B_VARIN,,diMemoryOffset,26,4,28,6,);
B(B_VAROUT,,iResult,41,3,43,5,);
B(B_CONTACT,,bEnable,5,1,7,3,);
B(B_F,FP_MC_PROTOCOL_READ!,,28,0,41,7,,?DEN?DPort?HSourceMemoryArea?DSourceMemoryOffset?DWords_Bits?AENO?CDestination?CResult);
B(B_F,Size_Of_Var!,,21,5,28,7,,?D?C);
B(B_VARIN,,awValues,19,5,21,7,);
L(1,2,5,2);
L(7,2,28,2);
L(1,0,1,7);
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_READ(Port := iPort,
SourceMemoryArea := SYS_MC_PROTOCOL_MEMORY_AREA_INPUT_X,
SourceMemoryOffset := diMemoryOffset,
Words_Bits := Size_Of_Var(abValues),
Destination => abValues, Result => iResult);
End_if;
(*Word transfer*)
If (bEnable) then
FP_MC_PROTOCOL_READ(Port := iPort,
SourceMemoryArea := SYS_MC_PROTOCOL_MEMORY_AREA_DATA_REGISTER_D,
SourceMemoryOffset := diMemoryOffset,
Words_Bits := Size_Of_Var(awValues),
Destination => awValues, Result => iResult);
End_if;