文中设计的现场总线通信网关提供了对CANBUS和MODBUS的支持,实现了CANBUS与MODBUS数据的透明传输,为2种总线的兼容提供了可行方案。
1 网关模型分析
本文设计的现场总线通信网关具备MODBUS主站及MODBUS从站的功能,以下以两种典型的应用场景为例分析网关的工作方式。图1所示的应用场景网关工作在MODBUS主站模式,图2所示的应用场景网关工作在MODBUS从站模式。
1.1 网关的MODBUS主站模式
网关工作于MODBUS主站模式时,当CANBUS上的监控主机发出一帧数据时,网关作为CANBUS上的设备接收到该数据,根据验收码和屏蔽码判断是否处理该数据。若验证成功,则解析收到的CAN数据帧,得到CAN数据帧中的数据;将数据按照MODBUS协议逐层打包生成MODBUS帧,网关作为MODBUS主站向MODBUS上的从站发送这一帧数据,完成了一次CANBUS到MODBUS的单向数据传输。协议转换示意图如图3所示。
1.2 网关的MODBUS从站模式
网关工作于MODBUS从站模式时,当由MODBUS上的监控主机发出一帧信息时,网关收到该MODBUS帧,检查地址码与功能码,若与自身地址相符且功能码为发送,按MODBUS协议逐层解析,得到其数据;网关将数据按照CANBUS协议打包形成CAN的数据帧,向CANBUS发送该帧,并向MODBUS主站发送回应帧,完成了一次MODBUS到CANBUS的单向数据传输。
2 硬件设计
本文设计的嵌入式现场总线通信网关包括主控制器(STM32F207),CANBUS接口单元,MODBUS接口单元用于接入MODBUS,以及3.2英寸LCD触摸屏模块。硬件系统框图如图4所示。
2.1 STM32F207微控制器
本文选用STM32F207构建整个系统,STM32F207是一款基于ARM Correx-M3内核的32位微处理器,工作频率120 MHz.STM32F207提供了丰富的接口,支持2路CAN 2.0协议的CANBUS接口,3路USART接口,2路UART接口,6路定时器,FSMC+SPI接口(16BITFSMc+SPI)用于接入LCD触摸屏模块,支持2种调试接口:串行接口和JTAG调试接口。
2.2 CANBUS接口单元
由于STM32F207内置有bxCAN控制器,该控制器是一种在标准CAN总线基础上扩展的总线接口,支持CAN总线协议2.0 A和2.0 B.能以最小的CPU负荷来高效处理收到的大量报文。它也支持报文发送的优先级要求(优先级特性可软件配置)。为了满足CAN总线协议中的标识符硬件过滤需求,bxCAN控制器提供了位宽可变的、可配置的过滤器组,用来完成只接收软件需要的报文功能。CAN接口电路选择SN65HVD230CANBUS收发器。SN65HVD230是一种专用于带CAN控制器设备的CANBUS收发器,可应用于ISO 11898标准的CANBUS串行通信的物理层中。SN65HVD230CAN BUS收发器可以向总线和CAN控制器提供不同的数据传输速度,最高速度为1 Mb/S.
2.3 MODBUS接口单元
MODBUS接口单元使用RS 485串行接口,接口芯片为MAX485.MAX485是用于RS 485与RS 422通信的低功耗收发器,每个器件中都具有一个驱动器和一个接收器。驱动器具有短路电流限制,并可以通过热关断电路将驱动器输出置为高阻状态,防止过度的功率损耗。接收器输入具有失效保护特性,当输入开路时,可以确保逻辑高电平输出。MAX485的驱动器摆率不受限制,可以实现最高2.5 Mb/s的传输速率。
3 软件设计
3.1 CANBUS的应用层定义
本文设计的现场总线通信网关定义了CANBUS的应用层协议。
(1)规定网关收到的CAN数据帧中的第1个字节为CANBUS的功能码,该功能码为0x0F时,与MODBUS进行通信。
(2)规定CAN数据帧中的第2个字节的高4位为该帧的标号位,低4位为该帧中包含的数据字节数,该字节数为MODBUS协议中数据域的字节数。
(3)规定CAN数据帧中的第3,第4个字节分别为MODBUS的地址码和功能码。
(4)规定从CAN数据帧的第5个字节开始为MODBUS的数据域,由于MODBUS的数据域一般为4个字节,此时CAN数据帧的数据段恰好为8个字节。
(5)当MODBUS数据长度大于4字节时,需要从2个或者多个连续发送的标号相同的CAN数据帧中获得完整的MODBUS数据。当获得的数据位数与帧中给出的位数不同时丢弃该帧。
定义一个数据缓冲区A,一个数据缓冲区B,分别用于临时存放CANBUS到MODBUS的数据和MODBUS到CANBUS的数据。
3.2 CANBUS的收发程序设计
该部分包括CAN初始化,CAN发送程序,CAN接收程序。CAN的初始化包括以下内容:配置嵌套向量中断控制器(NVIC),设置CAN的Rx0和TX中断的响应优先级和抢占优先级,RX0和TX中断使能。根据硬件连接配置GPIO,本文中RX使用GPIOD0,TX使用GPIOD2.设置波特率及过滤器配置。
CANBUS数据的接收是通过接收邮箱(FIFO)中断进行处理的,当FIFO接收到一个新的报文时,过滤器根据预设的值判断报文的标示符是否匹配,若不匹配,直接丢弃该报文;若该报文的标示符与预设值匹配则中断处理程序将接收邮箱中的数据拷贝到数据缓冲区A,该数据将作为MODBUS主站发往MODBUS从站的数据。CANBUS数据接收程序流程如图5所示。
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所示。
5 结语
本文设计实现了一种在CANBUS和MODBUS间进行透明的数据传输的嵌入式现场总线通信网关,软硬件设计简单,通信参数可现场配置,能够很好地实现CANBUS与MODBUS间的通信。该网关解决了异类现场总线间通信的问题,使系统的兼容性、互联性、可扩充性都得到了极大的提高,具有良好的应用前景。
评论
查看更多