如何使用cpppo写入compactlogix plc?
问题描述:
我对编程非常陌生,所以请耐心等待。我正在尝试使用覆盆子pi 3与L35E compactlogix进行通信来制作小型HMI程序。我已经使用C#编写的visual studio express。这是我第一次使用覆盆子。我已经在网上阅读,python运作得很好。我还在学习我周围的Python和Linux的方式,但发现网上的代码,我可以使用此代码从PLC读取标签:如何使用cpppo写入compactlogix plc?
from __future__ import print_function
from cpppo.history import timestamp
from cpppo.server.enip import client
host = "10.10.10.48"
tags = [ "Bit1", "Bit2", "Timer.PRE" ]
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))
我承认我只是在孔复制这一点,我可以找到我所想的一切。我知道这其中的大部分内容,但我无法在网上找到很多关于cpppo的信息,也无法知道如何写入标签。任何帮助将非常感激。
答
要启动一个最小的“模拟”的CompactLogix PLC主机的一些标签:
$ python -m cpppo.server.enip -v real=REAL reals=REAL[100] dint=DINT dints=DINT[100]
现在,读/写一些标签,我会建议使用cpppo.server.enip.get_attribute“代理” API ,因为它可能是读/写*的Logix PLC的最简单快捷的方式:
$ python
>>> from cpppo.server.enip.get_attribute import proxy
>>> with proxy("localhost") as via:
... list(via.write(["dint=10","dint","reals[0-3]","reals[1]=1.234","reals[0-3]","reals[1]=4.567"],"reals[0-3]"))
...
dint=10 == True
dint == 10
reals[0-3] == 0.0, 4.56699991226, 0.0, 0.0
reals[1]=1.234 == True
reals[0-3] == 0.0, 1.23399996758, 0.0, 0.0
reals[1]=4.567 == True
[True, [10], [0.0, 4.566999912261963, 0.0, 0.0], True, [0.0, 1.2339999675750732, 0.0, 0.0], True]
>>>
请注意,这不会与MicroLogix的PLC(或简单的,非路由CIP设备,如Allen-Bradley公司的PowerFlex工作);对于这些,请使用proxy_simple类。例如,请参阅cpppo/server/enip/ab.py。