(舊文章移植)

請注意我使用的PLC型式是:OMRON CJ1H CPU67H

乙太網路通信實測(使用UDP方式)

請同時看說明書sbcd-330c_cs1w-cj1w-etn.pdf加上有設備才容易理解。

我試了好多方式,加上四處找資料結果是送信要使用VB函式ChrB();

因為直接送Ascii時回傳值很奇怪。

所以受信也要把每各字元轉回16進制再顯示才看得懂。

總之說明書sbcd-307h_cs1w_cj1w-etn.pdf 並沒有教怎麼用VB寫,

所以測試是自己得搞定的,也許有些人很有經驗,非常歡迎指教。

PC與OMRON ETN21模組接續,使用RJ45 CABLE。(插在框框那裡)

1.jpg

 

PC IP 設定為192.0.1.10

OMRON PLC ETN21之設定如下圖:(IP:192.0.1.102 Port:9600)

2.jpg

 

其中IP:192.0.1.102的102(10進制)等於66(16進制),ETN21硬體上有Node No.請調至66。

ETN21硬體上UNIT No.請調至0即可。

送信格式如下:

3.jpg

 

ICF 設為80(Hex),設80表示命令+需要回應。

RSV設為00(Hex)。

GCT設為02(Hex)。

DNA設為00(Hex)。Network No.

DA1設為66(Hex)。ETN21的Node No.

DA2設為00(Hex)。ETN21的UNIT No.

SNA設為00(Hex)。Network No.

SA1設為0A(Hex)。PC的Node No.(就是192.0.1.10的10(10進)= 0A(16進))

SA2設為00(Hex)。跟DA2設相同。

SID設為00(Hex)。

以上為表頭,可以寫為固定。

因為只跟DM做測試,所以命令只舉例

0101(Hex) 讀出

0102(Hex)寫入

DM為82(Hex)

以下為送受信測試:

 

(1)讀出D3500測試,

送800002006600000A00000101820DAC000001

0101命令

82為DM

0DAC為3500

00固定要這麼寫

0001為1個CHANNEL

4.jpg

 

按送信後回傳值如下圖:

5.jpg

 

PLC Answer為02000A0000660000010100000164

表示D3500現在值為0164(Hex)。

在CX PROGRAMMER裡強制D10000為14(Hex),然後讀D10000,結果如下圖。

PLC Answer: 02000A0000660000010100000014

表示D10000現在值為014(Hex)。

6.jpg

 

連續兩個CHANNEL資料讀出如下圖:

程式下方的CX Programmer的監視;D3500=FFFF(Hex) ; D3501=ABCD(Hex) 。

與PLC Answer末8碼吻合。

 

7.jpg

(2)D3500寫入測試,

寫入00AA(Hex)

看階梯圖D3500已經變為00AA囉。

格式為800002006600000A00000102820DAC00000100AA

8.jpg

 

VB Winsocket設定如下圖:

((((((這裡請注意看圖右邊,我是選1-sckUDPProtocol的方式!!!!!!!!)))))

9.jpg

程式碼:

----------------------------------------------------------------------------------------

Private Sub Command3_Click()
Dim MS() As Byte

If Text1.Text = "" Then
MsgBox "警告!請輸入字串", vbCritical
Exit Sub
End If

l = Len(Text1.Text)
For j = 1 To l Step 2
a = a + ChrB(Val("&H" + Mid$(Text1.Text, j, 2)))
Next j
L1 = LenB(a)
MS() = LeftB(a, L1)
On Error GoTo DoWith
Winsock1.SendData MS()
'對甲電腦下達 MS指令

Exit Sub
DoWith:
MsgBox "警告!對方早在下達結束指令前就已斷線", vbCritical
End Sub

Private Sub Text3_Change()
Winsock1.RemoteHost = Text3.Text
End Sub

Private Sub Text4_Change()
Winsock1.RemotePort = Text4.Text
End Sub

Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim data As String
For i = 1 To 100000
Next i
Winsock1.GetData data, vbString
Rec = data 'CStr(data)
l = Len(Rec)
For j = 1 To l
p = Mid(Rec, j, 1)
q = Asc(p)
s = Hex(q)
If Len(Hex(q)) < 2 Then
s = "0" + Hex(q)
End If
r = r + s
Next
Text2.Text = r

End Sub


----------------------------------------------------------------------------------------

 

以上資料僅供參考

創作者介紹
創作者 老男人 的頭像
老男人

老男人幻想世界

老男人 發表在 痞客邦 留言(5) 人氣()


留言列表 (5)

發表留言
  • 橙光
  • 簡直是天書!哈哈 XDDD
  • 是啊 隔行如隔山

    老男人 於 2018/04/03 23:11 回覆

  • 悄悄話
  • 悄悄話
  • koko
  • 午安, 假日愉快.......... ^_^
  • 假日愉快

    老男人 於 2018/04/05 20:01 回覆