передача данных с Rapid Scada

Стартовая страница Форумы Вопросы без категории передача данных с Rapid Scada

Просмотр 14 сообщений - с 31 по 44 (из 44 всего)
  • Автор
    Сообщения
  • #8600
    Mikhail
    Модератор

    Также Вы можете вызывать хранимые процедуры из модуля экспорта в БД.

    #8630
    Aidar
    Участник

    создал хранимую процедуру

    USE [scada]
    GO
    
    SET ANSI_NULLS OFF
    GO
    SET QUOTED_IDENTIFIER OFF
    GO
    
    ALTER PROCEDURE [dbo].[tr_Only_Today] (@id_sensor INT, @val int)
    	
    
    AS
       DECLARE @Yesterday	int
       
    set @Yesterday = (SELECT TOP 1 [value]   FROM [scada].[dbo].[data_02]  where id_sensor=@id_sensor and day(time) = DAY(GETDATE())-1  Order by id DESC)
    UPDATE [scada].[dbo].[sensors] SET value = @val - @Yesterday WHERE id_sensor = @id_sensor

    вызываю процедуру во вкладке Текущие данные:

    IF (@stat=1) and (@cnlNum != 2065)
    BEGIN
    
    UPDATE sensors SET value = @val, error = 0 WHERE id_sensor = @cnlNum
    INSERT INTO data_02 (id_sensor, id_group, value) SELECT id_sensor, id_group, @val FROM sensors WHERE  id_sensor = @cnlNum AND scan = 1
    END
    
    IF (@stat=1)  and (@cnlNum = 2065)
    BEGIN
    tr_Only_Today (2065, @cnlNum)
    END

    экспорт в БД останавливается. что не так?

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

    Смотрите ошибки в журнале.
    Вообще вызов процедуры должен быть SQL выражением.
    Пример для PostgreSQL:
    SELECT test.proc_cur_data(@cnlNum, @val, @stat);

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

    На MSSQL что-то типа:
    EXEC dbo.proc_cur_data @cnlNum, @val, @stat;

    #8667
    Aidar
    Участник

    с синтаксисом вроде разобрался. В Текущих данных вот это:

    IF (@stat=1) and (@cnlNum != 2065)
    BEGIN
    UPDATE sensors SET value = @val, error = 0 WHERE id_sensor = @cnlNum
    INSERT INTO data_02 (id_sensor, id_group, value) SELECT id_sensor, id_group, @val FROM sensors WHERE  id_sensor = @cnlNum AND scan = 1
    END
    IF (@stat=1)  and (@cnlNum = 2065)
    BEGIN
    
    INSERT INTO data_02 (id_sensor, id_group, value) SELECT id_sensor, id_group, @val FROM sensors WHERE  id_sensor = @cnlNum AND scan = 1
    EXEC [dbo].[tr_Only_Today] 2065, @val;
    
    END

    Но в журнале пишет: Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding.
    экспорт в БД останавливается. что это значит? как исправить?

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

    Проблема возникает только при использовании Вашего T-SQL выражения или с простыми запросами, которые были по умолчанию, тоже перестало работать?

    #8673
    Aidar
    Участник

    со старым кодом все работает как раньше.
    То есть, если просто исключить вызов функции EXEC [dbo].[tr_Only_Today] 2065, @val; все работает

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

    Я думаю, что наоборот нужно оставить только вызов функции, а остальное убрать, как я писал выше.

    #8745
    Aidar
    Участник

    В Текущих данных оставил только код:
    EXEC [dbo].[tr_Only_Today] 2065, 2500;
    Запись в базу останавливается. В журнале пишет:

    Ошибка при экспорте текущих данных в БД MSSQL - srvtech: Timeout expired.  The timeout period elapsed prior to completion of the operation or the server is not responding.
    Невозможно добавить в очередь текущие данные. Максимальный размер очереди 100 превышен
    #8750
    Mikhail
    Модератор

    Наверное формата форума недостаточно, чтобы решить данную проблему. Вы можете заказать услугу удалённого решения проблемы, которая предполагает подключение к Вашему серверу, детальный анализ и устранение проблемы.

    #8861
    Aidar
    Участник

    переписал процедуру, чтоб быстрее выполнялась и все заработало.

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

    Замечательно. А как в итоге её нужно правильно вызывать для MS SQL?

    #9160
    Aidar
    Участник

    вызываю процедуру
    EXEC [dbo].[tr_Only_Today] 2065, 2500;

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

    Спасибо.

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