MCGS触摸屏-PID_脚本实现 点击:229 | 回复:4



勇士-王者之师

    
  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 33回
  • 年度积分:0
  • 历史总积分:90
  • 注册:2004年11月11日
发表于:2023-03-18 10:49:52
楼主


PID_脚本实现.MCG

image.png


image.png


image.png


image.png


image.png

最后贴上脚本:


液位计算:

outputwater =sngOp/100


sngPv=sngPv+inputwater/100-outputwater 


if sngPv>100 then 

   sngPv=100

endif


if sngPv<=0 then 

   sngPv=0

endif


k1=1

if inputwater <=0 then k1=0


k2=1

if outputwater<=0 then k2=0


PID控制:

'* asngDataValue(0) = PV

   '* asngDataValue(1) = SV

   '* asngDataValue(2) = OP

   '* asngDataValue(3) = P

   '* asngDataValue(4) = I

   '* asngDataValue(5) = D


'   sngParP          = 250  '*  比例系数P

'   sngParI          = 50   '*  积分系数I

'   sngParD          = 5    '*  微分系数D

'   sngPvMin         = 0    '*  PV 值下限

'   sngPvMax         = 300  '*  PV 值上限

'   sngSvMin         = 0    '*  SV 值下限

'   sngSvMax         = 300  '*  SV 值上限

'   sngOpMin         = 0   '*  OP 值下限

'   sngOpMax         = 100 '*  OP 值上限

'   sngChangeMin     = 1   '*  死区范围

'   sngChangeMax     = 10  '*  调节范围

'   sngOutPutMax     = 80  '*  超调时输出

'   sngCtlDirection  = 1   '*  调节方向

'   sngControlT      = 100   '*  PID的调控周期,和设备的采集周期相同


'   Dim sngPVRange         '*  PV值的量程

'   Dim sngOutdx           '*  PID计算出的输出增加值

'


'   '*  确保控制周期不为0

   If sngControlT = 0 Then sngControlT = 1


'   '*  计算PV值的量程,并确保其不为0

   sngPVRange = sngPvMax - sngPvMin

   If sngPVRange <= 0 Then sngPVRange = 1


'   '*  把超调值由百分比转换成实际物理量

'   sngChangeMax = sngPVRange * sngChangeMax / 100


'* ======================================================================================

'   '*  PV值和SV值必须在设定的限值范围之内

'   If sngPv < sngPvMin Then sngPv = sngPvMin

'   If sngPv > sngPvMax Then sngPv = sngPvMax

'   If sngSv < sngSvMin Then sngSv = sngSvMin

'   If sngSv > sngSvMax Then sngSv = sngSvMax


   If sngPv < 0 Then sngPv = 0

   If sngPv > 300 Then sngPv = 300

   If sngSv < 0 Then sngSv = 0

   If sngSv > 300 Then sngSv = 300



'  * =================================================================================================

'  *  计算SV和PV值的差值,第一次计算时,取m_sngSvPvdx1、m_sngSvPvdx2值和m_sngSvPvdx相同


' m_sngSvPvdx    '*  本次调控时SV和PV值的差值

' m_sngSvPvdx1   '*  上次调控时SV和PV值的差值

' m_sngSvPvdx2   '*  调控过程中SV和PV值的差值的累计和


   m_sngSvPvdx = sngSv - sngPv


'设定m_sngSvPvdx1的初值为111111;标记是否第一次进行PID计算,防止m_sngSvPvdx和1m_sngSvPvdx2的值为0


   If m_sngSvPvdx1 = 111111 Then

     m_sngSvPvdx1 = m_sngSvPvdx

     m_sngSvPvdx2 = m_sngSvPvdx

   EndIf



'*  进行PID运算,sngParI=0 和 sngParI<>0的算法不一样


'sngControlT :调节周期,和设备的采集周期相同(单位为:秒)



   If sngParI <> 0 Then

      sngOutdx = sngParP * (m_sngSvPvdx - m_sngSvPvdx1 + m_sngSvPvdx * sngControlT / sngParI + (m_sngSvPvdx - 2 * m_sngSvPvdx1 + m_sngSvPvdx2) * sngParD / sngControlT)

   Else

      sngOutdx = sngParP * (m_sngSvPvdx - m_sngSvPvdx1 + (m_sngSvPvdx - 2 * m_sngSvPvdx1 + m_sngSvPvdx2) * sngParD / sngControlT)

   EndIf


   m_sngSvPvdx2 = m_sngSvPvdx1

   m_sngSvPvdx1 = m_sngSvPvdx


   '*  处在死区范围,输出值保持不变

   If !Abs(m_sngSvPvdx) < !Abs(sngChangeMin) Then sngOutdx = 0


   '*  当PID控制的调节方向方向不一样时,输出值的处理方法不一致

   If sngCtlDirection = 1 Then

     sngOP = sngOP + sngOutdx


      '*  正向控制时的超调处理

      If !Abs(m_sngSvPvdx) >= sngChangeMax And sngChangeMax > 0 Then

         If m_sngSvPvdx > 0 Then sngOP = sngOutPutMax

      EndIf

   Else

      sngOP = sngOP - sngOutdx


      '*  反向控制时的超调处理

      If !Abs(m_sngSvPvdx) >= sngChangeMax And sngChangeMax > 0 Then

         If m_sngSvPvdx < 0 Then sngOP = sngOutPutMax

      EndIf

   EndIf


   '*  OP值必须在设定的限值范围之内

   'If sngOP < sngOpMin Then sngOP = sngOpMin

   'If sngOP > sngOpMax Then sngOP = sngOpMax


   If sngOP < 0 Then sngOP = 0

   If sngOP > 100 Then sngOP = 100


正在下载,请等待……
下载附件需0积分!




徐丫头

  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 40回
  • 年度积分:130
  • 历史总积分:130
  • 注册:2023年1月30日
发表于:2023-03-20 11:24:23
1楼

谢谢

linhai0215

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 32回
  • 年度积分:0
  • 历史总积分:3
  • 注册:2008年10月05日
发表于:2023-03-20 21:10:39
2楼
学习领孜

huoshi

  • 精华:0帖
  • 求助:22帖
  • 帖子:345帖 | 2550回
  • 年度积分:236
  • 历史总积分:22864
  • 注册:2020年3月27日
发表于:2023-03-21 07:43:11
3楼

谢谢老师分享学习学习

chenrenfu

  • 精华:0帖
  • 求助:0帖
  • 帖子:2帖 | 643回
  • 年度积分:72
  • 历史总积分:176
  • 注册:2011年9月08日
发表于:2023-03-21 08:58:44
4楼

感谢分享!


热门招聘
相关主题

官方公众号

智造工程师