技術(shù)頻道

娓娓工業(yè)
您現(xiàn)在的位置: 中國傳動(dòng)網(wǎng) > 技術(shù)頻道 > 應(yīng)用方案 > 在Windows平臺(tái)下利用VB實(shí)現(xiàn)電腦與三菱Q00PLC的串行通信

在Windows平臺(tái)下利用VB實(shí)現(xiàn)電腦與三菱Q00PLC的串行通信

時(shí)間:2008-06-18 11:34:00來源:dujing

導(dǎo)語:?本文分析了Windows環(huán)境下串行通信的編程技術(shù),介紹了在Windows環(huán)境下用VB6.0語言編寫串行通信程序,實(shí)現(xiàn)了PC機(jī)與三菱 Q00PLC 之間的串行通信,并提出了在實(shí)際應(yīng)用中提高串行通信性能的方法。
摘要:本文分析了Windows環(huán)境下串行通信的編程技術(shù),介紹了在Windows環(huán)境下用VB6.0語言編寫串行通信程序,實(shí)現(xiàn)了PC機(jī)與三菱 Q00PLC 之間的串行通信,并提出了在實(shí)際應(yīng)用中提高串行通信性能的方法。 關(guān)鍵詞:VB;Win32API函數(shù);串行通信;Q00PLC 一 概述 在工業(yè)控制中,串口是常用的計(jì)算機(jī)與外部串行設(shè)備之間的數(shù)據(jù)傳輸通道。由于串行通信結(jié)構(gòu)簡單、可靠性強(qiáng)、實(shí)現(xiàn)及使用成本低、通訊標(biāo)準(zhǔn)統(tǒng)一,因此在測控系統(tǒng)和工程中應(yīng)用十分廣泛。目前Windows在工業(yè)生產(chǎn)監(jiān)控管理系統(tǒng)中已成為主流平臺(tái) ,Windows環(huán)境下的上、下位機(jī)之間的串行通信是設(shè)計(jì)與開發(fā)監(jiān)控管理系統(tǒng)和集散控制系統(tǒng)的重要組成部分。 Microsoft公司的VB++6.0是一種高級(jí)編程語言,它提供的串列通信控件封裝了封裝了Win32API中的標(biāo)準(zhǔn)通信函數(shù),可以讓開發(fā)者方便開發(fā)串列通信上位機(jī)程序。 PLC是現(xiàn)在控制領(lǐng)域不可缺少的部分,已經(jīng)非常普及,如何簡便的與PLC交互已經(jīng)成為眾多廠商新的競爭戰(zhàn)場。由此產(chǎn)生了人機(jī)界面、組態(tài)軟件等產(chǎn)品。這些產(chǎn)品的產(chǎn)生大大簡化了對PLC的控制,操作,使用更方便。但也有共同的缺點(diǎn):價(jià)格過高和開放性較差。VB作為“原始"的編程語言在這兩方面無疑有著明顯的優(yōu)勢。 二 串行通信 串行通信是指計(jì)算機(jī)主機(jī)與外設(shè)之間以及主機(jī)系統(tǒng)與主機(jī)系統(tǒng)之間數(shù)據(jù)的串行傳送。使用串口通信時(shí),發(fā)送和接收到的每一個(gè)字符實(shí)際上都是一次一位的傳送的,每一位為1或者為0。 2.1 串行通信的分類 串行通信可以分為同步通信和異步通信兩類。同步通信是按照軟件識(shí)別同步字符來實(shí)現(xiàn)數(shù)據(jù)的發(fā)送和接收,異步通信是一種利用字符的再同步技術(shù)的通信方式。 2.1.1 同步通信 同步通信是一種連續(xù)串行傳送數(shù)據(jù)的通信方式,一次通信只傳送一幀信息。這里的信息幀與異步通信中的字符幀不同,通常含有若干個(gè)數(shù)據(jù)字符。 它們均由同步字符、數(shù)據(jù)字符和校驗(yàn)字符(CRC)組成。其中同步字符位于幀開頭,用于確認(rèn)數(shù)據(jù)字符的開始。數(shù)據(jù)字符在同步字符之后,個(gè)數(shù)沒有限制,由所需傳輸?shù)臄?shù)據(jù)塊長度來決定;校驗(yàn)字符有1到2個(gè),用于接收端對接收到的字符序列進(jìn)行正確性的校驗(yàn)。同步通信的缺點(diǎn)是要求發(fā)送時(shí)鐘和接收時(shí)鐘保持嚴(yán)格的同步。 2.1.2 異步通信 異步通信中,在異步通行中有兩個(gè)比較重要的指標(biāo):字符幀格式和波特率。數(shù)據(jù)通常以字符或者字節(jié)為單位組成字符幀傳送。字符幀由發(fā)送端逐幀發(fā)送,通過傳輸線被接收設(shè)備逐幀接收。發(fā)送端和接收端可以由各自的時(shí)鐘來控制數(shù)據(jù)的發(fā)送和接收,這兩個(gè)時(shí)鐘源彼此獨(dú)立,互不同步。 接收端檢測到傳輸線上發(fā)送過來的低電平邏輯"0"(即字符幀起始位)時(shí),確定發(fā)送端已開始發(fā)送數(shù)據(jù),每當(dāng)接收端收到字符幀中的停止位時(shí),就知道一幀字符已經(jīng)發(fā)送完畢。 2.2 幾種流行的串行通信協(xié)議 RS-232、RS-422和RS-485都是串行數(shù)據(jù)接口標(biāo)準(zhǔn),最初都是由電子工業(yè)協(xié)會(huì)(EIA)制訂并發(fā)布的,RS-232在1962年發(fā)布,后來陸續(xù)有不少改進(jìn)版本,其中最常用的是RS-232-C版。 目前RS-232是PC機(jī)與通信工業(yè)中應(yīng)用最廣泛的一種串行接口。RS-232被定義為一種在低速率串行通信中增加通信距離的單端標(biāo)準(zhǔn)。RS-232采取不平衡傳輸方式,即所謂單端通信。標(biāo)準(zhǔn)規(guī)定,RS-232的傳送距離要求可達(dá)50英尺(約15米),最高速率為20kbps。 [align=center] 圖1 RS232端口的硬件握手和連接方式[/align] RS232的通訊信號(hào)電平為正負(fù)5~15V,這不同于數(shù)字電路的0~3V或0~5V,所以要以RS232的方式進(jìn)行通訊,源信號(hào)不匹配時(shí)需要進(jìn)行電壓轉(zhuǎn)換。 當(dāng)進(jìn)行數(shù)據(jù)傳送時(shí),只用一根數(shù)據(jù)線且只能進(jìn)行單向傳輸?shù)姆绞剑Q為單工方式; 當(dāng)進(jìn)行數(shù)據(jù)傳送時(shí),只用一根數(shù)據(jù)線利用不同時(shí)段進(jìn)行雙向傳輸?shù)姆绞?,稱為半雙工方式;當(dāng)進(jìn)行數(shù)據(jù)傳送時(shí),利用兩根數(shù)據(jù)線同時(shí)進(jìn)行發(fā)送和接收的方式,稱為全雙工方式。 由于RS-232存在傳輸距離有限等不足,于是RS-422誕生了。RS-422標(biāo)準(zhǔn)全稱是“平衡電壓數(shù)字接口電路的電氣特性”,它定義了一種平衡通信接口,將傳輸速率提高到10Mbps,傳輸距離延長到4000英尺(約1219米),并允許在一條平衡總線上連接最多10個(gè)接收器。當(dāng)然,RS-422也有缺陷: 因?yàn)槠淦胶怆p絞線的長度與傳輸速率成反比,所以在100kbps速率以內(nèi),傳輸距離才可能達(dá)到最大值,也就是說,只有在很短的距離下才能獲得最高傳輸速率。一般在100米長的雙絞線上所能獲得的最大傳輸速率僅為1Mbps。另外有一點(diǎn)必須指出,在RS-422通信中,只有一個(gè)主設(shè)備(Master),其余為從設(shè)備(Salve),從設(shè)備之間不能進(jìn)行通信,所以RS-422支持的是點(diǎn)對多點(diǎn)的雙向通信。 為擴(kuò)展應(yīng)用范圍,RS于1983年在RS-422基礎(chǔ)上制定了RS-485標(biāo)準(zhǔn),增加了多點(diǎn)、雙向通信能力,即允許多個(gè)發(fā)送器連接到同一條總線上,同時(shí)增加了發(fā)送器的驅(qū)動(dòng)能力和沖突保護(hù)特性,擴(kuò)展了總線共模范圍,后命名為TIA/RS-485-A標(biāo)準(zhǔn)。 由于RS-485是從RS-422基礎(chǔ)上發(fā)展而來的,所以RS-485許多電氣規(guī)定與RS-422相仿,如都采用平衡傳輸方式、都需要在傳輸線上接終接電阻、最大傳輸距離約為1219米、最大傳輸速率為10Mbps等。但是,RS-485可以采用二線與四線方式,采用二線制時(shí)可實(shí)現(xiàn)真正的多點(diǎn)雙向通信,而采用四線連接時(shí),與RS-422一樣只能實(shí)現(xiàn)點(diǎn)對多點(diǎn)通信,但它比RS-422有改進(jìn), 無論四線還是二線連接方式總線上可接多達(dá)32個(gè)設(shè)備。 三菱的 Q00PLC 的通訊接口為RS232。 三 三菱 Q00PLC 的通訊方式 3.1 通訊協(xié)議 三菱的 Q00PLC 采用列 MELSEC 通訊協(xié)議,即 MC 協(xié)議。MC協(xié)議采用幀的形式進(jìn)行通訊,它包括以下幾種形式: (1)、QnA 兼容3C 幀。此種幀包括1-4種格式。 (2)、QnA 兼容4C 幀。此種幀包括1-5種格式。 (3)、QnA 兼容2C 幀。此種幀包括1-4種格式。 (4)、QnA 兼容3E 幀。此種幀包括1-4種格式。 (5)、A 兼容1E 幀。 3.2 實(shí)現(xiàn)方式 (1) 命令文件的發(fā)送 采用MC 協(xié)議進(jìn)行的數(shù)據(jù)通訊采用半雙工通訊方式進(jìn)行。訪問PLC CPU 時(shí)對于剛剛進(jìn)行的命令文件發(fā)送請?jiān)诮邮誔LC CPU 側(cè)發(fā)送的響應(yīng)文件后發(fā)送下一個(gè)命令文件(在響應(yīng)文件的接受尚未完成之前不能進(jìn)行下一個(gè)命令文件的發(fā)送) [align=center] 圖2 命令文件和響應(yīng)的順序[/align] (2) 對于命令文件不能接收正常結(jié)束的響應(yīng)文件時(shí) 接受異常結(jié)束的響應(yīng)文件時(shí),可根據(jù)響應(yīng)文件中的出錯(cuò)代碼進(jìn)行處理 3.3 Q00PLC 的幀格式 Q00PLC內(nèi)置了MC通訊協(xié)議的QnA 兼容3C 幀和 RS232 通訊接口,所以不用外加通訊模塊就可以實(shí)現(xiàn)與上位機(jī)的通訊。本例擬采用QnA 兼容3C 幀的第4種格式進(jìn)行通訊。 3.3.1 對方設(shè)備讀出上位站PLC CPU 的數(shù)據(jù)時(shí) a 上位機(jī)向 PLC CPU 側(cè)傳輸命令傳輸文件,下圖中箭頭所指的區(qū)域?yàn)檎埱髷?shù)據(jù)區(qū)。 [align=center] 圖3 讀取時(shí)的發(fā)送幀格式[/align] b PLC CPU 側(cè)響應(yīng)上位機(jī)的應(yīng)答傳輸文件,下圖中箭頭所指的區(qū)域?yàn)閺腜LC中讀出并返回的數(shù)據(jù) [align=center] 圖4 返回的幀格式[/align] 3.3.2 對方設(shè)備向上位站PLC CPU 寫入數(shù)據(jù)時(shí) a 幀格式與圖3中的格式類似,只是幀中的命令和子命令為讀取時(shí)的命令,請求數(shù)據(jù)區(qū)中增加了寫入的數(shù)據(jù)。 b 幀格式與圖34中的格式類似,只是沒有返回的數(shù)據(jù)。 四 Windows環(huán)境下 VB 與 Q00PLC 通信的實(shí)現(xiàn) 4.1 系統(tǒng)分析與說明 Windows系統(tǒng)為每個(gè)通信設(shè)備開辟了用戶定義的輸入/輸出緩沖區(qū),數(shù)據(jù)進(jìn)出通信口均由系統(tǒng)后臺(tái)來完成,應(yīng)用程序只需完成對輸入/輸出緩沖區(qū)操作就可以了。實(shí)際過程是每接收一個(gè)字符就產(chǎn)生一個(gè)低級(jí)硬件中斷,Windows系統(tǒng)中的串行驅(qū)動(dòng)程序就取得了控制權(quán),并將接收到的字符放入緩沖區(qū),然后將控制權(quán)返還給正在運(yùn)行的應(yīng)用程序。如果輸入緩沖區(qū)數(shù)據(jù)已滿,串行驅(qū)動(dòng)程序用當(dāng)前定義的流控制機(jī)制通知發(fā)送方停止發(fā)送數(shù)據(jù),而隊(duì)列中的數(shù)據(jù)按先進(jìn)先出 (FIFO)的次序處理。   在Windows中,串行通信有兩種工作方式:查詢方式和事件驅(qū)動(dòng)方式。查詢方式占用大量的CPU時(shí)間,效率較低,但是數(shù)據(jù)不易丟失;而Win32操作系統(tǒng)基于事件驅(qū)動(dòng) (也稱為消息驅(qū)動(dòng))機(jī)制的內(nèi)核,支持基于進(jìn)程的協(xié)同式多任務(wù)和基于多線程的搶先式多任務(wù)?;谑录?qū)動(dòng)的多線程應(yīng)用程序?qū)嶋H上在其內(nèi)部實(shí)現(xiàn)了多任務(wù)擴(kuò)展,為代碼賦予了并行執(zhí)行的特性,可以使應(yīng)用程序?qū)PU的利用率大大提高,從而提高系統(tǒng)的響應(yīng)能力,加快信息處理速度,提高通信程序的實(shí)時(shí)性和增大數(shù)據(jù)吞吐量。   基于以上分析,以事件驅(qū)動(dòng)方式實(shí)現(xiàn)Windows下的串行通信更具優(yōu)勢,它能完成較大數(shù)據(jù)量的實(shí)時(shí)通信,大大提高了通信的效率,故本程序采用此種方式進(jìn)行串行通信,至于通信的可靠性可以通過軟件設(shè)計(jì)來保證。 Windows平臺(tái)下利用VB實(shí)現(xiàn)串口通信主要有以下兩種方法: 1)使用Windows API(Application Program Interface)函數(shù)。這種方法可編寫移植性強(qiáng)的通信程序,但必須首先用Declare聲明VB中所要用的動(dòng)態(tài)鏈接庫DLL,這需要對Windows API函數(shù)有深入的了解,編程較復(fù)雜。 2)使用Microsoft公司提供的Active X控件MSComm。該通信控件通過改變對象屬性,向?qū)ο蟀l(fā)送消息及為對象事件編寫響應(yīng)代碼,可以方便地完成用戶應(yīng)用程序間的串行通信,既可實(shí)現(xiàn)API函數(shù)的所有功能,又使得編程效率提高,應(yīng)用功能增強(qiáng),并且程序簡單明了。 對于MSComm控件實(shí)現(xiàn)串口通信的操作很多文獻(xiàn)都有論述,該控件的主要屬性可參考相關(guān)文獻(xiàn),在此僅列出常用的屬性和方法。需要強(qiáng)調(diào)的是:在數(shù)據(jù)發(fā)送與接收過程中,都要通過一個(gè)Variant類型變量作為中介。發(fā)送數(shù)據(jù)時(shí),必須先將要發(fā)送的數(shù)據(jù)賦給一個(gè)Variant類型變量,再把該Variant變量賦值給MSComm的Output屬性;同樣接受數(shù)據(jù)時(shí),也應(yīng)先將MSComm的Input屬性賦值給Variant變量,待接收端收到后必須轉(zhuǎn)換成其它類型(如字符型、二進(jìn)制型)的數(shù)據(jù)才能進(jìn)行處理。本例采用MSComm控件來實(shí)現(xiàn)。 下面介紹MSCOMM控件的屬性: CommPort:設(shè)定通信連接端口代號(hào),程序必須指定所要使用的串行端口號(hào),Windows系統(tǒng)使用所設(shè)定的端口與外界通信。 PortOpen:設(shè)定通信口狀態(tài),若為真,通信端口打開,否則關(guān)閉。 Settings:設(shè)定通信口參數(shù),其格式是"bbbb,p,d,s",其中bbbb為通信速率(波特率),p為通信檢查方式(奇偶校驗(yàn)),d為數(shù)據(jù)位數(shù),s為停止位數(shù),其設(shè)定應(yīng)與PLC的設(shè)定一致。 Input:將對方傳送至輸入緩沖區(qū)的字符讀入到程序。 Output:將字符寫入輸出緩沖區(qū)。 InBufferCount:傳回接收緩沖區(qū)中的字符數(shù)。 OutBufferCount:傳回輸出緩沖區(qū)中的字符數(shù)。 InputLen:設(shè)定串行端口讀入字符串的長度。 InputMode:設(shè)定接收數(shù)據(jù)的方式。 Rthreshold:設(shè)定引發(fā)接收事件的字符數(shù)。 CommEvent:傳回OnComm事件發(fā)生時(shí)的數(shù)值碼 OnComm事件:無論是錯(cuò)誤或事件發(fā)生,都會(huì)觸發(fā)此事件。 4.2 具體實(shí)現(xiàn) 本例程序?yàn)樽x取Q00PLC的輸入輸出點(diǎn)的狀態(tài)。監(jiān)控界面如下所示: [align=center] 圖5 監(jiān)控界面[/align] 4.2.1 控件參數(shù)的初始化 MSComm1.InBufferCount = 0 ‘清空輸入緩沖區(qū) MSComm1.OutBufferCount = 0 ‘清空輸出緩沖區(qū) MSComm1.CommPort = 1 ‘設(shè)定串行通信口為com1 MSComm1.Settings = "19200,O,8,1" ‘波特率19200,奇校驗(yàn),8位數(shù)據(jù)位,1位停止位 MSComm1.InputLen = 0 ‘一次讀入輸入緩沖區(qū)中的字符串的長度為緩沖區(qū)中的所有數(shù)據(jù) MSComm1.RThreshold = 62 ‘輸入緩沖區(qū)中每次接到62個(gè)字符就產(chǎn)生一次OnComm事件 MSComm1.PortOpen = True ‘打開端口 Dim STX As String ‘以下為MC協(xié)議中的ASCII碼 Dim ENQ As String Dim ACK As String Dim CR As String Dim LF As String Dim NAK As String STX = Chr$(&H2) ENQ = Chr$(&H5) ACK = Chr$(&H6) CR = Chr$(&HD) LF = Chr$(&HA) 4.2.2 計(jì)算機(jī)與PLC通信程序 Private Sub Timer1_Timer() Dim SD As String MSComm1.InBufferCount = 0 MSComm1.OutBufferCount = 0 If F = 1 Then SD = ENQ + "F9" + "0000FF00" + "0401" + "0001" + "X*" + "000020" + "0030" + CR + LF Else SD = ENQ + "F9" + "0000FF00" + "0401" + "0001" + "Y*" + "000050" + "0030" + CR + LF End If MSComm1.Output = SD Timer1.Enabled = False End Sub ‘OnComm事件 Private Sub MSComm1_OnComm() Dim i, j As Integer Dim RD, Temp, RDw As String If MSComm1.CommEvent = comEvReceive Then RD = MSComm1.Input If Left(RD, 1) = STX Then RDw = Mid(RD, 12, 48) j = 0 Select Case F Case 1 j = 48 Case -1 j = 96 End Select For i = 1 To 48 Temp = Mid(RDw, i, 1) If F = 1 Then If Temp = "1" Then Lalel(i - 1).BackColor = &H80FF80 Else If i <= 3 Then Lalel(i - 1).BackColor = &HFF Else Lalel(i - 1).BackColor = &HFFFF00 End If End If Else If Temp = "1" Then If i = 42 Then Lalel(i - 1 + 48).BackColor = &HFF Else Lalel(i - 1 + 48).BackColor = &H80FF80 End If Else Lalel(i - 1 + 48).BackColor = &HFFFF00 End If End If Next i F = F * (-1) Timer1.Enabled = True ‘F = F * (-1) End If End If End Sub 五 結(jié)束語 VB是一種成熟的、面向?qū)ο蟮某绦蛟O(shè)計(jì)語言,采用它編寫的Windows環(huán)境下PC機(jī)與Q00PLC的串行通訊軟件具有程序?qū)崿F(xiàn)簡便、通用性強(qiáng)的特點(diǎn),減輕了軟件開發(fā)者的工作量,對于國內(nèi)的中、小型企業(yè)具有現(xiàn)實(shí)意義。 參考文獻(xiàn) [1] 王棟,Visual Basic6.0程序設(shè)計(jì)實(shí)用教程[M],清華大學(xué)出版社,2003 [2] 工業(yè)接口與通訊,呂志藝,2003 [3] Q 系列 MELSEC 通訊協(xié)議參考手冊 [4] 三菱 Q 系列可編程控制器編程手冊; 作者簡介: 馬磊:1981年10月12日出生;性別:女;籍貫:山東省魏橋鎮(zhèn)南鄭村;在讀研究生;研究方向:造紙裝備與控制。 呂多勇:1982年6月出生;男;籍貫:山東省濟(jì)南市歷城區(qū);本科,學(xué)士學(xué)位; 聯(lián)系方式:通訊地址:山東省濟(jì)南市 大學(xué)科技園 山東輕工業(yè)學(xué)院 輕化與環(huán)境工程學(xué)院,06級(jí)研究生,馬磊。 郵編:250353 郵箱:aima2005@126.com

標(biāo)簽:

點(diǎn)贊

分享到:

上一篇:實(shí)時(shí)數(shù)據(jù)庫在石化行業(yè)的典型應(yīng)用

下一篇:微能WIN-V63矢量控制變頻器在...

中國傳動(dòng)網(wǎng)版權(quán)與免責(zé)聲明:凡本網(wǎng)注明[來源:中國傳動(dòng)網(wǎng)]的所有文字、圖片、音視和視頻文件,版權(quán)均為中國傳動(dòng)網(wǎng)(www.treenowplaneincome.com)獨(dú)家所有。如需轉(zhuǎn)載請與0755-82949061聯(lián)系。任何媒體、網(wǎng)站或個(gè)人轉(zhuǎn)載使用時(shí)須注明來源“中國傳動(dòng)網(wǎng)”,違反者本網(wǎng)將追究其法律責(zé)任。

本網(wǎng)轉(zhuǎn)載并注明其他來源的稿件,均來自互聯(lián)網(wǎng)或業(yè)內(nèi)投稿人士,版權(quán)屬于原版權(quán)人。轉(zhuǎn)載請保留稿件來源及作者,禁止擅自篡改,違者自負(fù)版權(quán)法律責(zé)任。

網(wǎng)站簡介|會(huì)員服務(wù)|聯(lián)系方式|幫助信息|版權(quán)信息|網(wǎng)站地圖|友情鏈接|法律支持|意見反饋|sitemap

中國傳動(dòng)網(wǎng)-工業(yè)自動(dòng)化與智能制造的全媒體“互聯(lián)網(wǎng)+”創(chuàng)新服務(wù)平臺(tái)

網(wǎng)站客服服務(wù)咨詢采購咨詢媒體合作

Chuandong.com Copyright ?2005 - 2024 ,All Rights Reserved 版權(quán)所有 粵ICP備 14004826號(hào) | 營業(yè)執(zhí)照證書 | 不良信息舉報(bào)中心 | 粵公網(wǎng)安備 44030402000946號(hào)