在先前ifix项目中添加了语音模块,然后概率性跳出自动化(Automation)错误弹窗,先前分析了很多种原因,从代码的冗余,编码等角度进行了优化,效果不是很理想,仍然会概率性出现。经过反反复复大约3次分析,五天时间终于找到原因,并予以解决。分享给大家。

1.错误描述

后台事件调度,在调用前台画面时,概率性跳出如下图自动化错误提示,导致后续的调度无法执行,严重影响工厂的正常运营。

2.错误原因

深层原因:根据错误号,找到原因为:Call Rejected by Callee。fixbackground后台程序和workspace程序属于两个线程,当后台程序通过fixbackground调用前台的画面时,可能由于交互繁忙被拒绝,从而导致该错误发生。

浅层原因:为什么会出来这个错误弹窗?如何消除?根源在于后台脚本中调用了openpicture,closepicture,OpenTGDPicture等为命令包装器。(Command Wrappers)命令包装器是可以返回错误的子例程,如果在代码中没有处理这些错误,则会显示消息框,通过使用错误处理,它允许代码处理错误。因而,我们可以通过代码的方式将错误进行捕获处理。

我们可以通过如下方法进行验证:

在后台调度代码中,打开前台画面,然后里可以运行关闭画面代码,该demo可以100%复现该问题,从而定位到这个问题原因无误。

Private Sub FixEvent3_WhileTrue()

openpicture “故障报警.grf”,“”,“”,“”,1
closepicture "故障报警.grf", 1 End Sub

3.解决方案

根据ifix给出的关于openpicture的错误参数

默认情况下,OpenPicture使用错误选项0.以下是每个错误选项的说明。

  • 0(默认值) - 允许子例程提供错误消息。错误以消息框的形式显示。如果没有为intErrorMode参数创建条目,则使用默认值
  • 1作为Error Option参数,您可以在计时器或事件脚本中处理错误。例如,从那里,您可以将其发送到Windows NT事件日志。

  • 2作为错误选项参数,您可以将错误发送到警报历史记录。

下面进行修复验证:

1.将fixbackground.exe设置参数/service以后台服务方式运行。

2.脚本编写验证。

Private Sub FixEvent1_WhileTrue()

On Error GoTo HandleErr
Dim workspace As Object
Set workspace = GetObject("", "Workspace.Application")
Dim tagvar As Object
Set tagvar = workspace.Documents("User").Page.FindObject("PicNumBer")
tagvar.Description = "二期粗格栅1号污水泵" With workspace
OpenPicture "故障报警.grf", "", "", "", 1
closepicture "故障报警.grf", 1
End With
'OpenPicture tt, "", TOP, LEFT, 0, , NONE, "", 1
Exit Sub HandleErr: If Err.Number = -2147418111 Then
OpenPicture "故障报警.grf", "", "", "", 1
'Resume Next
Else
End If
End Sub

3.备注:依据上述给出的分析,我们可以直接设置OpenPicture "故障报警.grf", "", "", "", 2这种方法,可以直接跳过该条语音命令而在后台中不报错。

2019/7/8更新:

要实现多个事件能同时触发还得加参数


openpicture tt, "", TOP, LEFT, 1, , NONE, "", True

更多工业交流和工作帮助可以订阅我的个人订阅号哦!

ifix 自动化(Automation)错误弹窗的解决方案的更多相关文章

  1. 自动化(Automation)兼容的数据类型

    自动化(Automation)兼容的数据类型    

  2. [Windows Phone] APP上架,遇到错误2001的解决方案。(Error:2001)

    [Windows Phone] APP上架,遇到错误2001的解决方案.(Error:2001) 问题情景 最近在开始玩Windows Phone的开发,开发的过程中虽然有点小挫折,但是参考网络许多前 ...

  3. 常见ORACLE错误,及解决方案(遇则即时更新)

    1.当登陆时提示“ORA-03113:通信通道的文件结束”时:        解决方案:                     需在X:\oraclexe\app\oracle\product\10 ...

  4. ORA-01578和ORA-26040--NOLOGGING操作引起的坏块-错误解释和解决方案(文档ID 1623284.1)

    ORA-01578和ORA-26040--NOLOGGING操作引起的坏块-错误解释和解决方案(文档ID 1623284.1) (一)NOLOGGING操作引起的坏块(ORA-01578和ORA-26 ...

  5. 用户'sa'登录失败(错误18456)解决方案图解

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://thenear.blog.51cto.com/4686262/865544 htt ...

  6. Rose2003执行出现 -2147417848 (80010108)':Automation 错误

    上篇博客在结尾的时候.我提到了Ration Rose2003执行出现"-2147417848 (80010108)':Automation错误"的问题.今天这篇博客就来介绍一下怎样 ...

  7. 打开WPS时出现MathType错误弹窗怎么办

    MathType是一款特别优秀的公式编辑器,特别是在文档中出现大量的复杂数学公式需要编辑时.不过MathType与Office的兼容性还算好,与WPS的兼容性要略逊一筹,有时候会出现如下的报错弹窗.提 ...

  8. Layer 一个让你想到即可做到的web弹窗/层 解决方案

    最近工作上面用到的web弹窗组件layer layer是一款口碑极佳的web弹层组件,她具备全方位的解决方案,致力于服务各个水平段的开发人员,您的页面会轻松地拥有丰富而友好的操作体验. layer官方 ...

  9. 关于“System.Data.OleDb.OleDbException,外部数据库驱动程序 (1) 中的意外错误。”的解决方案

    网站之前运行一直很正常,但有一次用户在导入格式为xls的excel文件,发生了错误,跟踪错误后抛出如下的异常: 错误提示: 未处理System.Data.OleDb.OleDbException HR ...

随机推荐

  1. Golang学习(用代码来学习) - 第一篇

    package main import ( "fmt" "time" "unsafe" ) //示例代码 var isActive bool ...

  2. 跟着官方文档学Maven构建生命周期

    在IntelliJ IDEA中,显示了Maven的Lifecycle: 只需要学习这些命令,就能构建一个Maven项目. 三个内置生命周期 Maven内置了三个生命周期:clean.default和s ...

  3. 让Qt5默认支持C++17的设置方法

    单个项目的设置方法 打开项目的 pro 文件,将CONFIG += console c++11改为CONFIG += console c++17即可. 永久默认支持 c++17 的设置方法 找到 Qt ...

  4. 重新点亮linux 命令树————帮助命令[一]

    前言 重新整理一下linux的命令. 正文 这里首先介绍帮助命令. 帮助命令常用的有三个: man help info 那么就来看下这三个. man 第一个man,man不是男人的意思,而是manua ...

  5. DDoS攻击的工具介绍

    1.低轨道离子加农炮(LOIC) 1.1 什么是低轨道离子加农炮(LOIC)? 低轨道离子加农炮是通常用于发起DoS和DDoS攻击的工具.它最初是由Praetox Technology作为网络压力测试 ...

  6. Android Studio用上Visual Studio Android Emulator

    背景介绍 第一次接触Android官方的AVD(Android Virtual Device)时你可能会吐槽又慢又丑,不要紧,微软作为新晋安卓阵营最佳开发商,其实也为我们准备了一个脱胎于Windows ...

  7. CAS你知道吗?底层如何实现?ABA问题又是什么?关于这些你知道答案吗

    CAS你知道吗?如何实现? 1. compareAndSet 在volatile当中我们提到,volatile不能保证原子语义,所以当用到变量自增时,如果用到synchronized会太"重 ...

  8. CentOS-磁盘扩容挂载目录

    挂载 查看存储情况 $ df -kh 查看磁盘情况 $ fdisk -l fdisk创建分区(注:可操作存储上限为2TB)$ fdisk /dev/sdb根据提示,依次输入"n", ...

  9. vim下出现^M怎么解决

    将window下的文本文件上传到linux上,在读取数据文件时,在每一行数据后会出现^M字符.   为什么会出现这种情况呢: 因为windows.linux.os系统的换行符标准不同: 先了解下概念, ...

  10. XCTF(MISC) 图片隐写

    题目描述:菜猫给了菜狗一张图,说图下面什么都没有 1.给了个pdf,打开是这玩意 2.盲猜flag是图片后面,右键直接删除图片试试. 答案出来了.