跳转至

练习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