软件设计
的应用层定义
本文设计的现场总线通信网关定义了CANBUS的应用层协议.
(1)规定网关收到的CAN数据帧中的第1个字节为CANBUS的功能码,该功能码为0x0F时,与MODBUS进行通信.
(2)规定CAN数据帧中的第2个字节的高4位为该帧的标号位,低4位为该帧中包含的数据字节数,该字节数为MODBUS协议中数据域的字节数.
(3)规定CAN 数据帧中的第3,第4 个字节分别为MODBUS的地址码和功能码.
(4)规定从CAN 数据帧的第5个字节开始为
的数据域,由于MODBUS 的数据域一般为4 个字节,此时CAN数据帧的数据段恰好为8个字节.
(5)当MODBUS 数据长度大于4 字节时,需要从2 个或者多个连续发送的标号相同的CAN 数据帧中获得完整的MODBUS数据.当获得的数据位数与帧中给出的位数不同时丢弃该帧.
定义一个数据缓冲区A,一个数据缓冲区B,分别用于临时存放CANBUS到MODBUS的数据和MODBUS到CANBUS的数据.
的收发程序设计
该部分包括CAN初始化,CAN发送程序,CAN接收程序.CAN 的初始化包括以下内容:配置嵌套向量中断控制器(NVIC),设置CAN的RX0和TX中断的响应优先级和抢占优先级,RX0和TX 中断使能.根据硬件连接配置GPIO,本文中RX 使用GPIOD0,TX 使用GPI-BOD2.设置波特率及过滤器配置.
数据的接收是通过接收邮箱(FIFO)中断进行处理的,当FIFO接收到一个新的报文时,过滤器根据预设的值判断报文的标示符是否匹配,若不匹配,直接丢弃该报文;若该报文的标示符与预设值匹配则中断处理程序将接收邮箱中的数据拷贝到数据缓冲区A,该数据将作为MODBUS 主站发往MODBUS 从站的数据.
数据接收程序流程如图5所示.
的数据发送同样使用邮箱机制,网关从数据缓冲区B中获得从MODBUS接收的数据,设置标示符和数据长度,选择一个发送邮箱,使能发送邮箱空中断.因此当该邮箱为空时产生一个中断,中断处理程序将数据从缓冲区拷贝到发送邮箱,该邮箱状态变为预定发送状态.
当CAN 总线进入空闲状态,预定发送邮箱中的报文就马上被发送,进入发送状态.邮箱中的报文被成功发送后,它马上变为空邮箱.CANBUS数据发送程序如图6所示.
主站.从站的收发程序设计
网关作为MODBUS从站时的主要工作是初始化串口,初始化定时器,配置嵌套向量中断控制器(NVIC),分别对串口接收数据中断和定时器中断设置响应优先级和抢占优先级.从数据缓冲区A中获得数据,对获得的数据生成CRC 校验码,组成MODBUS 帧从串口按照时序发送这一帧数据.
串口初始化如下:
设置波特率为
数据长度为8位
位停止位
无奇偶校验
无硬件流控制
使能串口发送和接收
协议规定了2 种传输模式:ASCII 模式和RTU 模式.本文设计的网关使用RTU模式传输,在此模式下报文中每个8位字节含有2个4位16进制字符它的优点是较高的数据密度,在相同的波特率下比ASCII 模式有更高的吞吐率.命令帧由地址码.功能码.数据语和CRC校验码构成.在RTU模式下,帧与帧之间必须由时长至少为3.5 个字符时间的空闲间隔区分.整个帧必须以连续的字符流发送,如果两个字符之间的空闲间隔大于1.5 个字符时间,则该帧被认为不完整的帧而被丢弃,接收设备假定下一字节是一个新消息的地址域.
主站程序需要使用3个定时器,其中TIM2用于控制发送的3.5 个字符的帧间隔.TIM3 用于控制接收MODBUS 从站的回应帧的3.5 个字符的帧间隔.
用于接收时确保字符间的间隔小于1.5 个字符时间.初始化TIM2 与TIM3,定时时间为定时3.645 8 ms(波特率为9 600 b/s时的3.5字符时间):
设置定时周期
设置预分频值
设置时钟分频
×
设置计数器增长方式
网关作MODBUS主站的工作流程如图7所示.
网关工作在MODBUS主站模式时对从站响应帧的接收使用中断处理的方式.在个字节传输结束后启动TIM4定时器,定时时间为1.5个字符时间,在后续的字节传输结束时清零计数器,保证一个帧中的字符间隔不超过1.5 个字符时间.接收完成后启动定时器TIM3,定时3.5 个字符时间,在此时间内的接收的任何数据都将丢弃.
网关作为MODBUS从站时对化串口和定时器的初始化与MODBUS主站相同,将数据组成CAN的帧,发送该帧,并向MODBUS主站发送响应帧.网关作为
从站的工作流程如图8所示.
主程序
主程序中初始化FSMC,初始化LCD,初始化触摸屏,校正触摸屏,显示工作模式选择界面.参数配置界面及当前工作模式界面.根据选择进入相应工作模式.
测试结果
在PC 机上使用串口助手和USB-BCAN 软件模拟CANBUS与MODBUS的收发.MODBUS到CANBUS的通信模拟:由PC机向网关发送一帧数据00 01 02 03 0405 06 07,网关设置帧ID为0×321并发出数据,通过CAN-USB软件接收该数据为00 01 02 03 04 05 06 07.如图9所示.CANBUS到MODBUS的通信模拟:使用CAN-USB软件发送一帧0f 14 0f 05 00 01 02 03,网关解析其中数据00 01 02 03,并作为MODBUS主站发送数据,将数据输出到串口助手为00 01 02 03.如图10所示.
结语
本文设计实现了一种在CANBUS和MODBUS间进行透明的数据传输的嵌入式现场总线通信网关,软硬件设计简单,通信参数可现场配置,能够很好地实现CAN-BUS与MODBUS间的通信.该网关解决了异类现场总线间通信的问题,使系统的兼容性.互联性.可扩充性都得到了极大的提高,具有良好的应用前景.
免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。