Beispiel: Schreiben mehrerer Register

Dieses Beispiel verdeutlicht, wie Sie per Modbus auf die Echtzeitumgebung eines TwinCAT Systems zugreifen können.

Die Modbusadresse 0x3000 zeigt bei einem Standard-Mapping des Modbus Servers auf den Merkerbereich der SPS (ADS-Indexgruppe 0x4020).

Nachdem Sie bWriteRegs aufrufen, wird das Array arrValue in den Merkerbereich und somit in die Variable M0 geschrieben.

PROGRAM MAIN
VAR
  ipAddr      : STRING(15) := '';
  M0 AT%MB0   : ARRAY [0..3] OF WORD;
  arrValue    : ARRAY [0..3] OF WORD;
  fbWriteRegs : FB_MBWriteRegs;
  bWriteRegs  : BOOL;
END_VAR
IF NOT bWriteRegs THEN
  arrValue[0]:= arrValue[0]+1;
  arrValue[1]:= arrValue[1]+1;
  arrValue[2]:= arrValue[2]+1;
  arrValue[3]:= arrValue[3]+1;

  bWriteRegs :=TRUE;

  fbWriteRegs.sIPAddr := ipAddr;
  fbWriteRegs.nQuantity := 4;
  fbWriteRegs.nMBAddr := 16#3000;
  fbWriteRegs.cbLength := SIZEOF(arrValue);
  fbWriteRegs.pSrcAddr := ADR(arrValue);
  fbWriteRegs.tTimeout := T#5s;
  fbWriteRegs(bExecute:=TRUE);

ELSIF NOT fbWriteRegs.bBUSY THEN
  bWriteRegs :=FALSE;
END_IF
  fbWriteRegs(bExecute:=FALSE);

Das Array arrValue wird in den Merkerbereich der SPS (M0), nach einer steigenden Flanke an bWriteRegs, geschrieben.

Voraussetzungen

Entwicklungsumgebung

Zielplattform

Einzubindende SPS-Bibliotheken

TwinCAT v3.0.0

PC or CX (x86)

Tc2_ModbusSrv