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


Фотография

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

иб лиотекаб

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

#1 Оффлайн   Quant

Quant
  • Пользователи
  • Сообщений: 537
  • Уровень сигнала: 0,01%
  • В игре: 0 час. 4 мин.
  • Город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
  • Пользователи
  • Сообщений: 1 397
  • Уровень сигнала: 0,17%
  • В игре: 1 час. 3 мин.
  • ГородCity17

Награды

                             

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

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

#3 Оффлайн   Zer0Galaxy

Zer0Galaxy
  • Гуру
  • Сообщений: 1 210
  • Уровень сигнала: 0%
  • В игре: 0 час. 0 мин.

Награды

5                                 

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

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

loop.p0=get

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

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


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


#4 Оффлайн   Quant

Quant
  • Автор темы
  • Пользователи
  • Сообщений: 537
  • Уровень сигнала: 0,01%
  • В игре: 0 час. 4 мин.
  • Городinterface IQuant

Награды

     

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

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

loop.p0=get

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

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

Исправил.



#5 Оффлайн   LeshaInc

LeshaInc

    Растоман

  • Пользователи
  • Сообщений: 1 196
  • Уровень сигнала: 9,42%
  • В игре: 57 час. 44 мин.
  • ГородЛуна

Награды

                 

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

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



#6 Оффлайн   qwertyMAN

qwertyMAN
  • Пользователи
  • Сообщений: 1 397
  • Уровень сигнала: 0,17%
  • В игре: 1 час. 3 мин.
  • ГородCity17

Награды

                             

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

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


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

#7 Оффлайн   eu_tomat

eu_tomat
  • Хранители Кода
  • Сообщений: 789
  • Уровень сигнала: 0,05%
  • В игре: 0 час. 19 мин.

Награды

                          

Отправлено 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
  • Пользователи
  • Сообщений: 430
  • Уровень сигнала: 49,99%
  • В игре: 306 час. 24 мин.

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

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

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

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





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

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