Intouch/ifix关于语音报警的一种设置思路
工控项目最近升级改造,需要使用Intouch/ifix提供一个语音报警功能。这个不像先前提供的单一的声音报警,业主方要求能详细的提供某某水泵或者是某某设备故障报警,这就要求我们这边对语音解析或者基础控件知识有一定的掌握了。在实现上,一般有两种方法:
第一种使用微软集成的Microsoft Speech SDK(TTS),这种开发成本比较高,需要自己对微软语音进行二次开发。
第二种就是直接使用成熟的轮子啦。经过寻找jTTS Desktop 5(北京捷通)版本完美解决了这个问题。它直接就封装成了OCX控件的形式,在intouch调用即可。
下面简单的介绍一下使用过程:
1.安装jTTS Desktop5.0版本的软件(或者安装金山词霸2009 牛津版本)。
2.在intouch向导/控件安装查看,选择JTTS ActiveX Control进行安装。
3.在向导选择中进行调用,直接将相应的图标拖入到想要导入的画面中去。
4.编写脚本,对控件进行调用即可。
上述脚本,实现对水泵的三次重复告警,然后,将content内容数据写入数据库中,实现报警记录。
注:此方法有个令人无法解决的bug,因为是使用OCX控件的方式进行语音报警,所以该报警只对该画面有效果。也就是说,实现上述的功能只能当viewer在特定的画面中才能实现。(不完美的方法,需要等抽空使用第一种方法进行开发试试)
补充:在ifix下设置语音报警的基本思路:(完善上面所提bug,使用专门的故障报警弹窗即可)
1.对需要报警的点进行事件调度编写:
编写脚本,对触发事件进行数据库写入,以及弹窗显示:
Dim conODBC As ADODB.Connection
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 + "','二期粗格栅污水泵1', '故障', '" + username + "')"
conODBC.Close
OpenTGDPicture "故障报警.grf", "", "", "", "二期粗格栅1号污水泵.TGD"
2.在故障报警.grf画面中,编写脚本:
Private Sub CFixPicture_Initialize()
playSound ("D:\alarm.wav")
JTTS_ActiveX1.Play (Text2.Caption + Text1.Caption + Text2.Caption + Text1.Caption + Text2.Caption + Text1.Caption)
playSound ("D:\alarm.wav")
End Sub
注:PlaySound()方法,使用的是user下自编写模块实现:
Public Declare Function sndPlaySound Lib "winmm" Alias "sndPlaySoundA" (ByVal IpszSoundName As String, ByVal uFlags As Long) As Long
'flag uitzetten
Public Const SND_SYNC = &H0
Public Const SNC_ASYNC = &H1
Public Const SND_NODEFAULT = &H2
Public Const SND_MEMORY = &H4
Public Const SND_LOOP = &H8
Public Const SND_NOSTOP = &H10 Public Sub PlaySound(strSound As String)
sndPlaySound strSound, SND_ASYNC Or SND_NODEFAULT End Sub
至此,一个简单的ifix下的语音报警已经实现。
2018.06.06 bug修复:
在ifix中利用上述的脚本实现了工厂的实际运用,然后在运行过程中报警弹窗出现后,一直报的并非@name@替换后的字符,而是@name@本身,经过一天的寻求结果,总算找到了原因和解决方法,现补充如下:
原因:ifix的后台调度程序fixbackgroud.exe和运行画面的workspace.application风别属于不同的进程,当在后台调度workspace中的画面时,其参数并未随之赋值,所以导致了该问题了。也就解释了我在画面上新建按钮调用OpenTGDpicture时能正确朗读。
解决方法:使用全局变量来进行参数传递。
在后台给全局变量赋值的方法:(修改调度脚本如下)
'修改全局变量PicNumber的Description值
Dim workspace As Object
Set workspace = GetObject("", "Workspace.Application")
Dim tagvar As Object
Set tagvar = workspace.Documents("User").Page.FindObject("PicNumBer")
tagvar.Description = "二期粗格栅1号污水泵.TGD" Dim conODBC As ADODB.Connection
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 + "','测试点', '故障', '" + username + "')"
conODBC.Close
OpenTGDPicture "guzhang.grf", "", "", "", tagvar.Description, , True
在弹窗的脚本修改为:
Private Sub CFixPicture_Initialize()
'接收到相应的taggroupname
故障报警.LoadTagGroupFile User.PicNumBer.Description playSound ("D:\alarm.wav") End Sub
使用后,有效果!!!
Intouch/ifix关于语音报警的一种设置思路的更多相关文章
- Intouch/ifix语音报警系统制作(4-自动发送邮件提醒)
在近期项目完成后,有遇到情况:类似于语音报警后,中控室人员未及时报告给我们造成了事件的危害升级,以及造成很不好的影响.针对这个情况特此添加语音报警后,自动发送邮件提醒,完善现有的报警机制. 1.函数编 ...
- 手把手教你基于C#开发WinCC语音报警插件「附源代码」
写在前面 众所周知,WinCC本身是可以利用C脚本或者VBS脚本来做语音报警,但是这种方式的本质是调用已存在的音频文件,想要实现实时播报报警信息是不行的,灵活性还不够,本文主要介绍基于C#/.NET开 ...
- AutoLayout的三种设置方式之——NSLayoutConstraint代码篇
AutoLayout是从IOS 6开始苹果引入来取代autoresizing的新的布局技术,该技术有三种设置方式,等下我来为大家一一叙述一下. 在说三种设置方式前,我们先简单的说一下autolayou ...
- 数据权限设计——基于EntityFramework的数据权限设计方案:一种设计思路
前言:“我们有一个订单列表,希望能够根据当前登陆的不同用户看到不同类型的订单数据”.“我们希望不同的用户能看到不同时间段的扫描报表数据”.“我们系统需要不同用户查看不同的生产报表列”.诸如此类,最近经 ...
- SAP MM 无价值物料管理的一种实现思路
SAP MM 无价值物料管理的一种实现思路 笔者所在的项目,客户工厂处于先期试生产阶段,尚未开始大规模的商业化生产,但是这并不影响客户集团总部的SAP项目实施.笔者于7月初加入该工厂的第2期SAP项目 ...
- Eclipse中三种设置编码格式的方法
转自:https://blog.csdn.net/rainy_black_dog/article/details/52403735 很早以前听过一位老师说过:咱们中国人不管学习哪种编程语言,总会遇到乱 ...
- Java源码阅读的真实体会(一种学习思路)
Java源码阅读的真实体会(一种学习思路) 刚才在论坛不经意间,看到有关源码阅读的帖子.回想自己前几年,阅读源码那种兴奋和成就感(1),不禁又有一种激动. 源码阅读,我觉得最核心有三点:技术基础+强烈 ...
- ios - UINavigationBar添加背景图片的几种简单思路
UITabBarController下面常常需要为多个ViewController设置导航栏样式,总结了一下遇到过的为UINavigationBar添加背景图片的几种简单思路 以设置背景图片为例: 第 ...
- JavaWeb关于session生命周期的几种设置方法
一般session的生命周期都是建立在用户登录系统后对用户信息进行一个记录,session类似于你有一张银行卡,而卡里的钱就是属于session存储的信息,卡掉了就不能取出里面的钱. 以前sessio ...
随机推荐
- 魔镜魔镜,今天有雨吗?——GitHub 热点速览 v.21.25
作者:HelloGitHub-小鱼干 上周智能驾驶项目的作者曾经做过一个透明小电视机,同透明电视机类似 MagicMirror 也是一个神奇的智能项目,使用它进行模块定制开发,你将拥有一块非常酷炫的智 ...
- NOIP模拟测试8「寿司」
考试时打的类似$n^2$暴力,然后炸了只有10分 后来验证我的算法伪了. 题解 显然你有一种解法,假设你要在一个B点断开将R分别移向最左 最右,这样只用分别计算B点右面蓝色数量左面蓝色数量就得到了一个 ...
- k8s-nginx二进制报Illegal instruction (core dumped)
1.环境 系统:CentOS 7.3 内核:x86 环境:虚拟机 2.问题 收到一个现场问题,k8s环境中nginx的pod都启动异常. #kubectl get pod |grep nginx ng ...
- 通过busybox制作根文件系统详细过程
我在之前的uboot通过NFS挂载ubuntu根文件系统中也有实现过根文件系统的制作,那只是在ubuntu官网已经做好的根文件基础上安装一些自己所需的软解而已.而使用busybox制作根文件系统可以自 ...
- GPU 高性能计算
背景 近日忽然想到,在CPU类型的服务器即使给到足够的运算资源,与GPU类型的服务器做运算来讲仍然是相差甚远,而本人有一台闲置的AMD vega8集显的电脑.想要用来做计算,来探究其与CPU运算的差别 ...
- Jenkins 凭证 Devops 的粘合剂
大家好,我是小猿来也,一个热衷于搞 Devops 自动化的 Java 程序猿. 万事具备,只欠东风.当我决定大搞特搞 Devops 的时候,Jenkins 凭证却傻傻分不清. 玩 Devops 的小伙 ...
- sonarqube 8.9版本配置收邮件提醒
# admin登陆系统后,进入我的账户(每个用户的配置过程类似) sonarqube 8.9版本配置发信请参考我的另一篇博文: 链接如下: https://www.cnblogs.com/cndevo ...
- 资源:Navicat15最新版本破解 亲测可用(2020-11-14)
1.下载Navicat Premium 官网https://www.navicat.com.cn/下载最新版本下载安装 2.网盘下载破解 本人网盘链接:https://pan.baidu.com/s/ ...
- SpringCloud:feign对象传参和普通传参及遇到的坑
对象传参: #使用@RequestBody来指定传参对象 @RequestMapping(value = "/v2/matterCode/genCode", method = Re ...
- 使用Gradle构建多模块SpringBoot项目
使用Gradle构建多模块SpringBoot项目 本项目使用Gradle构建SpringBoot项目,将不同的业务进行不同的模块划分(不做微服务与分布式架构); - 编辑器:Intellij IDE ...