在Windows平台下利用VB实现电脑与三菱Q00PLC的串行通信.docx

上传人:b****6 文档编号:5993457 上传时间:2023-01-02 格式:DOCX 页数:8 大小:238.88KB
下载 相关 举报
在Windows平台下利用VB实现电脑与三菱Q00PLC的串行通信.docx_第1页
第1页 / 共8页
在Windows平台下利用VB实现电脑与三菱Q00PLC的串行通信.docx_第2页
第2页 / 共8页
在Windows平台下利用VB实现电脑与三菱Q00PLC的串行通信.docx_第3页
第3页 / 共8页
在Windows平台下利用VB实现电脑与三菱Q00PLC的串行通信.docx_第4页
第4页 / 共8页
在Windows平台下利用VB实现电脑与三菱Q00PLC的串行通信.docx_第5页
第5页 / 共8页
点击查看更多>>
下载资源
资源描述

在Windows平台下利用VB实现电脑与三菱Q00PLC的串行通信.docx

《在Windows平台下利用VB实现电脑与三菱Q00PLC的串行通信.docx》由会员分享,可在线阅读,更多相关《在Windows平台下利用VB实现电脑与三菱Q00PLC的串行通信.docx(8页珍藏版)》请在冰豆网上搜索。

在Windows平台下利用VB实现电脑与三菱Q00PLC的串行通信.docx

在Windows平台下利用VB实现电脑与三菱Q00PLC的串行通信

在Windows平台下利用VB实现电脑与三菱Q00PLC的串行通信

摘要:

本文分析了Windows环境下串行通信的编程技术,介绍了在Windows环境下用VB6.0语言编写串行通信程序,实现了PC机与三菱 Q00PLC 之间的串行通信,并提出了在实际应用中提高串行通信性能的方法。

关键词:

VB;Win32API函数;串行通信;Q00PLC

一 概述

    在工业控制中,串口是常用的计算机与外部串行设备之间的数据传输通道。

由于串行通信结构简单、可靠性强、实现及使用成本低、通讯标准统一,因此在测控系统和工程中应用十分广泛。

目前Windows在工业生产监控管理系统中已成为主流平台 ,Windows环境下的上、下位机之间的串行通信是设计与开发监控管理系统和集散控制系统的重要组成部分。

    Microsoft公司的VB++6.0是一种高级编程语言,它提供的串列通信控件封装了封装了Win32API中的标准通信函数,可以让开发者方便开发串列通信上位机程序。

 

    PLC是现在控制领域不可缺少的部分,已经非常普及,如何简便的与PLC交互已经成为众多厂商新的竞争战场。

由此产生了人机界面、组态软件等产品。

这些产品的产生大大简化了对PLC的控制,操作,使用更方便。

但也有共同的缺点:

价格过高和开放性较差。

VB作为“原始"的编程语言在这两方面无疑有着明显的优势。

 

二 串行通信

    串行通信是指计算机主机与外设之间以及主机系统与主机系统之间数据的串行传送。

使用串口通信时,发送和接收到的每一个字符实际上都是一次一位的传送的,每一位为1或者为0。

 

    2.1 串行通信的分类 

    串行通信可以分为同步通信和异步通信两类。

同步通信是按照软件识别同步字符来实现数据的发送和接收,异步通信是一种利用字符的再同步技术的通信方式。

 

    2.1.1 同步通信 

    同步通信是一种连续串行传送数据的通信方式,一次通信只传送一帧信息。

这里的信息帧与异步通信中的字符帧不同,通常含有若干个数据字符。

 

    它们均由同步字符、数据字符和校验字符(CRC)组成。

其中同步字符位于帧开头,用于确认数据字符的开始。

数据字符在同步字符之后,个数没有限制,由所需传输的数据块长度来决定;校验字符有1到2个,用于接收端对接收到的字符序列进行正确性的校验。

同步通信的缺点是要求发送时钟和接收时钟保持严格的同步。

 

2.1.2  异步通信 

    异步通信中,在异步通行中有两个比较重要的指标:

字符帧格式和波特率。

数据通常以字符或者字节为单位组成字符帧传送。

字符帧由发送端逐帧发送,通过传输线被接收设备逐帧接收。

发送端和接收端可以由各自的时钟来控制数据的发送和接收,这两个时钟源彼此独立,互不同步。

 

    接收端检测到传输线上发送过来的低电平逻辑"0"(即字符帧起始位)时,确定发送端已开始发送数据,每当接收端收到字符帧中的停止位时,就知道一帧字符已经发送完毕。

    2.2 几种流行的串行通信协议

    RS-232、RS-422和RS-485都是串行数据接口标准,最初都是由电子工业协会(EIA)制订并发布的,RS-232在1962年发布,后来陆续有不少改进版本,其中最常用的是RS-232-C版。

 

    目前RS-232是PC机与通信工业中应用最广泛的一种串行接口。

RS-232被定义为一种在低速率串行通信中增加通信距离的单端标准。

RS-232采取不平衡传输方式,即所谓单端通信。

标准规定,RS-232的传送距离要求可达50英尺(约15米),最高速率为20kbps。

图1 RS232端口的硬件握手和连接方式

    RS232的通讯信号电平为正负5~15V,这不同于数字电路的0~3V或0~5V,所以要以RS232的方式进行通讯,源信号不匹配时需要进行电压转换。

    当进行数据传送时,只用一根数据线且只能进行单向传输的方式,称为单工方式; 当进行数据传送时,只用一根数据线利用不同时段进行双向传输的方式,称为半双工方式;当进行数据传送时,利用两根数据线同时进行发送和接收的方式,称为全双工方式。

    由于RS-232存在传输距离有限等不足,于是RS-422诞生了。

RS-422标准全称是“平衡电压数字接口电路的电气特性”,它定义了一种平衡通信接口,将传输速率提高到10Mbps,传输距离延长到4000英尺(约1219米),并允许在一条平衡总线上连接最多10个接收器。

当然,RS-422也有缺陷:

 因为其平衡双绞线的长度与传输速率成反比,所以在100kbps速率以内,传输距离才可能达到最大值,也就是说,只有在很短的距离下才能获得最高传输速率。

一般在100米长的双绞线上所能获得的最大传输速率仅为1Mbps。

另外有一点必须指出,在RS-422通信中,只有一个主设备(Master),其余为从设备(Salve),从设备之间不能进行通信,所以RS-422支持的是点对多点的双向通信。

 

    为扩展应用范围,RS于1983年在RS-422基础上制定了RS-485标准,增加了多点、双向通信能力,即允许多个发送器连接到同一条总线上,同时增加了发送器的驱动能力和冲突保护特性,扩展了总线共模范围,后命名为TIA/RS-485-A标准。

 

    由于RS-485是从RS-422基础上发展而来的,所以RS-485许多电气规定与RS-422相仿,如都采用平衡传输方式、都需要在传输线上接终接电阻、最大传输距离约为1219米、最大传输速率为10Mbps等。

但是,RS-485可以采用二线与四线方式,采用二线制时可实现真正的多点双向通信,而采用四线连接时,与RS-422一样只能实现点对多点通信,但它比RS-422有改进, 无论四线还是二线连接方式总线上可接多达32个设备。

   三菱的 Q00PLC 的通讯接口为RS232。

三 三菱 Q00PLC 的通讯方式

    3.1 通讯协议

    三菱的 Q00PLC 采用列 MELSEC 通讯协议,即 MC 协议。

MC协议采用帧的形式进行通讯,它包括以下几种形式:

    

(1)、QnA 兼容3C 帧。

此种帧包括1-4种格式。

    

(2)、QnA 兼容4C 帧。

此种帧包括1-5种格式。

    (3)、QnA 兼容2C 帧。

此种帧包括1-4种格式。

    (4)、QnA 兼容3E 帧。

此种帧包括1-4种格式。

    (5)、A 兼容1E 帧。

    3.2  实现方式

    

(1) 命令文件的发送

    采用MC 协议进行的数据通讯采用半双工通讯方式进行。

访问PLC CPU 时对于刚刚进行的命令文件发送请在接收PLC CPU 侧发送的响应文件后发送下一个命令文件(在响应文件的接受尚未完成之前不能进行下一个命令文件的发送)

 

图2 命令文件和响应的顺序

    

(2) 对于命令文件不能接收正常结束的响应文件时

     接受异常结束的响应文件时,可根据响应文件中的出错代码进行处理

    3.3 Q00PLC 的帧格式

    Q00PLC内置了MC通讯协议的QnA 兼容3C 帧和 RS232 通讯接口,所以不用外加通讯模块就可以实现与上位机的通讯。

本例拟采用QnA 兼容3C 帧的第4种格式进行通讯。

    3.3.1 对方设备读出上位站PLC CPU 的数据时

    a 上位机向 PLC CPU 侧传输命令传输文件,下图中箭头所指的区域为请求数据区。

 

图3 读取时的发送帧格式

    b PLC CPU 侧响应上位机的应答传输文件,下图中箭头所指的区域为从PLC中读出并返回的数据

 

图4 返回的帧格式

    3.3.2 对方设备向上位站PLC CPU 写入数据时

    a 帧格式与图3中的格式类似,只是帧中的命令和子命令为读取时的命令,请求数据区中增加了写入的数据。

    b 帧格式与图34中的格式类似,只是没有返回的数据。

四 Windows环境下 VB 与 Q00PLC 通信的实现

    4.1 系统分析与说明

    Windows系统为每个通信设备开辟了用户定义的输入/输出缓冲区,数据进出通信口均由系统后台来完成,应用程序只需完成对输入/输出缓冲区操作就可以了。

实际过程是每接收一个字符就产生一个低级硬件中断,Windows系统中的串行驱动程序就取得了控制权,并将接收到的字符放入缓冲区,然后将控制权返还给正在运行的应用程序。

如果输入缓冲区数据已满,串行驱动程序用当前定义的流控制机制通知发送方停止发送数据,而队列中的数据按先进先出 (FIFO)的次序处理。

  在Windows中,串行通信有两种工作方式:

查询方式和事件驱动方式。

查询方式占用大量的CPU时间,效率较低,但是数据不易丢失;而Win32操作系统基于事件驱动 (也称为消息驱动)机制的内核,支持基于进程的协同式多任务和基于多线程的抢先式多任务。

基于事件驱动的多线程应用程序实际上在其内部实现了多任务扩展,为代码赋予了并行执行的特性,可以使应用程序对CPU的利用率大大提高,从而提高系统的响应能力,加快信息处理速度,提高通信程序的实时性和增大数据吞吐量。

  基于以上分析,以事件驱动方式实现Windows下的串行通信更具优势,它能完成较大数据量的实时通信,大大提高了通信的效率,故本程序采用此种方式进行串行通信,至于通信的可靠性可以通过软件设计来保证。

Windows平台下利用VB实现串口通信主要有以下两种方法:

    1)使用Windows API(Application Program Interface)函数。

这种方法可编写移植性强的通信程序,但必须首先用Declare声明VB中所要用的动态链接库DLL,这需要对Windows API函数有深入的了解,编程较复杂。

    2)使用Microsoft公司提供的Active X控件MSComm。

该通信控件通过改变对象属性,向对象发送消息及为对象事件编写响应代码,可以方便地完成用户应用程序间的串行通信,既可实现API函数的所有功能,又使得编程效率提高,应用功能增强,并且程序简单明了。

    对于MSComm控件实现串口通信的操作很多文献都有论述,该控件的主要属性可参考相关文献,在此仅列出常用的属性和方法。

需要强调的是:

在数据发送与接收过程中,都要通过一个Variant类型变量作为中介。

发送数据时,必须先将要发送的数据赋给一个Variant类型变量,再把该Variant变量赋值给MSComm的Output属性;同样接受数据时,也应先将MSComm的Input属性赋值给Variant变量,待接收端收到后必须转换成其它类型(如字符型、二进制型)的数据才能进行处理。

本例采用MSComm控件来实现。

下面介绍MSCOMM控件的属性:

    CommPort:

设定通信连接端口代号,程序必须指定所要使用的串行端口号,Windows系统使用所设定的端口与外界通信。

    PortOpen:

设定通信口状态,若为真,通信端口打开,否则关闭。

    Settings:

设定通信口参数,其格式是"bbbb,p,d,s",其中bbbb为通信速率(波特率),p为通信检查方式(奇偶校验),d为数据位数,s为停止位数,其设定应与PLC的设定一致。

    Input:

将对方传送至输入缓冲区的字符读入到程序。

    Output:

将字符写入输出缓冲区。

    InBufferCount:

传回接收缓冲区中的字符数。

    OutBufferCount:

传回输出缓冲区中的字符数。

    InputLen:

设定串行端口读入字符串的长度。

    InputMode:

设定接收数据的方式。

    Rthreshold:

设定引发接收事件的字符数。

    CommEvent:

传回OnComm事件发生时的数值码

    OnComm事件:

无论是错误或事件发生,都会触发此事件。

    4.2 具体实现

    本例程序为读取Q00PLC的输入输出点的状态。

监控界面如下所示:

 

图5 监控界面

    4.2.1 控件参数的初始化

  MSComm1.InBufferCount = 0        ‘清空输入缓冲区

  MSComm1.OutBufferCount = 0       ‘清空输出缓冲区

  MSComm1.CommPort = 1           ‘设定串行通信口为com1

  MSComm1.Settings = "19200,O,8,1"  ‘波特率19200,奇校验,8位数据位,1位停止位

  MSComm1.InputLen = 0            ‘一次读入输入缓冲区中的字符串的长度为缓冲区中的所有数据

  MSComm1.RThreshold = 62       ‘输入缓冲区中每次接到62个字符就产生一次OnComm事件

  MSComm1.PortOpen = True        ‘打开端口    

  Dim STX As String                ‘以下为MC协议中的ASCII码

  Dim ENQ As String

  Dim ACK As String

  Dim CR As String

  Dim LF As String

  Dim NAK As String

  STX = Chr$(&H2)

  ENQ = Chr$(&H5)

  ACK = Chr$(&H6)

  CR = Chr$(&HD)

  LF = Chr$(&HA) 

4.2.2 计算机与PLC通信程序

Private Sub Timer1_Timer() 

 Dim SD As String

     MSComm1.InBufferCount = 0

     MSComm1.OutBufferCount = 0 

     If F = 1 Then

         SD = ENQ + "F9" + "0000FF00" + "0401" + "0001" + "X*" + "000020"

              + "0030" + CR + LF

      Else

        SD = ENQ + "F9" + "0000FF00" + "0401" + "0001" + "Y*" + "000050"

             + "0030" + CR + LF

     End If

     MSComm1.Output = SD

   Timer1.Enabled = False 

 End Sub 

  ‘OnComm事件

Private Sub MSComm1_OnComm()

  Dim i, j As Integer

  Dim RD, Temp, RDw As String

  If MSComm1.CommEvent = comEvReceive Then

     RD = MSComm1.Input

    If Left(RD, 1) = STX Then

      RDw = Mid(RD, 12, 48)

       j = 0

     Select Case F

       Case 1

        j = 48

       Case -1

        j = 96

     End Select

        For i = 1 To 48

            Temp = Mid(RDw, i, 1)

        If F = 1 Then

           If Temp = "1" Then

               Lalel(i - 1).BackColor = &H80FF80

           Else

             If i <= 3 Then

               Lalel(i - 1).BackColor = &HFF

             Else

             Lalel(i - 1).BackColor = &HFFFF00

             End If

          End If

       Else

          If Temp = "1" Then

             If i = 42 Then

               Lalel(i - 1 + 48).BackColor = &HFF

             Else

               Lalel(i - 1 + 48).BackColor = &H80FF80

             End If

          Else

             Lalel(i - 1 + 48).BackColor = &HFFFF00

          End If

       End If

        Next i

    F = F * (-1)

     Timer1.Enabled = True

     ‘F = F * (-1)

    End If

  End If

End Sub 

五 结束语

    VB是一种成熟的、面向对象的程序设计语言,采用它编写的Windows环境下PC机与Q00PLC的串行通讯软件具有程序实现简便、通用性强的特点,减轻了软件开发者的工作量,对于国内的中、小型企业具有现实意义。

参考文献

[1] 王栋,Visual Basic6.0程序设计实用教程[M],清华大学出版社,2003

[2] 工业接口与通讯,吕志艺,2003

[3] Q 系列 MELSEC 通讯协议参考手册

[4] 三菱 Q 系列可编程控制器编程手册;

作者简介:

马磊:

1981年10月12日出生;性别:

女;籍贯:

山东省魏桥镇南郑村;在读研究生;研究方向:

造纸装备与控制。

吕多勇:

1982年6月出生;男;籍贯:

山东省济南市历城区;本科,学士学位;

联系方式:

通讯地址:

山东省济南市 大学科技园 山东轻工业学院 轻化与环境工程学院,06级研究生,马磊。

  邮编:

250353   邮箱:

aima2005@

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1