logoff | Дата: Четверг, 12.07.2012, 14:29 | Сообщение # 1 |
Тамбов
Группа: Администраторы
Сообщений: 655
Репутация: 19
Статус: Offline
| Скрипт заполняет данные о средней кривой в данные от датчика, для возможности просмотра оного на графике с основным датчиком Для версии MSDE или старше Проверен на 1.17.2.8 Code use bn go set nocount on set dateformat dmy declare @SplineStep int,@StartDateTime datetime, @EndDateTime datetime,@FuelSensorID int,@FuelSensorIDAvg3 int,@FuelSensorIDAvg7 int, @code varchar(16), @ObjectID int set @code='00164021' -- номер прибора select @ObjectID=(select ObjectID from dbo.FLEET_Object as O inner join dbo.SYS_DEV_Device as D on D.id=o.device_id where d.code=@code and d.deviceactive=1 and o.objectactive=1) select @StartDateTime ='01/06/2012', @EndDateTime ='10/07/2012' -- период чтения/заполнения данных select @FuelSensorID=(SELECT TOP 1 s.[id] FROM [BN].[dbo].[SYS_DEV_Sensor] as S inner join bn.dbo.SYS_DEV_Device as D on d.id=s.device_id where num=10 and [sensor_type_id]=0 and s.sensoractive=1 and d.deviceactive=1 and d.code=@code) if (@FuelSensorID is null) or (@ObjectID is null) begin print 'не найдены сенсор, или прибор, или машина' return end
Create table #TempData2 ( tele_time datetime, Value float, AvgValue1 float, NormAvgValue1 float, AvgValue2 float, NormAvgValue2 float) Create clustered index IXTemp2 on #TempData2(tele_time) Create table #TempData --данные топливного датчика из SYS_DEV_Sensor нормализованные тарировкой ( tele_time datetime, Value float, Variation float, AvgValue float, ReturnValue float, NormAvgValue float --нормализованное среднее значение с учетом заправок и сливов ) Create clustered index IXTemp on #TempData(tele_time) set @SplineStep=3 -- сначала основной алгоритм
Exec dbo.FLEET_GetAnalogSensorSpline @FuelSensorID, @StartDateTime, @EndDateTime, @SplineStep, 1
Update TD set AvgValue= ( select avg(Value) from #TempData with(index(IXTemp), nolock) where tele_time between dateadd(mi, -@SplineStep, TD.tele_time) and dateadd(mi, @SplineStep, TD.tele_time) ) from #TempData TD Update #TempData set NormAvgValue=AvgValue--заполняем нормализованные значение срединими, обновим их при усечении заправок/сливов
insert into #TempData2 (tele_time , Value , AvgValue1 , NormAvgValue1 ) select tele_time , Value , AvgValue , NormAvgValue from #TempData order by tele_time set @SplineStep=7 -- изменили среднее Update TD set AvgValue= ( select avg(Value) from #TempData with(index(IXTemp), nolock) where tele_time between dateadd(mi, -@SplineStep, TD.tele_time) and dateadd(mi, @SplineStep, TD.tele_time) ) from #TempData TD Update #TempData set NormAvgValue=AvgValue--заполняем нормализованные значение срединими, обновим их при усечении заправок/сливов update TD2 set AvgValue2=AvgValue , NormAvgValue2 =NormAvgValue from #TempData2 as TD2 inner join #TempData as TD on TD.tele_time=TD2.tele_time --select * from #TempData2 order by tele_time drop table #TempData
-- заполнение занчений сенсоров print @ObjectID delete from dbo.FLEET_AnalogData where sens_num in (11,12) and ObjectID=@ObjectID insert into dbo.FLEET_AnalogData select dateadd(hh,0,tele_time), 0,0,AvgValue1,0,0,0,11,@ObjectID,AvgValue1 from #TempData2 insert into dbo.FLEET_AnalogData select dateadd(hh,0,tele_time), 0,0,AvgValue2,0,0,0,12,@ObjectID,AvgValue2 from #TempData2
drop table #TempData2 Данные читаются для 10-го датчика, а выводятся в датчик 11,12 11 = окно усреднения 3 минуты (период 6) 12 = окно 7 минут (период 17) (по умолчанию) результат
|
|
| |