Пример #1
0
        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);
        }
Пример #2
0
        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();
         }