Ethernet/IP是一种工业自动化领域中常用的网络通信协议,它是基于标准以太网技术的应用层协议。作为工业领域的通信协议之一,Ethernet/IP 提供了一种在工业自动化设备之间实现通信和数据交换的标准化方法。python要实现Ethernet/IP的客户端,可以采用pycomm3模块,但不一定是pycomm3,其中原委咋们慢慢聊,本文为第四篇。
一、对于generic_message方法的实验
1、必填参数的实验
从上一篇文章我们知道,generic_message是有一些必填参数的service、class_code、instance,我们打开一下第一篇文章中提供的文档直接查询看看:
(1)service
看标题service,应该是要填一下消息服务的参数
看目录service可填的还挺多
填什么呢?可以通过文档尝试,现在我们来看看正常的报文 ,这个更快。
看起来要填04,我们再看看这个这个方法能填啥?
库里面已经命名好字节,表明应该是按照官方文档的定义来实现的,我们直接写b"x04"
from pycomm3 import CIPDriver, Services, INTdef read_pf525_parameter(): drive_path = '192.168.1.189' with CIPDriver(drive_path) as drive: param = drive.generic_message( service=b"x04", class_code=b'x93', instance=41, ) print(param)read_pf525_parameter()
但并不像我们想象的那样,会有个 服务列表的请求,问题出在哪呢?
我们观察list server报文中,其实服务为0x0004,而且是在命令字段这一栏,是不是表明他其实是命令而不是对应我们的服务呢?再看到 Service类中,有个注释是通用CIP服务,那有没有可能我们的请求其实是不通用的呢?
持续更新中。。。
阅读全文
615