新闻中心

EEPW首页>嵌入式系统>设计应用> 嵌入式Modbus/TCP网关的设计与实现

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

作者: 时间:2010-05-21 来源:网络 收藏

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的源代码目录srcnetif下找到ethernetif.c文件,根据微处理器的硬件修改其中的6个函数即可。
4.4 应用层程序设计
  在操作系统μC/OS-II和LwIP的基础上进行应用层程序的设计,主要实现网关的两个主要功能:通过网关的Web服务功能对网关进行配置;通过协议将Modbus串行通信链路与以太网相连。
4.4.1 Web服务功能设计
  HTTP协议实现的客户机/服务器模式是一种请求/响应行为。嵌入式网关将充当Web服务器。客户机是任意一台与网关以太网接口相连的计算机。
  (1)网关复位启动后,μC/OS-II运行T_httpServer任务(启动Web服务)。客户机可以通过浏览器向网关发出HTTP的GET方法的请求。
(2)网关收到该请求后对请求消息中的方法字段进行判断。如果是GET方法,则表示是第一次请求,网关执行__Handler_HTTPGet( )函数,将固化在片外Flash中的HTTP表单页面和网关的配置信息返回给客户机。
(3)用户填写网关发送的表单页面,输入新的IP地址、子网掩码和网关地址,然后点击提交按钮,客户机向网关发出POST方法的请求。其中对用户填写数据进行验证的工作是通过嵌在表单页面中的javascript程序实现的,减轻了网关的负担。
  (4)网关收到客户机POST方法的请求后擦除片外
Flash中原有的配置信息,然后烧写新的信息,从而保证网关的配置在复位后不会丢失,配置信息在网关重启后生效。
4.4.2 Modbus/TCP协议转换功能设计
  Modbus/TCP嵌入式网关复位启动之后会进行一系列的初始化操作,最后启动T_modbusServer任务,该任务实现Modbus/TCP帧与串行链路中的Modbus RTU帧之间的转发。当Modbus/TCP客户机需要对串行链路中的服务器进行查询时,首先会向Modbus/TCP网关的502端口发起连接请求,网关监听到这一请求后会执行中断服务程序,唤醒处于等待状态的T_modbusServer任务,并与之建立TCP连接,Modbus/TCP客户机就会发送一个Modbus/TCP请求帧并等待网关的响应信息。网关在收到Modbus/TCP客户机的请求信息后会对帧进行分析处理,最后生成一个Modbus RTU格式的查询帧并发送到串行链路中去。之后继续监听串行链路,若收到串行链路上的RTU响应帧,则将该帧封装成Modbus/TCP应答帧,发送给以太网的Modbus/TCP客户机,并断开连接。
5 测试
  网关采用了第三方的Modbus客户机测试工具ModbusPoll V4.2和服务器测试工具ModbusSlave V4.1进行测试。在一台PC机上运行多个ModbusSlave程序模拟不同的设备和设备功能状态,该PC机通过串行通信链路与网关相连。另一台PC机运行ModbusPoll程序,模拟Modbus/TCP客户机,通过以太网与网关相连,并且运行Commview软件捕捉以太网通信的全过程并计算响应时间。测试时由Modbus/TCP客户机通过网关循环查询串行通信链路中的三台Modbus服务器, 串行通信的波特率设置为9 600 b/s,无校验位,停止位为1。网关连续工作48 h未发生查询失败。根据Commview捕捉到的以太网数据包的间隔时间可以计算出Modbus/TCP客户机一次查询响应的实际时间约为110 ms。网关各部分均正常,主控芯片仅微微发热。网关直流5 V电源,输入电流为55 mA,总功率仅为0.275 W。
  随着企业管理信息化的迅速发展,越来越多的工厂和企业拥有了自己的信息管理网络。有用户提出将自己的控制系统(如中央空调系统)的管理纳入到企业信息管理系统统一的框架中去。利用嵌入式Modbus/TCP网关可以在保留现有的控制设备和布线网络的情况下,使用户通过企业的信息网络对整个控制系统进行监控,既满足了用户升级的愿望又减少了成本的支出。

本文引用地址://m.amcfsurvey.com/article/151848.htm
linux操作系统文章专题:linux操作系统详解(linux不再难懂)

tcp/ip相关文章:tcp/ip是什么



上一页 1 2 下一页

评论


相关推荐

技术专区

关闭