Модуль экспорта в БД

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

    Здравствуйте!

    В проекте считываю данные из БД (MSSQL) с помощью пользователя «sa». Всё работает отлично.

    Стоит задача обновить данные в таблице этой же БД с помощью SCADA. То есть ввёл я руками число в веб-интерфейсе и оно отправилось в БД. Но в моём случае не отправилось.
    Создал нового пользователя в БД (так как если читать и записывать одним пользователем, то журнал линии связи выдаёт ошибки) по примеру MSDN, задал явки/пароли, выдал все возможные права. В приложении SQL Server Managment Studio вижу все базы, выполняю запросы, всё работает. А вот Rapid Scada ругается в логе модуля экспорта в БД:

    2020-11-29 03:22:05 Ошибка при соединении с БД MSSQL — «Название моего сервера»: Ошибка входа пользователя «AbolrousHazem».

    И такое сообщение генерируется с периодичностью примерно раз в секунду.

    В итоге пользователь в Managment Studio блокируется через некоторое количество попыток такого подключения.

    10 раз перепроверил чтобы логин и пароль были правильные, чтобы не было пробелов и т.д.

    Настройки модуля:
    https://pastenow.ru/5e3bf8f639f278ec1bad09b555c5a005
    https://pastenow.ru/5b21895287c457aaf9802740d8d503dd (сам запрос может и неверен для модуля, но к подключению по идее отношения не имеет)

    #17637
    vg
    Участник

    P.S.

    Пробовал отключить чтение и использовать только запись через модуль (с пользователем «sa»), но ошибка осталась.

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

    Добрый день!
    Модуль экспорта вызывает SQL-запросы, когда приходят данные от Коммуникатора.
    Для Вашей задачи должен подойти драйвер импорта из БД. Он умеет отправлять данные в базу в качестве команды телеуправления (при вводе команды через веб-интерфейс). Попробуйте решить проблему с помощью драйвера.

    #17642
    vg
    Участник

    Благодарю, указанный Вами способ работает.

    #17856
    vg
    Участник

    Подскажите ещё пожалуйста по следующему моменту:

    Допустимо ли использование пользователя «sa» для доступа к БД в настройках SCADA-системы на объектах? Или, как правило, практикуется создание нового пользователя?

    P.S. Используется Microsoft SQL Server.

    • Ответ изменён 5 лет, 7 месяцев назад пользователем vg.
    • Ответ изменён 5 лет, 7 месяцев назад пользователем vg.
    #17860
    Mikhail
    Модератор

    Это должна решать служба ИБ заказчика, наверное. Общее правило: пользователь должен иметь минимальные необходимые права. Пользователь sa — администратор, а для импорта/экспорта права администратора избыточны.

    #19906
    vg
    Участник

    Здравствуйте!

    Стоит задача «на лету» передавать данные с устройства в БД (MSSQL).
    Устройство выдаёт 2 измерения в секунду.
    По логике здесь требуется модуль экспорта в БД, но при попытке его настройки возникает ошибка, которую я описывал в первом сообщении этой темы более полугода назад:

    2021-06-04 12:12:50 Ошибка при соединении с БД MSSQL — «GYRDYMOV-NEW\DREAM»: Ошибка входа пользователя «Operator».

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

    Настройки модуля:
    https://pastenow.ru/25c5a9710d138bb22d27abfaaaf4ca79
    https://pastenow.ru/376a8797d8d7e8d247041829c11ee6da

    • Ответ изменён 5 лет, 2 месяца назад пользователем vg.
    #19909
    Romiros
    Участник

    Посмотрите какой пароль в файле конфигурации модуля. Просто добавлялось шифрование пароля. Может версии модуля и скады не совпадают.

    #19910
    vg
    Участник

    Вы были правы: пару месяцев не пользовался Rapid SCADA и пропустил новый релиз. После обновления ошибка не повторяется.

    #19912
    vg
    Участник

    Подскажите по возможному синтаксису запроса.

    В документации приведён пример:
    INSERT INTO CnlData (DateTime, CnlNum, Val, Stat)
    VALUES (@dateTime, @cnlNum, @val, @stat)

    В этом случае все текущие данные будут экспортироваться в БД.

    Можно ли фильтровать каналы, которые я хочу перенести в базу? В проекте может быть 300 каналов, а экспортировать мне надо 10.

    Или может как то ограничить каналы, попадающие в «Текущие данные»?

    • Ответ изменён 5 лет, 2 месяца назад пользователем vg.
    #19914
    Romiros
    Участник

    Выборка каналов планируется разработчиками в будущих версиях. Пока только костылями. Можно разрулить на уровне БД, а можно попробовать условия в самом запросе. Но во втором случае не знаю, как будет по быстродействию, всё-таки 2 раза в секунду. А так я экспортировал все в таблицу, перезатирая предыдущие и ставлю триггер на инсерт или апдейт. И уже в другую таблицу архивирую только нужные каналы, список которых держу в третьей таблице. Делал это давно, поэтому готового синтаксиса нет, но в Гугле есть всё 🙂

    #19915
    Romiros
    Участник

    Так на вскидку что-то типа этого. Не проверял.

    declare @listOfCnls table (num int);
    insert @listOfCnls(id) values(101),(102),(103);
    INSERT INTO CnlData (DateTime, CnlNum, Val, Stat)
    VALUES (@dateTime, @cnlNum, @val, @stat)
    Where CnlNum in (select id from @listOfCnls)

    #19916
    vg
    Участник

    Благодарю за ответы. Where вместе с INSERT вроде не дружат, но направление мысли в любом случае понял. Попробую выкрутиться.

    #19917
    vg
    Участник

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

    #19918
    Romiros
    Участник

    Проще модуль экспорта доработать — он открытый. Просто добавить лист каналов и сравнивать с приходящим в срезе.

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