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是基於傳輸層的協議,協議文件可從RFC793得de到dao,使shi用yong廣guang泛fan,麵mian向xiang連lian接jie的de可ke靠kao協xie議yi。它ta能neng把ba報bao文wen分fen解jie為wei數shu段duan,在zai目mu的de站zhan再zai重zhong新xin裝zhuang配pei這zhe些xie段duan,支zhi持chi重zhong新xin發fa送song未wei被bei收shou到dao的de段duan,提ti供gong兩liang台tai設she備bei間jian的de全quan雙shuang工gong連lian接jie,允yun許xu它ta們men高gao效xiao地di交jiao換huan大da量liang數shu據ju。TCP使用滑動窗口協議來高效使用網絡。由於TCP很少幹預底層投遞係統的工作,它適應各種投遞係統,且提供流量控製,能使各種不同速率的係統進行通信。報文段是TCP所使用的基本傳輸單元,用於傳輸數據或控製信息。
要完成VB與PLC等設備的以太網通信要用到Winsock控件,在此有必要對該控件作較詳細的說明。Winsock是一個ActiveX控件,需要要手動添加許多項目,其步驟如下:
(4)如圖7所示,在部件選項卡就會出現Winsock控件。
圖7 Winsock控件
7、Winsock控件的基本屬性
此控件對於用戶在運行時不可見,提供了一個簡單的途徑訪問TCP及UDP網絡服務而無需了解底層細節,使用時你隻需設置屬性、在恰當的時候調用它提供的方法即可。
主要屬性有:
BytesReceived:返回當前緩衝區中的字節數量,我們可以使用 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方法關閉之。
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所示

圖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 "傳輸數據失敗", vbCritical, "網絡傳輸"
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.結速語
工(gong)業(ye)以(yi)太(tai)網(wang)是(shi)工(gong)業(ye)自(zi)動(dong)化(hua)網(wang)絡(luo)發(fa)展(zhan)的(de)必(bi)然(ran)趨(qu)勢(shi),為(wei)了(le)對(dui)工(gong)業(ye)設(she)備(bei)進(jin)行(xing)實(shi)時(shi)的(de)管(guan)理(li)與(yu)監(jian)控(kong),工(gong)業(ye)以(yi)太(tai)網(wang)設(she)備(bei)大(da)多(duo)都(dou)支(zhi)持(chi)遠(yuan)程(cheng)管(guan)理(li),而(er)且(qie)各(ge)廠(chang)商(shang)業(ye)都(dou)有(you)各(ge)自(zi)的(de)網(wang)絡(luo)管(guan)理(li)軟(ruan)件(jian)以(yi)提(ti)供(gong)對(dui)網(wang)絡(luo)設(she)備(bei)進(jin)行(xing)友(you)好(hao)的(de)圖(tu)形(xing)化(hua)界(jie)麵(mian)操(cao)作(zuo)。管(guan)理(li)員(yuan)還(hai)可(ke)以(yi)通(tong)過(guo)遠(yuan)程(cheng)telnet或web界(jie)麵(mian)的(de)方(fang)式(shi)直(zhi)接(jie)對(dui)設(she)備(bei)進(jin)行(xing)調(tiao)試(shi)。完(wan)善(shan)的(de)兼(jian)容(rong)性(xing),可(ke)靠(kao)的(de)穩(wen)定(ding)性(xing),對(dui)惡(e)劣(lie)環(huan)境(jing)的(de)適(shi)應(ying)性(xing),強(qiang)大(da)的(de)冗(rong)餘(yu)能(neng)力(li)和(he)方(fang)便(bian)的(de)可(ke)管(guan)理(li)性(xing),是(shi)人(ren)們(men)越(yue)來(lai)越(yue)多(duo)地(di)在(zai)網(wang)絡(luo)設(she)計(ji)過(guo)程(cheng)中(zhong)采(cai)用(yong)工(gong)業(ye)以(yi)太(tai)網(wang)的(de)原(yuan)因(yin),而(er)這(zhe)也(ye)勢(shi)必(bi)成(cheng)為(wei)工(gong)業(ye)以(yi)太(tai)網(wang)在(zai)越(yue)來(lai)越(yue)多(duo)的(de)網(wang)絡(luo)環(huan)境(jing)裏(li)大(da)顯(xian)身(shen)手(shou)的(de)重(zhong)要(yao)契(qi)機(ji)。借(jie)台(tai)達(da)即(ji)將(jiang)推(tui)出(chu)以(yi)太(tai)網(wang)模(mo)塊(kuai)之(zhi)際(ji)撰(zhuan)寫(xie)此(ci)文(wen),希(xi)望(wang)能(neng)夠(gou)為(wei)其(qi)以(yi)太(tai)網(wang)模(mo)塊(kuai)的(de)推(tui)廣(guang)提(ti)供(gong)一(yi)些(xie)幫(bang)助(zhu)。由(you)於(yu)本(ben)人(ren)水(shui)平(ping)有(you)限(xian)本(ben)文(wen)編(bian)寫(xie)難(nan)免(mian)會(hui)有(you)錯(cuo)漏(lou)之(zhi)處(chu),也(ye)請(qing)讀(du)者(zhe)給(gei)予(yu)批(pi)評(ping)指(zhi)正(zheng)。