与S7-1200的libnodave通信

问题描述 投票:2回答:1

几天来,我一直在尝试使用libnodave作为通信库来与Siemens的S7-1200 PLC(CPU 1214C)进行通信。libnodave库提供了一些功能。Delphi应用程序正在运行,Windows可执行文件正在运行。

在Vmware上,我正在运行Linux,并且testISO_TCP的预编译二进制文件正在工作。好像我可以使用它,对吗?

daveInterface * di;
daveConnection * dc;
_daveOSserialType fds;
ds.rfd=openSocket(102, "192.168.0.1");
fds.wfd=fds.rfd;
if (fds.rfd>0) {
    di =daveNewInterface(fds,"IF1",0, daveProtoISOTCP, daveSpeed187k);
    daveSetTimeout(di,5000000);
    dc =daveNewConnection(di,0,0,1);  // insert your rack and slot here
    if (0==daveConnectPLC(dc)) 
    {
       printf("Connected..\n");
    }
}

但是当我将源代码1:1复制到我的IDE(Eclipse)时,出现以下错误消息:

IF1 error in daveConnectPLC() step 1. retrying...IF1 error in daveConnectPLC() step 1. retrying...IF1 error in daveConnectPLC() step 1. retrying...Couldn't connect to PLC.
Please make sure you use the -2 option with a CP243 but not with CPs 343 or 443.

似乎在连接到PLC时出现一些错误。以下函数会产生此错误:

DaveConnectPLC(dc)

请注意,将机架和插槽与Linux中已执行的二进制文件进行比较时,机架和插槽没有改变!

有人能够帮助我在Eclipse IDE上运行它吗?所有可执行文件/二进制文件都在工作很奇怪,但是当我想直接从IDE执行它时,事实并非如此。

提前感谢。

c++ communication plc libnodave s7-1200
1个回答
1
投票

首先所有在虚拟机上运行的计算机与在真实计算机上运行的计算机不同。尽管其来源相同和/或使用了相同的库,但它不能在Windows上运行并不能保证在Linux下运行。基本上,在Linux下预编译的程序是它可以并且可以运行的唯一证明。

[只要在这方面有问题,我都会查看所使用的编译器版本和编译器设置。使用调试选项运行代码以破坏硬件通信代码而臭名昭著。

如果您尚未使用Wireshark,我强烈建议您使用它。这是查看正在发生什么情况的完美工具。

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