Стартовая страница › Форумы › Понять, как работает ПО › Работа с MS SQL для чайника
- В этой теме 29 ответов, 3 участника, последнее обновление 1 год, 5 месяцев назад сделано
ZWolol.
-
АвторЗаписи
-
18.03.2025 в 04:53 #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 раз) как-то не очень хорошо.18.03.2025 в 10:54 #37310
JurasskParkУчастникЕсть два драйвера: официальный DbImport
и неофициальный
https://rapidscada.net/store/Module/ru/KpDbImportPlusС драйвером DbImportPlus я вам смогу помочь как автор.
https://rutube.ru/video/b9f202163f007d3a8a1fb337657dde42/?r=aПоэтому сначала выбираете драйвер с которым будете работать.
18.03.2025 в 10:58 #37311
JurasskParkУчастниквот с линкованными даже SQL менеджер не работает.
Как это так? Работает. 🙂
Вопрос в том, что он у вас запрос из трёх линкованых таблиц баз не объединил?18.03.2025 в 11:03 #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.CurrentsIp сами нужные подставьте и что скажет SQL?
У логина должно быть доступ к базам.18.03.2025 в 11:50 #37313ZWolol
УчастникСпасибо, посмотрю…
С 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.Решил попробовать сделать на рапиде.
Ей не нужна линковка баз.18.03.2025 в 11:58 #37314
JurasskParkУчастникОк. Тогда вопрос о том, что результат запроса несколько баз данных объединить в один ответ не стоит.
Тогда можете смотреть ролики о DbImportPlus.
Главное условие, что у вас или в строке или в название столбца, в зависимости от выбраного режима должно быть имя тега.
18.03.2025 в 12:00 #37315
JurasskParkУчастникОпять же разделение сетей и безопасность легко проверяется портом 1433. Если он открыт и телнет проходит — обвинение бездоказательное. 🙂
18.03.2025 в 13:52 #3732319.03.2025 в 09:23 #37337ZWolol
УчастникСпасибо за помощь, но не помогло…
Сначала я делал по описанию DB Import.
Все заносится, но в конце:
>> Если настройка выполнена корректно,
>> то на странице данных устройства можно будет увидеть полученные значения.
Я вижу:
[1] Simulator
Драйвер :DrvSimulator 6.0.0.0
…
Потому и попросил пример.Попробовал DB ImportPlus, результат тот же.
Но у него есть Проверка соединения, которая пишет следующее:Ошибка при соединении с БД; Подключение к серверу успешно установлено, но затем произошла ошибка при входе. (provider: Поставщик SSL, error: 0 — Цепочка сертификатов выпущена центром сертификации, не имеющим доверия.)
SQL 2008 Enterprise R2 (10.50.1600) может в этом проблема?
19.03.2025 в 09:29 #37338
JurasskParkУчастникВ дополнительных параметрах добавьте
Trusted_Connection=True;TrustServerCertificate=True;Integrated Security=False;
И еще раз проверьте.
Смысл в том, что ваш сервер не доверяет вам без сертификата.19.03.2025 в 09:33 #37339
JurasskParkУчастникВ справке по этому поводу написано:
MSSQL.
В связи с переходом на библиотеку Microsoft.Data.SqlClient, обратите внимание на условия проверки подлинности!
Возможно, в строке подключения в поле Дополнительные параметры понадобится добавить условие
Persist Security Info=True;Trust Server Certificate=True;19.03.2025 в 13:00 #37341
MikhailМодераторПроверьте, что в MSSQL настроен вход по пользователю и паролю, а не только Windows-аутентификация.
SQL 2008 Enterprise R2 старый, конечно, но скорее всего проблема не в этом, если Вы работаете на Windows, а не Linux.19.03.2025 в 17:57 #37358ZWolol
УчастникСпасибо, Доп. параметры помогли. Не обратил на них сразу внимание.
А теперь чтение таблицы…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 на текстовые теги.что-то опять грустно стало…
19.03.2025 в 19:40 #37360
JurasskParkУчастникчто-то опять грустно стало…
А что так? Жизнь удивительная и великолепная штука.
Никаких CASE писать не надо. Откуда у вас такие выводы?
Вы для начала определитесь:
— За какой промежуток времени лежат значения в Current? Только мгновенные?
— Какой список тегов вам нужен? Все или есть определённые?
— Вам названия тегов нужны нормальные буквенные или как ID числовые?
— Искали ли вы таблицу рядом с именем TagCFG или наподобие где лежат названия тегов с их ID?20.03.2025 в 08:04 #37361ZWolol
УчастникВ таблице 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
(пример скриптов на паскале в первом сообщении) -
АвторЗаписи
- Для ответа в этой теме необходимо авторизоваться.