第 4 章应用层协议的设计
在根据行业数据通信的特点选择了 TCP 协议或是 UDP 协议后,应用层协 议的设计显的非常重要。由于 GPRS 业务是根据通信流量计费的,所以应用层 协议的设计关系到整个系统的运行费用。但是,在尽可能的减少数据流量的同 时,要保证数据通信的稳定性、可靠性、实时性,以及协议的灵活性和扩展性。 下面提出两种应用层协议的设计和实现。
4 . 1 二进制通信协议的设计
4 . 1 . 1 报文结构
这种通信协议以二进制编码为基础,格式如下:
命令码( CMD 字段)
命令码有,系统参数读取命令,系统参数写命令,数据传输命令等。
系统参数设置命令,如表 4-1 。
系统参数读取命令,如表 4-2 。
数据传输命令,如表 4-3 。
其他命令,如表 4-4 。
4 . 1 . 3 报文例子
每条命令由发起方进行超时判断和可靠性控制。每次会话至少有两条报文 的发送。下面详细说明每个命令的会话过程,并给出示例。
(1) 系统参数设置命令
E1 设置服务器 ip 地址和端口号:服务器 ip 为上位机 IP 地址 ,端口号为通 信服务程序监听的端口号。上位机发送报文:
11 80 32000001 E1 0601010909090000 03 0006 D3123682 1392 (共 24 个字节)
下位机收到后立即回复报文:
11 00 32000001 E1 0601010909090000 03 0006 (共 18 个字节)
E2 设置上传频率:上传频率为数据上发时间间隔单位为秒。上位机发送报
文: 11 80 32000001 E2 0601010909090000 03 0002 0258 (共 20 个字节)
下位机收到后立即回复报文:
11 00 32000001 E2 0601010909090000 03 0002 (共 18 个字节) E3 设置下位机时间。
上位机发送报文:
11 80 32000001 E3 0601010909090000 03 0008 0601010909090000 (共 26 个字节) 下位机收到后立即回复报文:
11 00 32000001 E3 0601010909090000 03 0008 (共 18 个字节) E4 设置下位机心跳包间隔。单位为秒。
上位机发送报文: 11 80 32000001 E4 0601010909090000 03 0001 3C 共 19 个字 节。
下位机收到后立即回复报文: 11 00 32000001 E4 0601010909090000 03 0001 共 18 个字节。
E5 设置报警上下限。数据域为:通道号 + 上限 + 下限 [+ 通道号 + 上限 + 下限 ]
上位机发送报文: 11 80 32000001 E5 0601010909090000 03 0009 04 12345678 12345678 共 27 个字节。
下位机收到后立即回复报文: 11 00 32000001 E5 0601010909090000 03 0009 共 18 个字节。
(2) 系统参数读取命令
D1 读取服务器 ip 地址和端口号:服务器 ip 为上位机 IP 地址 ,端口号为通 信服务程序的端口号。
上位机发送报文: 11 80 32000001 D1 0601010909090000 03 0000 共 18 个字节
下位机收到后立即回复报文: 11 00 32000001 D1 0601010909090000 03 0006 D3123682 1392 共 24 个字节。
D2 读取上传频率:上传频率为数据上发时间间隔单位为秒。
上位机发送报文: 11 80 32000001 D2 0601010909090000 03 0000 共 18 个字节
下位机收到后立即回复报文: 11 00 32000001 D2 0601010909090000 03 00002 0258 共 20 个字节
D3 读取下位机时间。
上位机发送报文: 11 80 32000001 D3 0601010909090000 03 0000 共 18 个字节
下位机收到后立即回复报文: 11 00 32000001 D3 0601010909090000 03 0008 0601010909090000 共 26 个字节。
D4 读取下位机心跳包间隔。单位为秒。
上位机发送报文: 11 80 32000001 D4 0601010909090000 03 0000 共 18 个字节
下位机收到后立即回复报文: 11 00 32000001 D4 0601010909090000 03 0001 3C 共 19 个字节
(3) 数据传输命令
C1 定时上传:下位机根据设定的数据定时上传频率,主动发送数据。
下位机发送报文: 11 00 32000001 C1 0601010909090000 03 0005 04 12345678 共 23 个字节。
上位机收到后立即回复报文: 11 80 32000001 C1 0601010909090000 03 0005 共 18 个字节。
C2 请求上传实时数据:与 C1 类似,不同的是由上位机发起实时数据的上 传。
上位机发送报文: 11 80 32000001 C2 0601010909090000 03 0000 共 18 个字节 下位机收到后立即回复报文: 11 00 32000001 C2 0601010909090000 03 0005 04 12345678 共 23 个字节。
C3 请求上传历史数据,数据域为两个时间,表示请求上传两个时间之间的 历史数据。
上 位 机 发 送 报 文 : 11 80 32000001 C3 0601010909090000 03 0010 0601010909090000 0601011409090000 共 34 个字节。
下位机收到后立即回复报文: 11 00 32000001 C3 0601010909090000 03 000D 04 0601010909090000 12345678 共 31 个字节。如果历史数据量大需要分组发送。
C4 报警上传。数据域:通道号 + 报警类型 + 报警值
下位机发送报文: 11 00 32000001 C4 0601010909090000 03 0006 04 01 12345678 共 24 个字节。
上位机收到后立即回复报文: 11 80 32000001 C4 0601010909090000 03 0005 共 18 个字节。
C5 解除报警。数据域为:通道号 + 报警类型 + 解除报警时数据值 下位机发送报文: 11 00 32000001 C5 0601010909090000 03 0006 04 01 12345678 共 23 个字节。
上位机收到后立即回复报文: 11 80 32000001 C5 0601010909090000 03 0006 共 18 个字节。 (4) 其他命令
A1 登陆(心跳)命令:下位机一旦拨号登陆上 GPRS 网络就向中心站发送。
数据域中是移动公司分配的动态 IP 地址(每次拨号分配的不同),和通信端口 好。
下位机发送报文: 11 00 32000001 A1 0601010909090000 03 0006 0A20629B 0CEF 共 24 个字节。
上位机收到后立即回复报文: 11 80 32000001 A1 0601010909090000 03 0006 共 18 个字节。
A2 控制命令打开继电器。数据域为要打开的继电器通道号。
上位机发送报文: 11 80 32000001 A2 0601010909090000 03 0001 10 共 19 个字 节。
下位机收到后立即回复报文: 11 00 32000001 A2 0601010909090000 03 0002 10 FF 共 20 个字节。
A3 控制命令关闭继电器。数据域为要关闭的继电器通道号。
上位机发送报文: 11 80 32000001 A3 0601010909090000 03 0001 10 共 19 个字 节。
下位机收到后立即回复报文: 11 00 32000001 A3 0601010909090000 03 0002 10 00 共 20 个字节。
A4 透明传输命令,用于上位机直接控制下位机所接仪器。下位将收到数据 域直接发送到指定通道,对数据不做任何处理,也就是说数据域中的数据应该 为该通道所接仪表的命令。
上位机发送报文: 11 80 32000001 A4 0601010909090000 03 0005 04 FF00FF00 共 23 个字节。
下位机收到后立即回复报文: 11 00 32000001 A4 0601010909090000 03 0005 共 18 个字节。
A5 重新启动下位机通信模块。
上位机发送报文: 11 80 32000001 A5 0601010909090000 03 0000 共 18 个字节
下位机收到后立即回复报文: 11 00 32000001 A5 0601010909090000 03 0000 共 18 个字节。
A6 重新启动下位机通信模块。
上位机发送报文: 11 80 32000001 A6 0601010909090000 03 0000 共 18 个字节
下位机收到后立即回复报文: 11 00 32000001 A6 0601010909090000 03 0000 共 18 个字节。