時間:2008-06-18 11:34:00來源:dujing
圖1 RS232端口的硬件握手和連接方式[/align]
RS232的通訊信號電平為正負5~15V,這不同于數(shù)字電路的0~3V或0~5V,所以要以RS232的方式進行通訊,源信號不匹配時需要進行電壓轉(zhuǎn)換。
當進行數(shù)據(jù)傳送時,只用一根數(shù)據(jù)線且只能進行單向傳輸?shù)姆绞剑Q為單工方式; 當進行數(shù)據(jù)傳送時,只用一根數(shù)據(jù)線利用不同時段進行雙向傳輸?shù)姆绞?,稱為半雙工方式;當進行數(shù)據(jù)傳送時,利用兩根數(shù)據(jù)線同時進行發(fā)送和接收的方式,稱為全雙工方式。
由于RS-232存在傳輸距離有限等不足,于是RS-422誕生了。RS-422標準全稱是“平衡電壓數(shù)字接口電路的電氣特性”,它定義了一種平衡通信接口,將傳輸速率提高到10Mbps,傳輸距離延長到4000英尺(約1219米),并允許在一條平衡總線上連接最多10個接收器。當然,RS-422也有缺陷: 因為其平衡雙絞線的長度與傳輸速率成反比,所以在100kbps速率以內(nèi),傳輸距離才可能達到最大值,也就是說,只有在很短的距離下才能獲得最高傳輸速率。一般在100米長的雙絞線上所能獲得的最大傳輸速率僅為1Mbps。另外有一點必須指出,在RS-422通信中,只有一個主設備(Master),其余為從設備(Salve),從設備之間不能進行通信,所以RS-422支持的是點對多點的雙向通信。
為擴展應用范圍,RS于1983年在RS-422基礎上制定了RS-485標準,增加了多點、雙向通信能力,即允許多個發(fā)送器連接到同一條總線上,同時增加了發(fā)送器的驅(qū)動能力和沖突保護特性,擴展了總線共模范圍,后命名為TIA/RS-485-A標準。
由于RS-485是從RS-422基礎上發(fā)展而來的,所以RS-485許多電氣規(guī)定與RS-422相仿,如都采用平衡傳輸方式、都需要在傳輸線上接終接電阻、最大傳輸距離約為1219米、最大傳輸速率為10Mbps等。但是,RS-485可以采用二線與四線方式,采用二線制時可實現(xiàn)真正的多點雙向通信,而采用四線連接時,與RS-422一樣只能實現(xiàn)點對多點通信,但它比RS-422有改進, 無論四線還是二線連接方式總線上可接多達32個設備。
三菱的 Q00PLC 的通訊接口為RS232。
三 三菱 Q00PLC 的通訊方式
3.1 通訊協(xié)議
三菱的 Q00PLC 采用列 MELSEC 通訊協(xié)議,即 MC 協(xié)議。MC協(xié)議采用幀的形式進行通訊,它包括以下幾種形式:
(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 實現(xiàn)方式
(1) 命令文件的發(fā)送
采用MC 協(xié)議進行的數(shù)據(jù)通訊采用半雙工通訊方式進行。訪問PLC CPU 時對于剛剛進行的命令文件發(fā)送請在接收PLC CPU 側(cè)發(fā)送的響應文件后發(fā)送下一個命令文件(在響應文件的接受尚未完成之前不能進行下一個命令文件的發(fā)送)
[align=center]
圖2 命令文件和響應的順序[/align]
(2) 對于命令文件不能接收正常結(jié)束的響應文件時
接受異常結(jié)束的響應文件時,可根據(jù)響應文件中的出錯代碼進行處理
3.3 Q00PLC 的幀格式
Q00PLC內(nèi)置了MC通訊協(xié)議的QnA 兼容3C 幀和 RS232 通訊接口,所以不用外加通訊模塊就可以實現(xiàn)與上位機的通訊。本例擬采用QnA 兼容3C 幀的第4種格式進行通訊。
3.3.1 對方設備讀出上位站PLC CPU 的數(shù)據(jù)時
a 上位機向 PLC CPU 側(cè)傳輸命令傳輸文件,下圖中箭頭所指的區(qū)域為請求數(shù)據(jù)區(qū)。
[align=center]
圖3 讀取時的發(fā)送幀格式[/align]
b PLC CPU 側(cè)響應上位機的應答傳輸文件,下圖中箭頭所指的區(qū)域為從PLC中讀出并返回的數(shù)據(jù)
[align=center]
圖4 返回的幀格式[/align]
3.3.2 對方設備向上位站PLC CPU 寫入數(shù)據(jù)時
a 幀格式與圖3中的格式類似,只是幀中的命令和子命令為讀取時的命令,請求數(shù)據(jù)區(qū)中增加了寫入的數(shù)據(jù)。
b 幀格式與圖34中的格式類似,只是沒有返回的數(shù)據(jù)。
四 Windows環(huán)境下 VB 與 Q00PLC 通信的實現(xiàn)
4.1 系統(tǒng)分析與說明
Windows系統(tǒng)為每個通信設備開辟了用戶定義的輸入/輸出緩沖區(qū),數(shù)據(jù)進出通信口均由系統(tǒng)后臺來完成,應用程序只需完成對輸入/輸出緩沖區(qū)操作就可以了。實際過程是每接收一個字符就產(chǎn)生一個低級硬件中斷,Windows系統(tǒng)中的串行驅(qū)動程序就取得了控制權,并將接收到的字符放入緩沖區(qū),然后將控制權返還給正在運行的應用程序。如果輸入緩沖區(qū)數(shù)據(jù)已滿,串行驅(qū)動程序用當前定義的流控制機制通知發(fā)送方停止發(fā)送數(shù)據(jù),而隊列中的數(shù)據(jù)按先進先出 (FIFO)的次序處理。
在Windows中,串行通信有兩種工作方式:查詢方式和事件驅(qū)動方式。查詢方式占用大量的CPU時間,效率較低,但是數(shù)據(jù)不易丟失;而Win32操作系統(tǒng)基于事件驅(qū)動 (也稱為消息驅(qū)動)機制的內(nèi)核,支持基于進程的協(xié)同式多任務和基于多線程的搶先式多任務?;谑录?qū)動的多線程應用程序?qū)嶋H上在其內(nèi)部實現(xiàn)了多任務擴展,為代碼賦予了并行執(zhí)行的特性,可以使應用程序?qū)PU的利用率大大提高,從而提高系統(tǒng)的響應能力,加快信息處理速度,提高通信程序的實時性和增大數(shù)據(jù)吞吐量。
基于以上分析,以事件驅(qū)動方式實現(xiàn)Windows下的串行通信更具優(yōu)勢,它能完成較大數(shù)據(jù)量的實時通信,大大提高了通信的效率,故本程序采用此種方式進行串行通信,至于通信的可靠性可以通過軟件設計來保證。
Windows平臺下利用VB實現(xiàn)串口通信主要有以下兩種方法:
1)使用Windows API(Application Program Interface)函數(shù)。這種方法可編寫移植性強的通信程序,但必須首先用Declare聲明VB中所要用的動態(tài)鏈接庫DLL,這需要對Windows API函數(shù)有深入的了解,編程較復雜。
2)使用Microsoft公司提供的Active X控件MSComm。該通信控件通過改變對象屬性,向?qū)ο蟀l(fā)送消息及為對象事件編寫響應代碼,可以方便地完成用戶應用程序間的串行通信,既可實現(xiàn)API函數(shù)的所有功能,又使得編程效率提高,應用功能增強,并且程序簡單明了。
對于MSComm控件實現(xiàn)串口通信的操作很多文獻都有論述,該控件的主要屬性可參考相關文獻,在此僅列出常用的屬性和方法。需要強調(diào)的是:在數(shù)據(jù)發(fā)送與接收過程中,都要通過一個Variant類型變量作為中介。發(fā)送數(shù)據(jù)時,必須先將要發(fā)送的數(shù)據(jù)賦給一個Variant類型變量,再把該Variant變量賦值給MSComm的Output屬性;同樣接受數(shù)據(jù)時,也應先將MSComm的Input屬性賦值給Variant變量,待接收端收到后必須轉(zhuǎn)換成其它類型(如字符型、二進制型)的數(shù)據(jù)才能進行處理。本例采用MSComm控件來實現(xiàn)。
下面介紹MSCOMM控件的屬性:
CommPort:設定通信連接端口代號,程序必須指定所要使用的串行端口號,Windows系統(tǒng)使用所設定的端口與外界通信。
PortOpen:設定通信口狀態(tài),若為真,通信端口打開,否則關閉。
Settings:設定通信口參數(shù),其格式是"bbbb,p,d,s",其中bbbb為通信速率(波特率),p為通信檢查方式(奇偶校驗),d為數(shù)據(jù)位數(shù),s為停止位數(shù),其設定應與PLC的設定一致。
Input:將對方傳送至輸入緩沖區(qū)的字符讀入到程序。
Output:將字符寫入輸出緩沖區(qū)。
InBufferCount:傳回接收緩沖區(qū)中的字符數(shù)。
OutBufferCount:傳回輸出緩沖區(qū)中的字符數(shù)。
InputLen:設定串行端口讀入字符串的長度。
InputMode:設定接收數(shù)據(jù)的方式。
Rthreshold:設定引發(fā)接收事件的字符數(shù)。
CommEvent:傳回OnComm事件發(fā)生時的數(shù)值碼
OnComm事件:無論是錯誤或事件發(fā)生,都會觸發(fā)此事件。
4.2 具體實現(xiàn)
本例程序為讀取Q00PLC的輸入輸出點的狀態(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 ‘設定串行通信口為com1
MSComm1.Settings = "19200,O,8,1" ‘波特率19200,奇校驗,8位數(shù)據(jù)位,1位停止位
MSComm1.InputLen = 0 ‘一次讀入輸入緩沖區(qū)中的字符串的長度為緩沖區(qū)中的所有數(shù)據(jù)
MSComm1.RThreshold = 62 ‘輸入緩沖區(qū)中每次接到62個字符就產(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 計算機與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計語言,采用它編寫的Windows環(huán)境下PC機與Q00PLC的串行通訊軟件具有程序?qū)崿F(xiàn)簡便、通用性強的特點,減輕了軟件開發(fā)者的工作量,對于國內(nèi)的中、小型企業(yè)具有現(xiàn)實意義。
參考文獻
[1] 王棟,Visual Basic6.0程序設計實用教程[M],清華大學出版社,2003
[2] 工業(yè)接口與通訊,呂志藝,2003
[3] Q 系列 MELSEC 通訊協(xié)議參考手冊
[4] 三菱 Q 系列可編程控制器編程手冊;
作者簡介:
馬磊:1981年10月12日出生;性別:女;籍貫:山東省魏橋鎮(zhèn)南鄭村;在讀研究生;研究方向:造紙裝備與控制。
呂多勇:1982年6月出生;男;籍貫:山東省濟南市歷城區(qū);本科,學士學位;
聯(lián)系方式:通訊地址:山東省濟南市 大學科技園 山東輕工業(yè)學院 輕化與環(huán)境工程學院,06級研究生,馬磊。 郵編:250353 郵箱:aima2005@126.com
標簽:
傳動網(wǎng)版權與免責聲明:凡本網(wǎng)注明[來源:傳動網(wǎng)]的所有文字、圖片、音視和視頻文件,版權均為傳動網(wǎng)(surachana.com)獨家所有。如需轉(zhuǎn)載請與0755-82949061聯(lián)系。任何媒體、網(wǎng)站或個人轉(zhuǎn)載使用時須注明來源“傳動網(wǎng)”,違反者本網(wǎng)將追究其法律責任。
本網(wǎng)轉(zhuǎn)載并注明其他來源的稿件,均來自互聯(lián)網(wǎng)或業(yè)內(nèi)投稿人士,版權屬于原版權人。轉(zhuǎn)載請保留稿件來源及作者,禁止擅自篡改,違者自負版權法律責任。
產(chǎn)品新聞
更多>2025-10-31
2025-10-22
2025-10-17
2025-10-11
2025-10-09
2025-09-23