|
摘 要:設汁了基于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所示。

涉及的主要過程描述如下: (1)首先調用系統函數socket(int family,int type,int protoco1)創建TCP套接字。系統選用流式套接字SOCK—STREAM,它提供了一種面向連接的服務。 (2)bind將socket與本機上的一個端口相關聯,可以在該端口監聽服務請求,listen()函數使socket處于被動的監聽模式,并為該socket建立一個輸入數據隊列,將到達的服務請求保存在此隊列中,直到程序處理它們。 (3)accept()函數讓服務器接收客戶的連接請求。在建立好輸入隊列后,服務器就調用ac—cept()函數,然后睡眠并等待客戶的連接請求。 (4)初次建立連接,需要完成電表記錄時間與上位機時間的同步。具體實現方法是:以PXA270微處理器為核心的終端,通過sendto()給上位機發送事先約定好的保存在S指向的數組中的字符串,上位機在收到字符串后給終端發送時間,終端接收時間,調用函數mktime()和set—timeo~ay()完成時間同步。 (5)調用open()函數打開保存在終端Flash的電表數據記錄文件,并利用sendto()函數進行發送,每次發送完成都調用remove()函數將已經發送的記錄數據清空。 (6)關閉socket套接字close(sock~)。
2.3 上位機監測端 利用C精言通過Socket建立TCP連接,上位機在收到監測終端初次連接時事先約定好的保存在S指向的數組中的字符串后,發送系統時問給終端,進行時間同步,應用SQL Se~er 2000建立數據庫,之后不斷間隔性接收終端發送來的監測數據并存人數據庫,供分析使用。編寫圖形化界面,顯示最新的監測數據。上位機編程流程圖如圖3所示。實時監測圖形化界面如圖4所示。


3 結 語 該系統實現了智能電表、空調參數多數據量的監測,主要完成了嵌入式操作系統ARM·Linu的移植,通過Modbus協議獲得終端監測數據,并保存在嵌入式微處理器Flash中,實現數據文件的發送以及上位機對數據的處理顯示。經試驗,系統最終正常運行。
與傳統的數據監i貝0系統相比,該系統具有更好的安全性和實時性,同時硬件的體積更小,功耗更低,擴展性更強。對系統稍加修改,可以同時實現I//O設備、UPS等更多數據量的實時監測,因此具有很強的實用意義。
|