工程类必看的VBA代码

发布时间 :2018-12-24

​​大家好

今天放送之前说过的工程控制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

 

 

以上

 

大家可以了解这一块,对大家做自动化程序有极大的帮助.

 

有点绕,不明白的地方可以评论留言,我有时间都会解答.

 

希望大家可以转发,特别是专业人士可以转载,自己随时可以观阅.

 

其实我还有很多类型表格可以分享,希望大家关注我.我觉得一张表格代表一种专业.而制作这些表格我真的是呕心沥血.

 

以后慢慢的会给大家跟多惊喜.

 

谢谢一直支持我的粉丝.

​​​​​

今日热门