跨平臺SCADA系統(組態軟件)開發2

二、數據模型

整個SCADA系統,其功能其實是對數據流動的控制,如下圖所示:

(1)採集模塊是系統的入口,所有數據來自採集模塊。

(2)採集到的數據是實時變化的,而數據庫可能要求1分鐘或1小時存放一條數據,這時候需要對數據進行採樣。

(3)原始數據或許只是數字,而我們在展現時,會要求顯示單位、保留一定的小數位數,又或者,什麼數字代表什麼狀態,這就要求對數據進行一定的格式化。

(4)數據經過整理之後,按照一定的通信協議上傳至服務器。

那作爲系統核心的數據,究竟以怎樣的格式進行存放呢?
 

上位機對一臺儀器的操作,無非包含以下幾項內容:

(1)讀取其測量數值。

(2)讀取其狀態。

(3)發送命令,執行某項任務。

可以發現,一般開發語言裏的“屬性”這一概念,剛好能表達上述內容。例如:

public double Temperature { get; set; }

public string RunningState { get; set; }

private int runningMode;
public int RunningMode
{
    get
    {
        return runningMode;
    }

    set
    {
        runningMode = value;
        //執行其他動作
    }
}

我們轉換一下名稱,把設備的所有這些屬性,稱爲“因子”。存在3種主要類型的因子:

測量因子:代表儀器的測量值,例如溫溼度計的溫度值、溼度值。

狀態因子:代表儀器的狀態,例如儀器是否正在運行、是否在線等。

反控因子:代表對儀器的操作,例如關閉儀器、調高溫度等。

那麼,代表儀器的數據,都具有以下的形式:

設備名.因子名 = 值

我們可以使用一個列表List,或一個字典Dictionary,去存儲這一形式的數據。

 

採集模塊,需要把各種各樣的儀器數據,整理成上述形式。同時,需要把上述形式的數據,解析成儀器具體的數據類型。例如,某個溫溼度計,在地址爲6的寄存器上,存放了溫度的10倍整數值。那麼,採集模塊應該完成以下的工作:

溫溼度計.溫度=(地址爲6的寄存器值)/10。

上式的等號,在代碼裏面就是讀寄存器。

然後,當我們要設定一個值時,其完成的工作就是:

(地址爲6的寄存器值)=溫溼度計.溫度*10

上式的等號,在代碼裏面就是寫寄存器。

在採集模塊開發完成以後(我們在下一章講述採集模塊的開發細節),上層模塊操作數據的方式就變得非常簡單明瞭了。舉個例子,組態模塊的開發:當我們要在某個地方顯示溫度時,可以拖一下文本框到那個地方,然後把文本框的內容輸入爲:{溫溼度計.溫度}。如果我們想點擊一個按鈕,即改變當然溫度,可以在按鈕的命令內容裏,寫:{溫溼度計.溫度}=25。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章