Драйвер ODBC

Просмотр 15 сообщений - с 16 по 30 (из 84 всего)
  • Автор
    Сообщения
  • #24026
    Romiros
    Участник

    Библиотеки идут в составе RapidScada, поэтому не надо их таскать. А так, Вам виднее по Ваши задачи.

    #24029
    JurasskPark
    Участник

    Глупый вопрос.
    В пустой библиотеке, сделал стандартные void, чтобы проверить, как оно работает.
    /// <summary>
    /// Выполнить действия после добавления КП на линию связи
    /// </summary>
    public override void OnAddedToCommLine()
    {
    WriteToLog(«OnAddedToCommLine»);
    }

    /// <summary>
    /// Выполнить действия при запуске линии связи
    /// </summary>
    public override void OnCommLineStart()
    {
    WriteToLog(«OnCommLineStart»);
    }

    /// <summary>
    /// Выполнить действия при завершении работы линии связи
    /// </summary>
    public override void OnCommLineTerminate()
    {
    WriteToLog(«OnCommLineTerminate»);
    }

    /// <summary>
    /// Выполнить действия при прерывании работы линии связи
    /// </summary>
    public override void OnCommLineAbort()
    {
    WriteToLog(«OnCommLineAbort»);
    }

    /// <summary>
    /// Выполнить сеанс опроса КП
    /// </summary>
    public override void Session()
    {
    WriteToLog(«Session»);
    }

    /// <summary>
    /// Выполнить действия после установки соединения
    /// </summary>
    public override void OnConnectionSet()
    {
    WriteToLog(«OnConnectionSet»);
    }

    Логи:

    2022-06-17 01:57:23 Инициализация линии связи 6 «ODBC»
    OnAddedToCommLine
    2022-06-17 01:57:23 Запуск линии связи 6 «ODBC»
    OnCommLineStart

    2022-06-17 01:57:23 Невозможно выполнить сеанс связи с КП 6 «ODBC», т.к. соединение не установлено


    Повторение сообщения о невозможности выполнить сеанс связи.

    2022-06-17 01:57:27 Невозможно выполнить сеанс связи с КП 6 «ODBC», т.к. соединение не установлено

    2022-06-17 01:57:27 Невозможно выполнить сеанс связи с КП 6 «ODBC», т.к. соединение не установлено
    OnCommLineTerminate

    2022-06-17 01:57:27 Завершение работы линии связи 6 «ODBC»
    ———————————————————————————

    Вопрос, что делает void Session() и какой признак успешности соединения OnConnectionSet()?
    И что нужно, чтобы не было сообщения «Невозможно выполнить сеанс связи с КП»? 🙂
    P.S. Сильно бить ногами нельзя! 🙂

    #24032
    Romiros
    Участник

    Что-то типа того.
    public override void OnAddedToCommLine()
    {
    ConnRequired = false;
    }

    Можно в конструкторе логики драйвера выставить. Вообще смотрите KpDbImport. У Вас по сути частичное повторение этого драйвера будет.

    #24033
    JurasskPark
    Участник

    Большое спасибо! Я об этом даже как-то забыл! 😅

    #24034
    JurasskPark
    Участник

    Еще один нюанс, прочитал форум, получается, что в запросе берется первая строка из таблицы. Название столбца — это название тега, значение в нем — значение тега.
    И количество столбцов — это количество тегов, что в жизни очень редко бывает.
    Поэтому в отличие от KpDBImport, у меня строка — это отдельный тег 🙂

    #24039
    manjey73
    Участник

    В драйвере Тег это и есть данные сигнала. Если вам часть некоторых не нужна, вы просто не связываете ее с БД системы.

    Ну примерно как в групповом запросе Modbus, вам нужны переменные с 0, 3, 7 и 10 тегом но выполнить групповой запрос гораздо быстрее с 0 по 10 чем опрашивать их в отдельности. Просто не связываете с базой те, которые вам не нужны.

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

    #24057
    JurasskPark
    Участник

    Написание драйвера в стадии: 75%
    Начал проверять логику.
    Error executing actions of Device 6 «ODBC» on adding device to communication line: String is not hexadecimal.
    На что нужно обратить внимание? Я так понимаю, что я передаю номер устройства, но нигде его не обработал?

            public KpODBCLogic(int number)
                : base(number)
            {
                //Отключаем проверку сеанса связи 
                ConnRequired = false;
                ConfigLoad();
            }
    
     /// <summary>
            /// Выполнить действия после добавления КП на линию связи
            /// </summary>
            public override void OnAddedToCommLine()
            {
                WriteToLog("OnAddedToCommLine");
    
                strConfigDir = AppDirs.ConfigDir;
                intNumber = Number;
                strFileNamePath = KpConfig.GetFileName(AppDirs.ConfigDir, Number);
    
                ConfigLoad();
            }
            /// <summary>
            /// Выполнить сеанс опроса КП
            /// </summary>
            public override void Session()
            {
                WriteToLog("Session");
                base.Session();
                ImportExportData();
            }
    

    https://jurasskpark.magicteam.net/tmp/01.png
    https://jurasskpark.magicteam.net/tmp/02.png

    #24058
    JurasskPark
    Участник

    Вопрос закрыт. 😀

    2022-06-22 10:40:38 Сеанс связи с КП 6 «ODBC», тип: KpODBC
    Загружаем конфигC:\SCADA\ScadaComm\Config\KpODBC_006.xml
    Ошибка при отправке команды БД: System.FormatException: Строка не является 16-ричной записью.
    в Scada.ScadaUtils.HexToBytes(String s, Boolean skipWhiteSpace)
    в Scada.ScadaUtils.Decrypt(String s, Byte[] secretKey, Byte[] iv)
    в Scada.Comm.Devices.KpODBCLogic.InitDataSource(KpConfig config)
    в Scada.Comm.Devices.KpODBCLogic.ConfigLoad()
    в Scada.Comm.Devices.KpODBCLogic.ImportExportData()

    Я же забыл, что шифрую через Scada.ScadaUtils и получая строки, через загрузку проекта не расшифровываю сразу как у себя в приложении. 🙂

    #24064
    JurasskPark
    Участник

    Помогите, пожалуйста!
    Я же правильно понимаю, что пока мы не ициницилизировали список тегов, то добавить срез данных нельзя?
    Т.е. сначала InitKPTags(tagGroups) , а только потом AddArcSrez(srez)?
    Я думал, что можно в SetCurData() указывать время тега… )

    Можно всё же когда добавляешь в тег в свой список, сразу ему отдавать время?)

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

    Теги инициализируются при добавлении КП на линию связи.
    Архивный срез добавляется в сеансе опроса.

    #24153
    JurasskPark
    Участник

    И снова здравствуйте! 🙂
    Вернулся я после отдыха.

    http://jurasskpark.magicteam.net/tmp/10.png
    http://jurasskpark.magicteam.net/tmp/11.png
    http://jurasskpark.magicteam.net/tmp/12.png

    В таблице текущих значения я вижу…
    А вот в БД у тега 506 с названием TAG1 значения нет… На что стоит обратить внимание?

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

    Добрый день!
    В таблице Входные каналы сигнал номер 6, а на странице КП всего 4 сигнала.

    #24163
    JurasskPark
    Участник

    Михаил, я всё-таки тупой.
    Потому что я номер сигнала указываю, он в таблице в отличие от DBImport не появляется.
    Значит нужно меня тыкнуть носом, где идёт связка сигнала (номера) с каналом и я его не сделал. Если не сложно, пожалуйста, скажите, в каком районе или месте происходит проверка на привязку к каналу. 🙂

    http://jurasskpark.magicteam.net/tmp/13.png
    http://jurasskpark.magicteam.net/tmp/14.png
    http://jurasskpark.magicteam.net/tmp/15.png
    http://jurasskpark.magicteam.net/tmp/16.png
    http://jurasskpark.magicteam.net/tmp/17.png
    http://jurasskpark.magicteam.net/tmp/18.png

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

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

    #24168
    JurasskPark
    Участник
    /// <summary>
            /// Gets the default channel prototypes.
            /// </summary>
            public override KPCnlPrototypes DefaultCnls
            {
                get
                {
                    // load configuration
                    KpConfig config = new KpConfig();
                    string fileName = KpConfig.GetFileName(AppDirs.ConfigDir, Number);
    
                    if (!File.Exists(fileName))
                        return null;
                    else if (!config.Load(fileName, out string errMsg))
                        throw new ScadaException(errMsg);
    
                    // create channel prototypes
                    KPCnlPrototypes prototypes = new KPCnlPrototypes();
                    string[] tagNames = KpODBCLogic.GetTagNames(config);
                    int signal = 1;
    
                    foreach (string tagName in tagNames)
                    {
                        prototypes.InCnls.Add(new InCnlPrototype(tagName, BaseValues.CnlTypes.TI) { Signal = signal++ });
                    }
    
                    return prototypes;
                }
            }

    В KPView у меня не было этого.
    Но даже добавление не помогло…
    А в библиотеке больше нигде упоминание в коде о канале нет…

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