большое спасибо
Вид для печати
большое спасибо
Добрый день!
Уважаемые программисты, нет реле под рукой, такая конструкция жизнеспособна?
function_block R_c //Реверсивный счётчик.
var_input //объявление входных переменных
U : bool; //входная переменная с типом данных bool
D : bool; //входная переменная с типом данных bool
Res : bool; //входная переменная с типом данных bool
N : udint; //входная переменная для значения счетчика после сброса
end_var
var_output //объявление выходных переменных
Q : udint; //выходная переменная с типом данных udint
end_var
var //объявление локальных переменных
CounterValue : udint; //переменная для текущего значения счетчика
RTrig : bool; //переменная для определения переднего фронта на входе «U»
RTrig1 : bool; //переменная для определения переднего фронта на входе «D»
end_var
if Res then
CounterValue := N;
end_if
while U and not RTrig and not Res and CounterValue <100 do
CounterValue := (CounterValue + 1);
RTrig := U;
end_while
if not U and RTrig then
RTrig := false;
end_if
while D and not RTrig1 and not Res and CounterValue > 0 do
CounterValue := (CounterValue - 1);
RTrig1 := D;
end_while
if not D and RTrig1 then
RTrig1 := false;
end_if
Q := CounterValue ;
end_function_block
Добрый!
А чем Вас не устраивает стандартный?
Вложение 80549
А так, в принципе, - да!
Но я бы сделал так:
Код:function_block CTN
var_input
U, D, R : bool;
N : udint;
end_var
var_output
Q : udint;
end_var
var
UTrig, DTrig : SYS.RTRIG;
init : bool;
end_var
UTrig(I := U); DTrig(I := D);
if UTrig.Q and Q < 100 then Q := Q + 1; end_if
if DTrig.Q and Q > 0 then Q := Q - 1; end_if
if R or not init then Q := N; end_if
init := true;
end_function_block
Спасибо! оператор WHILE интересовал. Как факт того, что в блоке счётчика два цикла, а переменная CounterValue одна.
Это очень здорово. Все "задышало" по-лучше. Скажите, логические операторы для целых типов в дальнейшем возможно cделать в ST? Пока только для типа bool. Иногда просто необходимо разные маски выделить, в FBD это без проблем, а в ST такое невозможно. Или ошибаюсь? Поправьте
Логические операторы пока только для BOOL, обещали сделать для целых, но никто не запрещал написать функцию самому. Тут есть пример Валенка,
Переключение бит_3++.https://owen.ru/forum/showthread.php...&page=382#3814
Распаковка и упаковка бит в маску через точку, поддержаны уже сейчас.
Вот, Валенок в свое время вдохновил
Добрый день
Есть ли какая-то возможность сделать энергонезависимой переменную в ФБ на ST ?
На самом деле это более правильный путь, делать внешние переменные энергонезависимые. Аналог In_Out и к ним привязываться. Делал такое еще на макросах в FBD. Чтобы целиком FBD не делать энергонезависимым со всеми потрохами.
Подскажите, как запаролить в OWENLogic ФБ, написанный на ST???
Вложение 81133Код:///<Password>Parol</Password>
Я правильно понял, что ДОКУМЕНТИРОВАНИЕ будет работать только после импорта в менеджер компонентов? А это может сделать только ОВЕН?
Все получилось!!! Спасибо
Простой регулятор для управления регулирующим клапаном в режиме трехпозиционного управления (дискр: открыть/закрыть). Использовал в проектах для ПЛК (в CDS2 и 3) для поддержания уровня воды, температуры, разрежения, давления и т.п. В ПР еще не использовал. Если есть у кого то возможность испытать, то подскажу как настроить.
Тип файла: .fbst
Посмотреть работоспособность можно при помощи эмулятора объекта
https://owen.ru/forum/showthread.php...l=1#post447749
и тут показывал на примере собственного ПИ-регулятора
https://owen.ru/forum/showthread.php...l=1#post447950
И ещё интересно описание алгоритма - как формируются импульсы, какие функции и ограничения присутствуют (от взвинчивания интегральной и др.).
Покажу, как свой описывал
https://owen.ru/forum/showthread.php...l=1#post430251
Ваш ФБ запаролен, нет описания алгоритма, ограничений, связанных с ним. Т.е. ничего не понятно - нет возможности понять назначение и рабочие диапазоны значений входов.
Если бы я начинал работу с Овен ПР и ел, что дадут - ФБ PD_CEkip_v2_ был бы мне полезен, наверное, наряду со множеством других ШИМ от других пользователей или связки PID + RegKZR от Овен.
Мне кажется, что инструменты, предлагаемые другим людям для работы, нужно описывать или так, как показал по ссылкам или даже подробнее, как в моём бложике, чтобы у пользователей было меньше вопросов
https://www.cyberforum.ru/blogs/534277/8438.html
https://www.cyberforum.ru/blogs/534277/8667.html
Это просто критика, надеюсь, будет услышана. Хотел просто проверить работу Вашего ФБ с эмулятором объекта и не смог - описания не хватило.
Эмуляторам не верю ))). Живой объект это другое
Тут другой вопрос есть.
Хочется алгоритм PID написать в виде программы на C#. Примеры PID на C# находил, но вопрос в другом, как написать режим автонастройки ?
Может у кого есть на ST готовый PID с режимом автонастройки ? с ST еще худо бедно на C# переведу. с FBD наверное будет куда сложнее.
Ну вот и хотелось бы написать вариант без патентных прав.
Не вдаваясь в нюансы и в подробности, код Гистерезиса для примера
Суть, выполнять несколько экземпляров программ из Scada системы с возможностью управления модулями В/В без контроллеров.Код:public class Hysteresis()
{
public bool EN; // входная переменная разрешающая работу программы
public double inCnl;
public double low;
public double high;
public bool mode = true; // По умолчанию нагрев = true, охлаждение = false
public bool Q; // Выход гистерезиса
public ushort cycle; // Задание цикла выполнения программы в мс
public bool terminated = false; // Переменная остановки цикла для остановки программы и(или) для закрытия потока
bool _mode;
public void Run()
{
// Копирование входных переменных во внутренние программы
bool res = false;
do
{
if (EN)
{
// Копирование входных переменных во внутренние в начале цикла программы
_mode = mode;
// Инициализация выходных переменных если требуется.
res = Q; // для возможности задания retain при перезапусках
// тело программы
if (_mode)
{
if (inCnl < low) res = true;
if (inCnl > high) res = false;
}
else
{
if (inCnl < low) res = false;
if (inCnl > high) res = true;
}
// тело программы
// Копирование выходных переменных из внутренних в конце цикла программы, для некоторых необязательно, будут обработаны программой
Q = res;
// Задание времени цикла
Thread.Sleep(cycle);
}
}
while (!terminated);
}
}
Вот PID бы аналогично сделать, но доступный и каким-то образом прикрутить еще автонастройку. Типа запустил на Н-ное время, потом получил в каналах Scada соответствующие коэффициенты. Вбил их в основную программу и запустил на постоянку.
Можно попробовать у ChatGPT алгоритм спросить, или попросить написать :-)
да алгоритм самого PID для C# я находил толи на GIT толи еще где. Тут вопрос больше в сторону автонастройки, ее замутить так же кодом.
Выдалось время и попробовал проверить с эмулятором объекта управления, заодно и описание внимательно прочитал.
Теряюсь с определением названия регулятора. Т.к. на приводе интегрирует, то, если считать выход ПИД эквивалентом положения КЗР, регулятор ближе к ПИ (RU_KP - это Ти, RU_KD - это Кп).
Отличие от моего и от связки PID+RegKZR состоит в
- усечении большого времени импульса до времени пересчёта,
- не накапливании ничтожно малых расчётных импульсов, для одного минимального, т.е. фактическое отсутствие интегрального звена и проявление статической ошибки регулирования пропорционального регулятора (когда рассогласование не позволяет переместить клапан, но уставка так и не достигнута)
- и по этим причинам отсутствует взвинчивание интегральной составляющей. Такое диалектическое поведение - "наши сильные стороны являются продолжением отрицательных черт".
Единственно, поначалу сбивает с толку соотнесение параметров с Кп и Ти "аналогового" ПИД и, соответственно, их первое приближение для начала наладки.
По подобному принципу работает регулятор ТРМ32
D=2.5*K*(E+T*dE)
и незримо в этой формуле параметр S - период пересчёта, а также минимальное время импульса и зона нечувствительности.
Только в ТРМ32 происходит накопление малых импульсов.
В РЭ ТРМ32 есть и рекомендации по подбору параметров.
Работать должно, как и прибор с аналогичным алгоритмом.
Приложу программу с эмуляцией работы для ПР205 - т.к. у него эмулируется дисплей.
SP - уставка
PV - переменная процесса, измеренная на объекте
ПИД - выход ПИД регулятора - заполнение импульса ШИМ, %
Pos - позиция клапана после всех воздействий с учётом люфтов, времени полного хода и прочего, %
Помеха - помеха, приведённая к положению клапана, % (т.е. как бы клапан немного смещается от постороннего воздействия)
Концевые - состояние концевых выключателей
Направление - направление перемещения
Добавлю, что для эксперимента меня интересовало поведение регулятора с учётом существования люфта и даже более - неравномерного люфта. Поэтому там такие значения.
На втором экране - настройки Кп и Тд.
У меня задумка, заливать тестовые программы в ПР и при помощи готовых программ по Modbus получать значения и строить графики. Кажется, это может Owen Configurator, но для новых Windows 10/11.
Поэтому подготовил сетевые переменные, но до графика руки не дошли.
Я уже писал, что эмулятором не верю. Есть конкретные объекты, где все работает. Точность регулирования устраивает. Регулятор не сложный. Ваш регулятор пробовал, так и не смог настроить на объекте. Отказался от него.
В приложении "ТП" - красный тренд это поддерживаемая температура. Есть не стабильность в давлении пара в греющем контуре (светло-фиолетовый тренд) и все прекрасно отрабатывает (голубой тренд - положение клапана РК3). Лишних сработок нет - только по делу )))
Регулятор можно использовать без зоны нечувствительности - эту функцию выполняет параметр "мин. время импульса", чем оно больше, тем больше погрешность регулирования.
Также могу приложить и тренды и по уровню воды и т.п.
К эмуляторам придёте со временем. Пока нет смысла обсуждать. Они требуются для проверки самодельного ФБ, чтобы алгоритм отладить до выхода на объект, а на объекте только подбирать коэффициенты. В рабочей программе эмуляторы не нужны.
Затрудняюсь объяснить причины неудачи с моим регулятором. Не сразу, но настроил его для теплосети, т.е. и лично у меня есть успешный пример. По сходному алгоритму делал и раньше, но там требовалось делать пересчёт интегральной для поддержания выходной мощности ПИД примерно посередине диапазона разрядности числа - лишняя морока.
Хочу для себя сделать вывод трендов на период наладки в какой-нибудь бесплатной программе. Ваши тренды в какой программе построены? Или может посоветовать можете?
Судя по картинке, это simple scada.
Спасибо. Хочется чего-то простого в настройке - настроить соединение, адрес устройства, регистра, масштаб, период опроса и наслаждаться.
Пока присмотрел, но не проверял
https://github.com/MSoftwaree/modbus-history-chart
https://www.elemer.ru/po/modbus_config.php
до смены компьютера на другой с Windows 10/11 не рассматриваю, но в Owen Configurator будто бы добавили графики (работают только для Win 10/11).
RapidScada. Если надо будет посмотреть графики с масштабированием, то Графики Про. Можно на сайте генерировать бесплатные ключи, если не требуется полноценной работы. Ключи действуют до конца следующих суток.
Спасибо большое.
Здравствуйте , возможно вопрос уже подымался, интересует ПИД регулятор , если он на ST или это не к чему на ST
Здесь пример использования обычного ПИД с сохранением настроек https://owen.ru/forum/showthread.php...74&page=51#505
На форуме выкладывали ПИД и на ST.
Если речь об аналоговом регулировании, то берите из библиотеки компонентов PID_ - он без автонастройки, но для большинства наладчиков это не проблема. При смене платформы не придётся судорожно переделывать с аппаратного, на программный.
С автонастройкой есть аналоговый ПИД, но он аппаратный и доступен не для всех моделей ПР - если ПР его поддерживает, то он будет присутствовать среди макросов проекта.
Если речь о ПИД для 3-позиционного управления без обратной связи по положению привода, то тут я выделяю 2 подхода:
- примерно соответствующий аналоговому регулятору
- просто формирование импульсов, ширина которых меняется по какому-нибудь закону регулирования, иногда похожем на ПИД
Если есть опыт настройки аналоговых регуляторов - берите мой
https://owen.ru/forum/showthread.php...l=1#post430251
и в сообщении ниже.
Проверял его и на объекте и на эмуляторе
https://owen.ru/forum/showthread.php...l=1#post447950
Если регулятор должен быть понятным и близким к двухпозиционному - пока значение меньше уставки - давать импульсы открытия, как стало выше - на закрытие, и при этом ширина импульсов меняется от величины рассогласования, то тогда берите любой другой вариант с ШИМ, например, на несколько сообщений выше.
https://owen.ru/forum/showthread.php...l=1#post454516
или поищите другие варианты.
Тут весь вопрос - в личном опыте ручной настройки регуляторов.
Лично мне ближе аналоговые, поэтому и мой 3-позиционный воспроизводит его поведение. Но его поведение не понятно многим.