Спасибо. Я разобрался благодаря вашему видосу. Стало понятно.
Вид для печати
Это баг или фича:
Вложение 64836
Инкрементирую переменную. Но настроил выход блока неправильно. Получаю из-за этого ошибку. (показано красным)
Причина в элементе 70, но это совсем другой элемент. (показано зеленым)
Как так?
Это баг. Бывает.
Вложение 64837
Есть вопрос.
Каждый раз перед приёмом информации мне нужно очистить приемные буфера (.)(.)
Я использую шаги (CASE). На шаге 65 я использую функциональный блок MEM.MemFill. Потом ухожу на шаг 70. См. рисунок:
Вложение 64839
Этот блок не отрабатывается, потому что в первом квадрате MEM.MemFill постоянно включен выход MemFill, хотя разрешение EN уже отключено.
И во втором квадрате MEM.MemFill выход MemFill постоянно активен. Из-за этого квадрат move постоянно переключает bState в значение 70.
Разве отсутствие входного сигнала EN не должно блокировать все выходы в квадрате? Это было бы логичнее!
Разработчики стандарта МЭК 61131-3 считают иначе:
Вложение 64842
Вложение 64841
Т.е. для функций состояние выходов при EN = FALSE не специфицировано и определяется конкретной реализацией.
Для ФБ состояние выходов при EN = FALSE специфицировано - они сохраняют свои значения из предыдущего вызова.
Разработчики CODESYS выбрали для функций ту же реализацию обработки выходов при EN = FALSE, что и для ФБ - и это вполне закономерно.
Собственно, если вы ENO заведете на EN - то ваша проблема исчезнет сама собой.
Спасибо за разъяснения.
Как бы вы решили такую задачу? Как словить именно фронт выходного сигнала MemFill? Есть какие-либо "одновибраторы - фронтовики" ? :)
Триггер может какой?
Так:
Вложение 64868
Второй очищающий квадрат постоянно включен.
Получается он постоянно очищает второй буфер.
Честно говоря, не понял логики.
Что я делаю не так?
PS. Разобрался...
Евгений, а этот R-Trig он при фронте на входе дает единичный импульс на выходе? Так?
Именно так.Цитата:
Евгений, а этот R-Trig он при фронте на входе дает единичный импульс на выходе? Так?
Евгений, подскажите, правильно ли я вызываю метод? (основная прога называется main). См.рис.:
Вложение 64875
Это прием пакета через RS-232. Асинхронные прилеты пакетов заставляют контролировать целостность и склеивать иногда разорванные данные.
Поэтому реализован обычный метод, который реально вызывается 1 раз в 10 секунд (реально наблюдал) для склейки двух буферов.
Весь автомат заточен так, что bState приравнивается к 85 только когда пакет оказался разорванным. В остальных (99%) случаях этот шаг пропускается.
Правильно ли я понял, что метод не запускается сам по себе и не отнимает ресурс ПЛК.
Пока вы не вызываете метод в своем коде - он "не запускается".Цитата:
Правильно ли я понял, что метод не запускается сам по себе и не отнимает ресурс ПЛК.
Евгений, а где можно почитать об этих сигналах EN и ENO ?
В стандарте МЭК 61131-3.
Еще в справке для CoDeSys V2.3 есть неплохое объяснение (стр. 186)
http://www.kipshop.ru/CoDeSys/steps/codesys_v23_ru.pdf
В справке для CODESYS V3.5, по-моему, особой информации об этом нет, только это:
https://content.helpme-codesys.com/e...ox_en_eno.html
Спасибо, вроде разобрался, получилось. Теперь возник такой вопрос, а есть ли переменная, которая сигнализирует о наличии связи с мастером , на случай если связь обрывается и необходимо обнулить некоторые значения? ( потому что я так понял стандартный сторожевой таймер обнуляет все значения)
Для стандартного компонента нет надежного способа определить отсутствие запросов от мастера.
Можете поднять слэйв через нашу библиотеку OwenCommunication - в ней у ФБ MB_TcpSlave есть выход xNewRequest - по нему можно определить наличие или отсутствие запросов от мастера.
Всем привет!
С наступающим Новым годом!
(Евгений, я разобрался сам :))
Подскажите по такому вопросу.
У меня в проекте есть 4 задачи (PRG).
Как сделать так, чтобы при запуске ПЛК первой выполнялась гарантированно именно FirstPRG, а дальше - уже рандомно.
Спасибо.
День добрый.
Подскажите пожалуйста, как корректно отобразить версию ПО, задаваемую в информации о проекте?
Вроде бы для этого надо использовать функции GetVersion или GetVersionProperty, но они выдают версию библиотеки alarmmanager.
Добры день.
См. узел Info в дереве проекта.
п. 3.8:
https://ftp.owen.ru/CoDeSys3/11_Docu...rgets_v3.0.pdf
Нет. У меня 4 задачи.
См. фото.
И нужно, чтобы старт ПЛК происходил именно с задачи License.
Подскажите, как это реализовать?
Вложение 64917
З.Ы. Хорошо-ли плодить задачи? Но я это сделал из-за разной периодичности вызовов. Где-то 10 мСек, а где-то и 1 Сек.
Добрый день! Создан функциональный блок, в программе он вызывается много раз. Изменили (добавили или убавили количество входов/выходов). Возможно ли сделать так, чтобы вызываемые блоки обновлялись с новыми вх/вых, не удаляя и добавляя блок заново?
Добрый день.
См. скриншот:
Вложение 64927
Добрый день! Вопрос по библиотеке OSCAT_BASIC.ONTIME. Из примера в ютуб мы получаем переменную типа LTIME. В визуализации я пытаюсь отобразить эту переменную в формате вывода %t, но получаю вывод даты и время. Как мне получить только часы (для премера: 498884 часа).
CODESYS 3.5.16
Если %t[HH] то доходит до 23 и начинает с 0, чо не поставь в [] интерпретируется как дата и время т.е. выводит число, месяц, год, часы и минуты.
Вложение 64939
Вложение 64940
У вас что-то не то с коэффициентом. 6133 секунд - это явно не 7098 дней.
Но суть не в этом.
Вам нужно значение переменной On_Sec разделить на 3600.0 (т.е. перевести в часы; в минуте 60 секунд, в часе 60 минут) и присвоить переменной типа REAL. И уже ее отображать в визуализации
Здравствуйте.
Подскажите, как проще реализовать такую задачу.
Я получаю от прибора величину объема в см.куб.
Но на экран хочу вывести ее и в см.куб. и в м.куб. (на выбор оператора).
Создал переменную, которая запоминает выбор оператора.
См.Рис.
Вложение 64965
Как проще реализовать переключение между этими величинами в настройках визуализации?
Спасибо.
Добрый день.
Именно так, как и сделали - с помощью радио-кнопки.Цитата:
Как проще реализовать переключение между этими величинами в настройках визуализации?
Это понятно. :)
Я имел ввиду, как в текстовом поле выходной переменной задать переключение между двумя переменными?
Спасибо. Понял. Буду реализовывать.
Подскажите еще. В языке ST такой метод срабатывал:
Объявление: sInput, sOutput : STRING;
refInput, refOutput : REFERENCE TO STRING;
Реализация: refInput REF= sInput;
refOutput REF= sOutput;
Как это реализовать на CFC? Так не работает:
Вложение 64966
Или работает? Синяя палка остановилась на блоке MOVE и - БАЦ! - исключение.
Поэтому два вопроса:
1. Синяя палка останавливается на блоке - это значит именно этот блок виноват? Или нет?
2. Как реализовать refInput REF= sInput на CFC? (пост именно об этом)
Спасибо
См. скриншот:
Вложение 64967
Евгений, что у вас с лицом? (ава) :)
Спасибо, заработало.
Но обратите внимание: через EN-ENO не работает. А было бы неплохо.
Вложение 64973