首页 ● 新闻 ● 搜索 ● 短信 ● 分类 ● 聊天 ● 导航
上移动梦网
赢手机大奖

新浪首页 > 科技时代 > 网上学园 > 高级编程 > 正文
在Visual Basic中用DDE实现控制

http://www.sina.com.cn 2001/11/13 15:59 赛迪网-中国计算机报

  文/杨军

  北京首都国际机场污水处理厂设备运行使用的是基于某一公司的SLC500(该公司的可编程控制器型号)计算机控制系统。全厂设备采用远程控制,由工作人员在中央控制室发布命令控制设备运转(如:根据集水井液位控制水泵启停等),大大减轻了工作人员的劳动强度。但由于设备出现故障时只显示故障信息而没有声音报警,给工作人员及时发现问题带来了极大不便。笔者对系统进行分析后,利用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事件中加入如下代码:

  Private Sub Form1_load ()

  Label1.LinkTopic=”rtdata|airportauto”

  ′设立DDE连接通道

  Label1.LinkItem=”plc1 101”

  ′设定连接项目为进水泵故障,此项根据连接项目的不同而不同,如果你使的是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运行之后启动该程序,就可以实现进水泵故障的语音报警了。

  上面只是个例子,在功能上及用户界面上都还很不完善,但是利用同一方法可以实现在线设备的监视及信号采集等工作,有兴趣的话,读者可以自己尝试。以上代码在VB6、Windows 9X环境下运行成功。


图1

  北京首都国际机场污水处理厂设备运行使用的是基于某一公司的SLC500(该公司的可编程控制器型号)计算机控制系统。全厂设备采用远程控制,由工作人员在中央控制室发布命令控制设备运转(如:根据集水井液位控制水泵启停等),大大减轻了工作人员的劳动强度。但由于设备出现故障时只显示故障信息而没有声音报警,给工作人员及时发现问题带来了极大不便。笔者对系统进行分析后,利用VB编程通过DDE(Dynamic Data Exchange)与工控系统通讯,实现了系统语音报警的功能。



【发表评论】【初学者园地】【科技聊天】【关闭窗口】

新 闻 查 询

 相关链接
【学园专题】Visual Basic编程技巧
用VisualBasic做个IE保护器 (2001/11/05 16:23)
用Visual Basic提取图标资源 (2001/10/31 13:54)
Visual Basic开发应用程序答疑 (2001/10/10 10:40)
用VisualBasic编写进度栏时钟 (2001/08/27 13:51)
用Visual Basic自编小游戏 (2001/04/24 15:01)
评论:Visual Basic宣告死亡 (2001/04/04 09:49)
用Visual Basic编程建立自己的回收站 (2000/09/29 11:23)
用Visual Basic设计E-mail程序 (2000/05/26 11:44)
VisualBasic中用户界面的设计原则 (2000/05/25 10:41)
Visual Basic 6中发送邮件的新方法 (2000/04/13 21:34)
用Visual Basic 6创建基于MTS的商务组件 (2000/04/13 21:27)


科技时代意见反馈留言板 电话:010-82612286 或 010-82628888-3488   欢迎批评指正

网站简介 | 用户注册 | 广告服务 | 招聘信息 | 中文阅读 | Richwin | 联系方式 | 帮助信息

Copyright © 1996 - 2001 SINA.com, Stone Rich Sight. All Rights Reserved

版权所有 四通利方 新浪网