为什么我在 TwinCAT 3 项目中无法通过 Modbus 从 Factory IO 接收到任何数据?

问题描述 投票:0回答:3

我已经设置了第一个 Factory IO 教程场景,只有一个输入和一个输出(线圈)。我已将 Factory IO 配置为使用具有以下设置的“Modbus TCP/IP 服务器”:

Host:             127.0.0.1
Port:             502
Slave ID:         255
Network adapter:  Software Loopback Interface 1
All other values at default

我运行模拟并将其置于一个输入(传感器)应返回值的状态。

在我的 TwinCAT 项目中,我有以下内容:

声明:

PROGRAM MAIN
VAR
    LFB_MBReadInputs : FB_MBReadInputs;
    LFB_MBWriteCoils : FB_MBWriteCoils;
    inputs : ARRAY [0..15] OF BYTE; 
    coils : ARRAY [0..15] OF BYTE;
END_VAR

实施:

// Get the status of the inputs
LFB_MBReadInputs(
    sIPAddr := '127.0.0.1',
    nTCPPort := 502,
    nUnitID := 255,
    nQuantity := 16,
    nMBAddr := 0,
    cbLength := SIZEOF(inputs),
    pDestAddr := ADR(inputs),
    bExecute := TRUE,
    tTimeout := T#1S,
    bBusy => ,
    bError => ,
    nErrId => ,
    cbRead => ,
 );
LFB_MBReadInputs(bExecute := FALSE);

在 TwinCAT 中,我执行“激活配置”、“在运行模式下重新启动 TwinCAT”,登录,将程序下载到虚拟 PLC,然后单击“开始”。程序似乎正在运行,但字节数组

inputs
显示全为零。

我尝试切换到我的实际 IP 地址而不是家庭地址,我已将其从多个功能重构为只有一个“主要”功能。我的代码有错吗? TwinCAT 或 Factory IO 中是否有一些我不知道的设置可以让它工作?

编辑:我已经在自己的回答中解释了问题的原因,这是因为我没有安装 TwinCAT 的 TCP/IP 插件。然而,它可能会帮助将来的人知道,当我检查“nErrId”字段时,我得到的值为“6”,根据文档,这意味着无法访问 Modbus 服务器。这就是我检查连接本身的原因,因为 IP 地址和端口是正确的。另外,最后我不得不切换到我的实际网络适配器而不是“软件环回接口”

plc twincat structured-text
3个回答
1
投票

您必须给功能块时间来完成其工作。通过在同一扫描中使用

bExecute:=true
bExecute:=false
执行 FB,它可能无法运行。尝试消除第二个
LFB_MBReadInputs
调用,并修改第一个以使用
bExecute := NOT bBusy

对于

FB_MBReadInputs
nQuantity
表示位,而
cbLength
表示字节。因此,只会写入数组的前两个元素。在设备之间匹配 Modbus 地址可能很棘手。
nMBAddr
0 可能相当于其他设备中的地址 100000 或 100001。正如@Roald 提到的,检查功能块中的错误代码。


0
投票

很抱歉在这里回答我自己的问题,但感谢@kolyur和@Roald,我设法让它工作。

我的问题是 TwinCAT PLC 无法看到 Factory IO 中运行的 Modbus 服务器,因为未启用 TCP/IP 连接。我下载了两个用于 TwinCAT 的模块,一个用于 TCP/IP 客户端/服务器连接,另一个用于 Modbus。然后,在我的项目中,我为它们生成了试用许可证并运行了我的项目。如果我在执行后检查错误代码字段并注意到错误代码表示它无法到达 Modbus 服务器,我可能会更快地诊断出它。


0
投票

有一个 YouTube 教程,用于将 FactoryIO 链接到 twincat。我按照那里的说明将我的项目连接到 FactoryIO。

https://m.youtube.com/watch?v=NnkdgnSNGz4

最美好的祝愿

© www.soinside.com 2019 - 2024. All rights reserved.