Python 使用CPPPO读取具有已知对象类、程序集实例和属性ID的以太网/IP设备

Python 使用CPPPO读取具有已知对象类、程序集实例和属性ID的以太网/IP设备,python,iot,industrial,cognex,Python,Iot,Industrial,Cognex,从工业以太网/IP Cognex条形码扫描仪中获取基本信息有点困难 根据Cognex文档“DataMan ID Reader对象(类代码:0x79)”Input Assembly Instance=11,它随后显示该对象的一个表,在字节14~15=结果数据长度处为16位整数 From cpppo.server.enip.get_attribute import proxy_simple, proxy vendor, product_name, zz = proxy_simple( '10.20

从工业以太网/IP Cognex条形码扫描仪中获取基本信息有点困难

根据Cognex文档“DataMan ID Reader对象(类代码:0x79)”Input Assembly Instance=11,它随后显示该对象的一个表,在字节14~15=结果数据长度处为16位整数

From cpppo.server.enip.get_attribute import proxy_simple, proxy 
vendor, product_name, zz = proxy_simple( '10.202.180.90' ).read( [('@1/1/1','INT'),('@1/1/7','SSTRING'),('@0x79/11/14','UINT')] )
print(product_name)
print(vendor)
print(zz)

>>>['DataMan DM262 Reader']
>>>[678]
>>>None
我得到了产品名称、供应商编号,但无法让它返回任何结果数据长度。文档中的另一个表说明了相同数据的属性ID 0X17和类型单位。所以我尝试了('@0x79/11/0x17','UNIT'),但也返回了'None'

如果有任何想法,我将不胜感激




尝试在python中使用telnetlib库

from telnetlib import Telnet
import time

tn = Telnet('192.168.1.112', 23, 2)
trigger = "||>TRIGGER ON".encode('ascii') + b'\r\n'
tn.write(trigger)
time.sleep(0.1)
resultstring = tn.read_very_eager().decode('utf-8')
tn.close()
我不得不加上一个短暂的延迟,让扫描仪有时间准备好结果。从那里,您可以根据需要处理结果字符串。例如,我使用:

if resultstring == '000':
    pass
else:
    resultstring = resultstring[:-2]
print(resultstring)
由于“000”是错误的读取字符串,并且在字符串末尾添加\r\n是正确的读取


DataMan Control Commmands chm文件向您显示了所有可以使用的命令

我终于找到了答案。CIP对象是0x79,实例是1,属性是0x10。这给了我一个整数数组,里面有我需要的所有数据

from cpppo.server.enip.get_attribute import proxy_simple
vendor, product_name, zz = proxy_simple( '10.202.180.66' ).read( [('@1/1/1','INT'),('@1/1/7','SSTRING'),('@0x79/1/0x10','SINT')] )

print(vendor)
print(product_name)
print(zz)
[678] ['DataMan DM374'] [20, 0, 1, 0, 0, 0, 13, 0, 48, 54, 52, 48, 53, 50, 50, 55, 49, 48, 56, 50, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]


感谢您的反馈。我应该澄清一下,我只是想让它在EIP上工作,因为我已经让它在Modbus上工作了一段时间,但EIP似乎是行业向新标准的自然发展,让我可以访问更多的设备,所以我正试图让我知道的东西,比如这个设备,在不同的协议上工作。这就是我尝试使用cpppo的原因