Настройка модуля импорта из сторонней БД

Стартовая страница Форумы Понять, как работает ПО Настройка модуля импорта из сторонней БД

  • В этой теме 15 ответов, 5 участников, последнее обновление 3 года назад сделано Mikhail.
Просмотр 15 сообщений - с 1 по 15 (из 16 всего)
  • Автор
    Сообщения
  • #12368
    Taw
    Участник

    Подключился к БД.
    Выполняю Sql запрос “SELECT ValueX FROM tovars”
    1)Но почему импортируется в канал только одно первое значение из БД из столбца ValueX (значение 2)?

    2)И какую роль играет Tag count?
    3) Меняется значение в первой строке таблицы БД и в канале Скады тоже меняется значение. Получается должна быть однострочная таблица и значение строки таблицы завязывается на значение канала?

    • Эта тема была изменена 4 года, 10 месяцев назад от Mikhail.
    #12371
    Romiros
    Участник

    1. Так и должно быть.
    2. Для сложных запросов, чтобы установить точное количество тегов.
    3. Нет. Таблица может быть многострочной.

    Ваша таблица должна содержать идентификатор записи по которому можно отличить данные одного канала от другого. Соответственно sql запрос тоже должен содержать идентификатор записи. Запрос, который у Вас сейчас будет всегда возвращать лишь одно значение, по ому что он не понимает чем они отличаются. И так как это импорт текущих данных, а не архивов, то SqlDataReader берет только первое значение из датасета. Или сделайте нормальную таблицу по примеру тех что создаются для модуля экспорта в БД или же напишите правильный запрос к существующим таблицам БД.
    P.S. Ваши темы с с модулями и драйверами для подключения к БД лучше создавать в разделе «Понять как работает ПО» а не в «Разработка и интеграция», поскольку Вы ничего не разрабатываете а используете штатные модули.

    • Этот ответ был изменен 4 года, 10 месяцев назад от Romiros.
    #12373
    baur
    Участник

    тут надо использовать where с ключем, если идентификатор все время меняется, то использовать top(n) с сортировкой или агрегатные функции как: min, max и т.д.

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

    Но почему импортируется в канал только одно первое значение из БД

    Драйвер извлекает текущие данные — он предназначен для работы только с текущими данными. ПОэтому, если выборка возвращает несколько строк, то берётся 1-я строка.

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

    Перенёс топик в более подходящий раздел, т.к. обсуждается существующий драйвер.

    #18952
    Tialion
    Участник

    Здравствуйте. В продолжение темы, чтоб не плодить новые. Вроде настроил все, но не работает, а в логах вижу ошибку в DcsdsComm/Log/line002.log —
    2021-03-30 10:33:00 Сеанс связи с КП 2 «KP1», тип: KpDbImport
    Нормальное взаимодействие с КП невозможно, т.к. SQL-команда не определена

    Команда естественно прописана

    Подскажите в чем ошибка?

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

    Добрый день!
    Найдите файл настройки КП в рабочей директории C:\SCADA\ScadaComm\Config
    Действительно ли настройка заполнена?
    Посмотрите в журнале линии связи, может быть при старте линии при загрузке настроек были какие-то ошибки

    #18964
    Tialion
    Участник

    В /opt/scada/ScadaComm/Config есть 3 файла
    KpDbImport_002.xml
    KpDbImport_003.xml
    ScadaCommSvcConfig.xml
    Содержиое xml для 2 КП
    <?xml version=»1.0″ encoding=»utf-8″?>
    <KpDbImportConfig>
    <DataSourceType>PostgreSQL</DataSourceType>
    <DbConnSettings>
    <Server>192.168.37.97</Server>
    <Database>postgres24</Database>
    <User>postgres</User>
    <Password>55BFAC04A558EE5E5D350A688BF563E2</Password>
    <ConnectionString />
    </DbConnSettings>
    <SelectQuery>select * from parametr_25_2660;
    </SelectQuery>
    <AutoTagCount>false</AutoTagCount>
    <TagCount>2</TagCount>
    <ExportCmds>
    <ExportCmd>
    <CmdNum>1</CmdNum>
    <Name>1</Name>
    <Query>select * from parametr_25_2660;</Query>
    </ExportCmd>
    </ExportCmds>
    </KpDbImportConfig>

    Вроде все на месте.
    Журнал линий связи — это /opt/scada/ScadaComm/Log/ScadaCommSvc.txt ?
    Если да то
    SCADA-Коммуникатор
    ——————
    Запуск : 30.03.2021 10:32:48
    Время работы : 22:03:02
    Состояние : норма
    Версия : 5.2.1.2
    SCADA-Сервер : версия 5.1, авторизация успешна

    Активные линии связи
    ———————
    1. Линия 1 «My Line» : цикл работы
    2. Линия 2 «Line1» : цикл работы

    там же есть файлы line002.log

    2021-03-31 08:37:12 Сеанс связи с КП 2 «KP1», тип: KpDbImport
    Нормальное взаимодействие с КП невозможно, т.к. SQL-команда не определена

    и line002.txt

    Линия 2 «Line1»
    —————
    Состояние : цикл работы
    Действие : 31.03.2021 8:37:14 Сеанс связи с КП 2 «KP1»

    Пользовательские параметры
    —————————
    Нет

    Общие свойства
    —————
    Нет

    Активные КП
    ————
    1. КП 2 «KP1» : ошибка

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

    Журнал линии связи — это line*.log
    Посмотрите ошибку (если есть) сразу после рестарта линии. Вероятно, проблема при считывании конфигурации КП.

    • Этот ответ был изменен 3 года назад от Mikhail.
    #18977
    Mikhail
    Модератор

    Пример файла C:\SCADA\ScadaComm\Config\KpDbImport_002.xml

    <?xml version="1.0" encoding="utf-8"?>
    <KpDbImportConfig>
      <DataSourceType>PostgreSQL</DataSourceType>
      <DbConnSettings>
        <Server>localhost</Server>
        <Database>rapid_scada</Database>
        <User>postgres</User>
        <Password>...</Password>
        <ConnectionString />
      </DbConnSettings>
      <SelectQuery>select * from cloud_pack.cloud_user;</SelectQuery>
      <AutoTagCount>false</AutoTagCount>
      <TagCount>2</TagCount>
      <ExportCmds />
    </KpDbImportConfig>
    #18979
    Tialion
    Участник

    все так и есть. я выше файлы выложил. Ошибки сразу после рестарта линии. Единственное но — пароль хранится в зашифрованном виде в файле? Если да, то все так, а не работает.

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

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

    #19011
    Tialion
    Участник

    /etc/init.d/scadacomm stop
    удалил все в /opt/scada/ScadaComm/Log
    /etc/init.d/scadacomm start

    содержимое line002.log

    ———————————————————————————
    2021-04-02 09:26:17 Инициализация линии связи 2 «Line1»
    2021-04-02 09:26:17 Ошибка при выполнении действий КП 2 «KP1» при добавлении КП на линию связи: Could not load type of field ‘Npgsql.NpgsqlConnection:CertificateSelectionCallback’ (9) due to: Could not resolve type with token 01000058 from typeref (expected class ‘Mono.Security.Protocol.Tls.CertificateSelectionCallback’ in assembly ‘Mono.Security, Version=4.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756’) assembly:Mono.Security, Version=4.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756 type:Mono.Security.Protocol.Tls.CertificateSelectionCallback member:(null)
    2021-04-02 09:26:18 Запуск линии связи 2 «Line1»

    2021-04-02 09:26:18 Сеанс связи с КП 2 «KP1», тип: KpDbImport
    Нормальное взаимодействие с КП невозможно, т.к. SQL-команда не определена

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

    Уже лучше. Посмотрите, лежит ли у Вас библиотека Mono.Security в директории KP
    Если лежит, удалите. Если не лежит, добавьте (её можно взять из Windows дистрибутива).

    В следующей версии перейдём на новую версию Npgsql и подобная проблема должна исчезнуть.

    #19032
    Tialion
    Участник

    Попробовал. Теперь в line002.log следующее
    ———————————————————————————
    2021-04-05 11:30:15 Инициализация линии связи 2 «Line1»
    2021-04-05 11:30:15 Запуск линии связи 2 «Line1»

    2021-04-05 11:30:15 Сеанс связи с КП 2 «KP1», тип: KpDbImport
    Ошибка при соединении с БД: Could not load type of field ‘System.Net.Security.SslStream:provider’ (0) due to: Could not resolve type with token 01000030 from typeref (expected class ‘Mono.Security.Interface.MonoTlsProvider’ in assembly ‘Mono.Security, Version=4.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756’) assembly:Mono.Security, Version=4.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756 type:Mono.Security.Interface.MonoTlsProvider member:(null)
    Ошибка при соединении с БД: Could not load type of field ‘System.Net.Security.SslStream:provider’ (0) due to: Could not resolve type with token 01000030 from typeref (expected class ‘Mono.Security.Interface.MonoTlsProvider’ in assembly ‘Mono.Security, Version=4.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756’) assembly:Mono.Security, Version=4.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756 type:Mono.Security.Interface.MonoTlsProvider member:(null)
    Ошибка при соединении с БД: Could not load type of field ‘System.Net.Security.SslStream:provider’ (0) due to: Could not resolve type with token 01000030 from typeref (expected class ‘Mono.Security.Interface.MonoTlsProvider’ in assembly ‘Mono.Security, Version=4.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756’) assembly:Mono.Security, Version=4.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756 type:Mono.Security.Interface.MonoTlsProvider member:(null)

    2021-04-05 11:30:17 Сеанс связи с КП 2 «KP1», тип: KpDbImport
    Ошибка при соединении с БД: Could not load type of field ‘System.Net.Security.SslStream:provider’ (0) due to: Could not resolve type with token 01000030 from typeref (expected class ‘Mono.Security.Interface.MonoTlsProvider’ in assembly ‘Mono.Security, Version=4.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756’) assembly:Mono.Security, Version=4.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756 type:Mono.Security.Interface.MonoTlsProvider member:(null)
    Ошибка при соединении с БД: Could not load type of field ‘System.Net.Security.SslStream:provider’ (0) due to: Could not resolve type with token 01000030 from typeref (expected class ‘Mono.Security.Interface.MonoTlsProvider’ in assembly ‘Mono.Security, Version=4.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756’) assembly:Mono.Security, Version=4.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756 type:Mono.Security.Interface.MonoTlsProvider member:(null)
    Ошибка при соединении с БД: Could not load type of field ‘System.Net.Security.SslStream:provider’ (0) due to: Could not resolve type with token 01000030 from typeref (expected class ‘Mono.Security.Interface.MonoTlsProvider’ in assembly ‘Mono.Security, Version=4.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756’) assembly:Mono.Security, Version=4.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756 type:Mono.Security.Interface.MonoTlsProvider member:(null)

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