Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local r={}
- r.add=function(get,set,kp,ki,kd,min,max)
- --начало создания
- local loop={}
- loop.get=get
- loop.set=set
- loop.kp=kp
- loop.ki=ki
- loop.kd=kd
- --начальные значения
- loop.reset=function(loop)
- loop.p0=0
- loop.I=0
- loop.D=0
- end
- loop:reset()
- --функции
- loop.execute=function(loop,interval)
- local get=get()
- if interval>0 then --на всякий случай(позволяет пихать значение в функцию без предварительной обработки)
- loop.I=loop.I+get*interval --интегральная часть
- loop.D=(get-loop.p0)/interval --дифференциальная часть
- loop.p0=get
- end
- local sum=loop.kp*get+loop.ki*loop.I+loop.kd*loop.D
- if min then sum=math.max(min,sum) end
- if max then sum=math.min(max,sum) end
- set(sum)
- end
- return loop
- end
- return r
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement