номер регистра(DEC)
Вид для печати
номер регистра(DEC)
Что такое 16# знаете?
могу сбросить скрины или проект, только не знаю как(( Насколько я понимаю, я что то не добиваю в настройках, скорее всего какая то мелочь, но... третий день!
перевод из десятичной в шетнадцатиричную систему
Отлично, теперь осталось ответить на последний вопрос - что означает DEC?
номер регистра в десятичном исчислении
Теперь подытожим: в руководстве сказано, что адреса в десятичном исчислении.
Зачем делать "перевод из десятичной в шетнадцатиричную систему" ?
видимо не стоило, но тем не менее с регистром 27 тоже лучше не стало
интересен еще один момент, через некоторое время работы СМИ показывает что от мастера сети не поступают запросы
В byte sequence стоит Trace mode, в 17 загоняю, значение не появляется
спасибо всем откликнувшимся большое, проблема была где то в моей программе создал чистую, все работает, запись в 27 регистр и все. В 17 можно ничего не вносить, попробовал и так и так.
Добрый день! Мучаюсь с проблемой несколько дней уже. Очень прошу совета. Нужен блок, который за заданный промежуток времени (10, 200 или например 630 секунд) постепенно поднимает или снижает значение на заданную величину (например с от 0 до 1000 или 800 до 600). Есть похожие ступенчатые регуляторы для муфельных печей, в которых реализован выход на уставку за заданный интервал времени. Подскажите пожалуйста как реализовать такое в CoDeSys 2.3. Спасибо!
Блок GEN из Util.lib
Здравствуйте, подскаите пожалуйста по библиотеке SysLibCom
Брал пример с форума, но скорость не могу поменять, как и остальные параметры, кроме номера порта, скорость всегда 9600
VAR CONSTANT
port: COMSETTINGS := (Port := 0, dwBaudRate := 9600);
END_VAR
IF NOT portOpened THEN
portOpened := SysComOpen(port.Port) = 0 = SysComSetSettings(port.Port, ADR(port));
END_IF;
Добрый день! Подскажите! Как добавить в проект булевую переменную устройства модбас? Создаю универсальное устройство, далее там можно создать переменную типа word, Dword, byte.... Как здесь bool найти?)
Никак. Создаете регистр 8bits , там откроется возможность управлять отдельными битами. Либо применять конструкцию Var.0--Var.15, где Var - переменная типа WORD или регистр 2byte, а цифры после точки - номер бита.
Здравствуйте. У меня в основной программе стоит функциональный блок (мною написанный), в этом блоке еще один подобный блок. Как мне во втором блоке из основной программы изменять переменные. В ручном режиме, в онлайне, я могу присваивать значения этим переменным, а программно не получается. Подскажите, возможно ли такое?
Здравствуйте.
Вложение 43757
Не могу понять почему так происходит: назначаю регистры значениям REAL, вылетает ошибка, при чем все значениям, начинающимся с 250 адреса это происходит в области как в глобальных так и в глобальных энергонезависимых переменных, все остальное компелируется без проблем.
(СП310, ПЛК110-60 - М [M02], CS2.3.9.41)
В чем может быть причина?
.............................del
Sulfur ,согласен с Вами, и изначально думал так делать, но начал создавать переменные в глобальной области - мне так удобней контролировать процесс. Но КДС видимо думает иначе)
Хотя странно, у контроллера зарезервирована большая область памяти под это, а тут оказывается, что не вся и еще не везде - надеюсь что кто-нибудь сможет разъяснить как так получается, а пока буду переделывать проект...
если что то "нарою" по этому, напишу.
По радио сказали что один идиот по встречке едет. А их тут сотни..
Ключевое слово - выравнивание. КДС - умеет. Вы - нет.
Одна единственная переменная через at%. Структурная. Редчайший случай пользы абсолютной адресации.
Всем привет!
Для отображения в панели нужно присвоить биту модуля ModBus Slave значение Дискретного выхода ПЛК.
Создал для этого отдельный от основного программный модуль и в нем, чтобы не дублировать переменные пытаюсь использовать прямую адресацию:
AT%QX2.0 := MbFDo01;
и получаю ошибку компиляции 4250: Требуется (ST)-выражение или окончание POU.
Приходится вместо этого создавать повторно в модуле переменную для каждого выхода и для каждого бита обратной связи, связывать её с адресом выхода и с адресом Modbus,
ну или задавать как глобальные переменные. Неоптимально как-то :(
Хотя в справке читаю:
Как вообще правильно и красиво делать подобную обратную связь для панели, посоветуйте пожалуйста?Цитата:
Оператор присваивания
Перед оператором присваивания находится операнд (переменная или адрес), которому присваивается значение выражения, стоящего после оператора присваивания.
Ну так и напиши
%QX2.0 := MbFDo01;
К чему тут ключевое слово АТ?
Вложение 43779
Точно, есть такое! Просто привычка сработала. Этот же ответ и сам нашел в РП CodeSys: читайте инструкции, господа ;)
Благодарю за подсказку!
В общем-то тоже вариант, только это и есть глобальные переменные, что не совсем оптимально.
К тому же давно решил для себя что удобнее и наглядней использовать прямую адресацию чем переменные в Конфигурации ПЛК.
А вот в варианте %QX7.1.0.0:=%QX2.0; точно ни одна переменная не использовалась и получилось очень компактненько. Недостаток по сравнению с Вашим методом, что если добавить элемент области Ввода/Вывода перед операндом, то все полетит к чертям :(
Спасибо за обсуждение!
А чем видение оптимальности ?
Получилась полная жесть. В чем компактность ? Даже символов и нажатий на клавиатуру больше ))
"К чертям" - это станет более надежным ? Вы любитель экстрима )) ? Или самое сложное пока - светофор ?
Вам petera показал фичу типа упоминания гужевого транспорта в ПДД, а вы это за новую технологию приняли ))Цитата:
Благодарю за подсказку!
Просто этап такой. Через него проходят и идут дальше. Но кто-то видимо и остается. Бывает.
Первые кто прошел сказали примерно так - "машинам - машинное, а мы делом займемся". Но все равно - удачи.
%QX7.1.0.0: - ага, а потом через время вспоминай, че эта такое ? давление, температура, авария или еще что....
Ладно, готов согласится: вряд ли мне удастся заполнить предназначенную для Глобальных переменных область памяти.
В общем случае думаю Вы правы, но в данном конкретном случае задача была просто отобразить значение выхода в модуле ModBus, не создавая при этом кучу промежуточных переменных что, в общем-то и получилось (методом "copy/paste" между прочим, при чем здесь нажатия?) :Цитата:
Получилась полная жесть. В чем компактность ? Даже символов и нажатий на клавиатуру больше ))
"К чертям" - это станет более надежным ? Вы любитель экстрима )) ? Или самое сложное пока - светофор ?
Вам petera показал фичу типа упоминания гужевого транспорта в ПДД, а вы это за новую технологию приняли ))
Вложение 43781 И совсем не обязательно вставлять модули перед, можно и после, а если понадобится -- ну поправим циферки.
Ну не знаю. В чем проблема когда все переменные в одном месте, легко доступные для обозрения и не нужно прыгать по разным окнам? Особенно актуально при отладке с ноутбука на объектеЦитата:
Просто этап такой. Через него проходят и идут дальше. Но кто-то видимо и остается. Бывает.
Первые кто прошел сказали примерно так - "машинам - машинное, а мы делом займемся". Но все равно - удачи.
Вложение 43782
А если приходится переходить на другую модель ПЛК, что не так уже и редко, то тоже не нужно все переменные вместе с комментариями снова вносить в области ввода/вывода, достаточно пройтись по цифрам.
Самое главное, как итог:
я (а может и тот, кто прочтет) теперь гораздо глубже понимаю тонкости разных подходов и смогу выбирать более осознанно :)
Так что не зря спросил и спасибо за обсуждение!
Поскольку дискретные выходы ПЛК не имеют аппаратного контроля состояния (т. е. считается что он всегда исправен, и если на выход подано TRUE, то он действительно TRUE), то я бы сделал проще.
В ОП нужным битовым элементам присваивать значение нужного бита статус-слова.Код:
(*Назначенные аппаратные выходы*)
DO1:bool;
DO2:bool;
..
DO16:bool;
(*Переменная статуса, возможно в виде регистра 2byte в области Модбас для обмена с ОП*)
OutStatus:WORD;
----
OutStatus.0:=DO1;
OutStatus.1:=DO2;
..
OutStatus.15:=DO16;
Присваивание значений статус-слову можно сделать в виде своей программы, и вставить в конце PLC_PRG.
В PLC_PRG останется только присваивать значения выходам DO1..DO16, статус-слово будет генерироваться автоматически.
Никакой прямой адресации, более легкая читаемость кода.
Вложение 43785