一种嵌入式现场总线通信网关的设计与实现
CANBUS的数据发送同样使用邮箱机制,网关从数据缓冲区B中获得从MODBUS接收的数据,设置标示符和数据长度,选择一个发送邮箱,使能发送邮箱空中断。因此当该邮箱为空时产生一个中断,中断处理程序将数据从缓冲区拷贝到发送邮箱,该邮箱状态变为预定发送状态。
当CAN总线进入空闲状态,预定发送邮箱中的报文就马上被发送,进入发送状态。邮箱中的报文被成功发送后,它马上变为空邮箱。CAN BUS数据发送程序如图6所示。
3.3 MODBUS主站、从站的收发程序设计
网关作为MODBUS从站时的主要工作是初始化串口,初始化定时器,配置嵌套向量中断控制器(NVIC),分别对串口接收数据中断和定时器中断设置响应优先级和抢占优先级。从数据缓冲区A中获得数据,对获得的数据生成CRC校验码,组成MODBUS帧从串口按照时序发送这一帧数据。
串口初始化如下:
MODBUS协议规定了2种传输模式:ASCII模式和RTU模式。本文设计的网关使用RTU模式传输,在此模式下报文中每个8位字节含有2个4位16进制字符它的优点是较高的数据密度,在相同的波特率下比ASCII模式有更高的吞吐率。命令帧由地址码、功能码、数据语和CRC校验码构成。在RTU模式下,帧与帧之间必须由时长至少为3.5个字符时间的空闲间隔区分。整个帧必须以连续的字符流发送,如果两个字符之间的空闲间隔大于1.5个字符时间,则该帧被认为不完整的帧而被丢弃,接收设备假定下一字节是一个新消息的地址域。
MODBUS主站程序需要使用3个定时器,其中TIM2用于控制发送的3.5个字符的帧间隔。TIM3用于控制接收MODBUS从站的回应帧的3.5个字符的帧间隔。TIM4用于接收时确保字符间的间隔小于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主站发送响应帧。网关作为MODBUS从站的工作流程如图8所示。
3.4 主程序
主程序中初始化FSMC,初始化LCD,初始化触摸屏,校正触摸屏,显示工作模式选择界面、参数配置界面及当前工作模式界面。根据选择进入相应工作模式。
4 测试结果
在PC机上使用串口助手和USB-CAN软件模拟CANBUS与MODBUS的收发。MODBUS到CANBUS的通信模拟:由PC机向网关发送一帧数据00 01 02 03 0405 06 07,网关设置帧ID为0x321并发出数据,通过CANUSB软件接收该数据为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间进行透明的数据传输的嵌入式现场总线通信网关,软硬件设计简单,通信参数可现场配置,能够很好地实现CANBUS与MODBUS间的通信。该网关解决了异类现场总线间通信的问题,使系统的兼容性、互联性、可扩充性都得到了极大的提高,具有良好的应用前景。
- CAN-bus接口控制实验(12-14)
- 机器人在锂电池生产中的应用(03-14)
- CANBUS总线汽车方向盘控制音响系统解码与解决方案(03-04)
- CANBUS总线在武钢现场中的应用(07-04)
- 基于CanBus的橡胶硫化机组监控系统(07-23)
- 基于DSP和触摸屏的串行通信系统研究(07-05)