摘要:提出了一種面向工業(yè)現(xiàn)場信號采集和對現(xiàn)場設備控制的新型通用一體化RTU的設計方案。介紹了基于ARM9處理器并采用μC/OS-II實時操作系統(tǒng)的RTU系統(tǒng)設計方法,同時對數(shù)據(jù)傳輸采用的Modbusi通信協(xié)議和硬件功能模塊的設計進行了描述。硬件功能模塊主要包括8路數(shù)字量輸入、8路數(shù)字量輸出、8路模擬量輸入、RS232通信、RS485通信和以太網(wǎng)通信等模塊。文中還提出了從站RTU的軟件設計方法。與普通RTU相比,該方法具有更大的存儲容量,更強的計算功能,更簡便的編程與開發(fā)能力和強大的通信組網(wǎng)能力。
關(guān)健詞:信號采集;現(xiàn)場控制;RTU;μC/OS-II;Modbus
0 引言
RTU(Remote Tenninal unit)是一種遠端測控單元裝置,負責對現(xiàn)場信號、工業(yè)設備的監(jiān)測和控制。與常用的可編程控制器PLC相比,RTU通常具有優(yōu)良的通訊能力和更大的功能,使得RTU產(chǎn)品在SCADA系統(tǒng)中得列了大量的應用。RTU應用領(lǐng)域?qū)拸V、包括電力系統(tǒng)、給水系統(tǒng)、石油、化工等諸多領(lǐng)域?;贏RM處理器設計的RTU,硬件上具有成本低、體積小、耗電省、處理能力強等優(yōu)點,軟件上采用μC/OS-II操作系統(tǒng),有許多優(yōu)秀的應用程序可以利用。本文將介紹一種基于ARM9和μC/OS-II的RTU硬件、軟件設計方法。
1 RTU系統(tǒng)設計
基于ARM9的新型RTU系統(tǒng)結(jié)構(gòu)如圖1所示。該系統(tǒng)以S3C2440A為主控制器,主要包括數(shù)字量輸入模塊、數(shù)字量輸出模塊、模擬量輸入模塊、RS232通信模塊、RS485通信模塊、以太網(wǎng)通信模塊、存儲器模塊、E2PROM和測溫模塊等等。軟件采用μC/OS-Ⅱ?qū)崟r多任務操作系統(tǒng),數(shù)據(jù)傳輸采用Modbus通信協(xié)議,設計了TCP\IP、RS232、RS485等多種通信方式。
為使該RTU適用于復雜苛刻的環(huán)境、滿足工業(yè)控制的指標和需求,在各個模塊與MCU之間加上適當?shù)母綦x保護器件,同時給各個模塊和MCU供電的部分電源模塊也要選取隔離型的DC-DC電源,還有在主電源端口和通信端口處加上適當?shù)姆览妆Wo電路和ESD保護電路,使得該RTU各個模塊之間基本上互不干擾,更能適用于惡劣的環(huán)境。
1.1 主控制器的選擇
RTU的處理芯片采用S3C2440A,S3C2440A的內(nèi)核為ARM920T,并且片內(nèi)集成了RS232、RS485、SPI、IIC、通用I/O口等外圍設備接口,并具有低價格、低功耗、高性能等特點,能夠滿足多種通信協(xié)議,如Modbus等通信協(xié)議。
1.2 數(shù)字量輸入輸出模塊設計
該RTU具有8路數(shù)字量輸入和8路數(shù)字量輸出。單路數(shù)字量輸入和數(shù)字量輸出原理圖如圖2所示。數(shù)字量輸入的直流有效電壓為10~48 V,具有光耦隔離,隔離電壓的有效值為2 500 V。數(shù)字量輸出的直流有效電壓為10~36V,也具有光耦隔離,隔離電壓的有效值為2 500V。
對于數(shù)字量輸入,可在輸入端加入適當?shù)臑V波電容、自恢復保險絲、壓敏電阻、整流二極管和電阻等元件組成的電路,然后和光耦隔離器PS2801串聯(lián)。值得注意的是,和光耦隔離器串聯(lián)的電阻R3、并聯(lián)的電阻R4選取要恰當,通過調(diào)整其電阻值,可以得到合適的輸入電壓閾值。數(shù)字量輸入電壓通過光耦隔離之后,轉(zhuǎn)換為合適的電壓信號至MCU??紤]到數(shù)字量輸入可為開關(guān)量輸入和脈沖信號輸入,應選用MCU的外部中斷功能引腳作為數(shù)字量輸入管腳,這樣MCU才能及時響應數(shù)字量輸入。
對于數(shù)字量輸出(電壓輸出),MCU通過光耦隔離器PS2801控制固態(tài)繼電器VN3401SP的輸出。數(shù)字量輸出可分為開關(guān)量輸出和脈沖輸出。對于開關(guān)量輸出,可以通過MCU的普通GPIO引腳來實現(xiàn)控制;對于脈沖輸出,可以使用MCU的PWM引腳來實現(xiàn)控制。
1.3 模擬量輸入模塊
當MCU內(nèi)部集成的ADC不能滿足系統(tǒng)設計要求時,需要外加一個滿足系統(tǒng)設計要求的ADC,外部ADC采集的數(shù)據(jù)可以通過多種總線傳輸?shù)組CU(如IIC、SPI等)。
該RTU具有8路模擬量輸入,模擬量輸入原理圖如圖3所示。模擬量輸入范圍為直流4~20 mA或0~5 V,采用TI公司的ADS7952(采樣頻率為1 MHz,12位分辨率,20 MHz的SPI串行接口),在模擬量輸入前端加入適當?shù)恼{(diào)理電路(由濾波電容、自恢復保險絲、TVS管、精密電阻、高速運放、穩(wěn)壓管等元件組成的電路),ADS7952的數(shù)據(jù)傳輸采用SPI總線傳輸,在ADC和MCU的SPI總線上加上一個磁耦隔離器ADuM1401,注意磁耦隔離器的數(shù)據(jù)轉(zhuǎn)換速率要大于SPI的傳輸波特率。
1.4 通信模塊
新型RTU具有強大的通信組網(wǎng)能力,并且兼容多種通信方式,如TCP/IP、RS232、RS485通信等等。該RTU有1個RS232通信接口、1個RS4 85通信接口和1個以太網(wǎng)接口。其中,RS232通信接口還可以外接一個ZigBee模塊,實現(xiàn)無線數(shù)據(jù)傳輸。
MCU的UART端口通過磁耦隔離器ADuM1402分別與RS232收發(fā)器MAX3232E和RS485收發(fā)器SN65HVD-1176D相連。由于RS232/RS485通信均為有線通信,在惡劣的環(huán)境下,例如通信電纜受到雷擊干擾,收發(fā)器可能由于過壓而燒壞,甚至會影響MCU的正常工作,所以應該在收發(fā)器接線端子上加上合適的防雷保護電路。防雷保護電路可以分為三層保護:第一層用三個玻璃放電管組成一個三角形電路作為一級保護,可以把雷擊電壓降到數(shù)百伏;第二層用耐高壓的TVS管,可以把傳輸線上的電壓降到數(shù)十伏;第三層加上適當?shù)碾姼谢虮kU絲,用于進一步保護收發(fā)器。RS232/RS485通信模塊的結(jié)構(gòu)原理圖如圖4所示。
MCU通過數(shù)據(jù)總線、地址總線、若干控制信號線與以太網(wǎng)控制器DM9000相連,以太網(wǎng)控制器的兩對差分信號線接到合適的網(wǎng)絡變壓器上,同時為了保護以太網(wǎng)控制器,在網(wǎng)絡變壓器跟RJ45網(wǎng)口之間加入一個合適的ESD保護電路,可以消除外部環(huán)境的影響。以太網(wǎng)通信模塊圖工作原理如圖5所示。
1.5 存儲器模塊和溫度測量模塊
存儲器包括SDRAM、Norflash和Nandflash。SDRAM用來臨時存放數(shù)據(jù),確保程序能正常運行;Norflash用于存儲程序;Nandflash用于存儲數(shù)據(jù),在RTU突然掉電或通信網(wǎng)絡故障的情況下,Nandflash能把重要的數(shù)據(jù)信息保存起來,待到RTU再次上電并且網(wǎng)絡通暢時,再把數(shù)據(jù)提取出來發(fā)送出去。
E2PROM可以用來存儲RTU的初始配置信息,包括RTU設備基本屬性、IP地址信息、網(wǎng)絡參數(shù)、串口參數(shù)、主從模式選擇和AD采樣配置等信息。RTU上電運行時,先從E2PROM中讀取配置信息,RTU初始化各個模塊之后才能正常工作。
測溫模塊可以用來測量RTU的工作溫度,并實時地或定時地向上傳輸其溫度值,實現(xiàn)溫度監(jiān)控。
2 RTU軟件設計
該新型RTU內(nèi)嵌μC/OS-II實時操作系統(tǒng),數(shù)據(jù)傳輸協(xié)議采用Modbus協(xié)議。μC/OS-II是一個完整的、可移植、可固化、可剪裁的占先式實時多任務內(nèi)核,適用于工業(yè)控制中的實時監(jiān)控。Modbus協(xié)議包括ASCII、RTU、TCP。Modbus的ASCII、RTU協(xié)議規(guī)定了消息、數(shù)據(jù)的結(jié)構(gòu)、命令和就答的方式,數(shù)據(jù)通信采用主-從方式。Modbus協(xié)議需要對數(shù)據(jù)進行校驗,串行協(xié)議中除有奇偶校驗外,ASCII模式采用LRC校驗,RTU模式采用16位CRC校驗。 Modbus/TCP模式?jīng)]有額外規(guī)定校驗,因為TCP協(xié)議是一個面向連接的可靠協(xié)議。在本文中,作為主站的RTU,內(nèi)嵌的實時操作系統(tǒng)μC/OS-II實現(xiàn)上層Modbus/TCP協(xié)議與Modbus/RTU協(xié)議之間的通信(即上位機與計算機、上位機與下位機之間的通信)。而作為從站的RTU,內(nèi)嵌的實時操作系統(tǒng)μC/OS-II實現(xiàn)Modbus/RTU協(xié)議通信(即上位機與下位機之間的通信),對所連接的被測設備進行控制信息的輸入輸出以及RTU采集和輸出模塊的控制。以下主要介紹作為從站的RTU軟件設計。
2.1 Modbus/RTU協(xié)議
Modbus串行鏈路協(xié)議是一個主-從協(xié)議。在同一時刻,只有一個主節(jié)點連接于總線,一個或多個子節(jié)點(最大編號為247)連接于同一個串行總線。Modbus通信總是由主節(jié)點發(fā)起。子節(jié)點在沒有收到來自主節(jié)點的請求時,從不會發(fā)送數(shù)據(jù)。子節(jié)點之間從不會互相通信。主節(jié)點在同一時刻只會發(fā)起一個Modbus事務處理。當設備使用RTU模式在Modbus串行鏈路通信時,報文中每個8位字節(jié)含有兩個4位十六進制字符。這種模式的主要優(yōu)點具有是較高的數(shù)據(jù)密度,而且在相同的波特率下比ASCII模式有更高的吞吐率。每個報文必須以連續(xù)的字符流傳送。在RTU模式,報文幀由時長至少為3.5個字符時間的空閑間隔區(qū)分。如果兩個字符之間的空閑間隔大于1.5個字符時間,則報文幀被認為不完整應該被接收節(jié)點丟棄。RTU接收驅(qū)動程序的實現(xiàn),由于1.5個字符時間(t1.5)和3.5個字符時間(t3.5)的定時,隱含著大量的對中斷的管理。在高通信速率下,這導致CPU負擔加重。因此,在通信速率等于或低于19 200 b/s時,這兩個定時必須嚴格遵守;對于波特率大于19 200 b/s的情形,應該使用2個定時的固定值:建議的字符間超時時間(t1.5)為750μs,幀間的超時時間(t3.5)為1.750ms。
2.2 Modbus數(shù)據(jù)模型
在一系列不同平臺上,Modbus數(shù)據(jù)模式有不同的特性,基本平臺有離散輸入、線圈、輸入寄存器和保持寄存器。在該新型RTU系統(tǒng)中,事先要與主站RTU協(xié)商定義好一個離散輸入對應表、線圈對應表、輸入寄存器對應表、保持寄存器對應表。主站RTU和從站RTU根據(jù)對應表中的數(shù)據(jù)位執(zhí)行相應的操作。主站RTU讀離散輸入即讀取從站RTU數(shù)字量輸入狀態(tài);主站RTU寫線圈即控制從站RTU數(shù)字量輸出(繼電器輸出);從站RTU模擬量輸入(AD采集的數(shù)據(jù))存儲于輸入寄存器中,供主站RTU讀?。褐髡綬TU通過寫保持寄存器可以給從站RTU發(fā)送配置信息,從站RTU讀保持寄存器執(zhí)行相應操作。用來存儲從站RTU的初始配置信息的E2PROM,就是通過讀取相應的保持寄存器中數(shù)據(jù),寫入到E2PROM中,再對RTU重新配置。
2.3 Modbus從站
Modbus主站和Modbus從站是兩個獨立的模塊,主站為上位機(客戶機),而從站為下位機(服務機)。主站和從站都有相同的數(shù)據(jù)鏈路層,并且它們的幀報文數(shù)據(jù)結(jié)構(gòu)都是相同的。Modbus從站服務任務是從站協(xié)議的核心組成部分,它的主要工作是處理Modbus主站點功能請求,返回主站請求的保持寄存器、輸入寄存器、線圈和離散量輸入等值,或接收并保存主站寫入的保持寄存器和線圈等值;另外,Modbus從站的應用程序也會讀取或?qū)懭胂嚓P(guān)的寄存器。從站RTU程序流程:首先,初始化目標板、μC/OS-II、系統(tǒng)時基等等;接著,創(chuàng)建一個系統(tǒng)初始任務(優(yōu)先級最高)和Modbus從站服務程序;再接著開始運行任務?;?mu;C/OS-II的從站RTU程序流程圖如圖6所示。
2.4 系統(tǒng)初始任務Task0
從站RTU經(jīng)過系統(tǒng)基本初始化之后,還需要進一步的配置才能正常工作,而這部分的工作就在系統(tǒng)初始任務Task0中實現(xiàn)。Task0主要完成的工作有:讀取E2PROM中的數(shù)據(jù),獲取各種配置信息;根據(jù)配置信息初始化各種硬件驅(qū)動(如Modbus傳輸波特率、RS232/RS485通信選擇、外部中斷功能引腳選擇、SPI和IIC總線初始化等等);根據(jù)配置需求有選擇地創(chuàng)建模擬量輸入量任務Task2(AD采集任務)、數(shù)字量輸入任務Task3、數(shù)字量輸出任務Task4、讀保持寄存器配置任務Task5和測溫任務Task6:最后讓一個LED指示燈定時閃爍表示RTU工作正常;接著進行任務調(diào)度,切換到已創(chuàng)建的、優(yōu)先級高的其它就緒任務中運行并且實時響應外部中斷(數(shù)字量輸入)。系統(tǒng)初始任務Task0程序流程圖如圖7所示。
系統(tǒng)中的Task2主要完成AD采集任務Task2,本系統(tǒng)采用TI公司的ADS7952。ADS7952的AD采樣率是根據(jù)其SPI傳輸波特率來換算的,改變MCU(S3C2440A)的SPI底層驅(qū)動程序中的SPI分頻值就能實現(xiàn)不同AD采樣率的選擇。ADS7952可以根據(jù)E2PROM中的配置信息(采樣率、通道數(shù)、采樣點數(shù))工作,也可以根據(jù)Task5中讀取保持寄存器對應表中的數(shù)據(jù)位來實時更新配置。
Task3執(zhí)行數(shù)字量輸入任務,數(shù)字量輸入包括開關(guān)量輸入和脈沖信號量輸入,可以把這兩種功能的端口分開,也可以把這兩種功能復用合并。功能復用合并實現(xiàn)方法:數(shù)字量輸入口對應的MCU管腳先作為普通GPIO引腳,讀取其GPIO狀態(tài)寄存器獲取高低電平狀態(tài)(即開關(guān)狀態(tài)),把開關(guān)狀態(tài)寫入Modbus離散輸入寄存器中,接著把管腳功能從GPIO引腳切換到外部中斷引腳,用于隨時獲取脈沖信號的輸入,在外部中斷函數(shù)中可以實現(xiàn)計數(shù)并且把計數(shù)值寫入Modbus輸入寄存器中。該任務執(zhí)行時間必須短,代碼必須簡練,不能在其中加入延時之類的函數(shù),任務掛起的時間也不能太長,不然會導致脈沖信號輸入數(shù)據(jù)出現(xiàn)誤碼。
Task4主要完成數(shù)字量輸出任務。主站RTU可以通過寫線圈寄存器來控制從站RTU固態(tài)繼電器的輸出,也可以根據(jù)要求讓從站RTU定時中斷控制繼電器輸出PWM信號。同時主站RTU可以通過讀線圈寄存器來獲取從站RTU當前繼電器的電平輸出狀態(tài)。
Task5可執(zhí)行讀保持寄存器配置任務。當Modbus保持寄存器中的數(shù)據(jù)發(fā)生變化時,根據(jù)保持寄存器對應表(與主站協(xié)商定義的一個從站配置表)對從站RTU進行相應配置,包括從站基本信息、AD采樣率、AD通道數(shù)、AD采樣點數(shù)、有線無線傳輸選擇、UART波特率等等,同時把新的配置信息寫入E2PROM中。配置代碼應該放在μC/OS-II臨界區(qū)中,臨界區(qū)中不響應中斷,這樣才能保證新配置的程序能正常地運行。
Task6執(zhí)行測溫任務。當RTU工作環(huán)境溫度過高時,可能會影響RTU的正常工作,測溫任務可以實時或定時把從站RTU工作溫度值寫入Mod bus輸入寄存器中,供主站RTU讀取。
3 結(jié)語
本文主要介紹了一種基于ARM9的RTU設計實現(xiàn)方法,對RTU硬件系統(tǒng)中的各個模塊設計過程進行了詳細的介紹,包括數(shù)字量輸入模塊、數(shù)字量輸出模塊、模擬量輸入模塊、RS232通信模塊、RS485通信模塊、以太網(wǎng)通信模塊、存儲器模塊、E2PROM和測溫模塊等等,同時提出了基于此硬件系統(tǒng)的RTU從站軟件設計方法。RTU從站采用μC/OS-II實時操作系統(tǒng),數(shù)據(jù)傳輸采用Modbus/RTU通信協(xié)議。該RTU可以應用于市政、能源、交通設施、環(huán)境、氣象、地質(zhì)、農(nóng)業(yè)等有遠程終端測控站點需求的行業(yè)。