Стартовая страница › Форумы › Взаимодействие с устройствами › Modbus › Внесение изменений сразу в 2-а регистра
- В этой теме 32 ответа, 4 участника, последнее обновление 1 год, 10 месяцев назад сделано Mikhail.
-
АвторСообщения
-
20.05.2022 в 15:21 #23620AlexandrУчастник
Всем добрый день,
Ранее для интереса разбирал работу Rapid Scada, все понравилось.
Долгое время не использовал Scada, не было подходящих задач.В данный момент появилась потребность мониторинга и управления одного генератора на панели DeepSea. С мониторингом понятно, с чтением регистров разобрался быстро.
Хотелось бы получить возможность удаленного управления.
Производитель DeepSea в целях защит от случайностей сделал правило что требуется внести изменения в двух регистрах одновременно. К примеру
Регистр 4104 передать значение 35700
Регистр 4105 передать значение 29835Не подскажите как это настроить, т.е при выполнении команды что бы эти значения уже были прописаны автоматом.
20.05.2022 в 15:55 #23622manjey73УчастникВы можете создать команду в шаблоне, что начальный регистр 4104 и при этом указать тип переменной int32, uint32 или float например и путем применения формул преобразовать в нужный массив сразу два значения.
Одновременно можно записать при помощи функции 10h иначе никак
- Этот ответ был изменен 1 год, 11 месяцев назад от manjey73.
20.05.2022 в 15:59 #23624manjey73УчастникИспользовать uint, int или float, проще uint конечно. Все они 4 байта, соответственно 2 регистра
20.05.2022 в 17:00 #23626MikhailМодераторДобрый день!
Тут вопрос в том, какой функцией нужно записать эти регистры. Если функция 10h, то можно сразу 2 записать.20.05.2022 в 17:03 #23627MikhailМодераторВ формулу канала управления попробуйте записать 0x8B74748B
Но может и не работает, надо пробовать.23.05.2022 в 06:30 #23639AlexandrУчастникmanjey73,
«Одновременно можно записать при помощи функции 10h иначе никак» — тут понятно, в документации также указано использовать 10h (множественная команда)
а можно чуть подробнее, как пользоваться формулами.
Я просто не совсем понимаю как произойдет отправка именно нужных мне значений.
- Этот ответ был изменен 1 год, 11 месяцев назад от Alexandr.
23.05.2022 в 08:35 #23641manjey73Участник@alexandr на любой из двух каналов цепляется канал управления в котором необходимо создать формулу, которая отправит команду значения одного канала и введенного значения. А там что вам необходимо, сложить, умножить, разделить и так далее.\
Но полагаю надо сложить с другим каналом, смещенным на 16 бит.
Подход может быть разным, возможно вам необходимо сперва изменить оба значения и только потом оправить команду, или как выше, изменять одно значение, используя второе без изменений.
23.05.2022 в 11:20 #23642AlexandrУчастникmanjey73,
складывать или делать какие нибудь действия не требуется.
Производитель подтвердил что требуется записать два регистрак примеру:
Регистр 4104 передать значение 35700
Регистр 4105 передать значение 29835После записи регистров, Контроллер DeepSea сам выполнит суммирование, и если сумма двух регистров верная то выполнит команду.
Т.е. мне требуется нажимая на команду к примеру ручное управление «MAN» выслать два регистра, желательно самому не вводить ни каких данных.
23.05.2022 в 12:06 #23643manjey73Участникзначения там строго типизированные? Попробуйте как Михаил написал отправить байтовую строку в режиме HEX, создав команду 10h и выбрав в команде uint 4 байта
Соответственно ваши числа в калькуляторе Windows в режиме программиста в hex переведите. Ну еще надо будет понять, требуется переставлять байты или пары байт при отправке.Можно вручную все проверить, главное в шаблоне команду определить…
23.05.2022 в 12:15 #23644manjey73УчастникВы в формуле можете сделать типа если Cmd == 1 то отправить то-то, если 0 то то-то и соответственно установить Использовать формулу и режим Включить/Выключить
23.05.2022 в 14:48 #23645AlexandrУчастникНе могли бы пояснить не много,
к примеру хочу отправить команду, вводим номер команды, ставим галочку «Бинарная», далее 16-ричные данные.
Сюда хочу внести
35700 29835 в 16-чном виде, это согласно калькулятору «8B74» и «748B».Между значениями требуется делать какую-нибудь табуляцию?
и почему Михаил в начале добавил «0x» 8B74748B. Что обозначает 0х?
23.05.2022 в 14:57 #23646manjey73Участник0x — это 16-ричное значение. Это если тип команды будет обычный.
Честно не знаю как это сработает в 5-й версии.
Лучше выбрать тип команды строка 16-ричные данные и ввести без 0xПроверять через Коммуникатор, там есть отправка команд.
Когда в Администраторе выбираете Линию связи — Устройство, появляется окно где есть кнопка Команды. Если вы в шаблоне создали команду с номером 1 соответственно.
Вы выбираете Номер команды 1. выбираете Бинарная — 16-ричные данныеТут просто без 0х вводите 8B74748B — смотрите по логам что получилось.
Если стандартная, то попробовать ввести с 0х8B74748B — не проверял, возможно это как раз отправка числа в 16-чном виде но не байты…23.05.2022 в 15:55 #23647AlexandrУчастникСпасибо всем кто откликнулся,
Настроил, управление появилось.
Возможно кому-нибудь понадобится, поэтому распишу что да как. Так как
у меня пока нет оболочки, веду работу по вводу регистров и сверки показаний. работаю с панели КП и статистика линии.Настроил следующим образом.
Команда множественная 16 (10Н).
Адрес элемента 4104
Количество элементов 1
Тип элементов int(4 байта)
Номер команды 1.Далее в КП
Ввожу номер команды 1,
Далее выбираю «Бинарная»,
Далее 16-ричные данные.
В строке ввожу 35700 29835 в формате HEX — 8B74748B, без любых пробелов и знаков табуляции.Ну и отправить команду :).
Всем спасибо!
23.05.2022 в 15:57 #2364923.05.2022 в 16:27 #23652MikhailМодераторБыло бы интересно ещё настроить отправку через веб-интерфейс. Но тогда бинарную команду придётся заменить на стандартную, поставить для неё в таблице значение «Выполнить» и формулу с фиксированным значением. Число в формуле потребуется подобрать опытным путём.
-
АвторСообщения
- Вы должны авторизироваться для ответа в этой теме.