22.11.2024
Эффективная Навигация М2М
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Скрипт визуального сравнения разных усреднений
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) (по умолчанию)
результат
Прикрепления: 3571261.png (41.1 Kb)
 
  • Страница 1 из 1
  • 1
Поиск:

LogOff © 2024
Сайт создан в системе uCoz Рейтинг GPS Клуба. GPS навигаторы. GPS мониториг. GPS трекеры. ГЛОНАСС