PDA

Просмотр полной версии : Специальные ,функционально законченные макросы



rovki
31.07.2012, 17:51
Что бы было легче искать нужный макрос предлагаю открыть новую тему.
В этой теме желательно размещать специальные ,функционально законченные макросы ,которые могут пригодится другим ,с кратким описанием из разных областей применения - управление насосами ,отопление ,связь,наполнение сосудов ,...много чего узко специального ,но широко применяемого .:rolleyes:
Начну со старенького ,но проверенного макроса -телефон
Позволяет дозваниваться с ПР на телефоны местные и межгород .есть входа пуск ,код города(или сотового оператора) ,номер телефона .Схемы подключения можно найти на форуме в областях применения ПР:)

rovki
31.07.2012, 19:51
макрос АВАРИЯ (анализатор событий).8 входов,выход -десятичный код аварии,выход Общая авария (с маской,если нужно) ,выход Мерцающая авария,Выход число-импульсный ,показывает на каком входе авария количеством вспышек ,с приоритетом .Автоматический сброс аварий на выходе при отсутствии их на входе ,через заданное время.Может применяться в различных системах управления ,выход макроса может быть энергонезависим (целочисленный)
Аналогичный макрос - Анализатора событий (аварийных состояний) ,ЗАПОМИНАЕТ
четыре первых аварийных ситуации .может быть использован в проекте ЩУК в том числе.Имеется выход сигнализирующий об наличии хотя бы одной аварии и пульсирующий выход для индикации.На целочисленные выходы макроса могут быть "повешены" сетевые переменные для дистанционного контроля и анализа.Макрос позволяет во времени наблюдать развитие аварийной ситуации (последовательность). Отсутствие АВАРИИ -все нули на входе.Внутри макроса есть задержка на изменение состояния входов

rovki
31.07.2012, 19:56
макрос блокировки работы ПР с часами на 8 входов\выходов ,где внутри макроса задается время работы (дни, месяц),остальное время -молчим (нули).Если нужно на макрос вешаем замок

rovki
01.08.2012, 19:19
Если нет часов ,а есть энергонезависимая память ,то
макрос блокировки работы ПР будет такой-считает дни работы ПР (24часа-день) .если Пр работает по 8часов(например) ,то время работы увеличивается(дни) .Можно сделать таймер внутри с меньшим периодом (минуты) ,тогда время работы будет подсчитываться точней ,если нужно.

rovki
01.08.2012, 20:42
И конечно же ,любимый мой макрос приемник и передатчик для связи нескольких ПР ,при выполнении общего алгоритма управления (расширение входов ПР) .Использовать желательно транзисторные выходы ,но и релейные пойдут ,макс частота 5гц.Макс длительность посылки микропакета (16бит)-3,2сек .передача информации происходит при смене информации на входе передатчика ,что бы беречь контакты реле..:rolleyes:В перспективе (транзисторные выходы) частоту передачи можно поднять ,а время передачи свести к 1сек.

rovki
15.08.2012, 18:24
Интегральный регулятор с ШИМ.
Т-время интегрирования ,мс
F-частота ШИМ ,сек.
I-вход,если на нем 1 ,то мощность(длительность импульса) прибавляется (нарастает плавно) ,если "0" ,то падает .

Василий Кашуба
07.09.2012, 22:58
ООО "КИП-Сервис", г.Краснодар выпускает "Шкаф общекотельной автоматики СУ-0-1.1. Всем хорош шкаф, но не умеет управлять тремя насосами, а программу зашитую в ПЛК изготовитель не предоставляет.
Предлагаю своё решение этого вопроса.

rovki
08.09.2012, 00:01
Василий ,а какой именно макрос .Может все же такие проекты выкладывать в областях применения ПР или нужно 3 макроса засунуть в один .

Василий Кашуба
08.09.2012, 18:20
Василий ,а какой именно макрос .Может все же такие проекты выкладывать в областях применения ПР или нужно 3 макроса засунуть в один .

Если эти макросы объединить, они потеряют свою универсальность.

rovki
08.09.2012, 20:58
Если эти макросы объединить, они потеряют свою универсальность.
Так тут вроде тема о специализированных макросах (функционально законченных):) .А если это проект на базе универсальных макросов ,то тем более ему место в областях применения ПР:rolleyes: ;)

rovki
24.10.2014, 22:30
Подниму тему

макрос для управления модулирующим клапаном зад- задание, ос - обратная связь, сб- сброс управляющего сигнала

14914

Алексей ПМ
01.12.2014, 03:46
макрос АВАРИЯ (анализатор событий).8 входов,выход -десятичный код аварии,выход Общая авария (с маской,если нужно) ,выход Мерцающая авария,Выход число-импульсный ,показывает на каком входе авария количеством вспышек ,с приоритетом .Автоматический сброс аварий на выходе при отсутствии их на входе ,через заданное время.Может применяться в различных системах управления ,выход макроса может быть энергонезависим (целочисленный)

мой вариант, на совершенство не претендую, но по размеру гораздо меньше.
вход 1 - постоянное свечение.
входы 2-6 - кол-во вспышек равно номеру входа.
есть приоритет: младший 6, старший 1. т.е. если авария на 5,4 и 1 - то индикация аварии только по 1, при снятии сигнала с 1 входа - 4, и только потом 5.

(делался из желания сократить количество ламп и соответственно сверления отверстий для них в двери щита :))

Сергей0308
02.09.2015, 15:02
По совету rovki выкладываю макрос в более подходящей теме, хотя на "специальность" он не претендует! Спасибо rovki подсказал как его правильно обозвать, и так стробируемый сумматор вещественных значений:
вход I1 - сброс в "0" по переднему фронту импульса,
вход I2 - стробирующий импульс, также по переднему фронту,
вход I3 - аналоговый вход значения, на которое по каждому стробирующему импульсу будет увеличено значение на выходе Q1.

Сергей0308
30.09.2015, 23:13
Решил выложить ещё один макрос, чтобы было понятней как применить мой стробируемый сумматор, например так: вот макрос высчитывает среднее арифметическое из 1000 значений, работает так, вход опрашивается 100 раз в секунду, в течении 10 секунд суммирует значения, делит на 1000 и с периодом обновления 10 секунд, высчитанное значение появляется на выходе!
20196

Сергей0308
04.10.2015, 21:12
Ещё макрос:
20254
Находит минимальное(Min) и максимальное(Max) значения на входе(In) за заданный период измерения(Pизм), задаётся в секундах в диапазоне: 0,002-131,07 секунд(минимальный шаг - 2 мс), высчитывает среднее арифметическое(Среднее) между минимальным и максимальным значением и среднее арифметическое за период измерения(СреднееP), вход опрашивается 500 раз в секунду, суммируются все значения за период измерения и делятся на количество измерений!
20255
Период обновления значений на выходах равно периоду измерений!
Макрос в проекте:

Павел Братковский
08.10.2015, 20:14
Сергей0308, спасибо за макрос, я делал нечто подобное, единственное что в моем на выходе значение энергонезависимое, а в вашем это возможно реализовать?

мой макрос 20323....

боги сайта, взываю к вам, сделайте что б нормально файлы xxx-XX.tpl заливать можно было. спасибо

Сергей0308
08.10.2015, 21:23
Сергей0308, спасибо за макрос, я делал нечто подобное, единственное что в моем на выходе значение энергонезависимое, а в вашем это возможно реализовать?

мой макрос 20323....

боги сайта, взываю к вам, сделайте что б нормально файлы xxx-XX.tpl заливать можно было. спасибо

Очень рад что Вам пригодилось! Насколько мне известно, сетевые переменные являются энергонезависимыми, если так, то достаточно выход привязать к сетевой переменной чтобы значение сохранялось при выключении питания прибора! И, если не ошибаюсь, rovki кучу примеров выкладывал как энергонезависимость сделать, не вижу смысла повторяться! В Вашем счётчике не нашёл ни одного энергонезависимого элемента, не пойму на каком присосе держится энергонезависимость? Разобрался, у Вас так и сделано, выхода привязаны к энергонезависимым переменным!

Сергей0308
08.10.2015, 23:33
Я это вижу так:
20324

Даже проще стало!!!

Василий Кашуба
09.10.2015, 21:01
Я это вижу так:
20324

Даже проще стало!!!
Продолжаете бэкапить?

Сергей0308
10.10.2015, 09:24
Продолжаете бэкапить?

Так же просили энергонезависимость! Сделал, выложил, просто мне не понятно, что тут может Вас раздражать?
Может со мной что не так, я например видя недостатки программы всегда её совершенствую, хотя старая прекрасно справляется с работой! И это лично моё мнение считаю ,что предела совершенства нельзя достичь!

Василий Кашуба
10.10.2015, 18:41
Так же просили энергонезависимость! Сделал, выложил, просто мне не понятно, что тут может Вас раздражать?
Может со мной что не так, я например видя недостатки программы всегда её совершенствую, хотя старая прекрасно справляется с работой! И это лично моё мнение считаю ,что предела совершенства нельзя достичь!
Но это не значит, что надо засорять форум бэкапом. Выкладывайте только тогда, когда будете уверены, что сделали совершенный продукт.

Алексей Геннадьевич
10.10.2015, 19:04
Выкладывайте только тогда, когда будете уверены, что сделали совершенный продукт.
Оцените. ПИД-регулятор с включением ограничения при входе в диапазон.

Василий Кашуба
10.10.2015, 22:35
Оцените. ПИД-регулятор с включением ограничения при входе в диапазон.
Как должен работать этот макрос? 20349

Сергей0308
10.10.2015, 23:07
Но это не значит, что надо засорять форум бэкапом. Выкладывайте только тогда, когда будете уверены, что сделали совершенный продукт.

Вам видимо не докажешь, что "энергонезависимость" когда-то нужна, а когда-то противопоказана, всё зависит от задачи!
Насчёт совершенства, если я Вас правильно понял, предлагаете закрыть форум?

Алексей Геннадьевич
11.10.2015, 10:49
Как должен работать этот макрос? 20349
Когда функция - (в данном случае разница между уставкой и реальным значением температуры) становится меньше "точки входа в диапазон" применяется ограничение до тех пор, пока функция не станет меньше величины ограничения - регулятор переходит в рабочий режим. Ограничение выставляется в 2-3 раза больше чем колебания температуры в установившемся режиме работы регулятора.
Величину ограничения выставляем такой, чтобы можно было придушить вылет вверх по температуре с помощью дифференциальной составляющей найденной в установившемся режиме работы PID-регулятора.
Сам регулятор допускает канонiчную настройку по методу Циглера-Никольса с установкой интегральной и дифференциальной составляющей в ноль.
20352

Павел Братковский
11.10.2015, 19:27
методу Циглера-Никольса

об этом простыми словами можете......

Павел Братковский
11.10.2015, 19:33
Сергей0308 у вас макрос сумматор не запомнит состояния, после потери питания, меня интересует именно он....

Алексей Геннадьевич
11.10.2015, 19:39
об этом простыми словами можете......

Этим методом хорошо настраивать регуляторы на обьектах имеющих колебания с периодом от десятков секунд до нескольких минут.




Работает он не для любой системы и результаты получаются не самыми оптимальными. Но, зато, метод очень простой и годится для базовой настройки регулятора в большинстве систем.

Суть метода состоит в следующем:

1. Выставляем все коэффициенты (Kp, Ki, Kd) в 0.
2. Начинаем постепенно увеличивать значение Kp и следим за реакцией системы. Нам нужно добиться, чтобы в системе начались устойчивые колебания (вызванные перерегулированием). Увеличиваем Kp, пока колебания системы не стабилизируются (перестанут затухать).
3. Запоминаем текущее значение Kp (обозначим его Ku) и замеряем период колебаний системы (Tu).

4. Теперь используем полученные значения Ku и Tu для расчета всех параметров ПИД регулятора по формулам:

Kp = 0.6 * Ku
Ki = 2 * Kp / Tu
Kd = Kp * Tu / 8

5. Для дискретных регуляторов нужно еще учесть период дискретизации – T ( умножить на Ki та Т, разделить Kd на Т).
P.S. В моём ПИДе kP нужно устанавливать со значением больше 0.

Сергей0308
11.10.2015, 20:56
Сергей0308 у вас макрос сумматор не запомнит состояния, после потери питания, меня интересует именно он....

Абсолютно аналогично:
20361
Обратную связь пришлось убрать, начинает глючить в симуляторе! Раньше, вроде, без задержки "не прокатывало", сейчас прекрасно работает!
Макрос в проекте:

Сергей0308
22.10.2015, 20:03
Функция, преобразователь типа данных из INT16 в FLOAT! Чтобы сразу не заругали скажу, что в ОЛ такой нет.
20519
Макрос в проекте, там есть и обратная функция!

Василий Кашуба
23.10.2015, 15:26
Функция, преобразователь типа данных из INT16 в FLOAT! Чтобы сразу не заругали скажу, что в ОЛ такой нет.
20519
Макрос в проекте, там есть и обратная функция!
Так и должно быть? 20528

Сергей0308
23.10.2015, 17:33
Так и должно быть? 20528

На вход подаются коды чисел в WORD в диапазоне 0 - 65535! И макросы нужны когда вы по сети отрицательные значения передаёте в INTе на ПР или из ПР! Например код 65535 соответствует в INTе числу "-1"! А число "-7", как на Вашей картинке, имеет код 65529!
20531
https://ru.wikipedia.org/wiki/%D0%A6%D0%B5%D0%BB%D0%BE%D0%B5_(%D1%82%D0%B8%D0%BF _%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85)#.D0.A6.D0.B 5.D0.BB.D1.8B.D0.B5_.D1.81.D0.BE_.D0.B7.D0.BD.D0.B 0.D0.BA.D0.BE.D0.BC
20533

abursikov
31.10.2015, 22:06
Добрый вечер! А не могли бы вы помочь в в ваш макрос АВАРИЯ внести изменения, добавить вход сброса аварии, естественно за счет уменьшения входов аварий. Сброс нужен после прочтения для повторного запуска оборудования. Спасибо! Мой email:abrsikov@gmail.com

stesel
29.02.2016, 04:56
Оцените. ПИД-регулятор с включением ограничения при входе в диапазон.
Не работает у Вас интегральное звено. В принципе не нашел ни чего вменяемого для ПР200, пришлось свой регулятор лепить.
В симуляторе проверил, будем пробовать на деле, на ПР200. Жаль что для отладки можно только вывод на дисплей использовать, о результатах отпишусь.
Описание:
УНИВЕРСАЛЬНЫЙ ПИД - РЕГУЛЯТОР.
Для работы необходимо подать на вход Sync тактовые импульсы, задать ограничение выхода (диапазон работы регулятора), настроить коэффициенты Kp, Ki, Kd и установить "1" на входе Enable.
Особенности:
1. Изменяя частоту тактовых импульсов оптимизируется под процессы любой длительности.
2. Установив коэффициенты Kp, Ki, Kd в "0" можно исключить соответствующую часть регулятора из процесса превратив его в П-, ПИ-, ПД- ...
3. Накопление интегральной части ограничено значениями Min и Max, теми же что и выход регулятора.
4. Коэффициенты и выход регулятора целочисленные (для удобства).
5. При вЫключении входа Enable сбрасываются все переменные и накопленная интегральная составляющая (типа сброс).
https://www.dropbox.com/s/9m3lff9kcf8vp50/Uni_PID.tpl?dl=0

PS: Пока буду прикручивать через реле, но потом потребуются аналоговые выходы. Кто подскажет как с аналоговым выходом у ПР200 работать, какой диапазон значений на подавать?

rovki
29.02.2016, 07:41
0..........1

Алексей Геннадьевич
29.02.2016, 09:33
Не работает у Вас интегральное звено. В принципе не нашел ни чего вменяемого для ПР200, пришлось свой регулятор лепить.
В симуляторе проверил, будем пробовать на деле, на ПР200. Жаль что для отладки можно только вывод на дисплей использовать, о результатах отпишусь.

Начальная версия.
Вот окончательная, с рабочим интегральным звеном.

На форум можете положить?
.OWL нормально к сообщению прикрепляется. TPL увы, нет.


https://www.dropbox.com/s/9m3lff9kcf8vp50/Uni_PID.tpl?dl=0
PS: Пока буду прикручивать через реле, но потом потребуются аналоговые выходы. Кто подскажет как с аналоговым выходом у ПР200 работать, какой диапазон значений на подавать?
0-1 диапазон сигнала на выход ПР.

Алексей Геннадьевич
29.02.2016, 11:09
stesel Вы c интегральной составляющей также наступили на те грабли, на которых я отплясывал. :( (пока не перечитал заново раздел "интегрирование" в справочнике по инженерной математике ).
Интегральная составляющая накапливается в течение довольно длительного времени, 1 периода тактового сигнала недостаточно.
Интегральная составляющая - разность dt/dt1 высчитанная "скользящим окном" за относительно большой промежуток времени, (в своём регуляторе делал накопление за 1,5-3сек).
Ваш интегратор
22895
Мой интегратор
22896

Малышев Олег
29.02.2016, 11:45
Практически Циглер-Никельс хорошо работает на тормозных системах - большие печки(не все), Вентиляшки.
На быстрых лучше Тирес-Любен. Горелки и маленькие печьки.

stesel
29.02.2016, 12:22
stesel Вы c интегральной составляющей также наступили на те грабли, на которых я отплясывал. :( (пока не перечитал заново раздел "интегрирование" в справочнике по инженерной математике ).
Интегральная составляющая накапливается в течение довольно длительного времени, 1 периода тактового сигнала недостаточно.
Интегральная составляющая - разность dt/dt1 высчитанная "скользящим окном" за относительно большой промежуток времени, (в своём регуляторе делал накопление за 1,5-3сек).

Смотрите внимательно, накапливается бесконечно долго. Формула I(t) = I(t-1) + Ki * e (t) предусматривает предыдущий результат собственного вычисления. Проверить просто: ставите Kp = 0, Kd=0, Ki>0 соответственно играете значениями уставки и датчика получает результат K(p) будет постоянно увеличиваться или уменьшаться если есть ошибка и остановится на каком-либо значении, если ошибка будет равна нулю (уставка и датчик будут одинаковы). То есть I составляющая как положено будет стремиться свести к нулю рассогласование (ошибку) регулирования.

PS: Алексей Геннадьевич подскажите пожалуйста: как Вы сделали входные переменные (константы) для макроса, те что в параметрах макроса отображаются как kD_mul, SP_mul, kI_mul?

аскар
29.02.2016, 12:51
Начальная версия.
Вот окончательная, с рабочим интегральным звеном.
Вот бы к вашим ПИД еще и автонастройку
кстати связь с ПК при работе Вашего ПИД тоже пропадает

Алексей Геннадьевич
29.02.2016, 13:20
Смотрите внимательно, накапливается бесконечно долго. Формула I(t) = I(t-1) + Ki * e (t) предусматривает предыдущий результат собственного вычисления. Проверить просто: ставите Kp = 0, Kd=0, Ki>0 соответственно играете значениями уставки и датчика получает результат K(p) будет постоянно увеличиваться или уменьшаться если есть ошибка и остановится на каком-либо значении, если ошибка будет равна нулю (уставка и датчик будут одинаковы). То есть I составляющая как положено будет стремиться свести к нулю рассогласование (ошибку) регулирования.
:confused: У вас ошибка рассогласования накопливается бесконечно долго, и уходит только при перерегулировании.
На реальном обьекте с таким подходом можно получить незатухающие колебания.
У меня она уходит по времени - "скользящее окно"
Опробуйте на эмуляторе печи и сравните.

PS: Алексей Геннадьевич подскажите пожалуйста: как Вы сделали входные переменные (константы) для макроса, те что в параметрах макроса отображаются как kD_mul, SP_mul, kI_mul?
Эти константы сделаны для того, чтобы данные с панели оператора заводить. Не захотелось флоаты гонять.
Переменные подобрал экспериментально.
Для того, чтобы отображались в свойствах, выберите "использовать в макросе" в свойствах константы.

Вот бы к вашим ПИД еще и автонастройку
ПИД написал только потому, что ничего подходящего не было. Если "пригорать" будет, то придётся и автонастройку писать.
Надеюсь, ОВЕН свой ПИД допилит, и не придётся этим заниматься :)

кстати связь с ПК при работе Вашего ПИД тоже пропадает
Какое ПР? ПР200? Прошивку ПР 200 обновляли?
Свой ПИД писал под ПР114. Работает на реальном обьекте.
Пропорциональная составляющая обязательно должна быть больше нуля. I,D - могут иметь нулевое значение.
Возможно, перезагрузка связана с ошибкой деления на ноль.
На ПР114 в таком случае просто нет сигнала на выходе.

аскар
29.02.2016, 13:50
пр200 ОЛ117
температуру держит хорошо, но не вокруг уставки , а ниже. то есть не добирает полградуса.

Алексей Геннадьевич
29.02.2016, 14:00
пр200 ОЛ117
температуру держит хорошо, но не вокруг уставки , а ниже. то есть не добирает полградуса.
Интегральную составляющую вводили в работу? - она именно для этого и нужна. Небольшой недобор компенсировать.

stesel
29.02.2016, 14:29
:confused: У вас ошибка рассогласования накопливается бесконечно долго, и уходит только при перерегулировании.
На реальном обьекте с таким подходом можно получить незатухающие колебания.
У меня она уходит по времени - "скользящее окно"
Опробуйте на эмуляторе печи и сравните.

Так и должно быть, она и должна копиться бесконечно долго, можно ограничение интегральной составляющей сделать меньше, но именно так и должно работать. Может с реализацией что-то не корректно, я как раз пытаюсь это дело проверить в железе и отладить, но формула однозначно рабочая.


:confused:
Эти константы сделаны для того, чтобы данные с панели оператора заводить. Не захотелось флоаты гонять.
Переменные подобрал экспериментально.
Для того, чтобы отображались в свойствах, выберите "использовать в макросе" в свойствах константы.

Да, именно так и пытаюсь сделать, но у меня после этого не дает выбрать или изменить название переменной. Может быть некорректно работает OL? Или есть ещё где покопаться?


:confused:
ПИД написал только потому, что ничего подходящего не было. Если "пригорать" будет, то придётся и автонастройку писать.
Надеюсь, ОВЕН свой ПИД допилит, и не придётся этим заниматься :)
Я тоже начал писать ПИД, так как родной овеновский ПИД не хочет быть внутри макроса, а мне нужно 6 регуляторов в проекте. Про автонастройку тоже думал, но реализация этого дела очень сильно откушает ресурсов, да и очень уж скудный пока набор FBD. Очень бы нужен блок записи в переменную по условию, да и само условие тоже.

Алексей Геннадьевич
29.02.2016, 14:57
Так и должно быть, она и должна копиться бесконечно долго, можно ограничение интегральной составляющей сделать меньше, но именно так и должно работать. Может с реализацией что-то не корректно, я как раз пытаюсь это дело проверить в железе и отладить, но формула однозначно рабочая.
Тоже так думал. В одной из промежуточных версий так и сделал, получил незатухающие автоколебания системы, которые не убираются от слова никак.
Я наступил на эти грабли, вам зачем на них отплясывать?:o
Только метод скользящего окна, в идеале его глубина должна быть равна периоду автоколебания системы.
Сейчас идея пришла как это дело реализовать не убив на это кучу ресурсов ПР. ;)

Да, именно так и пытаюсь сделать, но у меня после этого не дает выбрать или изменить название переменной. Может быть некорректно работает OL? Или есть ещё где покопаться?

Проще снести старые константы, и сделать новые. и с расположением в свойствах макроса так порядок навести проще.


Я тоже начал писать ПИД, так как родной овеновский ПИД не хочет быть внутри макроса, а мне нужно 6 регуляторов в проекте. Про автонастройку тоже думал, но реализация этого дела очень сильно откушает ресурсов, да и очень уж скудный пока набор FBD. Очень бы нужен блок записи в переменную по условию, да и само условие тоже.
Интересно, у ПР200 есть 4 аналоговых входа, откуда данные на ещё 2 берёте? с модуля расширения?

аскар
29.02.2016, 15:13
я беру с мв110 8а

stesel
29.02.2016, 15:48
1. Алгоритм однозначно рабочий и обкатан, но на другом оборудовании и при другой реализации, но сама формула и алгоритм рабочий. Не знаю как Вы умудряетесь получить незатухающие колебания, только если коэф-ты подобраны неправильно.
2. Нашел как ввести константы и переменные, сделал + уменьшил кол-во входов макроса. Теперь вопрос: как вывести переменные из макроса, нужно для отладки, буду на их дисплей выводить?
3. Да у ПР200 4 аналоговых входа, при чем мне нужны только 3. Вкратце суть: Получаю температуру в помещении и уставку с удаленной панели управления со встроенным термодатчиком по 485-му интерфейсу. Подаю на ПИД, на выходе которого получаю значение требуемой температуры теплоносителя, а это уставка для второго ПИД, на который поступает температура теплоносителя после КЗР и который рулит этим КЗР. Получаем каскадное включение ПИД. И таких каскадов 3 штуки по 2 ПИД в каждом.

stesel
29.02.2016, 15:52
Вот нашел реализованный мной в макросе ПИД-регулятор на просторах интернета:
http://we.easyelectronics.ru/Theory/pid-regulyatory--dlya-chaynikov-praktikov.html

stesel
29.02.2016, 16:15
............. Теперь вопрос: как вывести переменные из макроса, нужно для отладки, буду на их дисплей выводить?

Блин, засада. Похоже нельзя в созданный макрос писать и читать из него переменные. Не работают с макросами блоки Write to FB и Read from FB.
Буду возвращать входы в макросе и приделывать временные выходы для отладки.

Алексей Геннадьевич
29.02.2016, 18:26
1. Алгоритм однозначно рабочий и обкатан, но на другом оборудовании и при другой реализации, но сама формула и алгоритм рабочий.
Формула классическая, от этого никуда не уйдёшь.
Ключевое в вашем сообщении подчеркнул.

Не знаю как Вы умудряетесь получить незатухающие колебания, только если коэф-ты подобраны неправильно.

22902
При вашей реализации t над интегралом равно всему времени работы установки, и ошибка рассогласования уходит только при превышении уставки. При работе с реальным обьектом, который обладает инерцией, будем иметь запаздывание уменьшения выходной мощности. В лучшем случае получим классический перелёт при запуске с последующим уменьшением размаха и стабилизацией автоколебаний на каком-нибудь значении.
В моей реализации время меньше периода автоколебания системы (1,5-3сек), но и этого хватает для поддержания температуры +-0,1градуса.

александр 64
29.02.2016, 18:43
простой пид без всяких настроек

александр 64
29.02.2016, 18:51
макрос аварий для пр 200 входа булевые выход целочисленный для предачи выходы аварии для экрана

stesel
29.02.2016, 20:39
так если Вы хотите отладить отдельно взятый макрос, эмуляция в нем будет исполняться только макроса. И Вы бы скринами показывали, что у Вас не получается, а то фразау меня этот блок внутри макроса работает, может что то другое имелось ввиду
Да имелось ввиду несколько другое. Например вытаскиваем переменные из макроса, делаем их доступными через свойства макроса, так же как например, у блока BLINK. Но в блок BLINK я могу писать через Write to FB, а вот в макрос не могу (только ручками править), то же самое с Read from FB. В общем задача-то такая: есть макрос с кучкой переменных внутри, в эмуляции всё отлажено и работает, теперь нужно как-то на железе отладить - то есть нужно как отследить изменение переменных внутри макроса. Сетевые переменные внутри макроса OL не дает сделать. В общем нужно что-то думать по поводу отладки в железе. Пока остается добавлять временные выходы из макроса, а затем уже или на дисплей или в сеть для отладки.
Кстати свой макрос ПИД проверил на ПР200, работает как нужно, причешу и выложу последний вариант.

stesel
29.02.2016, 20:50
простой пид без всяких настроек
Извините, но это не ПИД. Да это какой-то регулятор (не вникал глубоко, не знаю какой), но всё-таки не ПИД. ПИД подразумевает наличие 3-х составляющих, "П"-пропорциональной, "И"-интегральной и "Д"-дифференциальной. Давайте не путать термины и понятия.

stesel
29.02.2016, 21:10
В лучшем случае получим классический перелёт при запуске с последующим уменьшением размаха и стабилизацией автоколебаний на каком-нибудь значении.
Не на каком нибудь, а на конкретном, на уставке, и чем больше коэффициент интегральной части тем точнее и ближе к уставке.


В моей реализации время меньше периода автоколебания системы (1,5-3сек), но и этого хватает для поддержания температуры +-0,1градуса.
Возможно в Вашей реализации есть зерно, я не пробовал Ваш последний вариант, так как ко времени его появления я написал свой с классической реализацией. Даже, скажу Вам, я бы обязательно воспользовался им, если бы в первых версиях была рабочая интегральная часть или последний вариант появился раньше моего. Я бы лучше посвятил себя работе с сетевыми параметрами и алгоритму.

Алексей Геннадьевич
29.02.2016, 22:17
Не на каком нибудь, а на конкретном, на уставке, и чем больше коэффициент интегральной части тем точнее и ближе к уставке.
Опробуйте свой ПИД в "полевых условиях" или на имитаторе печи, результат выложите.


Возможно в Вашей реализации есть зерно, я не пробовал Ваш последний вариант, так как ко времени его появления я написал свой с классической реализацией. Даже, скажу Вам, я бы обязательно воспользовался им, если бы в первых версиях была рабочая интегральная часть или последний вариант появился раньше моего. Я бы лучше посвятил себя работе с сетевыми параметрами и алгоритму.
Извиняюсь конечно, ПИД доделал ещё в октябре. С другой стороны, в результате общения с вами мне пришла в голову идея как сделать интегратор который покроет весь период автоколебания, а не только его часть, не отожрав на это большую часть ресурсов ПР. В этом случае костыль в виде лимита ограничения станет не нужен.
К сведению: целочисленная переменная внутри ПР114/ПР200 имеет 32разряда. Это проверено.

stesel
01.03.2016, 17:51
ПИД-регулятор протестировал - работает исправно, немного прибрался в коде выкладываю результат.

rovki
01.03.2016, 18:25
А мне ,применимо к ПР слово КОД слух режет ;) ,лучше -СХЕМА ,однако :rolleyes:Даже в ОЛ закладка -схема называется .

Алексей Геннадьевич
01.03.2016, 20:10
ПИД-регулятор протестировал - работает исправно, немного прибрался в коде выкладываю результат.
Перерегулирование при старте присутствует?

stesel
01.03.2016, 20:29
Перерегулирование при старте присутствует?
Есть небольшое - пара-тройка десятых, можно зарезать диф. составляющей.
Собрал стенд на лампе накаливания, прикрутил датчик, сделал вывод на экран показаний и настроил коэф-ты. Результат прилагаю.

Алексей Геннадьевич
01.03.2016, 21:41
Жаль что на ИП320 или подобную панель график не вывели, интересно динамику посмотреть.
И на агрегате с хорошей тепловой инерцией опробовать.

stesel
02.03.2016, 01:49
Добавил смещение, сделал встроенный тактовый генератор, Все прочие настройки с описанием через параметры макроса, в итоге обновил версию до второй. Работать должен так же, как и первой версии. Все это финальная версия, мне для любых задач в будущем подойдет.

аскар
02.03.2016, 12:42
Добавил смещение, сделал встроенный тактовый генератор, Все прочие настройки с описанием через параметры макроса, в итоге обновил версию до второй. Работать должен так же, как и первой версии. Все это финальная версия, мне для любых задач в будущем подойдет.

проверяю ваш макрос на 7 объектах в одном проекте (7 датчиков и соответственно 7 тэн)
пока полет нормальный, но связь с ОЛ почти сразу теряется

аскар
02.03.2016, 13:11
нет не режим онлайн.просто работающий ОЛ теряет устройство

Павел Братковский
02.03.2016, 13:13
нет не режим онлайн.просто работающий ОЛ теряет устройство

а ОЛ в одном экземпляре запущен?

аскар
02.03.2016, 13:14
да в одном

stesel
02.03.2016, 17:04
проверяю ваш макрос на 7 объектах в одном проекте (7 датчиков и соответственно 7 тэн)
пока полет нормальный, но связь с ОЛ почти сразу теряется
Я так понимаю семь ПИД-регуляторов в проекте, всё верно?
В таком случае могу предположить, что не хватает ресурсов контроллера, тогда вопрос больше к разработчикам. Хотя есть ещё один нюанс, время цикла регулятора (кватования) Tqut надеюсь не убрали в минимум.
В первом варианте регулятора был отдельный вход для импульсов квантования, попробуйте его использовать и один генератор на все. Таймеры обычно жрут ресурсы контроллера, поэтому такое может происходить. Я стараюсь в таких случаях заводить только один таймер в проекте и генерировать синхроимпульсы разной периодичности на все нужды, путём деления опорной частоты таймера с помощью счетчиков.
Можно попробовать проверить, но не знаю на сколько это правильно, во вложении файлик, там суть такая если таймер Blink не сможет получать биты во время от системы испонения, то он окажется в любом случае медленнее чем генератор с частотой цикла и в итоге на выходе Q1 получим 1. Попробуйте встроить эту схему в свой проект, если получим 1 на выходе, значит однозначно не хватает времени цикла.
PS: Для нуждающихся там макрос счетчика с ограничением мин/мах, сбросом, предустановкой и выходами переполнения.

аскар
03.03.2016, 06:49
ваш счетчик в виде макроса встроил в проект, выход = 0 22951
коэфф ПИД одни на все 7 пид , уставки разные,физ условия для всех одинаковые
пока разброс от +- (0.2 до 5).
на каждый пид у меня стоит по генератору шим 22952

Колыбельников
03.03.2016, 07:14
Ребята мне нужен макрос ПИД регулятор дискретный (трех позиционный) помогите найти или ссылку дайте, Пожалуйста

stesel
03.03.2016, 09:32
Ребята мне нужен макрос ПИД регулятор дискретный (трех позиционный) помогите найти или ссылку дайте, Пожалуйста

Так сделайте из обычного ПИД регулятора, путем сравнения значения выхода Y с константой, например если Y<40% то выход Q1=1, если Y>60%, то выход Q2=1, тогда тут от 40% до 60% будет зоной нечувствительности.

stesel
03.03.2016, 09:55
ваш счетчик в виде макроса встроил в проект, выход = 0 22951
коэфф ПИД одни на все 7 пид , уставки разные,физ условия для всех одинаковые
пока разброс от +- (0.2 до 5).
на каждый пид у меня стоит по генератору шим 22952

Тогда попробуйте организовать по следующему принципу как во вложении. Постарайтесь использовать минимум таймеров. Ну и в тех.поддержку обратиться если не поможет.

Напишите что получилось, мне тоже предстоит 6 регуляторов в проект засунуть.

Колыбельников
03.03.2016, 10:52
Он тогда не импульсно работает

аскар
03.03.2016, 11:22
пока пробую коэф подобрать, хочу трм 500 в режиме АНР ПИД подключить и потом коэф пид забить в пр.
а так в принципе работает, но температуру перебирает

Алексей Геннадьевич
03.03.2016, 11:47
пока пробую коэф подобрать, хочу трм 500 в режиме АНР ПИД подключить и потом коэф пид забить в пр.
а так в принципе работает, но температуру перебирает
Если у вас есть ИП320 или другая графическая панель, подключите её, по графику изменения температуры подобрать коэффициенты проще.

аскар
03.03.2016, 11:55
к сожалению пока не получил, вопрос
коэф от трм подойдут к макросу (физ тех процесс тот же)

аскар
03.03.2016, 13:35
ввел коэф из трм, полет нормальный максимальный разброс 1.5 гр

Василий Кашуба
03.03.2016, 19:11
Он тогда не импульсно работает
Попробуйте такой блок, преобразователь аналогового сигнала в импульсный, для управления сервоприводами.
22974

stesel
04.03.2016, 13:17
ввел коэф из трм, полет нормальный максимальный разброс 1.5 гр

аскар, у Вас до сих пор отваливается связь OL с контроллером, если в проекте 7 регуляторов? Или победили? Если да, то как?

аскар
04.03.2016, 20:44
как вы советовали оставил 1 блинк, связь больше не отваливается, но температуру плохо держат, после праздников поиграю коэф ПИД.

Алексей Геннадьевич
04.03.2016, 21:37
как вы советовали оставил 1 блинк, связь больше не отваливается, но температуру плохо держат, после праздников поиграю коэф ПИД.
Раньше играться приходилось? Имеется ввиду с положительным результатом.

аскар
05.03.2016, 06:15
с одним ПИДом в проекте температуру держал +-0,1,с 7 ю ПИДами в проекте даже если 6 по en входу выкл не держит.После праздников эксперимент продолжу, точнее начну заново чтоб ошибки не копить.Начал с фб ПИД, потом ваши макросы. Фб ПИД вообще не работает как должен.

stesel
07.03.2016, 05:17
как вы советовали оставил 1 блинк, связь больше не отваливается, но температуру плохо держат, после праздников поиграю коэф ПИД.

Решил проверить, на сколько сильно влияет Blink на время цикла:
1. Сделал генератор с периодом цикла контроллера, поделил на 100 и вывел на зеленый светодиод (у меня ПР200), а на красный вывел с Blinka период 1сек.
2. в проекте сделал 4 ПИД-регулятора, зеленый моргает быстрее.
3. Добавил ещё, в итоге 6 ПИД-регуляторов, оба светодиода моргают синхронно, несколько минут ждал рассинхронизации - не увидел. Таким образом получаем ровно 100 циклов в секунду.
Это всё было когда в схеме было всего 2 Blinka, а остальное реализовывалось по другому.
4. Изменяю схему - выход ПИД-регулятора, преобразование в PWM, делаю на Blink-aх, остается один Blink на ПИД и 6 Blink-ов на выходы, итого 7 Blink-ов. А зеленый-то теперь чуть быстрее моргает.
5. Теперь обратно Blink в ПИД-регулятор убираю, как делал когда-то изначально.
Ни чего сильно не изменилось. В проекте теперь аж 15 Blink-ов, связь не отваливается, цикл более 100 раз в секунду.
Вывод: Буду всё-таки Blink-и юзать, программистам ПР200 большой плюс, т.к. грамотно реализовали таймеры, в частности Blink.
PS: хотя, тут может быть, что ПР200 более производительный, поэтому куча Blink-ов ни как не влияет на связь.

Алексей Геннадьевич
10.03.2016, 19:24
с одним ПИДом в проекте температуру держал +-0,1,с 7 ю ПИДами в проекте даже если 6 по en входу выкл не держит.После праздников эксперимент продолжу, точнее начну заново чтоб ошибки не копить.Начал с фб ПИД, потом ваши макросы. Фб ПИД вообще не работает как должен.
Уточню: С одним ПИДом работа производилась на реальном обьекте или на имитаторе?
А с семью ПИДами какие условия были?

аскар
10.03.2016, 19:40
на имитаторах в обоих случаях, но эксперимент пока не повторял .имитаторы одинаковые

Алексей Геннадьевич
10.03.2016, 19:49
на имитаторах в обоих случаях, но эксперимент пока не повторял .имитаторы одинаковые
Имитаторы что из себя представляют? Тепловая инерция у них есть, или это лампочка прикрученная изолентой к датчику?

И время такта какое ставите на тактовом входе ПИДа?

Опробуйте мой ПИД - выложил здесь:http://www.owen.ru/forum/showthread.php?t=23453&page=3&p=200310&viewfull=1#post200310

аскар
10.03.2016, 19:56
утром попробую,имитаторы два резистора по 7,5 кОм и прикрученный изолентой датчиком ТСП 100

Алексей Геннадьевич
10.03.2016, 20:21
утром попробую,имитаторы два резистора по 7,5 кОм и прикрученный изолентой датчиком ТСП 100
Сразу скажу, что время такта моего ПИДа выставлять не менее чем в 5 раз больше чем средний цикл ПР.

stesel
11.03.2016, 23:51
Всем привет, проделал следующую работу:
1. Нашел у себя пару багов в ПИД-регуляторе (множитель для коэффициентов - Kp, Ki, Kd применялся не для всех коэффициентов), убрал всё-таки вход квантования, теперь блинк внутри. Параметр мощность - это делитель для коэффициентов, удобно пользоваться когда процесс остается тем же, а меняется только мощность нагревателя например.

2. Протестил и переделал преобразование выхода регулятора в сигнал ШИМ, действительно были постоянные импльсы. Там есть параметр минимального времени переключения, что бы реле не очень часто перещелкивалось и раньше времени не вышло из строя.

Результаты прикладываю


Сразу скажу, что время такта моего ПИДа выставлять не менее чем в 5 раз больше чем средний цикл ПР.
По идее время такта в ПИД-регуляторах влияет на вычисление дифференциальной составляющей (обычно), а это изменение величины за отрезок времени, поэтому целесообразнее привязывать его к процессу, а не к циклам контроллера.

Алексей Геннадьевич
12.03.2016, 12:16
По идее время такта в ПИД-регуляторах влияет на вычисление дифференциальной составляющей (обычно), а это изменение величины за отрезок времени, поэтому целесообразнее привязывать его к процессу, а не к циклам контроллера.
Разговор о конкретной реализации ПИД в среде ОЛ. Попробуйте в своём регуляторе выставить блинк так, чтобы он отрабатывал импульс и паузу за 2 цикла ПР. Работа дифференциальной составляющей сразу "сядет", потеряет эффективность. На другие составляющие не влияет, только на D. Это и к вашему регулятору относится, одна платформа и принцип реализации.
Можно конечно поставить ячейку памяти сразу после вычислителя дельтыТ, но зачем? мы здесь не квадрокоптером рулим, а тепловым процессом/давлением, и дискретность менее чем 50мс не нужна даже на имитаторе из лампочки с датчиком.
Эффективность применения D состоавляющей при отношении время блинка/такт ПР:
2:1 =50%
5:1=80%
10:1=90%

поэтому целесообразнее привязывать его к процессу
Согласен, как показывает практика, число дискретных отсчётов за время свободного колебания процесса от 1000 до 4000.
Меньше получается грубо, больше- не нужно.

P.S.
stesel По АНР для ПИД у вас идеи есть? Процессы со временем свободного колебания десятки минут - часы настраивать в ручном режиме ещё та задачка...
Пока доделываю вычислитель времени колебания и его размаха.

stesel
12.03.2016, 15:35
P.S.
stesel По АНР для ПИД у вас идеи есть? Процессы со временем свободного колебания десятки минут - часы настраивать в ручном режиме ещё та задачка...
Пока доделываю вычислитель времени колебания и его размаха.

По поводу АНР думаю это не для ПР-ки, или это должно быть реализовано разработчиками на уровне ОС. Я не уверен, что когда-нибудь я буду использовать ПР-ку для проектов, где потребуется автонастройка ПИД.

PS: Хотя, если на днях достанется проект на 9 однотипных шкафчиков, которые разъедутся по РФ, то думаю будет смысл заморочиться, что бы не гоняться. Но опять же, не факт, что выпуск ПР200 будет налажен (а там именно ПР200 подошел бы), говорят есть проблемы с поставкой комплектующих.

Алексей Геннадьевич
12.03.2016, 17:48
По поводу АНР думаю это не для ПР-ки, или это должно быть реализовано разработчиками на уровне ОС. Я не уверен, что когда-нибудь я буду использовать ПР-ку для проектов, где потребуется автонастройка ПИД.

PS: Хотя, если на днях достанется проект на 9 однотипных шкафчиков, которые разъедутся по РФ, то думаю будет смысл заморочиться, что бы не гоняться.
В понедельник выкачу свой модуль, пока только измерение периода в секундах и максимум/минимум параметра. Сборщик входных данных.



Но опять же, не факт, что выпуск ПР200 будет налажен (а там именно ПР200 подошел бы), говорят есть проблемы с поставкой комплектующих.
Это временные проблемы, но увы и ах, мне приходится переделывать проект с ПР200 на ПР114 именно из-за проблем со снабжением.:mad:
Меня ещё беспокоит молчание ОВЕН насчёт модулей расширения ПР200. Есть много мест, где необходимо много I/O и программа относительно простая, а архивы и прочие другие плюшки контроллера нужны как собаке пятая нога.

stesel
13.03.2016, 00:44
В понедельник выкачу свой модуль, пока только измерение периода в секундах и максимум/минимум параметра. Сборщик входных данных.
Идея по поводу автонастройки ПИД-регулятора заразила мою голову, копаю в эту сторону, читаю про разные способы. Думаю есть смысл создать отдельную ветку форума под это.


Это временные проблемы, но увы и ах, мне приходится переделывать проект с ПР200 на ПР114 именно из-за проблем со снабжением.:mad:
Конечно проблемы временные, в российских условиях заниматься производством технологичных вещей довольно проблематично, можно только пожелать удачи производителям. Жаль, что развитие продукции очень и очень медленное. Например OL, за время существования, должен был избавиться от детских болезней и стать очень сильным продуктом, но увы... мы с Вами вынуждены писать собственные ПИД-регуляторы.


Меня ещё беспокоит молчание ОВЕН насчёт модулей расширения ПР200. Есть много мест, где необходимо много I/O и программа относительно простая, а архивы и прочие другие плюшки контроллера нужны как собаке пятая нога.
А я всё равно не использую архивы в ПЛК. У контроллера всегда есть связь с внешним миром (RS485 и др..), проще поставить некий внешний модуль, панель оператора, SCADA или всё вместе, где это реализуется на раз два, к тому же надежность хранения данных много выше.

rovki
13.03.2016, 00:58
Молодцы ,ребята ,полезным и конкретным делом занимаетесь .Может что пригодится - http://albalex.narod.ru/3conf09.pdf
http://cyberleninka.ru/article/n/analiz-effektivnosti-algoritmov-avtomaticheskoy-nastroyki-adaptivnyh-promyshlennyh-pid-regulyatorov
http://www.uran.donetsk.ua/~masters/2003/kita/pikul/library/article4.htm
http://yandex.ru/clck/jsredir?from=yandex.ru%3Bsearch%2F%3Bweb%3B%3B&text=&etext=991.pwwW2b3ZfOkyTnq7Q6G97MJv7PoHH2zXVxwoMqT5 XOubsVhiQRgZJ66NhD-DMeHCMX2S5xwSTOWXdBjswGf_EZMcN9aSGI6u8AcG7q5atx7Zq VdaNFAuwm5L8gMhmv2k.98a5e3d8aa1316f9672c7d2817582a 5ff378118b&uuid=&state=H4h8uvWmGgzSQA8WTiQiw2YFxQm77kBk2YhM1yEBfMM&data=UlNrNmk5WktYejR0eWJFYk1LdmtxczN6VUR6VUtOc0Nhc FY3bU8wT2N0aXNpWVJBQTg2RE5hRkVJOHhGSjBYQ291a1JuaUd hVUljWm9zSm1CTmVZYkIwZzV0ZENobzlrZ05pSlBpdEU3dUVTN 3phOWNwdEtOemxiVGJMOFFkNmxGSm5uSlZIWmZUamN5RFc5MHZ wZ2FCdnQ5Q3VmYS0zRjRHVFJYX3libGprUVplMy1LdjNhbXc&b64e=2&sign=4f82ce7c9b9fa35483aab36738d6186d&keyno=0&cst=AiuY0DBWFJ5Hyx_fyvalFJisgKpR0VtH1KYAJM2ZywSjzy ZdYEY3V4navAIa0FW5iECePMMtNXw_PhHD8jG61_dkgXEVbcHC Q67bFMNsIcwduVQ1lmLV_2rZcVUDxFpMv0zSw66LmFoZr74UHU vuLmlsSpmfbh_-KCZYR8SAuCd7ehcW1I5jcKGffH7nVMA50xKpAVKwW1JSEz1mmz P6TeX-DQvnCCfT3mxZ515GwJV3IjYrybS2Yg&ref=orjY4mGPRjk5boDnW0uvlrrd71vZw9kp61qNaZGNo-dbw1I7DGOYLXc3ljJfCsV8UlIQssdwMQNXJf4e7O0KmOuXxVu8-Ho3CCjd2XrFFxhWrtvgjq8Fx46bnVAZ7wRuEmKLMKPJYWZg3aa YhTSexCi6TvAd5es11NlIhAx94pjQ9QBU8YbiuhLv2ZvqLX4Ih m7x8qdJvXW5s4pyww2iKw5DMNtq0VP2VSnyrmd5wPVZqD-J2-U4B18O-L6xXd81Ilfmsz-9zGVPlIKG5PiLF0-ulAnzUAUilsYQR5XA3nuirVDZ94oC2r6bhc7ePFG025XMpMxri 73BWRbpZZU5zNqiM979urv9c75hzjCFjOYh-UMI3qJ37ztjPiJENKasPCZxXJ8ZnISPBHRCXk3i55A0qk2BTjB hvMkEVlMA7Mnb5PyGFLsgEkIyrqvicQ4czztS7CqCAfMhQ55_T mYIPsq9obo5wXNpHVdd1lAHXfsyhG4lzUrdfHWg-T-B1_mHmcm4mWnJO7cbCSM3fPvv68Wc8BtcrODHKa5X5cAGLfxYP bIU_PeTmF7UUzOFEmiVsfNNCzE1mWNCERVspSbNX3-_jnlAAjxGkYyw_dGMgx5nr0pNJpOyQ_WL7Z-ofvQBHVFsRaCn4AkNF8lJMVpAHIes2d17GIBc&l10n=ru&cts=1457819865710&mc=5.494026444086811

Алексей Геннадьевич
13.03.2016, 01:18
Идея по поводу автонастройки ПИД-регулятора заразила мою голову, копаю в эту сторону, читаю про разные способы. Думаю есть смысл создать отдельную ветку форума под это.

Хорошо, в понедельник вечером выкачу свой модуль-детектор в отдельную ветку. Там и продоллжим обсуждение.
Подгонять коэффициенты вручную на обьекте с периодои колебаний в десятки минут/часы... бррр... Чем двое суток тупить на подобной печке, лучше АНР написать.
Мне тоже это сильно запало. Вдвоём мы быстрее сделаем что-то приемлемое.

Конечно проблемы временные, в российских условиях заниматься производством технологичных вещей довольно проблематично, можно только пожелать удачи производителям. Жаль, что развитие продукции очень и очень медленное. Например OL, за время существования, должен был избавиться от детских болезней и стать очень сильным продуктом, но увы... мы с Вами вынуждены писать собственные ПИД-регуляторы.

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

я всё равно не использую архивы в ПЛК. У контроллера всегда есть связь с внешним миром (RS485 и др..), проще поставить некий внешний модуль, панель оператора, SCADA или всё вместе, где это реализуется на раз два, к тому же надежность хранения данных много выше.
Мне тоже не приходилось их использовать пока. ПЛК использовал только потому, что в кодесис с большим числом I/O работать удобнее, и онлайн-режим есть.
А архив в ПЛК - если какому (мир/дверь/мяч англ.) хвост прижать, чтобы адекватную инфу давал.http://s19.rimg.info/7a75663c24e2cef641b104ed54b43e62.gif (http://smayliki.ru/smilie-1249651719.html)


Молодцы ,ребята ,полезным и конкретным делом занимаетесь .Может что пригодится - http://albalex.narod.ru/3conf09.pdf

От души.http://s14.rimg.info/b0ce51458daf656ef0de89ce51f5ffa2.gif (http://smayliki.ru/smilie-880768743.html)
Правда последняя ссылка не работает.:(

Алексей Геннадьевич
14.03.2016, 20:29
http://www.owen.ru/forum/showthread.php?t=23453&page=4&p=200940&viewfull=1#post200940
Выложил блок детектора максимума/минимума/периода. Вместе с отредактированным ПИД-регулятором.

Алексей1981
15.03.2016, 12:53
Добрый день! Необходим специальный Макрос а то и вся программа для ПР114 8д4а РРРРРРТТ-Ч. Прошу написать в личку, кто сможет помочь!

аскар
15.03.2016, 13:30
Добрый день! Необходим специальный Макрос а то и вся программа для ПР114 8д4а РРРРРРТТ-Ч. Прошу написать в личку, кто сможет помочь!

по подробнее плиз

аскар
16.03.2016, 09:24
http://www.owen.ru/forum/showthread.php?t=23453&page=4&p=200940&viewfull=1#post200940
Выложил блок детектора максимума/минимума/периода. Вместе с отредактированным ПИД-регулятором.

7 Ваших ПИДов в одном проекте работают нормально,+-0,1.Настраивал с 1 ПИДом в проекте, потом добавил еще 6.Связь больше не отваливается.
В моем ПР200 1 порт,ПР мастер, опрашивает МВ 110 8А. Пытался читать овен ОПС сервером с МВ - "BAD"(ну оно и логично), с ПР мастером тоже ни как.
Без второго порта ни как?

Алексей Геннадьевич
17.03.2016, 18:25
7 Ваших ПИДов в одном проекте работают нормально,+-0,1.Настраивал с 1 ПИДом в проекте, потом добавил еще 6.Связь больше не отваливается.
Изменяя глубину интегратора можно достичь безударного выхода на уставку.
23190

В моем ПР200 1 порт,ПР мастер, опрашивает МВ 110 8А. Пытался читать овен ОПС сервером с МВ - "BAD"(ну оно и логично), с ПР мастером тоже ни как.
Без второго порта ни как?
Вы свой проект выложите. И нужно уточнить детали: на форуме было сказано что ПР200 нормально работает с 12 сетевых переменных.
Вот и нужно выяснить:
1) 12 INT и 12FLOAT - разные по размеру переменные. Так привязка к чему: к кол-ву переменных, или к количеству передаваемых байт?
2) 12 сетевых переменных на порт или 12 сетевых переменных вообще?

Василий Кашуба
17.03.2016, 18:57
...
Вы свой проект выложите. И нужно уточнить детали: на форуме было сказано что ПР200 нормально работает с 12 сетевых переменных.
Вот и нужно выяснить:
1) 12 INT и 12FLOAT - разные по размеру переменные. Так привязка к чему: к кол-ву переменных, или к количеству передаваемых байт?
2) 12 сетевых переменных на порт или 12 сетевых переменных вообще?
Как я понял, 12 сетевых переменных, это за один цикл опроса.

Алексей Геннадьевич
17.03.2016, 19:32
Как я понял, 12 сетевых переменных, это за один цикл опроса.
Вот меня и интересует, можно их в контроллер все скопом "смести" за один опрос (плк 80байт за один опрос может "заглотить"), или нет?

Алексей Геннадьевич
17.03.2016, 22:17
12 word или 6 float можно прочитать одной посылкой, если мастер запросит 16 регистров то ПР200 ответит ошибкой, вот и нужно научить мастер читать только так.
Спасибо, хоть какая-то ясность.

Мастер ПЛК тоже читает оптом так что и с нем могут возникнуть проблемы.
Как настроишь, так и читает. Может вообще по одному биту из сети таскать.

Так что остается надежда только на мастера вот с мастером проблем нет только с уставками есть осложнения, нужно подумать как их сохранять в памяти ПР200, собственно сейчас этим вопросом и занимаюсь, инфы мало особо энергонезависимой памяти. примеров нет...


http://www.owen.ru/forum/attachment.php?attachmentid=23149&d=1457976062

Там и энергонезависимые переменные использовал.

stesel
17.03.2016, 22:41
Мастер ПЛК тоже читает оптом так что и с нем могут возникнуть проблемы. Так что остается надежда только на мастера вот с мастером проблем нет только с уставками есть осложнения, нужно подумать как их сохранять в памяти ПР200, собственно сейчас этим вопросом и занимаюсь, инфы мало особо энергонезависимой памяти. примеров нет...
А в чем проблема с сохранением? Сетевую переменную пишете в свою, а в свойствах переменной ставите галочку, что она энергонезависима. Более того, я опробовал изменять эту "свою" переменную с дисплея, и по изменению перезаписываю в сетевую переменную. Единственное непонятно как ПР обращается с еепромкой, не сдохнет ли от частой перезаписи. Не нашел как задать момент записи в еепром. Поэтому, как выход, сделал два логических сетевых устройства на одном адресе, при включении читаются уставки с одного и сохраняется в еепром, а потом работа идет с другим, где данные не используют еепром. Надеюсь ПР не пишет в еепром переменную каждый цикл, тем более что она не меняется.

Алексей Геннадьевич
17.03.2016, 22:51
Единственное непонятно как ПР обращается с еепромкой, не сдохнет ли от частой перезаписи. Не нашел как задать момент записи в еепром.
В EEPROM при отключении питания пишется. При работе в ОЗУ крутится. В ПР114 дело обстоит именно так. В ПР200 должно быть также.

stesel
17.03.2016, 23:00
Понял, спасибо!

stesel
17.03.2016, 23:04
Как я понял из постов выше, что есть ограничение на кол-во переменных читаемых за один раз, то есть если больше 12 переменных, то их нужно разносить по времени? Ой, даже не переменных, а регистров. Если переменная занимает больше 1-го регистра, то их даже ещё меньше будет?

аскар
18.03.2016, 06:46
вот мой проект23197 мв110***8а и пр200 датчики тсп10023198 резисторы 2 по 7.5 кОм послед.

Алексей Геннадьевич
19.03.2016, 11:17
вот мой проект23197 мв110***8а и пр200 датчики тсп10023198 резисторы 2 по 7.5 кОм послед.
Интересно, какая у вас тепловая инерция у эмулятора получилась?

Про два два сетевых устройства на одном адресе за это большое спасибо. Не традиционно но вполне годится.
А как быть с ответом устройства о корректном приёме данных?!:confused:

stesel
19.03.2016, 13:05
А как быть с ответом устройства о корректном приёме данных?!:confused:

Так переменную в окне статус выбираете свою для каждого устройства, если необходимо. Т.е. я сделал следующее: читаю уставки, если приходит статус = "1" или статус не пришел по таймауту, то начинаю читать прочие текущие параметры. Уставки переписываются в энергонезависимую память, поэтому, если ответа нет, и уставки не получены, то система будет работать по уставкам полученным и сохраненным в еепром ранее.

Алексей Геннадьевич
19.03.2016, 13:56
Так переменную в окне статус выбираете свою для каждого устройства, если необходимо. Т.е. я сделал следующее: читаю уставки, если приходит статус = "1" или статус не пришел по таймауту, то начинаю читать прочие текущие параметры. Уставки переписываются в энергонезависимую память, поэтому, если ответа нет, и уставки не получены, то система будет работать по уставкам полученным и сохраненным в еепром ранее.
Если правильно понимаю, ПР200 - режим мастер, на один интерфейс вешаете 2 модуля ввода с одним адресом в сети, и разными регистрами уставок. При запросе по RS485 каша обеспечена, если только с тайм-аутом ответа не поиграть... И зачем всё это надо?!

stesel
19.03.2016, 22:49
Если правильно понимаю, ПР200 - режим мастер, на один интерфейс вешаете 2 модуля ввода с одним адресом в сети, и разными регистрами уставок. При запросе по RS485 каша обеспечена, если только с тайм-аутом ответа не поиграть... И зачем всё это надо?!
Нет, не так немного - физически устройство одно, а логически два. И у меня это панелька. В ПР, особенно если он без экрана, вводить например коэф-ты ПИД будет проблемно, поэтому всё это и сделано. В панели хранятся настройки и есть датчик температуры, постоянно читать настройки и забивать RS485 нет смысла, поэтому я так и сделал, читаю при включении настройки, а затем опрашиваю текущую температуру и прочее.

Алексей Геннадьевич
31.03.2016, 20:13
вот мой проект23197 мв110***8а и пр200 датчики тсп10023198 резисторы 2 по 7.5 кОм послед.
Посмотрел ваш проект. Моё мнение - Макрос ШИМ генератора переделать надо.
Соображения:
1) ПИД при работе постоянно "играет", желательно накопить среднее значение за период ШИМ. (есть реализация, нужно доработать)
2) Крайние области работы: 0-15% и 85-100%. В этиз областях желательно "склеивать" несколько управляющих периодов ШИМ в один для меньшего износа контактов пускателей. Вполне пойдёт, если система инертная.


Для этого нужен макрос который и отвечает за обратную связь. Так как архитектура ОЛ имеет особенности.
Пришлось все моменты проработает в ПР200.
Так показывайте ваш макрос.

Алексей Геннадьевич
01.04.2016, 18:33
аскар
Посмотри. Сделал ШИМ с ограничением сверху и снизу и задаваемым периодом.

shizo
15.01.2018, 12:03
Добрый день, коллеги.
Подскажите, пожалуйста: нужен макрос на регулирование двухходовым клапаном обратки дистанционно (по времени открытия и закрытия), два управляющих провода, один нейтральный. К ПР-200 подключены ДТС на подаче и обратке, а также ДТС наружного воздуха.

Ревака Юрий
16.01.2018, 10:36
Добрый день, коллеги.
Подскажите, пожалуйста: нужен макрос на регулирование двухходовым клапаном обратки дистанционно (по времени открытия и закрытия), два управляющих провода, один нейтральный. К ПР-200 подключены ДТС на подаче и обратке, а также ДТС наружного воздуха.

Добрый день, http://www.owen.ru/forum/showthread.php?t=25068&p=233054&viewfull=1#post233054 вот универсальная заготовка, попробуйте "допилить" под свою задачу.

эндрю
11.03.2019, 15:27
Сергей я скачал ваш проект с макросом, но как из вашего проекта вытащить макрос чтобы вставить в свой?

Сергей0308
11.03.2019, 15:33
Открываете макрос для редактирования, далее меню файл, экспорт макроса в файл и сохраняете в специальной папке для макросов!
Затем из своего проекта импорт макроса из файла и выбираете ту папку и файл, куда только что сохранили, всё!

borzov161
22.05.2019, 15:09
Функция, преобразователь типа данных из INT16 в FLOAT! Чтобы сразу не заругали скажу, что в ОЛ такой нет.
20519
Макрос в проекте, там есть и обратная функция!
Спасибо попробую.

Vyachep
13.08.2019, 06:22
макрос АВАРИЯ (анализатор событий).8 входов,выход -десятичный код аварии,выход Общая авария (с маской,если нужно) ,выход Мерцающая авария,Выход число-импульсный ,показывает на каком входе авария количеством вспышек ,с приоритетом .Автоматический сброс аварий на выходе при отсутствии их на входе ,через заданное время.Может применяться в различных системах управления ,выход макроса может быть энергонезависим (целочисленный)


Возможно уже было, но может кому-нибудь пригодится. Подобный макрос, только немного другой. Вход - целочисленный код ошибки (от 00 до 99). Вход En - булевое разрешение работы. Выход - десятичный мигающий код ошибки. Десятки - длинные вспышки, единицы - короткие. 0 - десять вспышек. Пауза между десятками/единицами - 2 сек, между повторами - 5 сек.

Алгоритм использования: подаем на аналоговый вход код ошибки, затем даем импульс на вход En для однократного отображения кода ошибки, либо константу для циклического показа кода. Если код поменять во время работы макроса - результирующий мигающий код будет не верным. Если нужно - сигнал конца работы макроса можно вывести наружу (там не сложно :o ), для смены кода.

P.S. Очень удачно выводится на светодиод F1/F2 :) Комментарии и критика - велком.

Сергей0308
21.08.2019, 03:08
Возможно уже было, но может кому-нибудь пригодится. Подобный макрос, только немного другой. Вход - целочисленный код ошибки (от 00 до 99). Вход En - булевое разрешение работы. Выход - десятичный мигающий код ошибки. Десятки - длинные вспышки, единицы - короткие. 0 - десять вспышек. Пауза между десятками/единицами - 2 сек, между повторами - 5 сек.

Алгоритм использования: подаем на аналоговый вход код ошибки, затем даем импульс на вход En для однократного отображения кода ошибки, либо константу для циклического показа кода. Если код поменять во время работы макроса - результирующий мигающий код будет не верным. Если нужно - сигнал конца работы макроса можно вывести наружу (там не сложно :o ), для смены кода.

P.S. Очень удачно выводится на светодиод F1/F2 :) Комментарии и критика - велком.

Любопытно, для каких случаев это предназначено, я так понимаю на случай неисправности экрана? Почему нельзя проще сделать, например написать ошибку(аварию) полностью на экране, если не хватает 16 знаков(думаю так будет в большинстве случае), можно бегущей строкой, делал бегущую строку до 48 знаков, можно и больше, просто мне хватило 40 и больше не надо было!
И, чтобы два раза не вставать, заодно и покритикую макрос бегущей строки из менеджера компонентов, насколько понял, можно сделать бегущую строку до 16 знаков! Вот мне, не знаю почему так получается, что со мной не так, кажется бегущая строка как раз и нужна когда количество знаков текста превышает 16 знаков! Если не превышает 16 знаков и так всё выводится на экран без всяких там бегущих строк, короче, не понял, как из него соорудить бегущую строку более 16 знаков, пришлось самому делать, вот зачем нужны такие макросы, как говорится ни о чём или объясните как им сделать бегущую строку более 16 знаков, для 16 и менее знаков она не нужна от слова совсем!

petera
21.08.2019, 10:17
И, чтобы два раза не вставать, заодно и покритикую макрос бегущей строки из менеджера компонентов, насколько понял, можно сделать бегущую строку до 16 знаков! Вот мне, не знаю почему так получается, что со мной не так, кажется бегущая строка как раз и нужна когда количество знаков текста превышает 16 знаков! Если не превышает 16 знаков и так всё выводится на экран без всяких там бегущих строк, короче, не понял, как из него соорудить бегущую строку более 16 знаков, пришлось самому делать, вот зачем нужны такие макросы, как говорится ни о чём или объясните как им сделать бегущую строку более 16 знаков, для 16 и менее знаков она не нужна от слова совсем!

Нужно не текстовую метку использовать, а любую BOOL переменную, не используемую в программе, текст для TRUE и для FALSE сделать пустым, а вот строка бегущая пишется в "Текст до" или "Текст после" и пиши себе хоть 100 символов.

Ревака Юрий
21.08.2019, 11:07
И, чтобы два раза не вставать, заодно и покритикую макрос бегущей строки из менеджера компонентов, насколько понял, можно сделать бегущую строку до 16 знаков!

Давно не использовал, но когда тестировал было ограничение кажется в 127 символов, ограничение было по одному из элементов, в описании отмечено. В остальном все работало как задумано.

Сергей0308
21.08.2019, 17:18
Нужно не текстовую метку использовать, а любую BOOL переменную, не используемую в программе, текст для TRUE и для FALSE сделать пустым, а вот строка бегущая пишется в "Текст до" или "Текст после" и пиши себе хоть 100 символов.

Спасибо! Понятно, в следующий раз попробую ради интереса, пока пользуюсь своим вариантом, пусть и менее удобным, приходится вручную разбивать текст по 16 знаков, за то практически не ограничено по количеству знаков бегущей строки, до 4*294*967*295!

44228

В проекте все, что не относится к бегущей строке, удалил, чтобы народ не смущать!

Vyachep
22.08.2019, 09:46
Любопытно, для каких случаев это предназначено, я так понимаю на случай неисправности экрана? Почему нельзя проще сделать, например написать ошибку(аварию) полностью на экране, если не хватает 16 знаков(думаю так будет в большинстве случае), можно бегущей строкой, делал бегущую строку до 48 знаков, можно и больше, просто мне хватило 40 и больше не надо было!
И, чтобы два раза не вставать, заодно и покритикую макрос бегущей строки из менеджера компонентов, насколько понял, можно сделать бегущую строку до 16 знаков! Вот мне, не знаю почему так получается, что со мной не так, кажется бегущая строка как раз и нужна когда количество знаков текста превышает 16 знаков! Если не превышает 16 знаков и так всё выводится на экран без всяких там бегущих строк, короче, не понял, как из него соорудить бегущую строку более 16 знаков, пришлось самому делать, вот зачем нужны такие макросы, как говорится ни о чём или объясните как им сделать бегущую строку более 16 знаков, для 16 и менее знаков она не нужна от слова совсем!

Экран (в случае с ПР100) за деньги, да и то пока ещё не подключишь. А макрос со встроенным в ПР100 светодиодом - бесплатно. До пяти аварийных сигналов легко можно отмигать. Да и больше можно при необходимости. В небольших и недорогих системах почему бы и нет? На автомобилях с прошлого века коды ошибок отмаргивают лампочкой.

Алексей Геннадьевич
26.08.2019, 07:53
Экран (в случае с ПР100) за деньги, да и то пока ещё не подключишь. А макрос со встроенным в ПР100 светодиодом - бесплатно. До пяти аварийных сигналов легко можно отмигать. Да и больше можно при необходимости. В небольших и недорогих системах почему бы и нет? На автомобилях с прошлого века коды ошибок отмаргивают лампочкой.
На ПЛК тоже светодиодом аварии отмаргивали. Лучше, чем ничего.
Порылся в закромах. Программа старая, под OL 1.7build51 делалась. 8входов. Автор - Василий Кашуба, я макрос переработал под свои цели.
Макрос импульсного указания активного входа (входов)

Vyachep
27.08.2019, 13:46
На ПЛК тоже светодиодом аварии отмаргивали. Лучше, чем ничего.
Порылся в закромах. Программа старая, под OL 1.7build51 делалась. 8входов. Автор - Василий Кашуба, я макрос переработал под свои цели.
Макрос импульсного указания активного входа (входов)

Да, я смотрел макрос Василия, но это не то, что нужно было мне. Мне нужно было не просто мигать номер активного входа ПР, а отмигивать числовой код, который генерируется внутри программы. А так можно хоть для отображения времени использовать: F1 - часы, F2 - минуты :-)

Сергей0308
01.08.2020, 19:54
Нужен макрос вычислитель корня. Понадобился считать ток электро двигателя с трансформатора тока.

А если возвести в степень 0,5? Так не устроит?
Это если квадратный корень нужен, если кубический, степень = 1/3 и т. д.
Вы же не пишите какой вам корень нужен!

50459

Сергей0308
01.08.2020, 20:59
50460
Нужна функция вычисления значения 0-1 из корня.

Это как, другие значения, вне диапазона 0-1, в вашем предполагаемом макросе не должны вычисляться? Ну ограничьте выход требуемым диапазоном, 0-1, в чём трудность, не могу понять, Вы уж объясните великодушно!

Сергей0308
01.08.2020, 21:12
И что дальше это и ежу понятно что задаем маштаб 0-1 далее что.. причем здесь 0.5

Хотя Вы говорите загадками(про тот же корень), но из ваших заметок, что Вы где-то вырезали, стало понятно, что Вам нужен квадратный корень, поэтому, надо возводить число в степень 0,5! Вы, перед тем как спорить, я обычно всем так говорю, сделайте как я сказал, тогда и все вопросы отпадут, такое впечатление, как будто Вы в школе ни разу не были!

petera
01.08.2020, 21:48
И что дальше это и ежу понятно что задаем маштаб 0-1 далее что.. причем здесь 0.5

Степень 0,5 - корень квадратный
https://owen.ru/forum/attachment.php?attachmentid=50465&d=1596307635

Сергей0308
01.08.2020, 23:37
Тогда от такого Вы точно будете в ужасе:

50466

Алексеев
02.08.2020, 00:19
Тогда от такого Вы точно будете в ужасе:

50466
Вообще то тоже не поверил , все нормально . 5046750468

Любое число в степени ноль --- это единичка --- получается и ноль это не исключение .

Виталик ВВ
12.08.2020, 19:40
мой вариант, на совершенство не претендую, но по размеру гораздо меньше.
вход 1 - постоянное свечение.
входы 2-6 - кол-во вспышек равно номеру входа.
есть приоритет: младший 6, старший 1. т.е. если авария на 5,4 и 1 - то индикация аварии только по 1, при снятии сигнала с 1 входа - 4, и только потом 5.

(делался из желания сократить количество ламп и соответственно сверления отверстий для них в двери щита :))

здравствуйте,какой пароль?

Сергей0308
30.08.2020, 05:39
Вообще то тоже не поверил , все нормально . 5046750468

Любое число в степени ноль --- это единичка --- получается и ноль это не исключение .

Вот здесь пытаются это доходчиво объяснить: https://www.youtube.com/watch?v=7cQ5n9j5Guo

dan75
30.08.2020, 13:31
здравствуйте,какой пароль?
Кстати гря, макрос Алексея ПМ в ОЛ 1.17.249 краснеет и отказывается работать. Описанный им алгоритм можно реализовать, как во вложении этого сообщения. 116 кБ против 619 кБ у Алексея. Наверное, можно сделать и ещё проще. А вот более сложный макрос rovki с int выходом, задержкой сброса и маской сейчас, увы, недоступен.

0005510
14.02.2024, 12:43
спасибо за макрос !!!