Мужики, может есть у кого готовые старые проекты в Codesys V2.3, написанные только на языке ST? Хочу посмотреть(изучить) оформление, возможные варианты решения различных задач. Кому не жалко, скиньте сюда или через личку, напишу свою электронную почту.
Последний раз редактировалось kondor3000; 03.03.2024 в 20:03.
Только на ST не делал - только в связке SFC+ST.
При помощи SFC разделял задачу на процессы:
- инициализация переменных при включении питания
- обработка аналоговых входов (масштабирование, сглаживание)
- работа с панелью оператора (формирование команд, смена режимов, формирование слов состояний для визуализации и прочее)
- валидация параметров, введённых с панели или другого источника
- обработка кнопок и переключателей на щите (формирование команд, смена режимов)
- последовательность пуска управляемого агрегата (барабанный командоаппарат на ST при помощи CASE)
- регуляторы
- сигнализация (включение постоянного, прерывистого звукового сигнала, отключение звуковой сигнализации)
- защита - проверка выхода параметров процесса за допустимые диапазоны в зависимости от текущего состояния управляемого агрегата - формируются сигналы вхождения в предупредительный диапазон, выхода за допустимый и начало отсчёта задержки, завершение отсчёта задержки и аварийного останова агрегата
Сейчас бы ещё учитывал совет о именованных константах для номеров состояний агрегата. А тогда просто нумеровал их с шагом 10, чтобы можно было вставить шаги без изменения нумерации.
Рабочие программы привести не могу, а тестовый пример работы с файлами в ПЛК110[М2] запросто.
Программа в ПЛК содержит переменные, вводимые с панели оператора и буфер обмена с файлами, содержащий все эти переменные.
По команде "записать в файл", переменные копируются в буфер и содержимое буфера сохраняется в файле.
По команде "прочитать из файла", содержимое файла копируются в буфер, но переменные остаются неизменными.
По команде "установить в буфере настройки по умолчанию", в буфер записываются значения "по умолчанию", но переменные остаются неизменными.
По команде "скопировать настройки из промежуточного буфера", содержимое буфера копируется в переменные.
Таким образом, появляется возможность ознакомления с сохранёнными ранее настройками и сравнения их с актуальными.
Добавлю, что к такой структуре программ в CoDeSys пришёл самостоятельно, до этого работал в другой среде разработки и программа была на LD без возможности структурирования единой "простынёй" в ~500-1000 строк.
Сейчас перешёл на другую работу, и для программирования в CODESYS 3.5 во всех наших уроках рекомендуется другой подход к структуре программы - создаются задачи и они вызываются не из основной программы, а каждая отдельно с заданным интервалом через штатный планировщик.
Не могу сказать, какой подход лучше - не встречал анализа.
Последний раз редактировалось FPavel; 03.03.2024 в 21:00.
Вот ещё пример программы SFC+ST+FBD
Задача была - автоматизация работы бака-накопителя ГВС. Автоматическое или ручное управление одним насосом и несколькими задвижками, поддержание уровня в баке при помощи поплавкового датчика уровня с 4 дискретными сигналами.
Была экономия на физических кнопках (а значит и модулях ввода), поэтому с панели оператора были "кнопки" пуск/стоп процесса, сброс и проверка сигнализации, ручные и автоматические режимы насоса и задвижек.
Но структура программы осталась по моему выдуманному принципу
Сначала хотел при включении питания всё закрывать и выключать, но потом отказался от этой идеи, поэтому стадия Init пустая.
Я, собственно и не собирался бросать начатое тех.задание.
Посмотрел, стрим Сергея Романова о разборе его программы на ST, что заметил, так он пишет CASE с шагом в 10, то есть 0,10,20,30 и т.д., чтобы в процессе разработки можно было легко внести промеж еще несколько шагов, при надобности. Еще он довольно редко в "IF" использует слово "FALSE" и "TRUE", а вместо этого пишет "NOT" и просто переменную. Например моя запись: IF abc=TRUE AND asd=FALSE THEN bcd:=TRUE;END_IF
И например Сергея запись: IF abc and NOT asd THEN bcd:=TRUE;END_IF Только мне пока не понятно, что это дает и есть ли в этом "полезная" разница. К тому же "IF" он применяет прямо в CASE, чего я не делал.
Спасибо за программы! Я топлю за ST, так как иногда приходится по мелочи залазить в программы контроллеров на работе и к примеру, что-нибудь откалибровать. Так вот, в какую установку не залезем, везде вся программа написана именно на ST. Будь то, контроллер SIEMENS или Allen Bradley.
На форуме нет примеров структурированных программ, все - на едином листе. Спросить совета было не у кого. А самообразование приводит к причудливым решениям )
Исходя из предыдущего опыта не желал получать "простыню", а средствами CoDeSys (SFC) можно было упорядочить код, упростить навигацию по нему.
Работу с периодическими задачами сразу не освоил, а потом за 10 лет было всего четыре проекта в CoDeSys, которые нужно делать срочно - тут не до изысканий новых подходов, когда предыдущая структура устраивает.
По правде, за всё время у меня не возникало желания менять структуру, которую придумал с самого первого проекта. Не видел недостатков, одни достоинства в простой навигации (в дереве объектов подпрограммы, в SFC процессы), в возможности выбирать язык для каждой задачи, простая реализация инициализации при включении питания.
К слову, в OwenLogic уже несколько раз менял стиль и пока не могу определиться "со своим".