Не обязательно ограничивать макс. или мин. диапазоном, достаточно ограничения которое требуется для функционирования алгоритма.
Вид для печати
для макросов используемых двумя и более пользователями, очень обязательно, чтоб не получать ошибки там где не нужно, вот ссылка на показательный пример,тоже думал что достаточно требуемого мне
Добрый день. Не знаю БАГ или НЕТ. В железе не работают переходы по BOOL переменным. И нет возможности убрать переход между экранами( может я не нашёл так что подскажите). В проекте работаю I8 (аварийка) и AI1 (пожарка). В железе нет. Срабатывает через раз.
Сейчас там на этих входах переключатель( схема собрана на стенде) Пока "игрался" заметил такте поведение в железе.
Юрий продолжил ковырять работу дисплея ПР200. Вывод на экран сообщения по состоянию входа (Был вопрос как сделать в группе VK). Проверил схему подключения железа и загрузив программу из поста #1844 Заметил странность . Переключение экрана происходит по заднему фронту сигнала( нажимаем кнопку экран не меняется, отпускаем кнопку происходит смена экрана. )
Написал простую тестовую программку.
Нарисовал новую схему тест перехода и тут переход происходит по переднему фронту(нажал кнопку переход на экран)
Самое интересное это работа входа по одной схеме разная. Ниже два файла . Вход I8 (Аварийка) и вход I7 (вход 2) одинаковая схема подключения.
Лоджик версия 1.13.184.17394. система винда 8.1
Возможно дело в том, что вариант который я привел, отличается от того что в файле "тест экрана-вход.owl". Возможно такой вариант не будет работать на более сложной логике, как это было в предыдущем варианте, либо будут пропуски.
Цитата от разработчика:
"В данном случае единичное значение переменной должно вызвать переключение экрана. Но экран переключится асинхронно с циклом программы и, чтобы, например, избежать повторного переключения, нужно не менять значение переменной пока она не сбросится в 0.
В 0 она сбросится автоматически по факту перехода на требуемый экран.
После этого можно безопасно перейти на другой экран и др."
Прикрепил тестовый вариант, берите его за основу. Если все будет ОК, внесем и информацию в Help.
Юрий спасибо за ваш ответ. Ваш вариант ложим в копилку знаний.
Функциональный блок CTU , будь то в макросе или нет, не могу уставку записать через функцию Write to FB, в свойствах функции нет выбора счётчика CTU. Остальные два CT и CTN есть в ниспадающем меню, а конкретно CTU нет. Может я как-то не так сделал что-то ? OL 1.12.173.16034.
Ещё заметил особенность при симулировании макросов. Если выключить симуляцию макроса и затем пустить вновь, то входа и выхода остаются активными и часть схемы с внутренними переменными продолжает какое-то время работать со старыми значениями и лишь потом всё обнуляется и симуляция начинается заново с нуля. Бывает напрягает, если перед полной остановкой макроса не выключишь вручную все входа.
Добрый день. Написал тестовую программку контроля входов с выводом Bool переменной на экран. сработал вход на экране надпись . Почему то есть индикация только по входу 1. Если сделать авария на входе 2 то экран пустой. Вообщем 1 вход вывод есть. Если любой из входов(2-7) то экран пустой. Это мой баг или ошибка ОЛ
У Вас на первом экране авария 1, чтобы показалась авария 2 надо перейти на 2-ой экран и т. д., короче, глупый вопрос!
Вложение 41465
Спасибо. Понял что сглупил. Всё сегодня не работаем. Серега 0308 спасибо.
Я не знаю, может быть это и это, но просто при симуляции основного проекта этого не происходит - все входа сбрасываются в ноль и устанавливаешь их заново. Это происходит только при симуляции макроса. Может и на самом деле в некоторых случаях будет удобно. Хотя лично мне пока это только доставляет неудобства, но на всех не угодишь :)
Проблема с retain переменными окончательно решена ? С периодичностью в раз в два-три месяца сталкиваюсь с изменением значений. Конечно не исключаю шаловливых ручек окружаюшего персонала, но все-же...
Нужно было сделать систему контроля наработки. При работе с макросом "Open Timer" из базы макросов заметил отставание между секундным импульсом и выходом минута. Выглядит это так. Включаем симуляцию. Считаем секунду. После 60 секунд "Изменение на выходе минута" наступает примерно на 10-15 секунде если смотреть на вход макроса. Если увеличить количество таймеров "Open Timer" то время перехода импульса минута возрастает. В железе работает так же. Есть "запаздывание" индикации минута.
Даже не знаю куда написать. Софт или Железо. Есть ПР200-220.2.2.0 и ПР200.24.4.2.0 . Программа сделана Сергеем 0308. Версия лоджика 1.13.184.17394. Версия ПО реле V2.12 стоит на каждом реле. И теперь самое интересное. На версии 220 некоторые уставки не работаю. Например 10:50 звонок работа. А в 12.00 звонка нет. Эта же программа залита в версию 24 там все уставки работаю. Реле версии 220 в москве могу передать на проверку. PS прошивка школьный звонок во вложении
Андрей программа та что во вложении. Использована смена платформы. Там простое расписание . С экрана ставим нужное время. Как только время уставки и реальное время совпадают на выходе постоянный сигнал 1 на 10 секунд. Потом ждем следующую уставку по времени.
Игорь, могу предложить последнюю версию программы:
Вложение 41736
Она принципиально не отличается, только в мелочах, залил себе в 220 В ПР200, поставил 12 уставок подряд, через минуту, всё отработало и ничего там тяжеловесного нет, среднее время цикла программы 3,00 мс!
Попробуйте может пойдет, попытка не пытка!
Повторил эксперимент, все 32 уставки поставил, через минуту, устал уставки ставить(понял, что это не моё), короче, всё отработало без проблем!
И ещё хотел добавить, как я уставки ставлю, после установки часов, минут нажимаю SEL, начинает мигать(выбрана для редактирования) "Запись", нажимаю стрелку вверх, появляется надпись "Ввод", нажимаю ОК! Затем перехожу к следующей уставке, несколько раз нажимая SEL, до мигания часов(выбор для редактирования), номер уставки не трогаю(пропускаю), он сам, автоматически увеличивается на единицу!
И ещё хотел сказать, может Вы ставите одно время на все уставки, так тоже не получится(не будет работать), надо не менее 2 уставок, иначе 1 раз сработает и никогда не повторится!
Вот, немного изменил, теперь можно и одну уставку ставить, если несколько уставок, то последующая не ранее, чем через 2 минуты:
Вложение 41760
Вот, немного переделал, ранее кто-то хотел с маской недели на 4 выхода(цеха), короче, сделал на 8 выходов:
Вложение 41767
Вложение 41769
На 32 уставки времени, для удобства добавил включение-выключение каждой уставки, можно расширить до 160 уставок, короче, устанете ставить!
Андрей , Юрий , Сергей 0308 Спасибо вам. НО УВЫ НЕ ЖЕЛЕЗО НЕ СОФТ НЕ ВИНОВАТЫ В РАБОТЕ ПР200. Виноват Я один. При заливки ПО в реле не поставил галочку сихронизации с ПК. Как результат у меня в реле был "ФЕВРАЛЬ 2000 " года да и ВРЕМЯ было другое . У меня звонок начинал работать с 15:00.Прошу прощения за ложную тревогу. Как предложение для неповторения таких фокусов в Пунктах МЕНЮ-НОВЫЙ ПРОЕКТ -МАРКА РЕЛЕ после выбора типа реле( те что с экраном и ИП120) добавить сразу окошко синхронизация времени ПР и ПК. И на Панели рядом с кнопкой ПОМОЩЬ индикаторную лампочку что часы синхронизированы.
Ещё раз всем большое спасибо и мои извинения за такую ошибку.
А Вы вот это видели?
Вложение 41788
Сергей0308 Именно здесь я и нашел свою ошибку.
Может тогда вывести на экран номер уставки, что последней сработала, тогда будет легче понять, что время сбито? А то действительно, когда много уставок, непонятно какая сработала!
Вот, как обещал, добавил на экран номер последней сработавшей уставки:
Вложение 41802
Вложение 41803
До хантера далековато. Время включения выходов не регулируется. Нет очереди включения зон ("входов") с тем, чтобы гарантировать включение только одного выхода. Нет % регулировки длительности включения всех входов. Нет обработки датчиков (дождя, ветра и прочего семейства хантеровских нормально замкнутых датчиков *Click). Но впрочем задача Сергея в этом и не состояла.
Просто я занимаюсь автополивом. Но сейчас не сезон и я неспешно курю ПР200 на предмет применения в качестве контроллера системы антиобледенения для одного объекта. Проблема на объекте в том, что мощностей дают мало, а требуется ее много. И необходимо по таймеру включать разные контуры греющего кабеля не более N штук за раз.
(Между прочим, включение нескольких зон одновременно - фишка только продвинутых контроллеров полива для коммерческого использования.)
Наткнулся еще на первые примеры Сергея. Начал над ними работать. И пришел примерно к тому, что Сергей показал в последнем примере. Т.е. главный суточный таймер "пинает" таймеры задержки выключения. При этой схеме можно уйти от не совсем красивой переменной последнего включения.
Ну и применил схему уставки не как принято у "автоматчиков" - время суток включения+время суток выключения, а так как обычно это реализовано в контроллерах полива - время суток включения+длительность включения.
При этом в один UInt32 запихал следующие переменные:
1) 11 бит - минуты суток включения;
2) 7 бит - маска дней недели;
3) 10 бит длительность включения (максимум 1023 минут);
4) 4 бита - номер выхода, который надо включить (4 бита дают 16 шт., естественно).
Тратить один бит на признак вкл/выкл - роскошь. Можно применить время суток включения более 24 часов. Либо длительность установить в ноль.
А при чём здесь сколько минут в сутках? Всё зависит с каким минимальным интервалом, т. е. ступенькой нужно назначать время уставок, при минимальной ступеньке в 5 минут диапазон уставок уместится в 9 бит(при 10 минутах в 8 бит), а умножить на 5(или 10) всегда можно вне уставки, с длительностью включения аналогично поступить, а так получается..., короче плохо получается, не рационально биты используются! И ещё хотел добавить, только нечто почти противоположное, вот у Вас выхода включаются очень заморочено, 4 битами, Вам не кажется это странным, когда энергонезависимая память используется только на четверть, короче зачем это делать, если ресурсов более чем достаточно выполнить это по-человечьи?
Защита от ошибок и от дурака. При 32-х уставках легко ошибиться в ступеньках. Задача - ограничить число включаемых одновременно входов.
Назначаем произвольное время суток на включение. Выставляем произвольную (в пределах разумного и возможного) длительность включения, которая может составлять несколько часов. Никаких ступенек не получится. Ну можно время включения как в тех же поливных контроллерах хантер назначить с шагом 15-10 минут и сэкономить на этом несколько бит. Для подобных применений - не критично.
Когда номер выхода в сохраняем в уставке - имеем бОльшую свободу при выборе времен включения. Можно, конечно привязать номер выхода к номеру уставки. Скажем, первые две уставки - выход 1, следующие две - выход 2 и т.д.
Имеем 32 уставки на 16 выходов - по две уставки на выход. Но один выход нам нужно включить раз в сутки, другой - 3 раза.
Ничего замороченного не вижу, например уставка/задание: в 18.00 по пятницам и субботам включить выход 2 на 4 часа.
Если 4-мя битами включаются 16 выходов, то все биты выключены(0) будет соответствовать включению 1 выхода, все биты включены(1) будет соответствовать 16 выходу, ну и все остальные выхода будут аналогично задаваться, разве это не заморочено?
И как это внешне задаётся и как сделано в программе - это две разные вещи, короче, можно к времени включения добавить время включенного состояния и вычислить время выключения(удобней, чем самому вычислять)), по нему и выключать, а не по таймеру обратного отсчёта времени, надеюсь, понятно получилось объяснить?!
??? Это обычная битовая арифметика. 4-мя битами мы можем отобразить только число от 0 до 15. Ничего сложного, только нужно быть внимательным к очепяткам/ошибкам при написании. Для облегчения распаковки/запаковки уставок я засунул эти функции и связанные преобразования переменных пользовательского интерфейса в макросы - PackSet/UnpackSet. (См вложение.)
Ну во вложении примерно то, что я хочу изобразить. Ваш таймер занимается только подачей сигнала о включении, номера выхода и длительности включения на таймеры выходов. Дальше - не его дело ("я не стратег, я тактик"). Таймеры выходов крутятся самостоятельно - можно приостановить, отменить. И, поскольку ваш таймер минутный, может лучше счетчик ctzu пускать только раз в минуту (блинком или по изменению переменной минуты). Раз в минуту пробежаться по уставкам, избавиться от переменной "Время ПК" и/или не дергать лишний раз таймеры задержки выключения?
Подскажите это нормально ?
Если переменная не энергонезависимая то она не работает (а мне нужно чтобы она была не энергонезависимая).
Вложение 42038
Вложение 42039