JurasskPark

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

Просмотр 15 сообщений - с 946 по 960 (из 1,003 всего)
  • Автор
    Сообщения
  • в ответ на: Драйвер 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
    Участник

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

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

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

    Ну я лично очень долго осознавал, что после изменение конфига, нужно перезапускать службу. И вот когда я понял, что лушче сначала остановить службу, изменить конфиг, запустить exe в папке, посмотреть что он без ошибок, то только потом запускать службу. Посмотрите нет ли проблем в консоли.
    А то я пару раз попадал на то, что был процесс старого приложение запущен, поэтому новое приложение не запускалось.

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

    И куда черт возьми дели настройки путей, ведь были же ?

    Config\ScadaInstanceConfig.xml — <LogDir>L:\Log</LogDir> — это логи
    \ScadaAgent\Config\ScadaAgentConfig.xml —
    <Instances>
    <Instance active=»true» name=»Default»>
    <ProxyMode>false</ProxyMode>
    <Directory>C:\SCADA_6\</Directory>
    Каталог с установленой папкой 🙂

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

    По поводу Firewall — не знаю как у всех, но после отключения и подключения сетевого кабеля, Windows включает Firewall т.к. считает что была нарушена сеть и её «взламывают» (шутка). В этом варианте мне нравится OPCExpert, что он не забывает в ошибках писать, что мол Firewall то включен и не забудь его отключить. А то часто по запарке об этом не помнишь, тебе звонят, что OPC-сервер сломался, а там опять уборщица кабель выдернула. ))))

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

    Добавлю к предыдущим ораторам следующее:
    DCOM — добавить пользователя в DCOM, добавить пользователя на OPCEnum, и на OPC-сервер.
    Если у OPC-сервера есть служба, то делаю, чтобы она запускалась под учетной записью (сервисной) как и клиент. И вообще, хороший тон, когда учетная запись сервисная есть 🙂 Чтобы на АРМ был порядок в плане везде одна учетка и пароль, и тогда с одного OPC-клиента можно подклюючаться к N машинам, а не как мне разработчики ИС предлагала делать N коммуникаторов под каждый АРМ, чтобы учетную запись на АРМ не создавать. 😀

    Из редких и старых проблем, когда ПО написано в лохматых годах, и поэтому OPC-сервер представляет собой exe файл без службы, тогда в DCOM компоненте, тоже помимо прав на этот компонент у учетной записи, еще выставляем права на запуск под конкретной учетной записью.

    Еще помню, что старые OPC-сервера сохраняли настройки в ini или в реестре пользователя, под которой он настроен. То есть доступ через DCOM ты дал, а вот запустилось оно под этой учетной записью, а настроек то там нет. 🙂

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

    @manjey73 Агент у меня установлен и на вебе, и на сервере и на коммуникаторе. 🙂
    По логике я должен веб «деплоить» только с веба-сервера, а чтобы видеть актуальные теги и объекты, я должен сначала с сервера Server отдать конфиг через Админ, а на web сервере через Админ скачать конфиг, нарисовать интерфейс и только интерфейс публиковать.

    • Этот ответ был изменен 2 года, 10 месяцев назад от JurasskPark.
    в ответ на: Проверка дистрибутива v6 beta #24561
    JurasskPark
    Участник

    2. Windows Server 2008 R2 — WEB
    Windows Server 2019 — Server (СУБД)
    Windows Server 2019 — Communicator

    Я вот пока не понимаю, мне Admin приложение для передачи проекта нужно запускать на Web, скачивать проект из веба, чтобы он был актуальный, делать изменение, обратно передавать, только отключить передачу Server и Communicator.

    Если запускаю Admin на Server, тоже скачивать, только отключить передачу на Web…

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

    1. Как и по какому признаку Профиль определяет статус службы Веб-сервера? А то веб работает, а статус — неизвестно.
    2. Как перезапускать службу веб-сервера, если проект передаётся, а в логах передачи проекта пишет, что остановить и запустить службу не может.
    3. Где хранится проект, после передачи проекта на веб? Если это не секрет 🙂

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

    Дело в библиотеке sni.dll, которая используется для x64.
    https://jurasskpark.magicteam.net/tmp/042.png

    в ответ на: Проблема с запуском агента #24538
    JurasskPark
    Участник

    2IP — проверяет порт из интернета. У вас же с долей вероятности — всё компоненты на одном ПК установлены. Или нет? 🙂

    • Этот ответ был изменен 2 года, 11 месяцев назад от JurasskPark.
    в ответ на: Драйвер ODBC #24520
    JurasskPark
    Участник

    Перенёс почти библиотеку на v6.
    https://jurasskpark.magicteam.net/tmp/040.png
    Начал проверять — и не пойму банальной вещи.
    MS SQL библиотека добавляет в корень System.Data.SqlClient.dll на 261 Кб, рядом создает папку Runtime, где несколько папок для разных систем Unix, Windows и т.д., где уже лежит System.Data.SqlClient.dll на 1000 Кб для win и 933 Кб для Unix.
    https://jurasskpark.magicteam.net/tmp/041.png
    А мне какую подключать к проекту? Которая на 1000кб? Или я должен в папку ScadaComm в Runtimes их класть?

    • Этот ответ был изменен 2 года, 11 месяцев назад от JurasskPark.
Просмотр 15 сообщений - с 946 по 960 (из 1,003 всего)