JurasskPark

Созданные ответы форума

Просмотр 15 сообщений - с 736 по 750 (из 803 всего)
  • Автор
    Сообщения
  • в ответ на: Драйвер ODBC #24792
    JurasskPark
    Участник

    Не сложно, я об этом думал вчера. Но времени не хватило. Сделаю, когда прийду с работы 🙂

    в ответ на: OPC DA удалённое подключение #24761
    JurasskPark
    Участник

    @manjey73

    JurasskPark пусть себе работает, Agent + Коммуникатор + открытый порт для Агента

    Так вроде коммуникатор не умеет сам перезапускаться и конфиги по сети получать. Или что-то изменилось в 6ой версии?

    в ответ на: Драйвер ODBC #24755
    JurasskPark
    Участник
    в ответ на: Драйвер ODBC #24753
    JurasskPark
    Участник
    в ответ на: OPC DA удалённое подключение #24731
    JurasskPark
    Участник

    Намного проще поставить Коммуникатор локально и не думать о правах (и то бывают подводные камни). Но возможность удалённого подключения по OPC нужна в том случае, если заказчик не хочет ставить никакого нового ПО на компьютер с OPC-сервером.

    Вот тут Михаил прям правильные слова говорит. 🙂
    Но тут не только Заказчик, но и другие нюансы есть. Каждый раз когда нужно будет настроить или изменить коммуникатор на АРМ — не налазиешься. т.к. за ним работает оператор. )

    в ответ на: OPC DA удалённое подключение #24717
    JurasskPark
    Участник

    Ошибка подключения, если введён логин и пароль подключения

    https://ibb.co/PWpQ2n3

    в ответ на: OPC DA удалённое подключение #24716
    JurasskPark
    Участник

    Протестировал.
    BrowseOPC — локально OPC- сервера нашёл, теги вытащил.
    BrowseOPCClassic — удаленно подключился к OPC, если учетка, где клиент и OPC — server совпадают (Default), а вот если клиент был запущен под другой учеткой, прописал логин и пароль, то подключиться не смог.

    в ответ на: Драйвер ODBC #24715
    JurasskPark
    Участник

    Спасибо большое за помощь и ответ! 🙂

    в ответ на: Драйвер ODBC #24713
    JurasskPark
    Участник

    Вопрос закрыт. Надо код команды указывать. 🙂

    в ответ на: OPC DA удалённое подключение #24712
    JurasskPark
    Участник

    У OPCExpert есть хорошая штука, которая превращает OPC DA в OPC UA. В триал версии работает два часа, но планировщик windows с этим справляется :). Как бы тоже как один из вариантов выхода из положения. У нас вроде бы политика такая, что windows goodby.

    Там всё проще… она при запуске ищет процесс, и если находит название процесса, то работает бесконечно. 🙂

    Спасибо за проверку. Значит будем поддерживать опцию удалённого подключения к OPC DA серверу.

    Ну вот. А то я уже морально готовился самому писать клиент OPC DA. 😀

    в ответ на: Драйвер ODBC #24711
    JurasskPark
    Участник

    Мне нужна помощь! Ничего нового. 😀
    Скажу честно, в v5, я команды не трогал и оставлял как есть.
    Но т.к. в v6 я код переношу и правлю, то решил проверить работает отправка команд или нет.
    И на любую отправку команд — система пишет неизвестная команда. Решил проверить на драйвере Simulator — тоже самое.

    Хотя у симулятора есть обработка команд

       /// <summary>
            /// Sends the telecontrol command.
            /// </summary>
            public override void SendCommand(TeleCommand cmd)
            {
                base.SendCommand(cmd);
    
                if (cmd.CmdCode == TagCode.DO || cmd.CmdNum == 4)
                {
                    double relayVal = cmd.CmdVal > 0 ? 1 : 0;
                    Log.WriteLine(Locale.IsRussian ?
                        "Установить состояние реле в {0}" :
                        "Set the relay state to {0}", relayVal);
                    DeviceData.Set(TagCode.DO, relayVal);
                }
                else if (cmd.CmdCode == TagCode.AO || cmd.CmdNum == 5)
                {
                    Log.WriteLine(Locale.IsRussian ?
                        "Установить аналоговый выход в {0}" :
                        "Set the analog output to {0}", cmd.CmdVal);
                    DeviceData.Set(TagCode.AO, cmd.CmdVal);
                }
                else if (cmd.CmdCode == "Hist")
                {
                    // demonstrate how to create a historical data slice
                    DateTime now = DateTime.UtcNow;
                    DeviceSlice deviceSlice = new DeviceSlice(
                        new DateTime(now.Year, now.Month, now.Day, now.Hour, now.Minute, 0, DateTimeKind.Utc),
                        1, 1);
                    deviceSlice.DeviceTags[0] = DeviceTags[TagCode.Sin];
                    deviceSlice.CnlData[0] = new CnlData(cmd.CmdVal, CnlStatusID.Defined);
                    deviceSlice.Descr = "Demo slice";
                    DeviceData.EnqueueSlice(deviceSlice);
                }
                else if (cmd.CmdCode == "Event")
                {
                    // demonstrate how to create an event
                    DeviceData.EnqueueEvent(new DeviceEvent(DeviceTags[TagCode.Sin])
                    {
                        Timestamp = DateTime.UtcNow,
                        CnlVal = cmd.CmdVal,
                        CnlStat = CnlStatusID.Defined,
                        Descr = "Demo event"
                    });
                }
                else
                {
                    LastRequestOK = false;
                    Log.WriteLine(CommPhrases.InvalidCommand);
                }
    
                FinishCommand();
            }

    Но почему он тоже пишет неизвестная команда??? При этом команды же логируются.

    Вот видео: https://www.youtube.com/watch?v=U2YMGhvOUy0
    Михаил, подскажите, пожалуйста, как и где глубоко копать. 🙂

    Код отправки команд, который я почти не трогал.

       public override void SendCommand(TeleCommand cmd)
            {
                base.SendCommand(cmd);
    
                Log.WriteLine("cmd " + cmd.CmdCode);
    
                try
                {
                    if (CanSendCommands)
                    {
                        LastRequestOK = false;
    
                        if ((cmd.CmdCode == "SendStr" || cmd.CmdCode == "SendBin") &&
                            (dataSource.ExportCommands.TryGetValue(cmd.CmdNum, out DbCommand dbCommand) ||
                            dataSource.ExportCommands.TryGetValue(0, out dbCommand)))
                        {
                            if (ValidateDataSource() && ValidateCommand(dbCommand))
                            {
                                dataSource.SetCmdParam(dbCommand, "cmdVal",
                                    cmd.CmdCode == "SendStr" ? (object)cmd.CmdVal : cmd.GetCmdDataString());
                                dataSource.SetCmdParam(dbCommand, "cmdNum", cmd.CmdNum);
                                int tryNum = 0;
    
                                while (RequestNeeded(ref tryNum))
                                {
                                    if (Connect() && SendDbCommand(dbCommand))
                                        LastRequestOK = true;
    
                                    Disconnect();
                                    FinishRequest();
                                    tryNum++;
                                }
                            }
                        }
                        else
                        {
                            Log.WriteLine(CommPhrases.InvalidCommand);
                        }
                    }
                }
                catch (Exception ex)
                {
                    Log.WriteLine(ex.ToString());
                }
    
                FinishCommand();
            }
    
            /// <summary>
            /// Sends the command to the database.
            /// </summary>
            private bool SendDbCommand(DbCommand dbCommand)
            {
                try
                {
                    Log.WriteLine(Locale.IsRussian ?
                        "Запрос на изменение данных" :
                        "Data modification request");
                    dbCommand.ExecuteNonQuery();
                    return true;
                }
                catch (Exception ex)
                {
                    Log.WriteLine(string.Format(Locale.IsRussian ?
                        "Ошибка при отправке команды БД: {0}" :
                        "Error sending command to the database: {0}", ex.Message));
                    return false;
                }
            }
    в ответ на: Проверка дистрибутива v6 beta #24646
    JurasskPark
    Участник

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

    Надо чтобы Администратор как-то показывал пути запуска экземпляра, а то смотришь на значки Info внизу окошек или напротив разных свойств, но они как-то мало информативны оказываются…

    Особенно учитывая, что на одном ПК можно запустить несколько экземпляров, вопрос очень актуальный по идентификации, иначе можно долго искать ошибку, особенно какую-нибудь мелкую…

    Полностью поддерживаю! Мне тоже это не совсем понравилось, но я молчал. День где-то тратишь, чтобы понять, как и что в пути где-прописал, где каталог забыл указать. Вот еще вотс портами тоже надо прописать, где у какого экземпляра какой, а как агент обращается. Потому что по-умолчанию у конфигурации прописано localhost, а если на нескольких машинах установлено, то агент теперь обращается умеет к Серверу конфигурации по IP, или должен быть IP, где установлен и т.д. 🙂

    в ответ на: Проверка дистрибутива v6 beta #24643
    JurasskPark
    Участник

    Ахаха 🙂
    Я тоже убил полдня, чтобы понять почему у меня теги задваиваются, и только потом понял, public override void InitDeviceTags(), теперь самостоятельно вызывается, а раньше через OnCommLineStart(). 😀
    Вот такие мы интересные зверьки :)))

    в ответ на: Проверка дистрибутива v6 beta #24642
    JurasskPark
    Участник

    Так это уже не совсем службы — это консольное приложение, которое может работать как служба. 🙂

    в ответ на: Проверка дистрибутива v6 beta #24638
    JurasskPark
    Участник

    Так понимаю один надо удалить, но директорию оставить ????

    Нет. Количество правильное. Ничего не нужно удалять, просто теперь стало универсальнее, и поэтому сложнее. 🙂

Просмотр 15 сообщений - с 736 по 750 (из 803 всего)