Стартовая страница › Форумы › Взаимодействие с устройствами › Modbus › ModBus при отправке всегда 0
Помечено: Modbus KpModbus.dll
- В этой теме 18 ответов, 4 участника, последнее обновление 1 год, 4 месяца назад сделано Mikhail.
-
АвторСообщения
-
26.08.2022 в 11:43 #24616Sergey_KRSУчастник
Возможно я просто ещё не нашел как правильно.
Если отправлять команду вручную(через КП в линиях связи), то всё нормально.
Но если запустить с формы(привязан Канал управления КП) то данные отправляются на устройство нулевые.
Почему так?
————————————————————
Подробнее.
Администратор версия 5.5.2.2
Есть объект, линия связи(физическая owen USB<=>RS485), КП (реальное устройство, Тип КП Modbus)
Шаблон устройства сделан, пакеты отправляются и обрабатываются правильно, если отправлять команду вручную(через КП в линиях связи).
В справочниках добавил в таблицу значения команд свои команды, например
Наименование: Reley_ON
Значение: 256
Вернулся в Каналы управления, зашел в свой КП, добавил:
Наименование: Reley_1_ON
Тип команды: Станартная
Объект: …., КП: …., Номер Команды: 1
Значение команды: Reley_ON
Использовать формулу: НЕТ
При использовании в таком виде канала управления значение не подставляется в отправляемые данные, но если включить использование формулы и задать формулу 256, то работает.
——————————————
Как правильно использовать значение из таблицы Значения команд, при работе с KpModbus.dll?
Возможно ли создание своих таблиц, внутри справочников?
Возможно ли получение значения из таблицы по индексу формулой?Спасибо, заранее.
26.08.2022 в 12:23 #24617manjey73УчастникНе совсем понятно что вы хотите получить ?
Китайское реле в которое надо посылать 256/512/768 ? 🙂
26.08.2022 в 14:49 #24619MikhailМодераторЖелательно предоставить ссылки на скриншоты настроек и отправляемых команд.
29.08.2022 в 10:15 #24652Sergey_KRSУчастникДа оно. Надо же на примитивных вещах разбирать,
потом другие буду добавлять.29.08.2022 в 10:17 #24653Sergey_KRSУчастник29.08.2022 в 10:23 #24656Sergey_KRSУчастникВ таблице «Значения команд» на скриншоте у команды «Rele_Toggle» стоит значение 300, изменено на 768, но на суть проблемы это не влияет.
29.08.2022 в 10:31 #24661manjey73Участникв формуле (Cmd+1) * 256 в качестве подачи команды сделайте перечисление Включено/выключено
Или формула Cmd*256 и сделать свое перечисление вида Вкл/Выкл/Переключить в таком виде
; Вкл; Выкл; ПереключитьНу или Вкл и Выкл местами поменять
29.08.2022 в 10:35 #24662manjey73УчастникПри «Отправить команду сразу» всегда отправляется значение 0, по этому его надо обрабатывать формулой вида Cmd+1 и далее что вам надо.
29.08.2022 в 10:36 #24663MikhailМодераторЗначения в таблице «Значения команд» — это просто строки, которые отображаются на кнопках в веб-интерфейса. Отправляется индекс значения в списке, то есть 0 в Вашем случае.
Если Вы хотите, чтобы отправилось нужное число, то в формуле канала управления должно стоять число.
Если нужно отправлять число в зависимости от нажатой кнопки, то текстовые значения команды должны быть перечислены в одной строке таблицы, и потребуется формула, которая пересчитает индекс 0,1,2… в нужное отправляемое число.29.08.2022 в 13:24 #24664Sergey_KRSУчастникЕсли я правильно понял, то
При «Отправить команду сразу» любое значение поля «Значение команды» игнорируется. И мы получаем данные для отправки «0».
Поэтому для этих каналов управления можно использовать только формулу, с предопределенным значением, например «256».
============================
Спасибо за пояснение.
============================
Логика построения таблицы Значения команд стала понятна.
Из вышесказанного делаю вывод, что для перехода к абстрактным значениям, например «Reley_ON», следует копать в сторону функций.
И использовать в качестве формулы ‘EK(«Reley_ON«)’, а уже эта функция и возвращает нужные для передачи данные.
Т.к. поддерживать систему через некоторое время и с зоопарком устройств станет сложнее при использовании просто цифр.
Сделал«функцию»формулу:double EK(string s) { switch(s) { case "R_ON": return 256; break; case "R_OFF": return 512; break; case "R_TOGGL": return 768; break; case "R_LATCH": return 1024; break; case "R_MOMENT": return 1280; break; case "R_DELAY": return 1536; break; } return 0; }
29.08.2022 в 13:26 #24665Sergey_KRSУчастникВозможно есть способ использования абстракции с понятными словами, но не через формулу. Если ткнете носом, буду благодарен.
- Этот ответ был изменен 1 год, 7 месяцев назад от Sergey_KRS.
29.08.2022 в 23:08 #24669manjey73УчастникНу так не ставьте «Отправить сразу», а просто Выполнить команду. В Канале Управления указать перечисления и у вас будут отправляться индексы, а при вызове команды будут отрисованы кнопки, на которых вы не абстрактно напишите разумными словами.
Включить, Выключить, Переключить и так далее30.08.2022 в 06:00 #24670Sergey_KRSУчастникСогласен, что предложенный Вами метод является удобным в большинстве случаев, но в указанном случае есть пульт и Н-ное количество устройств, а задача по нажатию приступить к выполнению действия без дополнительных окон и выбора параметров, ввода пароля(думаю что пароль можно отключить, пока не разобрался с политикой, возможно если дать разрешение гостю).
Возвращаясь к первому сообщению:
1) Возможно ли создание своих таблиц, внутри справочников?
2) Возможно ли получение значения из таблицы по индексу формулой? (переформулирую получение данных из таблицы по запросу, например по индексу получить значение столбца «Значение» или по значению столбца А получить другой столбец В)
3) Возможно ли получение формулой значения поля «Значения команды» в каналах управления.
30.08.2022 в 06:51 #24671Sergey_KRSУчастникУпростил формулу. Может поможет кому.
Вместо связки «switch, case» использовать константы, как это делается в С#, константы быстрее чем «switch, case» проще и понятнее. но следить за именами надо.
При использовании констант в формуле указывается просто имя константы.
Для этого в таблицу Формулы раздела справочник ввести значения этих констант:
const double R_ON_ = 256; const double R_OFF_ = 512; const double R_TAR_ = 768; const double R_LATCH_ = 1024; const double R_MOMENT_ = 1280; const double R_DELAY_ = 1536;
или краткая запись:
const double R_ON_ = 256, R_OFF_ = 512, R_TAR_ = 768, R_LATCH_ = 1024, R_MOMENT_ = 1280, R_DELAY_ = 1536;
30.08.2022 в 07:02 #24672RomirosУчастникПрикольный вариант с константами, спасибо. Думаю, что в данном случае скорость не имеет значения, это микросекунды.
Пароль на отправку команды отключается в главном меню в web.
Свои таблицы в справочниках создать нельзя.
Формулой можно получить только те значения, которые указаны в документации по использованию формул. Не лимиты, не имена каналов не что-то ещё. И тем более не другие таблицы.
Возможно в шестой версии что-то изменится. -
АвторСообщения
- Вы должны авторизироваться для ответа в этой теме.