基于嵌入式的变电站蓄电池远程监测平台的设计与实现
时间:03-15
来源:互联网
点击:
0引言
变电站蓄电池是变电站电力电源断电后的最后一道保护屏障,其运行状态关系到供电系统的安全性,因而对变电站蓄电池的监测也是保障电力系统稳定运行的重要措施之一。本文基于ARM嵌入式实现对蓄电池实时、智能的远程数据测量与控制。
嵌入式微处理器有许多种流行的处理器核,其中ARM以其小体积、高性能、低成本、低功耗等特点而得到广泛的应用,它已成为移动通信、手持设备、多媒体数字消费等嵌入式解决方案的RISC标准。根据嵌入式处理器类型还需配备一定的嵌入式操作系统。国外操作系统已经从简单走向成熟,有代表性的主要有VxWorks、WindowsCE、Linux等。其中Linux操作系统具有开放的源代码、良好的用户界面、丰富的网络功能、可靠的系统安全、标准丰富的API、良好的可移植等优点,受到全球计算机人员的关注。本文以ARM9系列处理器为核心的工业级开发板及Linux操作系统为基础平台进行开发,所设计的蓄电池监测平台具有实时性强、稳定性高、可互操作性等优点,而且具有良好的可扩充性,为进一步开发与研究提供了便利。
1远程监测系统结构
远程监测系统的硬件一般由现场量测终端、传输通道和远程计算机三大部分。测量终端的任务就是采集被监测对象的测量和状态量等数据,对数据作简单的处理后按通讯规约传送给计算机,并接收上位机下达的命令,对现场设备进行控制。传输通道是指信号传送时所经过的通道,即传输媒体[1]。本文设计所基于的硬件结构包括TM模块、CM模块和PC模块三个部分,如图1所示。TM模块即数据采集与控制输出板,采用C8051单片机及ADC模/数转换器等外围器件,对现场数据采集并对数据作简单的处理。PC模块即远程计算机,作为远程监测及控制平台。CM模块即ARM开发板采用ARM9处理器,集中处理数据和与远程机的通信等。
CM模块中嵌入式芯片是一个嵌入式系统的核心,是整个系统功能的实现及稳定性的保证。它采用基于Atmel公司ARM920T(核)微控制器的16/32位RISC处理器AT91RM9200工业级开发板。ARM9处理器提供1.1MIPS/MHz的哈佛结构,具有全性能的MMU和MPU,支持WindowsCE、Linux、PalmOS等多种主流嵌入式操作系统或实时操作系统;具备5级整数流水线特性,指令执行效率高。外围电路包括64M的同步动态存储器SDRAM、8M的外部存储器NORFLASH,一个调试串口,两个三线的RS232串口(通过跳线与RS485进行转换),以及DM9161E以太网芯片(100Mbit/s的网络速度)等,可供平台功能进一步开发,而不须作大的变动。其具体结构如图2所示。
本文基于以上的硬件,对CM模块和PC机端进行软件设计,实现CM端与TM模块和PC的通信以及PC机端与CM模块的通信这两大功能,如图1虚线所框部分。
2CM模块端的通信软件设计与实现
软件的设计主要是模块之间数据的交换及处理,CM模块端即ARM上的软件设计包括两大部分。一是与TM模块的通信,采用传统系统中的现场总线RS485进行串口数据通信。接收单片机的检测、报警、等数据,并把接收到的PC机控制命令传送至TM模块。另一部分是与PC机的通信,通过Socket的UDP协议进行数据传输,两者之间形成C/S结构模式。应用以太网通信(基于TCP/IP)的通信方式进行数据传输共享,实现交互操作。系统通信流向如图3所示。
CM模块端与单片机和PC机两方数据通信采用多进程方式来实现,与单片机串口通信和PC机的套接口通信分别在CMTM和CMPC这两个进程中完成,两进程之间通过共享内存和信号量实现数据的共享及进程间的同步。
2.1串口通信(CMTM进程)
利用串口进行文件传输首先要打开和配置串口,按要求设置好速度和传送方式之类的参数;然后,选择一定的传送协议和方式,设置好传送双方的同步方式;接着就可以按照选择的传送协议和同步方式来传送数据或文件了。Linux平台下串口属性参数全部反映在一个structtermios结构体中,其结构如下:
structtermios{
tcflag_tc_iflag;//输入模式标志
tcflag_tc_oflag;//输出模式标志
tcflag_tc_cflag//控制模式标志
tcflag_tc_lflag;//线路选项
cc_tc_line;//行控制
cc_tc_cc[NCCS];//控制字符
};
其中含有大约50个标志位,这些标志位在头文件termios.h中定义。串口编程的关键是对串口的配置,为了编程方便,Linux系统还包含了一系列针对termios结构的设置函数,用来完成获取和设置串口属性[2]。Linux下串口设置很多,本设计主要的设置有如下几方面:
①c_cflag的基本参数设置,如波特率(Baudrate)、数据位(Bits)、停止位(Stops)及校验方式(Parity)等。配置过程如下:
struettermiosoptions;//termios的变量声明
optionsc_cflag|=B9600;//波特率为9600bps
optionsc_cflag|=CS8;//采用8个数据位
optionsc_cflag|=~CSTOPB;//使用1个停止位
optionsc_cflag=~PARENB;//取消校验位
②输入输出方式设定。根据是否对传输的数据进行预处理,可分为预处理方式(Canonical)和原始(Raw)方式。预处理方式常用于Modem通信。如果只是串口传输数据,而不需要串口来处理,则使用原始模式(RawMode)方式来通讯,本文采用原始输入方式:
options.c_lflag=~(ICANON|ECHO|ECH-OE|ISIG);//RawModeforlnput
options.c_oflag=~OPOST;//RawModeforOutput
③控制字选项
c_cc包含一些控制字的定义和读取等待定时器(ReadTimeoutTimer)配置选项。其中,VSTART和VSTOP参数设定软件流控制的起始和停止字符(默认是11H和13H)。VMIN和VTIME参数用来控制系统的读操作,VMIN设置每次读取的最少字节数,VTIME设置读取操作的等待时间(以0.1s为单位)。这2个参数的具体值影响了读操作的行为。本文无软件流的控制。所以设置如下:
Optionsc_cc[VTIME]=150;
Optionsc_cc[VMIN]=0;
除了上述的配置,传送协议和方式的设定也是很关键的一环。结合实际情况,基于modbus协议的RTU传输模式作了相应的小变动。由于变电站蓄电池数目较多,实现通信信息的识别,在发送包含自检信息的字节前,先发送4个字节用于接收端的判断,然后是帧长度(1byte)、目标地址(1byte)、源地址(1byte)、命令字(1byte)、标志数据(2byte)、数据(n*3byte),最后是帧数据的CRC校验值(2byte)。这里通讯数据采用不定长帧格式,便于后序功能的扩展。串口配置、通讯协议和方式规定完成后,便可用read()和write()等函数进行数据的接收和发送了。ARM与单片机串口数据交换实现在CMTM进程中完成,其主流程图如图4(a)所示。进程TMCM通过串口监听并接收单片机发送的检测信号以及发送PC机的操作命令,负责将TM模块发来的串口数据接收后存人相应的反馈数据共享内存SHM_TMCM中去,同时负责检查共享内存SHM_CMTM中是否有新的控制或操作命令到来,若有则将其转发到串口。试运行时编写相关的串口软件,手动和自动对CM模块发送和接收数据,此进程能准确实时地与软件进行数据交换,通信效果良好。
2.2套接口通信(CMPC进程)
ARM与PC机的通信采用Socket套接口实现跨平台的C/S(Client/Server)模式,即客户应用层和服务层。客户应用层提供的是管理人员与工业设备的交互通信界面,而服务层则提供管理人员所需的数据采集、存储和处理。这两层通过计算机网络相互连接。
一个套接口为三个因素所确定:协议族、套接口类型和协议。协议族说明套接口交互所使用的网络媒介,它包括AF_UNIX(UNIX域协议)、AF_INET(互联网协议)、AFISO(1SO标准协议)、AFNS(Xerox网络系统协议);套接口类型表明交流数据的方式,常用的Socket接口有两种:流式接口(SOCKET-STREAM)和数据报接口(SOCKET-DGRAM)。协议是所创建的套接口类型的低层传输机制,一般由套接口协议族和套接口类型决定[3]。SOCKET-STREAM是面向连接的接口,底层协议为TCP协议,用于面向连接的应用。本文采用的是数据报接口UDP通信,Socket的UDP通信是一种无连接通信方式,比TCP/IP更灵活、方便,只要CM模块IP地址及端口固定后,客户端PC的IP及端口可自由设定。Linux下同样具备一系列的套接字接口函数,服务器端程序首先由socket()函数创建一个套接字,并用bind()函数将套接字与服务器的公认地址绑定在一起;然后就可用recvfrom()、sendto()函数进行通信了。
ARM与PC机的通信服务程序主要由CMPC进程实现,其主流程图如图4(b)。其主要功能是负责接收PC发来的数据或命令,若收到的是数据索取命令则从反馈数据共享内存SHM_TMCM中的相应单元取出数据通过SOCKET返回给PC;若收到的是控制或参数设置等命令则将其暂存人命令共享内存SHM_CMTM中去,以待TMCM进程转发给TM模块。试运行中,CM模块能实时准确地与PC机进行数据交
变电站蓄电池是变电站电力电源断电后的最后一道保护屏障,其运行状态关系到供电系统的安全性,因而对变电站蓄电池的监测也是保障电力系统稳定运行的重要措施之一。本文基于ARM嵌入式实现对蓄电池实时、智能的远程数据测量与控制。
嵌入式微处理器有许多种流行的处理器核,其中ARM以其小体积、高性能、低成本、低功耗等特点而得到广泛的应用,它已成为移动通信、手持设备、多媒体数字消费等嵌入式解决方案的RISC标准。根据嵌入式处理器类型还需配备一定的嵌入式操作系统。国外操作系统已经从简单走向成熟,有代表性的主要有VxWorks、WindowsCE、Linux等。其中Linux操作系统具有开放的源代码、良好的用户界面、丰富的网络功能、可靠的系统安全、标准丰富的API、良好的可移植等优点,受到全球计算机人员的关注。本文以ARM9系列处理器为核心的工业级开发板及Linux操作系统为基础平台进行开发,所设计的蓄电池监测平台具有实时性强、稳定性高、可互操作性等优点,而且具有良好的可扩充性,为进一步开发与研究提供了便利。
1远程监测系统结构
远程监测系统的硬件一般由现场量测终端、传输通道和远程计算机三大部分。测量终端的任务就是采集被监测对象的测量和状态量等数据,对数据作简单的处理后按通讯规约传送给计算机,并接收上位机下达的命令,对现场设备进行控制。传输通道是指信号传送时所经过的通道,即传输媒体[1]。本文设计所基于的硬件结构包括TM模块、CM模块和PC模块三个部分,如图1所示。TM模块即数据采集与控制输出板,采用C8051单片机及ADC模/数转换器等外围器件,对现场数据采集并对数据作简单的处理。PC模块即远程计算机,作为远程监测及控制平台。CM模块即ARM开发板采用ARM9处理器,集中处理数据和与远程机的通信等。
CM模块中嵌入式芯片是一个嵌入式系统的核心,是整个系统功能的实现及稳定性的保证。它采用基于Atmel公司ARM920T(核)微控制器的16/32位RISC处理器AT91RM9200工业级开发板。ARM9处理器提供1.1MIPS/MHz的哈佛结构,具有全性能的MMU和MPU,支持WindowsCE、Linux、PalmOS等多种主流嵌入式操作系统或实时操作系统;具备5级整数流水线特性,指令执行效率高。外围电路包括64M的同步动态存储器SDRAM、8M的外部存储器NORFLASH,一个调试串口,两个三线的RS232串口(通过跳线与RS485进行转换),以及DM9161E以太网芯片(100Mbit/s的网络速度)等,可供平台功能进一步开发,而不须作大的变动。其具体结构如图2所示。
本文基于以上的硬件,对CM模块和PC机端进行软件设计,实现CM端与TM模块和PC的通信以及PC机端与CM模块的通信这两大功能,如图1虚线所框部分。
2CM模块端的通信软件设计与实现
软件的设计主要是模块之间数据的交换及处理,CM模块端即ARM上的软件设计包括两大部分。一是与TM模块的通信,采用传统系统中的现场总线RS485进行串口数据通信。接收单片机的检测、报警、等数据,并把接收到的PC机控制命令传送至TM模块。另一部分是与PC机的通信,通过Socket的UDP协议进行数据传输,两者之间形成C/S结构模式。应用以太网通信(基于TCP/IP)的通信方式进行数据传输共享,实现交互操作。系统通信流向如图3所示。
CM模块端与单片机和PC机两方数据通信采用多进程方式来实现,与单片机串口通信和PC机的套接口通信分别在CMTM和CMPC这两个进程中完成,两进程之间通过共享内存和信号量实现数据的共享及进程间的同步。
2.1串口通信(CMTM进程)
利用串口进行文件传输首先要打开和配置串口,按要求设置好速度和传送方式之类的参数;然后,选择一定的传送协议和方式,设置好传送双方的同步方式;接着就可以按照选择的传送协议和同步方式来传送数据或文件了。Linux平台下串口属性参数全部反映在一个structtermios结构体中,其结构如下:
structtermios{
tcflag_tc_iflag;//输入模式标志
tcflag_tc_oflag;//输出模式标志
tcflag_tc_cflag//控制模式标志
tcflag_tc_lflag;//线路选项
cc_tc_line;//行控制
cc_tc_cc[NCCS];//控制字符
};
其中含有大约50个标志位,这些标志位在头文件termios.h中定义。串口编程的关键是对串口的配置,为了编程方便,Linux系统还包含了一系列针对termios结构的设置函数,用来完成获取和设置串口属性[2]。Linux下串口设置很多,本设计主要的设置有如下几方面:
①c_cflag的基本参数设置,如波特率(Baudrate)、数据位(Bits)、停止位(Stops)及校验方式(Parity)等。配置过程如下:
struettermiosoptions;//termios的变量声明
optionsc_cflag|=B9600;//波特率为9600bps
optionsc_cflag|=CS8;//采用8个数据位
optionsc_cflag|=~CSTOPB;//使用1个停止位
optionsc_cflag=~PARENB;//取消校验位
②输入输出方式设定。根据是否对传输的数据进行预处理,可分为预处理方式(Canonical)和原始(Raw)方式。预处理方式常用于Modem通信。如果只是串口传输数据,而不需要串口来处理,则使用原始模式(RawMode)方式来通讯,本文采用原始输入方式:
options.c_lflag=~(ICANON|ECHO|ECH-OE|ISIG);//RawModeforlnput
options.c_oflag=~OPOST;//RawModeforOutput
③控制字选项
c_cc包含一些控制字的定义和读取等待定时器(ReadTimeoutTimer)配置选项。其中,VSTART和VSTOP参数设定软件流控制的起始和停止字符(默认是11H和13H)。VMIN和VTIME参数用来控制系统的读操作,VMIN设置每次读取的最少字节数,VTIME设置读取操作的等待时间(以0.1s为单位)。这2个参数的具体值影响了读操作的行为。本文无软件流的控制。所以设置如下:
Optionsc_cc[VTIME]=150;
Optionsc_cc[VMIN]=0;
除了上述的配置,传送协议和方式的设定也是很关键的一环。结合实际情况,基于modbus协议的RTU传输模式作了相应的小变动。由于变电站蓄电池数目较多,实现通信信息的识别,在发送包含自检信息的字节前,先发送4个字节用于接收端的判断,然后是帧长度(1byte)、目标地址(1byte)、源地址(1byte)、命令字(1byte)、标志数据(2byte)、数据(n*3byte),最后是帧数据的CRC校验值(2byte)。这里通讯数据采用不定长帧格式,便于后序功能的扩展。串口配置、通讯协议和方式规定完成后,便可用read()和write()等函数进行数据的接收和发送了。ARM与单片机串口数据交换实现在CMTM进程中完成,其主流程图如图4(a)所示。进程TMCM通过串口监听并接收单片机发送的检测信号以及发送PC机的操作命令,负责将TM模块发来的串口数据接收后存人相应的反馈数据共享内存SHM_TMCM中去,同时负责检查共享内存SHM_CMTM中是否有新的控制或操作命令到来,若有则将其转发到串口。试运行时编写相关的串口软件,手动和自动对CM模块发送和接收数据,此进程能准确实时地与软件进行数据交换,通信效果良好。
2.2套接口通信(CMPC进程)
ARM与PC机的通信采用Socket套接口实现跨平台的C/S(Client/Server)模式,即客户应用层和服务层。客户应用层提供的是管理人员与工业设备的交互通信界面,而服务层则提供管理人员所需的数据采集、存储和处理。这两层通过计算机网络相互连接。
一个套接口为三个因素所确定:协议族、套接口类型和协议。协议族说明套接口交互所使用的网络媒介,它包括AF_UNIX(UNIX域协议)、AF_INET(互联网协议)、AFISO(1SO标准协议)、AFNS(Xerox网络系统协议);套接口类型表明交流数据的方式,常用的Socket接口有两种:流式接口(SOCKET-STREAM)和数据报接口(SOCKET-DGRAM)。协议是所创建的套接口类型的低层传输机制,一般由套接口协议族和套接口类型决定[3]。SOCKET-STREAM是面向连接的接口,底层协议为TCP协议,用于面向连接的应用。本文采用的是数据报接口UDP通信,Socket的UDP通信是一种无连接通信方式,比TCP/IP更灵活、方便,只要CM模块IP地址及端口固定后,客户端PC的IP及端口可自由设定。Linux下同样具备一系列的套接字接口函数,服务器端程序首先由socket()函数创建一个套接字,并用bind()函数将套接字与服务器的公认地址绑定在一起;然后就可用recvfrom()、sendto()函数进行通信了。
ARM与PC机的通信服务程序主要由CMPC进程实现,其主流程图如图4(b)。其主要功能是负责接收PC发来的数据或命令,若收到的是数据索取命令则从反馈数据共享内存SHM_TMCM中的相应单元取出数据通过SOCKET返回给PC;若收到的是控制或参数设置等命令则将其暂存人命令共享内存SHM_CMTM中去,以待TMCM进程转发给TM模块。试运行中,CM模块能实时准确地与PC机进行数据交
- 低功耗嵌入式实现的方方面面(04-30)
- 功率与控制的结合使LED照明方案灵活、简便(10-20)
- S3C2440A嵌入式手持终端电源管理系统设计(01-11)
- 几种实用的低电压冗余电源方案设计(01-26)
- 基于先验预知的动态电源管理技术(03-28)
- 基于CAN通信的电源监控系统的设计(04-06)