1、系統總體設計
1.1 硬件構成
系統采用1片三星公司推出的基于ARM7TDMI精簡指令系統的32位高速處理器S3C44B0X作為嵌入式微處理器,擴展了一個RS485串口、兩個RS232串口和一個以太網口。如圖1所示,嵌入式微處理器通過擴展的RS485串口與西門子S7-200 PLC進行通信,一個RS232口通過調制解調器連接到公眾電話網,實現串行通信,擴展的以太網口則將整個嵌入式系統接入Internet,拓展了PLC的通信方式。考慮到與現存本地監控系統的兼容,在S7-200的串口上可同時并接西門子的文本顯示器TD200,三者組成一個PPI令牌環網絡。
圖1 系統結構和連接示意圖
1.2 軟件總體設計
本系統采用μClinux嵌入式操作系統作為應用軟件的運行平臺。μClinux系統是近年迅速發展起來的一種專門用于微控制領域的嵌入式操作系統,內核要比原Linux 2.0內核小得多(內核小于512KB,內核加上工具小于900KB),但保留了Linux操作系統的主要優點:穩定性,優異的網絡能力以及優秀的文件系統支持,同時提供通用的Linux AP1支持完整的TCP/IP協議棧和大量其它的網絡協議。
中央空調遠程測控終端的功能主要是動態地采集中央空調的現場運行參數并將這些參數實時地發送給位于遠程的監控中心,并且具備提供歷史數據、故障報警和某些控制功能。為了提高系統的運行效率, 利用μClinux對多線程機制的支持,將遠程終端的軟件系統分為四個并發的線程實現。分別為:數據采集線程、數據存儲線程、數據發送線程和故障報警線程。軟件系統結構如圖2所示。
圖2 軟件系統總體框架
為了實現各個線程之間的通信,設置一個數組作為共享區域。其中,數據采集線程主要是嵌入式測控終端與PLC的通信過程,所有的數據都從PLC的寄存器中讀取,并存儲在測控終端的內存共享區域中。在本系統中,根據所監控的中央空調的不同型號,由數據字典文件讀入所需采集的參數地址,采用循環方式將各個參數的實時數值從PLC中采集,再一并存人數據共享區。數據存儲線程在本地創建文件,并將數據共享區中的參數值每隔一定時間保存在FLASH中,使之作為分析一段時間內中央空調運行狀況的歷史數據,為實現專家診斷系統提供數據源。基于μClinux對TCP/IP協議棧的完整封裝,實時數據發送和故障報警線程從共享存儲區中讀取數據后,利用socket通信機制,將實時數據和故障報警信息從本地發送到遠程的主控中心,實現在不同地點對中央空調運行狀況的實時監測。
由于西門子S7—200系列PLC通常配合西門子TD200文本顯示器一同使用以構成本地監控,與本系統共用一條總線時沖突不可避免。本系統在數據采集的基礎上根據PPI協議和PROFIBUS規定的令牌環協議,實現了主站之間的令牌傳遞功能,保證了令牌環網絡的正常運轉,使TD200與本系統組成的雙主站網絡通過對令牌的占有來實現各自的通信功能,互不干擾。
2、軟件實現
2.1 通信方式和通信協議的選擇
S7—200 CPU支持多種通信協議,為用戶實現多種不同的網絡配置提供了便利,包括:點對點(Point-to-Point)接口協議(PPI)、多點(Multi~Point)接El協議(MP1)和Profibus協議。這些協議是非同步的字符協議,有1位起始位、8位數據位、1位偶校驗位和1位停止位。通信結構依賴于特定的起始字符和停止字符、源和目的站地址、報文長度和數據校驗和。
目前通常采用自由口通信模式控制S7—200 CPU的通訊端El實現上下位機通信。用戶可以在自由El模式下使用自定義的通信協議來實現PLC與多種類型智能設備的通信。但由于需要對PLC現有程序進行修改,對于不熟悉PLC編程語言并要在短時間內實現對西門子PLC 的監控功能的軟件開發者來說,這種修改存在一定的風險。
本系統采用PPI協議作為嵌入式系統與S7—200 CPU之間的通信協議,由于C語言的高效性,采用C語言進行編程實現通信,無需對PLC本身的程序進行修改,保證了工業控制系統的安全和穩定。
2.2 PPI協議數據格式
PPI協議是一種主一從通信協議:通信的設備分為主站和從站。PLC默認為從站,嵌入式系統和TD200文本顯示器作為主站。主站設備發送請求到從站設備,從站設備響應,從站不主動發起通信,只是等待主站的數據請求命令和對該命令作出響應。PPI協議并不限制與任意一個從站通信的主站數量,但是在一個網絡中,主站的個數不能超過32。協議的數據格式如圖3所示,圖3(a)是PPI主站發送的命令幀和從站發送的數據幀格式,圖3(b)是PPI主站發送給從站的確認幀格式。
圖3 協議數據幀格式
以字節為單位,每個字節的含義如下:
SD2,SD1:(Start Delimiter)開始定界符(SD2=68H,SDI=10H)
LE.LER:(Frame Length)報文數據長度
DA:(Destination Address)目的地址
SA:(Source Address)源地址
FC:(Function Code)方式字(5C、6C、7C)
Data Unit:數據單元
FCS:(Frame Check Sequence)校驗碼
ED:(End Delimiter)結束分界符(16H)
在PPI網絡中,S7—200 PLC的默認站地址是02H,而作為主站的嵌入式系統的站地址規定為00H。加上TD200后構成的多主站系統中,TD200做主站,站地址是01H。三個站之間的通信遵循令牌環網絡規則,令牌在主站之間輪流傳遞,持有令牌的主站有總線的控制權,可以收發數據,從站不具有令牌持有權。
2.3 數據采集程序分析
數據采集線程的主要流程如圖4所示。其中,測控終端與PLC的通信可以看作是主站與從站之間的兩次發送請求和應答過程。
圖4 通信程序流程圖
以作為主站的嵌入式系統向作為從站的PLC發起一個讀取數據值的通信過程為例,該數據是存儲在v寄存器、起始地址為136的一個字。
首先,主站以目的地址02H、源地址00H生成一個數據請求幀,對于讀取請求,方式字FC為7CH。生成的數據請求幀為(以十六進制表示): 68H 1BH 1BH 68H 2H 0H 6CH 32H 1H 0H 0H 6H 6H 0H EH 0H 0H 4H 1H 12H AH 10H 4H 0H 1H 0H 1H 84H 0H 4H 40H BAH 16H。主站發出這一請求并等待1秒鐘之后讀取串口,如果PLC正確響應,會發送一個確認字節E5H,主站讀取到這個字節后,就在規定時間間隔內發送數據請求確認幀到串口。確認幀內容為:10H 02H 00H 5CH 5EH 16H。PLC收到這個確認幀后,就讀取數據請求幀中所指定得寄存器值,并按照PPI協議規定得發送數據幀格式(圖3(a))打包,將數據發送出去。嵌入式主站接收到這個含有所需請求參數值的數據幀,就根據協議的規定將數據解析出來,并存儲在本地內存共享區域中,從而完成一次數據采集和存儲過程。
數據采集線程的主要代碼如下:
Int data_collect (struct acinfo temp)
{
delay.tv_sec=0;
delay.tv_nsec=sleep;
int ret;
unsigned char ack; //打開串口1,設置波特率9600波特
open_comport (19600) ; //向PLC發送數據讀取指令幀
white_com (temp);
nanosleep (&delay, NULL); //讀取PLC響應幀
ack=read_act();… //對PLC發送確認幀
poll_data();
nanosleep(&delay,NULL); //從串口讀取來自PLC的數據
ret=read_com(); //恢復串口設置,關閉串口
com_reset();
com_close();
return();
}
PLC 的響應有一定延遲, 所以需要在程序中調用nanosleep(&delay,NULL)函數讓線程暫停一段時間再讀取串El。為了保證令牌環網絡的正常運轉,受令牌占有時間的限制,在波特率為9600時,PLC 與主站的一次數據通信時間不應該超過3s,根據所采集的參數規模計算得出最小響應和傳輸時間間隔在0.1s左右。
3、結束語
本測控終端系統經過實際運行,驗證了其有效性和實用性。采用嵌入式系統與西門子PLC利用PPI協議進行通信的方法,簡化了原本復雜的通信功能實現過程,為對PLC的實時監控提供了一種性價比很高的實現方式。通過嵌入式系統擴展以太網1:3,為原本只有通過串口才能與外界通信的PLC提供了以太網的通信方式,提高了通信效率。基于此技術實現的嵌入式系統與PLC相結合的遠程測控終端為分布式實時監控系統的實現提供了一種低價又便捷有效的方式。










