Intouch/ifix语音报警系统制作(3-利用自定义过程和函数,重构先前版本)
在语音模块嵌入了半年左右的时间,经过实际使用发现,代码冗余,重复太多,维护较难,新增也不易,故而对整个框架进行整理,实现简单添加,维护容易的目的。
1.代码优化
1.1构建自定义过程
name 参数代表设备名
tt代表要打开的画面名(故障画面/报警画面)
sqll代表要存入数据库的内容(故障/报警)
Public Sub Sound(ByVal name As String, ByVal tt As String, ByVal sql As String)
On Error Resume Next
Dim workspace As Object
Set workspace = GetObject("", "Workspace.Application")
Dim tagvar As Object
Set tagvar = workspace.Documents("User").Page.FindObject("PicNumBer")
tagvar.Description = name
Dim TOP As Integer
Dim LEFT As Integer
TOP = Int((50 * Rnd) + 1)
LEFT = Int((50 * Rnd) + 1)
Dim StrD As String
Dim userid As String
Dim username As String
Dim groupname As String
System.FixGetUserInfo userid, username, groupname
StrD = Format(Now, "yyyy-mm-dd hh:mm:ss")
Set conODBC = New ADODB.Connection
conODBC.ConnectionString = "DSN=QPWS;UID=sa;PWD=;"
conODBC.Open "QPWS", "sa", ""
conODBC.Execute "insert into kaitingshijian(DateTimee,mingcheng,neirong,operator) values ('" + StrD + "','" + name + "', '" + sql + "', '" + username + "')"
conODBC.Close
openpicture tt, "", TOP, LEFT, 0, , NONE, "", True
End Sub
1.2 调度内容重构
直接使用关键字Call 自定义过程名的方法来使用。
Private Sub FixEvent1_WhileTrue()
Call Sound("二期粗格栅1号污水泵", "故障报警.grf", "故障")
End Sub
2.细节优化
2.1调度后台被关闭时,自动打开
由于本系统依赖于后台事件调度,故而保持fixbackground.exe后台的运行很关键。
编写函数(摘抄于网上大神)
Public Function CheckExeIsRun(exeName As String) As Boolean
On Error GoTo Err
Dim WMI
Dim Obj
Dim Objs
CheckExeIsRun = False
Set WMI = GetObject("WinMgmts:")
Set Objs = WMI.InstancesOf("Win32_Process")
For Each Obj In Objs
If (InStr(UCase(exeName), UCase(Obj.Description)) <> 0) Then
CheckExeIsRun = True
If Not Objs Is Nothing Then Set Objs = Nothing
If Not WMI Is Nothing Then Set WMI = Nothing
Exit Function
End If
Next
If Not Objs Is Nothing Then Set Objs = Nothing
If Not WMI Is Nothing Then Set WMI = Nothing
Exit Function
Err:
If Not Objs Is Nothing Then Set Objs = Nothing
If Not WMI Is Nothing Then Set WMI = Nothing
End Function
2.2函数调用
关于函数调用,这要用到定时器插件。再看你的画面中一直保持不变的东西,比如标题栏,然后将定时器放置在标题栏中,并编写调用函数
Private Sub diaodu1_OnTimeOut(ByVal lTimerId As Long)
If CheckExeIsRun("FIXBACKGROUNDSERVER.EXE") = False Then
Shell System.FixPath(Base_Path) & "\FIXBACKGROUNDSERVER.EXE"
End If
End Sub
3.备注补充
有些可能遇到另外一种特殊情况:就是报“自动化错误”弹窗,而且不点开fixbackground后台框,无法发现。这样在无法找到原因的情况下,有一个权宜之计-使用定时器,定时关闭fixbackground后台。(每天之行一次:24:00:02)
Private Sub killdiaodu_OnTimeOut(ByVal lTimerId As Long)
If CheckExeIsRun("FIXBACKGROUNDSERVER.EXE") = True Then
Shell System.FixPath(Base_Path) & "\diaodu.bat"
End If
End Sub
diaodu.bat
@echo off
taskkill /im FixBackgroundServer.exe /f
EXIT
至此,一个完整的语音报警系统模块,可以投入正式的生产使用之中。
Intouch/ifix语音报警系统制作(3-利用自定义过程和函数,重构先前版本)的更多相关文章
- Intouch/ifix语音报警系统制作(2)
在我的先前一篇关于语音报警系统制作的文章中,阐述了如何通过标签组来获得@name@的详细内容,以通过这种方式来进行详细的设备故障播报.经过一段时间的试运行,发现使用标签组的方式会产生较大的耦合,(即当 ...
- Intouch/ifix语音报警系统制作(4-自动发送邮件提醒)
在近期项目完成后,有遇到情况:类似于语音报警后,中控室人员未及时报告给我们造成了事件的危害升级,以及造成很不好的影响.针对这个情况特此添加语音报警后,自动发送邮件提醒,完善现有的报警机制. 1.函数编 ...
- Intouch/ifix关于语音报警的一种设置思路
工控项目最近升级改造,需要使用Intouch/ifix提供一个语音报警功能.这个不像先前提供的单一的声音报警,业主方要求能详细的提供某某水泵或者是某某设备故障报警,这就要求我们这边对语音解析或者基础控 ...
- powershell《语音报警系统》
用powershell实现:“倩女幽魂姥姥”版<语音报警系统> ------[第一章 前言]------ win7,及以上版本中,是自带语音库的,系统自带一套女声中文库,一套女声英文库.用 ...
- Android开发之制作圆形头像自定义View,直接引用工具类,加快开发速度。带有源代码学习
作者:程序员小冰,CSDN博客:http://blog.csdn.net/qq_21376985 QQ986945193 博客园主页:http://www.cnblogs.com/mcxiaobing ...
- mpi中利用自定义归约操作实现merge
在归并排序中,很重要的一步是将两个排序数组合并成一个数组,这个操作叫merge.merge操作可以用来解决某些Top K问题. 问题描述 在哼唱搜索中,用户通过哼唱一个音乐片段去搜索与其相似的音乐.后 ...
- 利用自定义的AuthenticationFilter实现Basic认证
[ASP.NET MVC] 利用自定义的AuthenticationFilter实现Basic认证 很多情况下目标Action方法都要求在一个安全上下文中被执行,这里所谓的安全上下文主要指的是当前 ...
- 转:【译】Asp.net MVC 利用自定义RouteHandler来防止图片盗链
[译]Asp.net MVC 利用自定义RouteHandler来防止图片盗链 你曾经注意过在你服务器请求日志中多了很多对图片资源的请求吗?这可能是有人在他们的网站中盗链了你的图片所致,这会占用你 ...
- java利用自定义类型对树形数据类型进行排序
前言 为什么集合在存自定义类型时需要重写equals和hashCode? 1.先说List集合 List集合在存数据时是可以重复的但是 当我们需要判断一个对象是否在集合中存在时这样就有问题了! 因为我 ...
随机推荐
- SpringMVC 进阶版
请求限制 一些情况下我们可能需要对请求进行限制,比如仅允许POST,GET等... RequestMapping注解中提供了多个参数用于添加请求的限制条件 value 请求地址 path 请求地址 m ...
- .Net Core Host 之详解
简介: 开发使用有三年经验了,想趁这个机会把net core的知识点梳理一下,也更好的研究一下.NET 5给我们带来的变化. 主机的概念: 一个主机是封装了应用程序的资源,比如一个对象: 依赖注入 ( ...
- kubernetes关闭基于角色的访问控制-匿名访问
1.关闭基于角色的访问控制 如果正在使用一个带有RBAC机制的Kubernetes集群,服务账户可能不会被授权访问API服务器(或只有部分授权).目前最简单的方式就是运行下面的命令查询API服务器,从 ...
- 温故知新,DotNet Core SDK和.Net CLI十八般武艺
简介 .NET命令行接口 (CLI) 工具是用于开发.生成.运行和发布.NET应用程序的跨平台工具链. https://docs.microsoft.com/zh-cn/dotnet/core/too ...
- 20 批量ping主机
#!/bin/bash IP_LIST="`cat /root/ip.txt`" ip_dir="/root/ip_dir" [ ! -d ${ip_dir} ...
- 9、make和make install的区别
简单来说,make 是编译,make install 是安装. 9.1.configure: 这一步一般用来生成 Makefile,为下一步的编译做准备,你可以通过在 configure 后加上参数来 ...
- 3、搭建 rsync备份服务器
yum install rsync -y rsync(873):数据同步,把一台服务器上的数据以何种权限同步到另一台服务器上,是linux 系统下的数据镜像备份工具.使用快速增量备份工具Remote ...
- Nginx:Nginx配置url重定向
符号含义: 正则表达式匹配: ~ 为区分大小写匹配 ~* 为不区分大小写匹配 !~和!~*分别为区分大小写不匹配及不区分大小写不匹配 文件及目录匹配: -f和!-f用来判断是否存在文件 -d和!-d用 ...
- 1shell变量的作用域
Shell 局部变量 Shell 全局变量 shell全局变量的易错点 linux shell中./a.sh , sh a.sh , source a.sh, . ./a.sh的区别 Shell 环境 ...
- Python调用shell命令常用方法
Python调用shell指令 方法一.使用os模块的system方法:os.system(cmd),其返回值是shell指令运行后返回的状态码,int类型,0表示shell指令成功执行,256表示未 ...