ServerContext.SendCommand

  • В этой теме 11 ответов, 4 участника, последнее обновление 2 года назад сделано Mikhail.
Просмотр 12 сообщений - с 1 по 12 (из 12 всего)
  • Автор
    Записи
  • #34122
    manjey73
    Участник

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

    ServerContext.SendCommand(new TeleCommand(OutputChannel, 1, UserID));

    ???

    Просто Calculated канал может быть? или обязательно должен быть ххх/Output ?

    Так же вопрос, если в Calculated канале будет входная и выходная формула вида
    Val() и SetVal(CnlNum, Cmd) можно записать значение ?

    Пытаюсь просто в Calculated записать из модуля и лыжи не едут.

    #34130
    manjey73
    Участник

    Похоже Telecommand для привязанных каналов в Коммуникаторе.

    Как определить тип канала?
    Calculated, Input и т.д. где в коде их енумерация, не могу найти.

    #34132
    a80808
    Участник

    А таблица «Типы каналов» не поможет?

    #34134
    manjey73
    Участник

    Так вот CnlTypeId косячит, нужен оригинал кода, где?
    Ро выпадающем списку у меня какое-то несоответствие.
    + Выбираю канал как Input, код в каком-то месте перестает работать, и не вызывает исключение при этом.

    #34135
    JurasskPark
    Участник
    
            /// <summary>
            /// Performs actions on a new iteration of the main operating loop.
            /// Выполнение действия на новой итерации основного рабочего цикла.
            /// </summary>
            public override void OnIteration()
            {
                try
                {
                    DebugerLog("======================================");
                    DebugerLog("Start");
    
                    DebugerLog("IsFileStorage = " + Storage.IsFileStorage + "");
                    DebugerLog("IsReady = " + Storage.IsReady + "");
                    DebugerLog("ViewAvailable = " + Storage.ViewAvailable + "");
    
                    configDatabase = new ConfigDatabase();
                    string tableTitle = CommonPhrases.UndefinedTable;
    
                    foreach (IBaseTable baseTable in configDatabase.AllTables)
                    {
                        tableTitle = baseTable.Title;
                        storage.ReadBaseTable(baseTable);
                        DebugerLog(baseTable.Name + "[" + baseTable.ItemCount + "]");
                    }
    
                    tableTitle = CommonPhrases.UndefinedTable;
                    configDatabase.Init();
    
                    foreach (Cnl cnl in configDatabase.CnlTable.Where(c => c.Active))
                    {
                        for (int i = 0, len = cnl.GetDataLength(); i < len; i++)
                        {
                            int test = cnl.CnlNum + i;
                            DebugerLog("i=" + i.ToString() + " cnlNum=" + cnl.CnlNum + " test=" + test + "");
                            CnlData curCnlData = serverContext.GetCurrentData(cnl.CnlNum);
                            DebugerLog("val=" + curCnlData.Val.ToString() + " stat=" + curCnlData.Stat.ToString() + "");
                            Random random = new Random();
                            curCnlData.Val = random.Next(0, 1000);
                            curCnlData.Stat = 1;
                            DebugerLog("val=" + curCnlData.Val.ToString() + " stat=" + curCnlData.Stat.ToString() + "");
                            serverContext.WriteCurrentData(cnl.CnlNum, curCnlData);
                            CnlData curCnlDataWrite = serverContext.GetCurrentData(cnl.CnlNum);
                            DebugerLog("Write val=" + curCnlDataWrite.Val.ToString() + " stat=" + curCnlDataWrite.Stat.ToString() + "");
                        }
                    }
    
                    Log.WriteAction(Locale.IsRussian ?
                        "База конфигурации считана успешно" :
                        "The configuration database has been read successfully");
    
                    //ReadConfigDatabase();
                    DebugerLog("Stop");
                }
                catch (Exception ex)
                {
                    moduleLog.WriteError(ex.ToString());
                }
            }
    

    Пример записи значения в тег из модуля. Может поможет 🙂

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

    ServerContext.SendCommand отправляет команду. Канал должен быть выходного типа.
    Запись значения в канал — это другое и записывается другим методом.

    #34141
    manjey73
    Участник

    Я чуть о другом.
    Вижу выпадающий список типов каналов, а он не бьёт с цифрами типов.
    Список отсортирован? Как точно по цифре определить тип?
    Где его енумерация, не могу найти

    #34142
    JurasskPark
    Участник

    Нумерация типа идёт по порядку как объявлен в коде. От 0.
    Если нет принудительного присваивания.

    #34143
    manjey73
    Участник

    Так вот в списке идёт
    Calculated
    Calculated/Output
    Input
    Input/Output
    Output

    А Input/Output вроде имеет номер 2 а не 3. В общем какая-то нестыковка.

    #34144
    manjey73
    Участник

    Так, задам вопрос иначе.

    ServerContext.Cnls.CalcCnls — Это каналы Calculated
    ServerContext.Cnls.OutCnls — Это каналы выходные

    ServerContext.Cnls.ArcCnls — Это архивные — в каком плане архивные ?
    ServerContext.Cnls.MeasCnls — Это какие?

    Где каналы Input ? вот просто Input, без всяких Output, Архив и что там еще ?

    #34145
    manjey73
    Участник

    CnlTypeID

    Нашел. и Input в Meas оказался.

    Что такое ArcCnls ? — архивным же может быть любой тип канала, нет?

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

    Если канал имеет тип Выходной (без слова Входной или Расчётный), то он не записывается в архив, потому что через него можно только команду отправить.

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