练习1-协议测试工具
简介
某公司开发的智能风泵设备 可以进行 远程网络控制。
该设备的远程控制协议 称之为 : DR接口协议
智能设备和 远程控制软件 之间 通过 DR接口协议 的消息进行 控制信息的交互。
该协议基于 TCP 长连接 ,设备是服务端,控制软件是客户端。
为了减低锻炼的难度,我简化了该接口,目前只有2种控制消息: 设备读取
和 设备设置
。
控制软件 通过 设备读取消息 获取 设备的 编码 和 状态, 通过 设备设置消息 设置 设备的 编码 和 状态 。
具体消息格式在后面讲解。
本次练习要求大家开发一款如下界面的客户端控制软件,实现该协议的客户端,方便进行功能测试。具体要求见视频讲解。
从而更好的掌握 Python开发图形界面工具 和 Socket网络通讯,以便将来在工作中开发各种协议测试软件。
锻炼前提
本次锻炼的前提是:要求大家比较熟悉
-
Python 编程语言
-
Python Socket编程,字节的概念
-
Python Qt 开发
下载风泵模拟器
本次练习需要对接 智能风泵设备,这里我们用模拟软件。
通过网盘分享的文件:智能风泵模拟器
解压压缩包后,进入解压后的目录,点击 run.exe
运行。
该模拟软件默认运行在 30088
TCP 服务端口,你们开发客户端软件需要 TCP Socket连接这个端口。
DR 消息格式
DR 接口消息格式如下图所示
包含的数据只有 整数
和 字符串
2种类型。
消息头和消息体中 所有 整数
数据 的字节 表示都是 高位在前 (big endian)
。
详细说明看视频讲解。
其中,
消息头
消息头由8个字节组成,都是 整数
:
前2个字节 表示消息的长度
第3到4个字节 表示消息的类型
后4个字节 表示消息ID,就是消息的编号。 同一个连接,一端发送的消息 ID必须 唯一 。 响应消息 和 请求消息的 ID 必须 相同 。
消息体
消息体由一个个 字段 组成.
每个字段都是 TLV(Type,Length,Value) 格式 :类型,长度,值
类型 一个整数字节, 表示该字段的含义
长度 一个整数字节, 表示该字段的长度。包括类型/长度 本身的2个字节
值 为变长字节, 表示该字段具体信息,可能是 整数 或者字符串。
DR 消息类型
设备读取 请求
该消息的类型码是: 0x01F0
字段 | 字段码 | 长度 | 说明 | 必要性 |
---|---|---|---|---|
返回信息 | 0xC1 | 3字节 | 整数类型 0 - 所有信息 1 - 设备编号 2 - 设备状态 |
必填 |
设备读取 响应
该消息的类型码是: 0x01F1
字段 | 字段码 | 长度 | 说明 | 必要性 |
---|---|---|---|---|
设备编号 | 0x01 | 变长,不超过10个字节 | 字符串类型 风泵在内网的编号 |
可选 |
设备状态 | 0x02 | 3字节 | 整数类型 0 - sleep 1 - run1 2 - run2 3 - run3 |
可选 |
设备设置 请求
该消息的类型码是: 0x02F0
字段 | 字段码 | 长度 | 说明 | 必要性 |
---|---|---|---|---|
设备编号 | 0x01 | 变长,不超过10个字节 | 字符串类型 风泵在内网的编号 |
可选 |
设备状态 | 0x02 | 3字节 | 整数类型 0 - sleep 1 - run1 2 - run2 3 - run3 |
可选 |
设备设置 响应
该消息的类型码是: 0x02F1
字段 | 字段码 | 长度 | 说明 | 必要性 |
---|---|---|---|---|
结果码 | 0xA0 | 3字节 | 整数类型 0 - 成功 1 - 失败 |
必填 |
结果描述 | 0xA1 | 变长 | 字符串类型 失败时,描述具体原因 |
可选 |
参考代码
该工具实现的 第一部分参考代码,可以在下面的网盘下载
链接: https://pan.baidu.com/s/1cXaPv3wO57LnA0bsCUCmnA?pwd=1111