using Rs.Framework; using Rs.Motion.Base; using Rs.MotionPlat.Flow; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.IO; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Text; using System.Threading; using System.Threading.Tasks; using System.Windows.Forms; using System.Xml.Serialization; namespace Rs.MotionPlat { public partial class OldTest : BaseForm { bool m_bPause = false; string configFilePath = "config/oldtest.xml"; private OldTestConfig config; public OldTest() { InitializeComponent(); CheckForIllegalCrossThreadCalls = false; } private void OldTest_Load(object sender, EventArgs e) { config = LoadConfig(); dataGridView1.AutoGenerateColumns = false; //添加第一列 DataGridViewTextBoxColumn column1 = new DataGridViewTextBoxColumn(); column1.ReadOnly = true; column1.Name = "cboxAxis"; column1.HeaderText = "轴名称"; column1.Width = 150; column1.DataPropertyName = "AxisName"; dataGridView1.Columns.Add(column1); //添加第二列 DataGridViewTextBoxColumn column2 = new DataGridViewTextBoxColumn(); column2.Name = "axisSpeed"; column2.HeaderText = "速度比例"; column2.DataPropertyName = "Speed"; dataGridView1.Columns.Add(column2); //添加第三列 DataGridViewTextBoxColumn column3 = new DataGridViewTextBoxColumn(); column3.Name = "repeatTimes"; column3.HeaderText = "循环次数"; column3.DataPropertyName = "RepeatTimes"; dataGridView1.Columns.Add(column3); //添加第四列 DataGridViewTextBoxColumn column4 = new DataGridViewTextBoxColumn(); column4.Name = "sleepTime"; column4.HeaderText = "间隔时间"; column4.DataPropertyName = "SleepTime"; dataGridView1.Columns.Add(column4); //添加第五列 DataGridViewTextBoxColumn column5 = new DataGridViewTextBoxColumn(); column5.Name = "startPoint"; column5.HeaderText = "起点"; column5.DataPropertyName = "StartPos"; dataGridView1.Columns.Add(column5); //添加第六列 DataGridViewTextBoxColumn column6 = new DataGridViewTextBoxColumn(); column6.Name = "endPoint"; column6.HeaderText = "终点"; column6.DataPropertyName = "EndPos"; dataGridView1.Columns.Add(column6); //添加第七列 DataGridViewButtonColumn column7 = new DataGridViewButtonColumn(); column7.Name = "axisSpeed"; column7.HeaderText = "启动"; column7.DefaultCellStyle.NullValue = "启动"; //column7.Width = 50; //column7.FillWeight = 20; dataGridView1.Columns.Add(column7); dataGridView1.DataSource = config.MovePoints; } protected override void OnClosing(CancelEventArgs e) { quit = true; base.OnClosing(e); } private OldTestConfig LoadConfig() { OldTestConfig config = new OldTestConfig(); XmlSerializerHelper.Instance.Deserialize(configFilePath, out config); if(config==null) { config = new OldTestConfig(); Type type = typeof(AxisControl); PropertyInfo[] pis = type.GetProperties(BindingFlags.Public | BindingFlags.Static); foreach (var item in pis) { MoveParameter move = new MoveParameter(); move.AxisName = item.Name; move.Speed = 5; move.RepeatTimes = 10; move.SleepTime = 100; move.StartPos = 10; move.EndPos = 20; config.MovePoints.Add(move); } XmlSerializerHelper.Instance.Serialize(configFilePath, config); } else { Type type = typeof(AxisControl); PropertyInfo[] pis = type.GetProperties(BindingFlags.Public | BindingFlags.Static); foreach (var item in pis) { if(config.MovePoints.Where(m=>m.AxisName==item.Name).Count()>0) { continue; } MoveParameter move = new MoveParameter(); move.AxisName = item.Name; move.Speed = 5; move.RepeatTimes = 10; move.SleepTime = 100; move.StartPos = 10; move.EndPos = 20; config.MovePoints.Add(move); } } return config; } private void btnAddAxis_Click(object sender, EventArgs e) { int rowIndex = dataGridView1.Rows.Add(); DataGridViewComboBoxCell cell = dataGridView1.Rows[rowIndex].Cells[0] as DataGridViewComboBoxCell; dataGridView1.Rows[rowIndex].Cells[1].Value = 5;//速度 dataGridView1.Rows[rowIndex].Cells[2].Value = 10;//次数 dataGridView1.Rows[rowIndex].Cells[3].Value = 100;//间隔 dataGridView1.Rows[rowIndex].Cells[4].Value = 10;//起点 dataGridView1.Rows[rowIndex].Cells[5].Value = 20;//终点 dataGridView1.Rows[rowIndex].Cells[6].Value = "启动"; } private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e) { if(e.ColumnIndex==6) { string axisName = dataGridView1.Rows[e.RowIndex].Cells[0].Value.ToString(); IAxis axis = AxisControl.GetAxis(axisName); if(axis!=null) { if(axis.HomeStatus== Motion.EHomeStatus.Finished) { //开启一个线程,开始运动 Task task = new Task(() => { MoveParameter mp = config[axisName]; int workStep = 0; while (true && mp.RepeatTimes > 0 && quit==false) { if(m_bPause) { Thread.Sleep(100); continue; } switch (workStep) { case 0://到起点 axis.MovePos(mp.StartPos, mp.Speed); workStep++; break; case 1: axis.IsStop(out bool bStop); if (bStop) { workStep++; Thread.Sleep(mp.SleepTime); //设置 //double targetPos = -105; //targetPos- axis.SetPosCompare(1, new double[] { -20,-80 }); } break; case 2: axis.MovePos(mp.EndPos, mp.Speed); workStep++; break; case 3: axis.IsStop(out bStop); if (bStop) { mp.RepeatTimes--; workStep = 0; axis.SetPosCompare(1, new double[] { 20, 80 }); Thread.Sleep(mp.SleepTime); } break; default: break; } } }); task.Start(); } } } } private void btnSave_Click(object sender, EventArgs e) { try { if (File.Exists(configFilePath)) File.Delete(configFilePath); if(config!=null) { if( XmlSerializerHelper.Instance.Serialize(configFilePath, config)) { MessageBox.Show("Save sucess","Info",MessageBoxButtons.OK,MessageBoxIcon.Information); } } } catch (Exception) { } } private void btnStop_Click(object sender, EventArgs e) { m_bPause = true; } private void btnStart_Click(object sender, EventArgs e) { m_bPause = false; } private void button1_Click(object sender, EventArgs e) { //AxisControl.LoadX.SetPosCompare(1, new double[] { -20,-40}); } } public class OldTestConfig { public BindingList MovePoints { get; set; } = new BindingList(); public MoveParameter this[string axisName] { get { if (MovePoints.Where(m => m.AxisName == axisName).Count()>0) return MovePoints.Where(m => m.AxisName == axisName).First(); return null; } } } public class MoveParameter:INotifyPropertyChanged { private string _AxisName; /// /// 轴名称 /// public string AxisName { get { return _AxisName; } set { NotifyPropertyChange(ref _AxisName, value); } } private int _Speed; /// /// 运动速度(1=100) /// public int Speed { get { return _Speed; } set { NotifyPropertyChange(ref _Speed, value); } } private int _RepeatTimes; /// /// 重复次数 /// public int RepeatTimes { get { return _RepeatTimes; } set { NotifyPropertyChange(ref _RepeatTimes, value); } } private int _SleepTime; /// /// 等待时间 /// public int SleepTime { get { return _SleepTime; } set { NotifyPropertyChange(ref _SleepTime, value); } } private double _StartPos; /// /// 起点 /// public double StartPos { get { return _StartPos; } set { NotifyPropertyChange(ref _StartPos, value); } } private double _EndPos; /// /// 终点 /// public double EndPos { get { return _EndPos; } set { NotifyPropertyChange(ref _EndPos, value); } } public event PropertyChangedEventHandler PropertyChanged; private void NotifyPropertyChange(ref T oldValue, T newValue, [CallerMemberName] string propertyName = "") { if (Object.Equals(oldValue, newValue)) return; oldValue = newValue; if (PropertyChanged != null) PropertyChanged.Invoke(this, new PropertyChangedEventArgs(propertyName)); } } }