VB 增量式 PID 算法的一个问题

Option Explicit
Dim EK1 As Single, EK2 As Single
Dim U As Single
Dim Uk As Single, Uk1 As Single, A As Single, B As Single, C As Single, Ek As Single
Dim Ti As Integer, Td As Integer, Kp As Integer
Dim SP As Single, PV As Single
Private Sub Command1_Click()
Timer1.Enabled = True
End Sub

Private Sub Command2_Click()
End
End Sub

Private Sub Timer1_Timer()
Ti = Val(Text1) '读取积分时间值
Td = Val(Text2) '读取微分时间值
Kp = Val(Text3) '读取比例值
SP = Val(Text4) '设定值
Text5.Text = Val(VScroll1.Value)
PV = Val(Text5) '模拟的反馈值
If Ti = 0 Then
  A = Kp * (1 + Td)
Else
  A = Kp * (1 + 1 / Ti + Td)
  B = Kp * (1 + 2 * Td)
  C = Kp * Td
  Ek = SP - PV
  Uk = A * Ek - B * EK1 + C * EK2
  Text6.Text = Uk  '输出显示
End If
  EK2 = EK1
  EK1 = Ek
End Sub

求助各位版主,这是我编写的PID控制程序,EK表示当前的测量误差,EK1是上次测量误差,EK2是上上次误差,然后PID算法根据这三次误差输出控制量UK,正确的功能应该是根据系统设定值和实际输出值求得Ek = SP - PV,然后将这个的EK值传递给EK1,下一次测量值编程Ek,以此类推!我现在的问题是,无法将当前的测量误差传递给上一次,按着我编的程序,这三次误差实际上都等于当前的误差,求各位版主看一下问题出在哪儿!
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
模糊PID控制算法是一种结合了模糊控制和PID控制的算法,它可以更好地应对非线性、时变、不确定性等问题。下面是VB语言实现模糊PID控制算法的步骤: 1. 定义输入、输出变量和模糊集合: ``` Dim e As Double '偏差 Dim de As Double '偏差变化量 Dim u As Double '控制量 Dim e_set As FuzzySet '偏差模糊集合 Dim de_set As FuzzySet '偏差变化量模糊集合 Dim u_set As FuzzySet '控制量模糊集合 ``` 2. 初始化模糊集合: ``` Set e_set = New FuzzySet("偏差", -10, 10, 5) Set de_set = New FuzzySet("偏差变化量", -10, 10, 5) Set u_set = New FuzzySet("控制量", -1, 1, 5) ``` 3. 定义模糊规则: ``` Dim rules(4, 4) As Double '模糊规则矩阵 rules(0, 0) = 1.0 '偏差NB,偏差变化量NB,则控制量NB rules(0, 1) = 0.8 '偏差NB,偏差变化量NM,则控制量NM rules(0, 2) = 0.6 '偏差NB,偏差变化量NS,则控制量NS rules(0, 3) = 0.4 '偏差NB,偏差变化量ZE,则控制量ZE rules(1, 0) = 0.8 '偏差NM,偏差变化量NB,则控制量NM rules(1, 1) = 0.6 '偏差NM,偏差变化量NM,则控制量NS rules(1, 2) = 0.4 '偏差NM,偏差变化量NS,则控制量ZE rules(1, 3) = 0.2 '偏差NM,偏差变化量ZE,则控制量PS rules(2, 0) = 0.6 '偏差NS,偏差变化量NB,则控制量NS rules(2, 1) = 0.4 '偏差NS,偏差变化量NM,则控制量ZE rules(2, 2) = 0.2 '偏差NS,偏差变化量NS,则控制量PS rules(2, 3) = 0.0 '偏差NS,偏差变化量ZE,则控制量PM rules(3, 0) = 0.4 '偏差ZE,偏差变化量NB,则控制量ZE rules(3, 1) = 0.2 '偏差ZE,偏差变化量NM,则控制量PS rules(3, 2) = 0.0 '偏差ZE,偏差变化量NS,则控制量PM rules(3, 3) = -0.2 '偏差ZE,偏差变化量ZE,则控制量NM ``` 4. 定义模糊PID控制算法: ``` Sub FuzzyPIDControl() '输入偏差和偏差变化量 e = InputBox("请输入偏差:", "偏差") de = InputBox("请输入偏差变化量:", "偏差变化量") '对偏差和偏差变化量进行模糊化 e_set.Fuzzification(e) de_set.Fuzzification(de) '计算模糊推理结果 Dim result As Double '模糊推理结果 Dim total_weight As Double '规则权重之和 For i = 0 To e_set.Count - 1 For j = 0 To de_set.Count - 1 Dim weight As Double '规则权重 weight = e_set.Item(i).Membership * de_set.Item(j).Membership total_weight = total_weight + weight result = result + weight * rules(i, j) Next Next result = result / total_weight '对模糊推理结果进行去模糊化,得到控制量 u_set.Defuzzification(result) u = u_set.CrispValue '输出控制量 MsgBox "控制量为:" & u End Sub ``` 以上就是用VB语言实现模糊PID控制算法的步骤。注意,上述代码仅供参考,具体实现应根据实际需求进行调整和优化。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值