Прилетела халтурка запрограммировать контроллер HiWELL.
Для него есть своя среда программирования HIWELLHAPPY.
Первые впечатления: совсем не HAPPY .
Нет символьных имен для переменных, вместо них зарезервированные имена (к ним можно написать комментарии)
Комментарии к переменным не выводятся на поле программы, и мышкой когда наводишь, не подсвечиваются (посмотреть можно открыв специальное окно).
Нет возможности программировать в ST.
Функциональные блоки создавать можно, но есть ограничения (8 входов, 3 выхода, если не путаю).
Попробовал таймером воспользоваться внутри функционального блока, если один - работает нормально,
если больше, то таймер работает не корректно (у каждого таймера свой номер, задается в свойствах, из-за этого и глюки,
что функциональные блоки работают по факту с одним таймером, приходится выносить их в основное тело программы).
Есть прикол с удалением вставкой входа для функционального блока.
Создадим Саб программу coolprogram c двумя входами и одним выходом.
Внутрь для примера засунем всего один "OR".
И вдруг мы решили добавить еще один вход.
Ниже картинка уже с добавленным входом, она не отличается от того, что было до вставки.
Вот такие первые впечатления, буду мучатся дальше.
Спустя несколько лет знакомство продолжилось. Только теперь EKF. Один в один. Нашему проектировщику нравится исполнение в железе (мне тоже).
Нужно сделать проектов много, и быстро. Ещё тачпанель ekf (среда программирования как у System-Electric, но проекты системэлектрик не хавает (и наоборот тоже) ). Есть одна хорошая фишка. Может запитаться от усб без 24 В.
По мере работы буду стараться дополнять. Теперь продолжение в среде Prologic Master.
У EKF можно скачать пример программы, если зарегистрироваться. Ссылка.
Еще по запросу вроде могут дать с водяным (мне мой начальник ссылку прислал от них, я не искал).
Реализация триггера.
Завис на такой простой вещи :). Отвык.
Синим подсвечено два блока. "SET" - установить, "RST" - сбросить. Тем кто программировал в smlogix и owenlogic тяжеловато для восприятия. Тут больше похоже на фбд в кодесисе или у сименса вроде так сделано.
Идея в следующем если на вход "SET.in" пришел "TRUE", то переменная "M2" устанавливается в "TRUE". Если со входа "SET.in" пропадет "TRUE", то M2 оставит свое состояние "TRUE". Блок "RST" наоборот при получении на свой "in" сбрасывает M2 в "FALSE". Не забывайте, изменить значение М2 можно в любом месте программы, не только блоками "SET" и "RST", поэтому надо очень внимательным быть.
М2 - по сути глобальная переменная для контроллера. То что я могу до нее добраться из подпрограммы для изменения - может быть источником проблем и опасностей. В owenlogic и smlogix такой возможности нет. В кодесисе из функционального блока можно прочитать почти все, на счет записи не буду врать.
Про нумерацию блоков в программе.
Блоки нумеруются по мере выставления их на поле. Вернемся к моему макросу.
Обратим внимание на два блока: F6 - сумматор, и F12 - компаратор. В скобочках указаны индексы выполнения. Это подпрограмма. Когда она вызывается, все локальные переменные обнуляются. Компаратор должен выполнится после сумматора. У меня была ошибка - сумматор выполнялся после компаратора (индекс был выше, сейчас правильно).
Как работало неправильно. LV4 еще не посчиталось на F6, компаратор(F12) уже сравнил (LV4 при этом равно 0), а после уже происходило суммирование. При чем в симуляции это не видно, если только по шагам. Кстати LV4 - это локальная переменная, ее нет в списке входов/выходов.
Если на блоке кликнуть правой кнопкой мыши, то появится окно
Синим подсвечен пункт для смены индекса.
Описание входов/выходов макроса.
Можно еще отметить, что у предлагаемых в среде ПИДов входы INT. В примере все значения температур INT умноженные на 10. В моем примере тоже. Аналоговые входы похоже тоже отдают значения в таком формате.
Я собираюсь сделать контроллер слэйвом. Мне понадобится эта табличка.
Как делать битовые маски.
Теперь передо мной встал вопрос, как биты записать в число. Моя любимая кнопка F1. Насколько я понял нужно использовать эту функцию:
Я не очень силен в английском, но вроде то что нужно. Из описания выцепил еще кое-что
Для этой функции нужно создать таблицу битов
Жмем правой кнопкой мыши на "Discrete bit table", заполняем, коментарии можно заполнить сразу здесь.
Берет переменную V103 раскидывает ее биты по таблице.
В симуляторе глянем
Число 5 раскидало по битам согласно таблице.
Про таймеры
Справка про таймер по F1 выдаст следующее:
Ничего особенного :). Обычная задержка на включение.
Но за кадром останутся две особенности. Первая:
Оказывается есть энергонезависимые таймеры. Есть и есть.
Вторая (уже поинтересней):
Оказывается энергонезависимые таймеры сбрасывают свой счетчик по переключателю RUN/STOP. Плюс к этому, в зависимости от номера у некоторых таймеров может быть настройка масштаба времени.