zoukankan      html  css  js  c++  java
  • 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
    使用后,有效果!!!



  • 相关阅读:
    让你爱不释手的图片浮动效果
    Polymer API开发指南 (二)(翻译)
    基于HTML5的拓扑图编辑器(2)
    kbengine开源分布式游戏服务端引擎
    Qunee for HTML5 v1.6新版本发布
    [转载] Link prefetch
    小白学phoneGap《构建跨平台APP:phoneGap移动应用实战》连载三(通过实例来体验生命周期)
    云集,让 web app 像 native app 那样运行(雄起吧,Web 开发者)
    Android设置ToolBar的title文字居中显示
    Task 'assembleXXXDebug' not found in project ':app'.的解决方法
  • 原文地址:https://www.cnblogs.com/cache-yuan/p/9146742.html
Copyright © 2011-2022 走看看