You are on page 1of 31

SEMI-SECS ][ HSMS

廠區網路實做

指導教授 XXX
班級 XXX
姓名 XXX
學號 XXX
實驗目標
• 以二部個人電腦,使用 HSMS 架構,利用
TCP/IP 網路,模擬 Equipment/Host 兩個
設備,建立基本訊息交換。
實驗背景
HOST
Equipment Behavior
網路概要: Message Protocol
Data Transfer Protocol
Physical Link

TCP/IP network

EQUIPMENT
實驗背景(續)
訊框結構
實驗背景(續)
System Byte
Byte # Bit Number Description
876543 21
1 Format code (octal) | NLB Format byte
2 Most significant length byte Length byte
3
4 Least significant length byts

Item format Codes


Example Messages
訊息流程
訊息流程
(續)
實驗條件

• 硬體設備:二部透過網路連線,架構
TCP/IP 的個人電腦
• 軟體需求:
Visual Basic V6.0
  Winsock 元件
Wis hEdit or   Ver sio n 1. 1. 1
Date : 2 00 5/01/2 0
Auth or : Atwo od
SE CSE mulato r Ver sion 1 .5
Date : 2 00 1/09 /20
Au th or : 工 研 院機械所 廖勝泰
HSM S_ Em ul ator
實驗架構
Client

Server
執行
1.HS MS _E msu lator (Equip men t)
2.W ish Editor (Equi pm en t)
3.SE CSE mulator (Equip men t)

執行
1.H SMS _E msu lat or(Host)
實驗流程 流程概述
1. 查詢 Server 端電腦網卡 IP 值。
2. Server 端執行 MSHS 程式, Role 設定為 Passive ,及連接埠等各項時限參數。
3. Client 端執行 MSHS 程式, Role 設定為 Active ,設定所欲連接 Server 電腦的
IP 及 Port 值,並設定各項時限參數。
4. 測試與 Server 連線是否成功。
5. Client 端執行 WishEditor , Role 設定為 Active ,設定所欲連接 Server 電腦的
IP 及 Port 值,並設定各項時限參數。
6. 測試與 Server 連線是否成功能。
7. Client 端執行 SECSEmulator , Role 設定為 Active ,設定所欲連接 Server 電
腦的 IP 及 Port 值,並設定各項時限參數。
8. 測試與 Server 連線是否成功能。
9. 三組測試程式,分別載入函數功能設定值。
10. 由 Server 端分別傳送函數呼叫至三組測試程式,測試回覆是否正確無誤。
11. 由三組測試套,分別對 Server 端進行測試,並監看 Server 端之回覆及訊息處理
是否正確無誤。
Server Client Client Client
MSHS MSHS WishEditor SECSEmulator
ConnectionRequest
ConnectAccept
ConnectionRequest
ConnectAccept
ConnectionRequest
ConnectAccept

Stream/Function call
reply

Stream/Function call
reply

Stream/Function call
reply
實驗流程 流程步驟
1. 在 DOS 式模式下,利用 ipconfig 指令,查詢 Server 端的網卡 IP 。
2. 在 Server 端電腦,
 執行實驗程式 HSME.exe ,
 設定 HSMS 參數,
  Role : Passive
  Local Port : 1001

3. 在 Client 端電腦,
 再執行另一個 HSMS.exe ,
 並設定 HSMS 參數,
  Role : Active
  Remote IP : 169.254.194.78
  Remote Port : 1001
3. 在 Client 端電腦,
 執行實驗程式 WishEditor.exe ,
 設定 HSMS 參數,
  Role : ActiveClient
  Remote IP : 169.254.194.78
  Remote Port : 1001
  Local Port : 1002

4. 在 Client 端電腦,
 再執行另一個 SECSEmulator.exe ,
 並設定 HSMS 參數,
  Role : Active
  Remote IP : 169.254.194.78
  Remote Port : 1001
  Local Port : 1003
實驗結果
使用 NETSTAT.exe 指令,檢查各 PORT 的連接狀況
實驗探討 缺失討論
1. 資料串流雖有長度定義,但沒段落分隔,當傳送品質不穩定時,字元
分析將造成程式設計的難度。
2. 功能定義僅接收 WishEditor 及 SECSEmulator 二套軟體所傳送過來
的資料,本軟體測試所需功能定義,乃自行在資料庫建立,因 SECS
為自定化的規範,且資料量龐大,在考量時間及人力因素,未提供
SML 功能定義的文字檔分析功能。

進階討論
HSMS 資料串長度佔 4 個 BYTE, 可傳送最多為
4,294,967,295Byte 的元位資料,當網路傳送單一的資料量越大時
,產生的網路問題越多,在實際應用上應可研究討論是否縮減單一
功能的資料傳送量。
關鍵程式碼
設定連線
Ho st :
Winsock1(0).Protocol = sckTCPProtocol
Winsock1(0).LocalPort = S_Lp
Winsock1(0).Listen
For I = 1 To 3
Load Winsock1(I)
Next I

Equ ipment :
Winsock1(0).RemoteHost = S_Rip$
Winsock1(0).RemotePort = S_Rp
Winsock1(0).Connect
送出位 元資料
S$ = "00 00 00 0A FF FF 00 00 00 01 99 99 99 99"
Call HB(S$, T()) : SystemBytes T()
Winsock1(0).SendData T()

Private Sub HB(A$, T() As Byte)


Dim R, I As Integer
R = Split(A, " ")
For I = 0 To UBound(R)
T(I) = Val("&H" & R(I))
Next I
End Sub

Private Function SystemBytes(R() As Byte)


Dim T As Single
T = Timer
Call CopyMemory(R(10), T, 4)
End Function
接收資 料
Winsock1(Index).GetData Rc(), vbByte
TB = UBound(Rc()): S = 0
Do
TL = 0
If TL + 3 + S > TB Then
With Data1.Recordset
.AddNew
.Fields(" 時限 ") = Timer
.Fields(" 功能 ") = "InterChr"
.Fields(" 描述 ") = "T8"
.Fields("SB") = Timer
.Update
End With
Exit Do
End If
For I = 0 To 3 : TL = TL * 256 + Rc(I + S) : Next I
ReDim Rd(TL + 3)
For I = 0 To TL + 3 : Rd(I) = Rc(I + S) : Next I
… 分析資料內容 …
Loop
解 It em Form at Co des
BB = Int(A(Id) / 4) ' Bit 876543
NLB = A(Id) And 3 ' Bit 21

4-byt e int ege r(sig ned)


For I = 1 To VL Step 8
Vx = 0
For J = 0 To 3
Vx = Vx * 256 + A(Id)
Id = Id + 1
Next J
If Vx > 2 ^ 31 - 1 Then Vx = 2 ^ 31 - Vx
Ve(Vi) = Vx
Vi = Vi + 1
Next I
8- byte float in g p oin t
For I = 1 To VL Step 8
For J = 0 To 7
FP(J) = A(7 - J + Id)
Next J
Call CopyMemory(V8, FP(0), 8)
Id = Id + 8
Ve(Vi) = V8
Vi = Vi + 1
Next I

ASC II
F$ = ""
For I = 1 To VL
F$ = F$ & Chr$(A(Id))
Id = Id + 1
Next I
Ve(Vi) = F$
Vi = Vi + 1
List .. 遞迴呼叫
If VL > 0 Then
DP Space$( 層 * 3) & "<L " & VL
層 = 層 +1
For I = 1 To VL
Call 解值 (A(), Id, Vi)
Next I
層 = 層 -1
If 層 < 0 Then
Id = -3
Exit Sub
End If
DP Space$( 層 * 3) & ">"
End If
傳送逾 時處理:
Private Sub 時限 (S As Integer, Fun$, W$, T() As
Byte)
Dim SB As Single
With Data1.Recordset
.AddNew
.Fields(" 時限 ") = Time + S / (24 * 3600#)
.Fields(" 功能 ") = Fun$
.Fields(" 描述 ") = "W" & W$
Call CopyMemory(SB, T(10), 4)
.Fields("SB") = SB
.Update
End With
End Sub
Private Sub 逾時檢查 ()
Dim S$
With Data1.Recordset
If .RecordCount Then
If .EditMode <> dbEditNone Then Exit Sub
.MoveFirst
Do Until .EOF
S$ = .Fields(" 描述 ")
If Left$(S$, 1) = "W" And Time > .Fields(" 時限 ") Then
.Edit
.Fields(" 描述 ") = Mid$(S$, 2)
.Update
End If
.MoveNext
Loop
End If
End With
End Sub

You might also like