You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
370 lines
12 KiB
C#
370 lines
12 KiB
C#
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<OldTestConfig>(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<OldTestConfig>(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<OldTestConfig>(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<MoveParameter> MovePoints { get; set; } = new BindingList<MoveParameter>();
|
|
|
|
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;
|
|
/// <summary>
|
|
/// 轴名称
|
|
/// </summary>
|
|
public string AxisName
|
|
{
|
|
get { return _AxisName; }
|
|
set {
|
|
NotifyPropertyChange(ref _AxisName, value);
|
|
}
|
|
}
|
|
|
|
private int _Speed;
|
|
/// <summary>
|
|
/// 运动速度(1=100)
|
|
/// </summary>
|
|
public int Speed
|
|
{
|
|
get { return _Speed; }
|
|
set {
|
|
NotifyPropertyChange(ref _Speed, value);
|
|
}
|
|
}
|
|
|
|
private int _RepeatTimes;
|
|
/// <summary>
|
|
/// 重复次数
|
|
/// </summary>
|
|
public int RepeatTimes
|
|
{
|
|
get { return _RepeatTimes; }
|
|
set
|
|
{
|
|
NotifyPropertyChange(ref _RepeatTimes, value);
|
|
}
|
|
}
|
|
|
|
|
|
private int _SleepTime;
|
|
/// <summary>
|
|
/// 等待时间
|
|
/// </summary>
|
|
public int SleepTime
|
|
{
|
|
get { return _SleepTime; }
|
|
set {
|
|
NotifyPropertyChange(ref _SleepTime, value);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
private double _StartPos;
|
|
/// <summary>
|
|
/// 起点
|
|
/// </summary>
|
|
public double StartPos
|
|
{
|
|
get { return _StartPos; }
|
|
set {
|
|
NotifyPropertyChange(ref _StartPos, value);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
private double _EndPos;
|
|
/// <summary>
|
|
/// 终点
|
|
/// </summary>
|
|
public double EndPos
|
|
{
|
|
get { return _EndPos; }
|
|
set {
|
|
NotifyPropertyChange(ref _EndPos, value);
|
|
}
|
|
}
|
|
|
|
|
|
public event PropertyChangedEventHandler PropertyChanged;
|
|
|
|
private void NotifyPropertyChange<T>(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));
|
|
|
|
}
|
|
}
|
|
}
|