关键词:VB PLC 监控系统 交通灯
Abstract: This paper introduces the system of communication between VB and PLC. The system takes PC machine of VB as main-machine, PLC as submitted-machine. The system uses MSComm control components of VB, the free communication port of PLC by user defining protocol, links PC machine and PLC by PC/PPI cable, achieves the serial communication between the main-machine and the submitted-machine. And gives concrete application in the real time testing and controlling system of traffic lights in crossroad.
Key words: VB PLC monitor system traffic lights
1. 引言
随着经济发展,汽车数量急剧增加,城市道路日渐拥挤,交通拥塞已成为一个国际性的问题。因此,设计可靠、安全、便捷的多功能交通灯控制系统有极大的现实必要性。通常情况下,交通信号灯控制的主要缺陷是交通信号灯控制系统缺乏有效的应急措施,导致十字路交通受阻,造成不必要的经济损失。为此,我们考虑设计十字路口的监控系统。以便方便、快速的对交通灯控制。Siemens公司生产的PLC由于价格低、适应工业现场以及强大联网功能特点被广泛使用。考虑到这些因素,本系统以PLC作为下位机。上位机可以采用VC++、VB、Delphi等高级语言,由于本系统实现的功能相对简单,涉及的数据处理和数据管理要求不是太高,因此考虑用价格便宜,通讯容易实现的VB作为上位机。
2. 系统构成
图1 系统构成
系统构成如图1
监控系统主要由计算机和PLC构成。用PC/PPI电缆连接计算机的RS-232口和PLC的RS-485口,作为数据转换器(使用PC/PPI电缆上的DIP开关来为电缆配置正确的波特率)。
本系统选用的计算机处理器型号是Pentium (R) 4 CPU; 有40G的硬盘空间;选用Microsoft windows XP 操作系统;有一个COM口。
Siemens 公司提供多种型号的CPU以适应各种应用。本系统选用的是Siemens 公司生产的CPU224型号的S7-200PLC, 它有一个RS-485口, 14个输入口,10个输出口,完全可以满足该系统的要求(该系统需要8个输出口)。
3. 操作流程及通讯原理
3.1 操作流程
a 在SETP7-Micro/WIN软件的操作栏中点击system block 图标,出现图2所示的界面。
图2 配置S7-200CPU
b 为PLC选择站地址、波特率。
c 在操作栏中点击communications 图标,出现图3所示的界面。
图3配置S7-200CPU
d 在所示的界面3上点击右边栏的“双击刷新”按钮,以便搜寻正确的波特率。
e 将程序下载至PLC。
f 将 PLC处于RUN模式。
g 打开VB界面,点击菜单的“运行”选项,出现图4的所示的监控界面,在监控界面中输入需要传输的数据。
h 单击图4的监控界面上的开始按钮,通讯开始。
3.2 通讯原理
当程序开始时,初始化VB界面,打开通信端口,当按下VB界面上的开始按钮时,启动定时器,用于采集通信数据,该定时器每隔0.1s采集一次通信数据;同时接收和发送函数也已经打开,这时可以在VB界面中输入南北、东西交通灯的运行时间。即在VB中输入数据传送给PLC。
图4 监控界面
PLC程序开始时,初始化PLC的通讯端口,接收VB发送过来的数据,PLC判断是否接收到结束字符,如果没有接收到结束字符,PLC将处于接收状态,如果接收到结束字符,PLC延时0.01s后开始向VB发送数据。如果由于任何其它原因接收完成,启动一个新的接收。
VB接收PLC发送过来的数据“1”或“0”来控制交通灯的“亮”或“灭”,同时控制对应车的“运行”或“停止”。
当没有按下停止或结束按钮时,VB每隔0.1s发送一次数据给PLC, PLC接收到数据后,如果满足发送条件,就把数据发送给VB。这样就达到了计算机上的模拟界面来监控实际路面交通的运行状况,如果遇到紧急事件,需要调整车辆的运行时间,只需要在计算机中输入需要的时间即可。
3. 4. VB中的MSComm控件简介
4.1在Windows环境下,操作系统通过驱动程序控制各种硬件资源,不允许用户像在DOS 环境下那样直接对串口进行底层操作。为此,Visual Basic 6.0提供了一个串口通讯控件 Miscrosoft Comm Control,简 称MSComm 控件。操作员只需设置和监视MSComm控件的属性和事件,就可以轻而易举地实现串行通信。
4.2 MSComm控件的属性
.CommPort: 设置并返回通信端口号。
.Settings: 以字符串的形式设置并返回波特率、奇偶校验位、数据位和停止位。其中以字符n、o、e分别表示无校验、奇校验和偶校验。
.PortOpen: 设置并返回通信端口状态。设置为True时,打开端口;设置为False时,关闭端口。
.Input: 从接收缓冲区读取数据,类型为Variant。
.Output: 向发送缓冲区写入数据,类型为字符串或字节数组。
.InputMode: 设置从缓冲区读取数据的格式,设为0时为字符串格;设为1为二进制格式。
.InBufferCount: 设置和返回接收缓冲区的字节数,设为0时清空接收缓冲区。
.OutBufferCount: 设置和返回发送缓冲区的字节数,设为0时清空发送缓冲区。
.Inputlen: 设置和返回Input每次读出的字节数,设为0时读出接收缓冲区的全部内容。
.Rthreshold: 表示在串口事件OnComm发生之前,接收缓冲区接收的最少字节数。若设为0,可以禁止发生OnComm事件。一般设为1,即当接收缓冲区中的字节数大于等于1时,就会产生接收事件。
CommEvent: 返回相应的Oncomm事件常数。
4.3 MSComm控件处理接收信息的方式
MSComm控件提供了两种处理方式:
(1)事件驱动方式:Rthreshold 属性非0时,收到字符或传输线发生变化时就会产生串口事件OnComm。通过查询CommEvent属性可以捕获并处理这些通信事件。
(2)查询方式:通过查询InputBufferCount(接收缓冲区的字节数)属性值, 处理接收到的信息。
本文采用事件驱动方式
5. 方案的具体实现
5.1程序设计
图5 VB监控系统原理
5.1.1 VB发送数据给PLC
MSComm1.Output = Text2.Text & Text3.Text &Text4.Text & Text5.Text & Chr(10)
‘利用MSComm控件向PLC发送数据 (文本框内分别为控制交通灯南北直行、南北弯行、东西直行、东西弯行的时间) 说明:由于PLC识别从VB发送过来的ASCII码,所以这些文本框内为经过运算的, PLC的识别的ASCII码。这里用
p = Val(txt1.Text)
Text2.Text = Chr((p - 3) * 10)等语句。
5.1.2 VB接收PLC发送过来的数据
Private Sub MSComm1_OnComm()
If MSComm1.CommEvent = comEvReceive Then
‘如果接收到字符
S1 = MSComm1.Input
‘把接收缓冲区内的数据赋值给临时变量"S1"
If (S1 = Chr(&H1B)) And (Len(SCOMS) > 2) Then ‘如果变量"S1"(接收缓冲区内的数据接收到起始字符‘&H1B‘,并且变量"SCOMS"中的字节数大于2),则
SCOMS = ""
清空变量"SCOMS"中的数据
Else
‘否则
If S1 <> Chr(&HD) Then
‘如果变量"S1"没有接收到结束字符‘&H0D‘,则
SCOMS = SCOMS&S1
‘将"S1"中的数据累加到"SCOMS"中
Else
‘否则
……
‘数据处理
End sub
‘ 结束 Text5.text=MSComm1.input
xt5.T ‘ text5.Text为存放PLC发送过来的数据
End Sub
5.2下位机程序设计
5.2.1 PLC 接收VB发过来的数据 (PLC接收缓冲区的分配如图5)
RCV VB100, 0
图6 PLC 的接收缓冲区的数据分配
5.2.2 PLC向VB发送数据(PLC发送缓冲区的分配如图6)
MOVB 8, VB400
//设置发送字节个数为8,发送缓冲区为VB400
MOVB 16#1B, VB401
//设置发送信息的起始字符为"16#1B"
MOVB 16#0D, VB408
//设置发送信息的结束字符为"16#0D",
MOVB ‘1‘, VB402
NOT
MOVB ‘0‘, VB402
//若Q0.0有输出,VB402为"1",否则为"0"
XMT VB400, 0
//在端口0向用户回送信息,发送缓冲区指向VB400
图7 PLC的发送缓冲区的数据分配
6. 结论
通过VB实现与PLC通讯。使PLC的工作纳入微型计算机的管理之下。经试验验证,编制的VB程序在Microsoft windows XP系统下和PLC之间通讯运行良好、无误码,能有效的解决十字路口交通的运行状况。