Windows环境下 VB 与 Q00PLC 通信的实现文档格式.docx
《Windows环境下 VB 与 Q00PLC 通信的实现文档格式.docx》由会员分享,可在线阅读,更多相关《Windows环境下 VB 与 Q00PLC 通信的实现文档格式.docx(8页珍藏版)》请在冰豆网上搜索。
它们均由同步字符、数据字符和校验字符(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个设备。
三菱的
的通讯接口为RS232。
三
三菱
的通讯方式
3.1
通讯协议
采用列
MELSEC
通讯协议,即
MC
协议。
MC协议采用帧的形式进行通讯,它包括以下几种形式:
(1)、QnA
兼容3C
帧。
此种帧包括1-4种格式。
(2)、QnA
兼容4C
此种帧包括1-5种格式。
(3)、QnA
兼容2C
(4)、QnA
兼容3E
(5)、A
兼容1E
3.2
实现方式
(1)
命令文件的发送
采用MC
协议进行的数据通讯采用半双工通讯方式进行。
访问PLC
CPU
时对于刚刚进行的命令文件发送请在接收PLC
侧发送的响应文件后发送下一个命令文件(在响应文件的接受尚未完成之前不能进行下一个命令文件的发送)
图2
命令文件和响应的顺序
(2)
对于命令文件不能接收正常结束的响应文件时
接受异常结束的响应文件时,可根据响应文件中的出错代码进行处理
3.3
的帧格式
Q00PLC内置了MC通讯协议的QnA
帧和
RS232
通讯接口,所以不用外加通讯模块就可以实现与上位机的通讯。
本例拟采用QnA
帧的第4种格式进行通讯。
3.3.1
对方设备读出上位站PLC
的数据时
a
上位机向
PLC
侧传输命令传输文件,下图中箭头所指的区域为请求数据区。
图3
读取时的发送帧格式
b
侧响应上位机的应答传输文件,下图中箭头所指的区域为从PLC中读出并返回的数据
图4
返回的帧格式
3.3.2
对方设备向上位站PLC
写入数据时
帧格式与图3中的格式类似,只是帧中的命令和子命令为读取时的命令,请求数据区中增加了写入的数据。
帧格式与图34中的格式类似,只是没有返回的数据。
四
Windows环境下
VB
与
通信的实现
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
‘清空输出缓冲区
MSComm1.CommPort
1
‘设定串行通信口为com1
MSComm1.Settings
"
19200,O,8,1"
‘波特率19200,奇校验,8位数据位,1位停止位
MSComm1.InputLen
‘一次读入输入缓冲区中的字符串的长度为缓冲区中的所有数据
MSComm1.RThreshold
62
‘输入缓冲区中每次接到62个字符就产生一次OnComm事件
MSComm1.PortOpen
True
‘打开端口
Dim
STX
As
String
‘以下为MC协议中的ASCII码
ENQ
String
ACK
CR
LF
NAK
Chr$(&
H2)
H5)
H6)
HD)
HA)
4.2.2
计算机与PLC通信程序
Private
Sub
Timer1_Timer()
Dim
SD
If
F
Then
+
F9"
0000FF00"
0401"
0001"
X*"
000020"
0030"
LF
Else
Y*"
000050"
End
If
MSComm1.Output
SD
Timer1.Enabled
False
‘OnComm事件
MSComm1_OnComm()
i,
j
Integer
RD,
Temp,
RDw
MSComm1.CommEvent
comEvReceive
RD
MSComm1.Input
Left(RD,
1)
Mid(RD,
12,
48)
Select
Case
F
1
48
-1
96
Select
For
i
To
Temp
Mid(RDw,
1)
1"
Lalel(i
-
1).BackColor
&
H80FF80
<
3
HFF
HFFFF00
42
48).BackColor
Next
i
*
(-1)
True
‘F
五
结束语
VB是一种成熟的、面向对象的程序设计语言,采用它编写的Windows环境下PC机与Q00PLC的串行通讯软件具有程序实现简便、通用性强的特点,减轻了软件开发者的工作量,对于国内的中、小型企业具有现实意义。
参考文献
[1]
王栋,Visual
Basic6.0程序设计实用教程[M],清华大学出版社,2003
[2]
工业接口与通讯,吕志艺,2003
[3]
Q
系列
通讯协议参考手册
[4]
系列可编程控制器编程手册;
作者简介:
马磊:
1981年10月12日出生;
性别:
女;
籍贯:
山东省魏桥镇南郑村;
在读研究生;
研究方向:
造纸装备与控制。
吕多勇:
1982年6月出生;
男;
籍贯:
山东省济南市历城区;
本科,学士学位;
联系方式:
通讯地址:
山东省济南市
大学科技园
山东轻工业学院
轻化与环境工程学院,06级研究生,马磊。
邮编:
250353
邮箱:
aima2005@