VB写的PID控制源码公布

Private Function PIDcalc(SV As Integer,PV As Integer) As Double
Dim SVtemp As Double,PVtemp As Double
Kc = CDbl(Kcin / 10#)
Ti = CDbl(Tiin / 10#)
Td = CDbl(Tdin / 10#)
Ts = CDbl(Tsin / 10#)
Kp = Kc
Ki = Kc * Ts / Ti
Kd = Kc * Td / Ts

SVn_last = SVn_Now
SVtemp = CDbl(SV / 32000&)
If SVtemp > 1# Then SVtemp = 1#
If SVtemp < 0# Then SVtemp = 0#
SVn_Now = SVtemp

PVn_last = PVn_Now
PVtemp = CDbl(PV / 32000&)
If PVtemp > 1# Then PVtemp = 1#
If PVtemp < 0# Then PVtemp = 0#
PVn_Now = PVtemp
PVn_Now = CDbl(PV / 32000&)

En_last = En_Now
En_Now = SVn_Now - PVn_Now

MPn = Kp * En_Now


MIn = Ki * En_Now + MXn_last
MXn_last = MIn

'MDn = Kd * (En_Now - En_last)
MDn = Kd * (PVn_last - PVn_Now)

Mn = MPn + MIn + MDn
If Mn > 1# Then MXn_last = 1# - (MPn + MDn)
If Mn < 0# Then MXn_last = 0# - (MPn + MDn)

If Mn > 1# Then Mn = 1#
If Mn < 0# Then Mn = 0#

PIDcalc = Mn

End Function

相关文章

Format[$] ( expr [ , fmt ] ) format 返回变体型 format$ 强...
VB6或者ASP 格式化时间为 MM/dd/yyyy 格式,竟然没有好的办...
在项目中添加如下代码:新建窗口来显示异常信息。 Namespace...
转了这一篇文章,原来一直想用C#做k3的插件开发,vb没有C#用...
Sub 分列() ‘以空格为分隔符,连续空格只算1个。对所选...
  窗体代码 1 Private Sub Text1_OLEDragDrop(Data As Dat...