Стартовая страница › Форумы › Понять, как работает ПО › Работа с MS SQL для чайника
- В этой теме 29 ответов, 3 участника, последнее обновление 1 год, 5 месяцев назад сделано
ZWolol.
-
АвторЗаписи
-
20.03.2025 в 10:13 #37363
JurasskParkУчастникSELECT TAGS.TAGNAME, dbo.Currents.Value AS TAGVALUE FROM ( SELECT 'TAG01' AS TAGNAME, 1 AS TAGID UNION SELECT 'TAG02', 2 UNION SELECT 'TAG03', 3 UNION SELECT 'TAG04', 4 UNION SELECT 'TAG05', 5 ) AS TAGS INNER JOIN dbo.Currents ON TAGS.TAGID = dbo.Currents.ID_ChannelUNION SELECT ‘TAG02’, 2, где ‘TAG02’ — название тега, а 2 — это ID_Channel очень удобно заполнить через Excel через CЦЕПИТЬ().
Учитывая ваши линкеды, то должно быть так, потому что SQL не позволит сделать больше 4 переменных в пути.
SELECT TAGS.TAGNAME, CURRENTS.Value AS TAGVALUE FROM ( SELECT 'TAG01' AS TAGNAME, 1 AS TAGID UNION SELECT 'TAG02', 2 UNION SELECT 'TAG03', 3 UNION SELECT 'TAG04', 4 UNION SELECT 'TAG05', 5 ) AS TAGS INNER JOIN [192.168.5.40].[Telemera].[dbo].[Currents] AS CURRENTS ON TAGS.TAGID = CURRENTS.ID_ChannelНо как говорится нужно проверять…
20.03.2025 в 12:02 #37365ZWolol
УчастникРаботает. Я всегда поражался конструкциям с объединениями.
Получается, что для получения 100 параметров с одного участка нужно 20 запросов для Value и еще 20 для их State (качества) вместо одного на симпле.
А потом еще для двух участков…А просто получить указатель на полученный Dataset со своей обработкой ни как?
20.03.2025 в 13:44 #37367
JurasskParkУчастникПри сборе данных с СУБД нет понятия «качество» сигнала. Если он находится в БД, значит оно уже Good.
Если вам нужно смотреть, что если качество плохое, то эта запись не должна попасть в запрос или значение Value должно быть NULL.Какое значение State отвечает за плохое качество?
Допустим, State = 255 — это Bad.
То есть везде, где статус не 255, этот значение показываем и оно будет Good, а если 255, то отдадим NULL.SELECT TAGS.TAGNAME, (CASE WHEN CURRENTS.State != 255 THEN CURRENTS.Value ELSE NULL END) AS TAGVALUE FROM ( SELECT 'TAG01' AS TAGNAME, 1 AS TAGID UNION SELECT 'TAG02', 2 UNION SELECT 'TAG03', 3 UNION SELECT 'TAG04', 4 UNION SELECT 'TAG05', 5 ) AS TAGS INNER JOIN Currents AS CURRENTS ON TAGS.TAGID = CURRENTS.ID_Channel20.03.2025 в 15:37 #37398ZWolol
УчастникДля OPC переменных есть параметр QUALITY.
Если уровень бака 0 с качеством BAD, то это не значит что бак пустой.
А в таблице SQL нет понятия качества, потому оно заносится в поле Status.Когда в базу пишется значение параметра, то в MeasureDate заносится текущая дата.
Это дата последней записи значения.
Если по каким-то причинам данные не обновляются (потеря связи с прибором или отказ оборудования), то SQL агент через заданный интервал времени устарения данных проставляет параметрам Status = BAD.Если параметрам проставлять NULL, но тогда плохо читаемые параметры будут на графике периодически падать в ноль, а не чертить прямую линию.
20.03.2025 в 15:44 #37399
JurasskParkУчастникЭто всë правильн,что что вы сказали. Но есть одно НО!
Вы рассказали логику для случая, когда нужен функционал перекладывания (портирования или конвертирования) данных из одной скады в другую.А когда это база данных не SCADA, то нужно создавать тег статус в таблице, где его нет? 🙂
А его в других СУБД и таблицах может и не быть.20.03.2025 в 15:48 #37401
JurasskParkУчастникПосмотрел, у Михаила вроде тоже нет считывания статуса.
Вы можете взять исходный код и доработать его под свои задачи.
Или заплатить деньги и получить свой эсклюзивный драйвер. 😀20.03.2025 в 17:50 #37402
JurasskParkУчастникСтоп…
А причём здесь параметры, SQL агент и проставление параметров?То что делается внутри СУБД сугубо личное дело разработчика и его логики.
NULL проставляется в SELECT при выборке данных.
А с каким параметром в RapidScada будет записан тег с плохим качеством — вообще никого не волнует. Он уже плохой и ему доверять нельзя. И о том, что данные поэтому тегу не приходят будет уже видно по статусу.20.03.2025 в 17:54 #37403
JurasskParkУчастникТо есть я сколько работал, никогда не видел проблемы, что если с датчика пропали значения и на тренде провал — это проблема.
А вот наоборот, пожалуйста.
Простой пример, датчик температуры. Значения зависли и постоянно приходит одно и тоже значение 22. А то что там качество плохое — оператору наплевать. Главное цифра 22 есть и график рисуется.
С — стабильность.
Думайте сами. 🙂20.03.2025 в 19:46 #37405ZWolol
УчастникЯ всегда работал с Master SCADA через сервер OPC DA.
А у любого OPC есть качество.
И этот параметр у нас задается в свойствах штриховки элементов.Например: будет уровень 2.6 м, но заштрихован.
И не будет вопроса типа: почему он не меняется когда сливают или наливают.
Я к этому привык, но возможно сейчас это и не нужно.Просто сервер OPC для Telemera написан 15 лет назад и на десятке не работает.
Он читает таблицу Currents за раз и выдает значения с качеством.Я посмотрел настройки универсального OPC.
Там для каждого параметра задается свой запрос:
SELECT Value FROM Currents WHERE ID_Channel = 1,2,3…Я полагаю, что он по сети так и будет делать эти 100 селектов.
Ну разве что только MS SQL прокэширует эту таблицу у себя в памяти.P.S.
Плохое качество у нас норма. Станции в лесу на пересеченной местности.
Опрос ведется по радиомодему и связь в грозу не очень.21.03.2025 в 12:50 #37432
MikhailМодераторВ контексте данной темы, нужно смотреть, что будет записано в вашей базе MSSQL, если качество плохое.
22.03.2025 в 13:44 #37442ZWolol
УчастникСпасибо вам за драйвера.
С их помощью я хотя бы разобрался с причинами проблем.Два SQL 2005 Profisional не поддерживают шифрования.
К SQL 2008 Enterprise заблокировали доступ.
С SQL 2012 не совместима линковка с 2008.
В общем целый букет…Так что я подожду пока начальство решит эти проблемы.
Иначе я же и окажусь крайним.P.S.
Мне нравилась Master SCADA 3D.
Я даже сделал для Master PLC универсальный драйвер COM-порта
для опроса приборов:
ВКТ-7.x (01,02,03,04,04P)
СПТ-942.x (01,02,03,04,05,06)
СПТ-943.x (01,02)
СПТ-961.x (1,2)
Меркурий 230 (ART,ART2P)
Их можно было все подключить к одному COM порту и опросить.
Но сейчас разработка 3D прекращена, а 4D это монстр какой-то.P.S.S.
Коды качества взяты:
0 — GOOD, иначе BAD.
1 — канал еще не опрашивался (ноль)
2 — канал отсутствует в конфигурации (ноль)
…
64 — нет архивных данных (ноль)
101 — данные устарели (остается старое значение)24.03.2025 в 10:52 #37466
MikhailМодераторНо сейчас разработка 3D прекращена, а 4D это монстр какой-то.
Напоминает превращение лёгкого P-CAD в монстр Altium Designer после продажи другому владельцу.
24.03.2025 в 10:54 #37467
MikhailМодераторЕсли в вашей БД можно получить коды качества, то возвращайте SQL-запросом NULL как значение канала, если качество плохое. Если не ошибаюсь, драйвер именно так будет понимать.
24.03.2025 в 16:05 #37476ZWolol
УчастникЯ нашел на форуме сообщение 2012 года об исправлении ошибки линковки старых баз.
Достаточно в старой системной базе создать процедуру sp_tables_rowset_64,
чтоб она брала значения из аналогичной существующей (завтра проверю).P.S.
На 3D я работал с ICP DAS i-7188xa по 512 kb RAM и ROM.
А для 4D используется ПЛК210 256 mb RAM и 512 mb ROM.
Размер памяти в 1000 раз, хотя цена только в 2 раза.25.03.2025 в 08:36 #37481ZWolol
УчастникСоздал процедуру:
create procedure sp_tables_info_rowset_64
@table_name sysname,
@table_schema sysname = null,
@table_type nvarchar(255) = null
as
declare @Result int
set @Result = 0
exec @Result = sp_tables_info_rowset @table_name, @table_schema, @table_type
goВсе заработало, только я не понял из-за этой процедуры или из-за того, что отключил в настройках линковки все лишнее… ну главное — результат. 🙂
-
АвторЗаписи
- Для ответа в этой теме необходимо авторизоваться.