在VB中用DDE实现工业控制
作者:杨军 来源:赛迪网 添加时间:2006-5-21 14:59:10我对系统进行分析后,利用VB编程通过DDE(Dynamic Data Exchange)与工控系统通讯,实现语音报警功能。
通讯系统分析
该系统为工业DH+网,并且系统硬件环境由两台安装1784-KTx通讯卡的工控PC机和五台SLC500组成,整个结构图如图1所示。

图1
PC机上的通讯软件和工业组态软件分别为RSLINX和RSVIEW。它们之间的通讯采用DDE(Dynamic Data Exchange 动态数据交换)技术。所以我只要知道提供DDE服务的Application、Topic、Item就可以在VB开发环境下利用相关控件与RSLINX及RSVIEW进行通讯了。
制作语音提示
语音播放可以支持WAV或MP3格式的声音文件,由于MP3 文件体积小,所以我选用这个格式。从网站下载一个ActiveX 控件用于播放语音,此控件为Mp3Play.OCX,很容易找到。然后用Windows中的录音机将所需提示的语音录成WAV格式,再用MP3转换器将其转成MP3格式。

图2:总体结构图
图2中A部分主要说明:DDE的建立以及出现报警后将报警信息插入到报警队列最后。报警队列是等候报警的信息排队。因为计算机在广播报警信息时一次只能广播一条,建立报警队列后同时发生的报警将等候上一条播完后再广播。
图2中B部分主要说明:定时在报警队列中检查及有报警信息后的播放过程。
程序设计
下面举一个实例说明程序的实现:无论何种原因,当进水泵房故障停机时,PC机报警“进水泵故障!”。
首先建立好“进水泵故障!”的语音文件存为alarm.mp3 ,随后建立一个标准VB程序,在Form1上添加一个Timer控件用于控制程序循环,一个Mp3Play控件用于播放报警文件,一个Label控件用于建立DDE通讯,一个Listbox控件用于建立报警队列。Name属性均为默认,Listbox 的Visible 属性设为False。
在Form1_Load事件中加入如下代码:
| Private Sub Form1_Load () Label1.LinkTopic="rtdata|airportauto" '设立DDE连接通道 Label1.LinkItem="plc1\f101" '设定连接项目为进水泵故障,此项根据连接项目的不同而不同,如果你使用的是RSVIEW则在TAG EDITER中可以找到与PLC数据点相对应的LinkItem。 Label1.LinkMode=1 '自动连接 Timer1.Interval=1000 '设定循环一次周期为1秒 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运行之后启动该程序,就可以实现进水泵故障的语音报警了。
站内搜索