PDA

Просмотр полной версии : ПЛК 63 в примерах



kucherik
26.09.2011, 09:41
Общее описание:
приведено три схемы электрические принципиальные для реализации варианта с гидравлической схемой. Для примера будет использоваться самая простая (нижняя). Следующим этапом будут описываться модули и пример для реализации всей связки. функции и взаимосвязи. Постараюсь дать как можно более простую рабочую среду. В дальнейшем собираюсь на этом примере его развить и усложнить примеры (если будут таковые пожелания)

С уважением Kucherik

Николаев Андрей
26.09.2011, 23:58
Симпотично.
Для себе мастерим?

6751149
27.09.2011, 12:30
Ждём-с........

kucherik
10.10.2011, 09:27
Для себя уже смастерил, просто стоит задача, "развлекательная", упражнения для ума и тела, сделать систему которая впишется в шиток 12*2 автоматов. И так получилось что данная реализация совпала. А так как я за свободу информации, вот и выкладываем.

Как и обещал начинаю выкладывать описания на функциональные блоки для моего частного случая (использование плк 63 в качестве контролера отопления). Данный пример больше подходит для тепловых узлов и небольших котельных. Узел ГВС выполнен в виде бойлера. Основываясь на цели облегчения понимания работы данной программы принял решение писать модули на CFC и SFC. В тех случаях когда это сложно буду выкладывать два вида, т.е. дополнительный сделанный на других языках поддерживаемых CoDeSys. А в совсем сложных случаях предлагаю воспользоваться описанной функцией как готовым блоком. В будущем и возможно для кого то уже сейчас можно это все скомпоновать в библиотеку. Призываю всех желающих поучаствовать в написании функций и их устройства, не скупиться на комментарии.


ШАГ 1 — инициализация, обработка сигналов

Базовая часть программы используется стандартное PLC_PRG рекомендую использование SFC, так как в нем достаточно просто реализуется шаги МЭК для режима инициализации и работы. В конечной реализации программы в первом шаге будут производиться инициализация входов-выходов и другие действия «холодного старта» программы.
Первое с чем сталкивается пользователь это работа с датчиками, я не описываю в данном примере получение значений. Это хорошо описано в руководствах, хотя и будут примеры когда используются устройства подключенные по ModBus. Однако есть задача и со стороны программиста проверить корректность получаемых значений. Для этих целей я использую два функциональных блока SensorReal и jitter.
SensorReal контролирует диапазон получаемых значений и в случае выхода их из него выдает аварию датчика и Подменяет значение в случае выхода из диапазона, это может происходить в случае обрыва или короткого замыкания датчика. Данных функциональный блок в двух видах один в CFC другой на IL (делал из удовольствия и ностальгии по ассемблеру). Структура достаточно простая производятся сравнение с максимальным и минимальным значение и в случае выхода за диапазон выдается сигнал авария и одновременно с этим подставляется для выхода значение по умолчанию.
В некоторых случает значение параметра остается диапазоне но перестает меняться, что говорит тоже о неполадках с датчиком. Данный блок jitter (с анг. дрожать) состоит всего из трех элементов, первый сравнивает изменилось ли значение с последнего момента исполнения кода данного функционального блока, если разница есть, то второй блок это таймер задержки включения TON, в данном случае он выполняет функцию по задержке подачи аварийного сигнала, то есть дает время значению измениться, если это не происходит в течении указанного времени то на выходе появится аварийный сигнал. Третий элемент постоянно выполняет копирование значения со входа в память функционального блока в случае если есть между ними разница. Хотя можно было бы и не использовать EN/ENO и выполнять копирование постоянно, но так более правильно с точки зрения написания кода, например кто-то баловался с порядком обработки блоков и поменяет последовательность и копирование начнет теперь выполняться раньше чем было произведено сравнение, получится постоянная авария с этого функционального блока.

Дополнительный комментарий
Обработку сенсоров я предпочитаю выносить в отдельный программный блок, это более удобно, а здесь буду использовать вариант с шагами SFC чтобы показать стандартный порядок обработки данных и в нем сложнее допустить ошибку. Т.е. это не правило пишите так как вам удобно. Сначала описание базовой части производится без привязки к контролеру, однако к шестому шагу все соберется в одну кучу.

ШАГ 2 Два варианта вычисления погодозависимого графика
ШАГ 3 Работа с насосами (отопления, бойлера)
ШАГ 4 Работа с трехточечным сервоприводом отопления
ШАГ 5 Аварийные ситуации
ШАГ 6 Финальная сборка и привязка к ПЛК63
ШАГ 7 Отображение данных

kolyan
10.10.2011, 18:46
Очень интересно!
Ждём с нетерпением продолжения.
К сожалению, обычно примеры приводят для ПЛК-100 или ПЛК-110.
Но, у ПЛК-63 - множество особенностей (особенно, кнопки управления, дисплей).
RS-485 также в режиме мастер не совсем стандартно организован.
Поэтому, увидеть реальный проект, да ещё и связанный с мини-котельными - это очень актуально и интересно!

kucherik
12.10.2011, 10:54
Как уже писал, сначала это не привязано к железу, как сделаю основу только тогда произведу привязку в данном примере к ПЛК 63, хотя я уже выкладывал проекты на 100 и 110. Здесь просто цель создать руководство типа how-to. Наверно, но не точно, я еще фотки этого щитка выложу.

Итак продолжение....

ШАГ 1 — инициализация, обработка сигналов
ШАГ 2 Два варианта вычисления погодозависимого графика

Итак, второй шаг для создания погодозависимого регулирования можно описать как два варианта подхода к построению графика отопления. Отдельно надо отметить режим управления включение и отключением насоса отопления. В случаях аварийных ситуаций, в данной электрическое схеме предусмотрено безусловное включение насоса (для защиты от замерзания, а так же в случае отключения контроллера, например для ручного управления). Сейчас большинство значений указываются как константы, для того чтобы можно было сразу проверить функциональность, на шестом шаге большинство из них будет уже привязано к дисплею или другим параметрам получаемых например по RS485.
Самый простой способ вычисления это прямая, однако у нее есть пара недостатков, это отсутствие излома при -10 градусах, так же сложность коррекции к характеристике здания для получения максимально экономичного режима. Эти недостатки можно устранить используя коррекцию по температуре помещения (этот пример будет рассмотрен вне данного изложения).
Для теплого пола, когда нет такой необходимости поддержания широкого температурного диапазона или не требуется такая точность, метод вполне годится. Поэтому используется модуль PogodaLinear. Этот модуль состоит из вычитающего элемента который определяет насколько температура наружнего воздуха ниже точки начала отсчета работы системы отопления, затем полученное значение умножается на «наклон». И далее прибавляется к минимальному значению температуры которое необходимо поддерживать в системе. И на выходе элемент LIMIT для приведения вычисленных значений в рабочий диапазон.
Для линейной аппроксимации графика лучше всего подходит элемент curve из библиотеки util. Но там он сделан только как тип int, поэтому я выцедил его и переделал в real. Для работы так же пришлось создать пользовательский тип переменной oGraf. При выполнении импорта CURVELINE сама функция и пользовательская переменная включены в файл.
Теперь надо выполнить инициализацию пользовательского массива, минимум для него это три точки — начало отопления, точка излома при -10 градусах и максимально низкая средняя температура декады, для Москвы -28. Я предпочитаю добавить еще две промежуточные точки — 0 градусов и -20. Таким образом для данного примера используется 5-ти точечный график аппроксимации. Диапазон возможного количества точек лежит от 2 до 11. На первом шаге надо проинициализировать массив графика, для облегчения реализации и из-за отсутствия контроля корректности вводимых значений часть промежуточных точек также введены как константы.
В итоге получили вычисленные температуры для контуров. Осталось включить насосы и привязать управление сервоприводом.

Дополнительный комментарий: Кому нравится вариант как сделано на ТРМ32 можно взять 2 точки и получите аналогичную реализацию. Массив объявлен на максимальное количество точек 11.

ШАГ 3 Работа с насосами (отопления, бойлера)
ШАГ 4 Работа с трехточечным сервоприводом отопления
ШАГ 5 Аварийные ситуации
ШАГ 6 Финальная сборка и привязка к ПЛК63
ШАГ 7 Отображение данных

ASo
12.10.2011, 11:02
Простите великодушно, а чем вас стандартные функции и переменные для работы с графиками не устраивают? Количеством точек?

kolyan
12.10.2011, 13:41
А что, если в ФБ Sensor_Real применить в качестве основы ФБ из Owen_Fb_Lib Decode_Float?
И, от себя уже, добавить контроль min и max температур ( хотя, это и не совсем обязательно, т.к. данный ФБ выполняет проверку и на выход значений за допустимые пределы).

Этот ФБ, кроме всего прочего, выдаёт на выходе один из 10 кодов, в которых зашифрован вид неисправности датчика.
А, в дальнейшем, можно вывести на дисплей расшифровку с указанием вида случившейся неполадки с датчиком (а не просто alarm).
ИМХО, это значительно облегчает поиск неисправностей во время наладки или эксплуатации на реальном объекте.

Например, вот так:

kolyan
12.10.2011, 14:47
Или же, ещё упростив, такой вариант:

LAM
12.10.2011, 23:26
Присоединюсь к обсуждению:
В качестве погодозависимого графика я у себя использовал функцию из библиотеки OSCAT, очень даже ничего получилось, Я не знаю почему, но в ОСКАТе и у Кромшрёдера эти графики очень похожи.

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

Так вот как я вносил поправку и почему:
Ттепл=Трасч+DT*K; где:
Ттепл - необходимая температура теплоносителя уходящего в контур.
Трасч - температура теплоносителя расчитанная по погодозависимому графику.
DT=Туст-Тизм - разница между измеренной температурой помещения и уставкой.
Туст - уставка температуры помещения.
Тизм - температура измеренная комнатным датчиком.
K- коэфициент пропорциональности, его прийдется подобрать опытным путем, потому что, чем меньше это число тем ниже точность поддержания температуры, а если перебрать, то возможен выход системы из равновесия (температура в помещении начнет колебаться по синусоиде с очень большим интервалом времени).
В своем случае я подставлял коэфициент =30.

Да, я согласен, что при таком регулировании я никогда не выйду на уставку, но точность поддержания температуры у меня получилась 0,1-0,5 градуса.
Ну что-то где-то так.

P.S. Некоторые комнатные термостаты вообще показывают температуру с шагом 0.5 градуса, и выставить уставку на них возможно с таким же шагом.

kolyan
13.10.2011, 10:43
Присоединюсь к обсуждению:

Да, я согласен, что при таком регулировании я никогда не выйду на уставку, но точность поддержания температуры у меня получилась 0,1-0,5 градуса.
Ну что-то где-то так.

P.S. Некоторые комнатные термостаты вообще показывают температуру с шагом 0.5 градуса, и выставить уставку на них возможно с таким же шагом.


0.1 - 0.5 Градуса Цельсия - это отличная точность поддержания температуры для такой инерционной и нестабильной системы!

Кстати, похожая методика с пропорциональным управлением уже высказывалась автором этой ветки (Kucherik) в другой теме:

http://www.owen.ru/forum/showthread.php?t=3963

kolyan
13.10.2011, 11:33
Уважаемый LAM!
А можно узнать название Oscatо'вской библиотеки?
А, ещё лучше, примерчик на её основе.

LAM
13.10.2011, 22:41
http://oscat.de/index.php?option=com_content&task=blogcategory&id=28&Itemid=57

Там у них три библиотеки (Basic, Network, Building) по моему Network и Building без Basic не работают.
Очень огромное количество всяких функций.
Я использовал функцию HEAT_TEMP.

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

kolyan
13.10.2011, 23:11
http://oscat.de/index.php?option=com_content&task=blogcategory&id=28&Itemid=57

Там у них три библиотеки (Basic, Network, Building) по моему Network и Building без Basic не работают.
Очень огромное количество всяких функций.
Я использовал функцию HEAT_TEMP.

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

Oscat библиотеки у меня имеются, только не изучал их толком)))
Нужно будет посмотреть.

Интересно.
HEAT_TEMP, как я понял -это погодозависимый регулятор температуры внутри помещения в завасимости от наружней температуры.
И его, как я понял, можно применить и для регулирования не комнатной температуры, а для регулирования температуры прямой воды в контуре отопления?

kucherik
14.10.2011, 23:38
Уважаемые форумчане отвечаю, на возникшие вопросы и обсуждения как появляется свободное время. А сейчас увы в моей конторе сезон. поэтому ближе к выходным только получается в интернете полазить.
ASo - стандартные это хорошо, но сейчас просто стоят задачи сделать просто и наглядно, к тому же есть такой момент который описан, что стандартная charcurve работает с переменными только типа int. Поэтому и переделал. Если знаете другие альтернативы, прошу высказываться а лучше выкладывать для обозрения.
kolyan - интересный вариант с обработкой датчиков, надо проверить как работает, просто в этой ветке задача изложить как можно проще материал, ведь он может кем-то использоваться как пример для обучения. Диагностика неисправности дело пары минут, достаточно посмотреть на значения, а выход за диапазон я использую для привязки к технологическим параметрам объекта, ведь диапазон датчика шире чем в контролируемой зоне
LAM - достаточно интересная библиотека и как вижу Open Source. Я как раз сразу после этого сообщения выкладываю два шага, включая управление, так вот мертвая зона должна быть во всем, идеальный механизм без зазоров не работает, а линейный коэффициент можно вычислить, хоть и тяжко это, подобрать бывает быстрее.
Рад что ветка привлекает людей, и уже вижу результат, что заставляет работать более быстрее %)

Далее я стараюсь использовать стандартные библиотеки, хотя для меня не составляет большой проблемы написать функции и без их использования. Это пишу с целью чтобы было как можно проще и понятней. Если смотрели мои предыдущие работы они выкладывались как есть без комментариев и прочего. А тут надо дать базу и на ее основе развить и усложнить, базовую часть планирую закончить за 1-2 недели, и думаю успею собрать пример в железе.

Модераторы хотелось бы услышать Ваше мнение, может что надо будет подкорректировать

kucherik
14.10.2011, 23:46
ШАГ 1 — инициализация, обработка сигналов
ШАГ 2 Два варианта вычисления погодозависимого графика
ШАГ 3 Работа с насосами (отопления, бойлера)

Достаточно простой шаг, тут сложно допустить ошибку, так как в данном примере всего один насос, но в качестве дополнительного бонуса хочу изложить работу с насосом бойлера. Так как наиболее часто встречается что у людей один контур отопления, а второй используется для управления бойлером. В этом случае на выход обязательно устанавливать дополнительное развязывающее реле, вместо точки подсоединения второго сервопривода. А датчик второго контура соответственно устанавливается в бойлере.
Для работы с бойлером я использую функциональный блок Boiler. Как видно из состава блока он как и другие достаточно просто устроен, однако здесь используется триггер SR (не забываем использовать библиотеку standart). Его особенность заключается в том что преимущество имеет сигнал включения, для случая одновременной подачи единиц на оба входа. Сигнал с датчика бойлера сравнивается с минимальным значением для включения и логический результат проходит через элемент OR, который добавляет альтернативное включение в случае внешней аварии или если вы захотите привязать сюда родной термостат бойлера. На выходе SR стоят два таймера, хотя достаточно одного. Это типовая конструкция которой я пользуюсь для исключения «дребезга» насоса при недостаточно узком коридоре значений. Обращаю внимание на то что переменные TBoilMin и TBoilMax уже объявлены и в случае если вы не произведете их инициализацию, будут использованы уставки по умолчанию 47-55 градусов Цельсия.
Логика работы насоса отопления основана на двух моментах. Первый, в случае отказа датчика наружнего воздуха или датчика отопления насос должен включиться. Второе, для экономичного режима и чтобы избежать перегрева логично отключать насос отопления при превышении температуры наружнего воздуха, некоего значения. Как видно из примера изложенного для бойлера логика такая же, только вместо минимальной температуры, значение при которой включается система отопления, а для максимальной когда выключается. Параметры по умолчанию соответственно 8-12 градусов Цельсия. Еще одно отличие это время задержки включения-выключения в 5 минут. Если кому важно включать и выключать без задержки удалите таймеры ton и tof. Но они выполняют достаточно нужную функцию, если пользователь задаст малую разницу между значения зима-лето, или вообще перепутает их местами то переход через значение зимы по температуре наружнего воздуха вызовет непрерывное включение и выключение насоса. Важный момент это элемент MAX он нужен для защиты от «дурака». Чтобы не заморозили систему отопления, в практике встречались случаи когда ставили европейские +3 градуса, как защиту от замерзания и заморозили систему отопления.

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

ШАГ 4 Работа с трехточечным сервоприводом отопления
ШАГ 5 Аварийные ситуации
ШАГ 6 Финальная сборка и привязка к ПЛК63
ШАГ 7 Отображение данных

kucherik
14.10.2011, 23:47
ШАГ 1 — инициализация, обработка сигналов
ШАГ 2 Два варианта вычисления погодозависимого графика
ШАГ 3 Работа с насосами (отопления, бойлера)
ШАГ 4 Работа с трехточечным сервоприводом отопления

И так мы дошли до управления трехточечного сервопривода. Переводя на понятный язык у него один общий контакт и два контакта управления, соответственно открывающие или закрывающие смеситель. Особенность работы системы отопления и данного привода является следующие моменты. Интегральная составляющая , например в случае ПИД регулятора не требуется, так как положение сервопривода и есть «память» которая запоминает текущее значение накопленной ошибки. Обращаю внимание на то что в случае работы с регуляторами управляемыми напряжением интегрирование придется выполнять программно. Теперь надо коснутся вопроса необходимости в дифференциальной составляющей уже в ПД регуляторе.
Система отопления когда проектируется в ней закладываются диаметры труб из расчета чтобы скорость течения жидкости (воды) в них не превышало 1 метра в секунду. В конвекторах эта скорость еще больше падает для эффективной отдачи тепла. Если взять типовую схему отопления среднего коттеджа на 150 метров, эффективная протяженность труб примерно составит 70 метров для одного этажа. То есть если бы у нас производилось прямое измерение температуры воды то отклик системы на единичное воздействие мы получили не раньше 70 секунд, а ближе к реальным условиям не раньше 2х минут.
Берем теорему Котельникова (http://ru.wikipedia.org/wiki/Теорема_отсчётов_Уиттакера_—_Найквиста_—_Котельник ова_—_Шеннона) там есть два важных следствия:
- Любой аналоговый сигнал может быть восстановлен с какой угодно точностью по своим дискретным отсчётам, взятым с частотой f > 2fc, где fc — максимальная частота, которой ограничен спектр реального сигнала.
- Если максимальная частота в сигнале превышает половину частоты дискретизации, то способа восстановить сигнал из дискретного в аналоговый без искажений не существует.
Вывод максимальное время изменений должна или быть выше соответственно времени отклика системы или ее линейный коэффициент должен укладываться в погрешность измерения системы. Как и любая система она должна работать с определенной погрешностью (зазорами для механиков %) ). Поэтому важно ввести понятие мертвой зоны (DeadZone), по умолчанию я обычно использую ± 2 градуса Цельсия. Чуть ниже объясняется откуда это берется. А теперь коварный вопрос а ниже какой величины не может быть время ожидания (ответ в дополнительном комментарии).
Второй вывод для системы отопления дифференциальная часть не нужна, мы и так работаем значительно быстрее чем получаем отклик от системы отопления.
Ну вот все выше изложенное это эрзац теория, теперь вернемся к определению DeadZone. Берем типичный пример у меня используется сервопривод с временем от одного крайнего положения до другово с временем 120 секунд. Температурный диапазон который обеспечивает смеситель от 20 до 80 градусов Цельсия. Значит если я выберу однократное воздействие длительностью 1 секунду то через время отклика системы (очередная оговорка, что график смесителя линеен ( неправда :) )) при известной и постоянной температуре котла я получу изменение в 0.5 градуса (80-20=60, 60/120=0.5). Берем время ожидания 30 секунд, между импульсами и получается что 2 минуты или 120 секунд делим на 30 получаем четыре импульса или 2 градуса. А это и есть мертвая зона. И воспользовавшись данным определением мы попадем примерно в «середину» нужного нам значения.
Прошу прощения за данный «мутный» подход он нужен был для определения принципов работы и необходимых параметров, формулы для определения нужных Вам параметров теперь есть в наличии. Приведу памятный пример сложного случая из практики. Промышленная котельная на 7 мегаватт, вместо классического смесителя используются две поворотные задвижки работающие в противофазе, но подкрался незаметно один момент, время открытия-закрытия сервоприводов составляло всего 3 секунды. Для модуля МДВВ минимально допустимая длительность ШИМ импульса составляет 50 миллисекунд и не может быть изменена. Значит я получу примерно 20 ступеней на секунду, и соответственно 60 на весь диапазон. Измерив значение отклика системы я увеличил время ожидания, что остаться в том же значении мертвой зоны.
Теперь об устройстве P3Servo функционального блока. Цель его написания, простой и понятный функциональный блок, без обратной связи, запоминания положения, и прочего. Потом в дополнительном обзоре можно будет усложнить. И так входное задание сравнивается с сигналом плюс-минус мертвая зона, решение об этом подается на таймер TP который генерирует импульс заданной длительности, c выхода двух TP берем сигнал обратной связи для блокировки, на время ожидания отклика системы. Именно для работы блокировки добавлены элементы AND. Обращаю внимание выход таймер с инверсией. Наверно это самый сложный функциональный блок который я использую в этих шагах. Значения переменных инициализированны по умолчанию. DeadZone=2, Время импульса PulseTime=2 секундам , WaitTime=30 секундам.

Дополнительный комментарий: Минимальное время которое можно указать для ожидания определяется длиной трубопровода от смесителя до точки измерения +инерционность датчика, его тип. Например накладной датчик это плюс две секунды минимум (10 секунд максимум). Это важно в системе ГВС, когда используется теплообменник тут надо считать расстояние от смесителя до теплообменника, прибавить его эффективное расстояние и расстояние от него до датчика температуры. Для регулирования придется использовать уже ПИД регулятор. Если быть честным то ПД регулятор. Так как система ГВС не такая инерционная как система отопления. Хотя если все таки повезет и на ОВЕНе соберу систему управления, может доведу задумку адаптивного вычисления и двух сенсорного контроля до практики %)

ШАГ 5 Аварийные ситуации
ШАГ 6 Финальная сборка и привязка к ПЛК63
ШАГ 7 Отображение данных

CEkip
15.10.2011, 17:13
А что если WaitTime привязать к значению рассогласования, т.е. ввести П-составляющую.

kucherik
17.10.2011, 14:16
А что если WaitTime привязать к значению рассогласования, т.е. ввести П-составляющую.


Можно, но в определенном пределе. Вроде бы я, в предыдущем шаге объяснил взаимосвязь между PulseTime-WaitTime-DeadZone, эти параметры очень тесно связаны друг с другом, и менять их произвольно это ввести систему в режим автогенерации.

С уважением, Kucherik

LAM
19.10.2011, 18:49
Вобщем кому интересно, выкладываю свою версию управления тремя контурами отопления. В частности в плане управления трехходовым много подсмотрено у Kucherika.
Говорю сразу, все очень сыро, но вроде работает :-)
Проект под ПЛК110-xx.60.Р-М.

IIIaMbI4
20.10.2011, 20:43
2kucherik: не подскажете какая целевая платформа ПЛК ОВЕН63? Имеется ввиду организация памяти M or L?

kucherik
20.10.2011, 20:51
2kucherik: не подскажете какая целевая платформа ПЛК ОВЕН63? Имеется ввиду организация памяти M or L?

Без разницы, будет работать на любом. У меня тип М.
К нему и делаю привязку чтобы людям было проще более сложные вещи реализовать.

И так уважаемые, выкладываются фотографии этого бокса

у меня миниатюры отображаются не корректно, если так у многих выложу единым архивом

LAM, сейчас смотрю программу, все на ST %) сам любил такой подход однако пришлось по извращаться на FBD, теперь можно на чем угодно писать, хоть LD. как досмотрю отпишусь

kucherik
20.10.2011, 20:59
Теперь к вопросу стоимости этого чуда
контроллер понятно по прайсу ОВЕНа
Бокс примерно 600 рублей
Автоматы по 80 рублей * 8 = 640
лампочки и реле не нашел в магазине
пришлось взять со склада рублей 500-700 тоже.
Если добавите необходимые датчики, получите двухконтурный боксик примерно за 15 000 рублей,
а если добавите дополнительный модуль МР1 см. прайс (очень вкусное дополнение), то можно сделать полноценный четырех контурный.

Добавить гермовводов по вкусу и "поперчить"

p.s. собрал бокс для тестирования программы, не хотелось бы выкладывать не проверенный код, сейчас полирую, до конца следующей неделе. будет финал %)

LAM
21.10.2011, 12:27
Я кстати тоже задумывался о сборке автоматики в пластиковом боксе, в принципе все очень красиво получается.
Единственное что пока останавливает - не придумал пока красивого решения по поводу панели оператора.

В принципе есть идея сделать модульную систему, например:
Основной модуль - ПЛК110 - 1шт и МВ110-8А - 1-2шт (если 1 - перекрывает 3 смесительных контура, если 2 - перекрывает до 6 смесительных контуров). Но эта идея как-то пока недодумана, пока много вопросов.

Кстати ПЛК110 очень хорошо влазит в бокс ABB из серии IP65 (в частности у меня такой на 12 модулей валяется, только что специально примерял код ABB 127520020) там дин рейка на пластиковых вставках поднята, так вот если эти вставки вытащить и подложить по пару шайб, то ПЛК влазит очень четко практически без зазоров, и видна только лицевая панель с разьемами, кнопками и светодиодами, и никаких клемников невидно, они аккуратненико закрыты.
Но вся прелесть - что ничего подрезать ненужно, да и стоимость этого бокса не заоблачная.

kucherik
23.10.2011, 19:43
ШАГ 1 — инициализация, обработка сигналов
ШАГ 2 Два варианта вычисления погодозависимого графика
ШАГ 3 Работа с насосами (отопления, бойлера)
ШАГ 4 Работа с трехточечным сервоприводом отопления
ШАГ 5 Аварийные ситуации

Для начала надо разобрать логику работы, и что надо делать при аварийных ситуациях. И когда должно приниматься решение, что система в аварийном режиме. В данном случае, я опишу типовую логику. Для начала надо чтобы проверилась аварийная индикация, для этого в шаг INIT закладываем таймер, который задержит начало программы (до этого момента INIT у меня был пустым). Так как сигнал аварии в данном случае инверсный, то надо принудительно перевести все выходы в выключенное состояние. Время таймера в каждом случае выбирается исходя из технологических требований. Для систем отопления есть один момент, который называется гидроударом. Суть этого явления заключается в том что вода сразу не останавливается и содержит энергию движения, поэтому насос отопления, особенно когда они с резервированием, не переключают сразу, а нужна пауза на «успокоение».
Тоже надо сделать и в данном случае, или поддержать насос во включенном состоянии или сделать паузу чтобы не дергать насос (меня устраивают оба варианта). А в данном примере это уже сделано, если помните в насосе есть пауза для включения-выключения насоса отопления. Следовательно когда после снятия сигнала аварии, по схеме принципиальной насос выключится, если не будет сигнала на включение насоса. А в аварийном сигнале так же есть задержка на подачу сигнала авария в 1 минуту, после старта программного цикла.
Теперь коснемся работы смесителей отопления, для случая отопления в аварийной ситуации (тут возможно только в случаях отказа датчиков отопления и наружного воздуха) нам надо открыть смеситель на максимум, а вот для теплого пола такое делать противопоказано. для него лучше всего заблокировать смеситель в текущем положении до устранения аварийной ситуации (для него соответственно это отказ наружного воздуха или датчика контура). Логичные изменения данных утверждений вы встретите в шаге 4 (step4), для смесителей, в шаге 3 (step3), для насоса. Как можно было бы это выполнить для смесителей, но не стал делать. Например в случае аварии любого датчика, выводить в качестве задания, максимальную температуру контура, но в данном случае надо бы задуматься над ресурсом реле.
Обещаю выложить дополнительный пример который ограничивает количество срабатываний и бережет ресурс реле. Просто не хочется усложнять это пример.
Для обработки аварийных ситуаций нет смысла писать отдельный модуль, так как в каждом случае приходится писать свою логику. К тому же реакция на аварийные ситуации «размазана» по программе. В некоторых случаях она заставляет работать (открывает смеситель отопления), в других наоборот принимать безопасное состояние (блокирует работу смесителя теплого пола).

Дополнительный комментарий: Это последний аппаратно независимый ШАГ, далее уже пойдет привязка к железу. Все что было изложено выше и в данном шаге, можно будет включить в любой CoDeSys (пишу под второй, третий непонятно что и когда будет, и как решаться вопросы совместимости со старым железом) совместимый контролер. А после небольшой доработки напильником и на альтернативные платформы (именно поэтому опираюсь на стандартные библиотеки). Главное чтобы был понятен смысл действий. Еще один момент, дополнительные шаги мне кажется более правильным описывать опираясь на этот шаг. Он дает достаточно большую абстракцию относительно аппаратной платформы.

ШАГ 6 Финальная сборка и привязка к ПЛК63
ШАГ 7 Отображение данных

kucherik
23.10.2011, 19:48
ШАГ 1 — инициализация, обработка сигналов
ШАГ 2 Два варианта вычисления погодозависимого графика
ШАГ 3 Работа с насосами (отопления, бойлера)
ШАГ 4 Работа с трехточечным сервоприводом отопления
ШАГ 5 Аварийные ситуации
ШАГ 6 Финальная сборка и привязка к ПЛК63

Вот и привязка к железу, серьезных изменений тут нет, все действия сведены к тому что входы и выходы привязываются к программе. (Поэтому последние два шага будут объединены в одно описание и одну программу). Сначала надо произвести выбор целевой платформы. Теперь привязываю используемые переменные для аналоговых входов. Интересное преимущество ПЛК 63/73 в том что можно настроить датчик даже после заливки программы, прямо на объекте. Чтобы не повторять что изложено в документации, отправляю к родной инструкции на контроллер (6.1 Работа с ЖКИ или 8 глава в РП).
И так сначала привязываем датчики, не забываем удалить переменные заглушки из глобальных. Названия я использую те же, просто заменяем (TN,TP1,TP2) производя привязку к соответственным аналоговым входам.
Выходы, тут придется добавить сопрягающие значения, при конвертации BOOL в REAL. Рекомендую использовать для этой цели стандартный элемент SEL.

ШАГ 7 Отображение данных
При старте программы выводим на базовый экран надпись «Инициализация» и надо добавить для красоты обратный отсчет. Кому очень красота важна могут сделать «линейный градусник» выполнения (функции работы со строками имеются %) ). Далее можно пойти двумя путями, первый самый простой, для каждого параметра свой дисплей и циклическая смена каждые 5 секунд. Плюс дополнительный аварийный дисплей, для вывода типа аварии. Более сложная задача, это полное управление, можно обойтись даже одним экраном, но тогда надо было бы вынести управление экранами в независимый процесс. Поэтому, в данном случае самый простой вариант.
Итак Step6, здесь выводятся на экран строки подписи и значения переменных. Можно для упрощения кода инициализацию верхних строчек вынести в INIT, но как то привычней все делать в одном месте. Дополнительный момент на который хочется обратить внимание, это кусок кода управляющий переключением экранов. Я не люблю полностью блокировать интерфейс пользователя в случае аварийной ситуации. То есть я продолжу выводить экраны с датчиками а в конце добавлю аварийный экран, где будет написано какой датчик шалит. Чтобы упростить задачу и не очищать экран, надписи по количеству символов совпадают, но перед самым переключением я его очищаю. Сам способ переключения экранов состоит в использовании таймера, для того чтобы не привязываться к платформе и скорости выполнения цикла. Я постарался сделать весь пример без использования EN/ENO (где только возможно, вот в примере не получается очистить экран, перед сменой, пришлось использовать данную уловку) тоже с целью упрощения. Хотя получилось или нет тут спорно.
Если в индикации аварийной ситуации будет несколько ошибок, то высвечиваться будет последняя. В индикации параметров контуров первым идет значение датчика, затем через промежуток вычисленное задание.
Для управления уставками используем встроенный функционал контролера. Соответственно первая ветка контролера работает с контуром отопления, вторая, с теплым полом. В первой ветке, надо задать график и для этого потребуется всего три переменные (otp0, otp10, otp20) остальные точки графика задаются ограничениями работы контура. Ограничения для дополнительных точек графика поставил 20-80. Во второй ветке наклон характеристики задаем как float, он отвечает на какую величину приращения увеличивать температуру, при падении уличной на 1 градус Цельсия. Параметр «Лето» во второй ветке это заглушка, ни на что не оказывающая влияния.
При адаптации только в step2 пришлось добавить конвертацию типов для корректной работы программы, кто не верит попробуйте убрать и посмотреть на результат.
Как видно конфигурационное меню, получилось простым, без сильного усложнения. На этом шаге основа изложена, прошу желающих по тестировать код, на предмет ошибок. Если захотите что-то добавить, тогда надо выложить комментарии и полный код.

Дополнительный комментарий: На основе таймера, я часто делаю интегратор и другие вкусные вещи. Кому интересно смотрите другие программы они выложены мной в других ветках форума, но без комментариев, как есть. Я не вводил в меню, опции управления настройками сервопривода. Думается все таки это сделать будет достаточно просто. К тому же есть не очень приятный опыт из практики, и я считаю полезным эти настройки держать «жесткими», если возникнет желание сделать универсальное устройство, тогда придется на всякий случай закрыть эти параметры паролем. Делается встроенными средой контролера.
Важно: данный пример рабочий и достаточно простой, но у него есть один серьезный недостаток, при зависании датчика, или невозможности обеспечить нужную температуру, реле будут щелкать до исчерпания своего ресурса (100000-1000000 циклов что при времени ожидания 30 секунд даст от 35 до 350 дней, что достаточно немного), поэтому выложу сюда же пример с ограничениями количества срабатываний, для управления сервопривода.

kucherik
23.10.2011, 19:52
И так код выложен, его можно тестировать на железе. осталось всякие плюшки, если кому что интересно пишите. Например, будет еще одно описание, которое направленно в основном на экономию ресурса реле

LAM - программу посмотрел, странно что не используете функциональные блоки, с их использованием упростился бы код. В случае необходимости изменений оно производилось бы только в одном месте. Текущий внешний вид на мой взгляд, напоминает линейную программу. Увы большинству пользователей, ST не понятно. Посмотрим какая реакция будет на мой пример.

С уважением, Kucherik

kolyan
24.10.2011, 16:50
В шестом действии нет выражения (номер канала) на входе ФБ SETWORKSCREEN.
При компилляции КДС ругается.

kucherik
24.10.2011, 17:05
В шестом действии нет выражения (номер канала) на входе ФБ SETWORKSCREEN.
При компилляции КДС ругается.

Проверил архив, все в порядке, наверно когда загрузил код с сайта и не подключил библиотеку, для работы с дисплеем (Work_mode.lib). Обнови проект, и произведи полную перекомпиляцию. Файл еще раз возьми из архива.

Если глюк останется, то на входе должна быть переменная Screen %)

Как обычно все решается с опытом :D

LAM
24.10.2011, 18:30
Kucherik - Я сразу говорил, что программа очень сырая, и многого еще нет, в дальнейшем кнечно планировал оформить все в виде ФБ, пока для меня так нагляднее.
Например очень большой минус а данный момент - то, что нет контроля положения задвижки, получается что при открытии идет анализ температуры на стрелке, и когда температуры приблизительно равны, релюхами не щелкаем.
А вот при понижении температуры, обратка как правило остывает довольно медленно, и при полностью закрытой задвижке релюха еще довольно долго щелкает.
Эту часть кода в принципе уже написал, просто еще не встроил.

Пробовал встроить ПИД регуляторы, там даже часть кода есть, но потом отказался за ненадобностью, т.к. и так температура подгоняется довольно быстро и точно, тут твоя идея мне понравилась (чем больше рассогласование - тем длинее сигнал).

kolyan
24.10.2011, 19:16
Проверил архив, все в порядке, наверно когда загрузил код с сайта и не подключил библиотеку, для работы с дисплеем (Work_mode.lib). Обнови проект, и произведи полную перекомпиляцию. Файл еще раз возьми из архива.

Если глюк останется, то на входе должна быть переменная Screen %)

Как обычно все решается с опытом :D

Скачал заново архив.
То же самое)))
Вот как это выглядит:

kolyan
24.10.2011, 19:31
Добавил на вход переменную Screen.
Компилируется нормально.

В ПЛК-63-М попытался залить - КДС ругается, говорит, что в данной целевой платформе макс. число 256, а в проекте 512.
Помню, когда-то такое было.
Но чем лечится - забыл)))

kucherik
24.10.2011, 21:22
Добавил на вход переменную Screen.
Компилируется нормально.

В ПЛК-63-М попытался залить - КДС ругается, говорит, что в данной целевой платформе макс. число 256, а в проекте 512.
Помню, когда-то такое было.
Но чем лечится - забыл)))

Странно, соедини screen со входом, картинку как должно выглядеть приложил

Когда у меня CoDeSys начинает дурить я очищаю проект и делаю полную перекомпиляцию, после этого обычно все приходит в порядок, еще момент пользуюсь версией 2.3.9.9

kolyan
24.10.2011, 21:37
Странно, соедини screen со входом, картинку как должно выглядеть приложил

Когда у меня CoDeSys начинает дурить я очищаю проект и делаю полную перекомпиляцию, после этого обычно все приходит в порядок, еще момент пользуюсь версией 2.3.9.9

У меня такая же версия CoDeSys.
Проблема, скорее всего, в прошивке ПЛК.
Завтра попробую перепрошить, если время будет.

kolyan
24.10.2011, 21:58
А вообще, была мысль на фабрике, где работаю, мини-котельные соорудить.
Но автоматику собрать и диспетчеризацию на ПЛК-63 или ПЛК-73.
2 котла КЧМ до 100 КВт.
1 контур отопления (погодозависимое управление).
2 насоса.
Выносной пульт для диспетчера (нужен по правилам).
Минимум кнопок, тумблеров и.т.п.
Максимум использования человеко-машинных средств для управления и мониторинга объекта.

Что-то типа этого:

Николаев Андрей
25.10.2011, 01:15
А вообще, была мысль на фабрике, где работаю, мини-котельные соорудить.
Но автоматику собрать и диспетчеризацию на ПЛК-63 или ПЛК-73.
2 котла КЧМ до 100 КВт.
1 контур отопления (погодозависимое управление).
2 насоса.
Выносной пульт для диспетчера (нужен по правилам).
Минимум кнопок, тумблеров и.т.п.
Максимум использования человеко-машинных средств для управления и мониторинга объекта.

Что-то типа этого:

НУ так а что останавливает? Подмогнем.

Оффтоп: почему БП контравт, а не ОВЕН. С Контравтами наши БП видел, но чтобы наоборот... :)

kucherik
25.10.2011, 08:58
LAM - программа рабочая, это пока главное. Причесывание кода, можно провести в любой момент. А вот с модуляцией длительности импульса надо чуть осторожней, я подбираю границу ограничений на каждом объекте индивидуально. Временные ограничения для реле дописываю, увы в свободное от работы время и его мало %(

kolyan - реальный проект, достаточно продуманный. Если будут вопросы пишите. Кстати проверил на двух машинах и всех кого мог попросил для тестирования, проблем пока не было.

С уважением, kucherik

kolyan
25.10.2011, 17:24
НУ так а что останавливает? Подмогнем.

Оффтоп: почему БП контравт, а не ОВЕН. С Контравтами наши БП видел, но чтобы наоборот... :)

1). Всё не могли толком определиться, каждый по-разному видел проект.
Скорее всего, скоро начну писать программу. Конечно, надеюсь на помощь форума)).

2). В принципе, можно и Овен БП применить. Как я раньше везде и всегда поступал. Но с Овеновскими БП несколько раз непонятные вещи творились.
Приходишь на объект, а БП на выходе не выдаёт ни одного Вольта. Может, перегрузка кратковременная была, может ещё что, но факт. Пока не снимешь 220 В на входе и снова не подашь - толку не было.
КонтрАвт подкупает заявленной возможностью восстановления выходного напряжения после снятия перегрузок. Хотя, опыта применения их БП нет. Может, там свои подводные камни...

Николаев Андрей
25.10.2011, 22:02
КонтрАвт подкупает заявленной возможностью восстановления выходного напряжения после снятия перегрузок. Хотя, опыта применения их БП нет. Может, там свои подводные камни...

Странно. Наши БП и по перезгузке один из лидеров. И востанавливаться должен...
А Вы этот БП нам присылали с описанием проблемы?

kolyan
27.10.2011, 19:19
Странно. Наши БП и по перезгузке один из лидеров. И востанавливаться должен...
А Вы этот БП нам присылали с описанием проблемы?

Нет, не присылал.
Обычно, всё лечилось выключением\включением 220 Вольт.
2 блока питания БП60Б-Д4-24. Одно и то же...
И, даже индикатор питания не светится при этом...

defo
28.10.2011, 07:35
[QUOTE=Николаев Андрей;70349]НУ так а что останавливает? Подмогнем.

".....Мы мигом к вам заявимся с лопатами и с вилами,
Денёчек покумекаем — и выправим дефект!...."

В.С Высоцкий

ASo
28.10.2011, 12:56
Вот когда defo покажет класс на продуктоориентированном, а не на клиентоориентированном рынке именно в РФ - первый сниму перед ним шляпу.
А так проблемы понятны, они даже озвучены руководством ОВЕНа Дмитрием Владимировичем Крашенинниковым в АиП №38, с.3 снизу

С момента выпуска первого ПЛК прошло 5 лет, за это
время продано свыше 30 тысяч экземпляров – и эти цифры
говорят сами за себя. Я считаю, что накопленные знания и
бесценный опыт позволят нам в ближайшее время создать
ПЛК мирового уровня.
Было бы смешно, если не было бы грустно.

ASo
28.10.2011, 13:17
А что ктото гдето пишет благодарности????
Можно, я не поверю.
И я знаю неск. форумов, где подобное стирают, и даже банят.

ASo
28.10.2011, 13:31
Вы с ума сошли!
Я вообще не присутствую на АВОКе

kucherik
09.11.2011, 10:05
Странно, тему маленько зафлудили %(
И код никто видно не тестирует %(
Есть маленькая ошибка, авария никуда не выводится
step 5, соответственно откорректирован

kucherik
19.11.2011, 09:51
Сохранение ресурса сервоприводов и других регуляторов.

Описание касается и данного примера и всех случаев когда требуется увеличить или сохранять ограниченный ресурс. Как было изложено, например для насоса отопления, это можно было решить введением таймеров задержки. Например, для насоса установлено производителем требование не более 12 включений в час. Если схема позволяет это просто реализовать задержкой на включение на 5 минут. Если не позволяет, т.е. оборудование должно включиться в любом случае, тогда задержка на выключение. Если не то и не другое, тогда ограничение включений, и аварийная индикация в случае превышения, возможно и блокировка. Так как большинство технологического оборудования и решений планируются с учетом требований к частоте включения (обычно решается «инерционностью» среды). А раз количество срабатываний выросло, значит что-то случилось. Первая часть относится к двухпозиционным или двухточечным регуляторам. То есть он или включен или выключен.
И так простой функциональный блок PulseLimit. Состоит из входа IN на который приходит параллельный сигнал, и вход (тип время) DTIME на который подается время, через которое уменьшается количество счетчика на единицу, еще один вход PLIMIT, он определяет ограничение выше которого срабатывает выход STOP. Устройство данного функционального блока, основывается на стандартной библиотеки с инкрементно / декрементным счетчиком (смотри документацию на библиотеку STANDART.LIB — СTUD, этот счетчик достаточно просто можно написать самостоятельно, но не хотелось изобретать велосипед), на вычитающий вход подается значение с таймера который выполняет задержку между включениями. Таймер работает до момента пока значение счетчика не снизится до нуля. Обращаю внимание, что по прежнему есть значения по умолчанию, меняйте их по собственному усмотрению, это только конструктор. Дополнительно хотелось бы отметить ограничение на количество счета. Значение со входа IN проходит через элемент AND, если Вам потребуется по прежнему считать количество включений, тогда его надо будет удалить, а на вход CU подавать значения прямо из IN.
Наконец, подошли к еще очень интересному ограничению по времени нахождения во включенном состоянии. Пример, для горелок есть ограничение в 24 часа, по истечении которого она должна опять пройти через циклограмму запуска. Это достаточно было бы просто решить таймером сброса. А вот например, для случая ограничения времени нахождения по включенном состоянии в течении часа, и был разработан ниже изложенный функциональный блок.
Как видно из его структуры он (TimeLimit) не сильно отличается от PulseLimit, однако при инвертировании сигнала (это пример реализации и подходил только для длительных процессов, обязательно прочитайте сноску «Важно»), включается обратный отсчет, который начинает уменьшать накопленное значение. Соответственно, вход DTIME переименован в PR, теперь это время определяет точность измерения (вспоминаем теорему Котельникова), а вход PLIMIT превращается в относительное значение количества импульсов (время ограничения определяется как PLIMIT*PR). Если представить типовую ситуацию, то данный функциональный блок находится в ограничении длительности импульса, и при замыкании через обратную связь при работе появится меандр, по времени определяемый PR. Фактически в данном случае, получается «прибор», который измеряет скважность сигнала за время ограничения. В процентах это можно оценить разделив CURRENT на PLIMIT и умножив на 100. В более близком к практике случае надо добавить время на восстановление RT (Restore/Relax Time соответственно и функциональный блок в этом случае назвал TimeLimitRT). То есть при снятии сигнала с входа IN, выход STOP будет активен время RT, если за это время RT сигнал восстановится, блокировка не прервется . Самый плохой случай, это когда сигнал случайно включается и выключается и его время больше времени восстановления RT. Я бы еще использовал бы сигнал сброса RST,или замкнул бы его после того как истечет время восстановления. Тут больше зависит от практических задач. Для далее изложенных блоков, внешний сброс обязателен для компенсации накопленной ошибки. TimeLimirRT это пример модификации того что есть, под конкретные задачи, и не обязательно так как изложено. Например его можно было реализовать и при внешнем использовании таймера блокировки с блоком TimeLimit, на нужное время, элемент AND с инверсным входом для TimeLimit, А вход на TimeLimit с выхода AND. Получим соответственно эффект, что оборудование гарантированно будет «отдыхать» нужное время.
Пример использования на практике. Есть у меня котельная с насосом за 35 киловатт, при старте этого насоса сильно греются теплухи (защита по току) и если запускать его чаще 1 раза за 2 минуты, теплуху вышибает. Решение беру функциональный блок PulseLimit ставлю количество импульсов 1, время восстановления 5 минут. Другой пример уже ближе к этой теме форума, он связан с сервоприводом смесителя, от одного крайнего положения до другого 120 секунд, соответственно если мы говорим о фиксированной длительности импульса например в 1 секунду, получается 120 импульсов от края до края. Напоминаю, заявленная задача сохранение ресурса реле, нам надо не больше примерно 240 импульсов в сутки. Решение, ставим ограничение на количество импульсов 120 (оно нужно для быстрой настройке в случае отключения питания), а время восстановления получаем 1 раз в 6 минут (24 часа - 240 импульсов, получаем не больше 10 импульсов в час ). В стационарном режиме примерно 250 срабатываний реле в сутки, при количестве срабатываний 100 000 получим ресурс — 400 дней (в предыдущем примере 35), а увеличив время восстановления до 1 часа получим 4000 дней, перебор %). Если увеличить время восстановления до 1 часа то в стационарном режиме будет не очень приятный режим что за сутки смеситель сможет пройти только 20% по своему диапазону (24 импульса — мало, практика показала что оптимальный диапазон 40%-60%) соответственно надо выбирать исходя из условий эксплуатации. (например при выходе за критические значения игнорировать импульсные ограничения, или время восстановления выбрать 12-15 минут, тогда получим 100%-80%)

Было искушение написать, вторую часть используя выше изложенные функциональные блоки, но это привело бы к ограничению функционала. Нельзя было бы импортировать его независимо, опираясь только на стандартные библиотеки.
Наконец, ограничение для сервопривода и иных устройств с трехточечным управлением. Например сервопривод, когда он отработал на открытие-закрытие больше времени, чем заложено производителем, смысл по прежнему подавать на него сигнал открытия-закрытия. Этому посвящены два функциональных блока, которые учитывают данную особенность. Их названия P3PulseLimit и P3TimeLimit. Так как тут описывается универсальный случай и текущее положение сервопривода неизвестно, то рекомендую выбирать в качестве ограничения двойное время или количество импульсов. Более универсальное решение можно было бы получить, если ввести отдельные уставки для верхнего и нижнего значения.
Тут исчез таймер обратного отсчета, вместо него используется понижающий вход. А касаемо ограничения при счете в минус использован элемент сравнения, можно вместо элемента умножения на минус единицу заменить на элемент вычитания из нуля, если не хватает времени исполнения. Не хотелось использовать тут второй счетчик, а так получилось более просто. С него же берется сигнал о срабатывании ограничения по минимальному значению. В данном случае это означает отрицательное значение уставки. Это сделано для того чтобы не считать подбором двойную величину импульсов. Достаточно замерить ход в одну из сторон (из одного крайнего положения в другое). А двойная величина нужна только для случаев большой разницы во времени импульсного хода относительно непрерывного. В тяжелых случаях по прежнему подбирается по факту. Хотя в малых котельных я от этого отказался. Пока работает без проблем, правда в программе используется сброс и инициализация сервопривода один раз в сутки, а в случае перезапуска, контролера так же инициализируется положение.

kucherik
19.11.2011, 09:51
Приведенные функциональные блоки можно комбинировать в различных последовательностях получая разные эффекты. Еще раз напоминаю это конструктор и с его помощью можно и главное нужно, увеличивать время работы приборов, в данном случае ОВЕНа. Я больше работал с контролерами у которых вместо реле использовались твердотельные реле с токами утечки в единицы микроампер и меньше. Там не приходилось ограничивать число циклов. Приведенное выше нужно для увеличения сроков работы реле прибора с 35-350 дней до 5- лет и более. Надеюсь это поможет Вам, решить данную задачу.

Дополнительный комментарий: может кому потребуется использовать текущее значение, вычисленного положения, для этого используется выход CURRENT. Я не рекомендую использовать изложенные функциональные блоки как тип RETAIN, потому что в этом случае не получится сбросить значения, например при выключении питания. А так будет стартовать с нуля, не забываем присваивать двойное значение ограничений для пульсирующих ограничений, если не производим инициализацию, сервопривода. То есть перезапустил по питанию и нет проблем, просто бережем ресурс. Дорабатывайте эти функциональные блоки, под Ваши задачи, если желаете выкладывайте на форум. Только вместе можно создать что-то достаточно интересное и универсальное. Я специально затягиваю добавление данного функционала в описанный пример для ПЛК63, хочется сделать определенную проверку на профессионализм. Поэтому оставил место для сервопривода который стартует после инициализации из нулевого положения. Если вы сможете самостоятельно интегрировать и адаптировать эти блоки, значит все в порядке. Остальные предупреждены %)

Важно: Все что изложено для измерения времени это “обман”, таймеры нельзя (можно но при соблюдении некоторых условий) использовать для этой цели и сейчас я объясню почему. Для проверки рекомендую собрать конструкцию из таймера TP и любого счетчика. Задайте время 1 секунду и посмотрите какое рассогласование набежит за 10 минут. Откуда оно берется, очень просто время длительности импульса мы задали, а вот время цикла программы нет. То есть один цикл таймер будет в отключенном состоянии, затем только пойдет отсчет импульса. Отсюда и набегает ошибка и если вы это учтете и зададите например циклический запуск процесса через фиксированные промежутки времени, то использовать можно. И надо конечно учесть время цикла программы при определении PR.
Для некоторых процессов это конечно не критично, и этот пример можно использовать для определенных задач, даже для сервоприводов, но как всегда с определенными оговорками (например по точности) и инициализацией положения через определенный интервал времени чтобы сбрасывать накопленную ошибку. Или как альтернативный вариант, когда длительность импульса всегда одна и та же используем ограничения количества импульсов P3PulseLimit.
А как же быть там где используется ШИМ сигналы для управления, нужен более точный и тонкий подход. Он изложен далее.

kucherik
19.11.2011, 09:53
Все что будет изложено далее опирается на стандартную библиотеку (Standart.Lib)
Главный элемент для измерения времени это RTC, здесь же приведен пример функционального блока который измеряет время нахождения оборудования в включенном состоянии (OnTime). В некоторых моих программах приведенных на форуме видно что когда я делаю измерение времени без RTC это возможно только используя фиксированный во времени процесс который менял свое состояние каждые полсекунды. Обращаю внимание на тип используемых переменных для различных задач. Для измерения времени лучше всего подходит DATE_AND_TIME (сокр. DT) с шагом значений в одну секунду. Для оценки времени работы оборудования более чем достаточно, а в случае сервоприводов и других процессов надо бы использовать TIME уже с шагом в милисекунды, но и тут есть подводный камень (Максимальное значение для типа TIME : 49d17h2m47s295ms (4194967295 ms)) соответственно надо оборудование сбрасывать или начинать отсчет заново по достижении определенного значения.
И так функциональный блок OnTime просто состоит всего из двух последовательных элементов RTC и MOVE (использовал EN/ENO из-за простоты в данном конкретном случае), что-то тут комментировать кажется излишним, все очень просто. Чуть сложнее его OnOffTime, он еще измеряет время простоя оборудования. Можно путем внешних операций даже выводить процент использования и тому подобное. Нужен ли тут вход для сброса накопленных значений не значений не знаю, сделать его просто добавится только еще один элемент и логика для сброса и блокировки. С процессами длиннее нескольких секунд понятно, теперь надо вернуться к проблеме измерения миллисекундных процессов. А именно к вопросу вычисления текущего положения по времени работы трехточечных сервоприводов. Проблема заключается в том что хочется измерять с миллисекундной точностью, но без использования дополнительных библиотек. И выход в данном случае нестандартное использование таймера TON.
В данном случае я использую выход таймера (функциональный блок OnTimeTON) для получения текущих значений времени с момента отсчета. Здесь была определенная сложность чтобы выполнить этот код без использования EN/ENO, как видно можно и тут выкрутиться. В момент снятия сигнала срабатывает триггер по обратному фронту, он затягивает отключение таймера, на один такт, и в этот момент снимаем текущее показания времени. Важный момент, правильность работы возможна только за два такта программы, это надо учитывать при использовании данного функционального блока. Далее стоит ограничитель на 24 часа (не правило можно и месяц поставить :) кому как удобно но меньше 50 дней), и при его использовании погрешность на один такт в сутки, гарантировано перекрывается погрешностью хода часов, кому важно сделать это точно, надо как уже писалось надо выставить фиксированное время цикла запуска и это время вычесть из 24 часов. Например запуск один раз в секунду тогда время сброса соответственно 23 часа 59 минут 59 секунд :) . Ну и вход RST для сброса текущих показаний.
Теперь поговорим об учете положения для трехточечного сервопривода. Сам тип переменных TIME не дает возможности работы с отрицательными значениями, хотя они хранятся в памяти как DWORD что дает возможность к абстрактной работе с ними (например при конвертации). Как же быть, например видно из функционального блока OnOffTime два выхода, в данном случае можно говорить о двухточечном управлении. Но тут нет ограничения в случае простоя двухточечного регулятора. следовательно его можно использовать ограничитель либо встроенным в блок или внешним в программе. Законный вопрос как же это можно реализовать, если сам тип переменной не имеет отрицательных значений. Ответ лежит на поверхности переконвертировать в знаковую целочисленную переменную, но это влечет за собой второй вопрос, а как быть с отрицательными значениями. Или надо отказаться от текущего вывода текущего положения (сделать например процентный вывод) или работать только в положительной зоне (то есть сдвинуться в середину допустимых значений и считать это положение нулевой точной). По мне более предпочтительно работать с целочисленной переменной и оставить ее значения в этом виде, конвертация сопровождается переводом миллисекундные значения в целочисленные. И данный тип уже более удобен для дальнейшей обработки. Он уже не будет привязан к значениям времени и его удобней отображать и видоизменять в программе.
Здесь пришлось реализовать похожий на счетчик алгоритм управления (TimePositionTON). Причем позволяется одновременная подача сигнала на оба входа, ограничение осталось тоже минимум два такта программы сигнал не должен вернутся для корректной обработки. Блокировки от этого нет, не хочется сильно усложнять код. В момент снятия сигнала производится подведение так сказать итога, так же это происходит в случае достижения ограничителя. Из особенностей хотелось бы подчеркнуть возможность асимметричного использования. Два входа для времени TimeUp и TimeDw, они могут быть указаны произвольно, напоминают ограничитель у счетчика импульсов. В данном блоке есть защита от одновременной подачи сигнала на оба входа UP и DW, все ничего до момента что это не будет висеть длиннее чем время в таймере (25 часов) было желание завести выхода с таймеров на сброс в данном случае, но не хотелось снижать универсальность функционального блока, но сложности обычно начинаются там где не ждешь, а что бы произошло если бы сигнал пропал одновременно, тоже самое, записалась бы позиция выполняемая последней. Так же нет проверки на то что TimeUp>TimeDw, но она и не нужна %). Ограничение типовое, для этого типа подхода, между импульсами в любое положение должна пройти пауза в два такта программы. Это ограничение можно избежать если использовать уже приведенный выше функциональный блок OnTimeTON, для учета работы в любую сторону, тогда смена направления пройдет без пробелов.
Но в данном блоке есть очень большая неприятная вещь она происходит когда программа доходит до ограничителя, тут надо подробно разобрать как работает таймер. В момент времени когда приходит сигнал работы, начинается отсчет времени с нулевого положения. Соответственно в момент времени когда приходит сигнал выключено, надо еще раз считать текущее положение с таймера, так как если выключим сразу то выход времени с таймера будет равен нулю. Тогда логично получается что не требуется еще один проход в случае когда срабатывает ограничитель, и как только отходим в противоположном направлении, надо снять сигнал Stop. Как видно данный блок разрешает небольшой заход за величину ограничения, определяемую скоростью выполнения программы.
Ну вот сложный вариант изложен, наверно чтобы больше показать возможности «акробатики» кода (Функциональные блоки OnTimeTON и TimePositionTON воспринимать как «шутку»). А между тем есть более изящное решение. Но для этого потребуется знать чему была равна длительность предыдущего такта программы (в качестве доп. материала см. TaktMeter) и очень будет хорошо если вы используете синхронный (запускаемый через равные промежутки времени) программный процесс. В итоге зная такт можно с высокой точностью работать уже с временными значениями. Написанный функциональный блок T3Position не имеет явных недостатков (если только сигнал не будет висеть больше месяца :) ), ему не требуются паузы между сигналами, можно подавать сигнал одновременно на два входа, можно сразу после снятия сигнала, в следующем шаге заново подать сигнал. Тут можно выделить три зоны. Первая, здесь происходит вычисление времени исполнения программы, засечка по времени, в случае достижения ограничения, приращение останавливается. Вторая, формируются внутренние сигналы управления и вычисляется текущее положение. Третья, здесь проверяются ограничители. Надеюсь дополнительные комментарии тут излишни. Если что не понятно, спрашивайте, попробую растолковать альтернативно.

Дополнительный комментарий: Что полезного можно написать используя данные функциональные блоки. Например приложение которое будет знать приблизительное положение заслонки, на основе его можно уже улучшить управляемость объекта. Можно высчитать передаточный коэффициент, по мне это то что не хватает в стандартных библиотеках. Кому интересно прилагается блок измеритель длительности программного такта :) TaktMeter разбит на три последовательных действия для простоты понимания. Еще один важный момент, для понимания сути происходящего процесса надо знать что при импульсе например одна секунда время работы будет например 0.99 секунды а при длительности 2 секунды уже 1.99, то есть определенное время уходит на срабатывание реле, отсюда и накапливается ошибка позиционирования, и для этого я рекомендую производить инициализацию положения например раз в сутки. В моих задачах это очень хорошо работает и проблем пока не было. Порядок обработки данных в функциональных блоках в соответствии с потоком данных, правильно написанный код не требует дополнительного указания порядка обработки. Как в свое время меня учили, например: правильная программа на С/Pascal не требует использования goto и полученный код будет «красивым». Пишите правильно %). А мне пришлось помучатся чтобы получилось красиво и без использования EN/ENO где можно, оно того стоило.

kucherik
19.11.2011, 09:57
Специально вставляю текст в форум, чтобы можно было его прочитать всем кому хочется. До сих пор нет пожеланий что бы хотелось бы рассмотреть.

Николаев Андрей - несколько раз писал на мыло и в аську (откопал на сайте), ответов нет, поэтому попытки связаться прекратил. Мои данные у Вас есть, можно еще со мной связаться через Ирину Викторовну

Всем удачи.

Andrei Z
22.11.2011, 15:21
Здравствуйте. Скажу спасибо kucherik за желание так подробно делиться опытом и информацией. Порекомендовал почитать этот форум Николаев Андрей. Из всего прочитанного понял что чем больше узнаю.. тем больше понимаю что ничего незнаю.
Побывал на одном заводе увидел реле уровня ОВЕН и контролер какойто. Начал читать и понял что уже давно шагнула атоматизация, мне как инженеру на котельной интересно всё это, интенсивно изучаю спектр оборудования ОВЕН и всё что связано с автоматизацией, всю эту неделю начиная от вэбинаров заканчивая справкой CoDeSysа.. Я в ШОКЕ в этих програмах можно разобраться когда то???? все команды на не русском столько всего что прям незнаю за что хвататься и когда во всём разберусь.
Уже писал что фронт работы у меня большой начиная от котелной и бани а заканчивая водозабором, стыдно сказать на котором из 3 скважин даже на одной пускателя на насосе нет. 17 кВт двигатель включаеться автоматом на 100А. Но я не унываю, руколвдство сейчас стало вникать в проблему энергосбережения и надеюсь что когда дайдёт до затрат на покупку простейшего всё это не останеться на уровне разговоров. Но пока есть время буду изучать, чтобы смог сам и проект составить и запрограмировать и сделать. Песпективу даёт большую, ставить модульные котельные и управлять сидя дома, очень стимулирует на изучение.
первый файл где задание давали не открывается, нет проги на расширение .. скачал с инета неоткрываеться, автокада нет.
Ещё раз спасибо, за форум. Сообщение чуть позже моё удалите как флуд в этом разделе чтобы не мешало остальным пользователям говорить по делу

kucherik
06.12.2011, 23:31
Andrei Z, спасибо за отзыв.

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

Rocker_4
08.12.2011, 22:04
Специально вставляю текст в форум, чтобы можно было его прочитать всем кому хочется. До сих пор нет пожеланий что бы хотелось бы рассмотреть.
Всем удачи.

Можно ли реализовать в этой программе изменение уставки графика через СМС?

В качестве контроллера будет использоваться ПЛК 73

kucherik
10.12.2011, 21:05
Можно реализовать и изменение графика и уставок, на форуме есть примеры и темы соответствующего обсуждения
http://www.owen.ru/forum/showthread.php?t=99&highlight=%F1%EC%F1+%F1%EE%EE%E1%F9%E5%ED%E8%FF
http://www.owen.ru/forum/showthread.php?t=11503&highlight=%EC%EE%E4%E5%EC
http://www.owen.ru/forum/showthread.php?t=11383&highlight=%EC%EE%E4%E5%EC
http://www.owen.ru/forum/showthread.php?t=10700&highlight=%EC%EE%E4%E5%EC
http://www.owen.ru/forum/showthread.php?t=10561&highlight=%EC%EE%E4%E5%EC
А вот уже готовые примеры
http://www.owen.ru/catalog/66372950
http://www.owen.ru/catalog/64467020

Если рассматривать более широко то это диспетчеризация, можно использовать и этот контроллер, вот я тут в другую тему писал
http://www.owen.ru/forum/showthread.php?t=11716
нужен пример с практическим использованием, увы правила безопасности не обсуждаются, а именно диспетчеризация в обычном виде в соответствии с требованиями (нашего гост снип и т.д.) это только отображение данных, их удаленное изменение не предусмотрено. А безопасность должна обеспечиваться списком возможных телефонов с которых разрешено изменение, ведение логов команд, обязательно использование ограничений на диапазон измененяемого параметра (это одновременно и защита от "дурака" и от ошибочных значений), так как примеры есть их надо только причесать и можно использовать. То как сейчас сделано я думаю не всем понятно.

С уважением, Kucherik

kucherik
26.12.2011, 09:06
На основе изложенного предыдущего материала, была произведена модернизация-адаптация, программного кода для того чтобы он отвечал определенным требованиям. Изменение первое, шаги переименованы в соответствии со своим функциональным назначением. Им присвоены более удобно читаемые имена. Вместо второго контура используется управление бойлером. Функциональный блок был изложен ранее. Введено решение экономичного использования ресурса реле, для трехточечного сервопривода. Также в шаге контроля входных значений появился функциональный блок TimeHyst. Логический смысл от его использования, это устранить дребезг. Так как, гистерезис по значению использовать бессмысленно, это датчик. Тогда лучше всего использовать временной гистерезис, а именно, два таймера которые задают задержку по времени на фиксацию или снятие сигнала. Думается дополнительные комментарии, по данному функциональному блоку излишни.
В шаге по управлению сервоприводом используется еще одна блокировка, если насос стоит (по логике алгоритма управления) то , команды на сервопривод не транслируются. А в случае с бойлером используется обратная логика, так как по схеме электрической-принципиальной, на случай аварийный-ручного режима, есть родной термостат бойлера для управления. А вот управление насосом отопления было переделано с той задачей, что в случае отключения контроллера насос должен включится. Поэтому используется нормально закрытый контакт. Далее, так как тут нет контроля по протоку и не хотелось сильно усложнять задачу, то выбор насоса осуществляется «руками». Если включить одновременно два насоса, сработает тепловое реле. То есть, по большому счету это внешнее решение.
Здесь нет схемы вводного бокса для управления освещением, сигнализаторами загазованности и т.*д. это простая линейная схема :). Для упрощения внедрения привожу простую инструкцию для пользователя (в вложенном файле).

Во вложении файл с гидравликой и схемами электрическими принципиальными, программа, инструкция %)

Dimur
11.01.2012, 15:14
снимаю шляпу...

Спасибо, kucherik!

мы здесь, мы слушаем Вас с восхищением.

на днях намыливаюсь достать ПЛК-63 на "поиграться" - пристрою к нему все Ваши шаги.

kucherik
01.02.2012, 11:11
Dimur, если не сложно отпишитесь, как прошло знакомство с 63/73 контроллером.

ak-1st, MOPEDE, и другие уважаемые форумчане, если есть вопросы пишите прямо сюда, какой смысл помочь только одному из Вас, когда можно ответить сразу целой аудитории, не надо стесняться все когда то начинали с малого.

В."Я работаю с ОВЕНом впервые и много не могу понять. Можете помочь с настройкой ЖКИ и адресацией каналов?"
О. "Работа с ЖКИ хорошо описана в документации на контроллер, в принципе ничего тут сложного нет, есть несколько виртуальных экранов, программа может их переключать и соответственно отображать на них что вы захотите."

В."Есть одна температура, я регулирую ее с помощью блока "HYSTERESIS", как мне задавать уставки вверхнего и нижнего предела с кнопок контроллера? Какие блоки используются? Если можно, маленький пример, я новичок))"
О."Самый простой способ используя встроенные возможности ПЛК 63/73, создав свою ветку подменю с параметрами и подставив уже назначенные переменные на вход функционального блока HYSTERESIS"

В инете сейчас появляюсь редко, много работы ЗИМА %(

kucherik
21.02.2012, 09:42
Родилась эта маленькая программа, как шутка , для игры "Мафия", ребятам потребовался муляж бомбы и чтобы на нем нужно было перерезать провода в правильной последовательности. Основная задача состояла в выводе таймера обратного отсчета в минутах и секундах. Задача решается достаточно просто, ее решение раньше не выкладывал, но на сайте не обнаружил подобных примеров. И так все достаточно просто, два момента если вы конвертируете значение в целочисленное, то не будет знаков после запятой и округления. В этом и есть главный секрет. И операция деления достаточно "тяжелая" :)

Ну и пример программы в подарок

Aleksandr Ermak
19.01.2013, 22:33
Я понимаю что не в тему и все таки - Подскажите пожалуста где можно найти описание блоков . функций .операторов CFC . Начинаю с ноля - тяжко . В книжных магазинах - только ВБА .ПАСКАЛЬ .СИ и еще четыре видео урока от В. Кириленко - инете. Такая засекреченная тема от Джеймса Бонда ! ! ! На дисках к П Л К ОВЕН в справке есть подробное описание и примеры,? Зарание благодарен . . . ( из АЛМА - АТЫ )

ASo
19.01.2013, 22:42
В справке.
В приложении А.
Блоки CFC полностью повторяют блоки FBD. Отличие на экране - порядковый номер для редактора CFC

rovki
24.01.2013, 15:08
Сделал экспандер для сотового заполнителя на базе ПР110 и ИП320 и ТРМ и ПЧВ

rovki
24.01.2013, 15:14
Ой, не туда засунул

Alias
21.09.2014, 22:03
Давно, смотрю, тема не поднималась, только поиском и нашел. Примете новичка? Тоже хочу приобщиться к этому увлекательному делу.
Немного поясню свою ситуацию.
Имею у частном доме старый чугунный котел КЧМ-7. Сейчас у меня работой котла управляет автоматика КАРЭ-50 http://kotelkz.ru/kotel/kare.php в паре с датчиком-регулятором типа Т32М http://www.tsf2000.ru/spec_t32m.html
Сама же автоматика занимается только контролем безопасности собственно котла и управляется исключительно внешним переменным напряжением 220В из осветительной сети. Поэтому и возникло желание управлять микроклиматом во всем доме не примитивным Т32М, а погодозависимым автоматом, что бы не бегать каждый раз в котельную и наугад крутить ручку уставки. То есть в газовую часть я вообще вмешиваюсь.
Варианты смотрел разные, техподдержка ОВЕН посоветовала ТРМ-51 в модификации 05. На самом деле мне подойдет любой контроллер, который, замыкая контакты своего реле (электромагнитного или твердотельного), будет подавать 220В на клапан КАРЭ, тем самым включая котел и поднимая температуру теплоносителя в соответствии с определенной функцией. Функция - та самая кривая, которую очень желательно было бы менять. Причем, один раз - при подстройке под конкретный объект, то есть мой дом, и последующие - в зависимости от погоды, то как ветер сильный или еще что-то. Хотя было бы неплохо по вертикальной оси график функции двигать в зависимости от ветра автоматически. А то окна хоть и утепленные, но деревянные, и инфильтрация воздуха подчас играет злую шутку и выдувает все тепло.
В принципе, "защиту от ветра" можно сделать даже не программно, а на этапе монтажа датчика уличной температуры. Мысль заключается в том, что если его поставить во внутренний угол дома, - а у меня есть именно такой и именно строго на север, - то в безветрие он будет находиться в тепловых полях самого дома, завышая истинное значение температуры воздуха окружающей среды. Для компенсации этого искажения показаний мне понадобится корректировка "нуля". Если же скорость ветра усилится, влияние тепловых полей на точность будет сказываться в меньшей степени, датчик будет показывать более низкие температуры, тем самым внося желательную поправку в метели. Кроме того, в большей степени будет учитываться и теплоинерционность самого дома. Естественно, место установки будет выбрано вдали от окон.
Вроде бы и подходит ТРМ151. У него два датчика температуры, управление не ПИД, а именно в ключевом режиме, то есть 1/0 через реле, можно составить два графика по десять точек каждый. Для моей конкретной цели вполне достаточно, ибо она одна: через реле включать горелку. Нет у меня ни трехходовых кранов, ни прочих хитростей. Циркуляционные насосы работают весь отопительный сезон и внимания не требуют. Но!
Но при цене ПЛК73, который мне посоветовали посмотреть, сопоставимой с комплектом ТРМ151+"интерфейс 232<->юсб", хочется попробовать гибкости ПЛК. Ведь тогда можно будет управлять и тремя электрическими бойлерами горячей воды, и греющим кабелем на северном склоне, где теперь нет сосулек, и еще чем-нибудь ))) Первоначально хотел под бойлеры заточить мастеркитовский таймер-термостат ВМ8036, но один умный робот всегда лучше россыпи жесткой логики, особенно, если его легко настраивать и мониторить с десктопа.
Итак, если есть нечто работоспособное из экспериментальных программ уважаемых форумчан под мою задачу для ПЛК73 (может есть и что-то другое, но мне подсказали почему-то именно этот), я готов купить вместо ТРМ151 именно контроллер и запустить его в работу прямо сейчас в первоначальном варианте из программы одного из ваших примеров. И потом уже постепенно, не гоняясь, изучать программирование.
К слову сказать, я хоть и радиоинженер-конструктор-технолог радиоэлектронных средств, но после диплома минуло двадцать лет и в программировании я в принципе нуб. Так, радиолюбитель по мелочи. И ваша помощь была бы кстати, хотя бы на начальном этапе, ибо я скачал один из примеров, выложенных на форуме, запустил в симуляторе, да так и не понял, где там дисплей, где кнопки, и что делают всякие макросы, особенно под замочками. Может и не начинать?
Спасибо за то, что хотя бы прочли до конца )

kucherik
22.09.2014, 16:33
Проблем с написанием и корректировкой программы для ваших нужд нет. Однако остались технические вопросы.
1. Как будете подключать контролер параллельно регулятору температуры или последовательно
Каждый из этих режимов имеет свои преимущества и недостатки. Первый позволяет на регуляторе выставить нижнюю температуру, для котла и при понижении уличной температуры поднимать температуру в котле. Второй способ более безопасный, ограничивается верхняя температура котла, но в случае "подвисания" контроллера могут быть проблемы.
2. Рекомендую управление насосов сохранить для отопительного контура, приведет к серьезной экономии в межсезонье. По значениям уличной температуры будет включаться и выключаться отопление. Но чтобы более точно об этом поговорить нужно знать вашу гидравлическую схему.
3. Датчики какие собираетесь использовать, например для быстрого монтажа можно использовать накладные, а для большей точности использовать погружной датчик в тело котла.

Подобная схема мною была реализована правда в более сложном решении с трехходовыми кранами, два контура отопления, из них один теплый пол, дополнительный датчик температуры помещения для коррекции температуры подачи с настройкой процентов влияния на эту температуру. Уплавление температурой котла и бойлером.

ниже ссылка
http://www.owen.ru/forum/showthread.php?t=3963&page=4

p.s. чем смогу помогу :)

Alias
22.09.2014, 17:19
Спасибо за ответ!
1. Да, старый задатчик температуры убирать не стану, пусть будет предохранителем от перегрева. Соответственно, электрическая цепь будет последовательной. Это безопаснее, поскольку теплоинерционность дома очень большая, по крайней мере достаточна, чтобы подстраховывать систему от размораживания на случай зависания контроллера. Всегда кто-то дома есть и даже в случае задувания котла и его останова есть кому среагировать.
По управлению насосами немного не понял. Это чтобы в межсезонье они тоже останавливались без работы горелки? То есть горелка котла и насосы работают синхронно?
2. Система гидравлическая проста: котел на первом этаже, от него идут два стояка по правой и левой частям дома с горизонтальной двухтрубной разводкой по каждой половине этажа. И два стояка с обраткой, которые потом объединяются. Четыре "квартиры" на одном КЧМ, по две - на этаже. Никаких теплообменников и трехходовых кранов: обратка - в котел, из него - в стояк. Стояки выполнены как минимум 75мм, поэтому даже принудительной циркуляции на случай аварийного обесточивания не требуется, саму автоматику тянет бесперебойник. Но все-равно с насосами прогрев приборов равномернее, разница прямой и обратной воды невелика, и они молотят весь сезон без остановок. Если ими и управлять, то летом, по десять минут в неделю, чтобы не прихватило.
Контура для ГВС тоже нет, там стоит газовая колонка и три электрических Аристона, по одному на фазу. Огород целый, короче, и сборная солянка. Но уж что есть, то есть.
3. Датчики для контроля хочу поместить в погружные гильзы, у КЧМ она достаточно большого диаметра, в у бойлеров еще нужно померить.

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

Василий-Донецк
23.09.2014, 21:59
Сидел. Читал. Вдруг улыбнуло.
Вокруг темно. Все по подвалам.
Гвоздики слышал. Дали разом.
Перезаряд. Сейчас обратка.
Да нет. Все тихо мин. 10.
Потом опять и где то рядом.
Воды и газа нет - ну ладно.
Есть свет и интернет. Жить можно.
Что будет завтра. Х** кто знает.
До взлетной меньше километра.
Пошел проверил воду- нету.
Сижу читаю. Форум ОВЕН.
Контроллер ПЛК. Да на х**
А вдруг накроет завтра ГРАДОМ.
Какие бойлеры, задвижки.
В п**ду их. Еб**ло опять.
CoDeSys. Jitter. Серво-привод
И ведь не спиться твою мать.
Пока затихло. Звоню детям.
Люблю. Целую. Давят слезы.
Ну что - жить будем.
В это верю. А что другого остается.

Василий-Донецк
23.09.2014, 22:32
Сказал бы кто раньше сказал что под обстрелом буду сидеть и писать программу для ПЛК- послал бы.
А так.
В общем задача такая:
Котел чугун напольный.
Обвязка через гидрострелку.
Бивалентный бойлер.
Солнечный коллектор.
Теплый пол.
Прямой контур радиаторного отопления. (Хотя не факт. Скорее переделаю на серво-привод)
Циркуляционный насос ГВС.
+ аварийный охладитель коллектора (пока в теории)

Бл*дь стрельба аж дом трясется.

ПЛК63 + МР1.

kucherik - молодец. Побольше б только комментариев хотелось.
Как слеплю в презинтабельный вид выложу на обсуждение.
Буду рад любой критике.

Проект пишу для себя в новый дом (если устоит).

kucherik
24.09.2014, 22:23
Для написания программы нужно знать
1. технологию процесса (ну тут вроде бы отопление, но если другие сферы то без технолога на первых этапах никак !!!)
2. Особенности подключения (схема электрическая принципиальная), хоть от руки
3. Хотелки заказчика. Например я тут предлагаю многоточечный график что для котла что для отопления, управление насосами, например их принудительное включение раз в сутки на 5 минут
4. Желание.

Со всем остальным подскажем %)

p.s. Не водите машину быстрее, чем летает Ваш ангел-хранитель. Жванецкий

Alias
24.09.2014, 23:14
Ну да, служенье муз не терпит суеты )

1. Технология процесса. Если это касается отопления, то нюансы есть. Факультативные же приложения просты до безобразия.

1а. Имеем три электрических водонагревателя, включенных по воде параллельно. Три - для резервирования и снижения нагрузки на фазы, можно было бы взять один большой бак на 220в, но не стали. Соответственно, в каждом из них должно быть по датчику температуры, то есть три входа на ПЛК73, и три реле на выходе для управления каждым водонагревателем индивидуально. Задаем в параметрах, желательно через панель, а не компьютер, температуру для приготовления горячей воды, и сравниваем, в каком бойлере включать ТЭН. Можно заложить гистерезис сразу, а можно тоже изменять его через панель или даже комп. То есть выставляем нужную температуру воды глобально, сразу для трех, а управляем каждым индивидуально по месту. Если можно будет запрограммировать ночной режим, то есть интервал суток и поправку к уставке, то будет замечательно!

1б.Греющий кабель. Классная штука, к слову. Раньше с карниза по северной стороне, в аккурат, где труба из котельной, свисали огромные сосульки, водосточная труба была хронически забита льдом. А сейчас - все чисто. Так вот, греющим кабелем желательно тоже управлять, через реле. А включать только тогда, когда температура на улице ниже, скажем, +2, но выше -8. То есть работать в ограниченном диапазоне уличных температур. Ночных поправок тут не нужно, но если можно было бы вбить календарь, то есть, к примеру, с пятого декабря и по апрель, то было бы кстати.

1в.Отопление. Насосы не трогаем, пусть молотят до конца сезона. Но можно завести и на ПЛК, тоже через реле, например, чтобы работали в режиме "Сезон" всегда, а в режиме "Лето" - только раз в неделю. Но это мелочи, можно даже не думать. Штепсель тоже удобная штука.
А вот котел... Управляем им через реле. Понимаю, что их всего четыре на 73, кажется, но это решается. Пусть управляется котел замыканием контактов встроенного реле ПЛК73. Уставка вычисляется по кривой от уличного датчика, которую можно интерполировать и по десяти точкам, вполне сносно будет. Можно заложить две-три таких кривых. Хотелось бы с панели выбирать, по какой кривой работать в данный момент и выбирать значение поправки для смещения кривой вверх-вниз на случай сильных ветров, к примеру. То есть выбрали кривую, которую я составлю сам под свой объект, и в зависимости от силы ветра буду ее просто смещать по вертикали. Насколько это правильно, я не знаю, но если эту поправку можно будет оперативно менять с панели, то она пригодится в любом случае. Нужно также задавать гистерезис по температуре прямой воды. И ночной режим с поправкой к основной кривой или выбором другой, уже ночной кривой.
Чисто из любопытства можно поставить термопару на выходе котла, чтобы смотреть температуру уходящих газов, сейчас там у меня торчит ртутный термометр, что очень неудобно.

2. Особенности подключения. Да вообще никаких особенностей, даже не знаю, что рисовать. Всем управляют встроенные реле, три - на водонагреватели, одно - на насосы, еще одно - на греющий кабель, и реле на автоматику котла. Понимаю, что релюшек мало, а потому придумаю вариант, если на части выходов будут оптопары. То есть управление - логическими уровнями на выходе ПЛК: либо через реле, либо через оптопару.
На входе ПЛК только датчики температуры: четыре датчика от котла и водонагревателей, один с улицы и одна термопара - из трубы котла.

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

4. Желание. Любое желание должно совпадать с возможностями, а я программировать не умею вообще и только еще пытаюсь разобраться в том, что же из себя представляют ПЛК, посматривая вебинары. Поэтому без начальных инъекций со стороны грамотных программистов с хотя бы начальной прошивкой под мою задачу я не обойдусь.

Спасибо!

ЗЫ. А вот придумались и хотелки. Но это уже скорее по части НИР : учет переходных процессов и теплоемкости и теплоинерционности здания. Корректировка функции зависимости уставки от температуры окружающей среды по дополнительному каналу - температуры внутри помещения, что позволило бы учитывать инфильтрацию. А еще можно ввести счетчик импульсов с анемомерта...
Ох, много можно придумать. А вот нужно ли?

kucherik
27.09.2014, 18:08
Пример делаю для 63 контроллера, на основе модификации кода вышеизложенного примера

Тех.задание:
1. Датчик на улице подключен к первому порту
2. Датчик котла подключен к второму порту, погружен в тело котла
3. Датчик помещения, подключен к третьему порту
4. В зависимости от температуры на улице формируется задание для котла, по температуре помещения коррекция в 30%
5. Выход для управления одним насосом отопления с выбегом котла в 5 минут

В программе:
1. Авария контроллера, происходит по отказу любого датчика, перегрева котла ну и что тут может захотите добавить
2. Гистерезис работы котла +/- 5 градусов от вычисленной температуры
3. Ограничение на диапазон, работы котла, легко сделалось настраиваемым, баловства ради :)
4. Многоточечный график для настройки режима, параллельное смещение не трогаю есть в железе на этой серии контроллеров

Выхода:
1. Авария автоматики (по схеме должен включаться стандартный термостатный режим управления котлом, насос молотит постоянно в этом случае)
2. Термостат котла
3. Насос отопления-котла

Почесал репу и пришел к выводу, что подходит программа выложенная в этой ветке bearbeer.zip
Изменения в ней, не удаляя блокируем работу трехходовика (вдруг пригодится в будующем, для этого в элементы SEL 1000 меняем на 0), бойлер переводим в режим для котла, добавляя математику для вычисления температуры по погоде. Переменные TminK2 и TmaxK2 это уже значения для ограничения котла.

По примеру еще изменил приоритет, теперь нужен сброс, а не включение котла, датчики пока так бросил как было, поэтому программа по месту должна отладиться еще, ну переименовать пункты меню и что, там захотите красивостей, пока рабочих два датчика, вместо третьего надо поставить заглушку. Это задание для самостоятельной работы. Чтобы разобраться в программе.

Удачи :)

Alias
02.10.2014, 09:32
Спасибо большое! Буду вникать!

omelchuk
21.11.2014, 16:47
Доброго времени суток Всем Уважаемым Форумчанам.
Вот и в мои 44 повезло ввязаться в контроллеры, а именно помочь другу в малой автоматизации его дома в деревне.
Сам я в радиоэлектронике с 13-летнего возраста, начинал, как и большинство нашего поколения с детекторного приёмника, а потом понеслось. Однако верхом моих познаний в цифровом железном деле оказалась логика 155, 176, 561 и т.д. уровней.
Хотя с ней у меня проблем нет, даже синтезаторы частоты мастерил на 430Мгц...
По части программирования Бейсик предел, но даже на нём пробовал писать маленькие программки, но уж очень давно...
По профилю своей последней работы, 12 лет, занимаюсь отоплением, вентиляцией, кондиционированием. НО всего лишь на уровне выход, вход в/из контроллера и далее по схеме. Контроллерами(программированием) занимаются другие, "специально обученные" люди.
Имею достаточное понятие о принципе и сути управления процессами.
Извиняюсь за лирику - о главном.
Был приобретён ПЛК63РУУУУУL + МР1.
Печь со встроенным водяным контуром, воздушным контуром(для тёплого воздуха - отлично работает), регулировка тяги(поддувало), планируется (в стадии изготовления) аккумуляторный бак, контур отопления, тёплый пол, бойлер (заводского изготовления) с водяным и электро-нагревателеми.
В данный момент идёт(надеюсь успеем до ёлочки) сборка шкафа, контроллер на столе. Пробую первые шаги.

И первая же закавыка.
Есть, к примеру, уставка. Должна быть возможность её изменять и с панели прибора, и из визуализации. Она должна сохранятся при пропадании питания.
НЕ МОГУ!!!! Читал, форумы курил - МНЕ не помогает.
Создал образец, маленькую программку - ткните носом где КОСЯК.
И начальная стадия моего "шедевра"

lara197a
21.11.2014, 22:13
во вложении програмка, пояснения имеются.
Поиск в КДС работает.
Изменяемые параметры:
- время дежурного режима
-уставка температуры.
Имеется визуализация.
Сразу оговорюсь, что программа писалась без практической цели, от безделья.
ПЛК стоит в гараже.
Если будут вопросы, то пишите в личку.

omelchuk
25.11.2014, 17:16
УРА!!!!!! Победил!!!!
Еще раз суть проблемы.
Есть уставка, к примеру, температуры, расположена в SubMenu. Должна сохранятся при отключении питания!!!
Задача: иметь возможность изменять её и с панели прибора и из визуализации CoDeSys HMI.
Руководство пользователя ПЛК63 прямо указывает на невозможность выполнения поставленной задачи:15423

Однако вопрос всё-таки был РЕШЁН положительно!!!!
добавлением промежуточной переменной.

Может кому пригодится.....

omelchuk
03.12.2014, 09:13
И ещё один, не скромный, на мой взгляд, вопрос.
Для меня нереальная задача получить данные из прибора, подключенного по сети 485.
Почитав документацию, увидел, что в других ПЛК, более "старших", всё это делается в меню конфигурации как два пальца обасфальт...
Модули ввода или вывода - без разницы...
С ПЛК63 такие вещи не проходят, увы.
Существует-ли что-то подобное на этот ФБ -15553
Буду бесконечно признателен за посыл в нужном направлении.

Вроде нашёл кое-что, подскажите, если правильное направление: OWEN чтение 8 входов МВА8(ST).pro в папке ModBus_And_OwenNet из примеров на сайте Овен?

omelchuk
04.12.2014, 10:23
Вот собрал такой конструктор из доступной моим познаниям информации.
ФБ для считывания информации ПЛК63 из МВА8.
Может кто скажет, а лучше, если попробует - будет толк иль нет.
Есть планы приобрести дополнительные модули аналогового ввода/вывода,
будет жаль потраченных денег, тем-более с декабря подорожало где-то на 30%....

Гарчев Евгений
04.12.2014, 11:14
Толк будет, пример вполне рабочий.

tPorte
02.02.2015, 12:18
Помогите с ЖКИ!! Подскажите пожалуйста! На CFC как вывести температуру типа real на ЖКИ??? Поставил библиотеку Work_Mode.lib и воспользовался блоком ShowReal (вывод числа типа real в указанной позиции). Задаю параметры 0,0,0, String (название) и переменную типа real!! Но на ЖКИ высвечивается только название String переменной! Помогите пожалуйста!!!

lara197a
02.02.2015, 13:31
переменной нужно указать другую позицию.
У Вас видимо название записывается поверх значения.
Попробуйте сначала в одну строку записать название.
В другую значение.
потом подвигаете- все поймете.

Валенок
02.02.2015, 18:45
Небось формат профукал
PE : real;
ShowReal(0,0,0,'Давление%5.2fбар',PE);

energvk
02.02.2015, 21:20
Если в CFC хотите, то что-то в этом роде

16537

tPorte
03.02.2015, 09:16
Все понял!! '%2.1f' -это форматный указатель к входящей переменной! Все получилось, СПАСИБО Вам lara197a, Валенок, energvk за скорую помощь!:)

ob1391
21.02.2015, 07:04
Доброго всем дня!
Помогите начинающему.(не бейте сильно). ПЛК73, в программирование - нет вообще знаний, а через CFC хоть медленно, но продвигаюсь. Все примеры по работе с клавиатурой, светодиодами и вводом - выводом на экран в других языках... Вывод на разные экраны уже освоил
Необходимо:
изменять уставки на экране с клавиатуры
управлять с клавиатуры (любым выходом)
засвечивать светодиоды при разных включениях
(можно просто ссылки)

omelchuk
07.03.2015, 16:35
Сегодня получилось подружить КДС и ПЛК63 через Ethernet напрямую, без виртуального ком порта с помощью USR TCP232. Скоро обзаведусь WiFi прибамбасом ( жду из поднебесной ESP8266)- попробую и контроллер отвязать...
Наконец-то нет USB шнурка-привязи!!!

приборист
07.03.2015, 16:54
Сегодня получилось подружить КДС и ПЛК63 через Ethernet напрямую, без виртуального ком порта с помощью USR TCP232. Скоро обзаведусь WiFi прибамбасом ( жду из поднебесной ESP8266)- попробую и контроллер отвязать...
Наконец-то нет USB шнурка-привязи!!!

А чем так плох виртуальный ком порт?

omelchuk
07.03.2015, 17:55
Да вроде и ничем. Просто хотелось сделать соединение на одну программу(службу) меньше. Все мои пробы исключительно для работы без проводов связи, в большей степени USB... Знаю, америку не открыл, но самому приятно.

Эдуард_Н
12.03.2015, 07:03
Kucherik, спасибо за блок "P3Servo", работает отлично. Поставил его на управление горелку с модуляцией, правда пришлось разделить временные параметры, на закрытие свои импульс-пауза, на открытие свои.

kucherik
17.03.2015, 14:58
Спасибо, что пользуетесь

omelchuk
19.03.2015, 17:45
Уважаемые Гуру.
Хочу уточнить один момент.
"По слухам", ПЛК63 сложно обработать в одном цикле программы много ПИДов, запросов, "будет цикл оочень большой длительности", поэтому будет ли правильным "копание" в данном направлении?
Или я заблуждаюсь, и это излишне. Периферийная сеть по modbus.
Просьба не смеятся...

Вольд
19.03.2015, 18:06
А что изменится ? Период обсчета FB от этого меньше не станет, а наоборот увеличится . Все надо делать в одном цикле.

omelchuk
20.03.2015, 08:17
В руководстве кдс написано, что при EN false, всё, что за ним не выполняется, но значения на выходах не изменяются. codesys_v23_ru стр.5-55
Исхожу из этого.

Вольд
20.03.2015, 10:07
В руководстве кдс написано, что при EN false, всё, что за ним не выполняется, но значения на выходах не изменяются. codesys_v23_ru стр.5-55
Исхожу из этого.
Чудак-человек. Еще раз повторю - Период обсчета FB от этого меньше не станет, а наоборот увеличится. Обрати внимание на слово период.

omelchuk
20.03.2015, 10:45
Вольд, обращаю внимание. Но получается, что даже функциональный блок, отключенный по EN, общитывается? Хотя, в том-же руководстве написано, что с целю оптимизации вычислений компилятором некоторые действия могут не выполнятся, если не имеют смысла. Или это касается только логики?
Тогда придётся написать несколько программ и запускать поочерёдно через конфигуратор задач?

omelchuk
20.03.2015, 10:50
Или, может вообще я зря парю себе и людям мозг, и ПЛК63 общитает 6-7 ПИДов за не выходящее за рамки "приличия" время, чего должно вполне хватить для домашнего итп?

Вольд
20.03.2015, 10:57
Или, может вообще я зря парю себе и людям мозг, и ПЛК63 общитает 6-7 ПИДов за не выходящее за рамки "приличия" время, чего должно вполне хватить для домашнего итп?
Ты запутался в трех соснах. Не надо высасывать проблему из пальца. ПЛК63 обсчитает твои 6-7 ПИД со свистом. Еще раз прочти пост #92.

omelchuk
20.03.2015, 11:07
Вольд. Прочитал внимательно и понимаю смысл. Просто однажды в техподдержке сказали, что для 63-го больше пяти ПИДов тяжело будет. Завтра соберу макет на столе и попробую.
Приделаю релейный выход и буду менять его каждые несколько (10-1000) циклов, и по времени высчитать цикл в реальности. Правильно думаю?

ASo
20.03.2015, 11:19
Просмотреть реальное время цикла в task manager - не?

omelchuk
20.03.2015, 11:44
Никогда ещё не пользовался. Сейчас разобрался, что к чему - работает! :)
Век живи - век учись.
Простое управление релейным МВУ8 по протоколу овен - макс 750мкс.
Спасибо, ASo, Вольд

PAVEL_EKB
12.05.2015, 07:01
Добрый день, подскажите, пожалуйста. Можно ли программно изменять период ШИМ сигнала? Поясню, один из выходов настроен на выдачу ШИМ сигнала с переменной длительностью( мощностью,управлять очень просто), но мне надо еще менять период, а как до него добраться не знаю. Нужно добраться именно до аппаратной настройки ШИМ, которая, судя по описанию, может изменяться по Modbus (регистр 295), либо по протоколу ОВЕН (thpd индекс 4). Я бы воспользовался каким-нибудь BLINK, но у него большая погрешность (у меня команды от 10мс до 5 с, период от 1с до 60с)

kucherik
23.11.2018, 10:47
Народ подскажите и давно скачать нельзя вложенные файлы, у меня в архиве вроде все сохранилось

dorofeevms
11.12.2018, 10:39
Приветствую!
Да давно уже нельзя скачать :( с 2017 года как минимум... Писал в личку - буду признателен за примеры! Если правильно понял - последний релиз был в архиве BearBeer.zip .
Мне очень не хватает рабочих примеров с PID (еще лучше - с АНР), и управление 3х точечным сервоприводом.
Заранее спасибо много раз!

kucherik
11.03.2020, 10:30
Решил закрыть "долги" тут весь архив всего что делал с овеном, также часть примеров скачанных с форума
https://yadi.sk/d/DA1O04jPGBTFEQ
https://yadi.sk/d/0OUbnyKcz_LKLA
https://yadi.sk/d/DgFnkxXxH6s7eA

Николай2
13.03.2020, 14:01
Спасибо за образец