1、引言
在網路的各個層上,隨著自動化和控制工程師需要與網路打交道的機會越來越多,聯網的願望和需要也正在逐漸高漲。而且,在監控和
資料採集
應用中,大多數工程師已將
乙太網
協議應用於資料採集與監視控制系統(SCADA)和工廠的診斷、
測試
及維護。如何簡便地實現與
PLC
的互動已經成為眾多廠商新的競爭戰場。由此產生了人機介面及各種組態
軟體
產品,這些產品的出現簡化了對PLC的控制、操作,使PLC的應用更加方便。但也有其共同的缺點,價格普遍偏高和可二次開發性較差。VB作為“原始”的程式語言,兼具了上述兩方面的優勢。本文結合一個簡單的案例來粗略討論如何透過VB實現PC機與PLC的乙太網通訊問題。
2、乙太網通訊的基本概念
2。1乙太網的標準
乙太網是一種區域網。早期標準為IEEE 802。3,資料鏈路層使用CSMA/CD,10Mb/s速度物理層有:
(1)10 Base 5粗同軸
電纜
,RG-8,一段最長為500m。
(2)10 Base 2細同軸電纜,RG-58,一段最長為185m。
(3)10 Base T雙絞線,UTP或STP,一段最長為100m。
2。2工業乙太網與商用乙太網的區別
什麼是工業乙太網?技術上,它與IEEE802。3相容,故從邏輯上可把商用網和工業網看成是一個乙太網,而
使用者
可根據現場情況,靈活裝配自己的網路部件。但從工業環境的惡劣和抗干擾的要求,設計者希望採用市場上可找到的乙太網晶片和媒介,兼顧考慮下述工業現場的特殊要求:首先要考慮高溫、潮溼、
振動
。二是對工業抗電磁干擾和抗輻射有一定要求,如滿足EN50081-2、EN50082-2標準,而辦公室級別的產品未經這些工業標準測試,表1列出了一些常用工業標準。為改善抗干擾性和降低輻射,工業乙太網產品多使用
多層線路板
或雙面
電路板
,且外殼採用金屬如鑄鋁遮蔽干擾。三是
電源
要求,因集線器、
交換機
、
收發器
多為有源部件,而現場電源的品質又較差,故常採用雙路直流電或交流電為其供電,另外考慮方便安裝,工業乙太網產品多數使用DIN導軌或面板安裝。四是通訊介質選擇,在辦公室環境下多數配線使用UTP,而在工業環境下推薦使用者使用STP(帶遮蔽雙絞線)和
光纖
。
2。3 使用TCP/IP協議的原因及其概述
最主要的一個原因在於它能使用在多種物理網路技術上,包括區域網和廣域網技術。TCP/IP協議的成功,很大程度上取決於它能適應幾乎所有底層通訊技術。20世紀80年代初,先在X。25上執行TCP/IP協議;而後又在一個撥號語音網路(如電話系統)上使用TCP/IP協議,又有TCP/IP在令牌環網上執行成功;最後又實現了TCP/IP遠端分組無線網點與其他Internet網點間TCP/IP通訊。所以TCP/IP協議極其靈活,具備連線不同網路的能力。另外,使用TCP/IP也簡化了OSI模型,因為它省略了表示層和會話層。如果現在把乙太網的物理層和資料鏈路層加到OSI模型,就構成了基於乙太網的TCP/IP網,如圖1所示。用乙太網實現TCP/IP也是經濟的一種方式。
IP是Internet最基本的協議。IP是面向報文的協議,它獨立處理每個報文包,每個報文包必須含有完整的定址資訊。IP報文包的格式如圖2所示。
圖2 IP報文包的格式
IP地址的型別共有4種(如圖3所示):A類用於處理超大型網路,最多16387064個主機(1~126);B類網路最多可有64516個主機(網路地址的第一段為128~191);C類用於小型網路,最多可有254個主機(網路地址的第一段為192~223);D類用於多點播送,用於多目的資訊的傳輸。全零(“0。0。0。0”)地址對應於當前主機,全1地址(“255。255。255。255”)是當前子網的廣播地址。
TCP是基於傳輸層的協議,協議檔案可從
RF
C793得到,使用廣泛,面向連線的可靠協議。它能把報文分解為數段,在目的站再重新裝配這些段,支援重新發送未被收到的段,提供兩臺裝置間的全雙工連線,允許它們高效地交換大量資料。TCP使用滑動視窗協議來高效使用網路。由於TCP很少干預底層投遞系統的工作,它適應各種投遞系統,且提供流量控制,能使各種不同速率的系統進行通訊。報文段是TCP所使用的基本傳輸單元,用於傳輸資料或控制資訊。
3、MODBUS資料幀格式
在TCP/IP乙太網上傳輸,支援
Ethernet
II和802。3兩種幀格式。圖3所示,Modbus TCP資料幀包含報文頭、功能程式碼和資料3部分。
4、MODBUS功能程式碼
4。1 3種類型
(1)公共功能程式碼(如表2所示):已定義好的功能碼,保證其唯一性,由Modbus。org認可。
(2)使用者自定義功能程式碼有兩組,分別為65~72和100~110,無需認可,但不保證程式碼使用的唯一性。如變為公共程式碼,需交RFC認可。
(3)保留的功能程式碼,由某些
公司
使用在某些傳統裝置的程式碼,不可作為公共用途。
表2 Modbus常用公共程式碼功能
4。2功能程式碼劃分:按應用深淺,可分為3個類別。
(1)類別0,對於客戶機/伺服器最小的可用子集:讀多個保持
暫存器
(fc。3);寫多個保持暫存器(fc。16)。
(2)類別1,可實現基本互易操作的常用程式碼:讀線圈(fc。1);讀
開關
量輸入(fc。2);讀輸入暫存器(fc。4);寫線圈(fc。5);寫單一暫存器(fc。6)。
(3)類別2,用於人機介面、
監控
系統的例行操作和資料傳送功能:
(4)強制多個線圈(fc。15);讀通用暫存器(fc。20);寫通用暫存器(fc。21);遮蔽寫暫存器(fc。22);讀寫暫存器(fc。23)。
5、VB的基本概念
VB(Visual B
asic
)是面向物件的程式設計語言,用它來開發Windows作業系統下的應用程式,它提供了很多
介面
成員,物件、屬性、事件、方法就是4個重要的介面,VB提供了許多常用的控制元件。
5。1卷標控制元件
卷標控制元件如圖4(a)所示,該控制元件專用於顯示文字、數字用,顯示如圖4(b)所示。
5。2 按鈕控制元件
按鈕控制元件如圖5(a)所示,該控制元件使用率很高,提供一個供系統使用者操作用的按鈕,如圖5(b)所示。
6、基於Winsock控制元件的TCP/IP乙太網通訊
要完成VB與PLC等裝置的乙太網通訊要用到Winsock控制元件,在此有必要對該控制元件作較詳細的說明。Winsock是一個ActiveX控制元件,需要要手動新增許多專案,其步驟如下:
(1)選擇選單的【工程】。
(2)選擇【部件】。
(3)在彈出的對話方塊中做如圖6的選擇。
圖6 對話方塊介面
(4)如圖7所示,在部件選項卡就會出現Winsock控制元件。
7、Winsock控制元件的基本屬性
此控制元件對於使用者在執行時不可見,提供了一個簡單的途徑訪問TCP及UDP網路服務而無需瞭解底層細節,使用時你只需設定屬性、在恰當的時候呼叫它提供的方法即可。
主要屬性有:
By
te
sReceived:返回當前緩衝區中的位元組數量,我們可以使用 GetData 方法以接收資料。只讀且設計時不可用。
LocalHostName:返回本機名
字元
串,設計時不可用。
LocalIP:返回以(xxx。xxx。xxx。xxx)格式表達的IP地址串。設計時不可用,執行時只讀。
LocalPort :本機使用接收埠可讀寫,設計時可用,Long型。對於客戶,如果無需指定埠,則用埠0傳送資料。在此情況下,控制元件將隨機選擇一個埠。在一個連線確定後,為TCP的埠。對於伺服器,指用於監聽的埠。如設定為0,則用隨機數。在呼叫Listen 方法後,該屬性自動包含用到的埠。埠0總是用於在兩
計算機
間建立動態連線。客戶希望透過埠0獲得一個隨機埠以”回撥”連線伺服器。
Protocol :套接字型別,為TCP或UDP二者之一,預設為TCP型別。設定為sckTCPProtocol表示TCP協議sckUDPProtocol表示UDP協議。在此屬性被重置之前需用Close方法關閉之。
RemoteHost:傳送或接收資料的主機,你可提供主機名如:FTP://ftp。
mi
crosoft。com,或一IP地址串,例如“100。0。1。1”。
RemoteHostIP:遠端主機的IP地址。對於客戶程式,在連線確定後使用Connect方法,此屬性包含遠端主機的IP名串。對於伺服器程式, 在引入連線需求後(Connection Request 事件),此屬性包含IP串。當使用UDP套接字,在Data Arrival事件發生後,此屬性為傳送UDP資料的機器IP地址串。
RemotePort:連線套接字埠值。例如通常HTTP應用使用80埠,FTP則使用21。
State:控制元件的狀態, 只讀且設計時不可用。可為以下值:
常量描述
sckClosed 0 預設值,關閉套接字
sckOpen 1 開啟套接字
sckListening 2 正監聽埠
sckConnectionPending 3 正在進行未定的連線
sckResolvingHost 4 正解析主機地址
sckHostResolved 5 主機地址已解析
sckConnecting 6 正在連線
sckConnected 7 已連線
sckClosing 8 連線關閉
sckError 9 錯誤
8、VB與PLC基於MODBUS TCP的乙太網通訊的實現
以下舉例說明如何實現VB與PLC的乙太網通訊。
(1)控制要求:用交替型按鈕控制Y0,並用指示燈顯示Y0狀態(綠色為執行,紅色為停止);能夠對D100、D200兩個暫存器進行數值寫入與讀出的操作。
(2)實現思路:同樣Y0的地址分別為H0500。寫入FF00為ON,0000為OFF,按功能碼05操作;D100,D200地址分別為H1064,H10C8,按功能碼03操作即可實現暫存器的讀功能,按功能碼10H操作即可實現暫存器的寫功能。
(3)VB介面的設計如圖8所示
在介面中用按鈕控制Y0的ON/OFF及D100、D200資料的寫與讀;用shape元件做
指示燈
,指示Y0的ON/OFF狀態;用Winsock控制元件實現PLC與VB的通訊。
(1)實現功能的程式碼構成
(2)建立網路連線
Private Sub Command1_Click()
Winsock1。Close
Winsock1。Connect Text1, 502
Label2。Caption = “Version: 1。0 : ” + Format(Now, “mmm dd yyyy Hh:Nn:Ss”)
Command1。Enabled = False
Command1。Enabled = False
Text1。Enabled = False
End Sub
(2)、Y0的ON/OFF控制
Private Sub Comd_send_Click()
On Error GoTo ErrProc
Dim sendstr(14) As Byte
sendstr(0) = &H0 ‘交換識別號高位元組,通常為0
sendstr(1) = &H0 ’交換識別號低位元組,通常為0
sendstr(2) = &H0 ‘協議識別號高位元組,為 0
sendstr(3) = &H0 ’協議識別號低位元組,為 0
sendstr(4) = &H0 ‘位元組長度高位元組
sendstr(5) = &H9 ’以下位元組長度低位元組
sendstr(6) = &HFF ‘單元識別號,確省為 255
sendstr(7) = &H5 ’寫一個線圈命令程式碼
sendstr(8) = &H0 ‘寫線圈的起始地址高位元組
sendstr(9) = &H1’寫線圈的起始地址低位元組
sendstr(10) = a ‘=FF開啟線圈,=00關閉線圈
sendstr(11) = &H0 ’
Dim aStr As String
Dim i, j As Integer
For i = 0 To 11
aStr = aStr & Chr(sendstr(i))
Next
Winsock1。SendData aStr
Exit Sub
ErrProc:
MsgBox “傳輸資料失敗”, vbCri
ti
cal, “網路傳輸”
End Sub
(3)線圈狀態顯示及暫存器讀出資料顯示
Private Sub winsock1_DataArrival(ByVal bytesTotal As Long)
Dim strdata() As Byte
Dim i, j As Integer
Dim s As String
Dim s1 As String
Dim IO As Byte
i = Winsock1。BytesReceived
ReDim strdata(i)
Winsock1。GetData strdata, vbByte, i
For j = 0 To i - 1
s = s + Hex(strdata(j))
Next
If
s Like “*5*” Then
s1 = Mid(s, 12, 2)
If s1 = “FF” Then
IO = 1
a = &H0
Else
IO = 0
a = &HFF
End If
If IO = 1 Then
Shape1。FillColor = RGB(0, 255, 0) ‘green
Labl3。Caption = “IO點接通”
Else
Shape1。FillColor = RGB(255, 0, 0) ’red
Labl3。Caption = “IO點斷開”
End If
End If If s Like “*3*” Then
Text3。Text = Text3。Text + Mid(s, 11) + “”
End If
(4)、讀多個暫存器資料
End Sub Private Sub Command4_Click()
On Error GoTo ErrProc
Dim str(12) As Byte
str(0) = &H0 ‘交換識別號高位元組,通常為 0
str(1) = &H0 ’交換識別號低位元組,通常為 0
str(2) = &H0 ‘協議識別號高位元組,為 0
str(3) = &H0 ’協議識別號低位元組,為 0
str(4) = &H0 ‘位元組長度高位元組
str(5) = &H6 ’以下位元組長度低位元組
str(6) = &HFF ‘單元識別號,確省為 255
str(7) = &H3 ’讀多個暫存器命令程式碼
str(8) = &H10 ‘讀資料的起始地址高位元組
str(9) = &HC8 ’讀資料的起始地址低位元組
str(10) = &H0 ‘資料長度高位元組
str(11) = &H1 ’資料長度低位元組
Dim bStr As String
Dim i As Integer
For i = 0 To 11
bStr = bStr & Chr(str(i))
Next
Winsock1。SendData bStr
Exit Sub
ErrProc:
MsgBox “傳輸資料失敗”, vbCritical, “網路傳輸”
End Sub
D100暫存器的寫入操作類似,由於篇幅所限其他程式碼在此就不再贅述。
9.結速語
工業乙太網是工業自動化網路發展的必然趨勢,為了對工業裝置進行實時的管理與監控,工業乙太網裝置大多都支援遠端管理,而且各
廠商
業都有各自的網路管理軟體以提供對網路裝置進行友好的
圖形
化介面操作。管理員還可以透過遠端telnet或web介面的方式直接對裝置進行除錯。完善的相容性,可靠的穩定性,對惡劣環境的適應性,強大的冗餘能力和方便的可管理性,是人們越來越多地在網路設計過程中採用工業乙太網的原因,而這也勢必成為工業乙太網在越來越多的網路環境裡大顯身手的重要契機。借臺達即將推出乙太網模組之際撰寫此文,希望能夠為其乙太網模組的推廣提供一些幫助。由於本人水平有限本文編寫難免會有錯漏之處,也請
讀者
給予批評指正。