Стартовая страница › Форумы › Понять, как работает ПО › Модуль экспорта в БД
- В этой теме 26 ответов, 3 участника, последнее обновление 5 лет, 1 месяц назад сделано
Mikhail.
-
АвторЗаписи
-
29.11.2020 в 03:36 #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 (сам запрос может и неверен для модуля, но к подключению по идее отношения не имеет)29.11.2020 в 03:49 #17637vg
УчастникP.S.
Пробовал отключить чтение и использовать только запись через модуль (с пользователем «sa»), но ошибка осталась.
29.11.2020 в 11:58 #17640
MikhailМодераторДобрый день!
Модуль экспорта вызывает SQL-запросы, когда приходят данные от Коммуникатора.
Для Вашей задачи должен подойти драйвер импорта из БД. Он умеет отправлять данные в базу в качестве команды телеуправления (при вводе команды через веб-интерфейс). Попробуйте решить проблему с помощью драйвера.29.11.2020 в 17:03 #17642vg
УчастникБлагодарю, указанный Вами способ работает.
17.12.2020 в 15:07 #17856vg
УчастникПодскажите ещё пожалуйста по следующему моменту:
Допустимо ли использование пользователя «sa» для доступа к БД в настройках SCADA-системы на объектах? Или, как правило, практикуется создание нового пользователя?
P.S. Используется Microsoft SQL Server.
17.12.2020 в 16:43 #17860
MikhailМодераторЭто должна решать служба ИБ заказчика, наверное. Общее правило: пользователь должен иметь минимальные необходимые права. Пользователь sa — администратор, а для импорта/экспорта права администратора избыточны.
04.06.2021 в 12:14 #19906vg
УчастникЗдравствуйте!
Стоит задача «на лету» передавать данные с устройства в БД (MSSQL).
Устройство выдаёт 2 измерения в секунду.
По логике здесь требуется модуль экспорта в БД, но при попытке его настройки возникает ошибка, которую я описывал в первом сообщении этой темы более полугода назад:2021-06-04 12:12:50 Ошибка при соединении с БД MSSQL — «GYRDYMOV-NEW\DREAM»: Ошибка входа пользователя «Operator».
Не понимаю в чём дело. Вручную логин и пароль, которые используются для подключения, проходят.
Настройки модуля:
https://pastenow.ru/25c5a9710d138bb22d27abfaaaf4ca79
https://pastenow.ru/376a8797d8d7e8d247041829c11ee6da-
Ответ изменён 5 лет, 2 месяца назад пользователем
vg.
04.06.2021 в 12:27 #19909Romiros
УчастникПосмотрите какой пароль в файле конфигурации модуля. Просто добавлялось шифрование пароля. Может версии модуля и скады не совпадают.
04.06.2021 в 12:59 #19910vg
УчастникВы были правы: пару месяцев не пользовался Rapid SCADA и пропустил новый релиз. После обновления ошибка не повторяется.
04.06.2021 в 13:50 #19912vg
УчастникПодскажите по возможному синтаксису запроса.
В документации приведён пример:
INSERT INTO CnlData (DateTime, CnlNum, Val, Stat)
VALUES (@dateTime, @cnlNum, @val, @stat)В этом случае все текущие данные будут экспортироваться в БД.
Можно ли фильтровать каналы, которые я хочу перенести в базу? В проекте может быть 300 каналов, а экспортировать мне надо 10.
Или может как то ограничить каналы, попадающие в «Текущие данные»?
-
Ответ изменён 5 лет, 2 месяца назад пользователем
vg.
04.06.2021 в 14:17 #19914Romiros
УчастникВыборка каналов планируется разработчиками в будущих версиях. Пока только костылями. Можно разрулить на уровне БД, а можно попробовать условия в самом запросе. Но во втором случае не знаю, как будет по быстродействию, всё-таки 2 раза в секунду. А так я экспортировал все в таблицу, перезатирая предыдущие и ставлю триггер на инсерт или апдейт. И уже в другую таблицу архивирую только нужные каналы, список которых держу в третьей таблице. Делал это давно, поэтому готового синтаксиса нет, но в Гугле есть всё 🙂
04.06.2021 в 14:37 #19915Romiros
УчастникТак на вскидку что-то типа этого. Не проверял.
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)04.06.2021 в 14:47 #19916vg
УчастникБлагодарю за ответы. Where вместе с INSERT вроде не дружат, но направление мысли в любом случае понял. Попробую выкрутиться.
04.06.2021 в 15:08 #19917vg
УчастникПопробую ещё модуль разработать.
В ModTestLogic есть метод OnCurDataProcessed, который выполняется после обработки новых текущих данных сервером.04.06.2021 в 15:12 #19918Romiros
УчастникПроще модуль экспорта доработать — он открытый. Просто добавить лист каналов и сравнивать с приходящим в срезе.
-
Ответ изменён 5 лет, 2 месяца назад пользователем
-
АвторЗаписи
- Для ответа в этой теме необходимо авторизоваться.