我想在PC和s7-PLC之间建立双向通信设置。 到目前为止,我已成功使用此处的开源驱动程序单向设置: https://github.com/killnine/s7netplus
这个驱动程序允许我告诉PC从PLC获取数据,并写入数据。但问题是我想为特定的PLC数据设置一个onChanged事件,而当前实现这一目的的唯一方法是对PLC的数据进行频率轮询,直到我发现它已经发生变化。
我希望它能够更加中断驱动,因此当数据发生变化时,PLC会异步向PC发送信号,从而加快响应速度,减少网络流量。
所以我找到了西门子开放式通信向导,基本上在PLC端配置了一个可以在PLC代码中引用的连接。我已经设置了连接,因此PLC是被动的并且正在寻找端口2000:
现在在我的c#侧,如何使用套接字建立连接?
// open the channel
_mSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
_mSocket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReceiveTimeout, 1000);
_mSocket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.SendTimeout, 1000);
IPEndPoint server = new IPEndPoint(IPAddress.Parse(IP), 2000);
_mSocket.Connect(server);
我对netowrking真的很陌生。如果PC是活动伙伴并建立连接,我希望能够同时接受来自PLC的数据, 如果我在某处设置了socket.BeginRecieve(),我是否仍然可以通过PC-> PLC主动通过套接字进行通信,还是会在BeginRecieve中等待它?
答案 0 :(得分:2)
我知道这是一个旧线程,但现在有一个比s7netplus更好的工具。
看看: Snap7 - Step7 Ethernet Communication Suite
Davide Nardella的优秀工具LGPL3。
<强>概述强>
Snap7是一个开源的32/64位多平台以太网 用于与Siemens S7 PLC本地连接的通信套件。该 新CPU 1200/1500,旧S7200,小LOGO 0BA7 / 0BA8和 SINAMICS驱动器也得到部分支持。
虽然它的设计目的是克服OPC的局限性 服务器在传输大量高速数据时 工业设施,它可以很好地扩展到基于Linux的小型设备或 推出Raspberry PI,BeagleBone Black,pcDuino, CubieBoard,UDOO和ARDUINO YUN。
三个专门的组件,客户端,服务器和合作伙伴,允许您 最终将基于PC的系统集成到PLC自动化中 链