发布于 2010-05-13 10:26:28
9楼
我用的vb6.0来与plc通讯用的是ppi 读写报文 我查了有好几篇 有很多有错误 自己总结的 希望 那位大侠能够指点我
Private Sub form_load()
With mscomm11
.commport = 1
.settings = "9600,n,8,1"
.inputlen = 0
.rthreshold = 1
.inputmode = comminputmodebinary
End With
End Sub
Private Sub command1_click()
If Command1.Caption = "开始" Then
mscomm1.portopen = True
Command2.Visible = False
Command1.Caption = "停止"
Else
Command2.Visible = True
mscomm1.portopen = False
Command1.Caption = "开始"
End If
End Sub
Function ppird(readadress As String)
Dim i As Integer, tmp As Integer
Dim sendbyte(32) As Byte
sendbyte(0) = &H68
sendbyte(1) = &H1B
sendbyte(2) = &H1B
sendbyte(3) = &H68
sendbyte(4) = &H2
sendbyte(5) = &H0
sendbyte(6) = &H6C
sendbyte(7) = &H32
sendbyte(8) = &H1
sendbyte(9) = &H0
sendbyte(10) = &H0
sendbyte(11) = &H0
sendbyte(12) = &H0
sendbyte(13) = &H0
sendbyte(14) = &HE
sendbyte(15) = &H0
sendbyte(16) = &H0
sendbyte(17) = &H4
sendbyte(18) = &H1
sendbyte(19) = &H12
sendbyte(20) = &HA
sendbyte(21) = &H10
sendbyte(22) = &H4
sendbyte(23) = &H0
sendbyte(24) = &H1
sendbyte(25) = &H0
sendbyte(26) = &H1
sendbyte(27) = &H84
sendbyte(28) = &H0
sendbyte(29) = (readadress * 8) \ 256
sendbyte(30) = (readadress * 8) Mod 256
sendbyte(31) = &H0
sendbyte() = &H16
For i = 4 To 30
temp = temp + sendbyte(i)
Next
sendbyte(31) = temp Mod 256
ppird = sendbyte
End Function
Function ppiww(adressx As Integer, datax As Integer)
Dim i As inteer, temp As Integer
Dim sendbyte(38) As Byte
sendbyte(0) = &H68
sendbyte(1) = &H21
sendbyte(2) = &H21
sendbyte(3) = &H68
sendbyte(4) = &H2
sendbyte(5) = &H0
sendbyte(6) = &H6C
sendbyte(7) = &H32
sendbyte(8) = &H1
sendbyte(9) = &H0
sendbyte(10) = &H0
sendbyte(11) = &H0
sendbyte(12) = &H0
sendbyte(13) = &H0
sendbyte(14) = &HE
sendbyte(15) = &H0
sendbyte(16) = &H6
sendbyte(17) = &H5
sendbyte(18) = &H1
sendbyte(19) = &H12
sendbyte(20) = &HA
sendbyte(21) = &H10
sendbyte(22) = &H4
sendbyte(23) = &H0
sendbyte(24) = &H1
sendbyte(25) = &H0
sendbyte(26) = &H1
sendbyte(27) = &H84
sendbyte(28) = &H0
sendbyte(29) = (adressx * 8) \ 256
sendbyte(30) = (adressx * 8) Mod 256
sendbyte(31) = &H0
sendbyte(32) = &H4
sendbyte(33) = &H0
sendbyte(34) = &H10
sendbyte(35) = datax \ 256
sendbyte(36) = datax Mod 256
sendbyte(37) = &H0
sendbyte(38) = &H16
For i = 4 To 36
temp = temp + sendbyte(i)
Next
sendbyte(37) = temp Mod 256
ppiww = sendbyte
End Function
Private Sub mscomm1_oncomm()
Dim rcvtemp(5) As Byte
Dim rcv_array() As Byte
Dim yy As Long
Select Case mscomm1.commevent
Case commevreceive
rcv_array = mscomm1.input
If rcv_array(0) = &HE5 Then
scomm1.rthreshold = 25
rcvtemp(0) = &H10
rcvtemp(1) = &H2
rcvtemp(2) = &H0
rcvtemp(3) = &H5C
rcvtemp(4) = &H5E
rcvtemp(5) = &H16
mscomm1.output = rcvtemp
ElseIf rcv_array(0) = &H68 And rcv_array(1) = &H17 Then
yy = Val(rcv_array(25)) * 256 + Val(rcv_array(26))
Text1 = yy
End If
End Select
watchtimer.Enabled = False
End Sub
以上就是vb通讯读取报文 还望 不吝赐教