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

以太网/ IP设备:能够使用CPPPO读取属性,但不能写入

如何解决以太网/ IP设备:能够使用CPPPO读取属性,但不能写入

我正在构建一个Python脚本来与EtherNet / IP设备(Graco PD2K喷涂系统)进行通信。供应商提供的唯一文档是如何将Allen Bradley PLC配置为与设备进行通信的客户端。

Allen-Bradley Configuration

使用以下代码,我可以在Assembly Instance 100上读取属性数组:

from cpppo.server.enip.get_attribute import proxy_simple

via = proxy_simple('192.168.10.5')
with via:
     data,= via.read( [('@4/100/3','DINT')] )

...导致接收回预期的数组:

[0,-1,10,0]

(39 x 32位整数)

当尝试在Assembly实例150上写入属性时,我从控制器收到了True回复,但是控制器没有更新参数。期望使用25 x 32位整数数组:

with via:
    result,= via.read([('@4/150/3=(DINT)4,1,0','@4/150/3')],1)

上面的输出是:

@4/150/3=(DINT)4,0 == True 

如果我向数组添加一个整数(或减去或尝试设置@ 4/150/3以外的值),我将返回None,因此很明显,我在格式和命令上已经接近正在通过。

我已经多次与供应商联系,他们坚持认为这是Python的问题(或更具体地说,他们不支持Python,建议与PLC集成)。

我想知道装配实例1的“配置”参数是否存在问题(请参见上图)。我尝试了以下代码的多个版本来尝试编写该参数。我还没有完全理解EtherNet / IP协议,甚至不知道特定实例的作用-但是,它是Allen-Bradley配置中的参数,表明在这种情况下它很重要。

尝试输入代码

result,= via.read([('@4/1/3=(USINT)0','@4/1/3')],1)

我尝试使用Molex EnIP实用程序以及SourceForge上的类似工具将Python排除在外,但结果相似。我也尝试过pycomm3模块,但是我什至无法获得它返回ID信息。我还尝试过将-vvv与CPPPO命令行实用程序一起使用:

python -m cpppo.server.enip.get_attribute -a 192.168.10.5 '@4/150/3=(DINT)4,0' -vv -S

产生的结果(以及更多我认为不相关的输出):

11-09 12:11:18.119 MainThread enip.cli DETAIL   issue      Sending  1 (Context       b'0')
11-09 12:11:18.120 MainThread enip.cli DETAIL   pipeline   Issuing     0/  1; curr:   0 - last:  -1 ==   1 depth vs. max   0
11-09 12:11:18.124 MainThread enip.cli DETAIL   __next__   Client CIP Rcvd: {
    "send_data.interface": 0,"send_data.timeout": 8,"send_data.CPF.count": 2,"send_data.CPF.item[0].type_id": 0,"send_data.CPF.item[0].length": 0,"send_data.CPF.item[1].type_id": 178,"send_data.CPF.item[1].length": 4,"send_data.CPF.item[1].unconnected_send.request.input": "array('B',[144,0])","send_data.CPF.item[1].unconnected_send.request.service": 144,"send_data.CPF.item[1].unconnected_send.request.status": 0,"send_data.CPF.item[1].unconnected_send.request.status_ext.size": 0,"send_data.CPF.item[1].unconnected_send.request.set_attribute_single": true
}
11-09 12:11:18.124 MainThread enip.cli DETAIL   collect    Receive  1 (Context       b'0')
11-09 12:11:18.124 MainThread enip.cli DETAIL   pipeline   Completed   1/  1; curr:   0 - last:   0 ==   0 depth vs. max   0
Mon Nov  9 12:11:18 2020:   0: Single S_A_S      @0x0004/150/3 == True
11-09 12:11:18.124 MainThread enip.cli DETAIL   pipeline   Pipelined   1/  1; curr:   0 - last:   0 ==   0 depth vs. max   0
11-09 12:11:18.125 MainThread enip.get norMAL   main         1 requests in   0.006s at pipeline depth  0; 153.919 TPS

同样,请求的结果为True,但是控制器不会更新任何参数。

我不确定下一步该怎么做...

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