组态王如何记录设备的启停时间及运行时间
- 格式:doc
- 大小:51.00 KB
- 文档页数:3
皖西学院监控组态软件实验指导书机械与电子工程学院电气工程教研室2013.3实验一监控组态工程建立与工艺流程图绘制一、实验目的熟练掌握工控组态软件的绘图工具二、实验内容熟悉工控组态软件的绘图工具,完成反应工段工艺流程绘制以及外部设备和变量的定义。
三、实验步骤1.1创建工程在工程管理器中选择菜单“文件/新建工程”,或者点击工具栏的“新建”按钮,根据“新建工程向导”对话框完成工程创建,如图一所示图一工程管理器1.2 组态画面双击工程管理器中的工程,打开工程浏览器,在工程浏览器中左侧的“工程目录显示区”中选择“画面”,在右侧视图中双击“新建”,弹出新建画面对话框如图一所示。
图二画面属性设置点击图二确定按钮后,在工具箱和图库中选中相应图素进行监控画面组态,绘制工艺流程图如图三所示。
图三反应车间监控画面1.3定义设备根据工程中实际使用得设备进行定义,本例程使用亚控的仿真PLC设备,使用“PLC-亚控-仿真PLC-串口”驱动,定义设备名称为“PLC”。
1.4定义变量在组态王中定义三个变量:原料油液位(IO实数类型)、成品油液位(IO实数类型)、催化剂液位(IO实数类型)。
原料油液位变量:最小值0,最大值100,最小原始值0,最大原始值100,连接设备PLC,寄存器DECREA100,数据类型short,读写属性为只读,采集频率1000。
记录和安全区选择“数据变化记录”,变化灵敏度选择“0”。
催化剂液位变量:最小值0,最大值100,最小原始值0,最大原始值100,连接设备PLC,寄存器DECREA100,数据类型short,读写属性为只读,采集频率1000。
记录和安全区选择“数据变化记录”,变化灵敏度选择“0”。
成品油液位变量:最小值0,最大值200,最小原始值0,最大原始值200,连接设备PLC,寄存器INCREA200,数据类型short,读写属性为只读,采集频率1000。
记录和安全区选择“数据变化记录”,变化灵敏度选择“0”。
用组态王报表实现显示设备启动、停止时间和运行时长的方法在对设备的状态进行监控中,往往要取得一些参数来记录和分析设备的运行状况。
这其中就包括设备的启动时间、停止时间和运行的时长。
当然,组态软件不会有这样的功能,让我们轻易实现。
不过,通过组态软件的报表功能,再通过二次开发,写一些脚本语言。
实现起来倒也不难。
以下,以组态王为例,是对操作过程的描述,希望能够对需要的人有一些帮助。
总体思路:以一个项目为例。
在这个工程中,有21台设备的运行状态需要记录,他们的运行状态依次记录在报表中。
报表中的每一行都表示,此设备的一个运行周期。
由于设备状态在报表中依次排列,因此需要相应的变量来保存该设备状态所在的行数。
这样,当停止该设备时,才能将“停止时间”和“运行时长”填充到正确的位置。
这样,就需要建立21个内存整形变量。
由于报表中的记录依次排列,因此还需要一个变量来保存报表中最后一条记录的行数,这样才能顺序填充记录。
1、新建报表,并命名为“报表1”。
2、创建内存整形变量。
21个内存变量分别保存21个设备状态所在的行数。
1个内存变量保存报表中最后一条记录的行数。
3、编写自定义函数,好处是减少代码量,修改方便。
脚本内容具体如下//"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:34string 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、建立设备启动或停止的运行事件命令。
组态王使用问题解答1 关于Microsoft Date and Time Picker控件,我按你说的做。
在大部分情况下可以查到数据了。
但是如果是小于10的时间数,就又不对了。
比如在“Microsoft Date and Time Picker"控件中输入08:15:10 则按钮下命令语言执行完报警查询起始时间=hour1+"时"+minute1+"分"+second1+"秒"; 后得到的是8时15分10秒而不是所需要的08时15分10秒。
少了一个0字就又查不到数据了。
请赐教,该如何解决之。
用IF语句做一下判断若小于10时在前面加“0”3 兰精灵关于设置模拟量参数输出不稳定的问题?急!关于设置模拟量参数输出不稳定的问题?我的一段程序使用6.02开发的前端使用的是三菱fx2n,通讯和采集数据都正常,但是我设置一个地址比如“d120”为最大值时,模拟量输出时是最大值但很快就掉到零,然后又恢复到最大值。
输出就不停这样变换,我要的是一个稳定输出最大值,未何会掉到零。
(去掉组态王后,只看plc输出是对的)。
最大值和最大原始值要一样最小值和最小原始值要一样请检查具体设置4 为什么VIEW的时候会提示:“创建协议组件失败”??我从别人这COPY了一个工程,但VIEW的时候会提示:“创建协议组件失败”是的工程不能在线运行!请问有什么方法可以解决这问题?!请安装组态王提供的硬件驱动程序5 怎么不能驱动呀[求助] 我问下啊,下载的驱动程序是哪个版本的呀?我现在用的是6.01版的,我怎么驱动不上啊如果驱动程序不分版本,请问怎么驱动呀?我是双机后,点搜索,可是怎么装不上呢?先把组态王提供的驱动程序包(至少应该包括以下几个文件:××.Dll,DEVLST.DAT,××.REG)拷入除组态王路径外的任一路径下安装驱动程序:“搜索亚控产品”选中搜索到的再安装驱动程序最好安装网站上提供的最新驱动6 如何使用KVDBGrid实现数据查询?当要查询数据库的AlarmDate,输入为:grid.Where=“AlarmDate=”+\\本站点\查询日期7 组态王6.03"创建协议组件失败",是何错误,如何处理!您查看一下您所用的设备的驱动程序是否安装,如果没有安装的话,可能会出现这种情况8 再问一个关于实时报表的问题我按着组态王提供的example自己做的例子,语句和例子里的差不多,但是在运行的时候实时报表无法显示当前时间段里的变量变化情况。
例程说明文档目录1. 功能概述 (1)2. 工程实例 (1)3. 操作步骤 (1)3.1 定义设备 (1)3.2 定义变量 (1)3.3 制作画面 (2)3.4 进入运行系统 (10)4. 注意事项 (14)1. 功能概述常规需求:很多工业现场会存储数据并对存储的历史数据进行查询、打印输出。
历史数据查询一般为起始时间、结束时间、间隔时间都不固定,最终用户根据实际需要进行查询。
组态王中的实现方法:利用组态王内置报表以及报表的函数来实现对历史数据的查询。
组态王内置报表的操作类似excel,操作简单、方便,并且组态王提供了大量的报表函数来实现各种复杂功能。
2. 工程实例我们举一个例子来说明实现方法。
在此例程中我们定义五个变量,分别为“压力”、“温度”、“密度”、“电流”、“电压”,运行系统运行后记录历史数据,下面就以此为例来演示完成这一要求的具体步骤。
3. 操作步骤3.1定义设备根据工程中实际使用得设备进行定义,本例程使用亚控的仿真PLC设备,使用“PLC -亚控-仿真PLC-串口”驱动,定义设备名称为“PLC”。
3.2定义变量在组态王中定义五个变量:压力(IO实数类型)、温度(IO实数类型)、密度(IO 实数类型)、电压(IO实数类型)、电流(IO实数类型)。
压力变量:最小值0,最大值100,最小原始值0,最大原始值100,连接设备PLC,寄存器INCREA100,数据类型short,读写属性为只读,采集频率1000。
记录和安全区选择“数据变化记录”,变化灵敏度选择“0”。
温度变量:最小值0,最大值50,最小原始值0,最大原始值100,连接设备PLC,寄存器DECREA100,数据类型short,读写属性为只读,采集频率1000。
记录和安全区选择“数据变化记录”,变化灵敏度选择“0”。
密度变量:最小值0,最大值1,最小原始值0,最大原始值100,连接设备PLC,寄存器INCREA100,数据类型short,读写属性为只读,采集频率1000。
历史数据查询1. 功能概述常规需求:很多工业现场会存储数据并对存储的历史数据进行查询、打印输出。
历史数据查询一般为起始时间、结束时间、间隔时间都不固定,最终用户根据实际需要进行查询。
组态王中的实现方法:利用组态王内置报表以及报表的函数来实现对历史数据的查询。
组态王内置报表的操作类似excel,操作简单、方便,并且组态王提供了大量的报表函数来实现各种复杂功能。
2. 工程实例我们举一个例子来说明实现方法。
在此例程中我们定义五个变量,分别为“压力”、“温度”、“密度”、“电流”、“电压”,运行系统运行后记录历史数据,下面就以此为例来演示完成这一要求的具体步骤。
3. 操作步骤3.1定义设备根据工程中实际使用得设备进行定义,本例程使用亚控的仿真PLC设备,使用“PLC-亚控-仿真PLC-串口”驱动,定义设备名称为“PLC”。
3.2定义变量在组态王中定义五个变量:压力(IO实数类型)、温度(IO实数类型)、密度(IO实数类型)、电压(IO实数类型)、电流(IO实数类型)。
压力变量:最小值0,最大值100,最小原始值0,最大原始值100,连接设备PLC,寄存器INCREA100,数据类型short,读写属性为只读,采集频率1000。
记录和安全区选择“数据变化记录”,变化灵敏度选择“0”。
温度变量:最小值0,最大值50,最小原始值0,最大原始值100,连接设备PLC,寄存器DECREA100,数据类型short,读写属性为只读,采集频率1000。
记录和安全区选择“数据变化记录”,变化灵敏度选择“0”。
密度变量:最小值0,最大值1,最小原始值0,最大原始值100,连接设备PLC,寄存器INCREA100,数据类型short,读写属性为只读,采集频率1000。
记录和安全区选择“数据变化记录”,变化灵敏度选择“0”。
电流变量:最小值30,最大值50,最小原始值0,最大原始值100,初始值为30,连接设备PLC,寄存器DECREA100,数据类型short,读写属性为只读,采集频率1000。
精心整理组态王常用命令语言函数速查手册组态王命令语言函数手册―组态王‖支持使用内建的复杂函数,其中包括字符串函数、数学函数、系统函数、控件函数、报表函数及其他函数,下面依次介绍各个函数(函数名不区分大小写,按字母排序):Abs此函数用于计算变量值的绝对值,使用格式如下: Abs(变量名或数值); 返回值:整值或实型值; 例如: Abs(14); 返回值为14 Abs(-7.5); 返回值为7.5Abs(距离); 返回内存模拟变量―距离‖的绝对值。
Ack对变量进行报警确认,或对报警组进行报警确认。
如果函数参数为变量名称,则只对该变量进行报警确认;如果函数参数为报警组名称,则确认所有属于该报警组及其子报警组的变量。
该函数的参数只能是变量名或报警组名,不可以为字符串变量。
此函数常用于按钮命令语言,当发生报警时,用此函数进行报警确认,它将产生确认报警事件。
调用格式: Ack(报警组名); 或 Ack(变量名); 例如: Ack(全厂); 或 Ack(反应罐液位);ActivateApp activate['ækt?ve?t] vt. 刺激;使活动;使活泼;使产生放射性app [æp]n.应用程序此函数用于激活正在运行的窗口应用程序,使之变为当前窗口。
获得输入焦点。
该函数也可配合函数SendKeys的使用。
调用形式: ActivateApp(―ExeName‖);参数:ExeName 应用程序的执行文件名例如:激活Microsoft Word的正确调用为: ActivateApp("Word.exe"); ArcCos arc[ɑ?k] adj. 圆弧的;反三角函数的此函数用于计算变量值的反余弦值, 变量值的取值范围在[-1,1]之间,否则函数返回值无效。
调用格式: ArcCos(变量名或数值); 返回值:整值或实型值; 例如: ArcCos(1); 此函数返回值为0 ArcCos(temp); 此函数返回变量―temp‖的反余弦值。
1、组态王与外部设备连接工程管理系统---设备—选择合适的方式----双击新建---设备选择---设备命名----选择与设备连接相一致的COM口----2、新建工程工程管理器---新建---工程保存地址选择---工程名与工程描述3、数据变量分两大类:一类是内存,一类是I/O(与外部设备的数据通信).每一类又分成整数、实数、离散(布尔量只有0和1)、字符串(长度128个字符)4、动画连接在数据词典定义变量如原料油液位,设置连接外部设备的参数在开发系统里画面连接好后,双击各个设备进行动画连接。
未定义的仪器仪表要在数据词典定义,如阀门。
管道动画连接时双击出现窗口后选‘流动’按钮进行设置5、画面的切换在开发系统工具板选怎菜单项----双击它---在菜单项空白处单击会出现新建项和新建子项----设好菜单项后点击命领语言----输入程序If(MenuIndex==0) //// MenuIndex指的是主项0表示第一个主项ShowPicture("监控");/////要显示的画面If(MenuIndex==1&&ChildMenuIndex==0)////第二个主项里的第一个子项ShowPicture("偶了"); If(MenuIndex==2)ShowPicture("abc");If(MenuIndex==3)ShowPicture("edf");If(MenuIndex==1&&ChildMenuIndex==1) ////第二个主项里的第二个子项ShowPicture("q");If(MenuIndex==3&&ChildMenuIndex==0)ShowPicture("e");6、报警工程管理报警组----设置报警组----------数据词典双击要报警的变量如原料油液位----点击报警定义进行设置------开发系统新建画面---工具板上选择报警键进行拖拽出现报警表----双击进行命名(名字要在数据词典里定义)列属性选择要现在报警表里的项目----还可以在画面上将原料油液位要报警的数值在画面上显示出来,就是添加文本然后双击和数据词典里的液位进行关联。
附录B 利用Excel做报表输出一、“组态王”进行历史数据记录的方式按变化灵敏度记录若在“数据库\变量定义”中使“是否记录”有效的话,“组态王”则对此变量自动进行历史记录。
因为“组态王”是以实时数据库为核心运转的,从下位机传送上来的数据,按一定的频率刷新实时数据库,每当刷新实时数据库时,“组态王”便对作历史记录的变量进行判断,以便决定是否记录。
并不是每次刷新实时数据库时,“组态王”便对作历史记录的变量进行记录,若是那样的话,假定变量更新频率为0.5秒的话,那将每隔0.5秒作一个历史记录,这会造成硬盘空间的巨大浪费。
“组态王”是用数据压缩的方式进行记录,在“数据词典”中规定“是否记录”有效的同时,还需定义“记录变化灵敏度”,该域缺省值为1,用户应避免将其设为0,除非该变量的刷新频率很低。
“组态王”根据“记录变化灵敏度”对变量进行判断,只有当变量的变化幅度(相对上一次历史记录点)大于等于“记录变化灵敏度”值时,才对此变量作一次记录,下图描述了这种记录方式,若规定某变量的变化灵敏度为4,则记录情况如下:“记录变化灵敏度”是一个很重要的参数,此值若规定太大,会造成记录准确性下降,此值若太小,则会造成记录点过多,用户应根据实际情况,选择此值大小。
☞定时记录在很多情况下,“组态王”采用变化灵敏度的方式对数据作历史记录的方式并不能满足用户的需求,例如:电力调度系统中,需要对电度量作整点记录。
若采用灵敏度方式会造成硬盘空间的浪费,“组态王”通过”定时记录”功能,来满足这方面的需求,整点记录最小的时间间隔为一分钟。
二、历史数据在硬盘上的存储方式所有变量的历史记录会按照时间顺序统一存到硬盘上的带有时间信息的文件中。
每天生成一个文件,扩展名为“.std”。
“组态王”可以通过定义的网络结构进行网络存储。
三、组态王提供的VBA接口及其函数“组态王”的历史数据查询不仅能够通过组态王本身进行本地或远程的查询,包括报表、历史趋势曲线等形式。
1:准备工作
设备状态变量:泵,离散值,=1时启动,=0时停止。
新建内存字符串变量:启动时间,停止时间,设备名称新建内存整数变量:运行时间
配置数据库odbc连接
新建表格模板及对应的记录体
2:运行启动时输入“SQLConnect( DeviceID, "dsn=sa;uid=root;pwd=123"); SQLCreateTable( DeviceID, "sbyxsj", "mb" );”
连接数据库及新建数据表
3:在事件函数中添加:
在发生时输入:\\本站点\启动时间=\\本站点\$时间;
存在时输入:\\本站点\泵运行时间=\\本站点\泵运行时间+3;
结束时输入:\\本站点\停止时间=\\本站点\$时间;
\\本站点\泵运行时间=\\本站点\泵运行时间/60;
\\本站点\设备名称="beng1";
SQLInsert( DeviceID, "sbyxsj", "jlt" );
4:在画面添加ado控件,连接对应数据库中表格,运行后在ado控件中查看历史记录如下图所示:。