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

Просмотр 15 сообщений - с 16 по 30 (из 30 всего)
  • Автор
    Записи
  • #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_Channel
    

    UNION 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
    

    Но как говорится нужно проверять…

    #37365
    ZWolol
    Участник

    Работает. Я всегда поражался конструкциям с объединениями.
    Получается, что для получения 100 параметров с одного участка нужно 20 запросов для Value и еще 20 для их State (качества) вместо одного на симпле.
    А потом еще для двух участков…

    А просто получить указатель на полученный Dataset со своей обработкой ни как?

    #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_Channel
    
    #37398
    ZWolol
    Участник

    Для OPC переменных есть параметр QUALITY.
    Если уровень бака 0 с качеством BAD, то это не значит что бак пустой.
    А в таблице SQL нет понятия качества, потому оно заносится в поле Status.

    Когда в базу пишется значение параметра, то в MeasureDate заносится текущая дата.
    Это дата последней записи значения.
    Если по каким-то причинам данные не обновляются (потеря связи с прибором или отказ оборудования), то SQL агент через заданный интервал времени устарения данных проставляет параметрам Status = BAD.

    Если параметрам проставлять NULL, но тогда плохо читаемые параметры будут на графике периодически падать в ноль, а не чертить прямую линию.

    #37399
    JurasskPark
    Участник

    Это всë правильн,что что вы сказали. Но есть одно НО!
    Вы рассказали логику для случая, когда нужен функционал перекладывания (портирования или конвертирования) данных из одной скады в другую.

    А когда это база данных не SCADA, то нужно создавать тег статус в таблице, где его нет? 🙂
    А его в других СУБД и таблицах может и не быть.

    #37401
    JurasskPark
    Участник

    Посмотрел, у Михаила вроде тоже нет считывания статуса.

    Вы можете взять исходный код и доработать его под свои задачи.
    Или заплатить деньги и получить свой эсклюзивный драйвер. 😀

    #37402
    JurasskPark
    Участник

    Стоп…
    А причём здесь параметры, SQL агент и проставление параметров?

    То что делается внутри СУБД сугубо личное дело разработчика и его логики.
    NULL проставляется в SELECT при выборке данных.
    А с каким параметром в RapidScada будет записан тег с плохим качеством — вообще никого не волнует. Он уже плохой и ему доверять нельзя. И о том, что данные поэтому тегу не приходят будет уже видно по статусу.

    #37403
    JurasskPark
    Участник

    То есть я сколько работал, никогда не видел проблемы, что если с датчика пропали значения и на тренде провал — это проблема.
    А вот наоборот, пожалуйста.
    Простой пример, датчик температуры. Значения зависли и постоянно приходит одно и тоже значение 22. А то что там качество плохое — оператору наплевать. Главное цифра 22 есть и график рисуется.
    С — стабильность.
    Думайте сами. 🙂

    #37405
    ZWolol
    Участник

    Я всегда работал с 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.
    Плохое качество у нас норма. Станции в лесу на пересеченной местности.
    Опрос ведется по радиомодему и связь в грозу не очень.

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

    В контексте данной темы, нужно смотреть, что будет записано в вашей базе MSSQL, если качество плохое.

    #37442
    ZWolol
    Участник

    Спасибо вам за драйвера.
    С их помощью я хотя бы разобрался с причинами проблем.

    Два 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 — данные устарели (остается старое значение)

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

    Но сейчас разработка 3D прекращена, а 4D это монстр какой-то.

    Напоминает превращение лёгкого P-CAD в монстр Altium Designer после продажи другому владельцу.

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

    Если в вашей БД можно получить коды качества, то возвращайте SQL-запросом NULL как значение канала, если качество плохое. Если не ошибаюсь, драйвер именно так будет понимать.

    #37476
    ZWolol
    Участник

    Я нашел на форуме сообщение 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 раза.

    #37481
    ZWolol
    Участник

    Создал процедуру:

    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

    Все заработало, только я не понял из-за этой процедуры или из-за того, что отключил в настройках линковки все лишнее… ну главное — результат. 🙂

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