[转载]用组态王报表实现显示设备启动、停止时间和运行时长的方法
2018-01-18 20:41阅读:
用组态王报表实现显示设备启动、停止时间和运行时长的方法
在对设备的状态进行监控中,往往要取得一些参数来记录和分析设备的运行状况。这其中就包括设备的启动时间、停止时间和运行的时长。当然,组态软件不会有这样的功能,让我们轻易实现。不过,通过组态软件的报表功能,再通过二次开发,写一些脚本语言。实现起来倒也不难。以下,以组态王为例,是对操作过程的描述,希望能够对需要的人有一些帮助。
总体思路:以一个项目为例。在这个工程中,有21台设备的运行状态需要记录,他们的运行状态依次记录在报表中。报表中的每一行都表示,此设备的一个运行周期。由于设备状态在报表中依次排列,因此需要相应的变量来保存该设备状态所在的行数。这样,当停止该设备时,才能将“停止时间”和“运行时长”填充到正确的位置。这样,就需要建立21个内存整形变量。由于报表中的记录依次排列,因此还需要一个变量来保存报表中最后一条记录的行数,这样才能顺序填充记录。
1、
新建报表,并命名为“报表1”。
![[转载]用组态王报表实现显示设备启动、停止时间和运行时长的方法 [转载]用组态王报表实现显示设备启动、停止时间和运行时长的方法](http://s11.sinaimg.cn/bmiddle/881b98cbhaa1e6092486a&690)
2、
创建内存整形变量。21个内存变量分别保存21个设备状态所在的行数。1个内存变量保存报表中最后一条记录的行数。
![[转载]用组态王报表实现显示设备启动、停止时间和运行时长的方法 [转载]用组态王报表实现显示设备启动、停止时间和运行时长的方法](http://s13.sinaimg.cn/bmiddle/881b98cbhaa1e6444641c&690)
3、
编写自定义函数,好处是减少代码量,修改方便。
![[转载]用组态王报表实现显示设备启动、停止时间和运行时长的方法 [转载]用组态王报表实现显示设备启动、停止时间和运行时长的方法](http://s14.sinaimg.cn/bmiddle/881b98cbhaa1e65998d3d&690)
脚本内容具体如下
//'var'是变量的名称,'name'是要显示在报表中的字符串,'varRow'是保存记录的行数
//用年月日,时分秒,系统变量来组合形成日期。
//不用日期变量,因为其格式长度不确定,在后来的分解中会很麻烦。
string strY=StrFromInt( \本站点$年, 10 );
string strM=StrFromInt( \本站点$月, 10 );
string strD=StrFromInt( \本站点$日, 10 );
string strH=StrFromInt( \本站点$时, 10 );
string strMi=StrFromInt( \本站点$分, 10 );
string strS=StrFromInt( \本站点$秒, 10 );
//确定日期的格式,并使长度和位置固定
if(\本站点$月<10)
strM='0'+strM;
if(\本站点$日<10)
strD='0'+strD;
if(\本站点$时<10)
strH='0'+strH;
if(\本站点$分<10)
strMi='0'+strMi;
if(\本站点$秒<10)
strS='0'+strS;
//组合,定义格式
string str=strY+'-'+strM+'-'+strD+'
'+strH+':'+strMi+':'+strS;
//启动设备时,将“序号”、“名称”、“启动时间”填充到报表中
if(var==1)
{
long num=报表当前行-1;
string id=StrFromInt( num, 10 );
ReportSetCellString('报表1', 报表当前行, 1, id);//序号
ReportSetCellString('报表1', 报表当前行, 2, name);//名称
ReportSetCellString('报表1', 报表当前行, 3, str);//开始时间
varRow=报表当前行;//所在行=报表当前行
报表当前行=报表当前行+1;
}
//停止设备时
else
{
string startStr=ReportGetCellString('报表1', varRow,
3);//从报表中取得开始时间
//开始时间转换秒
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;//单位秒
//秒转换为小时
//timeLength=timeLength/3600;
string endStr=StrFromInt( timeLength, 10 )+'秒';
//将“停止时间”和“运行时长”填充到报表中
ReportSetCellString('报表1', varRow, 4, str);//结束时间
ReportSetCellString('报表1', varRow, 5, endStr);//时间长度
}
4、
建立设备启动或停止的运行事件命令。只需调用自定义函数,并将填写相应的变量即可。如:SetReport(\本站点冰水循环泵2运行,'冰水循环泵2',\本站点冰水循环泵2所在行);
![[转载]用组态王报表实现显示设备启动、停止时间和运行时长的方法 [转载]用组态王报表实现显示设备启动、停止时间和运行时长的方法](http://s1.sinaimg.cn/bmiddle/881b98cbhaa1e66cf6450&690)
5、
运行程序
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
(374669416)是我的扣扣号。每天9:00到17:00,我多数会在线上。如果有需求或有需要帮助的,请联系我,我定会在第一时间给您回复。
(13895761934)是我的手机号,所在地是哈尔滨的,因为那是我的老家,我爱我的家乡。打电话或发短信都可以,有什么问题我们一起交流。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~