在语音模块嵌入了半年左右的时间,经过实际使用发现,代码冗余,重复太多,维护较难,新增也不易,故而对整个框架进行整理,实现简单添加,维护容易的目的。

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 = nameDim 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 BooleanOn Error GoTo ErrDim WMIDim ObjDim ObjsCheckExeIsRun = FalseSet WMI = GetObject("WinMgmts:")Set Objs = WMI.InstancesOf("Win32_Process")For Each Obj In ObjsIf (InStr(UCase(exeName), UCase(Obj.Description)) <> 0) ThenCheckExeIsRun = TrueIf Not Objs Is Nothing Then Set Objs = NothingIf Not WMI Is Nothing Then Set WMI = NothingExit FunctionEnd IfNextIf Not Objs Is Nothing Then Set Objs = NothingIf Not WMI Is Nothing Then Set WMI = NothingExit Function
Err:If Not Objs Is Nothing Then Set Objs = NothingIf 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 ThenShell 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

至此,一个完整的语音报警系统模块,可以投入正式的生产使用之中。

转载于:https://www.cnblogs.com/cache-yuan/p/10104240.html

Intouch/ifix语音报警系统制作(3-利用自定义过程和函数,重构先前版本)相关推荐

  1. Intouch/ifix语音报警系统制作(1-初步添加插件和简单使用)

    工控项目最近升级改造,需要使用Intouch/ifix提供一个语音报警功能.这个不像先前提供的单一的声音报警,业主方要求能详细的提供某某水泵或者是某某设备故障报警,这就要求我们这边对语音解析或者基础控 ...

  2. 易语言数据类型与c 对照,易语言利用自定义数据类型和数组. 制作键对值操作类/内存配置...

    易语言利用自定义数据类型和数组.  制作键对值操作类/内存配置.版本 2 .支持库 spec .子程序 _临时子程序 .局部变量 test, classKeyValue .局部变量 局_取值方法2,  ...

  3. Android开发之制作圆形头像自定义View,直接引用工具类,加快开发速度。带有源代码学习

    作者:程序员小冰,CSDN博客:http://blog.csdn.net/qq_21376985 QQ986945193 博客园主页:http://www.cnblogs.com/mcxiaobing ...

  4. Android开发之制作圆形头像自定义View,直接引用工具类,加快开发速度。带有源代码学习...

    作者:程序员小冰,CSDN博客:http://blog.csdn.net/qq_21376985 QQ986945193 博客园主页:http://www.cnblogs.com/mcxiaobing ...

  5. 鼎捷T100——利用自定义查询维护作业(azzi310)开发建立xg报表

    自定义查询维护作业(azzi310)制作报表 文章目录 前言 一.写sql 二.启用azzi310进行维护 1.新增作业 3.细节设计 三.通过azzi910维护作业 总结 前言 最近有个简易的查询报 ...

  6. 混合云备份利用自定义Workflow保护MySQL的实践

    众所周知数据库的保护面临着诸多问题,其中之一就是维护数据底层文件的一致性.除了与数据库应用的深度集成的备份方案(如SAP HANA Backint等),松耦合的通用备份软件较难做到完美的数据库的一致性 ...

  7. DL之CNN:利用自定义DeepConvNet【7+1】算法对mnist数据集训练实现手写数字识别、模型评估(99.4%)

    DL之CNN:利用自定义DeepConvNet[7+1]算法对mnist数据集训练实现手写数字识别.模型评估(99.4%) 目录 输出结果 设计思路 核心代码 输出结果 设计思路 核心代码 netwo ...

  8. DL之CNN:利用自定义DeepConvNet【7+1】算法对mnist数据集训练实现手写数字识别并预测(超过99%)

    DL之CNN:利用自定义DeepConvNet[7+1]算法对mnist数据集训练实现手写数字识别并预测(超过99%) 目录 输出结果 设计思路 核心代码 输出结果 准确度都在99%以上 1.出错记录 ...

  9. AI机器人:机器人语音文本智能交互之自定义软件——实现模拟中本聪与V神跨时空畅谈

    AI机器人:机器人语音&文本智能交互之自定义软件--实现模拟中本聪与V神跨时空畅谈 目录 设计界面 设计思路 动画演示 设计界面 设计思路 动画演示

  10. DL之simpleNet:利用自定义的simpleNet(设好权重)对新样本进行预测、评估、输出梯度值

    DL之simpleNet:利用自定义的simpleNet(设好权重)对新样本进行预测.评估.输出梯度值 导读 理解神经网络内部的数学机制 目录 输出结果 核心代码 输出结果 输出权重参数: [[-0. ...

最新文章

  1. vue 判断同一数组内的值是否一直_前端代码+后端API,值得一学的Vue高仿音乐播放器实战项目
  2. 计算机文化基础课程实验,山东经贸职业学院计算机文化基础课程实验教学大纲.doc...
  3. Java面试之锁-公平锁和非公平锁
  4. 放弃 PHP,选择 Node.JS 的 8 个理由!
  5. 马自达 3 为什么抛弃了触摸屏?
  6. Linux编译安装GCC-5.1.0
  7. 简单分布式系统构建知识
  8. 程序员代码面试指南 IT名企算法与数据结构题目最优解
  9. Win11更新后电脑没有声音,声卡驱动失效,卸载重装依然无效
  10. AndroidStudio使用之仿微信首页界面
  11. C/C++ 项目必读:代码格式化和静态分析检查的一站式工作流 Cpp Linter
  12. 植物大战僵尸——纯C实现无限阳光
  13. Docker容器化实战第二课 镜像、容器、仓库详解
  14. 精读论文:Multi-Task Learning as Multi-Objective Optimization(附翻译)
  15. 【DEBUG】2021-06-27 不定期的自我检讨002
  16. css3之[2D转化,动画,3D转化] 彩蛋之3D立方体
  17. 计算广告(1)---一些概念
  18. 中国新零售行业展望及十四五发展规划建议报告2022-2028年
  19. ENVI5.3 影像数据辐射定标及大气校正实验处理-多光谱遥感数据
  20. vue3 使用render函数渲染插槽,以Naive UI为例

热门文章

  1. 开放 API 接口签名验证,让你的接口从此不再裸奔 !
  2. 面试遇到不会回答的问题,如何力挽狂澜 ?
  3. 阿里Goldeneye业务监控平台之架构演进,如何实时处理100T+/天的日志量?
  4. 你真的会调试 Linux 内核故障吗,看完这一篇后你会茅塞顿开的!
  5. 理解HTTP 代理,负载均衡,缓冲(Buffering)和缓存(Caching)
  6. Linux内核4.14 LTS发布:那些最新最好的功能特性
  7. 帖子内容 mysql_mysql-SQL:选择最新主题和最新帖子,按论坛...
  8. asp 文本转时间_[译]使用LazZiya.ExpressLocalization开发多语言支持的ASP.NET Core 2.x项目...
  9. python表格控件_tkinter 控件 Treeview 表格数据
  10. react-demo