英语原文共 6 页,剩余内容已隐藏,支付完成后下载完整资料
基于嵌入式Linux操作系统的Modbus协议的设计与实现
摘要:随着嵌入式技术的快速发展,新一代工业自动化数据采集监控系统采用高性能的嵌入式微处理器作为核心,以更好地适用于应用系统;该系统符合对功能、可靠性、成本、尺寸和功耗等特性的严格要求。在工业自动化应用系统中,Modbus通讯协议是广泛的工业标准,被应用在大规模的工业设备中,如DCS、PLC、RTU和智能仪表等。在此,为了达到工业自动化应用中嵌入式数据采集监控系统的要求,在Linux环境下设计出一款基于Modbus协议的嵌入式数据采集监控平台,实现串口Modbus主协议,其包括ASCII和RTU两种通讯模式。因此,各种串口Modbus协议设备之间即可实现自由通讯;同时,由嵌入式平台实现的Modbus主站是稳定可靠的,且在新型自动化应用的嵌入式数据采集监控系统中具有广阔的前景。
关键词:嵌入式系统;嵌入式Linux;Modbus协议;数据采集;监控和控制;
引言
Modbus是由Modicon公司推出的一种通讯协议,广泛应用在工业自动化现场,且已经成为现在的工业标准;不同厂家的控制器或测量仪器可以通过Modbus协议连接成一个工业监控网络;其中,该通讯协议作为通讯标准被应用在大规模的工业设备中,包括PLC、DCS、RTU和小型智能仪表等等。同时,随着嵌入式技术的发展,采用高性能微处理器作为核心的嵌入式数据采集监控系统是一个重要的发展方向。因此,本设计在基于工业自动化应用的嵌入式数据采集监控系统中,设计并实现嵌入式Linux环境下的Modbus主协议,以实现各种串口Modbus协议设备之间的自由通讯。
Modbus协议介绍
Modbus协议包括ASCII、RTU和TCP三种传输模式,支持传统的RS-232、RS-422、RS-485和以太网设备;在标准Modbus网络中,串口Modbus设备和控制器之间采用ASCII和RTU传输模式建立连接;而对于以太网Modbus设备,则采用Modbus/TCP协议的传输模式。其中,在Modbus网络中,所有设备必须采用相同的传输模式和参数。
Modbus协议独立于硬件,其仅仅定义控制器可以区分和使用的信息结构,而不是物理层,且通信网络的类型也未被定义。Modbus协议规定了信息和数据的结构以及命令和响应的方式,在此采用主/从站的方式实现数据通信;主站发送请求信息,从站接收到正确的信息后产生响应信息返回给主站,主站也可以直接发送信息修改从站的数据。
Modbus协议需要校验数据。串行协议有奇偶校验,除此之外,ASCII模式使用LRC校验,RTU模式采用16位的CRC校验;但TCP模式却没有明确的校验,因为该协议是面向连接的高可靠性协议。此外,Modbus采用主从方式,在指定的时间接收和发送数据。在实际应用中,如果某些从站设备断开连接,主站可以诊断出来,且在故障修复后自动连接网络。因此,Modbus协议是可靠的。
由于Modbus协议的信息结构,每个控制器需要有各自的设备地址,主要用于区分消息并判定当前正在进行的操作。其中,在Modbus协议中如果需要响应,控制器将产生答复并转换给查询方。
表1是Modbus协议的ASCII模式和RTU模式的对比。如表1所示,ASCII模式有开始和结束标志,非常方便程序处理;且ASCII模式传输可读的ACSII码,故其是便于调试的;此外,该模式实现LRC校验是相对容易的。但是,与RTU模式相比,ASCII模式传输可读字符,传输效率相对较低;因此,RTU模式通常适用于大数据量的传输场合。
表1 ASCII和RTU模式对比
模式 |
开始标志 |
结束标志 |
校验方式 |
传输效率 |
程序处理 |
ASCII |
:(colon) |
CR,LF |
LRC |
低 |
直接,易于调试 |
RTU |
无 |
无 |
CRC |
高 |
间接,略复杂 |
系统设计
图1为嵌入式数据采集系统的整体架构图;在该系统中,嵌入式数据采集平台作为核心,其通过Modbus协议实现与各种Modbus从站设备的数据通讯;数据采集并经分析和预处理后,即可通过TCP/IP传输给监控中心的工程师站和操作员站。
图1 系统架构图
该嵌入式数据采集平台采用Atmel公司的工业级微处理器AT91RM9200作为核心;集成多种外围连接,包括串口、CAN总线接口、AD/DA接口、RS485接口、SD/MMC卡口和JTAG调试接口等;集成一个8英寸的具有数据显示和触屏功能的TFT真彩液晶显示屏;该平台使用嵌入式Linux操作系统,并使用Modbus协议实现主功能。因此,该嵌入式平台可以通过串口读取Modbus从站的数据,经分析和处理后在液晶显示屏上进行显示;同时,数据可通过该嵌入式平台的以太网接口传输到监控中心,经分析和处理后,可进行进一步的监控和处理。
基于嵌入式Linux环境下的Modbus协议的设计与实现
4.1 嵌入式Linux操作系统的移植
嵌入式Linux作为Linux的发展方向之一,已经取得了许多成果和产品,且其稳定性、可靠性和高效性都得到了验证;嵌入式Linux系统开放源代码,广泛地提供技术支持,有较好的扩展性并支持多种硬件。借此,该系统使用ARM9硬件环境和嵌入式Linux操作系统。目前,ARM Linux支持ARM系列处理器,包括ARM610、ARM710、ARM720Tcores、ARM920Tcores、StrungARM110、SrtongARM1100和Xscale等等。同时,该系统采用Atmel公司的AT91RM9200作为目标板,其和标准Linux不同之处在于,必须从FLASH或ROM中启动。U-boot作为该系统的启动程序。
为了移植ARM Linux操作系统,需要开发板上各硬件资源在Linux环境下的驱动程序;如果自己设计设备,则需要编译相应的驱动程序。其中,Linux系统移植的整体步骤如下图2所示:
图2 ARM Linux操作系统移植步骤
首先,u-boot通过串口下载到开发板,然后可使用串口或以太网方式来移植ARM Linux系统的内核和根文件系统;由于内核和根文件系统的映像文件比较大,通过串口传输速率较低,故采用以太网模式来下载内核和文件系统,但下载前需要设置好u-boot的网络参数。
在u-boot的命令模式下建立其网络参数:
gt; setenv ipaddr 10.168.64.100 /*设置开发板的IP地址*/
gt; setenv serverip 10.168.64.166 /*设置服务器的IP地址*/
gt; saveenv /*保存设置*/
TFTP服务运行在服务器上后,将编译好的内核和文件系统映像添加到服务器目录;服务器和网络开发板间使用网线连接后,即可在u-boot命令行模式下运行如下命令将内核和根文件系统下载到RAM中:
gt; tftp 21000000 uImage /*下载内核*/
gt; tftp 21100000 ext2ramdisk.gz /*下载文件系统*/
执行bootm 21000000命令后,编译好的ARM Linux系统即可运行;此时,RAM中的内核和根文件系统即可通过u-boot的复制命令写入FLASH中。设置好启动参数后,系统可自动运行,该程序是在开发板上执行的。
4.2 Linux环境下Modbus协议的串口配置
标准Modbus串口协议采用RS232/RS485进行数据传输,在Linux环境下,串口设备的设备节点为/dev/ttyS0(COM1)和/dev/ttyS1(COM2)。由于Modbus串口协议包含ASCII和RTU两种传输模式,其起始标志是不同的,各信息包的数据位置也不同,所以必须单独处理。在此,以RTU模式为例来介绍Linux环境下Modbus串口协议的配置。
串行操作所需要的头文件主要有:
#include lt;stdio.hgt; /* 标准输入输出*/
#include lt;stdlib.hgt; /* 标准函数库 */
#include lt;unistd.hgt; /* unix标准函数定义 */
#include lt;sys/types.hgt;
#include lt;sys/stat.hgt;
#include lt;fcntl.hgt; /* 文件控制定义*/
#includelt;termios.hgt; /* PPSIX 终端控制定义 */
#include lt;errno.hgt;? /* 错误码定义 */
当Modbus协议采用RTU传输模式时,需要根据信息帧的特征来设置串口波特率、数据位、停止位、校验位和控制特性。
串口波特率的设定:
cfsetispeed(amp;mytio,B9600);
cfsetospeed(amp;mytio,B9600); /* 设置收发波特率为9600 */
串行数据位、停止位和校验位的设定:
mytio.c_cflag |= CS8; /* 数据位为8位 */
mytio.c_cflag |= PARENB; /* 停止位 */
mytio.c_cflag amp;= ~PARODD; /* 校验位 */
初始化控制特性:
mytio.c_cc[NMIN] = 255; /* 最多一次性读取255组数据 */
mytio.c_cc[NTIME] = 4; /* 设置定时器 */
4.3 设计Modbus协议主程序
该部分主要介绍ASCII和RTU两种传输模式下的Modbus协议主程序的设计与实现。其中,Modbus主站服务包括人机交互模块、功能选择模块、功能处理模块和返回处理模块,各模块功能均在嵌入式Linux环境下实现。
人机交互模块是用户和平台之间的通讯模块,其主要实现页面打印和用户信息录入等功能。
功能选择模块主要是通过用户的输入信息来确定为Modbus主站所选择的功能选择参数,其选择参数包括传输模式、服务类型、从站地址等内容。
功能处理模块是该平台的核心模块,其包括串口初始化、Modbus帧结构、Modbus帧分析、各种服务处理等功能。在该平台中,串口Modbus设备具有六种主要的服务处理模式,包括读取线圈状态、读取输入状态、读取保持寄存器、读取输入寄存器、写单个线圈和写单个寄存器;这六种模式已经覆盖Mobuds的基本功能需求。同时,该平台也可方便地扩展其他需要的功能。
返回处理模块主要处理平台的操作结果。如果用户成功请求服务处理,该服务结果将通过标准输出设备打印输出,若发生错误则打印错误信息。
在该设计中,为了能够方便地获取功能参数,定义如下结构体:
其中,slave_address指从站地址,Modbus网络最多允许255个从站设备;function指所选择的服务模式,在该系统中有六种服务模式,分别为1-6;start_address是16位字符,表示从站运行设备的起始地址;pointnum_or_setdata包含两种命令,服务1-4是操作数,服务5和6为16位字符。
struct parameter
{
unsigned char slave_address;
unsigned char function;
int start_address;
int pointnum_or_setdata;
};
图3为Modbus主程序中功能处理模块的处理流程图。该程序首先确定格式字符的值,建立用户需要的传输模式,从而确定串口的功能配置及所选择的服务功能;然后在Linux环境下设置串口参数,并判断用户需要的服务类型,选择对应的服务结构函数。例如,如果格式字符为0,则表示选择RTU模式;function为1,表示用户需要去读取线圈的值;该程序通过rtu_read_status函数调用construct_rtu_frm函数来构造Modbus请求帧,并把其保存在事先定义的串行传输缓冲区mod_tx_buf中,进而通过调用串口发送命令来传送Nodbus请求帧;如果在设定时间内接收到应答帧,程序将调用相应模式的应答帧分析函数来进行处理。比如,当传输模式为ASCII时,将调用scii_data_anlys分析函数;当传输模式为RTU时,则调用rtu_data_anlys分析函数。应答帧分析函数分析串口所接收到的缓冲区数据,如果应答帧分析是正确的,该函数将把数据加载到目标缓冲区,否则该函数将终止服务并处理错误,打印输出信息。lt;
剩余内容已隐藏,支付完成后下载完整资料
资料编号:[147788],资料为PDF文档或Word文档,PDF文档可免费转换为Word
以上是毕业论文外文翻译,课题毕业论文、任务书、文献综述、开题报告、程序设计、图纸设计等资料可联系客服协助查找。