PLC算法系列之数字低通滤波器(离散化方法:双线性变换)

本文介绍了PLC中数字低通滤波器的实现,重点讨论了双线性变换法,并提及了后向欧拉法。内容涵盖了滤波器算法的原理、PLC代码实现、FX3U PLC的应用,以及SMART PLC的PT1指令详细。还提到了PT1指令在PID仿真中的应用。
摘要由CSDN通过智能技术生成

低通滤波器 在信号处理专栏有后向欧拉法的详细介绍和源代码,请查看相应的文章,链接如下:

PLC信号处理系列之一阶低通(RC)滤波器算法_RXXW_Dor的博客-CSDN博客_rc滤波电路的优缺点 1、先看看RC滤波的优缺点 优点:采用数字滤波算法来实现动态的RC滤波,则能很好的克服模拟滤波器的缺点; 1、在模拟常数要求较大的场合这种算法显得更为实用; 2、对于周期干扰有良好的抑制作用, 3、比较节省RAM空间 缺点:不足之处是带来了相位滞后,导致灵敏度低;同时它不能滤除频率高于采样频率的二分之一(称为奈奎斯特频率)的干扰(例如采样频率为100Hz,则它不能滤除50Hz以上的干扰信号)对于高于奈奎斯特频率的干扰信号,应该采 https://blog.csdn.net/m0_46143730/article/details/123755877 关于后向 欧拉法 ,这里不再赘述,不清楚的可以自行搜索。这里我们主要讲下双线性变换法的离散化公式和PLC实现代码。

1、双线性变换法

2、后向欧拉法

后向欧拉法的PLC实现代码,专栏有很多系列文章分享,这里不再赘述。

3、卷绕库低通滤波器算法

按照公式编程时,需要注意运算优先级,括号不要丢(这点可能很多人会犯错)。

4、FX3U

5、完整FB代码

  1. (*双线性变换法一阶低通数字滤波器*)
  2. yk:=(E2.0*Smoothing-tCycle)/(E2.0*Smoothing+tCycle)*yk1+tCycle*(xk+xk1)/(E2.0*Smoothing+tCycle);
  3. xk1:=xk;
  4. yk1:=yk;

6、FB接口定义

  1. VAR_INPUT xk FLOAT (Single Precision)
  2. VAR_INPUT Smoothing FLOAT (Single Precision)
  3. VAR_INPUT tCycle FLOAT (Single Precision)
  4. VAR_OUTPUT yk FLOAT (Single Precision)
  5. VAR xk1 FLOAT (Single Precision)
  6. VAR yk1 FLOAT (Single Precision)

7、 信号与系统

PT1指令在PID仿真上的应用,可以参看下面的文章链接:

博途PLC PID仿真LSim_PT1库算法(一阶系统差分方程推导全过程)_RXXW_Dor的博客-CSDN博客_lsim_pt3 博途PLC的PID仿真可以参看下面这篇博客,这篇文章我们主要论坛仿真库LSim的算法由来。如何利用博途PLC PID_Compact 进行PID仿真(一阶系统)_RXXW_Dor的博客-CSDN博客博途PLC PID控制器 PID_Compact FB如何使用可以参看下面这篇文章,这里不再赘述。 https://blog.csdn.net/m0_46143730/article/details/126750307

8、SMART PLC低通滤波器指令PT1

9、PT1接口定义

10、PT1 STL代码

  1. SUBROUTINE_BLOCK PT1:SBR14
  2. TITLE=PT1功能块--双线性变换低通滤波器
  3. VAR_INPUT
  4. xk:REAL; // 输入信号 signal;
  5. tCycle:REAL; // 采样时间/中断程序执行时间 interruption time; ms
  6. smoothingTime:REAL; // 平滑时间 ms
  7. END_VAR
  8. VAR_IN_OUT
  9. xk1:REAL; // 上一采样时刻输入信号
  10. yk1:REAL; // 上一采样时刻输出信号
  11. END_VAR
  12. VAR_OUTPUT
  13. yk:REAL; // 滤波输出值
  14. END_VAR
  15. VAR
  16. Temp:REAL; // 2*smoothTime
  17. Temp1:REAL;
  18. END_VAR
  19. BEGIN
  20. Network 1
  21. // yk=((2*smoothTime-tCycle)*yk1 + tCycle*(xk+xk1))/(2*smoothTime+tCycle)
  22. LD SM0.0
  23. MOVR 2.0, LD24
  24. *R LD8, LD24
  25. MOVR LD24, AC0
  26. -R LD4, AC0
  27. *R LD16, AC0
  28. Network 2
  29. // tCycle*(xk+xk1)= AC2
  30. LD SM0.0
  31. MOVR LD0, AC1
  32. +R LD12, AC1
  33. MOVR LD4, AC2
  34. *R AC1, AC2
  35. Network 3
  36. // 2*smoothTime + tCycle =Temp1
  37. LD SM0.0
  38. MOVR AC0, AC3
  39. +R AC2, AC3
  40. MOVR LD24, LD28
  41. +R LD4, LD28
  42. MOVR AC3, LD20
  43. /R LD28, LD20
  44. Network 4
  45. // 更新各时刻离散采样值
  46. // yk1=yk;
  47. // xk1=xk;
  48. LD SM0.0
  49. MOVR LD0, LD12
  50. MOVR LD20, LD16
  51. END_SUBROUTINE_BLOCK

文章知识点与官方知识档案匹配,可进一步学习相关知识
算法技能树 首页 概览 65011 人正在系统学习中

举报

选择你想要举报的内容(必选)
  • 内容涉黄
  • 政治相关
  • 内容抄袭
  • 涉嫌广告
  • 内容侵权
  • 侮辱谩骂
  • 样式问题
  • 其他