Перейти к содержимому


Фотография

Библиотека ПИД-регулятора

иб лиотекаб

  • Авторизуйтесь для ответа в теме
Сообщений в теме: 7

#1 Оффлайн   Quant

Quant

    Свой человек

  • Пользователи
  • PipPipPipPipPipPipPip
  • 484 сообщений
  • Городinterface IQuant

Награды

     

Отправлено 03 Август 2016 - 15:37

Привет форумчане!

Для тех, кто не знает, что это за штука то такая,можете посмотреть 

https://ru.wikipedia...i/ПИД-регулятор

Прочитали/знаете?Идём дальше.

 

Зачем это?

Реакторы - яркий пример.Особенно из бигреакторсов. Можно достаточно легко поддержать его температуру и не сжигать лишнее топливо.Впрочем,можно найти ещё больше применений.

Где код?

http://pastebin.com/nTJvpax3

А как заставить его работать?

Тут всего три функции

 add(получение,выдача,коэффициенты kp,ki,kd,опционально минимум,максимум) == loop

 таблица loop:

   loop:execute(время с предыдущего запуска) - запускает ОДИН! раз цикл,обновляя значения

   loop:reset() сбрасывает накопленные значения

 А пример?

http://pastebin.com/85c7Axm2

P.S. Коэффициенты подобраны не верно.Появляются колебания.

 P.P.S Маленькая проблема с тегами


  • qwertyMAN это нравится

#2 Онлайн   qwertyMAN

qwertyMAN

    Свой человек

  • Пользователи
  • PipPipPipPipPipPipPip
  • 1 309 сообщений
  • ГородCity17

Награды

                          

Отправлено 03 Август 2016 - 15:53

А я помню в колледже проходил ПИД-регуляторы. Лайк за то, что напомнил приятные воспоминания.

#3 Оффлайн   Zer0Galaxy

Zer0Galaxy

    The Lord of the Pings

  • Пользователи
  • PipPipPipPipPipPipPip
  • 1 116 сообщений

Награды

4                                 

Отправлено 03 Август 2016 - 16:07

В функции loop.reset достаточно сбрасывать только интегратор loop.I. Переменная loop.D все равно пересчитывается на каждом такте регулирования независимо от своего предыдущего значения. А что такое loop.p0 вообще не понял. Она нигде не определяется. По идее где то должно быть

loop.p0=get

И как на счет зоны нечувствительности?

Неужели в майнкрафте есть объекты, для регулирования которыми требуется ПИД-регулятор?


Сообщение отредактировал Zer0Galaxy: 03 Август 2016 - 16:11


#4 Оффлайн   Quant

Quant

    Свой человек

  • Автор темы
  • Пользователи
  • PipPipPipPipPipPipPip
  • 484 сообщений
  • Городinterface IQuant

Награды

     

Отправлено 03 Август 2016 - 16:41

В функции loop.reset достаточно сбрасывать только интегратор loop.I. Переменная loop.D все равно пересчитывается на каждом такте регулирования независимо от своего предыдущего значения. А что такое loop.p0 вообще не понял. Она нигде не определяется. По идее где то должно быть

loop.p0=get

И как на счет зоны нечувствительности?

Неужели в майнкрафте есть объекты, для регулирования которыми требуется ПИД-регулятор?

Исправил.



#5 Оффлайн   LeshaInc

LeshaInc

    2B |~ 2B

  • Пользователи
  • PipPipPipPipPipPipPip
  • 1 174 сообщений
  • ГородЛуна

Награды

                 

Отправлено 03 Август 2016 - 17:01

Зачем оно нужно рядовому Васе Пупкину который вчера изучил луа и хочет программулек понаписывать? Объясните.



#6 Онлайн   qwertyMAN

qwertyMAN

    Свой человек

  • Пользователи
  • PipPipPipPipPipPipPip
  • 1 309 сообщений
  • ГородCity17

Награды

                          

Отправлено 03 Август 2016 - 17:08

Зачем оно нужно рядовому Васе Пупкину который вчера изучил луа и хочет программулек понаписывать? Объясните.


У рядового Васи Пупкина иконы ECS стоят на рабочем столе. И плакат "ГРАААФООН" на стене.
  • davial и Saintmare это нравится

#7 Оффлайн   eu_tomat

eu_tomat

    Свой человек

  • Пользователи
  • PipPipPipPipPipPipPip
  • 531 сообщений

Награды

                    

Отправлено 03 Август 2016 - 18:25

  • Не понимаю, зачем тратятся ресурсы на обратные вызовы get/set, если вместо вызова get можно передать параметр в функцию execute, а вместо вызова set вернуть из execute нужное значение. Должно получиться что-то типа:
    speed = speed + loop:execute(0.1,r-c)
    c = c + speed
    с избавлением от лишнего кода.
  • Не понимаю из примера, как управлять реактором. Какие показатели из реактора считываются, а какими параметрами реактор управляется.
  • Не понимаю из описания, как подбирать коэффициенты. Без этого код бесполезен.
  • Также есть мелкие ошибки, например, в строке local get=get() или if value>0 then speed=speed+math.min(value,0.1) else speed=speed+math.max(value,-0.3) end


#8 Оффлайн   Saintmare

Saintmare

    Свой человек

  • Пользователи
  • PipPipPipPipPipPipPip
  • 345 сообщений

Отправлено 04 Август 2016 - 07:52

Авчомсмысол для BigReactors? Там же просто кубик 3х3 собрал, положил слиток один, стержни запихал на 40% и тебе на неделю хватит, блин.

P.S.: теги "иб" и "лиотекаб" - топ!

Сообщение отредактировал Saintmare: 04 Август 2016 - 07:54





Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных


Яндекс.Метрика