コード例 #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
ファイル: FormArm.cs プロジェクト: TeaMoon/DBTest
        private PakStruct GetPakFromControls()
        {
            PakStruct pakStruct=null;
            Int32 val;
            if (!Int32.TryParse(FieldToAdress.Text,out val))
            {
                return pakStruct;
            }
            var paktype = (byte)((ComboBoxBindElement)FieldPackType.SelectedItem).Value;

            switch ((PakTypeStructure)(paktype))
            {
                case PakTypeStructure.Request:
                    {
                        var mCommand = (byte)((ComboBoxBindElement)FieldCommand.SelectedItem).Value;

                        if (!Int32.TryParse(FieldNum.Text, out val)) return pakStruct;
                        if (((PakCommands)(mCommand))==PakCommands.SendDiff)
                        {
                            if (!(Int32.TryParse(FieldLatitude.Text, out val)
                            && Int32.TryParse(FieldLongitude.Text, out val)
                            )) return pakStruct;

                            pakStruct = new PakStructRequest();
                            ((PakStructRequest)pakStruct).SetField(
                                Convert.ToUInt16(NoZero(FieldToAdress.Text)),
                                paktype,
                                (byte)((ComboBoxBindElement)FieldDesignation.SelectedItem).Value,
                                (byte)((ComboBoxBindElement)FieldCommand.SelectedItem).Value,
                                Convert.ToInt32(NoZero(FieldLatitude.Text)),
                                Convert.ToInt32(NoZero(FieldLongitude.Text)),
                                Convert.ToUInt16(NoZero(FieldNum.Text)));
                            break;
                        }

                        pakStruct = new PakStructRequest();
                        ((PakStructRequest)pakStruct).SetField(
                            Convert.ToUInt16(NoZero(FieldToAdress.Text)),
                            paktype,
                            (byte)((ComboBoxBindElement)FieldDesignation.SelectedItem).Value,
                            (byte)((ComboBoxBindElement)FieldCommand.SelectedItem).Value,
                            0,
                            0,
                            Convert.ToUInt16(NoZero(FieldNum.Text)));
                        break;
                    }
                case PakTypeStructure.Answer0:
                    {
                        if (!(Int32.TryParse(FieldNumReq.Text, out val)
                            && Int32.TryParse(FieldUTC.Text, out val)
                            && Int32.TryParse(FieldStatus.Text, out val)
                            && Int32.TryParse(FieldLatitude.Text, out val)
                            && Int32.TryParse(FieldLongitude.Text, out val)
                            && Int32.TryParse(FieldAltitude.Text, out val)
                            && Int32.TryParse(FieldCourse.Text, out val)
                            && Int32.TryParse(FieldGyro.Text, out val)
                            && Int32.TryParse(FieldSpeed.Text, out val)
                            && Int32.TryParse(FieldNum.Text, out val)
                            && Int32.TryParse(FieldBsNo.Text, out val)
                            )) return pakStruct;

                        pakStruct = new PakStructAnsw0();
                        ((PakStructAnsw0)pakStruct).SetField(
                            Convert.ToUInt16(NoZero(FieldToAdress.Text)),
                            paktype,
                            Convert.ToUInt16(NoZero(FieldNumReq.Text)),
                            Convert.ToUInt32(NoZero(FieldUTC.Text)),
                            Convert.ToInt16(NoZero(FieldStatus.Text)),
                            Convert.ToInt32(NoZero(FieldLatitude.Text)),
                            Convert.ToInt32(NoZero(FieldLongitude.Text)),
                            Convert.ToUInt16(NoZero(FieldAltitude.Text)),
                            Convert.ToInt16(NoZero(FieldCourse.Text)),
                            Convert.ToUInt16(NoZero(FieldGyro.Text)),
                            Convert.ToUInt16(NoZero(FieldSpeed.Text)),
                            Convert.ToUInt16(NoZero(FieldNum.Text)));
                        break;
                    }
                case PakTypeStructure.Answer1:
                    {
                        if (!(Int32.TryParse(FieldNumReq.Text, out val)
                            && Int32.TryParse(FieldUTC.Text, out val)
                            && Int32.TryParse(FieldStatus.Text, out val)
                            && Int32.TryParse(FieldStatusExt.Text, out val)
                            && Int32.TryParse(FieldNum.Text, out val)
                            && Int32.TryParse(FieldBsNo.Text, out val)
                            )) return pakStruct;

                        pakStruct = new PakStructAnsw1();
                        ((PakStructAnsw1)pakStruct).SetField(
                            Convert.ToUInt16(NoZero(FieldToAdress.Text)),
                            paktype,
                            Convert.ToUInt16(NoZero(FieldNumReq.Text)),
                            Convert.ToUInt32(NoZero(FieldUTC.Text)),
                            Convert.ToInt16(NoZero(FieldStatus.Text)),
                            Convert.ToInt16(NoZero(FieldStatusExt.Text)),
                            Convert.ToUInt16(NoZero(FieldNum.Text)));
                        break;
                    }
                case PakTypeStructure.Message0:
                    {
                        if (!(Int32.TryParse(FieldNumReq.Text, out val)
                            && Int32.TryParse(FieldUTC.Text, out val)
                            && Int32.TryParse(FieldStatus.Text, out val)
                            && Int32.TryParse(FieldLatitude.Text, out val)
                            && Int32.TryParse(FieldLongitude.Text, out val)
                            && Int32.TryParse(FieldAltitude.Text, out val)
                            && Int32.TryParse(FieldCourse.Text, out val)
                            && Int32.TryParse(FieldGyro.Text, out val)
                            && Int32.TryParse(FieldSpeed.Text, out val)
                            && Int32.TryParse(FieldNum.Text, out val)
                            && Int32.TryParse(FieldBsNo.Text, out val)
                            )) return pakStruct;

                        pakStruct = new PakStructMessage0();
                        ((PakStructMessage0)pakStruct).SetField(
                            Convert.ToUInt16(NoZero(FieldToAdress.Text)),
                            paktype,
                            Convert.ToUInt16(NoZero(FieldNumReq.Text)),
                            Convert.ToUInt32(NoZero(FieldUTC.Text)),
                            Convert.ToInt16(NoZero(FieldStatus.Text)),
                            Convert.ToInt32(NoZero(FieldLatitude.Text)),
                            Convert.ToInt32(NoZero(FieldLongitude.Text)),
                            Convert.ToUInt16(NoZero(FieldAltitude.Text)),
                            Convert.ToInt16(NoZero(FieldCourse.Text)),
                            Convert.ToUInt16(NoZero(FieldGyro.Text)),
                            Convert.ToUInt16(NoZero(FieldSpeed.Text)),
                            Convert.ToUInt16(NoZero(FieldNum.Text)));
                        break;
                    }
                case PakTypeStructure.Message1:
                    {
                        if (!(Int32.TryParse(FieldNumReq.Text, out val)
                            && Int32.TryParse(FieldUTC.Text, out val)
                            && Int32.TryParse(FieldStatus.Text, out val)
                            && Int32.TryParse(FieldLatitude.Text, out val)
                            && Int32.TryParse(FieldLongitude.Text, out val)
                            && Int32.TryParse(FieldAltitude.Text, out val)
                            && Int32.TryParse(FieldCourse.Text, out val)
                            && Int32.TryParse(FieldGyro.Text, out val)
                            && Int32.TryParse(FieldSpeed.Text, out val)
                            && Int32.TryParse(FieldNum.Text, out val)
                            && Int32.TryParse(FieldBsNo.Text, out val)
                            )) return pakStruct;

                        pakStruct = new PakStructMessage1();
                        ((PakStructMessage1)pakStruct).SetField(
                            Convert.ToUInt16(NoZero(FieldToAdress.Text)),
                            paktype,
                            Convert.ToUInt16(NoZero(FieldNumReq.Text)),
                            Convert.ToUInt32(NoZero(FieldUTC.Text)),
                            Convert.ToInt16(NoZero(FieldStatus.Text)),
                            Convert.ToInt32(NoZero(FieldLatitude.Text)),
                            Convert.ToInt32(NoZero(FieldLongitude.Text)),
                            Convert.ToUInt16(NoZero(FieldAltitude.Text)),
                            Convert.ToInt16(NoZero(FieldCourse.Text)),
                            Convert.ToUInt16(NoZero(FieldGyro.Text)),
                            Convert.ToUInt16(NoZero(FieldSpeed.Text)),
                            Convert.ToUInt16(NoZero(FieldNum.Text)));
                        break;
                    }
                default:
                    {
                        System.Diagnostics.Debug.Fail("No defined structure for this vid pak");
                        break;
                    }
            }
            return pakStruct;
        }