||
摘 要:设汁了基于ARM的智能电表和空调系统参数的多数据监测系统。系统由硬件和软件两部分组成,硬件采用博创公司的嵌入式微控制器PXA270平台,软件使用了Modbus协议读取智能电表和空调端监测数据,上位机利用Linux Socket『舣]络编程和c#编程实现监测。该系统比传统的数据{ 测系统具有更好的安全性和实时性,同时硬件的体积更小,功耗更低,扩展性更慢。
0 引 言
在实际工业控制应用中,经常需要对现场的智能电表、空调等多种设备进行监测,通过采集相应设备的运行参数随时了解、跟踪设备运行状态 ,进而进行分析和诊断。结合具体项目,本文设计了一种基于嵌入式系统ARM 的多数据监测系统,系统以嵌入式Linux和博创公司的嵌入式微控制器PXA270为核心平台,通过将RS一485采集的数据转换成符合RS一232标准的数据,保存在嵌入式微处理器的Flash中,经过网络传输将数据传给E位机,完成对电表、空调的监测任务。整个系统建立在嵌入式结构上,具有更好的实时性和稳定性,同时硬件的体积更小,功耗更低,扩展性更强。
1 系统硬件设计
1.1 系统总体设计方案
系统的总体设计思想是通过RS一232/485转换器将RS一485采集的电表参数、空调参数转换成符合RS一232标准的数据,保存在嵌入式微处理器Flash中,经Linux Socket网络编程,采用TCP协议和上位机建立网络连接,将数据文件发送给上位机,上位机运用C#语言编程实现监测数据的实时显示,同时建立数据库保存监测数据,从而完成对电表、空调数据的监测任务。其中Rs一485对电表、空调参数的读取是通过Modbus协议发送相关的指令实现的。
1.2 系统硬件电路
该设计主要硬件电路包括数据采集模块、PXA270处理器、外围接口电路、电源及复位电路等几个部分。系统总体结构如图1所示。
ARM 处理系统采用博创公司的Xscale PXA270处理器,其主频为520 MHz,加入了Intel SpeedStep动态电源管理技术,在保证CPU性能的情况下可最大限度地降低设备功耗,采用网络接口实现了数据信息的网络化管理。操作系统采用Linux,使用的是Linux 2.6.9内核。系统的根文件采用针对Flash无缓冲机制的JFFS2文件系统。
为了利用PC上现有的RS一232接口,通常使用RS一232/485转换器。该转换器一般通过逻辑门电路控制RxD、TxD和GND信号,自动对半双工的RS一485串口进行控制。通过该转换器,就可以像开发通用的RS一232串口一样来快速开发基于RS一485串口的通信软件。
2 系统软件设计
软件部分包括系统引导驱动程序otLoad—er、嵌入式操作系统ARM—Linux的移植、文件系统、用户应用程序4个部分,其中核心部分是用户应用程序的编写和调试。用户应用程序包括通过Modbus协议对采集得到的电表参数、空调参数的读取和保存,Linux Socket编程实现文件的发送,以及上位机监测端图形化界面的C}≠语言编程实现。
2.1 采集数据的读取和保存
该部分实现电表和空调数据的读取,并保存在嵌入式微处理器Flash中。数据的读取通过Modbus协议向电表和空调发送相关指令获得,得到的数据通过调用fwrite()函数写入定义在嵌入式微处理器Flash的文件中。主要包括串口属性设置,CRC(Cyclic Redundancy Check)校验码实现方法,采用Modbus协议获得需要的数据,并写入嵌入式微处理器Flash的文件中。
2.1.1 设置串口属性
串口设置主要是设置struct termios结构体成员值。通过对Cwcflag的赋值,可以设置波特率、字符大小、数据位、停止位、奇偶校验位和硬件流控等。
系统对于串口属性的设置如下:
(1)打开串El fd= open(“/dev/ttySO”,0一RDWR I O~ NOCTFY I O— NDELAY)。
(2)为安全起见和以后调试程序方便,先保存原先串口的配置:tcgetattr(fd,&newtio)。
(3)设置波特率为9 600 baud/s。一般情况下,用户需要将输入输出函数的波特率设置成相同。函数在成功时返回“0”,失败时返回“一1”。
(4)设置字符大小。没有现成可用函数,需要位掩码。一般先去除数据位中的位掩码,再重新按要求设置。
(5)设置奇偶校验位。先激活c—cflag中的校验位使能标志PARENB和判断是否要进行偶校验,同时还要激活c_iflag中的奇偶校验使能。
(6)设置停止位。通过激活c_cflag中的cS.TOPB实现。
(7)设置最少字符和等待时间。在对接收字符和等待时间没有特殊要求的情况下,可以将其设置为“0”。
(8) 激活配置。利用tcsetattr(fd,TC—SANOW,&newtio)函数。这里newtio是termios类型的变量,SANOW 表示改变的配置立即生效。
2.1.2 CRC校验码的实现方法
CRC利用生成多项式产生校验位进行编码。CRC运算时,首先将一个16 bit的寄存器预置为全1,然后连续把数据帧中的每个字节中的8 bit与寄存器的当前值进行运算,仅每个字节的8个数据位参与生成CRC,起始位和终止位以及可能使用的奇偶位都不影响CRC。在生成CRC时,每个字节的8 bit与寄存器中的内容进行“异或”运算,然后将结果向低位移位,高位则用“0”补充,最低位(LSB)移出并检测。如果是1,该寄存器就与一个预设固定值(0A001H)进行一次“异或”运算;如果最低位为0,不作任何处理。上述处理重复进行,直到执行完8次移位操作。当最后一位(第8位)移完后,下一个8 bit与寄存器的当前值进行异或运算,同样进行上述的另一个8次移位异或操作。当数据帧中的所有字节都作了处理,生成的最终值为CRC值。
2.1.3 通过RS一485通信采集数据
系统采用Modbus.RTU ,通信应用格式如表1所示。Modbus协议详细定义了数据序列和校验码,这些都是特定数据交换的必要内容。
以电表数据的监测进行说明。该系统需要获得与仪表工作相关的系统参数 ,包括PT 低字(0104H)、FF 高字(0105H)、PT2(0106H)、CT(0107H)、CT (0108H)等;监测参数,包括绝对值和有功电能E。 (010CH与OIDH)、绝对值和无功电能E l(010EH与010FH)、A相电压U。(0110H)、B相电压u2(0111H)、C相电压u3(0112H)、线电压U 2(0113H)、线电压U2(O114H)、线电压u (0115H)、相(线)电流I(0116H)、相(线)电流I (0117H)、相(线)电流I(0118H)、相电压均值U (0119H)、线电压均值U (011AH)、电流均值I (011BH)、系统有功功率P(011CH)、系统无功功率Q(011DH)、系统视在功率S(011EH)。按照Modbus.RTU协议通信应用格式,采用03号功能码(获得一个或多个寄存器的当前二进制值),可定义如下数组分别读取上面两组对应数据:
unsigned char txBufl[]={0xl1,0x03,OxO1,0x04,0x00,0x05,0x16,0xa0};
unsigned char txBuf2[]={0xl1,0x03,0x01,0x0c,0x00,0x19,0xf,0xff};
2.1.4 采集数据的存储
该系统对监测数据进行循环采集,并将数据实时保存。通过调用定义的子函数void sent—re.ceive(char txBuf[],char Bum)读取数据,打开建立在Flash中的record文件,通过fwrite函数将读取的数据写入文件中。在保存数据的同时需要将读取数据的时间localtime(&timep)一起记录。
2.2 数据文件的发送
将保存在微处理器Flash中的数据文件通过socket编程建立TCP连接 I,发送给上位机。数据文件发送流程图如图2所示。
涉及的主要过程描述如下:
2.3 上位机监测端
利用C精言通过Socket建立TCP连接,上位机在收到监测终端初次连接时事先约定好的保存在S指向的数组中的字符串后,发送系统时问给终端,进行时间同步,应用SQL Se~er 2000建立数据库,之后不断间隔性接收终端发送来的监测数据并存人数据库,供分析使用。编写图形化界面,显示最新的监测数据。上位机编程流程图如图3所示。实时监测图形化界面如图4所示。
3 结 语
该系统实现了智能电表、空调参数多数据量的监测,主要完成了嵌入式操作系统ARM·Linu的移植,通过Modbus协议获得终端监测数据,并保存在嵌入式微处理器Flash中,实现数据文件的发送以及上位机对数据的处理显示。经试验,系统最终正常运行。
与传统的数据监i贝0系统相比,该系统具有更好的安全性和实时性,同时硬件的体积更小,功耗更低,扩展性更强。对系统稍加修改,可以同时实现I//O设备、UPS等更多数据量的实时监测,因此具有很强的实用意义。
更多内容请登陆:javascript:;