Vb6.0 實(shí)現(xiàn)計(jì)算機(jī)與三菱PLC的通信
2004/7/28 12:03:00
概述:本文介紹了VB 進(jìn)行串口通信的各種基本方式和三菱可編程控制器之間的通信的程序設(shè)計(jì),重點(diǎn)介紹了利用MSCOMM.OCX進(jìn)行串行通信的設(shè)計(jì)方法。 關(guān)鍵詞:串行通信, PLC, Visual Basic 6.0 Abstract: Describes all kinds of basic serial port communication methods using Visual Basic 6.0 and design of free port communication program of MITSUBISH PLC, furthermore set focus on the designing method of serial port communication through dynamic linked library in Visual Basic 6.0 Key Words: Serial port communication, PLC, Visual Basic 6.0 一、引言 在工業(yè)生產(chǎn)中,人們常常面臨著數(shù)據(jù)采集與管理。作為工廠自動(dòng)化的三大支柱可編程控制器PLC(Programmable Logic Controller),由于其安全可靠,廣泛的用于數(shù)據(jù)采集與控制。生產(chǎn)過程中,要監(jiān)視PLC內(nèi)部的數(shù)據(jù)與運(yùn)行狀況,選用市場(chǎng)上的人機(jī)界面或組態(tài)軟件,雖然功能豐富,但大都價(jià)格昂貴,在一些中小規(guī)模的生產(chǎn)場(chǎng)合,人們希望能自己用高級(jí)語(yǔ)言開發(fā)一個(gè)簡(jiǎn)易實(shí)用的通信程序。微軟公司推出的Visual Basic 6.0,開發(fā)串行通信程序時(shí),有兩種方法,一種是用Windows API函數(shù),另一種是用VB支持的通信控件MSCOMM.OCX。利用Windows API函數(shù)是通過調(diào)用讀寫等函數(shù)來(lái)操作串口。兩種比較,使用MSCOMM.OCX控件編程方便,具有更完善的發(fā)送和接收功能。這里采用了MSCOMM.OCX控件。 本文根據(jù)杭州某包裝材料公司原料配料控制系統(tǒng)為背景,簡(jiǎn)述實(shí)現(xiàn)計(jì)算機(jī)與三菱FX系列PLC通信的實(shí)現(xiàn)過程。 二、硬件與選型 日本三菱公司是國(guó)際著名的工廠自動(dòng)化設(shè)備制造商,工業(yè)可編程控制器在國(guó)內(nèi)市場(chǎng)占有率一直保持前列。項(xiàng)目選用三菱FX2N-64MR型PLC,SC-09電纜作為計(jì)算機(jī)與PLC通信的連線。連接電纜的9針端連接在計(jì)算機(jī)串口上,另一端連接在PLC的RS-422編程口。系統(tǒng)框圖如圖一所示: 三、軟件編程 軟件設(shè)計(jì)主要包括PLC梯形圖設(shè)計(jì)和計(jì)算機(jī)VB程序、數(shù)據(jù)庫(kù)設(shè)計(jì)。計(jì)算機(jī)操作系統(tǒng)為Windows98,編程語(yǔ)言用Visual Basic 6.0,數(shù)據(jù)庫(kù)選用ACESS97,梯形圖程序在三菱PLC編程軟件GPPWIN 軟件環(huán)境設(shè)計(jì)。上位機(jī)軟件實(shí)現(xiàn)計(jì)算機(jī)對(duì)PLC內(nèi)部數(shù)據(jù)讀去、寫入?yún)?shù)和保存數(shù)據(jù)到數(shù)據(jù)庫(kù)。 三菱FX2N型PLC編程口通信協(xié)議如下: 數(shù)據(jù)讀取子程序: Public Function GetData(ByVal StartAddress As String, ByVal GetBytes As Integer, ByVal Hex_Bytes As String) As String MSComm1.InputLen = GetBytes * 2 + 4 MSComm1.Output = STX + CMD_Read + StartAddress + Hex_Bytes + ETX + GetSumChk(CMD_Read + StartAddress + Hex_Bytes + ETX) GetData = MSComm1.Input MSComm1.InBufferCount = 0 MSComm1.InputLen = 0 End Function 如需讀取數(shù)據(jù),通過調(diào)用GetData子程序。 參數(shù)設(shè)置程序可參考讀取子程序,只是改變命令而已。 ACESS97數(shù)據(jù)庫(kù)中包含三個(gè)表單,包括參數(shù)表、歷史記錄表、報(bào)警記錄表。 通過如下子程序?qū)憟?bào)警記錄到數(shù)據(jù)庫(kù): Private Sub SaveData() Dim i As Integer Dim valid As Boolean On Error Resume Next valid = True For i = 0 To 5 If FixWeight(i) <= 0 Then valid = False Next i Data1.Recordset.AddNew Data1.Recordset.Fields("ddate") = CDate(Format(Str(OnDay) + "/" + Str(OnMonth) + "/" + Str(OnYear), "yy/mm/dd")) Data1.Recordset.Fields("dtime") = CDate(Format(Str(OnHour) + ":" + Str(OnMinute) + ":" + Str(OnSecond), "hh:mm:ss")) Data1.Recordset.Fields("ddate") = DateSerial(OnYear, OnMonth, OnDay) Data1.Recordset.Fields("dtime") = TimeSerial(OnHour, OnMinute, OnSecond) Data1.Recordset.Fields("systime") = Time Data1.Recordset.Fields("get_sl") = LF(0) Data1.Recordset.Fields("get_xl") = LF(1) Data1.Recordset.Fields("get_fjs") = LF(2) Data1.Recordset.Fields("get_cs") = LF(3) Data1.Recordset.Fields("get_sys") = LF(4) Data1.Recordset.Fields("get_cj") = LF(5) On Error Resume Next Data1.Recordset.Update ‘更新數(shù)據(jù)庫(kù) Data1.Recordset.MovePrevious End Sub 保存參數(shù)子程序只是對(duì)數(shù)據(jù)庫(kù)操作,程序結(jié)構(gòu)可參考以上子程序。 上位機(jī)與PLC通信質(zhì)量的好壞,對(duì)系統(tǒng)的安全可靠運(yùn)行影響極大,因此,編寫程序時(shí),除了在兩者之間的通信協(xié)議上保持絕對(duì)一致和采取相應(yīng)的容錯(cuò)技術(shù)外,還要考慮系統(tǒng)的整體容錯(cuò)技術(shù),防止系統(tǒng)的不正常。 四、結(jié)束語(yǔ) 本設(shè)計(jì)中充分利用計(jì)算機(jī)和PLC的資源,在幾乎不增加設(shè)備開支的情況下實(shí)現(xiàn)上位機(jī)與PLC的通信和監(jiān)控。 參考文獻(xiàn) 1、夏云 ·Windows環(huán)境下串行數(shù)據(jù)通信程序設(shè)計(jì)·PC應(yīng)用,1995; 2、舒繼武·Visual Basic 中通信及應(yīng)用·微型機(jī)與應(yīng)用,1996;
提交
查看更多評(píng)論
其他資訊
三菱電機(jī)力推過程處理PLC
攜手杭州和華,寧波三菱FA產(chǎn)品技術(shù)講座圓滿結(jié)束
步進(jìn)電機(jī)和交流伺服電機(jī)性能比較