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