Макрос хорош в том случае,есть готовая программа просто надо сделать компактнее, выделяешь кусок и упаковываешь в макрос.
Макрос хорош в том случае,есть готовая программа просто надо сделать компактнее, выделяешь кусок и упаковываешь в макрос.
Здравствуйте, VaBo.
Для освоения на базовом уровне CDS Вам необходимо разобраться с: функциями, функциональными блоками и подпрограммами. В чем их отличия и особенности + освоить как минимум ST, SFC, CFC или FBD (мой выбор).
P. S. а макросы это для фанатиков CFC, я этим языком не пользуюсь по этому в первый раз от Вас и услышал - спасибо Вам за это :-)
Автоматизация Диспетчеризация Сервис
e-mail: ads-kaluga@mail.ru
Не все так запущено - на ASM и С для микроконтоллеров я писАл лет 13 (с 99 года). Со школы знаком с цифровой схемотехникой - FBD не проблема (тем более часто использую FBD с контр. другого производителя). На ST - TraceMoud - тоже лет 6.
Проблемы только с узнаванием тонкостей CDS. Вот сейчас соображаю - есть ли способ сказать мастеру, чтобы постоянно не "долбился" в слейв, если тот не отвечает. Например, как в Лектусе сделано - несколько раз не ответил - ушел в "запас" с периодической проверкой.
Есть способ?
Последний раз редактировалось VaBo; 10.12.2016 в 11:52.
Да есть)
Для конфигуратора такая возможность выглядит так:
В каждом мастере есть параметр Byte (*Start/Stop*). Если в программе постоянно присваивать значение 254 - то данный мастер опрашивать слейва не будет. Если перестать присваивать 254 или присвоить 255, то мастер продолжит опрос слейва.
Так же тут есть параметры (*Last Error*) и (*Last Adress*) с их помощью можно идентифицировать нештатные ситуации.
Автоматизация Диспетчеризация Сервис
e-mail: ads-kaluga@mail.ru
Спасибо, интересно...
Но таким образом я торможу весь мастер, а нужно затормозить только один юниверсал девайс, остальные ведь работают?
Как узнать, что только что произошло событие обмена по модбас и в переменных состояния появились обновленные данные?
И еще дилетанский вопрос - каким образом в CDS принято разделять задачи (по внешним событиям, по периодам выполнения)?
В микроконтроллерах, например, приходилось бить задачи на отдельные функции, создавать в глобальной зацикленной ветке счетчики-таймеры и флаги для задач (там же флаги от прерываний) и вызывать нужные ф-ии, при этом сбрасывая флаги.
Есть ли в CDS более продвинутый способ? Перемалывать все подряд с циклом 1 мС как-то не хочется.
Последний раз редактировалось VaBo; 10.12.2016 в 20:54.
У каждого "утеверсал модбас девайс" есть аналогичный параметр см. вложение работает аналогично.
Автоматизация Диспетчеризация Сервис
e-mail: ads-kaluga@mail.ru
Ну так есть же "Ласт еррор", если ошибок нет значит данные актуальны.
Можно реализовать как захочете, вот как нравиться так и делайте. Как-то стандартных подходов нет - каждый делает в соответствии со своим опытом и навыками.
В ПЛК_ПРГ всю программу делю на глобальный задачи (создаю отдельные подпрограммы) например:
1. Контур отопления.
2. Контур горячего водоснабжения.
3. Контур теплоносителя для системы вентиляции.
Дальше в данные программы реализую на SFC например:
1. Инициализация/проверка на достоверность переменных. и Ждем команды "пуск".
2. Пуск гидравлики.
3. Пуск регуляторов температуры.
После прихода команды "Стоп":
4. выключить насосы.
5. Закрыть регулирующий клапан.
6. Перейти в начало программы и ждать команды "пуск".
а вот внутри шагов прописываю саму логику работы.
Если куски текста программы повторяются выношу в виде функций и функциональных блоков.
Если логика шага сложная, опять разбиваю на подпрограммы и так далее.
Например: позиционирование в начальное положение исполнительных механизмов для станка ЧПУ необходимо и при включении станка и при сбросе аварии и при завершении цикла. Таким образом 100% это должна быть отдельная подпрограмма с входом "старт позиционирования" и выходом "все отпозиционированно", количество входных входных переменных может быть и больше, но не меньше.
После команды "старт позиционирования" ждем подтверждения, что все отпозиционированно и идем дальше работать)
Автоматизация Диспетчеризация Сервис
e-mail: ads-kaluga@mail.ru
А где вы взяли описание этих переменных - документацию вроде перешерстил, - не нашел...
И с ласт еррор мне непонятно следующее: обмен по сети идет асинхронно от основной задачи, а поллить эту переменную я могу только в самой задаче. Тогда большая вероятность что я либо пропущу ЛАСТ ЕРРОР, либо (небольшая вероятность) что я увижу ЛАСТ ЕРРОР, но при считывании адреса считаю уже следующий (валидный). Или при ошибке обмен останавливается до её сброса?