微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用CPPPO读取具有已知对象类,组合件实例,属性ID的以太网/ IP设备

如何解决使用CPPPO读取具有已知对象类,组合件实例,属性ID的以太网/ IP设备

从工业以太网/ IP康耐视条形码扫描仪中获取基本信息有点麻烦。

根据Cognex文档“ DataMan ID读取器对象(类代码:0x79)” 输入装配实例= 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,并且为此数据输入了UNIT。所以我尝试了('@ 0x79 / 11 / 0x17','UNIT'),但是也返回了'None'。

我将不胜感激任何想法。

Picture of AttributeID Table
Picture of Input Assembly
https://github.com/pjkundert/cpppo

解决方法

尝试在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文件显示您可以使用的所有命令。 https://support.cognex.com/en/documentation/dataman/dm-260

,

我终于想通了。 CIP Object 为 0x79,Instance 为 1,Attribute 为 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,1,13,48,54,52,53,50,55,49,56,57,0]

Output Window

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。