Стартовая страница › Форумы › Вопросы без категории › передача данных с Rapid Scada
- В этой теме 43 ответа, 5 участников, последнее обновление 5 лет, 11 месяцев назад сделано Mikhail.
-
АвторСообщения
-
01.03.2018 в 17:09 #8600MikhailМодератор
Также Вы можете вызывать хранимые процедуры из модуля экспорта в БД.
06.03.2018 в 11:08 #8630AidarУчастниксоздал хранимую процедуру
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
экспорт в БД останавливается. что не так?
06.03.2018 в 19:22 #8636MikhailМодераторСмотрите ошибки в журнале.
Вообще вызов процедуры должен быть SQL выражением.
Пример для PostgreSQL:
SELECT test.proc_cur_data(@cnlNum, @val, @stat);06.03.2018 в 19:23 #8637MikhailМодераторНа MSSQL что-то типа:
EXEC dbo.proc_cur_data @cnlNum, @val, @stat;13.03.2018 в 14:26 #8667AidarУчастникс синтаксисом вроде разобрался. В Текущих данных вот это:
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.
экспорт в БД останавливается. что это значит? как исправить?13.03.2018 в 17:14 #8670MikhailМодераторПроблема возникает только при использовании Вашего T-SQL выражения или с простыми запросами, которые были по умолчанию, тоже перестало работать?
14.03.2018 в 12:44 #8673AidarУчастниксо старым кодом все работает как раньше.
То есть, если просто исключить вызов функцииEXEC [dbo].[tr_Only_Today] 2065, @val;
все работает14.03.2018 в 15:50 #8675MikhailМодераторЯ думаю, что наоборот нужно оставить только вызов функции, а остальное убрать, как я писал выше.
21.03.2018 в 06:46 #8745AidarУчастникВ Текущих данных оставил только код:
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 превышен
21.03.2018 в 17:26 #8750MikhailМодераторНаверное формата форума недостаточно, чтобы решить данную проблему. Вы можете заказать услугу удалённого решения проблемы, которая предполагает подключение к Вашему серверу, детальный анализ и устранение проблемы.
05.04.2018 в 06:47 #8861AidarУчастникпереписал процедуру, чтоб быстрее выполнялась и все заработало.
05.04.2018 в 07:53 #8862MikhailМодераторЗамечательно. А как в итоге её нужно правильно вызывать для MS SQL?
08.05.2018 в 09:48 #9160AidarУчастниквызываю процедуру
EXEC [dbo].[tr_Only_Today] 2065, 2500;08.05.2018 в 17:52 #9171MikhailМодераторСпасибо.
-
АвторСообщения
- Вы должны авторизироваться для ответа в этой теме.