⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 form1.frm

📁 VB通过PPI协议访问S7-200 PLC的源程序,
💻 FRM
📖 第 1 页 / 共 2 页
字号:
     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 + -