国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于Windows操作系統(tǒng)的通用狀態(tài)指示器設(shè)計(jì)

2018-03-21 09:07張翔宇蔡文齋劉劍鋒
電子技術(shù)與軟件工程 2018年2期
關(guān)鍵詞:協(xié)議

張翔宇 蔡文齋 劉劍鋒

摘 要 本文設(shè)計(jì)了數(shù)個(gè)通用狀態(tài)指示函數(shù),用于解決Windows環(huán)境下應(yīng)用程序中各種狀態(tài)指示問題。這些函數(shù)利用界面可視組件設(shè)計(jì),包含各種狀態(tài)指示所需的參數(shù)并使用變體數(shù)組類型作為輸入。定義了一組公有數(shù)據(jù)數(shù)組作為函數(shù)與實(shí)際工程應(yīng)用的內(nèi)存交換區(qū),調(diào)用前將界面元素及協(xié)議提示信息傳遞給該交換區(qū),以便于多次調(diào)用時(shí)調(diào)用方式一致。設(shè)計(jì)了可視條件參數(shù),該參數(shù)可控制狀態(tài)指示個(gè)數(shù)。設(shè)計(jì)了一款調(diào)用函數(shù)的調(diào)試程序,能在實(shí)際工程函數(shù)調(diào)用前給出調(diào)用效果。以上函數(shù)可結(jié)合具體工程項(xiàng)目通信協(xié)議快速調(diào)用,從而提高開發(fā)者效率。

【關(guān)鍵詞】狀態(tài)指示器 標(biāo)簽組件 形狀組件 圖形組件 協(xié)議

任何控制類或相關(guān)應(yīng)用項(xiàng)目軟件開發(fā)時(shí),都會(huì)遇到這樣的問題:在通訊協(xié)議中,使用某些字節(jié)表示狀態(tài)變化。這樣的狀態(tài)表示字節(jié)在通訊協(xié)議中可能占幾個(gè)字節(jié),字節(jié)中每一位代表一種狀態(tài)。每個(gè)字節(jié)就可代表8個(gè)具體物理參數(shù)狀態(tài)。在工程項(xiàng)目中,假定通信協(xié)議中有7個(gè)狀態(tài)字節(jié),那么就有7*8=56種狀態(tài)指示,這就需要設(shè)計(jì)并制作出這56個(gè)狀態(tài)指示圖標(biāo)。并以不同的顏色表示相應(yīng)的狀態(tài)(例如,綠色代表正常,紅色代表異常)。當(dāng)工程項(xiàng)目改變后,通訊協(xié)議隨之發(fā)生變化。開發(fā)者則又要依據(jù)工程要求編寫大量的狀態(tài)指示代碼。

本文試圖針對(duì)形式各異的通訊協(xié)議,設(shè)計(jì)一種在Windows操作系統(tǒng)下的通用狀態(tài)指示器,以節(jié)省大量的代碼工作量,提高程序開發(fā)效率。

現(xiàn)代的開發(fā)工具中,可視化狀態(tài)指示組件較多,本文以Rad Studio XE10.0中的Delphi語言為例展開討論。

1 狀態(tài)指示器基本內(nèi)容

狀態(tài)指示器通常情況下信息表示應(yīng)該為:狀態(tài)輸入值、告警信息級(jí)別、告警指示形狀、背景顏色、前景顏色、字體前景顏色、字體背景顏色、可視性控制變量等。

狀態(tài)指示器經(jīng)常使用可視組件的標(biāo)簽組件、形狀組件、圖形組件來表達(dá)。本文使用這三種可視組件制作了4個(gè)通用函數(shù)來表達(dá)工程中各種狀態(tài)指示問題。其中,3個(gè)函數(shù)用于各種“2值”邏輯狀態(tài)指示問題,1個(gè)函數(shù)用于各種告警級(jí)別邏輯指示問題。

1.1 “2值”邏輯問題

狀態(tài)輸入?yún)?shù)值為典型的“2值”邏輯問題。例如,為0代表正常,為1代表異常。

1.2 告警級(jí)別邏輯問題

該信息為多值邏輯問題,例如表示天氣狀況的指示問題,“0”代表晴天,“1”代表小雨,“2”代表中雨,“3”代表大雨等。在這種邏輯下,雨天表示方法就要使用不同顏色。

1.3 其它問題

在使用形狀組件和圖形組件作指示器時(shí),函數(shù)參數(shù)中啞元應(yīng)為:狀態(tài)輸入?yún)?shù)、形狀參數(shù)、狀態(tài)指示前景顏色、狀態(tài)指示背景顏色,應(yīng)具備可視控制參數(shù)。如果帶Hit支持功能(當(dāng)鼠標(biāo)移動(dòng)到這個(gè)圖形時(shí)能夠自動(dòng)指示)則應(yīng)該設(shè)計(jì)正確指示標(biāo)題、錯(cuò)誤指示標(biāo)題。

2 通用狀態(tài)指示器函數(shù)設(shè)計(jì)

共設(shè)計(jì)三個(gè)函數(shù)。此三個(gè)函數(shù)形式相仿,分別使用Timage組件、Tshape組件和Tlabel組件作為界面可視組件表示狀態(tài)指示,其中輸入字節(jié)表示一次性處理8種狀態(tài),所以其它啞元參數(shù)為動(dòng)態(tài)指針型。

下面以標(biāo)簽組件Tlabel作為例說明該通用函數(shù)形式化參數(shù)設(shè)計(jì)方法。狀態(tài)輸入?yún)?shù)為1字節(jié),表示8個(gè)指示狀態(tài),該函數(shù)調(diào)用后同時(shí)處理8個(gè)狀態(tài)指示,狀態(tài)信息級(jí)別參數(shù)表達(dá)在異常情況下告警級(jí)別。部分代碼段為:

Procedure DisplayLableLamp(

InputB:Byte;//輸入字節(jié)

Modellevel:Byte;//狀態(tài)信息級(jí)別

RzLabel:Array of TRzLabel;//界面可視組件

BackColor:Array of TColor;//背景顏色

FrontColor:Array of TColor;//前景顏色

PenColor:Array of TColor;//字體前景顏色

PenErrColor:Array of TColor;//字體背景顏色

Visible:Array of Boolean;//可視性控制變量

OKCaption:Array of String;//正確提示字符串

ErrorCaption:Array of String);//異常告警提示字符串

來一段實(shí)際代碼,判斷輸入某位為1或者0時(shí)的處理。

var

i:integer;

begin

if (InputB and $01)=$01 then

begin

RzLabel[0].Color:=FrontColor[0];

RzLabel[0].caption:=OKCaption[0];

RzLabel[0].Font.Color:=PenColor[0];

end

else

begin

Case Modellevel of

0:begin

RzLabel[0].Color:=BackColor[0];

RzLabel[0].caption:=ErrorCaption[0];

RzLabel[0].Font.Color:=PenErrColor[0];

end;

......//其它情況處理代碼略。

end;

......//其它位處理代碼略。

end;

For I:=0 To 7 do

RZlabel[i].visible:=visible0[i];//可視性控制。

3 調(diào)用方法

3.1 參數(shù)賦值

函數(shù)寫為動(dòng)態(tài)數(shù)組引入?yún)?shù)形式,在實(shí)際使用時(shí),工程開發(fā)者首先預(yù)留出實(shí)際調(diào)用實(shí)參接口,在調(diào)用函數(shù)前,首先依據(jù)具體工程的協(xié)議定義賦值實(shí)參變量,將界面對(duì)應(yīng)的標(biāo)簽或者形狀組件名賦給對(duì)應(yīng)實(shí)參變量。

因?yàn)楹瘮?shù)與開發(fā)界面無關(guān),所以在真實(shí)調(diào)用函數(shù)前,才知道哪個(gè)指示等代表哪個(gè)實(shí)體標(biāo)簽組件或者形狀組件。

3.2 調(diào)用代碼

下面為一段真實(shí)調(diào)用的例子代碼。

//-----------公用變量-------------------

Shape:Array[0..7] of TShape;

RzLabel:Array[0..7] of TRzLabel;

BackColor:Array[0..7] of TColor;

FrontColor:Array[0..7] of TColor;

PenColor:Array[0..7] of TColor;

PenErrColor:Array[0..7] of TColor;

Visible0:Array[0..7] of Boolean;

OKCaption:Array[0..7] of String;

ErrorCaption:Array[0..7] of String;

begin

//CALL 調(diào)用按鈕,在實(shí)際調(diào)用前依據(jù)通信協(xié)議及界面元素名稱賦值給公用變量。

Shape[0]:= Shape1;//實(shí)際形狀組件

Shape[1]:= Shape2;

......

RzLabel[0]:=RzLabel24;//實(shí)際標(biāo)簽組件,界面元素

RzLabel[1]:=RzLabel25;

......

inputB:=RzNumericEdit1.IntValue;//測(cè)試輸入數(shù)據(jù),或者協(xié)議中某狀態(tài)字節(jié)輸入變量。

Modellevel:=ModellevelByte;//狀態(tài)信息級(jí)別

Visible0[0]:=RzCheckBox9.Checked;//測(cè)試可視控制組件,

Visible0[1]:=RzCheckBox10.Checked;

......

OKCaption[0]:=RzEdit1.Text;//測(cè)試正確提示

OKCaption[1]:=RzEdit2.Text;

......

ErrorCaption[0]:=RzEdit9.Text;//測(cè)試異常提示

ErrorCaption[1]:=RzEdit10.Text;

......

FrontColor[0]:=RzColorComboBox1.SelectedColor;//測(cè)試前景色設(shè)置

FrontColor[1]:=RzColorComboBox2.SelectedColor;

.......

BackColor[0]:=RzColorComboBox9.SelectedColor;

BackColor[1]:=RzColorComboBox10.SelectedColor;//測(cè)試背景色設(shè)置

......

PenColor[0]:=RzColorComboBox17.SelectedColor;//測(cè)試字體前景顏色設(shè)置

PenColor[1]:=RzColorComboBox18.SelectedColor;

......

PenErrColor[0]:=RzColorComboBox25.SelectedColor;//測(cè)試字體背景

PenErrColor[1]:=RzColorComboBox26.SelectedColor;

......

//----------調(diào)用函數(shù)---------------------

DisplayLableLamp(InputB,

Modellevel,

RzLabel,

BackColor,

FrontColor,

PenColor,

PenErrColor,

Visible,

OKCaption,

ErrorCaption);

end;

3.3 標(biāo)簽可視化處理

函數(shù)參數(shù)為動(dòng)態(tài)數(shù)組,每一個(gè)輸入字節(jié)位都對(duì)應(yīng)一個(gè)參數(shù)值。實(shí)際調(diào)用時(shí)同時(shí)控制8個(gè)狀態(tài)指示。每一個(gè)都可以單獨(dú)設(shè)置表現(xiàn)效果。

下面說明如果應(yīng)用監(jiān)控程序中只有22種狀態(tài)指示時(shí)如何調(diào)用函數(shù)的方法。注意該函數(shù)每次處理8個(gè)狀態(tài),可視性控制變量控制到底有幾個(gè)顯示。這樣,當(dāng)只有22位狀態(tài)時(shí),函數(shù)仍處理為24個(gè)狀態(tài)指示,開發(fā)者需要在界面上放置24個(gè)可視組件,調(diào)用時(shí)將2個(gè)多余的可視組件Visible參數(shù)設(shè)置為假,這樣界面上就只顯示22個(gè)狀態(tài)指示。這樣,在工程應(yīng)用中,無論多少狀態(tài)指示問題,都可以用這一個(gè)函數(shù)統(tǒng)一方法處理,不過是多次調(diào)用而已。

4 調(diào)試樣例編程

為了調(diào)試出這個(gè)通用函數(shù),設(shè)計(jì)了一個(gè)專用調(diào)試界面,通過界面按位輸入組件及其它輸入?yún)?shù)設(shè)置可以調(diào)出各種指示效果。在應(yīng)用程序界面設(shè)計(jì)前,就可以給出各種未來指示效果,這樣在應(yīng)用程序開發(fā)時(shí)就提前設(shè)計(jì)出了實(shí)際效果。圖1為某天線伺服控制的監(jiān)控程序中某8個(gè)狀態(tài)指示位調(diào)用例子效果。

這三個(gè)通用函數(shù)解決了各種狀態(tài)指示問題,特別是使用Tshape和Timage時(shí)可以制作為狀態(tài)各異的效果。如果希望作出更專業(yè)的效果,可以將這些組件換成專業(yè)的第三方組件包中的相應(yīng)組件。例如Raize組件包等,這樣制作出的狀態(tài)指示將會(huì)更酷炫。

形狀與圖形函數(shù)(應(yīng)用Timage組件和Tshape組件)同理。

5 結(jié)語

本文介紹了使用Delphi XE10開發(fā)工具設(shè)計(jì)的一套狀態(tài)指示統(tǒng)一函數(shù)處理方法,與具體控制工程項(xiàng)目無關(guān)。在實(shí)際使用中,結(jié)合具體控制項(xiàng)目協(xié)議定義,只需賦值各參數(shù)與界面元素一致。調(diào)用時(shí)自動(dòng)給出效果,這種處理方法解決了所有這一類問題。本文給出的調(diào)用例子可以給出每一位的表現(xiàn)效果,在正式開發(fā)程序之前,就可以提前看到執(zhí)行效果并觀察各種字體、配色等是否合適。

應(yīng)用其它語言開發(fā)時(shí),如果使用該方法設(shè)計(jì)出相似的功能函數(shù)同樣可以解決各種狀態(tài)指示問題,構(gòu)造的通用函數(shù)可在多個(gè)工程項(xiàng)目中使用。這將節(jié)約大量有關(guān)狀態(tài)指示需要處理的代碼段編程,大幅提升編程效率。

參考文獻(xiàn)

[1]蔡文齋.實(shí)時(shí)監(jiān)控程序的實(shí)驗(yàn)室快速調(diào)試開發(fā)[J].計(jì)算機(jī)與網(wǎng)絡(luò),2015(02):58-62.

[2]蔡文齋.全抽象監(jiān)控軟件實(shí)現(xiàn)[J].飛行器測(cè)控學(xué)報(bào),2009(04):65-68.

[3]王艷平(著).Windows網(wǎng)絡(luò)與通信程序設(shè)計(jì)(第2版)[M].北京:人民郵電出版社,2009(01):203-210.

[4]蔡文齋,王錄選.跟蹤、隨動(dòng)系統(tǒng)監(jiān)控軟件設(shè)計(jì)[J].現(xiàn)代電子技術(shù),2007(03):29-31.

[5]周愛民(著).Delphi源代碼分析[M].北京:電子工業(yè)出版社,2004(09):193-205.

[6]蘇春曉,王鵬.基于網(wǎng)絡(luò)的數(shù)字示波器遠(yuǎn)程集中軟件平臺(tái)[J].太赫茲科學(xué)與電子信息學(xué)報(bào),2014,12(06):884-889.

[7]趙曉玲(著).可視化程序設(shè)計(jì)—Delphi [M].北京:機(jī)械工業(yè)出版社,2005(01):251-258.

[8]周愛民(著).Delphi源代碼分析[M].北京:電子工業(yè)出版社,2004(09):193-205.

[9]Jeffrey Richter(著),王書洪,劉光明(譯).Windows高級(jí)編程指南(第3版)[M].北京:清華大學(xué)出版社,1999(01):263-269.

[10]朱漢民(著).Delphi7高級(jí)應(yīng)用開發(fā)教程[M].北京:科學(xué)出版社,2006(01):215-218.

作者簡介

張翔宇(1983-),河北省秦皇島市人。碩士學(xué)位。工程師。主要研究方向?yàn)檫b感信息接收與處理、計(jì)算機(jī)仿真等。

蔡文齋(1962-),陜西省西安市人。工程碩士。高級(jí)工程師。主要研究方向?yàn)楹教鞙y(cè)控工程開發(fā)研究、工程控制類應(yīng)用開發(fā)研究,軟件測(cè)試等。

劉劍鋒(1972-),黑龍江省綏化市人。博士學(xué)歷。高級(jí)工程師。主要研究方向?yàn)楹教鞙y(cè)控工程開發(fā)研究,遙感信息處理等。

作者單位

1.北京市遙感信息研究所 北京市 100011

2.中國電子科技集團(tuán)公司第39研究所 陜西省西安市 710065

猜你喜歡
協(xié)議
基于數(shù)字化變電站SV報(bào)文通信可靠性問題研究
基于物聯(lián)網(wǎng)技術(shù)的多電機(jī)監(jiān)控系統(tǒng)的設(shè)計(jì)
包头市| 高陵县| 七台河市| 光山县| 寿宁县| 呼伦贝尔市| 射阳县| 台湾省| 建宁县| 南岸区| 新竹市| 新建县| 江山市| 隆昌县| 敦煌市| 大城县| 宜丰县| 柳江县| 翁牛特旗| 漳州市| 沁水县| 华宁县| 韶山市| 始兴县| 佳木斯市| 玉屏| 浠水县| 文安县| 紫阳县| 芦山县| 曲沃县| 灵山县| 清水河县| 城口县| 闵行区| 腾冲县| 龙井市| 太康县| 嘉黎县| 宜宾县| 许昌县|