《在Windows平台下利用VB实现电脑与三菱Q00PLC的串行通讯.docx》由会员分享,可在线阅读,更多相关《在Windows平台下利用VB实现电脑与三菱Q00PLC的串行通讯.docx(14页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、在Windows平台下利用VB实现电脑与三菱Q00PLC的串行通讯在Windows平台下利用VB实现电脑与三菱Q00PLC的串行通讯 EIA制订并发布的,RS-232在1962年发布,后来陆续有不少改良版本,其中最常用的是RS-232-C版。 目前RS-232是PC机与通讯工业中应用最广泛的一种串行接口。RS-232被定义为一种在低速率串行通讯中增加通讯间隔 的单端标准。RS-232采取不平衡传输方式,即所谓单端通讯。标准规定,RS232的传送间隔 要求可达50英尺约15米,最高速率为20kbps。 align=center图1 RS232端口的硬件握手和连接方式/align RS232的通讯
2、信号电平为正负515V,这不同于数字电路的03V或者05V,所以要以RS232的方式进展通讯,源信号不匹配时需要进展电压转换。 当进展数据传送时,只用一根数据线且只能进展单向传输的方式,称为单工方式; 当进展数据传送时,只用一根数据线利用不同时段进展双向传输的方式,称为半双工方式;当进展数据传送时,利用两根数据线同时进展发送和接收的方式,称为全双工方式。 由于RS-232存在传输间隔 有限等缺乏,于是RS-422诞生了。RS-422标准全称是“平衡电压数字接口电路的电气特性,它定义了一种平衡通讯接口,将传输速率进步到10Mbps,传输间隔 延长到4000英尺约1219米,并允许在一条平衡总线上
3、连接最多10个接收器。当然,RS422也有缺陷: 由于其平衡双绞线的长度与传输速率成反比,所以在100kbps速率以内,传输间隔 才可能到达最大值,也就是讲,只有在很短的间隔 下才能获得最高传输速率。一般在100米长的双绞线上所能获得的最大传输速率仅为1Mbps。另外有一点必须指出,在RS-422通讯中,只有一个主设备Master,其余为从设备Salve,从设备之间不能进展通讯,所以RS-422支持的是点对多点的双向通讯。 为扩展应用范围,RS于1983年在RS-422根底上制定了RS-485标准,增加了多点、双向通讯才能,即允很多个发送器连接到同一条总线上,同时增加了发送器的驱动才能和冲突保
4、护特性,扩展了总线共模范围,后命名为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 通讯协议 三菱
5、的 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 侧发送的响应文件后发送下一个命令文件在响应文件的承受尚未完成之前不能进展下一个命令文件的
6、发送 align=center图2 命令文件和响应的顺序/align 2 对于命令文件不能接收正常完毕的响应文件时 承受异常完毕的响应文件时,可根据响应文件中的出错代码进展处理 3.3 Q00PLC 的帧格式 Q00PLC内置了MC通讯协议的QnA 兼容3C 帧和 RS232 通讯接口,所以不用外加通讯模块就可以实现与上位机的通讯。本例拟采用QnA 兼容3C 帧的第4种格式进展通讯。 3.3.1 对方设备读出上位站PLC CPU 的数据时 a 上位机向 PLC CPU 侧传输命令传输文件,下列图中箭头所指的区域为恳求数据区。 align=center图3 读取时的发送帧格式/align b P
7、LC CPU 侧响应上位机的应答传输文件,下列图中箭头所指的区域为从PLC中读出并返回的数据 align=center图4 返回的帧格式/align 3.3.2 对方设备向上位站PLC CPU 写入数据时 a 帧格式与图3中的格式类似,只是帧中的命令和子命令为读取时的命令,恳求数据区中增加了写入的数据。 b 帧格式与图34中的格式类似,只是没有返回的数据。 四 Windows环境下 VB 与 Q00PLC 通讯的实现 4.1 系统分析与讲明 Windows系统为每个通讯设备开拓了用户定义的输入/输出缓冲区,数据进出通讯口均由系统后台来完成,应用程序只需完成对输入/输出缓冲区操纵就可以了。实际经
8、过是每接收一个字符就产生一个低级硬件中断,Windows系统中的串行驱动程序就获得了控制权,并将接收到的字符放入缓冲区,然后将控制权返还给正在运行的应用程序。假如输入缓冲区数据已满,串行驱动程序用当前定义的流控制机制通知发送方停顿发送数据,而队列中的数据按先进先出 FIFO的次序处理。 在Windows中,串行通讯有两种工作方式:查询方式和事件驱动方式。查询方式占用大量的CPU时间,效率较低,但是数据不易丧失;而Win32操纵系统基于事件驱动 也称为消息驱动机制的内核,支持基于进程的协同式多任务和基于多线程的抢先式多任务。基于事件驱动的多线程应用程序实际上在其内部实现了多任务扩展,为代码赋予了
9、并行执行的特性,可以使应用程序对CPU的利用率大大进步,进而进步系统的响应才能,加快信息处理速度,进步通讯程序的实时性和增大数据吞吐量。 基于以上分析,以事件驱动方式实现Windows下的串行通讯更具上风,它能完成较大数据量的实时通讯,大大进步了通讯的效率,故本程序采用此种方式进展串行通讯,至于通讯的可靠性可以通过软件设计来保证。 Windows平台下利用VB实现串口通讯主要有以下两种方法: 1使用Windows APIApplication Program Interface函数。这种方法可编写移植性强的通讯程序,但必须首先用Declare声明VB中所要用的动态链接库DLL,这需要对Wind
10、ows API函数有深化的理解,编程较复杂。 2使用Microsoft公司提供的Active X控件MSComm。该通讯控件通过改变对象属性,向对象发送消息及为对象事件编写响应代码,可以方便地完成用户应用程序间的串行通讯,既可实现API函数的所有功能,又使得编程效率进步,应用功能增强,并且程序简单明了。 对于MSComm控件实现串口通讯的操纵很多文献都有阐述,该控件的主要属性可参考相关文献,在此仅列出常用的属性和方法。需要强调的是:在数据发送与接收经过中,都要通过一个Variant类型变量作为中介。发送数据时,必须先将要发送的数据赋给一个Variant类型变量,再把该Variant变量赋值给M
11、SComm的Output属性;同样承受数据时,也应先将MSComm的Input属性赋值给Variant变量,待接收端收到后必须转换成其它类型如字符型、二进制型的数据才能进展处理。本例采用MSComm控件来实现。 下面介绍MSCOMM控件的属性: CommPort:设定通讯连接端口代号,程序必须指定所要使用的串行端口号,Windows系统使用所设定的端口与外界通讯。 PortOpen:设定通讯口状态,假设为真,通讯端口翻开,否那么关闭。 Settings:设定通讯口参数,其格式是bbbb,p,d,s,其中bbbb为通讯速率波特率,p为通讯检查方式奇偶校验,d为数据位数,s为停顿位数,其设定应与P
12、LC的设定一致。 Input:将对方传送至输入缓冲区的字符读入到程序。 Output:将字符写入输出缓冲区。 InBufferCount:传回接收缓冲区中的字符数。 OutBufferCount:传回输出缓冲区中的字符数。 InputLen:设定串行端口读入字符串的长度。 InputMode:设定接收数据的方式。 Rthreshold:设定引发接收事件的字符数。 CommEvent:传回OnComm事件发生时的数值码 OnComm事件:无论是错误或者事件发生,都会触发此事件。 4.2 详细实现 本例程序为读取Q00PLC的输入输出点的状态。监控界面如下所示: align=center图5 监控
13、界面/align 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.PortOpe
14、n = 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.Out
15、BufferCount = 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,
16、 RDw As String If MSComm1.CommEvent = comEvReceive Then RD = MSComm1.Input If LeftRD, 1 = STX Then RDw = MidRD, 12, 48 j = 0 Select Case F Case 1 j = 48 Case -1 j = 96 End Select For i = 1 To 48 Temp = MidRDw, i, 1 If F = 1 Then If Temp = 1 Then Laleli - 1.BackColor = &H80FF80 Else If i 五 完毕语 VB是一种成
17、熟的、面向对象的程序设计语言,采用它编写的Windows环境下PC机与Q00PLC的串行通讯软件具有程序实现简便、通用性强的特点,减轻了软件开发者的工作量,对于国内的中、小型企业具有现实意义。 1 王栋,Visual Basic6.0程序设计实用教程M,清华大学出版社,20032 工业接口与通讯,吕志艺,20033 Q 系列 MELSEC 通讯协议参考手册4 三菱 Q 系列可编程控制器编程手册;简介:马磊:1981年10月12日出生;性别:女;籍贯:山东省魏桥镇南郑村;在读研究生;研究方向:造纸装备与控制。吕多勇:1982年6月出生;男;籍贯:山东省济南市历城区;本科,学士学位;联络方式:通讯地址:山东省济南市 大学科技园 山东轻工业学院 轻化与环境工程学院,06级研究生,马磊。 :250353 邮箱:aima2005126