commit
a5271f832f
119 changed files with 18018 additions and 0 deletions
@ -0,0 +1,33 @@ |
|||
### vim |
|||
*.swp |
|||
*.swo |
|||
*~ |
|||
|
|||
### Keil5 |
|||
/keil/* |
|||
/keilp/* |
|||
!*.sct |
|||
!*.uvprojx |
|||
|
|||
### Source Insight |
|||
*.IAB |
|||
*.IAD |
|||
*.IMB |
|||
*.IMD |
|||
*.PFI |
|||
*.PO |
|||
*.PR |
|||
*.PRI |
|||
*.PS |
|||
*.WK3 |
|||
*.SearchResults |
|||
*.bookmarks.xml |
|||
*.snippets.xml |
|||
si/**/cache/ |
|||
si/**/Backup/ |
|||
si4/**/cache/ |
|||
si4/**/Backup/ |
|||
|
|||
### Source file |
|||
source/bak/ |
|||
/out/ |
|||
@ -0,0 +1,471 @@ |
|||
|
|||
|
|||
|
|||
共享打印机运维板通信协议 |
|||
传控科技(北京)有限公司 |
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
版本 |
|||
日期 |
|||
作者 |
|||
备注 |
|||
参与人 |
|||
1.0.0 |
|||
|
|||
zhangsan |
|||
无 |
|||
Zhou |
|||
1.1.0 |
|||
|
|||
zhangsan |
|||
无 |
|||
Zhou |
|||
1.2.0 |
|||
|
|||
zhangsan |
|||
无 |
|||
Zhou |
|||
1.6.0 |
|||
|
|||
zhangsan |
|||
无 |
|||
Zhou |
|||
1.7.0 |
|||
|
|||
zhangsan |
|||
无 |
|||
Cao,li |
|||
1.8.2 |
|||
|
|||
zhangsan |
|||
无 |
|||
Cao,li |
|||
1.8.3 |
|||
20190321 |
|||
zhangsan |
|||
无 |
|||
li |
|||
2.0.1 |
|||
20191914 |
|||
zhangsan |
|||
无 |
|||
|
|||
2.0.2 |
|||
20191106 |
|||
zhangsan |
|||
无 |
|||
|
|||
|
|||
目录 |
|||
共享打印机运维板通信协议 1 |
|||
一、通信协议 3 |
|||
1.1 协议格式 3 |
|||
1.2 地址定义(Addr) 3 |
|||
1.3 命令定义(Oper) 3 |
|||
1. 通用命令 3 |
|||
1.4 CRC校验 4 |
|||
二、上行数据 4 |
|||
2.1 数据包 4 |
|||
2.1.1 纸盒数据(3bytes) 5 |
|||
2.1.2 纸盒2(红外调试) 6 |
|||
2.1.3 红外数据(1bytes) 6 |
|||
2.2 心跳包(无数据) 6 |
|||
2.2 心跳包(携带版本信息) 6 |
|||
2.3 登录认证包 7 |
|||
2.4 查看参数(长度为2个字节) 7 |
|||
三、下行数据 7 |
|||
3.1 继电器控制 7 |
|||
3.2 调试数据 9 |
|||
3.3 设置参数 9 |
|||
3.4 心跳响应包 10 |
|||
四、不断电下载(远程升级) 10 |
|||
数据发送时间间隔 11 |
|||
程序运行现象 11 |
|||
纸盒3位置添加了状态信息 11 |
|||
数据发送时间间隔 12 |
|||
|
|||
|
|||
|
|||
|
|||
一、通信协议 |
|||
1.1 协议格式 |
|||
Filter1 |
|||
Filter2 |
|||
Length |
|||
Addr |
|||
Oper |
|||
Data[] |
|||
CRC-16 |
|||
0xFF |
|||
0xFE |
|||
0xXX |
|||
0xXX |
|||
0xXX |
|||
0xXXXX |
|||
LSB |
|||
MSB |
|||
|
|||
|
|||
长度(字节) |
|||
说明 |
|||
Filter1 |
|||
1 |
|||
固定为0xFF |
|||
Filter2 |
|||
1 |
|||
固定为0xFE |
|||
Length |
|||
1 |
|||
后续字节的长度(addr - crc) |
|||
Addr |
|||
1 |
|||
设备地址 |
|||
Oper |
|||
1 |
|||
操作代码 |
|||
Data[] |
|||
不定 |
|||
参数域。在实际命令中,可以不存在。 |
|||
LSB-CRC16 |
|||
1 |
|||
CRC16低字节。 |
|||
CRC是从Addr到Data[]的CRC16值 |
|||
MSB-CRC16 |
|||
1 |
|||
CRC16高字节。 |
|||
|
|||
1.2 地址定义(Addr) |
|||
上位机:0x10 |
|||
服务器:0x11 |
|||
运维板:0x12 |
|||
1.3 命令定义(Oper) |
|||
1. 通用命令 |
|||
序号 |
|||
命令 |
|||
功能 |
|||
1 |
|||
0x93 |
|||
上位机数据包 |
|||
2 |
|||
0x97 |
|||
服务器数据包 |
|||
3 |
|||
0x95 |
|||
继电器控制命令 |
|||
4 |
|||
0x99 |
|||
调试命令 |
|||
5 |
|||
0x96 |
|||
设置参数命令 |
|||
6 |
|||
0x98 |
|||
读取参数命令 |
|||
|
|||
1.4 CRC校验 |
|||
//crc生成函数,并将crc存储在用户给定的数组中 |
|||
//调用方式crc16(指向数据的指针,需要校验的数据长度) |
|||
void crc16(unsigned char *CRC,unsigned char *ptr,unsigned int len) |
|||
{ |
|||
unsigned long wcrc=0XFFFF;//预置16位crc寄存器,初值全部为1 |
|||
unsigned char temp;//定义中间变量 |
|||
int i=0,j=0;//定义计数 |
|||
for(i=0;i<len;i++)//循环计算每个数据 |
|||
{ |
|||
temp=*ptr&0X00FF;//将八位数据与crc寄存器亦或 |
|||
ptr++;//指针地址增加,指向下个数据 |
|||
wcrc^=temp;//将数据存入crc寄存器 |
|||
for(j=0;j<8;j++)//循环计算数据的 |
|||
{ |
|||
if(wcrc&0X0001)//判断右移出的是不是1,如果是1则与多项式进行异或。 |
|||
{ |
|||
wcrc>>=1;//先将数据右移一位 |
|||
wcrc^=0XA001;//与上面的多项式进行异或 |
|||
} |
|||
else//如果不是1,则直接移出 |
|||
{ |
|||
wcrc>>=1;//直接移出 |
|||
} |
|||
} |
|||
} |
|||
temp=wcrc;//crc的值 |
|||
CRC[0]=wcrc;//crc的低八位 |
|||
CRC[1]=wcrc>>8;//crc的高八位 |
|||
} |
|||
二、上行数据 |
|||
注:为了和上位机某些协议兼容,与上位机开发人员协商,所有上行协议,长度由1个字节,修改为2个字节,之前为0E,修改为00 0E |
|||
2.1 数据包 |
|||
Filter1 |
|||
Filter2 |
|||
Length |
|||
Addr |
|||
Oper |
|||
Data[] |
|||
CRC-16 |
|||
0xFF |
|||
0xFE |
|||
0x0E |
|||
- |
|||
0x93/0x97 |
|||
- |
|||
LSB |
|||
MSB |
|||
|
|||
Addr参数 |
|||
0x10代表上位机 |
|||
0x11代表服务器 |
|||
Oper参数 |
|||
0x93代表上位机操作 |
|||
0x97代表服务器操作 |
|||
|
|||
Data参数如下 |
|||
PaperBox0 |
|||
PaperBox1 |
|||
PaperBox2 |
|||
IR |
|||
3byte |
|||
3byte |
|||
3bytes |
|||
1bytes |
|||
|
|||
PaperBox0,1: 上纸盒,下纸盒,扩展纸盒 |
|||
PaperBox2: 扩展纸盒,目前当作调试数据使用 |
|||
IR: 红外数据,包括纸张红外和人体红外 |
|||
|
|||
|
|||
数据包举例: |
|||
上位机:FF FE 00 0E 10 93 00 00 00 00 00 00 00 00 00 00 xx xx |
|||
服务器:FF FE 00 0E 11 97 00 00 00 00 00 00 00 00 00 00 xx xx |
|||
2.1.1 纸盒数据(3bytes) |
|||
|
|||
|
|||
byte1: 板卡版本号,上一个版本为0x00(tcp心跳包为0x08) 当前版本为0x09 |
|||
byte2: 1bit电量正常位(bit7) + 1bit(工作正常位) + 4bit(纸盒编号) + 2bit(纸盒数据高2位) |
|||
byte3: 8bit(纸盒数据低8位) |
|||
|
|||
清除无效数据: |
|||
byte1: 0x10 - 0xEE 0x10-0x50(在纸盒内,封闭环境下) |
|||
纸盒编号:xx |
|||
纸盒数据最高位:0(bit9) |
|||
清楚状态位: |
|||
1小时收不到有效数据,状态位置为(无效状态) |
|||
|
|||
工作正常位:1不正常 0工作正常 |
|||
电量正常位:1提醒需要充电,或者未连接电池 0正常 |
|||
电量只要低于3.3v,电量正常位就会被置为1进行报警。 |
|||
2.1.2 纸盒2(红外调试) |
|||
纸盒2暂时用作红外调试数据(3bytes) |
|||
|
|||
byte1: 纸张红外阈值 (数据必须大于该值,才代表检测到有纸张) |
|||
byte2: 人体红外阈值max (数据必须大于该值,才代表检测到有人体) |
|||
byte3: paper当前值(4bit) + person当前值(4bit) |
|||
|
|||
2.1.3 红外数据(1bytes) |
|||
0-3位:(监测点0-3)1代表有人 0代表无人 |
|||
bit1: 是否有纸 |
|||
bit0: 是否有人 |
|||
4-7位:(0-3位有效位,0)0代表有效 1代表无效 |
|||
|
|||
2.2 心跳包(无数据) |
|||
Filter1 |
|||
Filter2 |
|||
Length |
|||
Addr |
|||
Oper |
|||
Data[] |
|||
CRC-16 |
|||
0xFF |
|||
0xFE |
|||
0x04 |
|||
0x11 |
|||
0x00 |
|||
- |
|||
LSB |
|||
MSB |
|||
|
|||
发送:FF FE 00 04 11 00 E0 0D |
|||
响应:FF FE 00 04 12 00 10 0D |
|||
2.2 心跳包(携带版本信息) |
|||
Filter1 |
|||
Filter2 |
|||
Length |
|||
Addr |
|||
Oper |
|||
Data |
|||
CRC-16 |
|||
0xFF |
|||
0xFE |
|||
0x05 |
|||
0x11 |
|||
0x00 |
|||
Version(1bytes) |
|||
LSB |
|||
MSB |
|||
|
|||
Version: 1字节,高4bit代表主版本号,第四位次版本号 |
|||
0x18 代表1.8版本 |
|||
|
|||
发送:FF FE 00 05 11 00 18 CF 21 |
|||
响应:FF FE 04 12 00 10 0D //响应包无版本数据,响应包长度为1个字节 |
|||
2.3 登录认证包 |
|||
注:登录认证包没有CRC校验。 |
|||
定长协议:2+2+20+1+21 = 44 |
|||
|
|||
FF FE 00 2A simno(20) , passwd(21) |
|||
|
|||
密码算法: |
|||
Md5hex(simno) 取前16位 + simno取最后5位 == 21位密码 |
|||
2.4 查看参数(长度为2个字节) |
|||
Filter1 |
|||
Filter2 |
|||
Length |
|||
Addr |
|||
Oper |
|||
Data[] |
|||
CRC-16 |
|||
0xFF |
|||
0xFE |
|||
0xXX |
|||
0x12 |
|||
0x98 |
|||
0xxxxx |
|||
LSB |
|||
MSB |
|||
|
|||
Data参数 |
|||
Type |
|||
Val |
|||
4bit |
|||
不定长 |
|||
|
|||
Type: 0x0 设置纸盒编号 |
|||
Val: 纸盒0Id(4bit),纸盒1Id(4bit),纸盒2Id(4bit) |
|||
Type: 0x1 设置红外阈值 |
|||
Val: 纸张红外阈值(6bit) |
|||
Val: 人体红外阈值(6bit) |
|||
|
|||
发送: |
|||
FF FE 06 12 98 00 00 B3 84 |
|||
FF FE 06 12 98 10 00 73 89 |
|||
三、下行数据 |
|||
注:下行数据遵循既定协议,数据长度为1个字节 |
|||
3.1 继电器控制 |
|||
Filter1 |
|||
Filter2 |
|||
Length |
|||
Addr |
|||
Oper |
|||
Data[] |
|||
CRC-16 |
|||
0xFF |
|||
0xFE |
|||
0x06 |
|||
0x12 |
|||
0x95 |
|||
0xXXXX |
|||
LSB |
|||
MSB |
|||
|
|||
Data参数如下 |
|||
Relay Val |
|||
Relay Index |
|||
1byte |
|||
1byte |
|||
|
|||
Relay Val : 该位为0代表闭合,1代表断开 |
|||
Relay Index: 该位为1代表该为有效,0代表无效(不控制该继电器),FF代表控制所有继电器,00代表不控制任何继电器 |
|||
程序应当先判断relayIndex,如果该位为1,再判断该位对应的值,0闭合 1断开 |
|||
|
|||
具体通讯协议如下: |
|||
FF FE 06 12 95 01 01 20 D5 //继电器0(打印机)断开 |
|||
FF FE 06 12 95 02 02 D1 95 //继电器1(PC)关机 |
|||
FF FE 06 12 95 04 04 73 16 //继电器2(灯箱)断开 |
|||
FF FE 06 12 95 08 08 76 13 //继电器3(复印补光)断开 |
|||
FF FE 06 12 95 10 10 7C 19 //继电器4(人像补光)断开 |
|||
FF FE 06 12 95 20 20 68 0D //继电器5(保留)断开 |
|||
FF FE 06 12 95 40 40 40 25 //继电器6(打印机开关1)断开 |
|||
FF FE 06 12 95 80 80 10 75 //继电器7(磁保持)断开 |
|||
|
|||
FF FE 06 12 95 00 01 B0 D4 //继电器0(打印机)闭合 |
|||
FF FE 06 12 95 00 02 B1 94 //继电器1(PC)开机 |
|||
FF FE 06 12 95 00 04 B3 14 //继电器2(灯箱)闭合 |
|||
FF FE 06 12 95 00 08 B6 14 //继电器3(复印补光)闭合 |
|||
FF FE 06 12 95 00 10 BC 14 //继电器4(人像补光)闭合 |
|||
FF FE 06 12 95 00 20 A8 14 //继电器5(保留)闭合 |
|||
FF FE 06 12 95 00 40 80 14 //继电器6(打印机开关1)闭合 |
|||
FF FE 06 12 95 00 80 D0 14 //继电器7(磁保持)闭合 |
|||
|
|||
FF FE 06 12 95 FF FF C0 14 //关闭所有电源 |
|||
FF FE 06 12 95 00 FF 30 55 //打开所有电源(所有继电器恢复到初始状态) |
|||
3.2 调试数据 |
|||
去掉 |
|||
3.3 设置参数 |
|||
去掉 |
|||
3.4 心跳响应包 |
|||
发送:FF FE 00 05 11 00 18 CF 21 |
|||
响应1:FF FE 04 12 00 10 0D //响应包无版本数据,响应包长度为1个字节 |
|||
响应2:FF FE 00 04 12 00 10 0D //响应包无版本数据,响应包长度为2个字节(兼容) |
|||
四、不断电下载(远程升级) |
|||
|
|||
|
|||
Filter1 |
|||
Filter2 |
|||
Length |
|||
Addr |
|||
Oper |
|||
Data[] |
|||
CRC-16 |
|||
0xFF |
|||
0xFE |
|||
0x04 |
|||
0x12 |
|||
0x80 |
|||
0x00 |
|||
LSB |
|||
MSB |
|||
要求: |
|||
连发两次 |
|||
两次协议中间不能有其他协议 |
|||
两次协议间隔不能超过2s |
|||
|
|||
FF FE 04 12 80 B0 0C AA AA AA AA AA AA AA AA AA AA AA FF FE 04 12 80 B0 0C |
|||
烧写程序最高波特率:115200,如果不成功中间可以多加几个0xAA |
|||
数据发送时间间隔 |
|||
|
|||
|
|||
|
|||
心跳改成了50s |
|||
程序运行现象 |
|||
= 连接成功 |
|||
Q 错误,连接断开 |
|||
X 发送心跳 |
|||
Y 发送数据 |
|||
- 客户端主动断开(180s没收到服务器数据) |
|||
|
|||
纸盒3位置添加了状态信息 |
|||
Byte0 a9状态 0x6A== `j'代表连接上 |
|||
Byte1 a9接收数据时间间隔 |
|||
Byte2 看门狗状态 0正常 1饿 |
|||
|
|||
数据发送时间间隔 |
|||
60s心跳 |
|||
300s数据 |
|||
180s心跳断开 |
|||
240s看门狗重启 |
|||
|
|||
|
|||
A9模块指示灯状态: |
|||
|
|||
@ -0,0 +1,604 @@ |
|||
PK |
|||
| |||