c++ - Libnodave - 使用 TCP 连接的 daveStart() 错误

标签 c++ plc libnodave

我已经使用 libnodave 库建立了与 Siemens S7-300 PLC(通过 PlcSIM 模拟)的连接。连接 PLC 并将数据写入 PLC 没有问题。但是,我无法从开始/停止更改 PLC 的状态。我正在尝试使用以下 libnodave 方法来执行此类操作:

int daveStatus = daveStart(dc);
int daveStatus = daveStop(dc);

两个函数调用返回相同的错误:33794

nodave.c 引用错误如下:

case 0x8402:返回“CPU already in RUN or already in STOP?”;

daveStart()daveStop()函数的使用可以查看示例testS7online.c:

if(doStop) {
    daveStop(dc);
}
if(doRun) {
    daveStart(dc);
}

在示例中,启动/停止功能仅在与 PLC 建立 MPI 连接时调用。有谁知道启动/停止功能是否支持用于 TCP 连接?如果是这样,关于什么可能导致我的错误有什么建议吗?

最佳答案

我刚刚使用 libnodave 8.4 和 NetToPlcSim 工具尝试了 dc.start() 和 dc.stop()。它工作得很好。可能您没有使用通过 TCP/IP 连接到 PLCSim 的 NetToPlcSim 工具(显然是 127.0.0.1 端口 102),因此 dc 甚至无法连接。因此,如果您的线路不起作用,那么您一定做错了什么。

关于c++ - Libnodave - 使用 TCP 连接的 daveStart() 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19958712/

相关文章:

C# 和 PLC (S7-1200) 数据 block 读取错误 33028

logic - PLC 梯形逻辑输出

C# OPC 应用程序相同的代码,但工作方式不同

c++ - 无法弄清楚为什么代码在 C++ 中崩溃

c++ - 如何在 C++ Win32 GUI 中为文本框设置默认背景(灰色)文本?

plc - 如何在方法中定义枚举器?

plc - 从 Siemens s7-1200 (0x8104) 读取时出现 libnodave 错误

c++ - 改变存储在 QVector 中的结构的状态

c++ - 使用 <random> 和函数生成随机双 vector