嵌入式Modbus/TCP网关的设计与实现
时间:12-25
来源:互联网
点击:
随着企业信息化进程的深入发展,实现企业上层的管理网络与现场控制网络的无缝连接显得越来越重要。基于质量分析的生产管理、与安全相关的测试监控都要求现场的仪器仪表能对现场的信息进行处理并能及时被上级监控和管理网络访问与控制,最终纳入到企业信息管理系统统一的框架中。
目前,构成底层控制网络的现场总线技术已获得了广泛的应用。多种现场总线标准并存而相互间无法兼容的问题一直困扰着工业界。将工业以太网应用到现场控制网络已成为当前研究的热点和未来发展的趋势。如何使这种网络结构与工业以太网技术相结合,实现底层生产与上层管理的紧密集成是当前研究的热点。
1 Modbus协议及网关拓扑结构
Modbus现场总线协议是Modicon公司于1978年提出的一种现场总线协议。通过此协议,控制器相互之间、控制器经由网络和其他设备之间可以进行通信。该协议内容可以免费获得,因此Modbus的串行链路版本在市场上长期占有主导地位。大量的产品已直接运行或兼容Modbus串行链路版本。
Modbus/TCP工业以太网协议是1999年被开发的Modbus协议的另一版本,允许用户通过以太网访问设备。协议的开放性及简单易学,使它比很多受商业利益驱使的协议取得更快的发展,受到众多第三方产品厂商、终端用户、系统集成商的广泛支持。
本文设计和实现了一种嵌入式协议转换网关,通过Modbus/TCP协议将传统的串行链路通信的Modbus现场总线与以太网相连。用户经由以太网对Modbus设备进行数据采集并对Modbus设备进行远程访问和控制。同时网关还提供Web服务功能,允许通过Web浏览器直接配置网关的IP地址等信息并保存到网关的非易失性存储器中。图1是嵌入式Modbus/TCP网关的连接示意图。

2 网关总体设计
网关选用了ATMEL公司生产的AT91RM9200高性能 32位工业级嵌入式微处理器作为网关硬件系统的核心。网关的软件系统将移植μC/OS-II嵌入式实时操作系统和实现TCP/IP协议栈,并在此基础上设计应用层程序。网关的总体设计结构如图2。网关的设计方案将采用开放源代码的嵌入式操作系统和TCP/IP协议栈,因此在取得较高性价比的基础上可取得最佳的扩展性。

3 硬件设计
AT91RM9200是著名半导体厂商ATMEL力推的一款基于ARM920T内核的工业级嵌入式微处理器,为最大功能、最低功耗、最低成本的嵌入式系统提供了一个完整的解决方案,它除具备ARM微处理器传统优势以外,其性能、可靠性和扩展性都大大超过普通的商业级ARM7核心的嵌入式微处理器。硬件系统的结构如图3。

4 软件系统设计
嵌入式实时操作系统在目前的嵌入式应用中使用越来越广泛,尤其在功能复杂、系统庞大的应用中显得愈来愈重要。网关采用了μC/OS-II实时操作系统。μC/OS- II实时操作系统是专门为嵌入式应用设计的,除了与CPU硬件相关部分是用汇编语言编写外,其他绝大部分代码用C语言编写。 μC/OS-II具有执行效率高、占用空间小、实时性能优良、可靠性高、可扩展性强和移植性好等特点。
选择合适的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语句。
初始化程序的设计不属于μ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在最初设计时就已经考虑到了系统的可移植性。移植的绝大部分工作集中在多任务切换的实现上。这部分代码主要是进行处理器状态的保存、切换和恢复,主要用汇编语言来实现。网关采用μ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提供的周期性系统时钟节拍中断。
目前,构成底层控制网络的现场总线技术已获得了广泛的应用。多种现场总线标准并存而相互间无法兼容的问题一直困扰着工业界。将工业以太网应用到现场控制网络已成为当前研究的热点和未来发展的趋势。如何使这种网络结构与工业以太网技术相结合,实现底层生产与上层管理的紧密集成是当前研究的热点。
1 Modbus协议及网关拓扑结构
Modbus现场总线协议是Modicon公司于1978年提出的一种现场总线协议。通过此协议,控制器相互之间、控制器经由网络和其他设备之间可以进行通信。该协议内容可以免费获得,因此Modbus的串行链路版本在市场上长期占有主导地位。大量的产品已直接运行或兼容Modbus串行链路版本。
Modbus/TCP工业以太网协议是1999年被开发的Modbus协议的另一版本,允许用户通过以太网访问设备。协议的开放性及简单易学,使它比很多受商业利益驱使的协议取得更快的发展,受到众多第三方产品厂商、终端用户、系统集成商的广泛支持。
本文设计和实现了一种嵌入式协议转换网关,通过Modbus/TCP协议将传统的串行链路通信的Modbus现场总线与以太网相连。用户经由以太网对Modbus设备进行数据采集并对Modbus设备进行远程访问和控制。同时网关还提供Web服务功能,允许通过Web浏览器直接配置网关的IP地址等信息并保存到网关的非易失性存储器中。图1是嵌入式Modbus/TCP网关的连接示意图。

2 网关总体设计
网关选用了ATMEL公司生产的AT91RM9200高性能 32位工业级嵌入式微处理器作为网关硬件系统的核心。网关的软件系统将移植μC/OS-II嵌入式实时操作系统和实现TCP/IP协议栈,并在此基础上设计应用层程序。网关的总体设计结构如图2。网关的设计方案将采用开放源代码的嵌入式操作系统和TCP/IP协议栈,因此在取得较高性价比的基础上可取得最佳的扩展性。

3 硬件设计
AT91RM9200是著名半导体厂商ATMEL力推的一款基于ARM920T内核的工业级嵌入式微处理器,为最大功能、最低功耗、最低成本的嵌入式系统提供了一个完整的解决方案,它除具备ARM微处理器传统优势以外,其性能、可靠性和扩展性都大大超过普通的商业级ARM7核心的嵌入式微处理器。硬件系统的结构如图3。

4 软件系统设计
嵌入式实时操作系统在目前的嵌入式应用中使用越来越广泛,尤其在功能复杂、系统庞大的应用中显得愈来愈重要。网关采用了μC/OS-II实时操作系统。μC/OS- II实时操作系统是专门为嵌入式应用设计的,除了与CPU硬件相关部分是用汇编语言编写外,其他绝大部分代码用C语言编写。 μC/OS-II具有执行效率高、占用空间小、实时性能优良、可靠性高、可扩展性强和移植性好等特点。
选择合适的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语句。
初始化程序的设计不属于μ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在最初设计时就已经考虑到了系统的可移植性。移植的绝大部分工作集中在多任务切换的实现上。这部分代码主要是进行处理器状态的保存、切换和恢复,主要用汇编语言来实现。网关采用μ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提供的周期性系统时钟节拍中断。
- 热插拔和缓冲I2C总线 (04-14)
- PCIe总线何时突破Unix服务器坚冰(02-03)
- TMS320VC5402 HPI接口与PCI总线接口设计(04-12)
- 基于Nios II的I2C总线接口的实现(04-09)
- 双口RAM CY7C026在高速数据采集系统中的应用(04-12)
- 计算机在新型多电机同步系统中的应用(07-08)
