当前位置: 首页 > news >正文

FB仿真模拟PID曲线数据

    为了能直观的理解PID的参数调整与曲线数据的变化关系,使用FB写了一个模拟PID曲线数据的程序。

PID类如下:

Type PIDController
Private : kp_ As Double               '//比例增益 ki_ As Double               '//积分增益 kd_ As Double               '//微分增益         integral_ As Double = 0.0   '// 积分项累计值    lastError_ As Double = 0.0  '// 上一个误差    setPoint_ As Double         '// 设定点      
Public:        Declare Constructor(ByVal kp As Double, ByVal ki As Double, ByVal kd As Double, ByVal setPoint As Double)   Declare Function Calculate(ByVal currentValue As Double) As Double Declare Sub setSetPoint(ByVal setPoint As Double)      
End TypeConstructor PIDController(ByVal kp As Double,ByVal ki As Double,ByVal kd As Double, ByVal setPoint As Double)kp_ = kpki_ = kikd_ = kdsetPoint_ = setPoint
End ConstructorFunction PIDController.Calculate(ByVal currentValue As Double) As Double Dim dError As Double = setPoint_ - currentValue         '// 计算误差 integral_ += dError                                     '// 累积误差Dim derivative As Double = dError - lastError_          '// 计算微分项 lastError_ = dErrorReturn Kp_ * dError + Ki_ * integral_ + Kd_ * derivative  '// 计算控制量
End FunctionSub PIDController.setSetPoint(ByVal setPoint As Double)setPoint_ = setPoint
End Sub

生成数据代码如下:

Dim setVal As Double = Val(Text4.Text)
Dim pid As PIDController = PIDController(Val(Text1.Text),Val(Text2.Text),Val(Text3.Text),setVal)    '// 初始化PID控制器    
Dim currentValue As Double = 0.0                                '// 当前被控对象的状态 For i As Long = 0 To 1000Dim controlInput As Double = pid.calculate(currentValue)    '// 计算控制输入'// 这里可以将controlInput应用到被控对象上,进行实际的调控动作'// 例如: currentValue += controlInput;currentValue += controlInput / setVal '// 模拟被控对象状态变化         'Print "Time step ";i;"; Current value ";currentValue
Next

生成程序后,调整Kp数值,可以看到曲线数据:

调整Ki数值,可以看到曲线数据:

调整Kd数值,可以看到曲线数据:

完整工程链接如下:

VisualFreeBASIC资料: VFB的相关资料 - Gitee.com

http://www.lryc.cn/news/442984.html

相关文章:

  • 【变化检测】基于ChangeStar建筑物(LEVIR-CD)变化检测实战及ONNX推理
  • kafka动态认证 自定义认证 安全认证-亲测成功
  • 航空航司reese84逆向
  • 【HTTP】请求“报头”,Referer 和 Cookie
  • 使用sqoop报错
  • 一个简单的基于C语言的HTTP代理服务器的案例
  • Linux学习-Ansible(二)
  • [SDX35]SDX35硬件使用512MB内存,实际只初始化256MB问题分析及解决方案
  • S3C2440中断
  • 编译成功!QT/6.7.2/Creator编译Windows64 MySQL驱动(MinGW版)
  • SQLyou基础用法讲解
  • Can‘t get Kerberos realm
  • [python]从零开始的PySide安装配置教程
  • LeetCode[中等] 74.搜索二维矩阵
  • overleaf如何下载论文的pdf
  • Java 每日一刊(第13期):this super static
  • 关于一些Spring的配置的作用
  • 利用Python与Ansible实现高效网络配置管理
  • JDBC技术在不同数据库系统中的兼容性及Java数据库交互技术概览
  • 双击热备 Electron网页客户端
  • 数据中台系统产品原型RP原型Axure高保真交互原型 源文件分享
  • 论文阅读笔记:Sapiens: Foundation for Human Vision Models
  • 【学术会议:中国厦门,为全球的计算机科学与管理科技研究者提供一个国际交流平台】第五届计算机科学与管理科技国际学术会议(ICCSMT 2024)
  • RK3588/RK3588s运行yolov8达到27ms
  • 2024年华为杯中国研究生数学建模竞赛E题(高速公路应急车道紧急启用模型)思路
  • np.random.seed设完又想用随机seed怎么办
  • [数据结构]动态顺序表的实现与应用
  • Invalid Private Key, Not a valid string or uint8Array
  • 【Text2SQL】PET-SQL:在Spider基准测试中取得了SOTA
  • python-3n+1数链/233