我正在寻找一种简单的方法,如果可能的话,制作一个可以读写/写入ROCKWELL PLC中标签的应用程序。
我需要的是一个简单的窗口,允许我键入PLC IP(它们都连接到网络)所以我可以连接到设备,一个加载所有PLC当前标签的容器,以及读取的能力和/或写入这些标签。
我认为自己是PLC和Java编程的初学者,所以我想知道是否有人能以某种方式帮助我。我说过JAVA,因为它是我所知道的编程语言,但是如果有另一个更好用的话就没关系,比如VBA。
这里的GUI不是问题,而是连接到设备并操纵它的变量。
答案 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
包装器的维护者之一。