大家好
今天放送之前说过的工程控制PID模块的VBA代码,
如果大家对这个模块还有不了解的地方或者概念的不知道的地方可以搜看我之前的视频PID模块.
当然,大家可以看代码本身来加上我之前的PID概念视频来共同研究一下这个模块应该怎么做
总代码其实就是时间计时器Timer
中间夹杂事件.
Sub start_timer_Click()
Application.OnTime Now + TimeValue("00:00:01"), "main"
End Sub
Sub main()
'Dim LRA As Integer
LRA = Sheets("流程").Range("L" & Rows.Count).End(xlUp).Row
'累计
Sheets("流程").Cells(2, 13).Value = Sheets("后台").Cells(2, 2).Value
Sheets("流程").Cells(2, 14).Value = Sheets("后台").Cells(2, 3).Value
Sheets("流程").Cells(2, 15).Value = Sheets("后台").Cells(2, 4).Value
Sheets("流程").Cells(2, 16).Value = Sheets("后台").Cells(2, 5).Value
Sheets("流程").Cells(LRA + 1, "L").Value = Time
Sheets("流程").Cells(LRA + 1, "M").Value = Val(Sheets("流程").Range("G4").Value) * Val(Sheets("后台").Range("J1").Value)
Sheets("流程").Cells(LRA + 1, "N").Value = Val(Sheets("流程").Range("G9").Value) * Val(Sheets("后台").Range("J1").Value)
Sheets("流程").Cells(LRA + 1, "O").Value = Val(Sheets("流程").Range("E12").Value) * Val(Sheets("后台").Range("J1").Value)
Sheets("流程").Cells(LRA + 1, "P").Value = Val(Sheets("流程").Range("G4").Value) * Val(Sheets("后台").Range("J1").Value) + Val(Sheets("流程").Range("G9").Value) * Val(Sheets("后台").Range("J1").Value) - Val(Sheets("流程").Range("E12").Value) * Val(Sheets("后台").Range("J1").Value)
Sheets("流程").Shapes("消化器1").Left = Sheets("流程").Shapes("消化器2").Left
Sheets("流程").Shapes("消化器1").Width = Sheets("流程").Shapes("消化器2").Width
Sheets("流程").Shapes("消化器1").Height = Val(Sheets("后台").Cells(2, "E").Value) / Val(Sheets("后台").Range("J2").Value) * Sheets("流程").Shapes("消化器2").Height
'Dim LRB As Integer
LRB = Sheets("后台").Range("A" & Rows.Count).End(xlUp).Row
Sheets("后台").Cells(LRB + 1, "A").Value = Time
Sheets("后台").Cells(LRB + 1, "B").Value = Val(Sheets("流程").Range("G4").Value) * Val(Sheets("后台").Range("J1").Value)
Sheets("后台").Cells(LRB + 1, "C").Value = Val(Sheets("流程").Range("G9").Value) * Val(Sheets("后台").Range("J1").Value)
Sheets("后台").Cells(LRB + 1, "D").Value = Val(Sheets("流程").Range("E12").Value) * Val(Sheets("后台").Range("J1").Value)
Sheets("后台").Cells(LRB + 1, "E").Value = Sheets("后台").Cells(LRB + 1, "B").Value + Sheets("后台").Cells(LRB + 1, "C").Value - Sheets("后台").Cells(LRB + 1, "D").Value
Sheets("后台").Cells(2, 2).Value = "=SUM(B3:B" & LRB + 1 & ")"
Sheets("后台").Cells(2, 3).Value = "=SUM(C3:C" & LRB + 1 & ")"
Sheets("后台").Cells(2, 4).Value = "=SUM(D3:D" & LRB + 1 & ")"
Sheets("后台").Cells(2, 5).Value = (Sheets("后台").Cells(2, 2).Value + Sheets("后台").Cells(2, 3).Value - Sheets("后台").Cells(2, 4).Value)
Sheets("流程").Range(Cells(3, 12), Cells(17, 16)).Interior.Color = RGB(255, 255, 0)
Sheets("流程").Range(Cells(LRA + 1, 12), Cells(LRA + 1, 16)).Interior.Color = RGB(0, 255, 0)
If LRA = 16 Then
Clear
End If
'设定液位/PID液位调节=1液位变化值+2液位变化值
'实际液位
On Error Resume Next
Sheets("后台").Range("L" & LRB + 1).Value = Val(Sheets("后台").Cells(2, "E").Value)
'Sheets("后台").Range("L" & LRB + 1).Value = Sheets("后台").Range("Q" & LRB).Value + Sheets("后台").Range("P" & LRB).Value * 0.01 + Sheets("后台").Range("L" & LRB).Value
'P=设定液位-当前液位值
Sheets("后台").Range("M" & LRB + 1).Value = Sheets("流程").Range("E2").Value - Sheets("后台").Range("L" & LRB + 1).Value
'I=当前P+前一秒I
'On Error Resume Next
Sheets("后台").Range("N" & LRB + 1).Value = Sheets("后台").Range("M" & LRB + 1).Value + Sheets("后台").Range("N" & LRB).Value
'D=当前P-前一秒P
Sheets("后台").Range("O" & LRB + 1).Value = Sheets("后台").Range("M" & LRB + 1).Value - Sheets("后台").Range("M" & LRB).Value
'PID2
Sheets("后台").Range("P" & LRB + 1).Value = (Sheets("后台").Range("M" & LRB + 1).Value * Sheets("流程").Range("Q3").Value + Sheets("后台").Range("N" & LRB + 1).Value * Sheets("流程").Range("Q7").Value + Sheets("后台").Range("O" & LRB + 1).Value * Sheets("流程").Range("Q11").Value)
If Sheets("后台").Range("P" & LRB + 1).Value < 0 Then
Sheets("后台").Range("P" & LRB + 1).Value = 0
End If
'PID=P*Kp+I*Ki+D*Kd
Sheets("流程").Range("E12").Value = Sheets("后台").Range("P" & LRB + 1).Value
'液位变化
Sheets("后台").Range("Q" & LRB + 1).Value = Sheets("后台").Cells(LRB + 1, "B").Value + Sheets("后台").Cells(LRB + 1, "C").Value
start_timer_Click
End Sub
Sub stop_timer_Click()
On Error Resume Next
Application.OnTime Now + TimeValue("00:00:01"), "main", Schedule:=False
End Sub
以上
大家可以了解这一块,对大家做自动化程序有极大的帮助.
有点绕,不明白的地方可以评论留言,我有时间都会解答.
希望大家可以转发,特别是专业人士可以转载,自己随时可以观阅.
其实我还有很多类型表格可以分享,希望大家关注我.我觉得一张表格代表一种专业.而制作这些表格我真的是呕心沥血.
以后慢慢的会给大家跟多惊喜.
谢谢一直支持我的粉丝.