szlaur.jakub

Twincat3: Can't connect to LabVIEW's Modbus TCP/IP server via Tc2_ModbusSrv library (on virtual PLC)

1 post in this topic

I am trying to create a simple `Hello World` Modbus TCP/IP program using Twincat3 and virtual PLC (PLC running locally on my computer). 

  •  I have set up a LabVIEW Modbus TCP/IP master + slave program (both of which are working see screenshots below).
  •  I can send data between LabVIEW's master and slave programs. And also read the data from Python script (so I know for sure they are all working).
  •  Now I have tried to create a Twincat3 program to set some registers using Beckhoff example

What I have tried:

 - I have tried changing the ipAddr parameter to: 'localhost', '192.168.88.1', '192.168.88.126'
 - Also I have tried the nUnitID set to: 0, 1, 16#FF (16#FF as specified by Beckhoff docs)

This is my Beckhoff code:

    PROGRAM MAIN
    VAR
        ipAddr         : STRING(15) := '192.168.88.1'; //Tried also 192.168.88.126 and 192.168.88.1 'localhost'
        M0 AT %MB0     : ARRAY [0..3] OF WORD;
        nValue         : ARRAY [0..3] OF WORD;
        fbWriteRegs : FB_MBWriteRegs;
        bWriteRegs     : BOOL;
    END_VAR 
    
    IF NOT bWriteRegs THEN
        nValue[0]                := nValue[0]+1;
        nValue[1]                := nValue[1]+1;
        nValue[2]                := nValue[2]+1;
        nValue[3]                := nValue[3]+1;
        
        bWriteRegs                 := TRUE;
        
        fbWriteRegs.sIPAddr     := ipAddr;
        fbWriteRegs.nTCPPort     := 502;
        fbWriteRegs.nUnitID        := 16#FF;             //Tried setting this to 0,1 and it also and didnt work ...
        fbWriteRegs.nQuantity     := 4;
        fbWriteRegs.nMBAddr     := 16#3000;         //Tried: 16#3000, 0, 1
        fbWriteRegs.cbLength     := SIZEOF(nValue);
        fbWriteRegs.pSrcAddr     := ADR(nValue);
        fbWriteRegs.tTimeout     := T#5S;
        fbWriteRegs                (bExecute:=TRUE);
    ELSE
        
        IF NOT fbWriteRegs.bBUSY THEN
            bWriteRegs             :=FALSE;
            fbWriteRegs            (bExecute:=FALSE);
        END_IF
        
        fbWriteRegs                (bExecute:=FALSE);
    END_IF 

What should I change in my code in order to make this example work?

Thank you in advance for any support!

 

Info about LabVIEW programs:

  •  I am using the Modbus TCP Master / Slave examples
  •  The IP address is set to localhost and the port to 502 (which should match the IP address in my Beckhoff code)
  •  I am 100% sure it works because I have also tried connecting to this program via Python script.

Picture of my LabVIEW programs:

GPxM5.png

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now