Ejemplo n.º 1
0
        /// <summary>
        ///根据发射机文件和setup文件得到UAN文件的路径
        /// </summary>
        static string GetUanPath(TxObject tx, SetupObject setup)
        {
            //用配置文件读取程序安装位置
            List <AntennaStp> antennas = setup.antenna.allAntennas;
            int i;

            for (i = 0; i < antennas.Count; i++)
            {
                if (tx.at.antennaNum == antennas[i].antenna)
                {
                    break;
                }
            }
            //DLL路径加上相对路径
            string path;

            if (antennas[i].uan_path == null)
            {
                path = GetDllPath() + "\\" + antennas[i].type + ".uan";
            }
            else
            {
                path = ".\\project\\" + setup.name + "\\" + antennas[i].uan_path;
            }
            //
            return(path);
        }
Ejemplo n.º 2
0
        /// <summary>
        ///从setup文件中获取发射机的载波频率
        /// </summary>
        private static double GetTxCarrierFrequence(TxObject tx, SetupObject setup)
        {
            List <WaveformStp> waveform = setup.waveform.allWaveforms;
            List <AntennaStp>  antenna  = setup.antenna.allAntennas;

            if (tx.at.waveformNum == -1)
            {
                for (int j = 0; j < antenna.Count; j++)
                {
                    if (tx.at.antennaNum == antenna[j].antenna)
                    {
                        tx.at.waveformNum = antenna[j].waveform;
                    }
                }
            }
            int i;

            for (i = 0; i < waveform.Count; i++)
            {
                if (tx.at.waveformNum == waveform[i].waveform)
                {
                    break;
                }
            }
            return(waveform[i].CarrierFrequency);
        }
Ejemplo n.º 3
0
        /// <summary>
        ///从setup中获取发射机波形信息
        /// </summary>
        private static WaveformStp GetTxWaveForm(TxObject tx, SetupObject setup)
        {
            WaveformStp        txwaveform = new WaveformStp();
            List <WaveformStp> waveform   = setup.waveform.allWaveforms;
            List <AntennaStp>  antenna    = setup.antenna.allAntennas;

            if (tx.at.waveformNum == -1)
            {
                for (int j = 0; j < antenna.Count; j++)
                {
                    if (tx.at.antennaNum == antenna[j].antenna)
                    {
                        tx.at.waveformNum = antenna[j].waveform;
                    }
                }
            }
            int i;

            for (i = 0; i < waveform.Count; i++)
            {
                if (tx.at.waveformNum == waveform[i].waveform)
                {
                    txwaveform = waveform[i];
                }
            }
            return(txwaveform);
        }
Ejemplo n.º 4
0
 public void Add(TxObject toTransmit)
 {
     if (ValidateAdd(toTransmit))
     {
         _transmiterQueue.Enqueue(toTransmit);
     }
 }
Ejemplo n.º 5
0
        public Transmiter(IEnvironment env, ILog log, IEventAggregator aggregator, ILog consoleLog)
        {
            _env             = env;
            _log             = log;
            _consoleLog      = consoleLog;
            _aggregator      = aggregator;
            _transmiterQueue = new ConcurrentQueue <TxObject>();
            _txThread        = new Thread(new ThreadStart(Process));

            _aggregator.GetEvent <RadioTxEvent>().Subscribe((Action <RxObject>)((e) =>
            {
                var toTx = new TxObject()
                {
                    Enabled  = true,
                    Buffer   = e.Buffer,
                    Date     = DateTime.Now,
                    Id       = Guid.NewGuid(),
                    Ip       = e.Ip,
                    Port     = e.Port,
                    Resend   = true,
                    Disposed = false,
                    Retries  = 0
                };

                Add(toTx);
            }));
        }
Ejemplo n.º 6
0
        private string GetHashForValidator(TxObject tx)
        {
            var hash = new StringBuilder();

            hash.Append(tx.Ip).GetHashCode();
            hash.Append(tx.Port).GetHashCode();
            hash.Append(tx.Buffer[1]).GetHashCode();
            hash.Append(tx.Buffer[2]).GetHashCode();

            return(hash.ToString());
        }
Ejemplo n.º 7
0
        /// <summary>
        ///从setup中获取发射频率带宽
        /// </summary>
        private static double GetWidth(TxObject tx, SetupObject setup)
        {
            double             temp;
            List <WaveformStp> waveform = setup.waveform.allWaveforms;
            int i;

            for (i = 0; i < waveform.Count; i++)
            {
                if (tx.at.waveformNum == waveform[i].waveform)
                {
                    break;
                }
            }
            switch (waveform[i].type)
            {
            case "Sinusoid":
                temp = waveform[i].bandwidth;
                break;

            case "RaisedCosine":
                temp = 10000000 * (1 + waveform[i].Rolloff) / (waveform[i].PulseWidth / 0.0000001);
                break;

            case "Chirp":
                temp = waveform[i].StopFrequency - waveform[i].StartFrequency;
                break;

            case "Blackman":
                temp = 60000000 / (waveform[i].PulseWidth / 0.0000001);
                break;

            case "Gaussian":
                temp = 23190000 / (waveform[i].PulseWidth / 0.0000001);
                break;

            case "GaussianDerivative":
                temp = 16480000 / (waveform[i].PulseWidth / 0.0000001);
                break;

            case "Hamming":
                temp = 40000000 / (waveform[i].PulseWidth / 0.0000001);
                break;

            case "RootRaisedCosine":
                temp = 10000000 * (1 + waveform[i].Rolloff) / (waveform[i].PulseWidth / 0.0000001);
                break;

            default:
                temp = 0;
                break;
            }
            return(temp / 1000000);
        }
Ejemplo n.º 8
0
        /// <summary>
        /// 读取UAN(王楠)
        /// </summary>
        /// <param name="tx">发射</param>
        /// <param name="setup">设置</param>
        /// <returns>UAN字符串</returns>
        public static string GetUan(TxObject tx, SetupObject setup)
        {
            DateTime     startime = DateTime.Now;//记录开始时间
            StreamReader sr       = new StreamReader(GetUanPath(tx, setup));

            //string s = sr.ReadToEnd();
            if (string.IsNullOrEmpty(s1))                    //判断是否读到结尾
            {
                s1 = sr.ReadToEnd();                         //将读取的流转化为string类型
                DateTime finishtime = DateTime.Now;          //记录结束时间
                TimeSpan span       = finishtime - startime; //读取所花时间
                LogFileManager.ObjLog.debug("第" + (++indexUanRead) + "次读取uan文件到内存中耗时:" + span);
            }
            sr.Close();//读取关闭
            return(s1);
        }
Ejemplo n.º 9
0
        public void Add(string ip, int port, byte[] buffer, bool retry)
        {
            var tx = new TxObject()
            {
                Enabled  = true,
                Buffer   = buffer,
                Date     = DateTime.Now,
                Disposed = false,
                Ip       = ip,
                Port     = port,
                Resend   = retry,
                Retries  = 0
            };

            if (ValidateAdd(tx))
            {
                _transmiterQueue.Enqueue(tx);
            }
        }
Ejemplo n.º 10
0
        private bool ValidateAdd(TxObject txObject)
        {
            bool valid  = true;
            var  txHash = GetHashForValidator(txObject);

            for (int i = 0; i < _transmiterQueue.Count; i++)
            {
                var qTx = _transmiterQueue.ElementAt(i);

                if (!qTx.Disposed)
                {
                    if (GetHashForValidator(qTx) == txHash)
                    {
                        valid = false;
                        break;
                    }
                }
            }

            return(valid);
        }
Ejemplo n.º 11
0
        private void Send(TxObject tx)
        {
            try
            {
                IPEndPoint endPoint = null;

                using (var client = UdpFactory.CreateUdpRxClient(tx.Port, ref endPoint))
                {
                    endPoint = new IPEndPoint(IPAddress.Parse(tx.Ip), tx.Port);

                    client.Send(tx.Buffer, tx.Buffer.Length, endPoint);

                    Thread.Sleep(tx.Buffer.Length * 50);

                    _consoleLog.Warn($"TX | IP: {tx.Ip} | {tx.Date.ToString()} | port: {tx.Port} | data: {BitConverter.ToString(tx.Buffer)}");
                }
            }
            catch (Exception ex)
            {
                _log.Error(ex);
            }
        }
Ejemplo n.º 12
0
        //path为Tx文件路径,setup为setup文件路径,terpath为ter文件路径
        #region
        private static List <TxObject> TxReader(string path)
        {
            List <TxObject> tx = new List <TxObject>();
            FileInfo        fi = new FileInfo(path);

            if (!fi.Exists)
            {
                return(tx);

                throw new Exception("输入路径不存在");
            }

            string[] paths = path.Split(new char[] { '.' });
            if (paths.Length < 1 || !paths[paths.Length - 1].Equals("tx"))
            {
                return(tx);

                throw new Exception("这不是一个rx文件");
            }

            StreamReader sr = new StreamReader(path, System.Text.Encoding.UTF8);
            string       s  = sr.ReadToEnd();

            sr.Close();
            string[] strseperator = new string[] { "begin_<points>", "begin_<grid>" };
            string[] result       = null;
            result = s.Split(strseperator, StringSplitOptions.RemoveEmptyEntries);

            for (int i = 0; i < result.Length; i++)
            {
                result[i].TrimStart(' ');
                TxObject temp = TxObject.txObjFac(result[i]);
                tx.Add(temp);
            }
            return(tx);
        }
Ejemplo n.º 13
0
        private void Process()
        {
            while (true)
            {
                if (_isAlive)
                {
                    TxObject toTx = null;

                    if (_transmiterQueue.TryDequeue(out toTx))
                    {
                        if (!toTx.Disposed)
                        {
                            if (toTx.Enabled)
                            {
                                Send(toTx);
                                toTx.Enabled = false;

                                if (toTx.Resend)
                                {
                                    toTx.Retries++;
                                }
                            }

                            if (toTx.Resend)
                            {
                                _transmiterQueue.Enqueue(toTx);
                            }
                        }
                    }
                }
                else
                {
                    break;
                }
            }
        }