private bool SendCommandToObject(out UInt16 status, UInt16 adr, PakCommands command, TimeSpan waitTime) { status = default(UInt16); var pakReqCoord = new PakStructRequest(); // Пакет запроса координат const ushort pakNumber = UInt16.MaxValue; pakReqCoord.SetRequestCoordinate(adr, pakNumber, command, 0, 0); pakReqCoord.ActualDateTime(); pakReqCoord.WriteCrc16(); var tpReq = new ModulePak(pakReqCoord, false); //_mreWaitData.Reset(); var queue = (CQueue <ModulePak>)_rModule.InQueue; queue.DequeueAll(); _mreHaveData.Reset(); _rModule.OutQueueEnq(tpReq); bool sign = _mreHaveData.WaitOne(TimeSpan.FromSeconds(10)); //bool sign = _mreHaveData.WaitOne(10););) if (!sign) { return(false); //Не дождались ответа от трекера } ModulePak pak; int i; for (i = 0; i < 2; ++i)//for (int i = 0; i < 2; i++) { while (queue.TryDequeue(out pak)) { var ps = pak.Structure as PakStructAnsw1; if (ps != null) { if (ps.Address == adr && ps.IsCrcOk()) { status = ps.Status; return(true); } } } Thread.Sleep(waitTime); // Ждем, что пройдут тесты //Thread.Sleep(TimeSpan.FromSeconds(1)); } Debug.WriteLine("RetryCount " + i); return(false); }
public void SetReqestCoordinate(UInt16 adress, UInt16 num, PakCommands command) { _adressH = BitConverter.GetBytes(adress)[1]; _adressL = BitConverter.GetBytes(adress)[0]; _sym = SYM; _vidPak = Convert.ToByte(PakTypeStructure.Request); _destiny = Convert.ToByte(PakDestiny.Share); _command = Convert.ToByte(command); _num = num; WriteCrc16(); }