Twincat3:无法通过 Tc2_ModbusSrv 库(在虚拟 PLC 上)连接到 LabVIEW 的 Modbus TCP/IP 服务器
Twincat3: Can't connect to LabVIEW's Modbus TCP/IP server via Tc2_ModbusSrv library (on virtual PLC)
我正在尝试使用 Twincat3 和虚拟 PLC(本地计算机上的 PLC 运行)创建一个简单的 Hello World
Modbus TCP/IP 程序。
- 我已经设置了一个 LabVIEW Modbus TCP/IP master + slave 程序(两者都在工作,见下面的截图)。
- 我可以在LabVIEW的主从程序之间发送数据。并且还从 Python 脚本中读取数据(所以我确定它们都在工作)。
- 现在我尝试创建一个 Twincat3 程序来使用 Beckhoff example 设置一些寄存器。
我试过的:
- 我尝试将
ipAddr
参数更改为:'localhost', '192.168.88.1', '192.168.88.126'
- 我还尝试将
nUnitID
设置为:0, 1, 16#FF
(16#FF
由 Beckhoff 文档指定)
这是我的 Beckhoff 代码:
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:
你没有说你已经安装了TF6250,这是必须的。
需要在PLC上安装TF6250:
我正在尝试使用 Twincat3 和虚拟 PLC(本地计算机上的 PLC 运行)创建一个简单的 Hello World
Modbus TCP/IP 程序。
- 我已经设置了一个 LabVIEW Modbus TCP/IP master + slave 程序(两者都在工作,见下面的截图)。
- 我可以在LabVIEW的主从程序之间发送数据。并且还从 Python 脚本中读取数据(所以我确定它们都在工作)。
- 现在我尝试创建一个 Twincat3 程序来使用 Beckhoff example 设置一些寄存器。
我试过的:
- 我尝试将
ipAddr
参数更改为:'localhost', '192.168.88.1', '192.168.88.126'
- 我还尝试将
nUnitID
设置为:0, 1, 16#FF
(16#FF
由 Beckhoff 文档指定)
这是我的 Beckhoff 代码:
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:
你没有说你已经安装了TF6250,这是必须的。 需要在PLC上安装TF6250: