Правила создания каналов R, W, RW в драйвере

Стартовая страница Форумы Разработка и интеграция Правила создания каналов R, W, RW в драйвере

  • В этой теме 12 ответов, 2 участника, последнее обновление 9 лет назад сделано manjey73.
Просмотр 13 сообщений - с 1 по 13 (из 13 всего)
  • Автор
    Сообщения
  • #1641
    manjey73
    Участник

    Интересуют правила создания каналов чтения, записи, чтения и записи в драйверах устройств.

    public KpXXXXLogic(int number) : base(number)
    {
    List<TagGroup> tagGroups = new List<TagGroup>();
    TagGroup tagGroup;
    tagGroup = new TagGroup(«Входные каналы:»);
    tagGroup.KPTags.Add(new KPTag(1, «Канал 1»));
    tagGroups.Add(tagGroup);
    InitKPTags(tagGroups);
    }
    SetCurData(индекс, значение, 1);

    С чтением вроде понятно, кроме правил привязки индекса к нужному каналу.

    Как организовать каналы чтения/записи и записи ?

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

    В драйверах используется терминология тегов и команд вместо каналов.
    Индексы тегов начинаются от 0 и далее по порядку. Теги привязываются к каналам базы конфигурации автоматически на основе поля Signal. В большинстве случаев (не всегда) tagIndex = Signal — 1

    Если Вы отправляете команду КП, то Коммуникатором вызывается метод SendCmd, который Вы должны переопределить.

    #1679
    manjey73
    Участник

    Так вот и вопрос, как переопределять SendCmd чтобы он был привязан к номерам сигналов управления.

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

    В метод SendCmd передаётся номер команды, её тип и значение. Далее Вы их обрабатываете так, как нужно в конкретной ситуации.

    #1687
    manjey73
    Участник

    Михаил, можно короткий пример как принимать номер команды, тип и значение ?

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

    Например, https://github.com/RapidScada/scada/blob/master/ScadaComm/OpenKPs/KpSnmp/KpSnmpLogic.cs со строки 503.

    Проверка типа:

     if ((cmd.CmdTypeID == BaseValues.CmdTypes.Standard
    

    Получение номера:

    cmd.CmdNum
    

    Получение значения:

    cmd.CmdVal
    
    #1699
    manjey73
    Участник

    if (cmd.CmdTypeID == BaseValues.CmdTypes.Standard)
    {
    double can_in = cmd.CmdVal;
    int num_com = cmd.CmdNum;

    Тут формирую массив для отправки в порт

    Connection.Write(buf_com, 0, buf_com.Length); //послать запрос в порт
    System.Threading.Thread.Sleep(ReqParams.Delay);

    }
    else
    {
    WriteToLog(CommPhrases.IllegalCommand);
    }
    CalcCmdStats();

    Что и где не так ? даже попыток отправки в порт нет, абсолютно ничего. В Коммуникаторе никак не отражается на счетчик отправленных команд, никакого вывода даже в логи нет.

    В логах сервера есть «Команда ТУ отменена»

    • Этот ответ был изменен 9 лет назад от manjey73.
    #1710
    Mikhail
    Модератор

    Значит команда не дошла до Коммуникатора. Если Коммуникатор получает команду, то в его логах она выводится. Команда может быть отменена, если формула вернула NaN или null.

    #1711
    manjey73
    Участник

    Так формулы нет, используется режим команды Стандартная без формулы и без указания Значения команды.
    Должно быть передано вещественное число, которое вводим в поле ввода

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

    Это странно, нужно понять причину. Поставьте галочку записи события для канала управления. Затем после отправки команды в таблице событий посмотрите, что будет записано для команды?

    #1722
    manjey73
    Участник

    Причина как оказалось несогласованность библиотек сборки (Log.dll, ScadaCommCommon.dll, ScadaData.dll). Дело в том, что собираю на домашнем компе по удаленке, а тестирую на работе. Вот разность версий scada и повлияла.

    Остались вопросы по части формирования сообщений в лог и окно Коммуникатора.
    В Коммуникаторе на вкладке «Данные КП» не отображается строка «Команды ТУ отсутствуют» и соответственно вывод команды при ее появлении.

    В строке «Команды ТУ (всего/ошибок) отображается только счетчик «всего».

    Какие функции отвечают за дополнительный функционал и как их правильно формировать.
    Лучше небольшими примерами кода с комментарием.

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

    Думаю, для отображения команд поможет код из строки 116

    Вы имеете ввиду, что счётчик ошибок не увеличивается?

    #1737
    manjey73
    Участник

    Да, при записи параметра в прибор я читаю ответ прибора, и если ответ говорит, что запись не удалась необходимо принять какие-то действия, увеличить счетчик ошибок.
    Ну и как-то сообщить scada что увы и ах, запись не удалась.

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