Здравствуйте, коллеги.
Подскажите, как реализовать функцию 0x05 (Write Single Coil) через конфигуатора в Codesys 2.3 для Modbus Master?
Нигде найти не могу, перебором всех элементов тоже не увидел.
Здравствуйте, коллеги.
Подскажите, как реализовать функцию 0x05 (Write Single Coil) через конфигуатора в Codesys 2.3 для Modbus Master?
Нигде найти не могу, перебором всех элементов тоже не увидел.
Добрый день!
В ПЛК110 нет возможности записывать биты функцией 0x05 (Write Single Coil) через модуль Modbus Master из Конфигурации ПЛК.
С уважением, Коськовецкий Владислав.
Инженер группы технической поддержки компании "ОВЕН"
Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живёте. © Steve McConnell
Мой рабочий блог со статьями про щиты и автоматику ОВЕН - Cs-Cs.Net | Почта: Info@Cs-Cs.Net
А вот еще вопрос.
По тем же койлам.
Считываю состояние койла некоего прибора через Register input module, Read Coil Status (0x01).
Ответ приходит с правильным состоянием- 0 или 1.
При изменении состояния другого койла ответ меняется на произвольный, вплоть до 65381.
Слушаю порт с помощью Advanced Serial Port Monitor, и вижу посылку вида 01 01 02 00 00 10, то есть запрашивает 10 байт с адреса 02 00.
Соответственно, в зависимости от состояния некоего прибора ответ меняется на фигню.
Посылаю из Advanced Serial Port Monitor правильную посылку вида 01 01 02 00 00 01, получаю правильный ответ вне зависимости от состояния некоего прибора.
Как сделать так, чтобы посылка с командой 0х01 формировалась правильно.
Modbus.lib не предлагать, поскольку весь опрос переделывать под него не имеет смысла из-за неправильной реализации этой функции в CodeSys.
Так ну нет же в этой среде штатно команды чтения одного Coil. НЕТ.
Тут ПЛК запрашивает какую-то дичь: может 10 Coil подряд, а может что попало.
В Modbus.Lib всё раелизовано правильно: лично делал через него опрос оборудования Carel, которые обожают везде пихать Coil.
Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живёте. © Steve McConnell
Мой рабочий блог со статьями про щиты и автоматику ОВЕН - Cs-Cs.Net | Почта: Info@Cs-Cs.Net
Могли бы и сделать за столько лет.
P.S.: А у меня Dixell))) Только в связке с МВ110 и им подобным.
А можно сделать так, чтобы часть приборов, посадив их на 485-1 читать через Конфигурацию ПЛК, а эти шкатулки с койлами посадить на 485-2 и опрашивать через Modbus.lib?
Последний раз редактировалось Никола Казанский; 01.07.2023 в 17:05.
1. Так поддержка CodeSys 2.3 прекращена уже "столько лет". Она осталась хорошей и быстрой системой, но обновляться не будет.
2. Мат следует убрать (подретактируй коммент) - а то забанят в хлам (это у меня на блоге можно вовсю материться, если по делу).
3. У CodeSys 2.3 правило такое: один интерфейс должен опрашиваться чем-то одним. То есть или через библиотеку, или через конфигурацию.
Поэтому, если у тебя там интерфейсов хватает - то разнеси на два. А если не хватает - то тогда придётся всё на библиотеку переписывать.
У меня обычно хватает: всё, что внутри щита, у меня сидит на одном интерфейсе, а всё, что снаружи - на другом.
Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живёте. © Steve McConnell
Мой рабочий блог со статьями про щиты и автоматику ОВЕН - Cs-Cs.Net | Почта: Info@Cs-Cs.Net
Библиотека UNM позволяет отжать на время у системы порт и спросить все что хочется!!!
Насколько я понял Вы используете Register input module и ставите команду 0x01(чтение массива дискретных выходов),
в которой нельзя указать количество считываемых выходов, поэтому считываются все 16 (0x10) элементов (выходов).
Их значения записываются в объявленную переменную типа WORD побитно справа на лево.
Если нужно значение конкретного бита, попробуйте использовать 8-bit input module (будут считываться 8 выходов за раз),
где дайте имя конкретному биту - получите нужный бит в виде BOOL.
Однако я считываю все выхода сразу в 32-битный модуль, а значения забираю через <имя переменной>.<номер бита>
bits.jpg
так быстрее и меньше нагрузка на сеть![]()
Последний раз редактировалось EFrol; 01.07.2023 в 13:40.