dongxuan24
級(jí)別: 正式會(huì)員
|
Private Sub Combo5_Click() Select Case Combo5.Text Case "On" Instruction = &H11 Case "Off" Instruction = &H10 End Select End Sub Private Sub Command1_Click() Dim OutByte(0 To 32) As Byte Dim Num As Double Dim Num2 As String Dim L Dim Lenth2 As String Dim ByteXor As Byte Dim StrXor As String ReadPlc = True If Text1.Text = "" Then MsgBox "請(qǐng)輸入寄存器地址", vbOKOnly, "系統(tǒng)提示" Else Num = Val(Text1.Text) Num2 = Hex(Num) Lenth2 = Hex(Lenth) ByteXor = 0 OutByte(0) = 103 '起始字符 OutByte(1) = 5 '讀寫指令 OutByte(2) = Asc(0) 'PLC站地址 OutByte(3) = Asc(2) OutByte(4) = Asc(Mid(Address_R, 1, 1)) '寄存器類型 OutByte(5) = Asc(Mid(Address_R, 2, 1)) OutByte(6) = Asc(Mid(Address_R, 3, 1)) OutByte(7) = Asc(Mid(Address_R, 4, 1)) L = Len(Num2) '寄存器地址 For i = 0 To L - 1 OutByte(11 - i) = Asc(Mid(Num2, L - i, 1)) Next i For i = 0 To 3 - L OutByte(11 - L - i) = Asc(0) Next i L = Len(Lenth2) '讀取字節(jié)數(shù) If L = 2 Then OutByte(12) = Asc(Mid(Lenth2, 1, 1)) OutByte(13) = Asc(Mid(Lenth2, 2, 1)) Else OutByte(12) = Asc(0) OutByte(13) = Asc(Mid(Lenth2, 1, 1)) End If For i = 1 To 29 'BCC校驗(yàn)碼計(jì)算 ByteXor = ByteXor Xor OutByte(i) Next i StrXor = Hex(ByteXor) If Len(StrXor) = 2 Then OutByte(30) = Asc(Mid(StrXor, 1, 1)) OutByte(31) = Asc(Mid(StrXor, 2, 1)) Else OutByte(30) = Asc(0) OutByte(31) = Asc(Mid(StrXor, 1, 1)) End If OutByte(32) = 71 End If MSComm1.Output = OutByte End Sub Private Sub Command2_Click() Dim OutByte(0 To 32) As Byte Dim Num As Double Dim Num2 As String Dim L Dim Lenth2 As String Dim ByteXor As Byte Dim StrXor As String Dim Data_Send As Double Dim Data_Send2 As String Dim SetLenth2 As String Read = False If Text2.Text = "" Then MsgBox "請(qǐng)輸入寄存器地址", vbOKOnly, "系統(tǒng)提示" Else Num = Val(Text2.Text) Num2 = Hex(Num) SetLenth2 = Hex(SetLenth * 2) Data_Send = Val(Text4.Text) Data_Send2 = Hex(Data_Send) ByteXor = 0 OutByte(0) = 103 '起始字符 OutByte(1) = 6 '指令寫 OutByte(2) = Asc(0) 'PLC站地址 OutByte(3) = Asc(2) OutByte(4) = Asc(Mid(Address_W, 1, 1)) '寄存器類型 OutByte(5) = Asc(Mid(Address_W, 2, 1)) OutByte(6) = Asc(Mid(Address_W, 3, 1)) OutByte(7) = Asc(Mid(Address_W, 4, 1)) L = Len(Num2) '寄存器地址 For i = 0 To L - 1 OutByte(11 - i) = Asc(Mid(Num2, L - i, 1)) Next i For i = 0 To 3 - L OutByte(11 - L - i) = Asc(0) Next i L = Len(SetLenth2) '寫入數(shù)據(jù)的長(zhǎng)度 If L = 2 Then OutByte(12) = Asc(Mid(SetLenth2, 1, 1)) OutByte(13) = Asc(Mid(SetLenth2, 2, 1)) Else OutByte(12) = Asc(0) OutByte(13) = Asc(Mid(SetLenth2, 1, 1)) End If '寫入PLC的數(shù)據(jù) L = Len(Data_Send2) For i = 1 To L OutByte(14 + 2 * SetLenth - i) = Asc(Mid(Data_Send2, L - i + 1, 1)) Next i For i = 1 To SetLenth * 2 - L OutByte(13 + i) = Asc(0) Next i '寫入PLC的數(shù)據(jù) For i = 1 To 29 'BCC校驗(yàn)碼計(jì)算 ByteXor = ByteXor Xor OutByte(i) Next i StrXor = Hex(ByteXor) If Len(StrXor) = 2 Then OutByte(30) = Asc(Mid(StrXor, 1, 1)) OutByte(31) = Asc(Mid(StrXor, 2, 1)) Else OutByte(30) = Asc(0) OutByte(31) = Asc(Mid(StrXor, 1, 1)) End If OutByte(32) = 71 End If MSComm1.Output = OutByte End Sub Private Sub Command3_Click() Dim OutByte(0 To 32) As Byte Dim Num As Double Dim Num2 As String Dim L Dim Lenth2 As String Dim ByteXor As Byte Dim StrXor As String ReadPlc = False If Text6.Text = "" Then MsgBox "請(qǐng)輸入寄存器地址", vbOKOnly, "系統(tǒng)提示" Else Num = Val(Text6.Text) Num2 = Hex(Num) Lenth2 = Hex(Lenth) ByteXor = 0 OutByte(0) = 103 '起始字符 OutByte(1) = Instruction '讀寫指令 OutByte(2) = Asc(0) 'PLC站地址 OutByte(3) = Asc(2) OutByte(4) = Asc(Mid(Address_B, 1, 1)) '寄存器類型 OutByte(5) = Asc(Mid(Address_B, 2, 1)) OutByte(6) = Asc(Mid(Address_B, 3, 1)) OutByte(7) = Asc(Mid(Address_B, 4, 1)) L = Len(Num2) '寄存器地址 For i = 0 To L - 1 OutByte(11 - i) = Asc(Mid(Num2, L - i, 1)) Next i For i = 0 To 3 - L OutByte(11 - L - i) = Asc(0) Next i '位地址 OutByte(12) = Asc(Mid(Bit, 1, 1)) OutByte(13) = Asc(Mid(Bit, 2, 1)) For i = 1 To 29 'BCC校驗(yàn)碼計(jì)算 ByteXor = ByteXor Xor OutByte(i) Next i StrXor = Hex(ByteXor) If Len(StrXor) = 2 Then OutByte(30) = Asc(Mid(StrXor, 1, 1)) OutByte(31) = Asc(Mid(StrXor, 2, 1)) Else OutByte(30) = Asc(0) OutByte(31) = Asc(Mid(StrXor, 1, 1)) End If OutByte(32) = 71 End If MSComm1.Output = OutByte End Sub Private Sub Form_Load() Instruction = &H11 Address_R = "0100" Address_W = "0100" Address_B = "0100" Bit = "00" Lenth = 2 SetLenth = 2 MSComm1.CommPort = 1 MSComm1.Settings = "9600,n,8,1" MSComm1.PortOpen = True If (Err) Then MsgBox "端口打開錯(cuò)誤", vbOKOnly, "系統(tǒng)信息" End If MSComm1.RThreshold = 20 MSComm1.InputMode = 1 MSComm1.InBufferCount = 0 End Sub Private Sub MSComm1_OnComm() Dim Temp() As Byte Dim Read(0 To 32) As Byte Dim BBC As Byte Dim XorByte As Byte Dim BBC_Temp As Byte Dim Value As Double Dim Trans(1 To 8) As Byte Dim TransValue As Double Value = 0 XorByte = 0 Temp = MSComm1.Input If ReadPlc = True Then If Temp(LBound(Temp)) = 103 And Temp(LBound(Temp) + 1) = 1 Then '如果起始正確 For i = 0 To 20 Read(i) = Temp(i) Next i For i = 2 To 17 '計(jì)算校驗(yàn)碼 XorByte = XorByte Xor Read(i) Next i For i = 2 To 19 If Read(i) > &H40 Then Read(i) = Read(i) - &H37 Else Read(i) = Read(i) - &H30 End If Next BBC_Temp = Read(19) + Read(18) * &H10 If XorByte = BBC_Temp Then For i = 2 To Lenth * 2 + 1 Value = Value * &H10 + Read(i) Next i Text3.Text = Value End If End If Else If Temp(0) = 103 And Temp(1) = 2 Then MsgBox "參數(shù)設(shè)定成功", vbOKOnly, "系統(tǒng)提示" End If End If End Sub 尤其是這幾句,希望能具體解釋一下,多謝 OutByte(0) = 103 '起始字符 OutByte(1) = 5 '讀寫指令 OutByte(2) = Asc(0) 'PLC站地址 OutByte(3) = Asc(2) OutByte(4) = Asc(Mid(Address_R, 1, 1)) '寄存器類型 OutByte(5) = Asc(Mid(Address_R, 2, 1)) OutByte(6) = Asc(Mid(Address_R, 3, 1)) OutByte(7) = Asc(Mid(Address_R, 4, 1)) L = Len(Num2) '寄存器地址 For i = 0 To L - 1 OutByte(11 - i) = Asc(Mid(Num2, L - i, 1)) Next i For i = 0 To 3 - L OutByte(11 - L - i) = Asc(0) Next i L = Len(Lenth2) '讀取字節(jié)數(shù) If L = 2 Then OutByte(12) = Asc(Mid(Lenth2, 1, 1)) OutByte(13) = Asc(Mid(Lenth2, 2, 1)) Else OutByte(12) = Asc(0) OutByte(13) = Asc(Mid(Lenth2, 1, 1)) End If For i = 1 To 29 'BCC校驗(yàn)碼計(jì)算 ByteXor = ByteXor Xor OutByte(i) Next i StrXor = Hex(ByteXor) If Len(StrXor) = 2 Then OutByte(30) = Asc(Mid(StrXor, 1, 1)) OutByte(31) = Asc(Mid(StrXor, 2, 1)) Else OutByte(30) = Asc(0) OutByte(31) = Asc(Mid(StrXor, 1, 1)) End If OutByte(32) = 71 End If MSComm1.Output = OutByte End Sub Private Sub Command2_Click() Dim OutByte(0 To 32) As Byte Dim Num As Double Dim Num2 As String Dim L Dim Lenth2 As String Dim ByteXor As Byte Dim StrXor As String Dim Data_Send As Double Dim Data_Send2 As String Dim SetLenth2 As String Read = False If Text2.Text = "" Then MsgBox "請(qǐng)輸入寄存器地址", vbOKOnly, "系統(tǒng)提示" Else Num = Val(Text2.Text) Num2 = Hex(Num) SetLenth2 = Hex(SetLenth * 2) Data_Send = Val(Text4.Text) Data_Send2 = Hex(Data_Send) ByteXor = 0 OutByte(0) = 103 '起始字符 OutByte(1) = 6 '指令寫 OutByte(2) = Asc(0) 'PLC站地址 OutByte(3) = Asc(2) OutByte(4) = Asc(Mid(Address_W, 1, 1)) '寄存器類型 OutByte(5) = Asc(Mid(Address_W, 2, 1)) OutByte(6) = Asc(Mid(Address_W, 3, 1)) OutByte(7) = Asc(Mid(Address_W, 4, 1)) L = Len(Num2) '寄存器地址 For i = 0 To L - 1 OutByte(11 - i) = Asc(Mid(Num2, L - i, 1)) Next i For i = 0 To 3 - L OutByte(11 - L - i) = Asc(0) Next i L = Len(SetLenth2) '寫入數(shù)據(jù)的長(zhǎng)度 If L = 2 Then OutByte(12) = Asc(Mid(SetLenth2, 1, 1)) OutByte(13) = Asc(Mid(SetLenth2, 2, 1)) Else OutByte(12) = Asc(0) OutByte(13) = Asc(Mid(SetLenth2, 1, 1)) End If '寫入PLC的數(shù)據(jù) L = Len(Data_Send2) For i = 1 To L OutByte(14 + 2 * SetLenth - i) = Asc(Mid(Data_Send2, L - i + 1, 1)) Next i For i = 1 To SetLenth * 2 - L OutByte(13 + i) = Asc(0) Next i |
---|---|
|