123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321 |
- using DevExpress.Mvvm.Native;
- using DevExpress.Xpo;
- using DevExpress.XtraEditors;
- using DevExpress.XtraLayout.Utils;
- using Ips.AdcAlgorithm;
- using Ips.DevAlgorithm;
- using Ips.Library.Basic;
- using Ips.Library.DxpLib;
- using Ips.Library.Entity;
- using Ips.Library.LocLib;
- using Ips.Sps.Adcs;
- using Ips.Sps.Ants;
- using Ips.Sps.Cfqs;
- using Ips.Sps.IfeSpects;
- using Ips.Sps.Sats;
- using Ips.Sps.Tsks;
- using System;
- using System.Collections;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.Data;
- using System.Drawing;
- using System.IO;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using System.Windows.Forms;
- namespace Ips.Sps.IfeScans
- {
- public partial class IfeScanForm : XtraForm
- {
- public IfeScanForm()
- {
- InitializeComponent();
- InitCtrls();
- }
- private void InitCtrls()
- {
- //fft12-20
- //平滑次数20-40
- for (int i = 12; i <= 20; i++)
- {
- txtFft.Properties.Items.Add(i.ToString(), i, -1);
- }
- txtFft.EditValue = 17;
- for (int i = 20; i <= 40; i++)
- {
- txtSmooth.Properties.Items.Add(i.ToString(), i, -1);
- }
- txtSmooth.EditValue = 40;
- txtFreq.EditValue = 1000d;
- txtDoorLine.EditValue = 100;
- txtDetectBw.EditValue = 1.5;
- txtDetectSnr.EditValue = 5;
- txtFs.EditValue = 100;
- _sigChartCtrl = new IfeSpectCtrl();
- _sigChartCtrl.Dock = DockStyle.Fill;
- grpSigChart.Controls.Add(_sigChartCtrl);
- txtFsType.Properties.Items.AddEnum<SampleType>();
- txtFsType.SelectedIndex = 0;
- }
- private IfeSpectCtrl _sigChartCtrl;
- private TskAdCard _adCard;
- private CancellationTokenSource _cts;
- private List<ScanFreqResut> _scanFreqList;
- private IfeQTSpect.SelectIndexChanged chartSelectChanged;
- private ScanFreqResut[] _selectFreqs;
- public ScanFreqResut[] SelectedFreq => _selectFreqs;
- public int? SatId => txtSat.EditValue == null ? null : (int)txtSat.EditValue;
- public void BindSatList(object satList, int? defaultSatId)
- {
- bsSatList.DataSource = satList;
- if (defaultSatId != 0)
- {
- txtSat.EditValue = defaultSatId;
- }
- }
- public void SetAdCardInfo(TskAdCard adCard)
- {
- _adCard = adCard;
- }
- private void txtAutoDoor_CheckedChanged(object sender, EventArgs e)
- {
- lciDoorLine.Visibility = txtAutoDoor.Checked ? LayoutVisibility.Never : LayoutVisibility.Always;
- }
- private void txtAdMode_SelectedIndexChanged(object sender, EventArgs e)
- {
- int admode = (int)txtAdMode.EditValue;
- lciMutil.Visibility = admode == 0 ? LayoutVisibility.Never : LayoutVisibility.Always;
- }
- private void txtSigFile_ButtonClick(object sender, DevExpress.XtraEditors.Controls.ButtonPressedEventArgs e)
- {
- txtSigFile.Text = ToolDialog.OpenFile("", "选择信号文件");
- }
- private void btnAd_Click(object sender, EventArgs e)
- {
- if (_adCard == null)
- {
- MsgHelper.ShowError("未设置采集卡!");
- return;
- }
- if (btnAd.Text == "停止")
- {
- _cts.Cancel();
- }
- else
- {
- btnAd.Text = "停止";
- if (txtSat.EditValue == null)
- {
- MsgHelper.ShowError("请选择卫星!");
- return;
- }
- if (!double.TryParse(txtFreq.Text, out double sigFreq) && sigFreq >= 950 && sigFreq < 2150)
- {
- MsgHelper.ShowError("请输入正确的信号频点,范围【950MHz-2150MHz】");
- return;
- }
- int adMode = (int)txtAdMode.EditValue;
- int mutil = adMode == 0 ? 1 : (int)txtMutil.EditValue;
- int satId = (int)txtSat.EditValue;
- var adch = _adCard.Channels.FirstOrDefault(m => m.GetSatIds().Contains(satId));
- if (adch == null)
- {
- MsgHelper.ShowError("采集卡未指定采集该卫星!");
- return;
- }
- var sat = txtSat.GetSelectedDataRow() as Sat;
- if (sat == null)
- {
- MsgHelper.ShowError("未找到卫星信息!");
- return;
- }
- StartAd(_adCard, adch, sat, sigFreq, mutil).ContinueWith(task =>
- {
- try
- {
- txtSigFile.Text = task.Result;
- }
- catch (Exception ex)
- {
- ex.HandleCancelEx(m =>
- {
- MsgHelper.ShowError("采集文件失败,错误消息:" + m.Message);
- });
- }
- finally
- {
- txtFs.EditValue = _adCard.ClockFreq / mutil;
- txtFsType.EditValue = adMode == 0 ? SampleType.Scy : SampleType.Fcy;
- btnAd.Text = "采集";
- }
- }, TaskContinuationOptions.ExecuteSynchronously);
- }
- }
- private async Task<string> StartAd(TskAdCard adCard, TskAdChannel adch, Sat sat, double sigfreq, int mutil)
- {
- txtSigFile.Text = "";
- _cts = new CancellationTokenSource();
- var option = new AdcOptions()
- {
- CardType = adCard.CardType,
- ClockType = adCard.ClockerType,
- TriggerMode = adCard.TriggerMode,
- DdcFreq = adCard.DdcFreq.E6(),
- ClockFreq = adCard.ClockFreq.E6l(),
- Mutil = mutil,
- TimeLen = 1,
- ChCount = adch.ChNum,
- StorePath = adCard.StorePath
- };
- var freqInfo = SigCalcUtil.GetFreqPointBySigFreq(sigfreq.E6l(), sat.SatType, sat.SatTurn.E6l(), adch.FrqTurn.E6l());
- Session session = new Session();
- var ant = session.GetObjectByKey<Ant>(adch.AntId);
- option.SetChannel(ant?.Code ?? string.Empty, adCard.Code, adch.ChNum, freqInfo.DownFreq)
- .AddSignal(freqInfo.DownFreq, (adCard.ClockFreq / mutil).E6(), sat.SatNum.ToString(), freqInfo.UpFreq);
- #warning wyq注释变频器
- //if (!adch.FixCenter && adch.FrqAddr.IsNotNullOrWhitespace())
- //{
- // var success = false;
- // string errMsg;
- // try
- // {
- // #region 原注释
- // //var addrInfo = CfqAddrInfo.Parse(adch.FrqAddr);
- // //double[] freqs = new double[addrInfo.ChNum];
- // //freqs[addrInfo.ChNum - 1] = freqInfo.DownFreq.E6m();
- // //success = CfqUtil.SetFreq(addrInfo.Addr, freqs, out errMsg);
- // #endregion
- // success = CfqManager.Default.SetCfqList(new SetCfqItem[] { new SetCfqItem(adch.FrqAddr, freqInfo.DownFreq) }, out errMsg);
- // }
- // catch (Exception ex)
- // {
- // success = false;
- // errMsg = ex.Message;
- // }
- // if (!success)
- // {
- // if (!MsgHelper.ShowConfirm($"设置变频器失败,{errMsg},是否继续?")) return null;
- // }
- //}
- option.StartTime = DateTime.Now.AddSeconds(10).ClearMillisecond();
- var resExe = await new AdcController().StartAdc(option, null, _cts.Token);
- if (resExe.ExitCode > 0)
- {
- MsgHelper.ShowError("执行采集失败,错误消息:" + resExe.ExitMsg);
- return null;
- }
- var adFile = resExe.Result.FileList.FirstOrDefault(m => m.ChNum == adch.ChNum);
- if (adFile == null) return null;
- string fileName = adFile.GetLocalFullName(adCard.StorePath);
- if (!File.Exists(fileName))
- {
- MsgHelper.ShowError("采集文件不存在!");
- return null;
- }
- return fileName;
- }
- private void txtSigFile_EditValueChanged(object sender, EventArgs e)
- {
- btnScan.Enabled = txtSigFile.Text.IsNotNullOrWhitespace();
- }
- private void btnScan_Click(object sender, EventArgs e)
- {
- if (txtSigFile.Text.IsNullOrWhitespace() || !File.Exists(txtSigFile.Text))
- {
- MsgHelper.ShowError("信号文件不存在!");
- return;
- }
- var autoDoor = txtAutoDoor.Checked;
- double doorLine = 0;
- if (!autoDoor && !double.TryParse(txtDoorLine.Text, out doorLine))
- {
- MsgHelper.ShowError("请输入底噪门限");
- return;
- }
- if (!double.TryParse(txtDetectBw.Text, out double _detectbw))
- {
- MsgHelper.ShowError("请输入正确的检测带宽!");
- return;
- }
- if (!int.TryParse(txtDetectSnr.Text, out int _snr))
- {
- MsgHelper.ShowError("请输入正确的信噪比!");
- return;
- }
- if (!double.TryParse(txtFs.Text, out double fs))
- {
- MsgHelper.ShowError("请输入正确的采样率!");
- return;
- }
- if (!double.TryParse(txtFreq.Text, out double sigFreq))
- {
- MsgHelper.ShowError("请输入正确的信号频点!");
- return;
- }
- var fsType = (SampleType)txtFsType.EditValue;
- var fft = (int)txtFft.EditValue;
- var smooth = (int)txtSmooth.EditValue;
- double[] res = _sigChartCtrl.SetSource(txtSigFile.Text, fs.E6(), fsType == SampleType.Fcy, (ulong)sigFreq.E6l(), fft, smooth, autoDoor, doorLine, _detectbw.E6(), _snr);
- _scanFreqList = ScanFreqResut.Parse(res);
- bsScanFreq.DataSource = _scanFreqList;
- grdSigList.RefreshDataSource();
- }
- private void IfeScanForm_Load(object sender, EventArgs e)
- {
- chartSelectChanged = this.ChartSelectChanged;
- _sigChartCtrl.RegisterSelectIndexChanged(chartSelectChanged);
- btnScan.Enabled = txtSigFile.Text.IsNotNullOrWhitespace();
- }
- private void ChartSelectChanged(int index)
- {
- this.Invoke(() =>
- {
- gvSigList.FocusedRowHandle = gvSigList.GetRowHandle(index);
- });
- }
- private void gvSigList_RowClick(object sender, DevExpress.XtraGrid.Views.Grid.RowClickEventArgs e)
- {
- var scanFreq = gvSigList.GetRow(e.RowHandle) as ScanFreqResut;
- if (scanFreq != null)
- {
- _sigChartCtrl.HitFrequence(scanFreq.SigFreq.E6l());
- }
- }
- private void btnOk_Click(object sender, EventArgs e)
- {
- _selectFreqs = gvSigList.GetSelectRow<ScanFreqResut>();
- if (_selectFreqs.Length == 0)
- {
- MsgHelper.ShowWarn("请至少选中一个频点!");
- return;
- }
- this.DialogResult = DialogResult.OK;
- }
- private void btnCancel_Click(object sender, EventArgs e)
- {
- this.DialogResult = DialogResult.Cancel;
- }
- }
- }
|