我想知道如果只是简单地与PLC
进行通信,比如读写标签,我是否需要OPC-UA
服务器附带的所有其他繁重工作?
我尝试在Python
中编写一个与PLC通信的简单服务器,但在从PLC
请求信息时我被拒绝了。
我尝试与之通信的Controllogix
PLC使用Ethernet/IP
进行通信,那么为什么简单的服务器/客户端脚本不起作用?通常需要什么才能与Allen Bradley PLC
或PLC's
进行沟通?
答案 0 :(得分:2)
与PLC通信需要相当多的时间。
每个供应商都有一个驱动程序,有固件兼容性考虑因素。要考虑不同的协议。
OPC-UA使其更通用,但OPC-UA在设置通信时仍有一系列可解决的问题。
我使用过的大部分OPC产品都需要调整其安全性以允许匿名通信。这样做通常是不好的做法。 (网络入侵将能够读/写您的自动化层)如果您正在寻找简单的通信,则需要关闭证书签名和一些加密业务。 (再一次,这不是一个好习惯,但可以学习)
毕竟你必须知道如何在OPC服务器上设置PLC,有通道,设备,命名空间等。你会将OPC客户端指向某个opc.tcp://:< / p>
如果你到目前为止已经差不多完成了,我假设您的OPC服务器正在运行并且此时已配置了标签。您可以使用OPC-UA API进行读取。它只能返回值,或者您可以使用标记运行状况,时间戳和一堆其他数据来返回对象。取决于实施。之后,您可以进行订阅,写作......无论您需要什么。
TLDR:OPC服务器不是必需的,但可能是最简单的方法。关闭安全性。 (但在将控制层暴露给网之前将其重新打开)
答案 1 :(得分:1)
取决于几个因素,如果你想要一些简单的程序,你可以选择Modbus / TCP我认为一些AB PLC支持它而无需额外的硬件。
但是,如果您想要更安全的东西,例如工业用途,那么OPC UA将是更好的选择,但编程的复杂性远远高于Modbus,即使使用OPC Foundation或其他库也是如此。可以选择使用商业或免费(如果有)OPC UA服务器来保存工作,那么您只需要对客户端进行编程。
使用以太网/ IP也应该是可能的,但问题是没有明确的规范,甚至不同的AB型号都会说不同的以太网/ IP方言! ,它的编程也比Modbus复杂得多。
答案 2 :(得分:1)
我对这次谈话也有点迟了。如果您有兴趣编写自己的解决方案并且不想使用任何商业标准,则AdvancedHMI主要是&#34;主要是&#34;用VB.NET编写的开源解决方案,100%免费,并提供与许多不同PLC(包括ControlLogix平台)的通信。由于我发现您使用Python编程,您可能也有兴趣知道该项目在Linux OS上的Mono下工作。我用它来编写EthernetIP和ModbusTCP之间的网关,并从OEM设备串行提取数据并将这些数据推送到CLX PLC。
该论坛充满了许多有用的提示,并且非常活跃和支持。
试着给你另一种选择。 DDE,NetDDE,FastDDE,OPC,DCOM,Suitelink ....这些都很好,但主要是付费冒险。作为一名程序员,为了与我的硬件,恕我直言,只需要支付这么多钱,这似乎很荒谬。对不起,咆哮。玩得开心!
答案 3 :(得分:0)
我讨论的时间有点晚,但有一些商业工具可以让这更容易一些。当你说你正在使用python时,我想到的是Cogent的数据中心。它当然不是最便宜的工具,但它们已经完成了PLC / PC通信的所有繁重工作。安全
答案 4 :(得分:0)
如果尝试使用Python读取CLX数据,有几个开源实现可以为您节省大量工作。比如这个:
https://github.com/dmroeder/pylogix
如果使用.NET和Visual Studio,则可以使用AdvancedHMI
答案 5 :(得分:0)
能够通过其通信驱动程序RSLinx读取和写入ControlLogix平台的OPC标签。 RSLinx充当OPC服务器,需要配置为与PLC通信并在同一LAN上的联网PC上运行。有几种RSLinx可用(对于WAN / VLAN也是如此),但实际上这是您需要与AB PLC交谈的通信驱动程序