,
(成都職業(yè)技術(shù)學院 軟件分院,成都 610041)
遠程測控系統(tǒng)使人們可以通過計算機網(wǎng)絡(luò)隨時隨地查看和控制現(xiàn)場設(shè)備的運行狀態(tài),也可以通過無線數(shù)據(jù)交換的形式把數(shù)據(jù)信息傳輸?shù)狡渌I(yè)測控儀器中。在整個控制系統(tǒng)中,上位機(也就是遠程決策系統(tǒng))通過指令與數(shù)據(jù)傳輸控制遠端測控裝置通信,測控模塊的響應(yīng)機制以及其控制系統(tǒng)工作狀態(tài)的穩(wěn)定性、安全性尤為重要,其控制過程可以基于軟件或硬件實現(xiàn),軟件實現(xiàn)最大的缺點是可靠性不夠高、響應(yīng)速度較慢[1],因此對實時性可靠性要求較高的系統(tǒng)更多的是采用專用芯片、高速芯片或者可編程邏輯器CPLD/FPGA來設(shè)計實施和驗證,并配合易于建立的、以描述控制特性為主的、應(yīng)用比較廣泛的有限狀態(tài)機(Finite_State_Machine,FSM)的建模方法來實施。
有限狀態(tài)機基于數(shù)字集成電路系統(tǒng),大部分是時序電路, 時序電路可以用符號化的有限狀態(tài)機來模擬[2],不難發(fā)現(xiàn)遠程測控系統(tǒng)的各種控制狀態(tài)變化和轉(zhuǎn)移也可以描述系統(tǒng)的行為,而這些狀態(tài)的變化和轉(zhuǎn)移則形成了狀態(tài)機[3]。因此,采用基于狀態(tài)機的方法來定義和實現(xiàn)遠程測控是一種穩(wěn)定、可靠、簡潔的實現(xiàn)方案。本文通過基于FPGA的遠程測控模塊,采用有限狀態(tài)機為測控模型,利用Verilog HDL描述,實現(xiàn)了有限狀態(tài)機在遠程測控模塊及系統(tǒng)穩(wěn)定可靠地運行。
FPGA結(jié)合了微電子技術(shù)、電路技術(shù)、EDA技術(shù),使設(shè)計者可以集中精力進行所需邏輯功能的設(shè)計,縮短設(shè)計周期,提高了設(shè)計質(zhì)量。FPGA己經(jīng)在計算機硬件、工業(yè)控制、遙感遙測、雷達聲納、數(shù)據(jù)處理、智能儀器儀表、廣播電視、醫(yī)療電子和現(xiàn)代通信等多種領(lǐng)域中得到廣泛應(yīng)用。FPGA開發(fā)技術(shù)己經(jīng)成為數(shù)字系統(tǒng)的科研試驗、樣機調(diào)試和中小批量生產(chǎn)和驗證的首選方案[4]。
對于工作點多、通信距離遠、環(huán)境惡劣且實時性和可靠性要求比較高的場合,可以利用無線電波來實現(xiàn)主控站與各個子站之間的數(shù)據(jù)通信,采用這種遠程測控方式有利于實現(xiàn)復(fù)雜連線,無需鋪設(shè)電纜或光纜,降低了環(huán)境成本[5]。本項目設(shè)計中,通信距離為3 000 m,采集點較多,采用的無線模塊可以有256個節(jié)點,現(xiàn)場FPGA模塊設(shè)計有模擬和數(shù)字輸入接口,可以接收大部分經(jīng)過處理的現(xiàn)場傳感數(shù)據(jù),根據(jù)遠程控制中心的要求實現(xiàn)現(xiàn)場情況的感知以及控制,模塊的輸出設(shè)計有數(shù)字驅(qū)動電路,可以直接控制繼電器、電機等現(xiàn)場設(shè)備;遠程計算機通過無線數(shù)字傳輸建立與現(xiàn)場模塊的通信,采集的現(xiàn)場數(shù)據(jù)經(jīng)過基于人工智能的決策系統(tǒng)發(fā)給遠端模塊執(zhí)行控制功能。系統(tǒng)框圖如圖1所示。
圖1 系統(tǒng)框圖
圖2 無線測控模塊中的數(shù)據(jù)流關(guān)系
本文選擇Verilog HDL來對該邏輯設(shè)計的硬件電路進行描述,主要包含以下電路模塊:開關(guān)量的采樣、異步通信接口、I2C總線接口、自主定義的模塊與決策端通信狀態(tài)機、串行ADC的時序接口、硬件電路信號輸出,以及相關(guān)的數(shù)據(jù)和地址控制電路。實驗階段的芯片選用XILINX SPARTAN3S 250E,其基于SRAM工藝,優(yōu)點是使用標準的CMOS工藝,不需要任何復(fù)雜工序[6]。最后通過ISE開發(fā)平臺將整個控制電路集成到一個FPGA芯片中,減少了外界對系統(tǒng)的干擾,便于以后系統(tǒng)升級,對現(xiàn)場電路連接方式的控制較靈活。整個模塊核心的時序電路可以用符號化的有限狀態(tài)機來模擬,把一個時序邏輯抽象成一個同步有限狀態(tài)機是設(shè)計Verilog HDL模塊的關(guān)鍵[2]。狀態(tài)機在本項目基于FPGA的無線測控模塊設(shè)計中的數(shù)據(jù)流關(guān)系如圖2所示。
無線測控模塊在測控系統(tǒng)的地位處于從機或執(zhí)行現(xiàn)場的地位,模塊的所有功能和動作圍繞主機及決策系統(tǒng)的要求來完成。通常情況是在周期性的間歇狀態(tài)中,接收主機的查詢、采集轉(zhuǎn)換現(xiàn)場數(shù)據(jù)、存儲現(xiàn)場數(shù)據(jù)以及向主機回傳;接收主機發(fā)送的決策控制數(shù)據(jù),更新執(zhí)行的輸出狀態(tài)以及保存當前控制狀態(tài),在其他的時間現(xiàn)場模塊處于空閑狀態(tài)。本項目中基于FPGA的遠程測控模塊的主要協(xié)議與指令如表1所列。
表1 FPGA 遠程測控模塊的主要協(xié)議與指令
在本系統(tǒng)中,基于FPGA的遠端執(zhí)行模塊以及上位決策主機屬于從主關(guān)系,主從狀態(tài)機使用層次狀態(tài)機的設(shè)計方法來設(shè)計決策系統(tǒng),包含一個主狀態(tài)機和多個從狀態(tài)機。主狀態(tài)機起到仲裁控制作用,決定當前有哪些從狀態(tài)機可以運行[7]??梢酝ㄟ^設(shè)計不同的主狀態(tài)機的狀態(tài)轉(zhuǎn)移關(guān)系達到不同的控制策略,如分時復(fù)用或基于優(yōu)先級啟動不同的從狀態(tài)機等,在本系統(tǒng)主機中除控制可以并行執(zhí)行外,其它信息的采集均可采用限時輪流詢問的方式,主機的狀態(tài)和行為描述在此不再贅述。
作為遠端模塊的從機,其狀態(tài)變化來自于第2.2節(jié)所描述的協(xié)議指令,由于采用可編程邏輯器件這種靈活的硬件設(shè)計,因此用基于Verilog HDL的有限狀態(tài)機建模,應(yīng)該主要考慮以下幾點[2]:編碼方案、FSM的綜合實現(xiàn)、狀態(tài)機所有狀態(tài)的完備以及邊沿觸發(fā)器的設(shè)計,滿足速度和面積的設(shè)計要求。通過以上協(xié)議和指令分析可以基本確定在整個控制過程當中模塊的工作狀態(tài),可以用圖形化的方式描述狀態(tài)機各個狀態(tài)之間的轉(zhuǎn)換關(guān)系,即該設(shè)計的狀態(tài)轉(zhuǎn)移圖如圖3所示(以遠程查詢指令為例)。
圖3 狀態(tài)轉(zhuǎn)移圖
根據(jù)狀態(tài)轉(zhuǎn)移圖編寫有限狀態(tài)機程序,由于Verilog具有并行執(zhí)行的特點[8],一個指令的判斷模塊輸出指令下跳沿給狀態(tài)機,即一個指令只執(zhí)行一次。下面的程序以主機發(fā)送查詢指令FF為例。
//------------判斷FF指令下跳沿---------------
reg[2:0] com_ff_neg;
wire neg_ff_com; //采樣判斷FF指令下跳沿后的輸出
always @ (posedge clk or negedge rst_n)
begin
if(!rst_n)
com_ff_neg <= 3'b111;
else //com_ff來自于無線模塊接收數(shù)據(jù)
com_ff_neg <={com_ff_neg[1:0],com_ff};
end
assign neg_ff_com = ~com_ff_neg[1] & com_ff_neg[2];
//-------------遠程控制命令FF狀態(tài)機-------------
//采樣本地控制模塊的轉(zhuǎn)換數(shù)據(jù),來自于4種傳感器
//寫入本地I2C存儲區(qū)后(作為斷電或開機后的本地采樣數(shù)據(jù))
//通過無線模塊將該原始數(shù)據(jù)發(fā)送給主機
parameter/*WAIT_FF*/ S0 = 3'b000;
parameter/*SAMPLE0*/ S1 = 3'b001;
parameter/*SAMPLE1*/ S2 = 3'b010;
parameter/*SAMPLE2*/ S3 = 3'b011;
parameter/*TX_LOCAL*/ S4 = 3'b101;
parameter/*TX_END*/ S5= 3'b100;
reg[2:0] state_ff; //主機查詢指令狀態(tài)機-狀態(tài)
always @ (posedge clk or negedge rst_n)
begin
if(!rst_n) //復(fù)位狀態(tài)
begin
write_data_loc <=8'b00000000; byte_addr_loc <=3'b000;
state_ff <= S0;
inquiry <= 1'b1;
tx_bytes <= 4'b0; //uart 發(fā)送數(shù)據(jù)字節(jié)控制
end
else
case(state_ff)
S0: begin
inquiry <=1;
if(neg_ff_com) //inquiry 低電平啟動采樣
begin
state_ff <= SAMPLE0;
inquiry <=0; //1次寫入本地采樣到I2C
write_data_loc <= local_data[3];
byte_addr_loc <= 3'b011; //LOCAL_ADDR0 +3;
end
else state_ff <=S0;
end
S1: if(cstate == STOP2) // 寫入數(shù)據(jù)完成
begin
state_ff <= S2;
inquiry <=0; //
write_data_loc <= local_data[4];
byte_addr_loc <= 3'b100; //LOCAL_ADDR0 + 4 ;
end
else state_ff <= S1;
S2: if(cnt_20ms==20'hffff0) //寫入數(shù)據(jù)完成
begin
state_ff <= S3;
inquiry <=0; //
write_data_loc <= local_data[5];
byte_addr_loc <= 3'b101; //LOCAL_ADDR0 + 5 ;
end
else state_ff <= S2;
S3: if(cnt_20ms==20'hffff0) //寫入數(shù)據(jù)完成
begin
state_ff <= S4;
inquiry <=0; //
write_data_loc <= local_data[6];
byte_addr_loc <= 3'b110; //LOCAL_ADDR0 + 6 ;
end
else state_ff <= S3;
S4: if(cstate == STOP2)
begin tx_bytes <=BYTE_LENGTH; //發(fā)送長度載入
state_ff <=S5;
end
else state_ff <= S4;
S5 : begin
if (tx_num == 4'd11) tx_bytes <= tx_bytes - 1'b1;
if(tx_bytes == 0) state_ff <= S0;
end
default : state_ff <= S0;
endcase
end
主從機的通信和控制模式核心為遠程模塊根據(jù)現(xiàn)場數(shù)據(jù)接收遠端主機的決策控制信號。在本項目中采用的主機為臺式計算機,從機或遠端的執(zhí)行機構(gòu)采用本項目設(shè)計的基于FPGA的遠程測控模塊。實驗對象為水產(chǎn)養(yǎng)殖環(huán)境的信息測量——溫度、溶氧量,主要執(zhí)行對象是對現(xiàn)
場水環(huán)境進行調(diào)節(jié)控制,控制對象為充氧機和進出水泵,由于模塊本身的輸出電壓基本為3.3 V,因此需要在輸出端加驅(qū)動及保護控制繼電器。
增氧泵是系統(tǒng)的主要控制對象之一,它是否正常工作直接決定了能否為魚塘充氧。增氧能力和動力效率是衡量增氧泵性能的重要指標,增氧能力是指每小時溶解到水中的氧氣的重量,動力效率是指在一定的條件下(如溫度)單位千瓦輸出功率的增氧能力。為了達到良好的增氧效果,系統(tǒng)選用葉輪式增氧泵[9]。在模塊的電路中設(shè)有兩片高耐壓、大電流復(fù)合晶體管IC——ULN2003,可以輸出14路驅(qū)動控制信號,其輸入端與FPGA-I/O口直接相連。
系統(tǒng)初始化后,主機通過采樣指令開始接收傳感器檢測到的各項數(shù)據(jù),依次獲取溶氧量、溫度等參數(shù),將獲取值與設(shè)定值比較,根據(jù)專家決策做出相應(yīng)的動作從而實現(xiàn)自動控制。溫度傳感器采用 AD590,AD590為電流型溫度傳感器,它有非常好的線性輸出性能。當環(huán)境溫度為0 ℃時,其輸出電流為273 μA ,流過AD590的電流與絕對溫度成正比,溫度每增加1 ℃其輸出電流增加1 μA,即電流與溫度的關(guān)系是:I=(273+T) μA[10]。本項目現(xiàn)場模塊不對傳感器數(shù)值做任何判定和描述,直接根據(jù)時序傳遞給后端主機,由主機根據(jù)數(shù)據(jù)庫或?qū)<覜Q策系統(tǒng)做出相應(yīng)的顯示和控制。
應(yīng)用測試中,將本地模塊放于浮標桶內(nèi),采用干電池供電,在距離1000 m左右的室內(nèi)對采集數(shù)據(jù)進行比較分析,時間跨度從早上9點到下午5點,間隔采樣時間為1小時,可以看出,該模塊對水養(yǎng)殖環(huán)境信息的檢測與標準參考值的相對誤差基本滿足使用需求。測試結(jié)果如表2所列。
表2 無線測控模塊對水產(chǎn)養(yǎng)殖信息的測試 測試時間:2017.08.04
[1] 唐健隆,梁自澤,蔡麗,等.基于狀態(tài)機的巡線機器人控制系統(tǒng)設(shè)計[J].機器人技術(shù),2008,24(1-2):247-249.
[2] 陳勇.有限狀態(tài)機的建模與優(yōu)化設(shè)計[J].重慶工學院學報:自然科學版,2007,21(5):55-58.
[3] 熊振云,阮俊波,金惠華.嵌入式軟件中狀態(tài)機的抽象與實現(xiàn)[J].計算機應(yīng)用,2003,23(10):84-86.
[4] 孔利東.基于FPGA的數(shù)據(jù)采集與處理技術(shù)的研究[D].武漢:武漢理工大學,2007.
[5] 孫先逵,秦嵐.遠程測控技術(shù)的發(fā)展現(xiàn)狀和趨勢[J].儀器儀表學報,2004(8):562-564.
[6] Clive Max Maxfield.The Design Warrior’s Guide to FPGAs Devices,Tools and Flows[M].杜生海,等譯.北京:人民郵電出版社,2007:221-225.
[7] 豐平,馬曉川,陳模江.主從并行狀態(tài)機用于復(fù)雜FPGA控制系統(tǒng)設(shè)計[J].微計算機應(yīng)用,2009,30(6):1-5.
[8] 夏宇聞.Verilog數(shù)字系統(tǒng)設(shè)計教程[M].北京:北京航空航天大學出版社,2003.
[9] 劉海陸.基于 GSM 的魚塘增氧泵的遠程控制研究[D].舟山:浙江海洋學院,2014.
[10] 劉冬香.基于CPLD/FPGA的溫度測控系統(tǒng)的設(shè)計[J].機電工程技術(shù),2009,38(12):20-21.
林永宏(高級工程師),主要研究方向為應(yīng)用電子、嵌入式系統(tǒng)設(shè)計;邱紹峰(副教授),主要研究方向為圖像處理、電子技術(shù)應(yīng)用。