FB_MBReadWriteRegs (Modbus-Funktion 23)

FB_MBReadWriteRegs (Modbus-Funktion 23) 1:

Diese Funktion liest zuerst 1 bis 128 Ausgangs-Register (16 bit) und beschreibt danach 1 bis 128 Ausgangs-Register (16 Bit).

FB_MBReadWriteRegs (Modbus-Funktion 23) 2: Eingänge

VAR_INPUT
    sIPAddr       : STRING(15);
    nTCPPort      : UINT:= MODBUS_TCP_PORT;
    nUnitID       : BYTE:=16#FF;
    nReadQuantity : WORD;
    nMBReadAddr   : WORD;
    nWriteQuantity: WORD;
    nMBWriteAddr  : WORD;
    cbDestLength  : UDINT;
    pDestAddr     : POINTER OF BYTE;
    cbSrcLength   : UDINT;
    pSrcAddr      : POINTER OF BYTE;
    bExecute      : BOOL;
    tTimeout      : TIME;
END_VAR

Name

Typ

Beschreibung

sIPAddr

STRING (15)

Ist ein String, der die IP-Adresse des Zielgerätes enthält.

nTCPPort

UINT

Portnummer des Zielgerätes.

nUnitID

BYTE

Identifizierungsnummer eines Gerätes eines seriellen Sub-Netzwerkes. Wenn ein Gerät direkt über TCP/IP angesprochen wird, muss dieser Wert 16#FF entsprechen.

nReadQuantity

WORD

Anzahl der zu lesenden Ausgangs-Register (Datenworte). Der Wert Null ist nicht zulässig.

nMBReadAddr

WORD

Startadresse der zu lesenden Ausgangs-Register (Wortoffset).

nWriteQuantity

WORD

Anzahl der zu schreibenden Ausgangs-Register (Datenworte). Der Wert Null ist nicht zulässig.

nMBWriteAddr

WORD

Startadresse der zu schreibenden Ausgangs-Register (Wortoffset).

cbDestLength

UDINT

Enthält die max. verfügbare Bytegröße des Zielpuffers für die zu lesenden Registerwerte. Der Puffer muss mindestens die Bytegröße: nReadQuantity * 2 besitzen.

pDestAddr

POINTER OF BYTE

Enthält die Adresse des Zielpuffers, in den die Daten gelesen werden sollen. Der Puffer kann eine Einzelvariable, ein Array oder eine Struktur sein, dessen Adresse mit dem ADR - Operator ermittelt werden kann.

cbSrcLength

UDINT

Enthält die max. verfügbare Bytegröße des Quellpuffers der die zu schreibenden Registerwerte enthält. Der Puffer muss mindestens die Bytegröße: nQuantity * 2 besitzen.

pSrcAddr

POINTER OF BYTE

Enthält die Adresse des Quellpuffers, der die zu schreibenden Daten enthält. Der Puffer kann eine Einzelvariable, ein Array oder eine Struktur sein, dessen Adresse mit dem ADR - Operator ermittelt werden kann.

bExecute

BOOL

Durch eine steigende Flanke an diesem Eingang wird der Funktionsbaustein aktiviert.

tTimeout

TIME

Gibt die Timeout-Zeit an, die bei der Ausführung des ADS-Kommandos nicht überschritten werden darf.

FB_MBReadWriteRegs (Modbus-Funktion 23) 3: Ausgänge

VAR_OUTPUT
    bBUSY      : BOOL;
    bError     : BOOL;
    nErrId     : UDINT;
    cbRead     : UDINT;
END_VAR

Name

Typ

Beschreibung

bBusy

BOOL

Bei der Aktivierung des Funktionsbausteins wird dieser Ausgang gesetzt und bleibt gesetzt, bis eine Rückmeldung erfolgt.

bError

BOOL

Sollte ein ADS-Fehler bei der Übertragung des Kommandos erfolgen, dann wird dieser Ausgang gesetzt, nachdem der bBusy-Ausgang zurückgesetzt wurde.

nErrId

UDINT

Liefert bei einem gesetzten bError-Ausgang die ADS-Fehlernummer.

cbRead

UDINT

Enthält die Anzahl der aktuell gelesenen Bytes.

Beispiel für den Aufruf des Bausteins in FBD

PROGRAM Test
VAR
    fbReadWriteRegs          : FB_MBReadWriteRegs;
    bReadWriteRegs           : BOOL;
    bReadWriteRegsBusy       : BOOL;
    bReadWriteRegsError      : BOOL;
    nReadWriteRegsErrorId    : UDINT;
    nReadWriteRegsCount      : UDINT;
    nRdQuantity              : WORD;
    nRdMBAddr                : WORD;
    nWrQuantity              : WORD;
    nWrMBAddr                : WORD;
    arrRdData                : ARRAY [1..9] OF WORD;
    arrWrData                : ARRAY [1..9] OF WORD;
END_VAR
FB_MBReadWriteRegs (Modbus-Funktion 23) 4:

Nach steigender Flanke von "bExecute" und erfolgreicher Ausführung des ReadWriteRegs-Befehls, befinden sich in arrRdData die gelesenen Daten der Register und die Daten aus arrWrData werden in die Register geschrieben.

Voraussetzungen

Entwicklungsumgebung

Zielplattform

Einzubindende SPS-Bibliotheken

TwinCAT v3.0.0

PC or CX (x86)

Tc2_ModbusSrv