基于ARM9的RTU設(shè)計(jì)
2.4 系統(tǒng)初始任務(wù)Task0
從站RTU經(jīng)過(guò)系統(tǒng)基本初始化之后,還需要進(jìn)一步的配置才能正常工作,而這部分的工作就在系統(tǒng)初始任務(wù)Task0中實(shí)現(xiàn)。Task0主要完成的工作有:讀取E2PROM中的數(shù)據(jù),獲取各種配置信息;根據(jù)配置信息初始化各種硬件驅(qū)動(dòng)(如Modbus傳輸波特率、RS232/RS485通信選擇、外部中斷功能引腳選擇、SPI和IIC總線初始化等等);根據(jù)配置需求有選擇地創(chuàng)建模擬量輸入量任務(wù)Task2(AD采集任務(wù))、數(shù)字量輸入任務(wù)Task3、數(shù)字量輸出任務(wù)Task4、讀保持寄存器配置任務(wù)Task5和測(cè)溫任務(wù)Task6:最后讓一個(gè)LED指示燈定時(shí)閃爍表示RTU工作正常;接著進(jìn)行任務(wù)調(diào)度,切換到已創(chuàng)建的、優(yōu)先級(jí)高的其它就緒任務(wù)中運(yùn)行并且實(shí)時(shí)響應(yīng)外部中斷(數(shù)字量輸入)。系統(tǒng)初始任務(wù)Task0程序流程圖如圖7所示。本文引用地址:http://butianyuan.cn/article/155057.htm
系統(tǒng)中的Task2主要完成AD采集任務(wù)Task2,本系統(tǒng)采用TI公司的ADS7952。ADS7952的AD采樣率是根據(jù)其SPI傳輸波特率來(lái)?yè)Q算的,改變MCU(S3C2440A)的SPI底層驅(qū)動(dòng)程序中的SPI分頻值就能實(shí)現(xiàn)不同AD采樣率的選擇。ADS7952可以根據(jù)E2PROM中的配置信息(采樣率、通道數(shù)、采樣點(diǎn)數(shù))工作,也可以根據(jù)Task5中讀取保持寄存器對(duì)應(yīng)表中的數(shù)據(jù)位來(lái)實(shí)時(shí)更新配置。
Task3執(zhí)行數(shù)字量輸入任務(wù),數(shù)字量輸入包括開(kāi)關(guān)量輸入和脈沖信號(hào)量輸入,可以把這兩種功能的端口分開(kāi),也可以把這兩種功能復(fù)用合并。功能復(fù)用合并實(shí)現(xiàn)方法:數(shù)字量輸入口對(duì)應(yīng)的MCU管腳先作為普通GPIO引腳,讀取其GPIO狀態(tài)寄存器獲取高低電平狀態(tài)(即開(kāi)關(guān)狀態(tài)),把開(kāi)關(guān)狀態(tài)寫(xiě)入Modbus離散輸入寄存器中,接著把管腳功能從GPIO引腳切換到外部中斷引腳,用于隨時(shí)獲取脈沖信號(hào)的輸入,在外部中斷函數(shù)中可以實(shí)現(xiàn)計(jì)數(shù)并且把計(jì)數(shù)值寫(xiě)入Modbus輸入寄存器中。該任務(wù)執(zhí)行時(shí)間必須短,代碼必須簡(jiǎn)練,不能在其中加入延時(shí)之類(lèi)的函數(shù),任務(wù)掛起的時(shí)間也不能太長(zhǎng),不然會(huì)導(dǎo)致脈沖信號(hào)輸入數(shù)據(jù)出現(xiàn)誤碼。
Task4主要完成數(shù)字量輸出任務(wù)。主站RTU可以通過(guò)寫(xiě)線圈寄存器來(lái)控制從站RTU固態(tài)繼電器的輸出,也可以根據(jù)要求讓從站RTU定時(shí)中斷控制繼電器輸出PWM信號(hào)。同時(shí)主站RTU可以通過(guò)讀線圈寄存器來(lái)獲取從站RTU當(dāng)前繼電器的電平輸出狀態(tài)。
Task5可執(zhí)行讀保持寄存器配置任務(wù)。當(dāng)Modbus保持寄存器中的數(shù)據(jù)發(fā)生變化時(shí),根據(jù)保持寄存器對(duì)應(yīng)表(與主站協(xié)商定義的一個(gè)從站配置表)對(duì)從站RTU進(jìn)行相應(yīng)配置,包括從站基本信息、AD采樣率、AD通道數(shù)、AD采樣點(diǎn)數(shù)、有線無(wú)線傳輸選擇、UART波特率等等,同時(shí)把新的配置信息寫(xiě)入E2PROM中。配置代碼應(yīng)該放在μC/OS-II臨界區(qū)中,臨界區(qū)中不響應(yīng)中斷,這樣才能保證新配置的程序能正常地運(yùn)行。
Task6執(zhí)行測(cè)溫任務(wù)。當(dāng)RTU工作環(huán)境溫度過(guò)高時(shí),可能會(huì)影響RTU的正常工作,測(cè)溫任務(wù)可以實(shí)時(shí)或定時(shí)把從站RTU工作溫度值寫(xiě)入Mod bus輸入寄存器中,供主站RTU讀取。
3 結(jié)語(yǔ)
本文主要介紹了一種基于ARM9的RTU設(shè)計(jì)實(shí)現(xiàn)方法,對(duì)RTU硬件系統(tǒng)中的各個(gè)模塊設(shè)計(jì)過(guò)程進(jìn)行了詳細(xì)的介紹,包括數(shù)字量輸入模塊、數(shù)字量輸出模塊、模擬量輸入模塊、RS232通信模塊、RS485通信模塊、以太網(wǎng)通信模塊、存儲(chǔ)器模塊、E2PROM和測(cè)溫模塊等等,同時(shí)提出了基于此硬件系統(tǒng)的RTU從站軟件設(shè)計(jì)方法。RTU從站采用μC/OS-II實(shí)時(shí)操作系統(tǒng),數(shù)據(jù)傳輸采用Modbus/RTU通信協(xié)議。該RTU可以應(yīng)用于市政、能源、交通設(shè)施、環(huán)境、氣象、地質(zhì)、農(nóng)業(yè)等有遠(yuǎn)程終端測(cè)控站點(diǎn)需求的行業(yè)。
評(píng)論