在对设备的状态进行监控中,往往要取得一些参数来记录和分析设备的运行状况。这其中就包括设备的启动时间、停止时间和运行的时长。当然,组态软件不会有这样的功能,让我们轻易实现。不过,通过组态软件的报表功能,再通过二次开发,写一些脚本语言。实现起来倒也不难。以下,以组态王为例,是对操作过程的描述,希望能够对需要的人有一些帮助。
之前写过一个方案,使用大量的内存变量和报表来实现。后经过思考,找到了一种更加方便的方法,可以不用建立那么多的内存变量,使用数据库就可以完成该方案的实施。使用组态王的“KVADODBGRID”控件将数据库表中的数据显示出来。
1、使用access数据库,建立数据库表,命名“DeviceInfo”。
2、组态王建立内存变量。
3、创建记录体。
4、关联数据源。
5、自定义函数。
函数内容如下所示。
if (var==1)
{
//写入数据库,字段赋值
\\本站点\DB_DESC=name;
\\本站点\DB_START=\\本站点\$日期+" "+\\本站点\$时间;
\\本站点\DB_END=" ";
\\本站点\DB_LENGTH=" ";
SQLInsert( DeviceID, "DeviceInfo", "BIND" );//向数据中,插入一条记录
}
else
{
string whrStr="描述='"+name+"' and 结束时间='" + " '" ;
string selStr="select * from DeviceInfo where " + whrStr;
SQLSetStatement( DeviceID, selStr);
SQLExecute( DeviceID, "BIND",0 );
string startStr = \\本站点\DB_START;
//开始时间转换秒 2011-05-06 12:23:34
string midY=StrMid ( startStr, 1, 4 );
string midM=StrMid ( startStr, 6, 2 );
string midD=StrMid ( startStr, 9, 2 );
string midH=StrMid ( startStr, 12, 2 );
string midMi=StrMid ( startStr, 15, 2 );
string midS=StrMid ( startStr, 18, 2 );
long lY=StrToInt ( midY);
long lM=StrToInt ( midM);
long lD=StrToInt ( midD);
long lH=StrToInt ( midH);
long lMi=StrToInt ( midMi);
long lS=StrToInt ( midS);
long startTime= HTConvertTime (lY,lM,lD,lH,lMi,lS);
long endTime= HTConvertTime (\\本站点\$年,\\本站点\$月,\\本站点\$日,\\本站点\$时,\\本站点\$分,\\本站点\$秒);//结束时间转换秒
//计算时间差
long timeLength=endTime-startTime;//单位秒
string endStr=StrFromInt ( timeLength, 10 )+"秒";
//写入数据库,所有字段重新赋值
\\本站点\DB_END=\\本站点\$日期+" "+\\本站点\$时间;
\\本站点\DB_LENGTH=endStr;
//设置查询条件,当条件相同时更新数据库中的记录
SQLUpdate( DeviceID, "DeviceInfo", "BIND", whrStr);
}
6、数据改变命令语音,引用自定义函数。
7、运行