Настройка модуля экспорта в БД

Стартовая страница Форумы Понять, как работает ПО Настройка модуля экспорта в БД

Просмотр 15 сообщений - с 16 по 30 (из 40 всего)
  • Автор
    Сообщения
  • #12400
    Romiros
    Участник

    INSERT INTO cnldata (cnlnum, val, stat)
    VALUES ( @cnlNum, @val, @stat)
    ON DUPLICATE KEY UPDATE val = @val, stat = @stat

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

    • Этот ответ был изменен 4 года, 10 месяцев назад от Romiros.
    • Этот ответ был изменен 4 года, 10 месяцев назад от Romiros.
    #12403
    Romiros
    Участник

    CnlNum ключевое поле.

    #12404
    Taw
    Участник

    Или экспортировать данные только для одного канала а не для всех?

    #12405
    Taw
    Участник

    в логе ошибка для запроса INSERT INTO cnldata (cnlnum, val, stat)
    VALUES ( @cnlNum, @val, @stat)
    ON DUPLICATE KEY UPDATE val = @val, stat = @stat

    Error export current data to DB MySQL — 127.0.0.1:3306: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘0, stat = 1’ at line 7

    #12406
    Taw
    Участник

    Покоректировал запрос
    INSERT INTO cnldata (datetime, cnlnum, val, stat) VALUES (@dateTime, @cnlnum, @val, @stat)
    ON DUPLICATE KEY UPDATE datetime =@dateTime;

    Модуль отправляет какую то партию данных а потом затихает
    все равно выбивает ошибку
    2019-06-24 15:46:37 Start ModDBExport module
    2019-06-24 15:47:08 Unable to enqueue an event. The maximum size of the queue 100 is exceeded

    #12407
    Taw
    Участник

    В общем то сделал чтобы было количество строк в таблице ровно столько сколько каналов. Пришлось под себя БД переделать и немного изменить запрос Ramiros и как он сказал сделать primary столбец numcnl. Просто примеры запросов и структур БД в справке устарели. Действительно передает реальные текущие данные канала в строку БД. Также как и при импорте БД в режиме реального времени. Каждый канал для каждой строки БД.
    В логе все равно ошибка.
    Unable to enqueue an event. The maximum size of the queue 100 is exceeded
    Но все работает. Что означает вообще эта ошибка?

    #12408
    Taw
    Участник

    Вопросы:
    1) В логе все равно ошибка.
    Unable to enqueue an event. The maximum size of the queue 100 is exceeded
    Но все работает. Что означает вообще эта ошибка?
    2) Как сделать чтобы данные экспортировались только для одного канала с периодичностью в 1 секунду?

    #12409
    Romiros
    Участник

    Смотрите в этих темах:

    Переполнение очереди ModDBExport и пропуски в передаче данных.

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

    • Этот ответ был изменен 4 года, 10 месяцев назад от Romiros.
    • Этот ответ был изменен 4 года, 10 месяцев назад от Romiros.
    #12420
    Mikhail
    Модератор

    Обычно очередь переполняется, если модуль не может отправить данные в результате ошибки. В данном случае модуль не может отправить события. Перезапустите Сервер и понаблюдайте за работой модуля экспорта. Какие ошибки присутствуют в логе?

    #12429
    Taw
    Участник

    Дело в том, что я не отправляю события и архивы. Я отключил эти опции экспорта. Я отправляю только текущие данные. Ошибка сохраняется
    2019-06-25 08:33:49 Unable to enqueue an event. The maximum size of the queue 100 is exceeded
    Включил эти опции экспорта для событий и архивов и ошибка исчезла. Опция флажок экспорт для событий, архива и текущих данных создает ошибку если вы отключаете эту опцию.
    Тогда вообще зачем эта опция-флажок для экспорта? Если ее убираешь то ошибка генерируется. Эта ошибка была чисто для событий и архива. Потому что я отключил флажок. На экспорт текущих данных эта ошибка не влияла. Я думаю надо доработать опции флажки и в сообщении об ошибке указать источник (возникла из за экспорта событий, текущих данных или архива).
    Я удалил sql запросы в экспорте архивов и событий, но оставил флажки и все работает.
    Отключаю флажки опции экспорта для архива и событий — и как следствие возникает эта ошибка.

    #12432
    Taw
    Участник

    В темах по работе с модулем экспорта возникала проблема
    2. По умолчанию скрипт экспортирует все каналы, как бы фильтровать чтобы экспортировать только выбранные каналы. Например у меня 100 каналов требуется экспортировать только 10 каналов.
    “baur” решил ее, написав ответ в двух словах логику включил в SQL-скрипт
    Как выглядит эта логика и можно ли поподробнее как вы сформировали Sql запрос. Можете его привести в этой теме?

    #12433
    Taw
    Участник

    Пример на форуме только через хранимые процедуры. Это можно решить только через хранимые процедуры и триггеры?
    В модуле скрипт такой:
    IF (datepart (ss, @dateTime) < 7) and ( @cnlNum = 385 or @cnlNum = 402 or @cnlNum = 451 or @cnlNum = 418)
    BEGIN
    EXEC [dbo].[UNSP_GPA_Export] @dateTime, @cnlNum, @val;
    END;
    В базе хранимая процедура:

    /****** Object: StoredProcedure [dbo].[UNSP_GPA_Export] Script Date: 24.02.2019 16:05:36 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO

    ALTER PROCEDURE [dbo].[UNSP_GPA_Export]
    (

    @moment datetime,
    @CnlNum int,
    @val1 float
    )
    AS
    BEGIN
    declare
    @name varchar(20);

    SET NOCOUNT ON

    set @name =
    case
    when @CnlNum = 385 then ‘UNSP_GPA1_power’
    when @CnlNum = 402 then ‘UNSP_GPA2_power’
    when @CnlNum = 451 then ‘UNSP_GPA3_power’
    when @CnlNum = 418 then ‘UNSP_GPA4_power’
    end;
    Insert into dbo.data(moment,sensor,value) values (@moment,@name,@Val1)
    END

    #12447
    Taw
    Участник

    Как сделать на стороне модуля правильный запрос для отправки данных только с определенных каналов? Примеры с форума не работают.
    Например делаю на стороне модуля запрос
    IF (@cnlnum = 270 )
    BEGIN
    INSERT INTO cnldata (datetime, cnlnum, val, stat) VALUES (@dateTime, @cnlnum, @val, @stat);
    END;

    В логе следующая ошибка
    2019-06-25 16:36:45 Error export current data to DB MySQL — 127.0.0.1:3306: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘IF (610 = 270 )
    BEGIN
    INSERT INTO cnldata (datetime, cnlnum, val, stat) VALU’ at line 18
    2019-06-25 16:36:45 Unable to enqueue current data. The maximum size of the queue 100 is exceeded

    #12450
    Romiros
    Участник

    Это плохой и очень неудобный вариант решения. Когда речь идёт о нескольких каналах ещё ладно, а если их сотни? Какие запросы Вы там будете писать? Если делать все на стороне сервера RapidScada, то гораздо эффективнее доработать модуль экспорта с хранением в xml списка каналов, которым разрешен экспорт в стороннюю БД.
    А сейчас мне кажется эффективнее передать все каналы в промежуточную таблицу БД, а затем уже средствами MySQL выбирать нужные каналы, в отфильтрованная таблицу, используя те же триггеры?

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

    Дело в том, что я не отправляю события и архивы. Я отключил эти опции экспорта.

    Проверю и напишу в эту тему.

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