Установка значения n бита в 2-х байтовом регистре

Установка значения n бита в 2-х байтовом регистре

Здравствуйте! Подскажите, пожалуйста, необходимо в 2-х байтовый регистр типа Holding registers в любой из битов записать либо 0, либо 1 с веб-интерфейса по команде с кнопки. На данный момент считываю значение нужного регистра во входных каналах и дорасчетными каналами считал значения текущих битов. Какая формула необходима и как правильно все это организовать, чтобы в нужный адрес Holding registers можно было в нужный бит подавать команды 0 или 1. Если можно на примере?

Добрый день! Итак, нужны входные каналы, которые будут хранить текущее значение регистра. Для записи каждого бита потребуется отдельный канал управления. Формула для канала управления такая: MyCmd(101, 5) где 101 — входной канал, который хранит значение регистра, 5 — номер бита, считая с 0

В таблице формул нужно создать новую формулу (на форуме формулы не тестирую):

Спасибо! Формула ошибок не выдает. Поправили только лишний пробел вот здесь: (1 < < bitNum). Подскажите, как теперь записать 0 или 1 в нужный бит по подробней. Если через веб интерфейс отправлять стандартную команду откл. отправляются какие то неопнятные значения, а через коммуникатор отправляется 0,000 либо 1,000, соответственно значение бита в регистре не изменяется.

Cmd отправляет всегда double, если вы не пользуетесь формулой, но и на выходе формулы тоже должен быть double по возможности, либо Сервер сам преобразует это в double…

У вас в канале управления должна быть формула, которую привел Михаил. Из Коммуникатора так не получится отправить, только по Откл/Вкл так как он передает значение double 0 или 1

  • Этот ответ был изменен 4 года, 5 месяцев назад от manjey73 .

как теперь записать 0 или 1 в нужный бит по подробней

Сделайте, пожалуйста, скриншоты Ваших настроек и приведите логи Коммуникатора, в которых видно, что было отправлено, а также укажите, что требовалось отправить.

Спасибо, разобрался с причиной почему не происходит запись в регистр Holding. В данный регистр запись возможна только командой 10, а через веб-интерфейс отправляется команда 6. Пробую через коммуникатор отправить, но тоже не выходит. Выкладываю настройки конфигурации устройства: Для всех регистров, созданы входные каналы, пример того регистра, на котором провожу эксперименты: [img] [/img] В коммуникаторе, в шаблоне устройств создан новый шаблон,для которого созданы группы элементов с адресами регистров:

Также, в шаблоне устройств созданы команды:

В администраторе создан канал управления, для которого используется формула, описанная Вами выше:

Текущее значение регистра, выводимое в коммуникаторе:

Побитное разложение данного регистра в веб-интерфейсе:

Пример отправки команды через веб-интерфейс:

Пример отправки команды через коммуникатор:

Лог коммуникатора после отправки команд, первая через коммуникатор, вторая через веб-интерфейс:

  • Этот ответ был изменен 4 года, 4 месяца назад от Stels .
  • Этот ответ был изменен 4 года, 4 месяца назад от Stels .

Картинки лучше на обменник.

Галочку «Множественная команда» в шаблоне устанавливали ? она как раз меняет команду с 6 на 10

Да галочка в шаблоне установлена

  • Этот ответ был изменен 4 года, 4 месяца назад от Stels .

Лог при отправке команды из коммуникатора: «2017-10-30 11:03:08 Команда КП 101 «ModbusDevice1», тип:

KpModbus, адрес: 1 Команда «звук кнопок» Отправка (13): 01 10 00 03 00 02 04 00 00 00 00 B3 BA Приём (5/5): 01 90 03 0C 01 Ошибка устройства: [03] ILLEGAL DATA VALUE! Команда «звук кнопок» Отправка (13): 01 10 00 03 00 02 04 00 00 00 00 B3 BA Приём (5/5): 01 90 03 0C 01 Ошибка устройства: [03] ILLEGAL DATA VALUE! Команда «звук кнопок» Отправка (13): 01 10 00 03 00 02 04 00 00 00 00 B3 BA Приём (5/5): 01 90 03 0C 01 Ошибка устройства: [03] ILLEGAL DATA VALUE!»

Лог, при отправке команды из веб-интерфейса: 2017-10-30 11:05:48 <NOUTE_PC><система><ACT> Проверка имени

и пароля пользователя admin. Результат: верно 2017-10-30 11:05:48 <NOUTE_PC><система><ACT> Получена

команда 0x06 (команда ТУ) от клиента 127.0.0.1 2017-10-30 11:05:48 <NOUTE_PC><система><ACT> Команда ТУ:

канал упр. = 1114, ид. польз. = 11

Спасибо! Сам разобрался. Проблема была в самом устройстве «Ошибка устройства: [03] ILLEGAL DATA VALUE!» стояла блокировка на запись в регистры. Теперь появилась другая проблема, отправляю команду на запись в регистр с адресом «4» значение равное «0»: «Отправка (11): 01 10 00 03 00 01 02 00 00 A6 63» В ответ приходит: «Приём (5/5): 01 10 00 03 00 Приём (3/3): 01 F1 C9 OK!» Соответственно, запись происходит успешно, но все биты в регистре ставятся в ноль, а не только тот который мне нужен, прописанный в формуле в канале управления. При попытке записать значение «1» в указанный регистр, запись вообще не происходит ни в один бит. Можете подсказать, в чем может быть причина? В формуле?

Можно ли отправить команду вот в таком виде: Адрес устройства|10H|Адрес первого регистра записи|Количество регистров|Счетчик байтов|Значения записываемых параметров|CRC-16|

Добрый день! 1. Рекомендую обновить Коммуникатор. В новой версии обновлён драйвер Модбас — будет удобнее работать. 2. Проверяйте отправляемые данные команды с помощью http://modbus.rapidscada.net/ Если команда не срабатывает, то Вы будете знать, отправлена действительно та команда, которая нужна, или нет. 3. Протокол Модбас позволяет отправлять команды в определенном виде. Отправляя команду на запись register (а не coil), Вы не можете установить только один бит, а другие не трогать. Нужна формула, которая возьмёт существующее значение входного канала, переключит нужные бит и это будет отправлено на устройство. Такая формула где-то здесь на форуме уже есть — попробуйте её найти.

Оказывается формула в этой теме MyCmd выше )) Надо тестировать и отлаживать эту формулу. Я могу это сделать, но в качестве платной услуги.

Какова стоимость? Или может вы подскажете процесс отладки?

Просто на рабочем месте где происходит общение с устройством нет Интернета…

📎📎📎📎📎📎📎📎📎📎