基于Modbus协议RTU模式的HITECH PWS6A00T触摸屏与PIC单片机的通信

2019-04-15 12:28发布

Modbus RTU模式的协议字段 起始位 设备地址 功能码 数据 CRC校验 结束符 至少3.5个字符 8bit 8bit N*8bit 16bit 至少3.5个字符 HITECH PWS6A00T触摸屏与PIC单片机通过串口进行通信,每帧数据的协议即是Modbus协议的RTU模式。通信双方设置波特率、起始位、停止位、奇偶校验位。 HITECH PWS6A00T触摸屏通过自身的人机界面制作软件做出触摸屏画面。这里主要用到设置位和数字,对应的功能码分别为0506;显示位和数字,对应的功能码分别为0103 Modbus协议RTU模式要求每一帧的起始和结束都以至少3.5个字符为间隔。每个字符间隔是字符位数/波特率,以1位起始位,8位数据,1位停止位,无奇偶校验位的10位数据,波特率为9600b/s为例,字符间隔为1.04ms,也就是每一帧的开始和结束都伴随着至少3.5*1.04=3.64ms的时间间隔。 在字节流中以1.5个字符时间作为帧间间隔,以上面的通信速率,则1.5*1.04=1.56ms,即字符流中出现1.56ms的间隔时可能意味着一帧数据结束。但必须同时满足其后的一段时间内(2个字符)不会再接收到字符,否则认为结束的该帧为错误帧。 由于收到的每个字节都有可能成为一帧数据的最后一个字节,因此,每接收一个字节,关闭上一个已经开启的3.5个字符时间和1.5个字符时间的定时器,处理完接收到得数据后再次启动3.5个字符时间和1.5个字符时间的定时器,以检测该帧数据的结束。这也就是上面所说的在帧间间隔后的一段时间内(2个字符)不能接收到数据,否则该帧为错误帧。1.5个字符时间和3.5个字符时间的定时起点是一致的,这是Modbus协议RTU模式的关键之处。当然这也增加了系统的中断负荷。 在发生1.5个字符时间中断后,处理其接收到得数据(这里未考虑设备地址、超时、奇偶校验等错误),计算接收到的字符数-2个字节的CRC校验和,将计算结果与接收到得最后两个字节(当做发送的CRC校验)进行比较,从而得知这是否是完整的一帧数据。CRC校验正确,说明这是一帧完整的数据,CRC校验错误,说明这是一帧错误的数据帧,数据帧不完整。 发生1.5个字符时间中断后,如未发生3.5个字符时间中断,再次接收到字符,同样说明接收到得是一帧不完整的数据帧;如随后发生3.5个字符时间中断,则处理刚接到的完整数据帧,给予对应的应答。这里的3.5个字符时间同时也可作为下一帧数据的起始 设置HITECH PWS6A00T触摸屏的系统参数时,选择Modbus slave种类,系统控制区默认2个字,第一个字表示现在显示的是那个画面,在换页时被清零系统状态区取6个字,第一个字表示将要显示的是那个画面,在换页时写入页面编号。换页后再将其值写入系统控制区的第一个字。系统控制区和系统状态区共同完成触摸屏的换页操作。 制作触摸屏的画面时,设置对应元件的地址值,如有需要制定生效位。做好的画面进行编译运行时,画面中邻近元件的地址值会进行优化合并,给出数据起始地址、读数据的字节数或位数,而不是将每一个元件的读写进行一次协议传输,即可实现一次读取多个字节数或位数。 由于触摸屏多用于与PLC进行通信,PLC对应的数据地址都是实际存在的,即画面中设置的位和字在PLC中都能找到对应的实际单元。而触摸屏画面中设置的数据地址与单片机内部的地址并不存在某种确定的对应关系。这里存在一个映射关系,将触摸屏发送的数据地址经过转化得到单片机内部的存储地址。实现为,将触摸屏要读写的位元件或字元件的数据编程时定义到单片机的一个数组中,通过对发送的数据地址的解析,转化成对数组的索引。从而完成对元件的读写。 对触摸屏画面中的位元件进行置位时,功能码为05,写0xFF00表示置1,写0x0000表示清0。读写位元件都要对应到单片机数组中的元素的某一位上进行读写。