📄 form1.frm
字号:
If UBound(Rcv_Data) = 5 Then
MSComm1.Output = Val_Ok
MSComm1.RThreshold = 1
Exit Sub
End If
If UBound(Rcv_Data) = 21 And (PLC_Cmd = "Run" Or PLC_Cmd = "Stop") Then
If Rcv_Data(0) = &H68 Then
If Rcv_Data(19) = &H29 Then Shape1.FillColor = vbRed: Label2.Caption = "STOP"
If Rcv_Data(19) = &H28 Then Shape1.FillColor = vbGreen: Label2.Caption = "RUN"
End If
End If
If UBound(Rcv_Data) = 36 And PLC_Cmd = "Rbyte" Then
If Rcv_Data(0) = &H68 Then
IO_Label1.Value = Rcv_Data(25)
IO_Label2.Value = Rcv_Data(26)
IO_Label3.Value = Rcv_Data(27)
IO_Label4.Value = Rcv_Data(33)
IO_Label5.Value = Rcv_Data(34)
End If
End If
End If
End Select
End Sub
Private Sub PLC_Run_Click() 'PLC 运行命令
Timer1.Enabled = False '停止监控
If Not ReadyOk Then '等待空闲
Do While Not ReadyOk
DoEvents
Loop
End If
ReadyOk = False: Timer2.Enabled = True '占线:启动超时计时
Dim Val_Run() As Byte '定义发送的数据为字节为元素的数组。
Dim i As Integer
Dim Temp() As String
Const Temp_Str = "68 21 21 68 02 00 7C 32 01 00 00 00 00 00 14 00 00 28 00 00 00 00 00 00 FD 00 00 09 50 5F 50 52 4F 47 52 41 4D BA 16"
MSComm1.RThreshold = 1
Temp = Split(Temp_Str, " ")
ReDim Val_Run(UBound(Temp))
For i = 0 To UBound(Temp)
Val_Run(i) = Val("&H" & Temp(i))
Next i
PLC_Cmd = "Run"
MSComm1.Output = Val_Run
Timer1.Enabled = True '启动监控
End Sub
Private Sub PLC_Stop_Click() 'PLC 停止命令
Timer1.Enabled = False '停止监控
If Not ReadyOk Then '等待空闲
Do While Not ReadyOk
DoEvents
Loop
End If
ReadyOk = False: Timer2.Enabled = True '占线:启动超时计时
Dim Val_Stop() As Byte '定义发送的数据为字节为元素的数组。
Dim i As Integer
Dim Temp() As String
Const Temp_Str = "68 1D 1D 68 02 00 7C 32 01 00 00 00 00 00 10 00 00 29 00 00 00 00 00 09 50 5F 50 52 4F 47 52 41 4D BA 16"
MSComm1.RThreshold = 1
Temp = Split(Temp_Str, " ")
ReDim Val_Stop(UBound(Temp))
For i = 0 To UBound(Temp)
Val_Stop(i) = Val("&H" & Temp(i))
Next i
PLC_Cmd = "Stop"
MSComm1.Output = Val_Stop
Timer1.Enabled = True '启动监控
End Sub
Private Sub Read_I_Click() '读IO状态
If Not ReadyOk Then '等待空闲
Do While Not ReadyOk
DoEvents
Loop
End If
ReadyOk = False: Timer2.Enabled = True '占线:启动超时计时
Dim Val_Read() As Byte
Dim i As Integer
Dim Temp() As String
Const Temp_Str = "68 27 27 68 02 00 6C 32 01 00 00 00 00 00 1A 00 00 04 02 12 0A 10 02 00 03 00 00 81 00 00 00 12 0A 10 02 00 02 00 00 82 00 00 00 25 16"
MSComm1.RThreshold = 1
Temp = Split(Temp_Str, " ")
ReDim Val_Read(UBound(Temp))
For i = 0 To UBound(Temp)
Val_Read(i) = Val("&H" & Temp(i))
Next i
PLC_Cmd = "Rbyte"
MSComm1.Output = Val_Read
End Sub
Private Sub Timer1_Timer() '监控定时器
If MSComm1.PortOpen Then
Read_I_Click
End If
End Sub
Private Sub Timer2_Timer() '超时定时器
ReadyOk = True
End Sub
Private Sub UnForce_Click() '全部取消强制命令
Timer1.Enabled = False
If Not ReadyOk Then
Do While Not ReadyOk
DoEvents
Loop
End If
ReadyOk = False: Timer2.Enabled = True
Dim Val_UnForce() As Byte
Dim i As Integer
Dim Temp() As String
Const Temp_Str = "68 1F 1F 68 02 00 7C 32 07 00 00 00 00 00 0C 00 06 00 01 12 08 12 48 0B 00 00 00 00 00 FF 09 00 02 02 00 55 16"
MSComm1.RThreshold = 1
Temp = Split(Temp_Str, " ")
ReDim Val_UnForce(UBound(Temp))
For i = 0 To UBound(Temp)
Val_UnForce(i) = Val("&H" & Temp(i))
Next i
PLC_Cmd = "UnForce"
Dim Val_Ok1(5) As Byte
Val_Ok1(0) = &H10
Val_Ok1(1) = &H2
Val_Ok1(2) = &H0
Val_Ok1(3) = &H7C
Val_Ok1(4) = &H7E
Val_Ok1(5) = &H16
MSComm1.Output = Val_UnForce
Sleep 50
MSComm1.Output = Val_Ok
Sleep 50
MSComm1.Output = Val_Ok1
Sleep 50
MSComm1.Output = Val_Ok
Sleep 50
MSComm1.Output = Val_Ok1
Sleep 50
ReadyOk = True
Dim Temp_R As String
Temp_R = "68 1B 1B 68 02 00 6C 32 01 00 00 00 00 00 0E 00 00 04 01 12 0A 10 02 00 14 00 00 03 00 00 00 F9 16"
Send_Val Temp_R
Sleep 50
Send_Val Temp_R
Sleep 50
Temp_R = "68 1B 1B 68 02 00 7C 32 01 00 00 00 00 00 0E 00 00 04 01 12 0A 10 02 00 01 00 00 05 00 00 20 18 16"
Send_Val Temp_R
End Sub
Private Sub Set_Bit_Click() '强制置位指令
Dim Bit_Val As String
Dim Temp As String, Type_Val As String, V As Integer
Temp = "68 2B 2B 68 02 00 7C 32 07 00 00 00 14 00 0C 00 12 00 01 12 08 12 48 0B 00 00 00 00 00 FF 09 00 0E 00 01 10 01 00 01 00 00 "
V = &H14
If Option1.Value Then
Type_Val = "82"
V = V + 1
Else
Type_Val = "81"
End If
Bit_Val = Hex(Val(Text1.Text) * 8 + Val(Combo1.Text))
V = (V + Val(Text1.Text) * 8 + Val(Combo1.Text)) Mod 256
Temp = Temp & Type_Val & " 00 00 " & Bit_Val & " 01 00 " & Hex(V) & " 16"
Send_Val Temp
End Sub
Private Sub ReSet_Bit_Click() '强制复位指令
Dim Bit_Val As String
Dim Temp As String, Type_Val As String, V As Integer
Temp = "68 2B 2B 68 02 00 7C 32 07 00 00 00 14 00 0C 00 12 00 01 12 08 12 48 0B 00 00 00 00 00 FF 09 00 0E 00 01 10 01 00 01 00 00 "
V = &H13
If Option1.Value Then
Type_Val = "82"
V = V + 1
Else
Type_Val = "81"
End If
Bit_Val = Hex(Val(Text1.Text) * 8 + Val(Combo1.Text)): Debug.Print Bit_Val
V = (V + Val(Text1.Text) * 8 + Val(Combo1.Text)) Mod 256
Temp = Temp & Type_Val & " 00 00 " & Bit_Val & " 00 00 " & Hex(V) & " 16"
Send_Val Temp
End Sub
Private Sub UN_F_Click() '位强制取消指令
Dim Bit_Val As String
Dim Temp As String, Type_Val As String, V As Integer
Temp = "68 29 29 68 02 00 6C 32 07 00 00 00 00 00 0C 00 10 00 01 12 08 12 48 0B 00 00 00 00 00 FF 09 00 0C 01 01 10 01 00 01 00 00 "
V = &HEC
If Option1.Value Then
Type_Val = "82"
V = V + 1
Else
Type_Val = "81"
End If
Bit_Val = Hex(Val(Text1.Text) * 8 + Val(Combo1.Text)): Debug.Print Bit_Val
V = (V + Val(Text1.Text) * 8 + Val(Combo1.Text)) Mod 256
Temp = Temp & Type_Val & " 00 00 " & Bit_Val & " " & Hex(V) & " 16"
Send_Val Temp
End Sub
Private Sub Send_Val(Text As String) '发送字符串指令
Timer1.Enabled = False
If Not ReadyOk Then
Do While Not ReadyOk
DoEvents
Loop
End If
ReadyOk = False: Timer2.Enabled = True
Dim Val_Temp() As Byte
Dim i As Integer
Dim Temp() As String
Dim Temp_Str As String
Temp_Str = Text
MSComm1.RThreshold = 1
Temp = Split(Temp_Str, " ")
ReDim Val_Temp(UBound(Temp))
For i = 0 To UBound(Temp)
Val_Temp(i) = Val("&H" & Temp(i))
Next i
PLC_Cmd = "UnForce"
MSComm1.Output = Val_Temp
Sleep 50
MSComm1.Output = Val_Ok
Sleep 50
ReadyOk = True
Timer1.Enabled = True
End Sub
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -