发信人: r_hayes(Hayes)
整理人: winsy(2003-03-06 09:05:10), 站内信件
|
利用VB编程通过DDE(Dynamic Data Exchange)与工控系统通讯,实现了系统语音报警的功能。
通讯系统分析
该系统为工业DH+网,系统硬件环境由两台安装1784-KTx通讯卡的工控PC机和五台SLC500(AB公司的可编程控制器型号)组成。
PC机上的通讯软件和工业组态软件分别为RSLINX和RSVIEW。它们之间的通讯采用DDE(Dynamic Data Exchange 动态数据交换)技术,所以我们只要知道提供DDE服务的Application、Topic、Item就可以在VB开发环境下利用相关控件与RSLINX及RSVIEW进行通讯了。
语音提示报警功能的实现
语音播放可以支持wav或MP3格式的声音文件,由于MP3 文件体积小所以开发中我们选用这个格式。首先,我们从网站下载一个ActiveX控件用于播放语音,控件名为Mp3Play.OCX,下一步是录制语音,我们先用Windows中的录音机将所需提示的语音录成wav格式,再用MP3转换器将其转成MP3格式。
总体结构图
A图主要说明:DDE的建立以及出现报警后将报警信息插入到报警队列最后。报警队列是等候报警的信息的排队。因为计算机在广播报警信息时一次只能广播一条,建立报警队列后同时发生的报警将等候上一条播完后再广播。
B图表示定时在报警队列中检查及有报警信息后的播放过程。
程序设计
下面举实例来说明程序的具体实现过程:该程序将实现无论何种原因,当进水泵房故障停机时,PC机将报警显示“进水泵故障!”。
我们首先建立好“进水泵故障!”的语音文件,存为alarm.mp3,然后建立一个标准VB程序,在Form1上添加一个Timer控件用于控制程序循环、一个Mp3Play控件用于播放报警文件、一个Label控件用于建立DDE通讯和一个Listbox控件用于建立报警队列。Name属性均为默认,listbox 的visible 属性设为False。
在Form1_load事件中加入如下代码:
Timer1.enable=true ′打开定时器
End sub
在Label1的Label1_Change()中加入如下代码:
Label1_Change()
dim i as integer
if label.caption=1 then
′如果变为报警状态则
For i=0 to listbox1.listcount-1
′检查队列,有此信息则不插入信息
If “alarm”=listbox1.list(i) then Exit sub
Next i
Listbox.AddItem(“alarm”)
′插入新报警信息到队列最后
End sub
在Timer1的On_Timer事件中加入如下代码:
Private Sub Timer1_Timer()
Dim retcode As Integer
Dim temstring As String
If LISTBOX1.ListCount = 0 Then Exit Sub ′检查队列是否为空
temstring = LISTBOX1.List(0)
′取出第一条报警信息
LISTBOX1.RemoveItem (0)
′将该条移出报警信息队列
On Error GoTo error_handle
retcode = Mp3Play.Open(App.Path + temstring + ".mp3", "")
retcode = Mp3Play.Play ′播放语音报警
Exit Sub
error_handle: ′错误处理
'retcode = Error
soundable = True
Resume Next
End Sub
完成以上工作后,在RSLINX和RSVIEW运行之后启动该程序,就可以实现进水泵故障的语音报警了。
上面只是个例子,在功能上及用户界面上都还很不完善,但是利用同一方法可以实现在线设备的监视及信号采集等工作,有兴趣的话,读者可以自己尝试。以上代码在VB6、Windows 9X环境下运行成功。
北京首都国际机场污水处理厂设备运行使用的是基于某一公司的SLC500(该公司的可编程控制器型号)计算机控制系统。全厂设备采用远程控制,由工作人员在中央控制室发布命令控制设备运转(如:根据集水井液位控制水泵启停等),大大减轻了工作人员的劳动强度。但由于设备出现故障时只显示故障信息而没有声音报警,给工作人员及时发现问题带来了极大不便。笔者对系统进行分析后,利用VB编程通过DDE(Dynamic Data Exchange)与工控系统通讯,实现了系统语音报警的功能。
----
灌灌
灌灌
灌灌
灌灌 灌灌
灌灌 灌灌灌
灌灌灌灌灌灌灌 灌灌 灌灌灌
灌灌灌灌灌灌灌灌灌灌灌灌
灌灌灌灌灌灌
灌灌灌灌灌灌灌
灌灌 灌灌 灌灌
灌灌 灌灌 灌灌
灌灌 灌灌 灌灌
灌灌 灌灌 灌灌灌
灌灌 灌灌 灌灌灌灌
灌灌 灌灌 灌灌灌灌灌
灌灌 灌灌 灌灌灌灌灌
灌灌 灌灌 灌灌
灌灌灌灌
灌灌灌
灌 |
|