紫金桥组态软件系统自带的报警功能的处理逻辑是一次达到报警条件后,如果现场测量值一直满足当前的报警条件,那么只会提示最开始的第一条报警记录。但是如果需要在发生报警后,当前现场测量值继续满足报警条件还要给出报警提示时,这样就需要进行二次开发,下面的示例就给出了一个针对这种需求的解决方法。
用户具体需求是:当现场测量值满足条件(这里假定是大于3.9或者小于3.5)触发报警之后,立刻报警。下一条数据也满足条件时也要触发报警(不能不报)。具体是,如果收到的数据一直不在3.5~3.9的范围内且值不变化则60秒报一次警,如果收到的数据一直不在3.5~3.9的范围内,且值是变化的同步产生报警。下面以偏差报警为例进行说明。
下图是功能实现的流程图:
具体实现:
一、画面图元组态1、在工程目录下新建了一个Access数据库并新建了一个数据表ALM1如下图:
2、在点组态里新建模拟点TEST、TEST1、TEST2和报表关系数据源点RP如下图:
3、新建了中间变量RECY。(下文会交代它的作用)
4、组态报表关系源点连接字符串,具体就是点击图中连接字符串文本框后面的按钮进行配置如下图:
最终生成的字符串为:
“Provider=Microsoft.Jet.OLEDB.4.0;Data Source=”+GetAppPath()+“\Sql\AlmDB.mdb;User Id=admin;Password=;”
5、在紫金桥开发环境里新建一个窗口Draw1、一个自由报表ALM、一个文本对象、一个按钮如下图:
6、关联文本对象的动画连接——TEST.PV的模拟输入输出,用于手动改变TEST.PV的值,模拟现场情况。
7、关联按钮的动画连接鼠标脚本:#ALM.SaveExcel(“”,1,1);后边要通过查看保存的Excel文件来验证系统是否可以实现预期功能。
二、系统控制逻辑组态1、窗口脚本周期脚本组态,这部分脚本主要是要实现系统流程图中的从关系数据表读入数据并显示在报表控件上。如下图:
2、在自由报表ALM/自由报表设置/关系库连接设置里,组态了报表关系库源点,如下图:
3、在应答后触发的脚本/SQL正确返回脚本中,实现判断当前TEST.PV是否满足偏差报警条件,如果满足就把变量RECY置1否则置0,这里RECY是一个中间变量起到触发向关系库插入报警记录的开关作用。脚本如下图:
4、画面/脚本/条件脚本组态,这里我们新建了一个条件脚本InsertRecord如下图,并进行脚本控制逻辑组态如下图:
通过这个条件脚本实现了向关系库插入报警记录的逻辑。
三、运行工程,测试系统实际效果1、手动改变TEST.PV=9.7满足偏差报警条件大于3.9或者小于3.5保持一段时间如下图:
2、手动改变TEST.PV=3.6不满足偏差报警条件(大于3.9或者小于3.5)
3、手动改变TEST.PV=1满足偏差报警条件(大于3.9或者小于3.5)保持一段时间
4、点击“导出”按钮保存自由报表的内容为excel格式文件。
5、打开Excel表格如下图:
6、分析表格记录
通过对表格的分析我们可以得出清晰的结论:
(1)如果当前现场测量值满足报警条件且和前一个报警值不一致则也会产生报警,即插入关系数据表并在自由报表上显示。如表格中的第一条记录TEST.PV=0和第二条记录TEST.PV=9.7。
(2)如果当前现场测量值满足报警条件并且不变则系统会向关系数据表中60秒插一条记录并显示在自由报表控件上例如当TEST.PV=9.7时。即符合用户关于“如果收到的数据一直不在3.5~3.9的范围内则60秒报一次警”的需求。
(3)如果当前报警值不符合报警条件就不会产生报警例如:令TEST.PV=3.6在导出的表格里没有记录。即系统只会记录报警记录。
(4)当现场测量值由正常值变成符合报警条件的值时,立刻就会产生一条报警例如:TEST.PV=3.6变成TEST.PV=1就会产生报警。Excel表格中第14条记录就当
TEST.PV=3.6变成TEST.PV=1时产生的报警。
综上,经测试系统达到了用户的需求并能正确稳定运行。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)