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 - только ТС данной группы
|
|
| |