Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/154.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 与S7-1200的LibNodeave通信_C++_Communication_Plc_Libnodave_S7 1200 - Fatal编程技术网

C++ 与S7-1200的LibNodeave通信

C++ 与S7-1200的LibNodeave通信,c++,communication,plc,libnodave,s7-1200,C++,Communication,Plc,Libnodave,S7 1200,几天来,我一直在尝试使用libnodave作为通信库,与西门子的S7-1200 PLC(CPU 1214C)进行通信。 libnodave库提供了一些功能。 Delphi应用程序正在运行,windows可执行文件正在运行 在Vmware上,我正在运行Linux,testISO_TCP的预编译二进制文件正在工作。 看来我能用,对吧 daveInterface * di; daveConnection * dc; _daveOSserialType fds; ds.rfd=openSocket(10

几天来,我一直在尝试使用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(直流)

请注意,将机架和插槽与Linux中执行的二进制文件进行比较时,机架和插槽保持不变

有人能帮我在EclipseIDE上工作吗?这很奇怪,所有的可执行文件/二进制文件都在工作,但当我想直接从IDE执行它时,就不行了


提前感谢。

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

每当我在这方面遇到问题时,我都会查看使用的编译器版本和编译器设置。使用调试选项运行代码会损坏硬件通信中的代码


如果您还没有使用Wireshark,我强烈建议您使用它。这是一个查看发生了什么的完美工具。

谢谢您的回答。我创建了一个程序并在Linux上进行了预编译。Linux在VMware上运行,因此不会出现任何问题。当我使用从Eclipse运行的相同程序时,它不工作。我认为Eclipse有问题,但我不确定。我已经检查了编译器版本,它们都是samen。在调试模式下运行没有什么区别。我也一直在使用wireshark,似乎我能够ping PLC,但它没有发送任何消息。你是在Eclipse中运行程序还是在shell中运行结果?可能是Eclipse阻塞了。我现在正在调查一个类似的问题。希望我能很快给你一个答案。在我的例子中,这项工作持续了一年多,但在我的图书馆例行重建之后,突然什么都不起作用了。我的猜测是nodave对构建标志非常敏感。