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).

VAR_INPUT

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       : UDINT;
    cbSrcLength     : UDINT;
    pSrcAddr        : UDINT;
    bExecute        : BOOL;
    tTimeout        : TIME;
END_VAR

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

nTCPPort: Portnummer des Zielgerätes.

nUnitID: 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: Anzahl der zu lesenden Ausgangs-Register (Datenworte). Der Wert Null ist nicht zulässig.

nMBReadAddr: Startadresse der zu lesenden Ausgangs-Register (Wortoffset).

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

nMBWriteAddr: Startadresse der zu schreibenden Ausgangs-Register (Wortoffset).

cbDestLength: 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: 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: Enthält die max. verfügbare Bytegröße des Quellpuffers der die zu schreibende Registerwerte enthält. Der Puffer muss mindestens die Bytegröße: nWriteQuantity* 2 besitzen.

pSrcAddr: 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: Durch eine steigende Flanke an diesem Eingang wird der Funktionsbaustein aktiviert.

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

VAR_OUTPUT

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

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

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

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

cbRead: Enthält die Anzahl der aktuell gelesenen Bytes.

Function specific ADS error code

Possible reason

0x8001

Nicht implementierte Modbus-Funktion

0x8002

Ungültige Adresse oder Länge

0x8003

Ungültige Parameter:

- falsche Registeranzahl

0x8004

Fehler im Modbus-Server

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) 2:

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 v2.8.0

PC (i386)

TcModbusSrv.Lib