Pycharm实现645协议解析器(七)数据的接收和解析
数据包接收
RS485属于半双工总线,在实际使用时一般采用主机轮询或令牌传递的方法来分配总线控制权,在主从通信交互过程中,RS485设备需要进行发送和接收的方向转换。比较通用的做法是,每个RS485设备在平时均处于接收状态,只有在自己有数据要发送时才转换到发送状态,数据发送完毕后再次切换回接收状态。在本项目中,软件运行电脑作为主机端,电表等终端设备作为从机端,主机发送数据后,切换485总线为接收模式,对应的终端从机,发送响应报文数据到主机,有python的serial包接收,实现过程如下:
try:
num = self.ser.inWaiting() #获取接收缓冲区数据大小
except: #异常处理
self.port_close()
QMessageBox.critical(self, ‘wrong data’, ‘接收错,端口异常关闭!’)
return None
if num > 0:
Rx_Frame_Data = self.ser.read(num) #读取数据信息
Rx_Num = len(Rx_Frame_Data ) #
数据接收完毕后,由后续数据包解析程序进行校验和解析
数据包解析
由于多机通讯的存在,必然会有线路的竞争,另外,线路干扰或硬件失误也难免存在,所以,在接收到的数据帧中,是否是完整、正确的645协议包数据,需要在接收数据解析中加以识别&