使用pycomm

时间:2017-07-27 14:50:27

标签: python python-2.7 plc

我正在尝试将数据(特别是一个dint,但我的例子是BOOL)从plc移动到python,以用作显示图片的变量。问题是,如果我使用pycomm,我在Windows Powershell中收到错误。我觉得这是一个非常简单的错误,从一个基本的python错误而不是pycomm问题,但我没有足够的信息告诉你。

SYSINFO:

configparser==3.5.0  
cpppo==3.9.7  
greenery==2.1  
ipaddress==1.0.18  
pycomm==1.0.8  
pyreadline==2.1  
pytz==2017.2  
python==2.7.13

我正在使用的代码:

from pycomm.ab_comm.clx import Driver as ClxDriver
import logging

if __name__ == '__main__':
    c = ClxDriver()

    if c.open('IPADDRESSHERE'):

         print(c.read_tag(['new_Bool']))

         c.close()

这只是github https://github.com/ruscito/pycomm

上其中一个示例的精简版本

这是运行powershell的结果:

  

PS C:\ Users \ Tom \ Documents \ PythonProjects> python pycomm2.py   Traceback(最近一次调用最后一次):     文件“pycomm2.py”,第10行,in       打印(c.read_tag([ 'new_Bool']))     read_tag中的文件“C:\ Python27 \ lib \ site-packages \ pycomm \ ab_comm \ clx.py”,第359行       self.logger.warning(self._status)   AttributeError:'Driver'对象没有属性'logger'   PS C:\ Users \ Tom \ Documents \ PythonProjects>

我已经找到了这个AttributeError并试图找到一个解决方案,但我认为我找到的解决方案已经超出了我的想法。如果我没有提供一些细节以便让这个问题有意义,请告诉我。

编辑:

from pycomm.ab_comm.clx import Driver as ClxDriver
import logging


if __name__ == '__main__':
    logging.basicConfig(
        filename="ClxDriver.log",
        format="%(levelname)-10s %(asctime)s %(message)s",
        level=logging.DEBUG
    )
    c = ClxDriver()

    if c.open('IPADRESSHERE'):

        print(c.read_tag(['new_Bool']))


        c.close()

产生相同的属性错误。

  

PS C:\ Users \ Tom \ Documents \ PythonProjects> python pycommtest.py   Traceback(最近一次调用最后一次):     文件“pycommtest.py”,第15行,in       打印(c.read_tag([ 'new_Bool']))     read_tag中的文件“C:\ Python27 \ lib \ site-packages \ pycomm \ ab_comm \ clx.py”,第359行       self.logger.warning(self._status)   AttributeError:'Driver'对象没有属性'logger'   PS C:\ Users \ Tom \ Documents \ PythonProjects>

1 个答案:

答案 0 :(得分:2)

我能够读取一个值,但不能读取pycomm。使用CPPPO,我能够根据需要不断更新变量。这可能无法回答我的旧代码出了什么问题,但这是我的工作,以防未来有人做同样的事情。感谢用户Liverpool_chris和Reddit的深渊。

https://www.reddit.com/r/PLC/comments/5x3y5z/python_cpppo_library_writing_to_tag_in_plc/

from cpppo.server.enip.get_attribute import proxy_simple
import time

host = "IPHERE"
while True:
    x, = proxy_simple(host).read(( "CPID"))

    print x
time.sleep(5)