APP下载

在VB6.0编程语言下实现对PLC输出的控制

2017-08-11孙琦君

职业技术 2017年8期
关键词:置位窗体三菱

孙琦君

(天津职业技术师范大学,天津 300000)



在VB6.0编程语言下实现对PLC输出的控制

孙琦君

(天津职业技术师范大学,天津 300000)

本文通过一个实际例子说明在VB6.0下利用串口通信实现对PLC输出端口Y的控制。在VB6.0中想实现串口通信一定要掌握MSComm通信控件的参数设置方法,传送过程中使用十六进制数据。由于单击置位或复位按钮,产生一个二进制数据,最后转换为ASCII码,最后驱动PLC输出。

PLC VB6.0;串口通信;二进制

0 引言

通过在VB6.0编程语言下进行编程,就可以直接实现对三菱PLC输出的直接控制,同时不需要编写三菱PLC内部程序。在VB6.0程序界面内指定输出元件的地址,单击置位命令按钮,设置指定输出元件端口的状态为ON,使线路中三菱PLC输出指示灯亮;单击复位命令按钮,设置指定输出元件端口的状态为OFF,使线路中三菱PLC输出指示灯灭。

要想实现这样控制,首先要知道三菱PLC如何和电脑PC进行通信的。三菱PLC和PC进行通信,可以使用通信口,也可以使用编程口。两者区别是通过编程口,PC只能和一台PLC通信,访问方式为间接是;通过通信口,PC可以和多台PLC通信,访问方式为直接,二者所使用的为不同的通信协议。

本实例所用PC和三菱FX2N系列PLC通过编程电缆连接起来,形成一套开关量输出控制系统,如图1所示。在图1中,PC的串口COM1通过SC-09编程电缆与三菱FX2N 32MR的编程口连接起来,通过外接的指示灯来显示PLC输出状态。

1 VB6.0程序界面设计

外部接线图完成后,现在要完成的工作是在VB6.0编程语言中程序界面的设计。首先在VB6.0中要添加一个MSComm通信控件,用来实现PC与PLC的串口通信;然后为了置位,再添加8个CommandButton按钮控件;然后为了复位,再添加8个CommandButton按钮控件;最后再添加1个CommandButton按钮控件,完成关闭程序任务。

界面设计好,现在要对程序窗体、控件对象的主要属性按表1进行设置。

2 程序设计

①定义窗体级变量

从程序中发出的开关量信号的状态值在多个过程中使用,所以首先要定义一个窗体级变量。

Dim a1#,b1#,c1#,d1#,e1#,f1#,g1#,h1#

图1 PC与FX2NPLC外部接线图

控件类型主要属性功能Form(名称)=PLCDOForm窗体控件(名称)=PLC开关量输出窗体标题栏显示程序名称CommandButton(名称)=Cmdz0(0)~Cmdz0(7)按钮数组控件Caption=置位Y0~Y7置指定地址端口为ONCommandButton(名称)=Cmd1(0)~Cmd1(7)按钮数组控件(Caption=复位Y0~Y7置指定地址端口为OFFCommandButton(名称)=Cmdquit按钮控件,关闭程序Caption=关闭按钮标签MSComm(名称)=MSComm1串口通信控件在程序中设置串口参数设置

②通信串口初始化

定义窗体级变量后,想实现PC与PLC之间串口通信,第一步要完成的工作是进行串口初始化,设置端口号、收发数据类型、打开串口,这些内容在Form-Load()事件过程中编写程序。

PC与三菱PLC串口通信使用COM1。利用MSComm控件中CommPort属性来设置端口号;

MSComm1. CommPort=1

PC与三菱PLC的通信参数必须保护绝对一致,波特率设置为9600、偶校验、数据位7、停止位1。这些利用MSComm控件中Settings属性来设置。

MSComm1. Settings=“9600,E,7,1”

在这个传送过程中发送指令为十六进制编码数据,这要将MSComm控件中InputMode属性值设定为1.

MSComm1. InputMode=1

③从PLC获得各个端口的状态值

在VB6.0程序设计界面中,通过单击按钮的方式来产生置位和复位开关信号;在程序设计界面中有2个按钮数组,通过判断按钮数组Cmdz0的索引号来设置PLC的输出端口置位,通过判断按钮数组Cmd1的索引号来设置PLC的输出端口复位。

Private Sub Cmdz0_Click(Index As Integer) Private Sub Cmd1_Click(Index As Integer)

If Index=0 Then a1=1 If Index=0 Then a1=0

If Index=1 Then b1=1 If Index=1 Then b1=0

If Index=2 Then c1=1 If Index=2 Then c1=0

If Index=3 Then d1=1 If Index=3 Then d1=0

If Index=4 Then e1=1 If Index=4 Then e1=0

If Index=5 Then f1=1 If Index=5 Then f1=0

If Index=6 Then g1=1 If Index=6 Then g1=0

If Index=7 Then h1=1 If Index=7 Then h1=0

Call send_date Call send_date

End Sub End Sub

④按下按钮,发出指令,让输出各个端口置位或复位

在本例中,要发送的输出端口Y状态值不是一个固定值,而是由单击打控制按钮而产生一个随机值。由于随机值的存在,在控制程序中反映状态值的数据部分和累加和部分只能用变量来表示,其余部分是固定数据,在串口通信中指令表达式为“02 31 30 30 41 30 30 32 data1 data2 data3 data4 data5 data6”,在编写程序的关键就是想办法得到这六个变量值:data1 data2 data3 data4 data5 data6。

通过下面程序可以得到指令中输出端口状态数据变量data1 data2 data3 data4 。

Private Sub send_data()

Dim send_d As String

Dim hexnum(5) As Integer

Dim data1,data2,data3,data4 As Variant

send_d=h1&g1&f1&e1&d1&c1&b1&a1

For i=1 To Len(send_d)

a=a+CLng(MidMYM(send_d,i,1))*2^CLng(Len(send_d)-i)

Next i

if a<16 Then

hexstr =0&Hex(a)

End If

if a>16 Or a=16 Then

hexstr =Hex(a)

End If

hexmum(1)=Hex(Asc(Mid(hexstr,1,1)))

hexmum(2)=Hex(Asc(Mid(hexstr,1,1)))

data1="&H"&hexnum(1)

data2="&H"&hexnum(2)

data3="&H"&"30"

data4="&H"&"30"

……

End Sub

通过上面这一段程序,将单击按钮数组所产生的状态值用二进制来表示,同时把这二进制数据转换成十六进制数,再把十六进制数转换成ASCII码值,只保留可以反映输出端口状态的高字节,低字节 固定为00。

利用下面程序得到累加和的数据变量data5和data6。

Private Sub send_data()

……

Dim checknum(5) As String

Dim data5,data6 As Variant

addnum=Hex(&H31+&H30+&H30+&H41+&H30+&H30+&H32+data1+data2+data3+data4+&H3)

checkdata=Right(addnum,2)

checknum(1)=Hex(Asc(Mid(checkdata,1,1)))

checknum(2)=Hex(Asc(Mid(checkdata,1,1)))

data5="&H"&checknum(1)

data6="&H"&checknum(2)

……

End Sub

通过上面这一段程序,完成取累加数后2位,分别将每位转成ASCII码值。要想编程语言中发出控制指令,必须使用MSComm控件中Output属性来发送指令,可以将PLC的输出端口Y0、Y1、Y2、Y3、Y4、Y5、Y6、Y7置1,同时将外面的指示灯点亮;也可以将PLC的输出端口Y0、Y1、Y2、Y3、Y4、Y5、Y6、Y7置0,同时将外面的指示灯熄灭。实现上面控制程序如下:

Private Sub send_data()

……

MSComm1.Output=Chr(&H2)&Chr(&H31)&Chr(&H30)&Chr(&H30)&Chr(&H41)&Chr(&H30)&Chr(&H30)&Chr(&H32)&Chr(data1)&Chr(data2)&Chr(data3)&Chr(date4)&Chr(&H3)&Chr(data5)&Chr(data6)

End Sub

最后,通信完成后,通过下面程序退出。

Private Sub Cmdquit_Click()

MSComm1.PortOpen=False

Unload Me

End Sub

3 编程完成后,系统运行测试

完成外部硬线安装,做好程序界面设计,调试完成,运行程序,程序运行的界面如图2所示:

图2 VB程序运行界面

在图2所示程序界面当,按下置位按钮,让指定输出继电器Y状态为ON,外部连接对应指示灯就亮;按下复位按钮,让指定输出继电器Y状态为OFF,外部连接对应指示灯就灭;按下关闭按钮,则退出程序。

[1]李江全编. PLC开关量与通信控制应用实例讲解[M].北京:电子工业出版社,2011.

[2]李江全著. 三菱FX系列PLC数据通信及测控应用 [M]. 北京:电子工业出版社,2012.

[3]李金城编著. PLC模拟量与通信控制应用实践[M].北京:电子工业出版社,2011.

[4]李江全编著. PLC模拟量与通信控制应用实践详解 [M].北京:电子工业出版社,2014.

(编辑 赵欣宇)

The Control of the PLC Output in Programming Language of VB6.0

SUN Qijun

(Tianjin University of Technology and Education, Tianjin 300000, China)

This paper illustrates the control of the PLC output port Y by using serial port communication in VB6.0. In VB6.0, that implement the serial port communication needs to control the parameter settings of MSComm control, using hexadecimal data in the transfer process. Because of the click or reset button, a binary data is produced, which is converted to ASCII and eventually drives the PLC output.

PLC VB6.0; serial port communication; binary system

2017-05-10

孙琦君(1995-),女。主要研究方向:计算机通信。

G712

A

1672-0601(2017)08-0115-04

猜你喜欢

置位窗体三菱
一种变电站测控防误闭锁逻辑智能校验装置的设计
三菱日联银行
三菱日联银行
利用三菱PLC在老设备上的改造应用
M310 核电机组重要厂用水泵运行置位信号逻辑优化
试谈Access 2007数据库在林业档案管理中的应用
基于双引导值的三轴天线等待点置位效率的初步研究
别致型男 试驾2015款三菱帕杰罗精英超越版
基于FX2N系列PLC的顺序控制实现方法的探究
基于LayeredWindow的异形窗体局部刷新