正文

基于VB的分布式监控系统通信设计2005-08-02 04:09:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/stef/3394.html

分享到:

郭爱文 (武汉大学动力工程系自动化专业) 王  静 (武汉大学电力工程系通讯专业) 武汉  430072 摘  要  本文介绍了利用VB的多种通信手段实现分布式监控系统的多种通信功能,对每一种通信手段给出其原理和应用实例。 关键词  VB  通信  串行口  控件  DDE  API The Communication Design of Distributed Control System Based on VB Abstract:  This article introduces the realization of many communication functions of Distributed Control System with the application on lots of communication methods of VB. Key Words:  VB, Communication, Serial Port, Control Box, DDE, API 1. 概论 分布式监控系统已在工业领域得到广泛应用,许多企业对于中小规模的设备,如中小型热电厂和水电站,出于硬件软件投资利润率和性能价格比的考虑,常常是自行开发或参与开发本企业的监控系统。而许多企业在成套引进大型DCS系统后,也常因实际情况而需要自行开发或改进其监控系统。 分布式监控系统以微机为基础,用数据通信将微机连在一起实现数据共享,从而对工业过程进行集中监视管理和分散控制。因此,分布式监控系统中通信的设计与实现是至关重要的环节。Visual Basic开发语言具有简洁明了、编程效率高、开发周期短的特点,利用VB中的多种通信手段,可实现分布式监控系统的多种通信功能。 2. 与下位机的通信 分布式监控系统的数据采集站可直接与现场带有标准RS-232C接口的智能仪表、PLC和单片机等链接,并可通过扩展控制卡形成一个数据采集子网,以高速准确地获取数据。VB的MSCOMM通信控件具有完善的串口数据发送和接受功能,利用它可以屏蔽对硬件的操作,简易快捷地进行串行通信编程。 本文的实例为上位机与OMRON 200HG系列PLC的1:N链接通信。带有RS-485接口通信板的PLC直接挂在RS-485总线上,上位机通过RS-232C /RS-485转换器与总线相连,这样即构成数据采集子网,甚至可以是一个独立的小型分布式监控系统。其它仪器仪表设备,只要是标准串口都可以类似方式直接或间接与上位机链接。 关于VB的MSCOMM控件可参考相关资料。本例通信程序摘要如下: (1) 初始化程序 Mscomm1.Commport=2           ' 选择COM2 Mscomm1.Settings="9600,N,8,2"   ' 设置通信参数 Mscomm1.Inputlen=0             ' 读入接收缓冲区全部字符   Mscomm1.OutbufferSize=256      ' 设置发送缓冲区大小 Mscomm1.InbufferSize=512       ' 设置接收缓冲区大小 Mscomm1.PortOpen=True          '打开COM2 (2) 发送命令程序 比如读取节点号03的PLC中IR000到IR009的内容,并放到tag1字符串变量中,此时有: Dim Command, node, begin, number as string Dim Answerlen as integer node="03"            '节点号 Command="RR"       '命令为读IR区 begin="0000"          '从IR000开始 number=10              '读取长度 Answerlen=51           '计算接收字符串长度 进行命令发送和接收应答处理: Dim  FCS, I as integer Dim  s ,f as string s="@"+node+Commad+begin+number FCS=0 For i=1 to Len(s)    FCS=FCS xor Asc(Mid$(s,i,1) )      '帧校验码FCS Next i f=Hex$(FCS) If  Len(f)=1  Then  f="0"+f Commfrm.MSComm1.Output=s + f + "*" + CHR$(13)   '命令帧发送 Do Dummy=DoEvents() Loop Untill Commfrm.MSComm1.InbufferCount >= Answerlen   '等待应答帧 Do tag1= Commfrm.MSComm1.Input Loop Untill Commfrm.MSComm1.InbufferCount=0  '读完应答帧 上述程序具有相当的通用性,对于其它设备不同的只是各自的数据帧格式,因而只需做相应少量修改即可。 3. 节点自身的"通信" 节点自身的"通信"是一种形象的说法,严格说来应是VB应用程序利用DDE技术与本节点其它Windows应用程序进行数据交换。DDE(Dynamic Data Exchange)即动态数据交换,它是Windows支持的三种内部通信机制之一,是应用程序间通过共享内存进行进程间通信的一种形式。应用程序间进行数据交换称为"会话"(Conversation),申请会话端叫客户(Client),响应申请端叫服务器(Server)。一旦客户与服务器间建立起DDE所需的数据链路就可自动进行数据交换。 在监控系统开发中,工控组态软件以其功能强大、使用方便等特点得到广泛应用,但在处理复杂数据时其计算功能受到一定限制,而VB可以较好地弥补这一不足,并且还能承担数据采集、报表打印等功能。这就需要在VB应用程序与组态软件应用程序间进行动态数据交换。 VB中只有TextBox、PictureBox、Label和Form可以与其它应用程序进行动态数据交换,控件用于DDE的属性项有LinkTopic(连接主题)、LinkItem(连接项)、LinkMode(连接模式)和LinkTimeout(连接等待时间)。 这里以本实验室的小型分布式监控实验系统为例,介绍一个VB应用程序与组态王5.0应用程序间实现DDE的实例。 3.1 VB作为Server,组态王作为Client 当有些参数需要从VB应用程序传输到组态王应用程序,如VB从PLC采集水位值参数至程序Ser.vbp的Text1,再将数据动态传递给组态王的I/O变量SW,这时VB作为Server,组态王作为Client。 VB程序Ser.vbp 中属性设置如下(Form1为Text1所在窗体): Form1.LinkTopic = "water"      数据交换的话题 Form1.LinkMode = 1           作为服务器 组态王的设置如下: 新建一个名为vbdde的DDE设备,服务程序名Ser,话题名water,数据交换方式为标准WINDOWS项目交换。新建一个名为SW的I/O变量,连接设备设为vbdde,项目名设为Text1。 3.2 组态王作为Server,VB作为Client 当有些参数需要从组态王传输到VB,如为了提高变频器电压以提升泵速,可在组态王应用程序中改变I/O变量BS值并动态传递给VB的Text2,VB接收到数据后经处理再传递给PLC相应继电器区。这时组态王作为Server,VB作为Client。 组态王设置如下: 新建一个名为BS的I/O变量,连接设备设为已建立的vbdde设备,项目名设为bengsu。 VB程序Ser.vbp中设置如下: Text2.LinkTopic = "view|tagname" Text2.LinkItem = "bengsu" Text2.LinkMode = 1 TextBox控件有无连接、自动式连接、被动式连接和通知式连接四种连接模式,可依据实际情况灵活运用。

阅读(2860) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册