英格索兰扳手网口通信协议EOR原理

it2024-11-16  3

前言

前几天遇到这个需求,需要记录扳手每一次的周期数据,但是我不知道通信协议是什么,只知道是一个tcp的连接,问售后,也不给我网口调试软件(英格索兰自己家的软件)。经过我俩天的谷歌,终于找到了他们公司软件,在一个开放的ftp服务器上,我佛了,一个垃圾玩意,还自己弄一套协议。

服务器地址:ftp://ftp.irco.com 用户:asSoftwareRead 密码:4&4erum6?a

其中包含我需要的 EOR网口测试工具 (Ethernet EOR Test Tool)

调试方法

找到这个工具后,一切都变得容易了: 这个是官方的用户手册的内容,其实流程就是,设置好ip地址,端口不用设置(也没法设置,默认为1069),然后点击connect,然后点击一个login(俩种类型login我不知道有啥区别,都可以使用), 看到,sent messages文本框中有一些数据,这个就是建立tcp 连接后发送的数据了。 类似这样: 然后,也是最后一步,需要点击 custom EOR act这个按钮,之后扳手运行才会正常记录数据(你在ics软件中自定义的数据格式) 就是这个界面定义的数据字段及格式,我第一次用standard那个按钮发现输出的数据和自己定义的不一致(想想名字也知道了,一个是标准,一个是自定义)

那么,知道这个流程后,来使用代码进行记录这些数据就简单了,这个是tcp连接,所以我用socket简单的实现了这个过程

代码实现

import socket import logging obj=socket.socket() obj.connect(("192.168.4.4",1069)) obj.send("SES01Q0200000028ICS,ICS USER,INSIGHTWRITE,10".encode()) ret=obj.recv(1024) obj.send("SES01A0200000000".encode()) logging.info(ret.decode()) time.sleep(0.1) # 标准EOR # obj.send("EOR01Q03000000011".encode()) #自定义EOR obj.send("EOR02Q01000000011".encode()) ret=obj.recv(1024) # obj.send("SES01A0300000000".encode()) obj.send("SES01A0100000000".encode()) logging.info("连接成功!") while True: ret=obj.recv(1024).decode().split(",") if len(ret) == 1: #防止断开连接 logging.info(ret[0].replace("U","A")) obj.send(ret[0].replace("U","A").encode()) else: obj.send((ret[0][:-6][:-3].replace("U","A")+"000").encode())

这里我定义的EOR数据分割符是 ,如果你在ics软件中定义的是空格或者其他的请自行修改。

最新回复(0)