几天来,我一直在尝试使用libnodave作为通信库与西门子的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执行它时,它不是。
提前致谢。
答案 0 :(得分:1)
首先在虚拟机上运行与在真实计算机上运行不同。 它在Windows上运行并不保证它在Linux下运行,尽管源是相同的和/或使用相同的库。 基本上Linux下的预编译程序是唯一可以运行的证据。
每当我遇到这方面的问题时,我会查看使用的编译器版本和编译器设置。使用调试选项运行代码因使用硬件通信破坏代码而臭名昭着。
如果您还没有使用Wireshark,我建议您使用它。它是查看正在发生的事情的完美工具。