简单的APP读写数据到ROCKWELL PLC(1756-A10 / A)

时间:2014-08-13 19:17:24

标签: java plc opc

我正在寻找一种简单的方法,如果可能的话,制作一个可以读写/写入ROCKWELL PLC中标签的应用程序。

我需要的是一个简单的窗口,允许我键入PLC IP(它们都连接到网络)所以我可以连接到设备,一个加载所有PLC当前标签的容器,以及读取的能力和/或写入这些标签。

我认为自己是PLC和Java编程的初学者,所以我想知道是否有人能以某种方式帮助我。我说过JAVA,因为它是我所知道的编程语言,但是如果有另一个更好用的话就没关系,比如VBA。

这里的GUI不是问题,而是连接到设备并操纵它的变量。

5 个答案:

答案 0 :(得分:2)

如果您知道Rockwell ControlLogix PLC中的标签名称,则可以使用https://github.com/pjkundert/cpppo从Python程序(来自Windows,Mac或Linux主机)快速读取和写入其值。要安装它,请运行,安装Python 2或3,然后运行:

pip install cpppo pytz

让我们假设您的Rockwell ControlLogix PLC位于域名"控制器"在您的本地网络中(或者,只是在下面host = "192.168.1.2"中使用其IP地址),并且它包含一个名为scada的标记,其中包含11个或更多CIP类型INT元素的数组:

from __future__ import print_function
from cpppo.history import timestamp
from cpppo.server.enip import client

host = "controller" # Or, simply use an IP address, eg: 192.168.1.2
tags = [ "scada[0-10]", "scada[1]=99", "scada[0-10]" ]

with client.connector( host=host ) as conn:
    for index,descr,op,reply,status,value in conn.pipeline(
            operations=client.parse_operations( tags ), depth=2 ):
        print( "%s: %20s: %s" % ( timestamp(), descr, value ))

假设代码scada存在,您会看到以下内容:

2015-05-25 14:35:15.891: Single Read  Tag  scada[0-10]: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
2015-05-25 14:35:15.897: Single Write Tag  scada[1-1]: True
2015-05-25 14:35:15.915: Single Read  Tag  scada[0-10]: [0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0]

如果您没有罗克韦尔ControlLogix PLC,您可以通过运行来模拟一个(至少读取/写入标签数据):

python -m cpppo.server.enip --print -v scada=INT[100]

答案 1 :(得分:1)

在这里您可以找到一个librairy,它允许您与Rockwell PLC进行通信。 (查看TuxPLC了解更多详情 - >文档是法语)

在这里你可以找到python中TuxPLC的改编版(如果你是初学者,这很容易理解)

https://github.com/gaynertechnical/python-tuxeip

读取然后在PLC中写入数据的示例(进行测试时要小心) 仔细阅读TuxEip文件夹(https://github.com/leicht/TuxPLC

中的文档

答案 2 :(得分:0)

我熟悉Python中的两个有用的库,它们允许连接到带有标签写入和读取的PLC。他们都运作良好,我已经尝试过了。

OpenOPC允许在简短的Python程序中进行连接,标记读取和写入。假设您在后台运行罗克韦尔的RSLinx程序以提供OPC服务器,最好是罗克韦尔 - 确保使用相同的OPC主题来解决PLC中与RSLinx上设置的标签相同的问题。你最终会得到类似的东西:

import OpenOPC
opc_client = OpenOPC.client()
opc_client.connect('RS Linx Remote OPC Server')
result = opc_client.read('[OPC_topic]tag_name')  # read a tag
opc_client.write('[OPC_topic]tag_name', value)  # write a tag
opc_client.close()

如果出于某种原因你无法使用RSLinx,那么可以使用pycomm在Python中使用另一种方法:

from pycomm.ab_comm.clx import Driver
clx_driver = Driver()
clx_driver.open(ip_address)
result = clx_driver.read_tag(tag_name)  # read tag
clx_driver.write_tag(tag_name, value)  #write tag
clx_driver.close()

希望这会有所帮助 - 我知道你更喜欢Java中的答案,但Python是我以前用过的。希望其他人可以提出特定于Java的答案。

答案 3 :(得分:0)

我参加聚会有点晚了,但是有一个非常有前途的新图书馆https://github.com/dmroeder/pylogix。我已经用它编写了一些Web应用程序应用程序,它非常易于使用。 从文档中:

Pylogix:

该项目将使您可以轻松地从中读取/写入值 使用基于以太网的I / P的罗克韦尔自动化Logix的PLC中的标签 蟒蛇。 PLC型号包括CompactLogix,ControlLogix和Micro8xx。 都支持Python2和Python3。

读取标签非常简单(根据示例):

from pylogix import PLC

with PLC() as comm:
    comm.IPAddress = '192.168.1.9'
    ret = comm.Read('CurrentScreen')
    print(ret.Value)

答案 4 :(得分:0)

有一整套围绕 import requests url ="https://financialmodelingprep.com/api/v3/profile/AAPL?apikey=demo" data = requests.get(url).json() data_pd = pd.DataFrame(data) if data_pd["price"] >= data_pd["dcf"]: 编写的包装器允许与 Rockwell PLC 进行通信。 Java 包装器在这里:https://github.com/libplctag/libplctag4j

话虽如此,更棘手的部分是实际的标签列表。为此,我使用了 INGEAR.NET(商业产品),但尚未在 libplctag 中完全实现(还)。此时,您只能查询顶级标签 - 您无法发现属于 UDT 实现的基本标签(尽管 UDT 会显示出来)。

免责声明:我是 libplctag 包装器的维护者之一。