VB实现modbus TCP IP

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Schneider-施耐德LEC使用技巧文集[第7讲]——如何用VB实现Twido的
Modbus TCP/IP的通讯
提供:Schneider-施耐德电气(中国)投资有限公司
作者:沈建忠
Twido系列PLC支持TCP Modbus的通讯,尤其是TWDLCAE40DRF提供了内置的以太网接口,能实现下图所示的结构;通过HUB,不仅能对Twido进行编程,也能对Twido PLC中的数据进行读写。

对于TWDLCAE40DRF,假定其配置如下:
对于上位机,我们利用VB的WinSock套接字控件能很容易的进行编程。

新建1个套接字对象,设定其属性如右,注意其远程主机的IP就是以上TWDLCAE40DRF 的IP地址:
]
1.建立网络连接
Private Sub Command2_Click()
On Error Resume Next
Winsock1.Close
Winsock1.Connect “85.16.1.1”, 502
If Err Then
MsgBox “网络连接时发生错误:” & Err.Description, vbCritical, “网络连接”
Err.Clear
End If
End Sub
2.读多个字的命令(本例表示从PLC读%MW3和%MW4两个字):
Private Sub cmdSend_Click()
On Error GoTo ErrProc
Dim SendStr(11) As Byte
Dim RcvStr() As Byte
SendStr(0) = 0 ’交换识别号高字节,通常为0
SendStr(1) = 0 ’交换识别号低字节,通常为0
SendStr(2) = 0 ’协议识别号高字节,为0
SendStr(3) = 0 ’协议识别号低字节,为0
SendStr(4) = 0 ’字节长度高字节
SendStr(5) = 6 ’以下字节长度低字节
SendStr(6) = 255 ’单元识别号,确省为255
SendStr(7) = &H3 ’读多个字命令代码
SendStr(8) = 0 ’读数据的起始地址高字节
SendStr(9) = 3 ’读数据的起始地址低字节
SendStr(10) = 0 ’数据长度高字节
SendStr(11) = 2 ’数据长度低字节
Dim aStr As String
Dim i As Integer
For i = 0 To 11
aStr = aStr & Chr(SendStr(i))
Next
Winsock1.SendData aStr
Exit Sub
ErrProc:
MsgBox “传输数据失败”, vbCritical, “网络传输”
End Sub
3.写多个字的命令(本例表示写%MW3、%MW4、%MW5三个字到PLC中):Private Sub cmdwrite_Click()
On Error GoTo ErrProc
Dim SendStr(18) As Byte
Dim RcvStr() As Byte
SendStr(0) = 0 ’交换识别号高字节,通常为0
SendStr(1) = 0 ’交换识别号低字节,通常为0
SendStr(2) = 0 ’协议识别号高字节,为0
SendStr(3) = 0 ’协议识别号低字节,为0
SendStr(4) = 0 ’字节长度高字节
SendStr(5) = 13 ’以下字节长度低字节
SendStr(6) = 255 ’单元识别号,确省为255
SendStr(7) = &H10 ’写多个字命令代码
SendStr(8) = 0 ’写数据的起始地址高字节
SendStr(9) = 3 ’写数据的起始地址低字节
SendStr(10) = 0 ’数据长度字数的高字节
SendStr(11) = 3 ’数据长度字数的低字节
SendStr(12) = 6 ’数据长度的字节数
SendStr(13) = &HA ’写的第1个字的高字节
SendStr(14) = &HB ’写的第1个字的低字节
SendStr(15) = &HC ’写的第2个字的高字节
SendStr(16) = &HD ’写的第2个字的低字节
SendStr(17) = &HE ’写的第3个字的高字节
SendStr(18) = &HF ’写的第3个字的低字节
Dim aStr As String
Dim i As Integer
For i = 0 To 18
aStr = aStr & Chr(SendStr(i))
Next
Winsock1.SendData aStr
Exit Sub
ErrProc:
M sgBox “传输数据失败”, vbCritical, “网络传输”End Sub
4.通讯数据处理(本例是得到4个字节的数据):
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long) Dim a1, a2, b1, b2, s As String
Winsock1.GetData s
If bytesTotal > 12 Then
a1 = Hex$(Asc(Mid$(s, 10, 1)))
a2 = Hex$(Asc(Mid$(s, 11, 1)))
b1 = Hex$(Asc(Mid$(s, 12, 1)))
b2 = Hex$(Asc(Mid$(s, 13, 1)))
End If
txtReceive.Text = a1 & a2 & “//” & b1 & b2
If Len(txtReceive.Text) > 5000 Then
txtReceive.Text = Right(txtReceive.Text, 2000)
End If
End Sub。

相关文档
最新文档