基于stm32嵌入式系统应用(基于STM32嵌入式多协议网关设计)
基于stm32嵌入式系统应用(基于STM32嵌入式多协议网关设计)TD301D232H是一款集隔离电源和数据收发功能于一体的RS232总线收发隔离模块。其该芯片主要功能是将逻辑电平信号转换为232协议的电平信号,实现信号电平匹配,通信波特率高达115 200 b/s。EMC防护电路如图4所示。TD301D485H-A是一款集隔离电源和数据收发功能于一体的RS485总线收发隔离模块。该芯片主要功能是将逻辑电平信号转换为RS485接口协议的差分电平信号,实现信号匹配。通信波特率高达115 200 b/s,同一网络可支持32个节点连接。EMC防护电路如图3所示。在添加了应用层协议情况下,实现的通信方式是:MODbusTCP转MODbus单向半双工传输设计,MODbusTCP转CANopen单向半双工传输设计。调度算法的设计,实现多协议半双工交叉通信,解决任务切换、信息缓存、信息阻塞和误码等问题,给出了程序软件设计方案和思路。图1外观结构图嵌入式多协议网关的外观
邹晓康,刘帅,张浩然 (浙江师范大学 数理与信息工程学院,浙江 金华321004)
摘要:基于STM32平台,设计一种基于工业现场总线RS485、CAN和有线以太网的嵌入式多协议半双工交叉通信的网关产品,主要采用STM32高性能ARM处理器作为核心控制芯片,实现RJ85、UART、CAN双向透明传输设计、MODbusTCP转MODbus单向半双工传输设计、MODbusTCP转CANopen单向半双工传输设计,在现代工业现场具有很好的推广价值。
随着传感器、无线通信、工业现场总线、嵌入式系统等技术的发展,物联网已经广泛应用于仓储物流、智能电网、公共安防、智能楼宇等领域。物联网的核心思想就是把任何物体都连到互联网中,其中起到重要作用的便是网关。便携式多协议网关现在在电子市场是一个新兴产品[1]。当前市面所能看到的网关都是针对互联网开发的,主要是将不同的局域网(以太网、令牌网等)互联到Internet上。没有特定针对工业现场总线开发的网关产品,购买到的USB转CAN模块、USB转RS232/RS485模块等都是单接口转换[2],简单实现了硬件接口的匹配问题,缺少以太网和CAN、MODbus等多种工业现场总线互转的模块。
基于STM32嵌入式多协议网关根据市面上在嵌入式工业网关方面的不足、空缺和需求,从工程应用角度研发一种基于工业现场总线CAN、RS485/232和有线以太网的嵌入式多协议半双工交叉通信的网关产品[3]。系统采用高性能32位ARM处理器STM32F407。主要研究内容包括:移植和优化轻量LWip、freeMODbus、CANfestival通信协议,使其高速运行在ARM处理器上,实现嵌入式多协议网关设计。首先,在没有使用应用层协议情况下,实现的通信方式主要为双向透明传输模式:Ethernet与CAN接口互转、Ethernet与RS485/232接口互转、RS485/232与CAN接口互转,CAN、RS485/232接口可设置其传输的数据的波特率、字节大小等。
在添加了应用层协议情况下,实现的通信方式是:MODbusTCP转MODbus单向半双工传输设计,MODbusTCP转CANopen单向半双工传输设计。调度算法的设计,实现多协议半双工交叉通信,解决任务切换、信息缓存、信息阻塞和误码等问题,给出了程序软件设计方案和思路。
图1外观结构图嵌入式多协议网关的外观结构如图1所示,包括以太网接口端子1、液晶显示接口端子2、电源接口端子3、网关主体4、调试接口端子5、模拟信号检测接口端子6、数字信号检测接口端子7、RS232接口端子8、CAN接口端子9、RS485接口端子10。
设计中以太网链路层采用主控芯片STM32F407内部自带的媒体访问控制器MAC实现, MAC与物理层芯片通过RMII接口通信,物理层采用DP83848实现,集成极性检测和校正10/100BaseT端口,内部集成高性能的DMA。 为了有效保护DP83848芯片和系统的安全,其输出端通过变压器隔离模块HR911105A进行隔离保护,输入、输出差分线通过50 nF电容进行滤波处理,屏蔽高频信号的干扰,震荡电路采用集成的50 MHz有源晶振,保证输出的时钟信号饱满、圆滑。网络隔离模块如图2所示。
TD301D485H-A是一款集隔离电源和数据收发功能于一体的RS485总线收发隔离模块。该芯片主要功能是将逻辑电平信号转换为RS485接口协议的差分电平信号,实现信号匹配。通信波特率高达115 200 b/s,同一网络可支持32个节点连接。EMC防护电路如图3所示。
TD301D232H是一款集隔离电源和数据收发功能于一体的RS232总线收发隔离模块。其该芯片主要功能是将逻辑电平信号转换为232协议的电平信号,实现信号电平匹配,通信波特率高达115 200 b/s。EMC防护电路如图4所示。
TD301DCANH3是一款集隔离电源和数据收发功能于一体的CAN总线收发隔离模块。主要功能是将逻辑信号电平转换为CAN接口总线的差分信号电平,实现信号匹配;波特率可达1.0 Mb/s,同一网络可支持110个节点连接,电磁抗干扰性高辐射低。EMC防护电路如图5所示。
3软件设计
3.1透传模式
STM32F407所提供的DMA功能非常强大,支持Ethernet、CAN、RE485/232、IIC、SPI等接口。工作流程如图6所示,分别为以太网、CAN接口分配了数据缓存区,大小1.25 KB,该缓存区是单向传输的,只接收高速接口的有效数据并进行缓存,然后将缓存的数据发送给低速的接口。以太网接口数据缓存区的数据可以发送到CAN接口和RS串口,而CAN接口的数据缓存区的数据只需要发送给RS串口就可以了,通过该缓存区的建立,可以解决高速接口向低速接口传输数据的阻塞现象。
3.2MODbusTCP转MODbus半双工传输
网关采用MODbus TCP Slave与MODbus RTU/ASCII异步通信方式。网关从以太网接口接收到请求报文信息,在发送到RS232/485接口时,要做报文的解析转换工作,MODbus TCP相对串行链路MODbus,去掉了从机地址、校验码,添加从设备的ID号,做好CRC校验,删除MBAP包头,组合成完整的MODbus报文。
MODbus从机接收到相应请求报文,会返回对应的响应报文,该报文是一帧完整的MODbus报文,网关系统将该帧信息通过以太网接口发送出去之前,要进行Transaction ID添加、Protocol ID添加、Length添加、Unit ID添加组成一个MBAP包头,再将相应的CRC校验删除,就构成了一帧完整的MODbus TCP报文。
该网关系统另外一个特点是最多可支持8个MODbus TCP主站连接到网关上,允许8个用户同时访问相同的MODbus从机设备,实现方法如图7所示。
MODbus TCP主站1~主站8同时与网关设备进行TCP连接,每一个主站都可以访问连接在网关上的32个设备MODbusRTU/ASCII从机1~从机32,并且每个MODbus TCP主站都有一个独立的报文缓存区,作用描述如图7所。当多个主站设备同时访问从机设备时,如果不做相关的处理则会出现信息阻塞现象。为了解决该问题,系统中实现了一个报文解析及逆解析的优先级控制算法,实现过程如下:
(1)将8个报文缓存区构建为一个缓存队列;
(2)每当一个主机设备连接网关时,建立TCP连接时系统会动态地开辟一段报文缓存区,添加到队列中区,TCP连接断开时,该缓存区便会删除回收数据内存;
(3)读取报文时,每从一个缓存区读取一帧有效报文数据,处理结束时,便会读取下一个缓存区的数据,而不会继续读取同一个缓存区的数据,这样可以保证每个主机设备的响应时间均等,提高速度。
(4)当缓存区的数据溢出时,系统不会再接收请求报文,而是丢弃。
3.3MODbusTCP转CANopen半双工传输
MODbusTCP转CANopen可以实现1个MODbus TCP主站与多个CANopen从站设备之间的数据通信。
如图8所示,Data 1表示从MODbus TCP协议总线到CANopen协议总线的数据传输过程;Data 2表示从CANopen协议总线到MODbus TCP协议总线的数据传输过程。
网关独立运行在CANopen网络协议上,根据对象字典索引号周期性地发出CANopen的SDO读/写命令,通过过程数据对象PDO发送和接收数据。同时MODbus TCP主站发送的命令信息被网关接收,当MODbusTCP发送的I/O数据请求报文被收到时,立即刷新和读取最新CANopen缓存的数据,以此实现网络高低速度的匹配。
4系统测试
4.1透传测试
实验过程都是在发送间隔为100 ms、传输次数为10 000下测试通过的,测试了不同传输速率情况下的传输误码率。其中,表1中的传输速率主要是针对串口RS485/232进行设置的。
4.2应用协议转化测试
MODbusTCP转MODbus和MODbusTCP转CANopen,都是通过功能码16 可以连续写入多个数据,以起始地址1000、时间间隔1 000 ms向设备ID为1的MODbus从设备连续写入30个数,1~10、100~1000、1000~10 000,写操作成功,如图9所示。
通过功能码03可以连续读取多个数据,以起始地址1000、时间间隔1 000 ms从设备ID为1的MODbus从设备连续读30个数,成功读取到上次写入的数据。读操作如图10所示。
5结论
通过上面的测试结果看到,系统运行稳定性很好。但从表1可以发现,在透传的过程中,低速接口的传输速率较慢时,如TCP & RS485/232中RS485/232的速率为4 800 b/s时,便会出现0.31%的误码率,其主要原因是,透传通路两端接口的传输速率相差过大时缓存区溢出,可以通过加大缓存区来解决。
参考文献
[1] 沈永春,姜宁,张功镀.嵌入式多协议网关的设计与实现[J].自动化仪表,2007,28(3):812.
[2] 鲍建行.嵌入式TCP/IP协议栈LWIP的并发性能优化[D].北京:北京交通大学,2011.
[3] 张厚林.CAN open通讯协议设计与实现[D].武汉:华电科技大学,2009.