ModBus при отправке всегда 0

Помечено: 

Просмотр 15 сообщений - с 1 по 15 (из 19 всего)
  • Автор
    Сообщения
  • #24616
    Sergey_KRS
    Участник

    Возможно я просто ещё не нашел как правильно.
    Если отправлять команду вручную(через КП в линиях связи), то всё нормально.
    Но если запустить с формы(привязан Канал управления КП) то данные отправляются на устройство нулевые.
    Почему так?
    ————————————————————
    Подробнее.
    Администратор версия 5.5.2.2
    Есть объект, линия связи(физическая owen USB<=>RS485), КП (реальное устройство, Тип КП Modbus)
    Шаблон устройства сделан, пакеты отправляются и обрабатываются правильно, если отправлять команду вручную(через КП в линиях связи).
    В справочниках добавил в таблицу значения команд свои команды, например
    Наименование: Reley_ON
    Значение: 256
    Вернулся в Каналы управления, зашел в свой КП, добавил:
    Наименование: Reley_1_ON
    Тип команды: Станартная
    Объект: …., КП: …., Номер Команды: 1
    Значение команды: Reley_ON
    Использовать формулу: НЕТ
    При использовании в таком виде канала управления значение не подставляется в отправляемые данные, но если включить использование формулы и задать формулу 256, то работает.
    ——————————————
    Как правильно использовать значение из таблицы Значения команд, при работе с KpModbus.dll?
    Возможно ли создание своих таблиц, внутри справочников?
    Возможно ли получение значения из таблицы по индексу формулой?

    Спасибо, заранее.

    #24617
    manjey73
    Участник

    Не совсем понятно что вы хотите получить ?

    Китайское реле в которое надо посылать 256/512/768 ? 🙂

    #24619
    Mikhail
    Модератор

    Желательно предоставить ссылки на скриншоты настроек и отправляемых команд.

    #24652
    Sergey_KRS
    Участник

    Да оно. Надо же на примитивных вещах разбирать,
    потом другие буду добавлять.

    #24653
    Sergey_KRS
    Участник

    Объекты, Линии связи, КП, Значения команд
    Ссылка

    Параметры линии
    Ссылка

    Форма
    Ссылка

    При использовании формулы
    Ссылка

    Если отключить формулу
    Ссылка

    Видим, что значение команды ТУ с формулой 768,000
    а без формулы 0,000
    при этом в таблице «Значения команд» задано значение для команды 768

    #24656
    Sergey_KRS
    Участник

    В таблице «Значения команд» на скриншоте у команды «Rele_Toggle» стоит значение 300, изменено на 768, но на суть проблемы это не влияет.

    #24661
    manjey73
    Участник

    в формуле (Cmd+1) * 256 в качестве подачи команды сделайте перечисление Включено/выключено

    Или формула Cmd*256 и сделать свое перечисление вида Вкл/Выкл/Переключить в таком виде
    ; Вкл; Выкл; Переключить

    Ну или Вкл и Выкл местами поменять

    #24662
    manjey73
    Участник

    При «Отправить команду сразу» всегда отправляется значение 0, по этому его надо обрабатывать формулой вида Cmd+1 и далее что вам надо.

    #24663
    Mikhail
    Модератор

    Значения в таблице «Значения команд» — это просто строки, которые отображаются на кнопках в веб-интерфейса. Отправляется индекс значения в списке, то есть 0 в Вашем случае.
    Если Вы хотите, чтобы отправилось нужное число, то в формуле канала управления должно стоять число.
    Если нужно отправлять число в зависимости от нажатой кнопки, то текстовые значения команды должны быть перечислены в одной строке таблицы, и потребуется формула, которая пересчитает индекс 0,1,2… в нужное отправляемое число.

    #24664
    Sergey_KRS
    Участник

    Если я правильно понял, то
    При «Отправить команду сразу» любое значение поля «Значение команды» игнорируется. И мы получаем данные для отправки «0».
    Поэтому для этих каналов управления можно использовать только формулу, с предопределенным значением, например «256».
    ============================
    Спасибо за пояснение.
    ============================
    Логика построения таблицы Значения команд стала понятна.
    Из вышесказанного делаю вывод, что для перехода к абстрактным значениям, например «Reley_ON», следует копать в сторону функций.
    И использовать в качестве формулы ‘EKReley_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;
    }
    #24665
    Sergey_KRS
    Участник

    Возможно есть способ использования абстракции с понятными словами, но не через формулу. Если ткнете носом, буду благодарен.

    • Этот ответ был изменен 1 год, 7 месяцев назад от Sergey_KRS.
    #24669
    manjey73
    Участник

    Ну так не ставьте «Отправить сразу», а просто Выполнить команду. В Канале Управления указать перечисления и у вас будут отправляться индексы, а при вызове команды будут отрисованы кнопки, на которых вы не абстрактно напишите разумными словами.
    Включить, Выключить, Переключить и так далее

    #24670
    Sergey_KRS
    Участник

    Согласен, что предложенный Вами метод является удобным в большинстве случаев, но в указанном случае есть пульт и Н-ное количество устройств, а задача по нажатию приступить к выполнению действия без дополнительных окон и выбора параметров, ввода пароля(думаю что пароль можно отключить, пока не разобрался с политикой, возможно если дать разрешение гостю).

    Возвращаясь к первому сообщению:
    1) Возможно ли создание своих таблиц, внутри справочников?
    2) Возможно ли получение значения из таблицы по индексу формулой? (переформулирую получение данных из таблицы по запросу, например по индексу получить значение столбца «Значение» или по значению столбца А получить другой столбец В)
    3) Возможно ли получение формулой значения поля «Значения команды» в каналах управления.
    к вопросу 3

    #24671
    Sergey_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;

    Настройка формулы КП
    Настройка формулы

    #24672
    Romiros
    Участник

    Прикольный вариант с константами, спасибо. Думаю, что в данном случае скорость не имеет значения, это микросекунды.
    Пароль на отправку команды отключается в главном меню в web.
    Свои таблицы в справочниках создать нельзя.
    Формулой можно получить только те значения, которые указаны в документации по использованию формул. Не лимиты, не имена каналов не что-то ещё. И тем более не другие таблицы.
    Возможно в шестой версии что-то изменится.

Просмотр 15 сообщений - с 1 по 15 (из 19 всего)
  • Вы должны авторизироваться для ответа в этой теме.