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在bbbbbbs环境下,操作系统通过驱动程序控制各种硬件资源,不允许用户像在DOS 环境下那样直接对串口进行底层操作。为此,Visual Basic 6.0提供了一个串口通讯控件 Miscrosoft Comm Control,简 称MSComm 控件。操作员只需设置和监视MSComm控件的属性和事件,就可以轻而易举地实现串行通信。
4.2 MSComm控件的属性
.CommPort: 设置并返回通信端口号。
.Settings: 以字符串的形式设置并返回波特率、奇偶校验位、数据位和停止位。其中以字符n、o、e分别表示无校验、奇校验和偶校验。
.PortOpen: 设置并返回通信端口状态。设置为True时,打开端口;设置为False时,关闭端口。
.bbbbb: 从接收缓冲区读取数据,类型为Variant。
.Output: 向发送缓冲区写入数据,类型为字符串或字节数组。
.bbbbbMode: 设置从缓冲区读取数据的格式,设为0时为字符串格;设为1为二进制格式。
.InBufferCount: 设置和返回接收缓冲区的字节数,设为0时清空接收缓冲区。
.OutBufferCount: 设置和返回发送缓冲区的字节数,设为0时清空发送缓冲区。
.bbbbblen: 设置和返回bbbbb每次读出的字节数,设为0时读出接收缓冲区的全部内容。
.Rthreshold: 表示在串口事件OnComm发生之前,接收缓冲区接收的少字节数。若设为0,可以禁止发生OnComm事件。一般设为1,即当接收缓冲区中的字节数大于等于1时,就会产生接收事件。
CommEvent: 返回相应的Oncomm事件常数。
4.3 MSComm控件处理接收信息的方式
MSComm控件提供了两种处理方式:
(1)事件驱动方式:Rthreshold 属性非0时,收到字符或传输线发生变化时就会产生串口事件OnComm。通过查询CommEvent属性可以捕获并处理这些通信事件。
(2)查询方式:通过查询bbbbbBufferCount(接收缓冲区的字节数)属性值, 处理接收到的信息。
本文采用事件驱动方式
5. 方案的具体实现
5.1程序设计

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.bbbbb
‘把接收缓冲区内的数据赋值给临时变量"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.bbbbb
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
https://设置发送字节个数为8,发送缓冲区为VB400
MOVB 16#1B, VB401
https://设置发送信息的起始字符为"16#1B"
MOVB 16#0D, VB408
https://设置发送信息的结束字符为"16#0D",
MOVB ‘1‘, VB402
NOT
MOVB ‘0‘, VB402
https://若Q0.0有输出,VB402为"1",否则为"0"
XMT VB400, 0
https://在端口0向用户回送信息,发送缓冲区指向VB400

图7 PLC的发送缓冲区的数据分配
6. 结论通过VB实现与PLC通讯。使PLC的工作纳入微型计算机的管理之下。经试验验证,编制的VB程序在Microsoft bbbbbbs XP系统下和PLC之间通讯运行良好、无误码,能有效的解决十字路口交通的运行状况。
西门子代理商,西门子模块代理商,西门子一级代理商,西门子PLC代理,西门子中国代理商