一、协议解析
协议共有四条指令:单片机读、单片机写、HMI读和HMI写。其中:
1)单片机读(发送:01 02 3F 03 返回:02 03 3E 03 D1 D2 D3 D4 A1),单片机端发送01 02 3F 03 给HMI,HMI接收到后发送02 03 3E 03 D1 D2 D3 D4 A1 给单片机,D1-D4是用户在HMI端界面上设置的值,A1是D1-D4的校验值,由设置的校验自行计算得来。
2)单片机写(发送:FE 02 03 1F D1 D2 D3 D4 D5 D6 A1 A2),单片机持续发送 FE 02 03 1F D1 D2 D3 D4 D5 D6 A1 A2 给HMI,A1-A2为发送时单片机端设置的校验,计算D1-D6的校验值并附在指令末尾发送,HMI根据指令前面的FE 02 03 1F接收到该条指令,并将D1-D6的数据显示在HMI端的界面上,接收校验与发送一样,计算D1-D6,生成的校验值自行和发送来的校验值对比,以验证数据的有效性。
3)HMI读(发送:02 02 3F 03 返回:03 03 3E 03 D1 D2 D3 D4 A1 A2),HMI发送 02 02 3F 03 给单片机,单片机接收到后发送 03 03 3E 03 D1 D2 D3 D4 A1 A2 给HMI,D1-D4为用户在单片机端的界面上设置的值,A1-A2为D1-D6的校验值,由设置的CRC校验自行计算得来。
4)HMI写(发送:02 32 33 34 1F D1 D2 D3 D4 D5 D6 D7 D8 D9 D10),HMI持续发送 02 32 33 34 1F D1 D2 D3 D4 D5 D6 D7 D8 D9 D10 给单片机,单片机根据指令前面的 02 32 33 34 1F 接收到该条指令,并将D1-D10的数据显示在单片机端的界面上,此条指令不需要校验,所以不用添加校验设置。
二、工程说明
以HMI端为例,如图1-1所示为HMI端的工程界面
图1-1 HMI端工程界面
调出通讯口配置窗口,如图1-2和1-3所示
图1-2
图1-3
点击“用户自定义协议”,调出“人机自定义协议程序”窗口,如图1-4所示,红色框中的指令1-4分别对应单片机读、单片机写、HMI读和HMI写
图1-4 人机自定义协议程序
1)单片机读,如图1-5所示为HMI端单片机读指令的设置,设置1是选择HEX(十六进制)编码方式,对于HMI,先接收到单片机发送的读请求后再执行写的操作,所以勾选“先接收后发送”,填写单片机的读请求:01 02 3F 03,每个字节间要用空格隔开,每次修改时都要注意字节间要用空格隔开,填写完点击OK,设置2填写入HMI要发送给单片机的ID(即指令前面的非数据部分):02 03 3E 03 ,然后在设置3填写数据从ID的末尾,也就是第五个字节(ID共4个字节,下一个字节也就是第五个字节开始发送数据),长度为4个字节。
图1-5 HMI端单片机读指令1
如图1-6和1-7所示为单片机读指令的下一步设置,指令长度设置中返回长度设为0即可。
图1-6
图1-7
2)单片机写,如图1-8为单片机写指令设置,HMI端则是读的方式接收,通过ID(FE 02 03 1F)识别要接收的指令,勾选先接收后发送,发送内容放空(实际没有发送内容,只有读),返回数据则是将写指令FE 02 03 1F D1 D2 D3 D4 D5 D6 A1 A2中的数据字节提取出来(即第5个字节开始连续的6个字节)
图1-8 单片机写指令
接收到的数据(D1-D6)存放在首地址为Data15三个连续寄存器里(一个寄存器放两个字节数据),单片机发过来的指令中一共是12字节,所以返回长度填写12字节,HMI只接收数据,所以只填返回校验,和发送方一样,求D1-D6的双字求和的校验值,这里计算出来的值会自行和发送过来的指令的校验值做比较。
3)HMI读,如图1-9为HMI读指令设置。
图1-9 HMI读指令设置
HMI先发送02 02 3F 03给单片机,单片机返回03 03 3E 03 D1 D2 D3 D4 A1 A2 ,HMI以Data20为首地址存放D1-D4,单片机返回的数据总长度为10,其中第5字节开始连续的4个字节为数据,CRC校验也是取这四个字节,计算后自行和单片机发送过来的A1-A2做比较。
4)HMI写,如图1-10为HMI写指令设置。
图1-10 HMI写指令设置
HMI发送02 32 33 34 1F D1 D2 D3 D4 D5 D6 D7 D8 D9 D10给单片机,放数据的首地址为Data25,有10个字节,则是Data25-Data29 ,数据从指令的第6个字节开始,长度为10,无校验,写指令发送长度自行计算,不许设置,无返回指令,则返回长度为0 。
单片机侧的设置也是按序对应的四条指令,设置方式也是依据协议而定,原理同HMI类似,就是互为上下机关系(HMI为上位机,单片机为下位机)。这里用PI屏模拟下位机,可通过一对虚拟串口在线模拟测试,或者下载到触摸屏测试。
附录:协议
单片机读数据(十六进制)
发送:01 02 3F 03
返回:02 03 3E 03 D1 D2 D3 D4 A1(A1表示求和单字校验,计算从D1到D4,D1-D4表示数据)
单片机写数据(十六进制)
发送:FE 02 03 1F D1 D2 D3 D4 D5 D6 A1 A2(A1、A2表示求和双字校验,计算从D1到D6,D1-D6表示数据)
HMI读(十六进制)
发送:02 02 3F 03
返回:03 03 3E 03 D1 D2 D3 D4 A1 A2 (A1、A2表示CRC校验,计算从D1到D4,D1-D4表示数据)
HMI写(十六进制)
发送:02 32 33 34 1F D1 D2 D3 D4 D5 D6 D7 D8 D9 D10(无校验,D1-D10表示数据)