using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; using FlyADBase; using FObjBase; using System.Net; using System.ComponentModel; using Misc; using System.Threading; using System.Windows.Threading; using System.Windows.Forms.DataVisualization.Charting; namespace Flyad7_WPF { /// /// MainWindow.xaml 的交互逻辑 /// public partial class MainWindow : Window { FlyAD7 flyad; DebugAppParam param; AutoForwBackw autofb; FlyADClientUI flyad_clientui; AutoSync mAutoSync; public MainWindow() { InitializeComponent(); InitializeComponent2(); InitializeComponent3(); InitializeComponent4(); flyad = new FlyAD7(); param = new DebugAppParam(); param.Load(); autofb = new AutoForwBackw(flyad); flyad_clientui = new FlyADClientUI(flyad); mAutoSync = new AutoSync(); mAutoSync.Init(flyad); Misc.BindingOperations.SetBinding(param, "HasCRC", flyad, "HasCRC"); Misc.BindingOperations.SetBinding(param, "FB_Pos1", autofb, "FB_Pos1", Misc.BindingOperations.BindingMode.TwoWay); Misc.BindingOperations.SetBinding(param, "FB_Pos2", autofb, "FB_Pos2", Misc.BindingOperations.BindingMode.TwoWay); this.DataContext = flyad; this.grid_param.DataContext = param; this.groupBox_fb.DataContext = autofb; this.groupBox_adpos.DataContext = flyad_clientui; flyad.GridEvent += new MiniGridEventHandler(flyad_GridEvent); flyad.TimeGridEvent += new TimeGridEventHandler(flyad_TimeGridEvent); flyad.GridAdvEvent += Flyad_GridAdvEvent; flyad.PropertyChanged += (s, e) => { if (e.PropertyName == "OStatus") { Button[] bit = new Button[4] { button_bit0, button_bit1, button_bit2, button_bit3 }; for (int i = 0; i < bit.Length; i++) { if (Misc.MyBase.CHECKBIT(flyad.OStatus, i)) { bit[i].Content = "1"; } else { bit[i].Content = "0"; } } } }; param.PropertyChanged += (s, e) => { param.Save(); }; FObjBase.PollModule.Current.Start(); //Thread t = new Thread(() => //{ // while (true) // { // FObjBase.PollModule.Current.OnPoll(); // Thread.Sleep(10); // } //}); //t.IsBackground = true; //t.Start(); } private void Flyad_GridAdvEvent(object sender, GridAdvEventArgs e) { if (param.HasGridAdv) { Series series_pos = chart3.Series[0]; Series series_ad = chart3.Series[1]; series_pos.Points.Clear(); series_ad.Points.Clear(); for (int i = 0; i < e.dt_data.Count(); i++) { int pos = e.dt_data[i].pos; int ad = e.dt_data[i].ad; DateTime dt = e.dt_data[i].dt; series_pos.Points.AddY(pos); DataPoint p = series_pos.Points.Last(); p.AxisLabel = dt.ToString("ss.ff"); series_ad.Points.AddY(ad); p = series_ad.Points.Last(); p.AxisLabel = dt.ToString("ss.ff"); } chart3.ChartAreas[0].AxisX.Minimum = 0; chart3.ChartAreas[0].AxisX.Maximum = e.dt_data.Count(); if (!param.HasGrid) { GridAdvUnit[] pos_data = FlyAD7.TimeUnit2PosUnit(e.direction, e.pos_start, e.pos_len, e.dt_data); run_gridmarker.Text = e.marker.ToString(); System.Windows.Forms.DataVisualization.Charting.Series series_forw = chart1.Series["Series 1"]; System.Windows.Forms.DataVisualization.Charting.Series series_backw = chart1.Series["Series 2"]; System.Windows.Forms.DataVisualization.Charting.Series series; if (e.direction == DIRECTION.FORWARD) { series = series_forw; } else { series = series_backw; } series.Points.Clear(); for (int i = 0; i < pos_data.Length; i++) { if (pos_data[i] != null) { int pos = pos_data[i].pos; int ad = pos_data[i].ad; series.Points.AddXY(pos, ad); if (ad == Misc.MyBase.NULL_VALUE) series.Points.Last().IsEmpty = true; } } chart1.ChartAreas[0].AxisX.Minimum = 0; chart1.ChartAreas[0].AxisX.Maximum = flyad.PosLen; } } } /// /// grid图 /// void InitializeComponent2() { System.Windows.Forms.DataVisualization.Charting.ChartArea chartArea1 = new System.Windows.Forms.DataVisualization.Charting.ChartArea(); System.Windows.Forms.DataVisualization.Charting.Legend legend1 = new System.Windows.Forms.DataVisualization.Charting.Legend(); System.Windows.Forms.DataVisualization.Charting.Series series1 = new System.Windows.Forms.DataVisualization.Charting.Series(); System.Windows.Forms.DataVisualization.Charting.Series series2 = new System.Windows.Forms.DataVisualization.Charting.Series(); // // chart1 // chartArea1.AxisX.LabelStyle.Font = new System.Drawing.Font("Trebuchet MS", 8.25F, System.Drawing.FontStyle.Bold); chartArea1.AxisX.LineColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64))))); chartArea1.AxisX.MajorGrid.LineColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64))))); chartArea1.AxisY.LabelStyle.Font = new System.Drawing.Font("Trebuchet MS", 8.25F, System.Drawing.FontStyle.Bold); chartArea1.AxisY.LineColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64))))); chartArea1.AxisY.MajorGrid.LineColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64))))); chartArea1.BackColor = System.Drawing.Color.OldLace; //chartArea1.BackGradientStyle = System.Windows.Forms.DataVisualization.Charting.GradientStyle.TopBottom; //chartArea1.BackSecondaryColor = System.Drawing.Color.White; chartArea1.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64))))); chartArea1.BorderDashStyle = System.Windows.Forms.DataVisualization.Charting.ChartDashStyle.Solid; chartArea1.Name = "Default"; chartArea1.ShadowColor = System.Drawing.Color.Transparent; //对数坐标 //chartArea1.AxisY.IsLogarithmic = true; //chartArea1.AxisY.LogarithmBase = Math.E; this.chart1.ChartAreas.Add(chartArea1); legend1.BackColor = System.Drawing.Color.Transparent; legend1.Enabled = true; legend1.Font = new System.Drawing.Font("Trebuchet MS", 8.25F, System.Drawing.FontStyle.Bold); legend1.Alignment = System.Drawing.StringAlignment.Near; legend1.Docking = System.Windows.Forms.DataVisualization.Charting.Docking.Right; legend1.IsDockedInsideChartArea = true; legend1.DockedToChartArea = chartArea1.Name; //legend1.IsTextAutoFit = false; legend1.Name = "Default"; chart1.Legends.Add(legend1); series1.Name = "Series 1"; series1.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(180)))), ((int)(((byte)(26)))), ((int)(((byte)(59)))), ((int)(((byte)(105))))); series1.BorderWidth = 3; series1.ChartArea = chartArea1.Name; series1.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Line; series1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(220)))), ((int)(((byte)(65)))), ((int)(((byte)(140)))), ((int)(((byte)(240))))); series1.Legend = legend1.Name; series1.LegendText = "正向"; series1.ShadowColor = System.Drawing.Color.Black; series1.ShadowOffset = 2; series1.XValueType = System.Windows.Forms.DataVisualization.Charting.ChartValueType.Int32; series1.YValueType = System.Windows.Forms.DataVisualization.Charting.ChartValueType.Int32; chart1.Series.Add(series1); series2.Name = "Series 2"; series2.BorderColor = System.Drawing.Color.Pink; series2.BorderWidth = 3; series2.ChartArea = chartArea1.Name; series2.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Line; series2.Color = System.Drawing.Color.Red; series2.Legend = legend1.Name; series2.LegendText = "反向"; series2.ShadowColor = System.Drawing.Color.Black; series2.ShadowOffset = 2; series2.XValueType = System.Windows.Forms.DataVisualization.Charting.ChartValueType.Int32; series2.YValueType = System.Windows.Forms.DataVisualization.Charting.ChartValueType.Int32; chart1.Series.Add(series2); //this.chart1.Location = new System.Drawing.Point(16, 32); chart1.Name = "chart1"; chart1.BackColor = System.Drawing.Color.Transparent; } void InitializeComponent3() { System.Windows.Forms.DataVisualization.Charting.ChartArea chartArea1 = new System.Windows.Forms.DataVisualization.Charting.ChartArea(); System.Windows.Forms.DataVisualization.Charting.Legend legend1 = new System.Windows.Forms.DataVisualization.Charting.Legend(); System.Windows.Forms.DataVisualization.Charting.Series series1 = new System.Windows.Forms.DataVisualization.Charting.Series(); // // chart1 // chartArea1.AxisX.LabelStyle.Font = new System.Drawing.Font("Trebuchet MS", 8.25F, System.Drawing.FontStyle.Bold); chartArea1.AxisX.LineColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64))))); chartArea1.AxisX.MajorGrid.LineColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64))))); chartArea1.AxisY.LabelStyle.Font = new System.Drawing.Font("Trebuchet MS", 8.25F, System.Drawing.FontStyle.Bold); chartArea1.AxisY.LineColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64))))); chartArea1.AxisY.MajorGrid.LineColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64))))); chartArea1.BackColor = System.Drawing.Color.OldLace; //chartArea1.BackGradientStyle = System.Windows.Forms.DataVisualization.Charting.GradientStyle.TopBottom; //chartArea1.BackSecondaryColor = System.Drawing.Color.White; chartArea1.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64))))); chartArea1.BorderDashStyle = System.Windows.Forms.DataVisualization.Charting.ChartDashStyle.Solid; chartArea1.Name = "Default"; chartArea1.ShadowColor = System.Drawing.Color.Transparent; //对数坐标 //chartArea1.AxisY.IsLogarithmic = true; //chartArea1.AxisY.LogarithmBase = Math.E; this.chart2.ChartAreas.Add(chartArea1); legend1.BackColor = System.Drawing.Color.Transparent; legend1.Enabled = false; legend1.Font = new System.Drawing.Font("Trebuchet MS", 8.25F, System.Drawing.FontStyle.Bold); legend1.IsTextAutoFit = false; legend1.Name = "Default"; this.chart2.Legends.Add(legend1); //this.chart2.Location = new System.Drawing.Point(16, 32); this.chart2.Name = "chart2"; series1.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(180)))), ((int)(((byte)(26)))), ((int)(((byte)(59)))), ((int)(((byte)(105))))); series1.BorderWidth = 3; series1.ChartArea = "Default"; series1.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Line; series1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(220)))), ((int)(((byte)(65)))), ((int)(((byte)(140)))), ((int)(((byte)(240))))); series1.Legend = "Default"; //series1.MarkerSize = 8; //series1.MarkerStyle = System.Windows.Forms.DataVisualization.Charting.MarkerStyle.Circle; series1.Name = "Series 1"; series1.ShadowColor = System.Drawing.Color.Black; series1.ShadowOffset = 2; series1.XValueType = System.Windows.Forms.DataVisualization.Charting.ChartValueType.Int32; series1.YValueType = System.Windows.Forms.DataVisualization.Charting.ChartValueType.Int32; this.chart2.Series.Add(series1); this.chart2.BackColor = System.Drawing.Color.Transparent; } void InitializeComponent4() { System.Windows.Forms.DataVisualization.Charting.ChartArea chartArea1 = new System.Windows.Forms.DataVisualization.Charting.ChartArea(); System.Windows.Forms.DataVisualization.Charting.Legend legend1 = new System.Windows.Forms.DataVisualization.Charting.Legend(); System.Windows.Forms.DataVisualization.Charting.Series series1 = new System.Windows.Forms.DataVisualization.Charting.Series(); System.Windows.Forms.DataVisualization.Charting.Series series2 = new System.Windows.Forms.DataVisualization.Charting.Series(); // // chart1 // chartArea1.Name = "chartArea1"; chartArea1.AxisX.LabelStyle.Font = new System.Drawing.Font("Trebuchet MS", 8.25F, System.Drawing.FontStyle.Bold); chartArea1.AxisX.LineColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64))))); chartArea1.AxisX.MajorGrid.LineColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64))))); chartArea1.AxisX.IsLabelAutoFit = true; chartArea1.AxisX.LabelAutoFitStyle = LabelAutoFitStyles.DecreaseFont; chartArea1.AxisX.IntervalAutoMode = System.Windows.Forms.DataVisualization.Charting.IntervalAutoMode.VariableCount; chartArea1.AxisY.LabelStyle.Font = new System.Drawing.Font("Trebuchet MS", 8.25F, System.Drawing.FontStyle.Bold); chartArea1.AxisY.LineColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64))))); chartArea1.AxisY.MajorGrid.LineColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64))))); chartArea1.AxisY2.LabelStyle.Font = new System.Drawing.Font("Trebuchet MS", 8.25F, System.Drawing.FontStyle.Bold); chartArea1.AxisY2.LineColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64))))); chartArea1.AxisY2.MajorGrid.LineColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64))))); chartArea1.BackColor = System.Drawing.Color.OldLace; //chartArea1.BackGradientStyle = System.Windows.Forms.DataVisualization.Charting.GradientStyle.TopBottom; //chartArea1.BackSecondaryColor = System.Drawing.Color.White; chartArea1.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64))))); chartArea1.BorderDashStyle = System.Windows.Forms.DataVisualization.Charting.ChartDashStyle.Solid; chartArea1.ShadowColor = System.Drawing.Color.Transparent; chartArea1.CursorX.IsUserEnabled = true; chartArea1.CursorX.IsUserSelectionEnabled = true; chartArea1.CursorX.SelectionColor = System.Drawing.SystemColors.Highlight; //chartArea1.CursorY.IsUserEnabled = true; //chartArea1.CursorY.IsUserSelectionEnabled = true; //chartArea1.CursorY.SelectionColor = System.Drawing.SystemColors.Highlight; //对数坐标 //chartArea1.AxisY.IsLogarithmic = true; //chartArea1.AxisY.LogarithmBase = Math.E; this.chart3.ChartAreas.Add(chartArea1); legend1.Name = "Default"; legend1.BackColor = System.Drawing.Color.Transparent; legend1.Enabled = true; legend1.Font = new System.Drawing.Font("Trebuchet MS", 8.25F, System.Drawing.FontStyle.Bold); legend1.Alignment = System.Drawing.StringAlignment.Near; legend1.Docking = System.Windows.Forms.DataVisualization.Charting.Docking.Right; legend1.IsDockedInsideChartArea = true; legend1.DockedToChartArea = chartArea1.Name; //legend1.IsTextAutoFit = false; chart3.Legends.Add(legend1); series1.Name = "Series 1"; series1.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(180)))), ((int)(((byte)(26)))), ((int)(((byte)(59)))), ((int)(((byte)(105))))); series1.BorderWidth = 3; series1.ChartArea = chartArea1.Name; series1.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Line; series1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(220)))), ((int)(((byte)(65)))), ((int)(((byte)(140)))), ((int)(((byte)(240))))); series1.Legend = legend1.Name; series1.LegendText = "脉冲"; //series1.MarkerSize = 8; //series1.MarkerStyle = System.Windows.Forms.DataVisualization.Charting.MarkerStyle.Circle; series1.ShadowColor = System.Drawing.Color.Black; series1.ShadowOffset = 2; series1.XValueType = System.Windows.Forms.DataVisualization.Charting.ChartValueType.Int32; series1.YValueType = System.Windows.Forms.DataVisualization.Charting.ChartValueType.Int32; series2.Name = "Series 2"; series2.BorderColor = System.Drawing.Color.DarkRed; series2.BorderWidth = 3; series2.ChartArea = chartArea1.Name; series2.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Line; series2.Color = System.Drawing.Color.Red; series2.Legend = legend1.Name; series2.LegendText = "AD"; //series1.MarkerSize = 8; //series1.MarkerStyle = System.Windows.Forms.DataVisualization.Charting.MarkerStyle.Circle; series2.ShadowColor = System.Drawing.Color.Black; series2.ShadowOffset = 2; series2.XValueType = System.Windows.Forms.DataVisualization.Charting.ChartValueType.Int32; series2.YValueType = System.Windows.Forms.DataVisualization.Charting.ChartValueType.Int32; series2.YAxisType = AxisType.Secondary; chart3.Series.Add(series1); chart3.Series.Add(series2); chart3.BackColor = System.Drawing.Color.Transparent; chart3.Name = "chart3"; } #region grid void flyad_GridEvent(object sender, MiniGridEventArgs e) { if (param.HasGrid) { run_gridmarker.Text = e.marker.ToString(); System.Windows.Forms.DataVisualization.Charting.Series series_forw = chart1.Series["Series 1"]; System.Windows.Forms.DataVisualization.Charting.Series series_backw = chart1.Series["Series 2"]; System.Windows.Forms.DataVisualization.Charting.Series series; if (e.direction == DIRECTION.FORWARD) { series = series_forw; } else { series = series_backw; } series.Points.Clear(); int gridLen = flyad.PosLen / flyad.PosOfGrid; for (int i = 0; i < e.buf.Length; i++) { int pos = (e.grid_start + i) * flyad.PosOfGrid; int ad = e.buf[i]; series.Points.AddXY(pos, ad); if (ad == Misc.MyBase.NULL_VALUE) series.Points[i].IsEmpty = true; } chart1.ChartAreas[0].AxisX.Minimum = 0; chart1.ChartAreas[0].AxisX.Maximum = flyad.PosLen; } } private void button_cleargrid_Click(object sender, RoutedEventArgs e) { System.Windows.Forms.DataVisualization.Charting.Series series_forw = chart1.Series["Series 1"]; System.Windows.Forms.DataVisualization.Charting.Series series_backw = chart1.Series["Series 2"]; series_forw.Points.Clear(); series_backw.Points.Clear(); } private void button1_Click(object sender, RoutedEventArgs e) { GetGrid(Misc.DIRECTION.FORWARD); } private void GetGrid(Misc.DIRECTION dir) { System.Windows.Forms.DataVisualization.Charting.Series series_forw = chart1.Series["Series 1"]; System.Windows.Forms.DataVisualization.Charting.Series series_backw = chart1.Series["Series 2"]; System.Windows.Forms.DataVisualization.Charting.Series series; if (dir == DIRECTION.FORWARD) series = series_forw; else series = series_backw; int[] data; int gridLen = flyad.PosLen / flyad.PosOfGrid; flyad.GetGrid(dir, 0, gridLen, out data); series.Points.Clear(); for (int i = 0; i < data.Length; i++) { int ad = data[i]; int pos = i * flyad.PosOfGrid; series.Points.AddXY(pos, ad); if (ad == Misc.MyBase.NULL_VALUE) series.Points[i].IsEmpty = true; else series.Points[i].IsEmpty = false; } series.Points.Add(30000); int max = Misc.MyMath.Max(data, 0, data.Length - 1); int min = Misc.MyMath.Min(data, 0, data.Length - 1); if (max == Misc.MyBase.NULL_VALUE) { max = 60000; min = 0; } int mid = max; max += 10; min -= 10; chart1.ChartAreas[0].AxisY.Maximum = max; chart1.ChartAreas[0].AxisY.Minimum = min; chart1.ChartAreas[0].AxisX.Minimum = 0; chart1.ChartAreas[0].AxisX.Maximum = flyad.PosLen; } private void button2_Click(object sender, RoutedEventArgs e) { GetGrid(Misc.DIRECTION.BACKWARD); } #endregion int timecnt = 0; class MaxMin { /// /// 最大值 /// public int max; /// /// 最小值 /// public int min; /// /// 数量 /// public int len; } List mMMList = new List(); void flyad_TimeGridEvent(object sender, TimeGridEventArgs e) { if (!param.HasTimeGrid) return; MaxMin mm; while (timecnt > 5000) { //被删除对象 mm = mMMList.First(); for (int i = 0; i < mm.len; i++) { chart2.Series["Series 1"].Points.RemoveAt(0); } timecnt -= mm.len; mMMList.RemoveAt(0); } mMMList.Add( new MaxMin(){ len = e.Data.Length, min = e.Data.Min(), max = e.Data.Max()}); for (int i = 0; i < mMMList.Last().len; i++) { int ad = e.Data[i]; chart2.Series["Series 1"].Points.Add(ad); } int max = (from i in mMMList select i.max).Max(); int min = (from i in mMMList select i.min).Min(); if (max == min) { min -= 10; max += 10; } chart2.ChartAreas[0].AxisY.Maximum = max; chart2.ChartAreas[0].AxisY.Minimum = min; timecnt += mMMList.Last().len; } private void button_connect1_Click(object sender, RoutedEventArgs e) { IPEndPoint result = Misc.StringConverter.ToIPEndPoint(param.EPStr); flyad.Connect(result); button_connect.IsEnabled = false; textbox_ip.IsEnabled = false; } private void button_output_Click(object sender, RoutedEventArgs e) { string output = textbox_output.Text; flyad.SetOutput(UInt16.MaxValue, Convert.ToUInt16(output, 2)); } private void button_runto_Click(object sender, RoutedEventArgs e) { int pos; if (int.TryParse(textBox_to.Text, out pos)) { flyad.Runto(pos); } } private void button_org_Click(object sender, RoutedEventArgs e) { flyad.Origin(); } private void button_stop_Click(object sender, RoutedEventArgs e) { flyad.Stop(); } private void button_backw_Click(object sender, RoutedEventArgs e) { flyad.Backward(); } private void button_forw_Click(object sender, RoutedEventArgs e) { flyad.Forward(); } private void button3_Click(object sender, RoutedEventArgs e) { flyad.UpdateParam(); } private void button_initarea_Click(object sender, RoutedEventArgs e) { Window_InitArea w = new Window_InitArea(); w.Init(flyad); w.Show(); } private void button_setaccess_Click(object sender, RoutedEventArgs e) { Window_setAccess w = new Window_setAccess(); w.Init(flyad); w.Show(); } private void button_sync_Click(object sender, RoutedEventArgs e) { if (!Window_sync.HasOpen) { Window_sync w = new Window_sync(); w.Init(flyad, mAutoSync); w.Show(); } } private void button_save_velocity_Click(object sender, RoutedEventArgs e) { param.Velocity = flyad.Velocity; param.SVelocity = flyad.SVelocity; param.ATime = flyad.ATime; param.DTime = flyad.DTime; param.HVelocity1 = flyad.HVelocity1; param.HVelocity2 = flyad.HVelocity2; param.PosLen = flyad.PosLen; param.ADLag = flyad.ADLag; param.Save(); MessageBox.Show("保存成功"); } private void button_load_velocity_Click(object sender, RoutedEventArgs e) { param.Load(); flyad.Velocity = param.Velocity; flyad.SVelocity = param.SVelocity; flyad.ATime = param.ATime; flyad.DTime = param.DTime; flyad.HVelocity1 = param.HVelocity1; flyad.HVelocity2 = param.HVelocity2; flyad.PosLen = param.PosLen; flyad.ADLag = param.ADLag; MessageBox.Show("加载成功"); } private void button_setbit_Click(object sender, RoutedEventArgs e) { Button[] bit = new Button[4] { button_bit0, button_bit1, button_bit2, button_bit3 }; for (int i = 0; i < bit.Length; i++) { if (sender == bit[i]) { if (Misc.MyBase.CHECKBIT(flyad.OStatus, i)) flyad.SetOutputBit(i, false); else flyad.SetOutputBit(i, true); break; } } } private void button_runto0_Click(object sender, RoutedEventArgs e) { flyad.RuntoMin(); } private void button_runtoPosLen_Click(object sender, RoutedEventArgs e) { flyad.RuntoMax(); } } public class IO2BinConverter : IValueConverter { #region IValueConverter 成员 public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { UInt16 io = (UInt16)value; string str = System.Convert.ToString(io, 2); return str.PadLeft(16, '0'); } public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { return System.Convert.ToUInt16((string)value, 2); } #endregion } public class BytesConverter : IValueConverter { #region IValueConverter 成员 public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { byte[] bs = (byte[])value; string str = ""; for (int i = 0; i < bs.Length; i++) str += bs[i].ToString("X2"); return str; } public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { string str = (string)value; string h=""; List bs=new List(); for (int i = 0; i < str.Length; i++) { if (str[i] != ' ') h += str[i]; if (((str[i] == ' ') && (h.Length != 0)) || (h.Length >= 2) ) { byte b=0; if (byte.TryParse(h, System.Globalization.NumberStyles.AllowHexSpecifier, null, out b)) { bs.Add(b); } else { break; } h = ""; } } return bs.ToArray(); } #endregion } }