文/李晨 蒋林 刘思平
在工业通信控制领域,随着科学技术的发展,对数据传输的时实性、时间响应的要求越来越高。相比较于传统的RS-485或RS-232通信方式,工业以太网RJ45具有通信速率高、传输距离长、方便布线等优点,本系统用了STM32F107微控制芯片移植LWIP轻协议栈,通过STM32F107的网络中断接收到触发方式,降低了单片机资源与通信延迟,提高了处理效率,提高了通信稳定可靠性。
本系统软件部分采用了UCOS操作系统下移植了LWIP协议栈,利用STM32F107自带的DMA+ETH中断实现快速高效传输,同时采用UDP服务器模式进行通信,从而实现工业上的高效通信,系统的Lwip通信程序流程图如1所示。
在软件流程图中可以清晰的看到,先初始化系统,进行UCOS初始化并创建Lwip任务,在任务中先进行DP8348硬件初始化,在进行Lwip初始化,然后建立UDP服务器,Lwip任务就可以挂起任务了;同时在网络中断中进行数据包接收读取,读取到数据包后进行命令解析、数据处理,最后在回发给客户端,完成一轮的数据通信。由于使用了DMA进行对网络数据进行控制,并且数据都是在中断接收回调函数中处理回发,如果没有接收到数据,是不会占用CPU资源,进一步降低了CPU的负担,减少了通信延迟,提高了处理效率,提高了通信稳定可靠性。
图1:Lwip程序数据流程图
LWIP是一个轻量级的开源免费的TCP/IP协议栈,移植Lwip协议栈可以从Lwip官网下载源码,也可在STM32官网上下载带Lwip协议栈的源码。本系统在UCOS操作系统下移植了LWIP协议栈,但是实际上使用软件为ETH中断+DMA接收触发,已经和是否使用嵌入式系统没太大关系了,本系统使用UCOS系统为了优化程序本身,进一步提高单片机效率。在移植LWIP协议栈中,将宏NO_SYS设置为1,同时本系统使用了RAW的UDP接口方式,在头文件中对应需要把LWIP_NETCONN与LWIP_SOCKET设置为0,LWIP_UDP设置为1,从而启动UDP协议。工业设备终端作为UDP服务器,一般需要固定IP地址,因此在将LWIP_DHCP设置为0,关闭自动获取IP地址,最后配置MEM_SIZE、PBUF_POOL_SIZE、PBUF_POOL_BUFSIZE等设置POOL与HEAP的内存大小。
在Lwip的初始化过程中在对设备MAC地址进行设置时,为了防止出现设备MAC地址冲突而无法正常工作,可读取STM32内部的唯一ID为MAC地址。Lwip的初始化代码如下:
Lwip初始化完成后,系统采用了DMA+ETH中断方式进行数据接收,还需编写对应ETH中断函数,网络中断对应代码如下:
先用STM固件库中的ETH_GetRxPktSize()检测是否收到数据包,再调用Lwip协议栈的LwIP_Pkt_Handle()接收处理函数,从以太网缓冲区读取接收到的数据包,最后清除DMA对应的中断标志位。
如今网络数据通信,一般采用TCP协议或UDP协议,相比较于TCP协议,UDP协议是一种无连接,不可靠,传输速度快,相对安全性高、可实现一对一,多对一的传输层的协议。在工业应用场合中,UDP协议更高的效率,更快的传输实时性,资源占用率更低,反而更加适合。随着网络控制芯片与技术的发展,使得UDP协议的丢包率已经很低了,应用层的协议优化,也大大增加了数据传输的可靠性。UDP服务端的代码初始化如下:
UDP服务端初始化后,Lwip的子任务就可直接挂起,等待网络中断接收到数据包后,进入回调函数。在回调函数中,在此进行数据处理解析后,把数据发送回客户端,发送完后在释放远程客户端的连接与内存即可。
将系统硬件设备用网线接入路由器中,与计现代信息科技 ,2018,2(G软件对系统设备进行测试,结果主机每100ms对设备ping 32字节数据,一共不间断连续发送56万包数据,最短时间0ms,最大时间3ms,平均时间0.11ms,丢包率为0%。同时为了测试通信的稳定性,每间隔100ms发送数据,总共发送515946个包,15个小时,接收515946个包,丢包率为0%,在实际应用中,如果出现错误、丢包的情况,通过应用层协议,重复向设备终端发送命令进行查询通信,以此进一步提高数据通信的可靠性与稳定性。
UDP协议是一个非连接的协议,通信数据的客户端和服务端不建立连接,当它发送数据时,只是可能快地把它丢到到网络上,一对多传送也可兼容,并且在做断网重连测试的时候,也不需要像TCP协议一样,还得专门定时查询处理,只要设备重新连接上网络后,就可恢复正常通信。
本文提供了一种基于基于STM32与Lwip协议栈的高效通信技术,利用STM32F107的ETH中断+DMA方式,通过移植Lwip协议栈,使用UDP服务端模式通信,从而实现工业上的高效通信技术。经过测试,在多对一下以100ms间隔的通信,经过长达15多个小时的测试,以极低的丢包率与错误率证明,该技术方案有效的优化单片机资源与通信延迟,并提高了通信稳定可靠性,在嵌入式工业应用上具备了相当的实用价值。