24.11.2024
Эффективная Навигация М2М
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Скрипт удаления из бд "дребезга" датчиков подъема кузова
logoffДата: Понедельник, 14.11.2011, 14:48 | Сообщение # 1
Тамбов
Группа: Администраторы
Сообщений: 655
Репутация: 19
Статус: Offline
При установке датчиков поднятия кузовов, не был учтено, что во время движения могут быть ситуации кратковременного ложного срабатывания датчиков, при движении по неровной поверхности. После выяснения данного на приборы отправили команду фильтрации такого дребезга, и встала задача очистить БД от данных срабатываний
для среды: MSDE или выше

Code

USE [BN]
set nocount on
GO
declare   @PeriodFrom smalldatetime,
     @PeriodTo smalldatetime,@GroupID int
        

select @PeriodFrom='01-11-2011 00:00',@PeriodTo='16-11-2011 00:00'
set @GroupID=null
--set @GroupID=104
     Create table #TempData
      (ObjectID int,              -- ID машины
       CarGarNum varchar(256),    -- гаражный номер машины
       ObjectGosNum varchar(20),
       sensor_on datetime, -- начало работы сенсора
       sensor_off datetime, -- завершение работы сенсора
       num int)           -- его номер

     Declare
        @CarID int,    
        @CarGarNum varchar(256),
        @ObjectGosNum varchar(20),
        @TeleTime datetime,
        @Digit_Sens_Num int,
        @Flags int,
        @IsActive bit,
        @num int,
        @time_sensor_on datetime,
        @time_sensor_off datetime
        
     if @GroupID is not null
       Declare CarCursor cursor local fast_forward for
       select a.ObjectID, a.ObjectGarNum, a.ObjectGosNum, c.MarkCarName  from FLEET_Object a
       left join FLEET_ObjectRelation b on a.ObjectID = b.ObjectID
       left join FLEET_MarkCar c on a.MarkCarID = c.MarkCarID
       where b.ObjectGroupeID = @GroupID and a.ObjectActive = 1
       else
       Declare CarCursor cursor local fast_forward for
       select a.ObjectID, a.ObjectGarNum, a.ObjectGosNum from FLEET_Object a
       left join FLEET_MarkCar c on a.MarkCarID = c.MarkCarID
       where ObjectActive = 1
     Open CarCursor
       while 0=0
         begin
           Fetch from CarCursor into @CarID, @CarGarNum, @ObjectGosNum
           if @@Fetch_Status!=0 break
           Set @IsActive = 0

           Declare CoordCurs cursor local fast_forward for    
           select c.tele_time, c.Digit_Sens_Num, c.Flags, d.num    
           from SYS_DEV_ArchiveData c with(index(IX2_SYS_DEV_ArchiveData))
           left join SYS_DEV_Sensor d on c.device_id = d.device_id
           where    
             d.SensorClassificationId = 11
             and c.ObjectID = @CarID
             and c.tele_time between @PeriodFrom and @PeriodTo
           order by c.tele_time
           select @time_sensor_on =null, @time_sensor_off =null
           Set @IsActive = 0
           Open CoordCurs
             while 0=0
               begin
                 Fetch from CoordCurs into @TeleTime, @Digit_Sens_Num, @Flags, @num
                 if @@Fetch_Status!=0 break
                 if dbo.FLEET_IsSensorActive(@num, @Digit_Sens_Num, @Flags) = 1 -- датчик активен
                   begin
                      if @IsActive = 0 -- датчик был не активен
                           begin      
                             Set @IsActive = 1
                             select @time_sensor_on=@TeleTime,@time_sensor_off =null
                           end
                   end else  -- датчик не активен
                   if @IsActive = 1
                     begin
        insert into #TempData (ObjectID,CarGarNum,ObjectGosNum,sensor_on , sensor_off,num)
        values  (@CarID,@CarGarNum, @ObjectGosNum, @time_sensor_on,@TeleTime,@num)
                       Set @IsActive = 0       
                       select @time_sensor_on=null     
                     end       
               end      
           Close CoordCurs
           Deallocate CoordCurs      
         end
     Close CarCursor
     Deallocate CarCursor      
         
     --select *, DATEDIFF (SS,sensor_on,sensor_off)as dd from #TempData    
     --where  DATEDIFF (SS,sensor_on,sensor_off)<=5
     --order by CarGarNum
         
     declare cur cursor for
     select ObjectID,sensor_on,sensor_off,num from #TempData    
     where  DATEDIFF (SS,sensor_on,sensor_off)<=5  -- поиск срабатываний меньше 5 сек
     order by ObjectID
        
     open cur

while 0=0
begin
    Fetch from cur into @CarID, @time_sensor_on,@time_sensor_off,@num
    if @@Fetch_Status!=0 break
    update sys_dev_archivedata
    set  Digit_Sens_Num=Digit_Sens_Num^(Digit_Sens_Num&POWER(2,@num-1))
    --select tele_time ,Digit_Sens_Num,Digit_Sens_Num^(Digit_Sens_Num&POWER(2,@num-1)) from  sys_dev_archivedata
    where ObjectID=@CarID and tele_time between @time_sensor_on and @time_sensor_off
end
     close   cur

deallocate cur
drop table #TempData       


где USE BN - имя базы данных
датчик ищется по типу 11 - Подъем кузова, предполагается, что датчик один

where DATEDIFF (SS,sensor_on,sensor_off)<=5 -- поиск срабатываний меньше 5 сек
порог срабатывания в 5 секунд только данные срабатывания будут заблокированы

set @GroupID=null
--set @GroupID=104
если null - все ТС, указанный ID - только ТС данной группы
 
  • Страница 1 из 1
  • 1
Поиск:

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