EDN China > 设计实例 > 工业电子 > 网络与总线 > 正文
? 2016博客大赛-不限主题,寻找电子导师,大奖升级??

嵌入式Modbus/TCP网关的设计与实现

苏州卫生职业技术学院 徐凤亮/苏州大学计算机科学与技术学院 王宜怀?? 2010年05月26日 ?? 收藏0

?  选择合适的ARM处理器的开发工具可以加快嵌入式系统的开发进度、节约成本、提高效率。CodeWarrior for ARM Developer Suite V1.2集成开发环境是ARM公司推出的新一代ARM集成开发工具,网关的所有程序代码均在此集成开发环境中编译、链接、调试。

  4.1 μC/OS-II初始化程序设计

  μC/OS-II操作系统运行前需要对硬件系统的片内和片外存储器、系统堆栈等进行初始化。这些工作与硬件系统相关,难以用C语言实现,需要用汇编语言实现。系统在执行完初始化程序之后就将系统的软硬件环境带到一个合适的状态,为启动μC/OS-II准备好正确的环境,最后通过跳转指令执行μC/OS- II主函数main中的第一条C语句[7]。

  初始化程序的设计不属于μC/OS-II操作系统的移植,但是其质量的好坏关系到整个系统程序的运行。初始化程序的执行步骤如下:(1)定义程序的入口点;(2)设置异常向量; (3)执行硬件初始化;(4)在CP15控制寄存器中,将AT91RM9200配置成小端模式; (5)初始化堆栈指针寄存器SP; (6)开放系统中断;(7)初始化C变量;(8)运行μC/OS-II操作系统。

  4.2 μC/OS-II移植

  μC/OS-II在最初设计时就已经考虑到了系统的可移植性。移植的绝大部分工作集中在多任务切换的实现上。这部分代码主要是进行处理器状态的保存、切换和恢复,主要用汇编语言来实现[8]。网关采用μC/OS-II V2.52版本的内核,其全部源代码量大约是6 000~7 000行,共16个文件。移植到ARM处理器上,主要修改3个与ARM体系结构相关的文件:os_cpu.h、os_cpu_c.c和 os_cpu_a.s,代码量大约是500行,另外还要添加μC/OS-II系统时钟节拍的代码。

  时钟节拍初始化代码需要根据具体的硬件系统来编写。网关选用分频后的系统内部时钟做为定时器的输入,通过对AIC高级中断控制器进行设置,μC/OS- II利用AT91RM9200片内定时器1提供的周期性系统时钟节拍中断。

  4.3 TCP/IP协议栈移植

  考虑到商业TCP/IP协议栈价格昂贵,有的仅提供库函数调用并不开放源代码,所以本文在对几种开放源代码的TCP/IP协议栈进行比较后选用2006 年3月发布的稳定版本LwIP 1.1.1协议栈[9]移植到μC/OS-II操作系统和硬件系统上。

  LwIP对μC/OS-II的支持也非常好,文档管理和软件版本升级比较完善。LwIP的移植主要涉及两部分:操作系统模拟层的修改和以太网硬件驱动程序的设计。

  对于嵌入式系统来说,操作系统中进程切换的代价相当昂贵。LwIP没有直接使用属于操作系统的函数调用及数据结构,而是用操作系统模拟层来代替这些函数的使用。所有TCP/IP协议都在μC/OS-II的一个任务tcpip_thread中运行。网关的应用层程序建立单独的T_httpServer任务 (进程)和T_modbusServer任务(进程),通过μC/OS-II的邮箱、消息队列等与lwIP任务(进程)进行通信。

  操作系统模拟层使用统一的接口来提供定时器、进程同步及消息传递机制等此类系统服务。因此移植LwIP需针对μC/OS-II操作系统修改模拟层中的与处理器和编译工具相关的include文件、与操作系统相关的数据结构和函数,主要涉及LwIP的sys_arch.c和sys_arch.h文件。

  以太网硬件驱动程序的设计包括LwIP接口函数设计和硬件相关函数设计。AT91RM9200微处理器集成了以太网媒质访问层EMAC控制器。EMAC控制器通过RMII接口访问物理层芯片DM9161,实现以太网数据的传输。以太网设备驱动程序需要实现EMAC层的接收、发送、初始化以及中断处理功能。 LwIP提供了一个网络驱动程序的参考模板,即LwIP的源代码目录\src\netif下找到ethernetif.c文件,根据微处理器的硬件修改其中的6个函数即可。

  4.4 应用层程序设计

  在嵌入式操作系统μC/OS-II和LwIP的基础上进行应用层程序的设计,主要实现嵌入式Modbus/TCP网关的两个主要功能:通过网关的Web服务功能对网关进行配置;通过Modbus/TCP协议将Modbus串行通信链路与以太网相连。

  4.4.1 Web服务功能设计

  HTTP协议实现的客户机/服务器模式是一种请求/响应行为。嵌入式Modbus/TCP网关将充当Web服务器。客户机是任意一台与网关以太网接口相连的计算机。

  (1)网关复位启动后,μC/OS-II运行T_httpServer任务(启动Web服务)。客户机可以通过浏览器向网关发出HTTP的GET方法的请求。

  (2)网关收到该请求后对请求消息中的方法字段进行判断。如果是GET方法,则表示是第一次请求,网关执行__Handler_HTTPGet( )函数,将固化在片外Flash中的HTTP表单页面和网关的配置信息返回给客户机。

  (3)用户填写网关发送的表单页面,输入新的IP地址、子网掩码和网关地址,然后点击提交按钮,客户机向网关发出POST方法的请求。其中对用户填写数据进行验证的工作是通过嵌在表单页面中的javascript程序实现的,减轻了网关的负担。

  (4)网关收到客户机POST方法的请求后擦除片外Flash中原有的配置信息,然后烧写新的信息,从而保证网关的配置在复位后不会丢失,配置信息在网关重启后生效。


?? ?? ??


打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮

1.扫描左侧二维码
2.点击右上角的分享按钮
3.选择分享给朋友
?? ??

Modbus? TCP网关? 现场总线?

相关文章

我来评论
美国的游客
美国的游客 ??? (您将以游客身份发表,请登录 | 注册)
?
有问题请反馈