FP_MC_PROTOCOL_READ

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.

Parameter

Eingang

Port (WORD, INT, UINT)

Ethernet-Schnittstelle z.B. SYS_ETHERNET_USER_CONNECTION_1

SourceMemoryArea (WORD, INT, UINT)

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

SourceMemoryOffset (DWORD, DINT, UDINT)

Offset des Speicherbereichs auf dem Slave, aus dem die Daten abgefragt werden sollen.

Bereich: 16#016#F7FFFF (0–16252927)

Words_Bits (WORD, INT, UINT)

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

Destination (ANY)

Wortbereich oder Register auf dem Mastermodul, in das die angeforderten Daten geschrieben werden.

Result (WORD, INT, UINT)

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

Zeitdiagramm

  1.  (1) Merker Master-Kommunikations-Sendebereitschaft, z.B. sys_bIsEthernetUserConnection1MasterCommunication
  2.  (2) Prüfen Sie, ob der Merker Master-Kommunikations-Sendebereitschaft TRUE ist, und prüfen Sie, ob der Sendemerker Master-Kommunikation FALSE ist
  3.  (3) Sendemerker Master-Kommunikation, z.B. sys_bIsEthernetUserConnection1MasterCommunicationActive

    Beim Senden: Sendemerker Master-Kommunikation ist TRUE

    Senden abgeschlossen: Sendemerker Master-Kommunikation ist FALSE

  4.  (4) Diesen Befehl ausführen
  5.  (5) Merker Master-Kommunikation senden abgeschlossen, z.B. sys_bIsEthernetUserConnection1CommunicationError

    Normaler Abschluss: FALSE

    Abschluss mit Fehler: TRUE

  6.  (6) Daten senden
  7.  (7) Verarbeitung der empfangenen Antwort

Fehleralarmmerker

sys_bIsOperationErrorHold (wird auf TRUE gesetzt und bleibt TRUE)
  • wenn der mit dem Index-Modifizierer definierte Bereich größer ist als der zulässige Bereich

  • Wenn Slave-Daten oder Master-Daten den verfügbaren Adressbereich überschreiten.
  • wenn die Ethernet-Schnittstelle falsch ist oder die Ethernet-Verbindung geschlossen ist.

  • wenn die durch Words_Bits angegebene Anzahl der gesendeten Daten falsch ist.

sys_bIsOperationErrorNonHold (wird für einen Zyklus auf TRUE gesetzt)
  • wenn der mit dem Index-Modifizierer definierte Bereich größer ist als der zulässige Bereich

  • Wenn Slave-Daten oder Master-Daten den verfügbaren Adressbereich überschreiten.
  • wenn die Ethernet-Schnittstelle falsch ist oder die Ethernet-Verbindung geschlossen ist.

  • wenn die durch Words_Bits angegebene Anzahl der gesendeten Daten falsch ist.

Beispiel

POE-Kopf

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

KOP-Rumpf

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

ST-Rumpf

(*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;

Letzte Änderung: 2024-12-18Feedback zu dieser SeitePanasonic Hotline