简易可变限速标志通信协议(公开)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
简易可变限速标志通信协议 v4.1
2000.11.10
通信参数:波特率 - 9600
数据位 - 8
奇偶校验 - 无校验
停止位 - 1
流控制 - 无
定义: STX - 0x02 (帧头)
ETX - 0x03 (帧尾)
ESC - 0x1B (转义符)
发送一帧时,若帧头与帧尾之间有任意字节等于 STX,ETX 或 ESC,则需转义:
STX 转成 ESC 和 0xE7
ETX 转成 ESC 和 0xE8
ESC 转成 ESC 和 0x00
一、取简易可变限速标志故障信息
发送:
STX 1字节
ADDR 2字节
'01' 2字节
CRC 2字节
ETX 1字节
应答:
STX 1字节
ADDR 2字节
STATE 4字节
CRC 2字节
ETX 1字节
*注:① ADDR 为可变情报板地址,范围 '01' - '99','00' 为广播地址。
② CRC 的生成多项式为 G(X) = X^16 + X^12 + X^5 + 1,计算时不包括 STX。
③ STATE 为可变情报板状态,先定义如下两字节:
┌─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┐
│15│14│13│12│11│10│ 9│ 8│ 7│ 6│ 5│ 4│ 3│ 2│ 1│ 0│
└┬┴─┴─┴─┴─┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┴┬┘││││││││││││
└────┬────┘温保防输保单显保保保
│度留雷入留像示留留留
保留异器 220V 素电
常故交管源
故障流故故
障电障障
故
障
然后每四位拆成一字符:
0x0 - 0x9 转换成 '0' - '9'
0xA - 0xF 转换成 'A' - 'F'
二、发送简易可变限速标志显示内容
发送:
STX 1字节 //0X02
ADDR 2字节 //00
'22' 2字节 //命令号
显示字符串不定长 //60
CRC 2字节 //crc
ETX 1字节 //0x03
应答:
STX 1字节
ADDR 2字节
OK 1字节
CRC 2字节
ETX 1字节
*注:① OK 为返回值,'0' 表示此命令执行成功,否则表示失败。
三、获取简易可变限速标志显示内容
发送:
STX 1字节
ADDR 2字节
'23' 2字节
CRC 2字节
ETX 1字节
应答:
STX 1字节
ADDR 2字节
显示字符串不定长
CRC 2字节
ETX 1字节
四、改变简易可变限速标志亮度调节方式
发送:
STX 1字节
ADDR 2字节
'04' 2字节
BMODE 1字节
CRC 2字节
ETX 1字节
应答:
STX 1字节
ADDR 2字节
OK 1字节
*注:① BMODE 为亮度调节方式,定义如下:
'0' - 自动调节
'1' - 手动调节
五、调节简易可变限速标志的显示亮度
发送:
STX 1字节
ADDR 2字节
'05' 2字节
RED 2字节
GREEN 2字节
BLUE 2字节
CRC 2字节
ETX 1字节
应答:
STX 1字节
ADDR 2字节
OK 1字节
CRC 2字节
ETX 1字节
*注:①此命令只有在亮度为手动调节时才合法。
② RED 为红基色亮度,范围 '00' - '31'。
③ GREEN 为绿基色亮度,范围 '00' - '31'。
④ BLUE 为蓝基色亮度,范围 '00' - '31'。
六、取简易可变限速标志的亮度调节方式和当前显示亮度
发送:
STX 1字节
ADDR 2字节
'06' 2字节
CRC 2字节
ETX 1字节
应答:
STX 1字节
ADDR 2字节
BMODE 1字节
BRI 2字节
CRC 2字节
ETX 1字节
*注:① BRI 为简易可变限速标志的当前显示亮度,范围 '00' - '31'。
七、开启或关闭简易可变限速标志
发送:
STX 1字节
flag_ON1 2字节
flag_ON2 2字节
flag_OFF1 2字节
flag_OFF2 2字节
CRC 2字节
ETX 1字节
应答:
STX 1字节
ADDR 2字节
OK 1字节
CRC 2字节
ETX 1字节
*注:①若 flag_ON1、flag_ON2 的四字节都为 '+',则开启简易可变限速标志;
若 flag_OFF1、flag_OFF2 的四字节都为 '+',则关闭简易可变限速标志。
开启优先。
【附】 CRC16 的计算
WORD gen_crc(BYTE far *frame, short frame_len)
{
BYTE c, treat, bcrc;
WORD wcrc = 0;
short i, j;
for (i = 0; i < frame_len; i++)
{
c = frame[i];
for (j = 0; j < 8; j++)
{
treat = c & 0x80;
c <<= 1;
bcrc = (wcrc >> 8) & 0x80;
wcrc <<= 1;
if (treat != bcrc)
wcrc ^= 0x1021;
}
}
return wcrc;
}
. .