跨平台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。

 

 

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