利用MODBUS提高多CPU协同开发效率
为10bit,数据间隔在24bit以内,采用循环冗余检验方式对报文进行校验。
MODBUS典型的报文格式如下:
一个通信报文的具体内容取决于该指令字符串的功能码,MODBUS中定义的标准功能码如表1所示。
表1 MODBUS协议中的标准功能码
由功能码的定义可以看出,传送的报文对象主要分为模拟量和数字量两类,由报文头的功能码来确定报文的内容。在实际应用中,主要使用02、04、05和06这四种功能码,完成对数字量和模拟量的读取及设置。
数据起始地址和数据量是报文的主要内容。MODBUS规定的数据量是从通信对象的器件中读取的数据或是往通对象的器件中写入的数据。每个通信对象器件都有自己的地址。在保护装置的内部通信中,指定各通信对象器件为主机板的RAM中保存的数字量和模拟量,以及EEPROM中设定的保护配置和定值。在处理通信报文时,由报文的数据起始地址和对应的数据量长度进行读取或发送任务。当传送数字量时,不同地址的数据值用报文中数据量不同的位来表示,这样就能传送更多的数据信息,从而高效地利用通信报文。由于每帧数据不定长,方便灵活,因而避免了固定帧长造成的对CPU时间和内存空间的浪费。另外,MODBUS通信协议规定在通信字符串中的地址比实际地址小“1”,这对数组进行操作时是一个方便之处。
报文末的两个字节为校验字节。RTU方式通信采用CRC-16位循环码冗余校验,即将整个字符串(不包括最后两个字节)按规定的方式进行位移并进行异或计算,计算结果存在字符串的最后两个字节内,并由接收方按同样的计算方法进行校验是否一致。这种校验方法对随机或突发差错造成的帧破坏有很好的校验效果。
3 提高通信效率的措施
在确立硬件平台和通信协议后的软件设计过程中,笔者采用了很多方法提高通信的效率和可靠性。
3.1 将通信分为接收和发送两个独立的任务[3]
80C196单片机可以使用查询和中断两种方法通过串行口发送和接收数据。对于中断方式,80C196单片机提供了两种串口中断方式:第一种方式为一个单独的串口中断,由中断屏蔽寄存器INT_MASK的D6位控制,对应中断向量200CH,串行口状态寄存器SP_STAT(11H)的D5(发送完标志TI)和D6(接收完标志RI)置位都将触发该中断;第二种方式为接收、发送分别设置了中断号,使用INT_MASK1的D0位对应发送中断,中断向量2030H,TI置位触发该中断;INT_MASK1的D1位对应收中断,中断向量2032H,RI置位触发该中断。笔者采用了第二种通信方式。这样每接收完或发送完一个字节后就触发相应的中断,直接进行下一轮的接收、发送任务,而不必判断串口控制/状态寄存器SP_CON/SP_STAT(11H),使得中断子程序更为简练、高效。
3.2 尽量缩短中断时间
由于设计软件结构时使用了多个中断,为了保证程序的可靠运行,减少不同不断间互冲突的机率,在编制软件时尽可能简练各种中断的任务,缩短中断执行时间。在通信中断子程序中,进入中断后执行必要的任务,如:清串行口状态寄存器SP_STAT中相应的状态位,将刚接收到的字符或需要发送的字符从缓冲区内读出或写入缓冲区,已接收或发送字符数增1等,之后便立即退出中断。其它任务如判断帧的有效性、对接收帧命令(遥测、遥控命令)的应答,准备发送帧等,都放在主程序中完成。
3.3 可靠地判断帧结束,防止通信停滞
利用单独的软件定时器,来判断一帧接收报文结束,可以防止若报文接收不完整,该帧通信任务无法结束而影响下一帧的接收。
由于一帧报文中字节与字节之间的时间间隔和帧与帧之间的时间间隔相比要小得多,因此每当接收一个新字节,就启动软件定时器开始计时,定时器的时间设定为帧与帧的最小时间间隔。波特率不同,该时间间隔也不同。若不到预定的时间内又接收到下一个字节,则说明一帧报文未结束,定时器重新计时;若定时器顺利计数到预定时间,就会触发相应的中断号,在该定时器中断子程序中设定帧结束标志字节,表明一帧报文接收完毕。当主程序内检测到一帧报文接收完毕后,会通过核查从方地址及循环冗余校验字节是否正确来判断该帧的有效性。若确定接收到的是一帧发送给已方的正确报文,则会根据报文内的功能码对该帧命令进行相应的处理,并准备发送帧。
MODBUS协议还规定了从方接收报文不正确时发回的出错帧。考虑到装置内部通信的过程不很复杂,在实际应用中如果从方收到的报文校验不正确,采取不作应答的方式。主方若在规定时间内未收到从方的应答报文时,将重发请求报文;若多次未收到从方应答报文,则报通讯故障。
3.4 通信速率的确定
由于所开的装置都在同一机箱内,模块与模块之间的间距很短,而MOD
- 基于DSP和触摸屏的串行通信系统研究(07-05)
- Modbus通信协议在分布式控制系统中的应用(12-21)
- 基于MODBUS无线总线测控系统(12-20)
- 基于CANopen总线与PLC的液压试验平台控制系统设计(12-20)
- 监控技术在公寓智能配电系统中的应用(12-20)
- 基于Modbus协议的智能压力传感器研发(12-20)