与西门子S7 PLC的C#TCP连接 - 网络新手

时间:2015-03-13 12:42:53

标签: c# network-programming port plc

我想在PC和s7-PLC之间建立双向通信设置。 到目前为止,我已成功使用此处的开源驱动程序单向设置: https://github.com/killnine/s7netplus

这个驱动程序允许我告诉PC从PLC获取数据,并写入数据。但问题是我想为特定的PLC数据设置一个onChanged事件,而当前实现这一目的的唯一方法是对PLC的数据进行频率轮询,直到我发现它已经发生变化。

我希望它能够更加中断驱动,因此当数据发生变化时,PLC会异步向PC发送信号,从而加快响​​应速度,减少网络流量。

所以我找到了西门子开放式通信向导,基本上在PLC端配置了一个可以在PLC代码中引用的连接。我已经设置了连接,因此PLC是被动的并且正在寻找端口2000:

enter image description here

现在在我的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中等待它?

1 个答案:

答案 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自动化中   链