C#.Net与PLC通信的应用程序

时间:2015-03-17 17:53:12

标签: c# sockets tcp plc

我正在用C#.Net开发一个与PLC通信的应用程序。我希望应用程序通过TCP / IP进行通信。总之,我在C#.Net上有很好的经验,但我对这个领域很新。

应用程序的功能。

  1. 应用程序读/写PLC变量。
  2. 大约有2000/3000个PLC变量可供读/写。
  3. 应用程序UI显示每个变量的当前状态。
  4. 在写这篇文章之前,我在Google上谈到这个主题,并发现了几篇关于PLC通信的文章。

    大多数关于通过静态地址访问PLC数据的所有文章都根据不同的PLC而有所不同。

    我还读到了SCADA,它提供了应用程序和PLC之间的桥梁,但它是付费的。

    经过大量的冲浪后,我决定为系统创建一个POC。

    以下是POC的工作原理:

    1. 在PLC中,用户定义了不同的变量。
    2. PLC将所有变量发送到定义的IP端点。所有变量都作为一个字符串发送。变量值由分隔符分隔。
    3. 要读取这些变量值,我创建了一个TCP服务器(使用TCP侦听器类),它侦听定义的IP端点。它读取传入的数据,解析整个消息并将变量值分离为字符串数组。在该代码之后,对这些值进行进一步处理并在需要时更新任何变量值,然后在一个字符串中将所有变量值发送回PLC。
    4. 上述读/写周期每10毫秒发生一次。
    5. 目前它仅支持一个客户端(PLC)通信。
    6. 我测试了POC及其运行良好(100个变量),但如果变量和客户端(PLC)将来增加,我不确定通信方式和性能。

      这是进行这种沟通的好方法吗?

      您能否在构建可扩展的高性能应用程序时向我提供宝贵的建议?

4 个答案:

答案 0 :(得分:0)

据我所知,你的方法涉及plc中的大量编程。而且我们不喜欢那样。 我认为你应该使用一个OPC服务器并将你的应用程序连接到它。 其他解决方案是为西门子家族公司使用'freedave'库。

答案 1 :(得分:0)

看看AdvancedHMI。它是一个Visual Studio解决方案,具有许多用于从PLC读取数据的通信驱动程序。它基于VB,但很容易将C#项目添加到解决方案中。

http://www.advancedhmi.com

答案 2 :(得分:0)

我会使用Modbus。我不喜欢你如何从字符串中转换所有内容。 Modbus将以ushorts的形式读取字节,您可以使用显式布局自行运行转换。对于数字数据,这应该更快。这就是我对背景工作者所做的一切,它完美无缺。这个解决方案效果很好,特别是考虑到它是免费的,过去我使用OPC没有运气。

https://code.google.com/p/nmodbus/

答案 3 :(得分:0)

与plc的TCPIP通信可以使用仅与西门子plc兼容的开源API snap7完成。

也许更可靠的设置是通过opc服务器进行通信。这可以通过kepwareSNMP SIEMENS

来完成

有几个.net API可以bought允许通过这些协议通过opc进行通信(there are other protocols

  • 通过COM的OPC DA
  • 通过TCP或webservices的OPC UA

我已经成功地使用了第一个协议,虽然它仅用于在一个plc上读取+/- 500个变量,但无法就性能问题向您提供建议。

我认为通过opc进行沟通是推荐的方法。供应商api为您提供可行代码保证。成本opcda .net包装在800到1200美元之间