4

我正在尝试Hello World使用 Twincat3 和虚拟 PLC(在我的计算机上本地运行的 PLC)创建一个简单的 Modbus TCP/IP 程序。

  • 我已经设置了一个 LabVIEW Modbus TCP/IP 主 + 从程序(两者都在工作,请参见下面的屏幕截图)。
  • 我可以在LabVIEW的主程序和从程序之间发送数据。并且还从 Python 脚本中读取数据(所以我确定它们都在工作)。
  • 现在我尝试使用Beckhoff 示例创建一个 Twincat3 程序来设置一些寄存器。

我试过的:

  • 我尝试将ipAddr参数更改为:'localhost', '192.168.88.1', '192.168.88.126'
  • 我也尝试过nUnitID设置:(0, 1, 16#FF16#FFBeckhoff 文档指定)

这是我的倍福代码:

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 

为了使这个示例工作,我应该在我的代码中进行哪些更改?


关于LabVIEW程序的信息:

  • 我正在使用 Modbus TCP 主/从示例
  • IP 地址设置为'localhost',端口设置为502(应该与我的 Beckhoff 代码中的 IP 地址匹配)
  • 我 100% 确定它可以工作,因为我也尝试过通过 Python 脚本连接到这个程序。

我的 LabVIEW 程序的图片:

在此处输入图像描述

编辑

virtual PLC我的意思是这个目标PLC :

在此处输入图像描述

4

1 回答 1

3

您没有提到您已经安装了TF6250,这是必要的。您需要在PLC上安装TF6250:

https://www.beckhoff.com/en-en/products/automation/twincat/tfxxxx-twincat-3-functions/tf6xxx-tc3-connectivity/tf6250.html

于 2021-10-13T05:54:59.873 回答