ModbusRtuMaster_KL6x22B

ModbusRtuMaster_KL6x22B 1:

Der Funktionsbaustein ModbusRtuMaster_KL6x22B realisiert einen Modbus-Master, der über eine serielle Busklemme KL6031 oder KL6041 kommuniziert. Der Baustein wird nicht in seiner Grundform aufgerufen, sondern es werden in einem SPS-Programm einzelne Aktionen des Funktionsbausteins verwendet. Jede Modbus-Funktion ist als Aktion realisiert.

Ein Beispielprogramm für einen Buscontroller BC (modbusrtumasterbc.zip) verdeutlicht die Funktionsweise.

Unterstützte Modbus-Funktionen (Aktionen)

VAR_INPUT

VAR_INPUT
    UnitID          : UINT;
    Quantity        : WORD;
    MBAddr          : WORD;
    cbLength        : UINT;
    pMemoryAddr     : DWORD;
    Execute         : BOOL;
    Timeout         : TIME;
END_VAR

UnitID: Modbus Stationsadresse (1..247). Der Modbus-Slave antwortet nur, wenn er Telegramme mit seiner eigenen Stationsadresse empfängt. Optional können hier auch Sammeladressen eingestellt werden, um auf beliebige Anfragen zu antworten. Die Adresse 0 ist für Broadcast-Telegramme reserviert und somit keine gültige Stationsadresse.

Quantity: Anzahl der zu lesenden oder zu schreibenden Datenworte bei Wort-orientierten Modbus-Funktionen. Bei Bit-orientierten Modbus-Funktionen gibt Quantity die Anzahl der Bits (Inputs oder Coils) an.

MBAddr: Modbus-Datenadresse, von der die Daten aus dem Endgerät (Slave) gelesen werden. Diese Adresse wird unverändert zum Slave übertragen und wird dort als Datenadresse interpretiert.
Bei der Diagnostics-Funktion (8) wird hier der Funktionscode (subfunction code) übergeben.

cbLength : Größe der verwendeten Datenvariable für Sende- oder Lese-Aktionen in Bytes. cbLength muss größer oder gleich der durch Quantity bestimmten übertragenen Datenmenge sein. Bei Wortzugriffen gilt z. B.: [cbLength >= Quantity * 2]. cbLength kann mit SIZEOF(ModbusDaten) berechnet werden.

pMemoryAddr: Speicheradresse in der SPS, die mit ADR(ModbusDaten) berechnet wird. Bei Leseaktionen werden die gelesenen Daten in der adressierten Variablen abgelegt. Bei Sende-Aktionen werden die Daten aus der adressierten Variablen zum Endgerät übertragen.

Execute : Startsignal. Mit steigender Flanke am Eingang Execute wird die Aktion ausgelöst.

Timeout : Timeout-Wert für das Warten auf eine Reaktion des angesprochenen Slaves.

VAR_OUTPUT

VAR_OUTPUT
    BUSY    : BOOL;
    Error   : BOOL;
    ErrorId : MODBUS_ERRORS;
    cbRead  : UINT;
END_VAR

Busy: Zeigt an, dass der Funktionsbaustein aktiv ist. Busy wird mit steigender Flanke an Execute TRUE und wird wieder FALSE nachdem die gestartete Aktion beendet ist. Es kann immer nur eine Aktion gleichzeitig aktiv sein.

Error: Zeigt an, dass bei der Bearbeitung einer Aktion ein Fehler aufgetreten ist.

ErrorId: Zeigt eine Fehlernummer im Falle einer gestörten oder fehlerhaften Kommunikation an.

cbRead: Liefert die Anzahl der gelesenen Datenbytes bei einer Lese-Aktion

Verbindung zur Hardware

Die zur Verknüpfung mit dem Kommunikationsport notwendigen Datenstrukturen sind im Funktionsbaustein enthalten. Auf einem Buscontroller BC müssen die I/O-Adressen manuell zugewiesen werden. Siehe Hardwarezuordnung am Buscontroller BC.

 

Voraussetzungen

Entwicklungsumgebung

Zielplattform

Einzubindende SPS Bibliotheken

TwinCAT ab V2.8

PC (i386), CX1000

ModbusRTU.lib   (ab Version 2.2)

TwinCAT ab V2.8

Buscontroller BC

ModbusRTU.lb6  (ab Version 2.2)