Работа с MS SQL для чайника

Просмотр 15 сообщений - с 1 по 15 (из 30 всего)
  • Автор
    Записи
  • #37305
    ZWolol
    Участник

    Привет.

    Есть три MS SQL базы. Нужно считывать текущие данные и выводить их на экран.
    С Rapid SCADA я еще не работал. Ткните носом куда смотреть или пример.

    P.S.
    Я меня есть Simple Scada, но она работает только с одной базой.
    Я прилинковал к ней другие.

    В периодическом скрипте (10 сек) делаю запрос:
    sQuery:= ‘SELECT ID_Channel,Value,State FROM [192.168.5.40].Telemera.dbo.Currents;’;
    RunSQL(sQuery, nil, 1);

    Полученные данные присваиваю переменным:
    while not Dataset.EOF do
    begin
    f := DataSet.FieldByName(‘Value’).AsSingle;
    q := DataSet.FieldByName(‘State’).AsInt;
    case DataSet.FieldByName(‘ID_Channel’).AsInt of
    10: begin vrSQL318s := f; vrSQL318s_Q) := q; end; // Сточные воды
    17: begin vrSQL318v := f; vrSQL318v_Q) := q; end; // Текущий расход
    // …
    end;
    DataSet.Next;
    end;

    С текущей базой нет проблем, а вот с линкованными даже SQL менеджер не работает.
    Он видит таблицы, но данные получить не может.
    (SQL Server Enterprise 2008 R2)

    P.S.S.
    Есть вариант чтения данных через север OPC, но мне кажется что делать для каждой переменной SELECT (100 раз) как-то не очень хорошо.

    #37310
    JurasskPark
    Участник

    Есть два драйвера: официальный DbImport
    и неофициальный
    https://rapidscada.net/store/Module/ru/KpDbImportPlus

    С драйвером DbImportPlus я вам смогу помочь как автор.
    https://rutube.ru/video/b9f202163f007d3a8a1fb337657dde42/?r=a

    Поэтому сначала выбираете драйвер с которым будете работать.

    #37311
    JurasskPark
    Участник

    вот с линкованными даже SQL менеджер не работает.

    Как это так? Работает. 🙂
    Вопрос в том, что он у вас запрос из трёх линкованых таблиц баз не объединил?

    #37312
    JurasskPark
    Участник

    SELECT ID_Channel,Value,State FROM [192.168.5.40].Telemera.dbo.Currents
    UNION ALL
    SELECT ID_Channel,Value,State FROM [192.168.5.41].Telemera.dbo.Currents
    UNION ALL
    SELECT ID_Channel,Value,State FROM [192.168.5.42].Telemera.dbo.Currents

    Ip сами нужные подставьте и что скажет SQL?
    У логина должно быть доступ к базам.

    #37313
    ZWolol
    Участник

    Спасибо, посмотрю…

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

    Я менеджером подключаюсь к базам по имени или IP и нет проблем.
    Но когда я подключаюсь к локальной базе у которой указан Linked Servers,
    то менеджер видит базу и таблицы в ней, но запрос:
    SELECT [ID_Channel]
    ,[MeasureDate]
    ,[Value]
    ,[State]
    FROM [192.168.5.40].[Telemera].[dbo].[Currents]
    GO
    Выдает ошибку:
    Msg 7399, Level 16, State 1, Line 1
    The OLE DB provider «SQLNCLI10» for linked server «192.168.5.40» reported an error. The provider did not give any information about the error.
    Msg 7312, Level 16, State 1, Line 1
    Invalid use of schema or catalog for OLE DB provider «SQLNCLI10» for linked server «192.168.5.40». A four-part name was supplied, but the provider does not expose the necessary interfaces to use a catalog or schema.

    Решил попробовать сделать на рапиде.
    Ей не нужна линковка баз.

    #37314
    JurasskPark
    Участник

    Ок. Тогда вопрос о том, что результат запроса несколько баз данных объединить в один ответ не стоит.

    Тогда можете смотреть ролики о DbImportPlus.

    Главное условие, что у вас или в строке или в название столбца, в зависимости от выбраного режима должно быть имя тега.

    #37315
    JurasskPark
    Участник

    Опять же разделение сетей и безопасность легко проверяется портом 1433. Если он открыт и телнет проходит — обвинение бездоказательное. 🙂

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

    Добрый день!
    Документация по встроенному драйверу по ссылке.

    #37337
    ZWolol
    Участник

    Спасибо за помощь, но не помогло…

    Сначала я делал по описанию DB Import.
    Все заносится, но в конце:
    >> Если настройка выполнена корректно,
    >> то на странице данных устройства можно будет увидеть полученные значения.
    Я вижу:
    [1] Simulator
    Драйвер :DrvSimulator 6.0.0.0

    Потому и попросил пример.

    Попробовал DB ImportPlus, результат тот же.
    Но у него есть Проверка соединения, которая пишет следующее:

    Ошибка при соединении с БД; Подключение к серверу успешно установлено, но затем произошла ошибка при входе. (provider: Поставщик SSL, error: 0 — Цепочка сертификатов выпущена центром сертификации, не имеющим доверия.)

    SQL 2008 Enterprise R2 (10.50.1600) может в этом проблема?

    #37338
    JurasskPark
    Участник

    В дополнительных параметрах добавьте

    Trusted_Connection=True;TrustServerCertificate=True;Integrated Security=False;

    И еще раз проверьте.
    Смысл в том, что ваш сервер не доверяет вам без сертификата.

    #37339
    JurasskPark
    Участник

    В справке по этому поводу написано:

    MSSQL.
    В связи с переходом на библиотеку Microsoft.Data.SqlClient, обратите внимание на условия проверки подлинности!
    Возможно, в строке подключения в поле Дополнительные параметры понадобится добавить условие
    Persist Security Info=True;Trust Server Certificate=True;

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

    Проверьте, что в MSSQL настроен вход по пользователю и паролю, а не только Windows-аутентификация.
    SQL 2008 Enterprise R2 старый, конечно, но скорее всего проблема не в этом, если Вы работаете на Windows, а не Linux.

    #37358
    ZWolol
    Участник

    Спасибо, Доп. параметры помогли. Не обратил на них сразу внимание.
    А теперь чтение таблицы…

    ID_Channel Value State
    678 20.1 0
    783 1207.0 0
    801 123.4 101

    По описанию DB Import — это второй тип.
    Первый тег будет для значений ID_Channel, а второй для Value.
    Идешки числовые, значит в запросе нужно ставить преобразование их в стринг и добавлять в начале префикс типа ‘tg’?
    А статус нужно считывать другим запросом и с префиксом ‘st’?

    Для DB Import Plus — запрос будет из сотни CASE?
    Хотя там в запросе можно сразу заменить числовые ID на текстовые теги.

    что-то опять грустно стало…

    #37360
    JurasskPark
    Участник

    что-то опять грустно стало…

    А что так? Жизнь удивительная и великолепная штука.

    Никаких CASE писать не надо. Откуда у вас такие выводы?
    Вы для начала определитесь:
    — За какой промежуток времени лежат значения в Current? Только мгновенные?
    — Какой список тегов вам нужен? Все или есть определённые?
    — Вам названия тегов нужны нормальные буквенные или как ID числовые?
    — Искали ли вы таблицу рядом с именем TagCFG или наподобие где лежат названия тегов с их ID?

    #37361
    ZWolol
    Участник

    В таблице Currents текущие (мгновенные) параметры.
    Параметров около 800, но нужны только 100.
    Названия переменных должны быть буквенно-смысловыми, а не tg003.
    У таблиц SQL нет тегов. Там все связки по ID.

    На трех службах есть SQL базы Telemera [192.168.0.4],[192.168.0.27],[192.168.5.40]

    SELECT [ID_Channel],[MeasureDate],[Value],[State]
    FROM [192.168.5.40].[Telemera].[dbo].[Currents]

    3; 2025-03-20 10:57:25.547; 3.0498; 0 \
    4; 2025-03-20 10:57:25.547; 3.2483; 0 — это уровни воды в баках
    5; 2025-03-20 10:57:25.547; 3.6876; 0 /

    На Simple SCADA я делаю селект этой таблицы.
    А полученные данные я присваиваю соответствующим переменным в зависимости от ID.
    vrSQL2Gdp1h, vrSQL2Gdp1h_Q — это уровень и качество бака 1
    vrSQL2Gdp2h, vrSQL2Gdp2h_Q — это уровень и качество бака 2
    (пример скриптов на паскале в первом сообщении)

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