FP_WRITE_TO_SLAVE_AREA_OFFS

Daten mit Offset in Slave schreiben

Mit diesem Befehl schreiben Sie Daten mit dem Protokoll MEWTOCOL-COM oder Modbus-RTU von einem Master in einen Slave wie in den Systemregistern der verwendeten Kommunikationsschnittstelle definiert. Stellen Sie sicher, dass für Master und Slave das gleiche Protokoll eingestellt ist. Master und Slave müssen übereinstimmende Speicherbereiche haben.

Bei Datenübertragungen unter Verwendung des Modbus-Protokolls erzeugt der Compiler Modbus-Befehle auf der Grundlage der Modbus-Referenznummern.

Parameter

Eingang

Port (INT)

Legt die Kommunikationsschnittstellen fest (je nach SPS-Typ):

  • COM-Schnittstelle z.B. SYS_COM0_PORT

  • Ethernet-Schnittstelle z.B. SYS_ETHERNET_USER_CONNECTION_1

  • MCU/SCU z.B. 16#xx01 (xx = Steckplatznummer) in COM01

StationNumber (WORD, INT, UINT)

Teilnehmeradresse des Slaves (MEWTOCOL: 1–99,MODBUS: 1–247)

Einstellen auf 1, wenn ein SYS_ETHERNET_USER_CONNECTION_xx auf Eingang Port angewandt wird

Source (WORD, INT, UINT)

Wortdatenbereich auf dem Mastermodul für die Daten, die in den Slave geschrieben werden sollen.

Words_Bits (WORD, INT, UINT)

Anzahl der zu übertragenden Wortdaten (Bits).

Entweder:

  • Anzahl der Worte

    für Modbus RTU: 16#001–16#07F

    für MEWTOCOL-COM: 16#001–16#1FD oder 16#001–16#1B (FP0, FP-e)

Oder:

  • Steuerwort für die Bitübertragung: 16#8T0F mit T für eine Bitübertragung zum Master und F für eine Bitübertragung zum Slave (gilt nicht für FP7).

SlaveMemoryArea (WORD, INT, UINT)

Speicherbereich auf dem Slave, in dem die Daten gespeichert werden sollen (Ziel = SlaveMemoryArea + SlaveMemoryOffset).

Speicherbereichstyp

Systemvariable

Interne Merker

SYS_MEMORY_AREA_R

Koppelmerker

SYS_MEMORY_AREA_L

Externe Eingänge

SYS_MEMORY_AREA_X

Externe Ausgänge

SYS_MEMORY_AREA_Y

Interne Merker

SYS_MEMORY_AREA_WR

Einstellwert für Zeitgeber/Zähler

SYS_MEMORY_AREA_SV

Istwert für Zeitgeber/Zähler

SYS_MEMORY_AREA_EV

Datenregister

SYS_MEMORY_AREA_DT

Koppelmerker

SYS_MEMORY_AREA_WL

Koppeldatenregister

SYS_MEMORY_AREA_LD

File-Register

SYS_MEMORY_AREA_FL

Eingangsregister

SYS_MEMORY_AREA_WX

Ausgangsregister

SYS_MEMORY_AREA_WY

SlaveMemoryOffset (WORD, INT, UINT)

Offset des Speicherbereichs, in dem die Daten im Slave gespeichert werden sollen (Ziel = SlaveMemoryArea + SlaveMemoryOffset).

Ausgang

Result (WORD, INT, UINT)

Nur für FP7: Eine Beschreibung aller Fehlercodes finden Sie in der Tabelle der Modbus/MEWTOCOL-Kommunikationsfehler-Codes.

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 durch Words_Bits angegebene Anzahl der gesendeten Daten falsch ist.

  • Wenn als Kommunikationsart nicht MEWTOCOL-COM Master/Slave oder Modbus-RTU-Master/Slave eingestellt ist.
  • Wenn der ausgewählte COM-Port eine Kommunikationskassette erfordert, die nicht installiert 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 durch Words_Bits angegebene Anzahl der gesendeten Daten falsch ist.

  • Wenn als Kommunikationsart nicht MEWTOCOL-COM Master/Slave oder Modbus-RTU-Master/Slave eingestellt ist.
  • Wenn der ausgewählte COM-Port eine Kommunikationskassette erfordert, die nicht installiert 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
		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

POE-Rumpf

KOP-Rumpf

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

ST-Rumpf

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;

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