Если переменная или блок не учувствует в алгоритме, то Лоджик его игнорирует
Вид для печати
Сегодня нашёл
Owen Logic 2.11.370.0
1. Копирую несколько элементов со связями и одной обратной связью - после вставки на линии обратной связи уже две стрелки с направлением
Вложение 87814
2. В редакторе ST
вполне легальная конструкция умножения времени на целочисленную константу формирует ошибку "Типы не совпадают"
Вложение 87813
а так работаетКод:VAR_INPUT
nDelay_s: UDINT;
END_VAR
// преобразование типа и пересчёт значения в [с]
tDelay := UDINT_TO_TIME(nDelay_s) * 1000;
Код:// преобразование типа и пересчёт значения в [с]
tDelay := UDINT_TO_TIME(nDelay_s * 1000);
1) превращаем на минутку баг в фичу и продолжаем работать (с ручным исправлением - так, на всякий случай) ;)
2) НЕТ - тут упираюсь всеми рогами и копытами - если мне нужно взять удвоенный или утроенный интервал - то тип время можно и нужно умножать (делить) на константу - недавно в одном из курсов по CODESYS это проходил, да и логике соответствует. Так что это - БАГ
А какая размерность у этой величины - [s*s] = [s^2] ?
Это же некорректненько :)
Переставляя скобки смог преобразовать и получить код, сейчас пойду дальше по выполнению работы, но всё же это - БАГ компилятора.
Думаю, что и так было бы корректно tDelay := nDelay_s * T#1000ms;, но и это компилятор не пропускает.
Ага, а ещё поделите текущую дату на 2 и получите... Не 1013 год, а... С какого там 0 время в одном из множества форматов...?
PS Во, нашёл. 1970 год. То бишь поделив текущую дату на 2 получите 1998 год, однако...
Я же говорю не про тип DT (точная дата на оси времени), а про TIME (интервал, разность времени).
Для TIME получение удвоенного, или умноженного на константу или целое число - вполне корректная операция.
А Вы знаете, что в CODESYS 3.5 разность дат это тип интервал (DT-DT=TIME)?
Понятно, Owen Logic это другая среда разработки и для разности дат может быть другой тип результата.
Вот памятка для CODESYS 3.5
https://owen-russia.ru/wp-content/up...desys_v3.5.pdf
Вложение 87815
Как вызвать конкретный экземпляр FB написанный на ST для отладки в симуляторе?
Открыть нужный ФБ на холсте и запустить симуляцию внутри ФБ.
Входные переменные надо задавать вручную, внешние (если есть ) не работают.
Иногда бывает, что внутри поведение не совсем такое как в схеме, если переменные на входе и выходе меняются.
То есть проверить работоспособность можно, а в динамике не всегда.
результатом UDINT_TO_TIME(nDelay_s) будет nDelay_s в миллисекундах
умножаем nDelay_s мс на 1000 мс получаем nDelay_s в секундах
здесь получаем выражение udint * time, вот компилятор и ругаетсяЦитата:
Переставляя скобки смог преобразовать и получить код, сейчас пойду дальше по выполнению работы, но всё же это - БАГ компилятора.
Думаю, что и так было бы корректно tDelay := nDelay_s * T#1000ms;, но и это компилятор не пропускает.
Наверное, всё же не соглашусь...
[ms]*[ms]=[ms^2], т.е. размерность не соблюдается
Попытаюсь показать ошибку в Ваших рассуждениях.
А как быть, если на первую задачу отводится T1 := t#1s, а на вторую задачу в k := 7 раз больше.
Как вычислить интервал времени T2?
Спасибо. Странная конечно реализация. Думал что полноценная симуляция.
TIME в миллисекундах должен быть, для конвертации целое число секунд надо привести к ms, умножив на 1000 и только после этого конвертировать.
Никаких секунд в квадрате тут нет, только ms.
Можете сделать обратную конвертацию, например t#5s, при конвертации получите целое 5000 ms, а разделив на целое 1000, получите целое 5 секунд.
Компилятор же ругался, когда конвертированное время пытались умножить на целую 1000, то есть не соблюдали типы переменных, что и подтвердил 2 ваш скрин.
Удивительно, как простейшие вещи надо ещё доказывать, вроде и люди неглупые. Даже в моих примерах, которые вы вроде смотрели, в каждом ФБ есть приведение к ms.
Делаю последнюю попытку показать, что операция над типами корректна
[TIME] * [ANY_INT] = [TIME]
Чуть выше уже приводил краткую справку на реализацию в CODESYS 3.5
https://owen.ru/forum/showthread.php...l=1#post479204
А сейчас сошлюсь на ГОСТ Р МЭК 61131-3—2016, который (цитирую из предисловия к этому документу):
https://files.stroyinf.ru/Data2/1/42...4293755016.pdfЦитата:
4 Настоящий стандарт идентичен международному стандарту МЭК 61131-3:2013 «Контроллеры программируемые. Часть 3. Языки программирования (IEC 61131-3:2013, «Programmable controllers — Part 3: Programming languages», IDT).
Открываю "6.6.2.5.11 Функции даты и продолжительности времен" (с. 83)
Т.к. интересует заголовок и строки внизу таблицы, то на скрине "вырежу" среднюю часть таблицы.
Видно, что в строке 10a описана функция умножения MUL и её представление в выражениях в виде одного символа "*"
Функция (операция) умножения выполняется над двумя аргументами типов [TIME] и [ANY_INT] результатом которого является значение типа [TIME].
Вложение 87863
Т.е. реализация в Owen Logic неправильная 100%. Это - баг.
Вполне приму объяснение, что с момента внедрения в Owen Logic языка ST прошло несколько лет и пользователями написано много программ, часть из которых передана заказчикам в виде исходников - поэтому, чтобы не ломать совместимость с наработками, найденный баг исправляться не будет.
В ПР205, в отличии от ПР200, при изменении значения поля ввода и нажатии SEL, переход на следующее поле ввода происходит без сохранения значения. Есть планы исправить?
Не факт что так правильнее. Я бы как есть оставил.
Об этом баге известно? Исправления ждать?
https://disk.yandex.com/i/FRGZzU0DLWjsTw
https://youtu.be/AHf8IQvf_io
По поводу правильно.
Считаю абсолютно правильной логику, реализованную в ПР200.
Нажатие SEL подтверждает ввод с переходом к редактированию следующего поля.
Нажатие ОК подтверждает ввод с выходом из режима редактирования.
Нажатие ESC отменяет ввод с выходом из режима редактирования.
Режим редактирования одной переменной без перехода к редактированию другой нужен ОБЯЗАТЕЛЬНО!
Об этом баге известно? Исправления ждать?
Кнопка. Режим действия - удержание. При удержании записывается 1.
При скрытии кнопки 1 остается навсегда.
https://disk.yandex.com/i/It4aMJqUy5yoDQ
https://youtu.be/l1AylkskQAs
Галку энергонезависимости включите на выходной переменной.
Она у вас никуда не подключена и работает не правильно (чаще не работает совсем). Всё выходы должны быть подключены куда то, на вход другого блока, на выход ПР или просто быть энергонезависимой.
И ещё, у выходных переменных экрана есть настройка, Запись в конце цикла - ДА Вложение 87896
Большое спасибо, что пытаетесь помочь.
Эти баги возникают на реальном проекте, где всё подключено куда нужно, энергонезависимо, что нужно и записывается в конце цикла, что нужно.
Проект в сообщении - пример бага создан для иллюстрации.
Предлагаемые Вами костыли не работают.
Да сейчас у меня нет ПР205, но у 20 человек заработало и только у вас не работает. Проекты вы выложили с явными косяками, о чём я и написал.
Такие посты почти каждый день, вот из последних https://owen.ru/forum/showthread.php...285#post479285
Напомнило, "почему мышкой надо три раза, а рукой - всего один?" - Это реальный вопрос о том, с чем каждый часто встречается.
У меня нет youtube и видео не посмотрю.
Вы бы пояснили, как воспроизвести ошибку и в чём она.
Можно ли её воспроизвести в эмуляторе?
Я недавно столкнулся с ошибкой, когда таймер не выдерживая времени показывал срабатывание - решение нашлось в полном исправлении предупреждений о наличии неопределённых обратных связей.
Ошибка воспроизводилась только в железе, а в эмуляторе - нет. Ошибка была устойчивой.
Отправлял проект в ТП - оттуда тиштна.
Если на экране ПР205 настроен переход по длительному SEL, то редактирование полей на этом экране недоступно.
Это навсегда?
Напомню, что на ПР200 работает редактирование полей по короткому SEL и переход на другой экран по длительному.
Исправился. Добавил ссылки на яндекс диск для видео.
Сменил платформу в старом (это важно) проекте с ПР103-24.1610.06 на ПР103-24.1618.16. Никаких ошибок и предупреждений. Сохраняется такой проект нормально. Но после закрытия не открывается.
Ошибка
У 1610 для режима DHCP по умолчанию ставится "кнопкой", а у 1618 в настройках такого пункта нет, только вкл и выкл. Из-за этого проект при смене платформы не открывается. Если перед портированием сменить режим DHCP то всё открывается норм.Цитата:
Не удалось открыть файл C:\....owle.
В документе указан прибор ПР103-24.1618.16.M02, для которого обнаружены несовместимые с документом изменения.
Изменился диапазон значений для указанных параметров:
"Режим DHCP".
Пробовал создавать новый проект в 1610 и портировал в 1618 - нормально всё сохраняется и открывается. Проблема только со старым проектом.
Прикладываю архив с тремя файлами - проект под 1610, портированный как есть в 1618 (не открывается) и с выключенным дхцп (открывается).
Может можно как то после такого бага открыть файл?
Попробуйте открыть сломаный проект как архив и в файле "Project" исправьте значение этого параметра с 2 на 0
Вложение 88021
Не знаю, описывали такое или нет.
ПР205/225. Сделал на экране кнопки, для ручной проверки исполнительных механизмов.
Режим: Нажато - True, отпущено - False.
При "игрании" с кнопками, как на 205 так и на 225, иногда она оставалась нажатой, по непонятной причине.
Ныне поймал ситуацию: если при нажатой OK (т.е. экранная кнопка нажата), нажать ESC или SEL, то экранная кнопка теряет фокус и остается нажатой, т.е. защелкивается.
В принципе данная "фишка", могла бы пригодится, но если нужно именно короткое нажатие, а она по "подлянке" защелкнулась, то надо опять пробегать селектом, чтобы вернуться к этой кнопке, а это потеря (иногда важного!) времени.
Но правда в первые случаи, я не припомню чтобы фокус терялся. Просто нажимал на нее еще раз и все.
Добрый день!
ПР 225 Owen Logic v2.11.370
При добавлении на экран прибора объекта "Динамический текст" с привязанной к нему целочисленной переменной, у списка только 1 состояние - "0". При нажатии клавиши ВВОД в поле редактирования или нажатии в свободном месте новые состояния не добавляются.
Вложение 88083
Вложение 88084
Правой кнопкой мыши кликните
Вложение 88087