孫琦君
(天津職業(yè)技術(shù)師范大學(xué),天津 300000)
?
在VB6.0編程語言下實現(xiàn)對PLC輸出的控制
孫琦君
(天津職業(yè)技術(shù)師范大學(xué),天津 300000)
本文通過一個實際例子說明在VB6.0下利用串口通信實現(xiàn)對PLC輸出端口Y的控制。在VB6.0中想實現(xiàn)串口通信一定要掌握MSComm通信控件的參數(shù)設(shè)置方法,傳送過程中使用十六進(jìn)制數(shù)據(jù)。由于單擊置位或復(fù)位按鈕,產(chǎn)生一個二進(jìn)制數(shù)據(jù),最后轉(zhuǎn)換為ASCII碼,最后驅(qū)動PLC輸出。
PLC VB6.0;串口通信;二進(jìn)制
通過在VB6.0編程語言下進(jìn)行編程,就可以直接實現(xiàn)對三菱PLC輸出的直接控制,同時不需要編寫三菱PLC內(nèi)部程序。在VB6.0程序界面內(nèi)指定輸出元件的地址,單擊置位命令按鈕,設(shè)置指定輸出元件端口的狀態(tài)為ON,使線路中三菱PLC輸出指示燈亮;單擊復(fù)位命令按鈕,設(shè)置指定輸出元件端口的狀態(tài)為OFF,使線路中三菱PLC輸出指示燈滅。
要想實現(xiàn)這樣控制,首先要知道三菱PLC如何和電腦PC進(jìn)行通信的。三菱PLC和PC進(jìn)行通信,可以使用通信口,也可以使用編程口。兩者區(qū)別是通過編程口,PC只能和一臺PLC通信,訪問方式為間接是;通過通信口,PC可以和多臺PLC通信,訪問方式為直接,二者所使用的為不同的通信協(xié)議。
本實例所用PC和三菱FX2N系列PLC通過編程電纜連接起來,形成一套開關(guān)量輸出控制系統(tǒng),如圖1所示。在圖1中,PC的串口COM1通過SC-09編程電纜與三菱FX2N 32MR的編程口連接起來,通過外接的指示燈來顯示PLC輸出狀態(tài)。
外部接線圖完成后,現(xiàn)在要完成的工作是在VB6.0編程語言中程序界面的設(shè)計。首先在VB6.0中要添加一個MSComm通信控件,用來實現(xiàn)PC與PLC的串口通信;然后為了置位,再添加8個CommandButton按鈕控件;然后為了復(fù)位,再添加8個CommandButton按鈕控件;最后再添加1個CommandButton按鈕控件,完成關(guān)閉程序任務(wù)。
界面設(shè)計好,現(xiàn)在要對程序窗體、控件對象的主要屬性按表1進(jìn)行設(shè)置。
①定義窗體級變量
從程序中發(fā)出的開關(guān)量信號的狀態(tài)值在多個過程中使用,所以首先要定義一個窗體級變量。
Dim a1#,b1#,c1#,d1#,e1#,f1#,g1#,h1#
圖1 PC與FX2NPLC外部接線圖
控件類型主要屬性功能Form(名稱)=PLCDOForm窗體控件(名稱)=PLC開關(guān)量輸出窗體標(biāo)題欄顯示程序名稱CommandButton(名稱)=Cmdz0(0)~Cmdz0(7)按鈕數(shù)組控件Caption=置位Y0~Y7置指定地址端口為ONCommandButton(名稱)=Cmd1(0)~Cmd1(7)按鈕數(shù)組控件(Caption=復(fù)位Y0~Y7置指定地址端口為OFFCommandButton(名稱)=Cmdquit按鈕控件,關(guān)閉程序Caption=關(guān)閉按鈕標(biāo)簽MSComm(名稱)=MSComm1串口通信控件在程序中設(shè)置串口參數(shù)設(shè)置
②通信串口初始化
定義窗體級變量后,想實現(xiàn)PC與PLC之間串口通信,第一步要完成的工作是進(jìn)行串口初始化,設(shè)置端口號、收發(fā)數(shù)據(jù)類型、打開串口,這些內(nèi)容在Form-Load()事件過程中編寫程序。
PC與三菱PLC串口通信使用COM1。利用MSComm控件中CommPort屬性來設(shè)置端口號;
MSComm1. CommPort=1
PC與三菱PLC的通信參數(shù)必須保護(hù)絕對一致,波特率設(shè)置為9600、偶校驗、數(shù)據(jù)位7、停止位1。這些利用MSComm控件中Settings屬性來設(shè)置。
MSComm1. Settings=“9600,E,7,1”
在這個傳送過程中發(fā)送指令為十六進(jìn)制編碼數(shù)據(jù),這要將MSComm控件中InputMode屬性值設(shè)定為1.
MSComm1. InputMode=1
③從PLC獲得各個端口的狀態(tài)值
在VB6.0程序設(shè)計界面中,通過單擊按鈕的方式來產(chǎn)生置位和復(fù)位開關(guān)信號;在程序設(shè)計界面中有2個按鈕數(shù)組,通過判斷按鈕數(shù)組Cmdz0的索引號來設(shè)置PLC的輸出端口置位,通過判斷按鈕數(shù)組Cmd1的索引號來設(shè)置PLC的輸出端口復(fù)位。
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
④按下按鈕,發(fā)出指令,讓輸出各個端口置位或復(fù)位
在本例中,要發(fā)送的輸出端口Y狀態(tài)值不是一個固定值,而是由單擊打控制按鈕而產(chǎn)生一個隨機值。由于隨機值的存在,在控制程序中反映狀態(tài)值的數(shù)據(jù)部分和累加和部分只能用變量來表示,其余部分是固定數(shù)據(jù),在串口通信中指令表達(dá)式為“02 31 30 30 41 30 30 32 data1 data2 data3 data4 data5 data6”,在編寫程序的關(guān)鍵就是想辦法得到這六個變量值:data1 data2 data3 data4 data5 data6。
通過下面程序可以得到指令中輸出端口狀態(tài)數(shù)據(jù)變量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
通過上面這一段程序,將單擊按鈕數(shù)組所產(chǎn)生的狀態(tài)值用二進(jìn)制來表示,同時把這二進(jìn)制數(shù)據(jù)轉(zhuǎn)換成十六進(jìn)制數(shù),再把十六進(jìn)制數(shù)轉(zhuǎn)換成ASCII碼值,只保留可以反映輸出端口狀態(tài)的高字節(jié),低字節(jié) 固定為00。
利用下面程序得到累加和的數(shù)據(jù)變量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
通過上面這一段程序,完成取累加數(shù)后2位,分別將每位轉(zhuǎn)成ASCII碼值。要想編程語言中發(fā)出控制指令,必須使用MSComm控件中Output屬性來發(fā)送指令,可以將PLC的輸出端口Y0、Y1、Y2、Y3、Y4、Y5、Y6、Y7置1,同時將外面的指示燈點亮;也可以將PLC的輸出端口Y0、Y1、Y2、Y3、Y4、Y5、Y6、Y7置0,同時將外面的指示燈熄滅。實現(xiàn)上面控制程序如下:
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
完成外部硬線安裝,做好程序界面設(shè)計,調(diào)試完成,運行程序,程序運行的界面如圖2所示:
圖2 VB程序運行界面
在圖2所示程序界面當(dāng),按下置位按鈕,讓指定輸出繼電器Y狀態(tài)為ON,外部連接對應(yīng)指示燈就亮;按下復(fù)位按鈕,讓指定輸出繼電器Y狀態(tài)為OFF,外部連接對應(yīng)指示燈就滅;按下關(guān)閉按鈕,則退出程序。
[1]李江全編. PLC開關(guān)量與通信控制應(yīng)用實例講解[M].北京:電子工業(yè)出版社,2011.
[2]李江全著. 三菱FX系列PLC數(shù)據(jù)通信及測控應(yīng)用 [M]. 北京:電子工業(yè)出版社,2012.
[3]李金城編著. PLC模擬量與通信控制應(yīng)用實踐[M].北京:電子工業(yè)出版社,2011.
[4]李江全編著. PLC模擬量與通信控制應(yīng)用實踐詳解 [M].北京:電子工業(yè)出版社,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