From eb57feeff1d274dcd1a9bc767981d37d4837f959 Mon Sep 17 00:00:00 2001
From: wells.liu <wells.liu@broconcentric.com>
Date: 星期二, 07 七月 2020 18:28:18 +0800
Subject: [PATCH] 板卡操作界面功能
---
src/Bro.Device.GTSCard/GTSCardDriver.cs | 69 ++++++++++++++--------
src/Bro.Common.Device/DeviceBase/MotionCardBase.cs | 50 +++++++++++++++-
src/Bro.UI.Device.Winform/MotionCard/FrmMotionCardOperationBase.cs | 26 ++++++--
3 files changed, 110 insertions(+), 35 deletions(-)
diff --git a/src/Bro.Common.Device/DeviceBase/MotionCardBase.cs b/src/Bro.Common.Device/DeviceBase/MotionCardBase.cs
index e826d28..a6d2849 100644
--- a/src/Bro.Common.Device/DeviceBase/MotionCardBase.cs
+++ b/src/Bro.Common.Device/DeviceBase/MotionCardBase.cs
@@ -26,6 +26,50 @@
public abstract ResponseMessage MoveToPoint(IOperationConfig opConfig);
public abstract void ResetAlarm();
public abstract ResponseMessage Run(IOperationConfig config);
+ /// <summary>
+ /// 娓呴櫎鐘舵��
+ /// </summary>
+ /// <param name="startAxisIndex">璧峰杞村彿</param>
+ /// <param name="count">鏁伴噺</param>
+ /// <returns></returns>
+ public abstract bool ClearStatus(int startAxisIndex, int count);
+
+ /// <summary>
+ /// 璇诲彇杞寸姸鎬�
+ /// </summary>
+ /// <param name="axisNum">杞村彿</param>
+ /// <returns></returns>
+ public abstract int GetAxisStatus(int axisNum);
+
+ /// <summary>
+ /// 浣嶇疆娓呴浂
+ /// </summary>
+ /// <param name="startAxisIndex">璧峰杞村彿</param>
+ /// <param name="count">鏁伴噺</param>
+ /// <returns></returns>
+ public abstract bool PositionReset(int startAxisIndex, int count);
+
+ public abstract bool AllAxisOn();
+
+ public abstract bool AllAxisOff();
+
+ public abstract Task<bool> AxisOnAsync(int axisNum);
+
+ public abstract Task<bool> AxisOffAsync(int axisNum);
+
+ /// <summary>
+ /// 鍗曚釜杞� 杩愬姩(鐐瑰埌鐐� jog 鍥為浂...锛�
+ /// </summary>
+ /// <param name="optionPara">杩愬姩鍙傛暟瀵硅薄</param>
+ public abstract Task<bool> SingleAxisMoving(MovingOption optionPara);
+
+ /// <summary>
+ /// 鏌愪釜杞磋繍鍔ㄥ仠姝�
+ /// </summary>
+ /// <param name="axisNum">杞村彿</param>
+ /// <param name="option">0琛ㄧず骞虫粦鍋滄锛�1琛ㄧず绱ф�ュ仠姝�</param>
+ /// <returns></returns>
+ public abstract Task<bool> MoveStop(int axisNum, int option);
public virtual void ExcuteMonitorInvoke(DateTime dateTime, string invokeDevice, IDevice device, IMonitorSet monitorSet)
{
@@ -57,7 +101,7 @@
/// </summary>
public List<AxisMovingStatus> AxisMovingOptionValues { get; set; } = new List<AxisMovingStatus>();
- public abstract void WriteOutput(short index, IOValue value);
+ public abstract void WriteOutput(short index, IOValue value);
}
public class MotionCardInitialConfigBase : InitialConfigBase, IMonitorConfig
@@ -156,7 +200,7 @@
}
[Device("MotionOperationSet", "杩愬姩鎿嶄綔閰嶇疆鍩虹被", EnumHelper.DeviceAttributeType.OperationConfig)]
- public class MotionCardOperationSet : IComplexDisplay
+ public class MotionCardOperationSet : IComplexDisplay
{
[Category("IO鎿嶄綔閰嶇疆")]
[DisplayName("IO棰勬鏌ュ畾涔夐泦鍚�")]
@@ -196,7 +240,7 @@
[DisplayName("杩愬姩閰嶇疆闆嗗悎")]
[Description("MovingOps锛氳繍鍔ㄩ厤缃泦鍚�")]
[TypeConverter(typeof(ComplexObjectConvert))]
- [Editor(typeof(PropertyObjectEditor),typeof(UITypeEditor))]
+ [Editor(typeof(PropertyObjectEditor), typeof(UITypeEditor))]
public MotionOperationCollection MotionOperationCollection { get; set; } = new MotionOperationCollection();
diff --git a/src/Bro.Device.GTSCard/GTSCardDriver.cs b/src/Bro.Device.GTSCard/GTSCardDriver.cs
index c2cc8e6..918ed22 100644
--- a/src/Bro.Device.GTSCard/GTSCardDriver.cs
+++ b/src/Bro.Device.GTSCard/GTSCardDriver.cs
@@ -51,7 +51,17 @@
public override List<AxisInfo> GetCurrentAxisInfo(params string[] axisName)
{
- throw new NotImplementedException();
+ List<AxisInfo> axisInfos = new List<AxisInfo>();
+ IConfig.AxisSettings.FindAll(a => a.IsAxisEnabled).ForEach(axisSetting =>
+ {
+ AxisInfo axisInfo = new AxisInfo();
+ axisInfo.AxisName = axisSetting.AxisName;
+ var axisMovingStatus = AxisMovingOptionValues.FirstOrDefault(u => u.AxisIndex == axisSetting.AxisIndex);
+ axisInfo.AxisLocation = axisMovingStatus == null ? 0 : Convert.ToDouble(axisMovingStatus.CurPosition);
+
+ axisInfos.Add(axisInfo);
+ });
+ return axisInfos;
}
#region DeviceBase
@@ -59,8 +69,8 @@
protected override void Init()
{
InitialMotionCard();
- axisImmediatePauseHandleDict = IConfig.AxisSettings.ToDictionary(a => a.AxisIndex, a => new ManualResetEvent(true));
- axisMoveCancelDict = IConfig.AxisSettings.ToDictionary(a => a.AxisIndex, a => new CancellationTokenSource());
+ axisImmediatePauseHandleDict = IConfig.AxisSettings.FindAll(a => a.IsAxisEnabled).ToDictionary(a => a.AxisIndex, a => new ManualResetEvent(true));
+ axisMoveCancelDict = IConfig.AxisSettings.FindAll(a => a.IsAxisEnabled).ToDictionary(a => a.AxisIndex, a => new CancellationTokenSource());
axisMoveCancelDict.Values.ToList().ForEach(c =>
{
@@ -68,7 +78,6 @@
});
}
- ManualResetEvent _pauseHandle = new ManualResetEvent(true);
protected override void Pause()
{
@@ -100,7 +109,6 @@
ResponseMessage responseMessage = new ResponseMessage();
if (config is MotionCardOperationConfigBase motionCardOperationConfig)
{
- _pauseHandle.WaitOne();
foreach (var operationSet in motionCardOperationConfig.OperationCollection)
{
responseMessage = RunOperationSet(operationSet);
@@ -211,7 +219,7 @@
{
if (!_isResetting)
{
- var immediatePauseAxis = IConfig.AxisSettings.Where(u => u.IsImmediatePause).Select(u => u.AxisIndex).ToList();
+ var immediatePauseAxis = IConfig.AxisSettings.FindAll(a => a.IsAxisEnabled && a.IsImmediatePause).Select(u => u.AxisIndex).ToList();
immediatePauseAxis.ForEach(async axisIndex =>
{
@@ -229,7 +237,7 @@
/// </summary>
public void ResetImmediatePause()
{
- var immediatePauseAxis = IConfig.AxisSettings.Where(u => u.IsImmediatePause).Select(u => u.AxisIndex).ToList();
+ var immediatePauseAxis = IConfig.AxisSettings.FindAll(a => a.IsAxisEnabled && a.IsImmediatePause).Select(u => u.AxisIndex).ToList();
immediatePauseAxis.ForEach(axisIndex =>
{
@@ -251,7 +259,7 @@
{
var res = GTSCardAPI.GT_Open((short)IConfig.CardNum, 0, 1); //鎵撳紑杩愬姩鎺у埗鍣ㄣ�傚弬鏁板繀椤讳负锛�0,1锛夛紝涓嶈兘淇敼銆�
res += GTSCardAPI.GT_LoadConfig((short)IConfig.CardNum, IConfig.InitialConfigFilePath);
- res += GTSCardAPI.GT_ClrSts(0, 1, 8);
+ ClearStatus(1, IConfig.AxisSettings.FindAll(u => u.IsAxisEnabled).Count);
if (res != (short)GTSRetCode.GRCRunOK)
{
throw new Exception("鏉垮崱杞藉叆閰嶇疆鏂囦欢寮傚父锛岄敊璇爜锛�" + res);
@@ -259,13 +267,13 @@
}
- public bool AllAxisOn()
+ public override bool AllAxisOn()
{
List<Task<bool>> taskList = new List<Task<bool>>(); ;
// 濡傛灉鏄涓酱鐨勮繍鍔� 绛夋瘡涓酱寮�鍚�
- IConfig.AxisSettings.Where(a => a.IsAxisEnabled).ToList().ForEach(axisNum =>
+ IConfig.AxisSettings.FindAll(a => a.IsAxisEnabled).ForEach(axisNum =>
{
- var task = AxisOnAsync((short)IConfig.CardNum, (short)axisNum.AxisIndex);
+ var task = AxisOnAsync(axisNum.AxisIndex);
taskList.Add(task);
});
Task.WaitAll(taskList.ToArray());
@@ -273,13 +281,13 @@
return resultOK;
}
- public bool AllAxisOff()
+ public override bool AllAxisOff()
{
List<Task<bool>> taskList = new List<Task<bool>>(); ;
// 濡傛灉鏄涓酱鐨勮繍鍔� 绛夋瘡涓酱鍏抽棴
- IConfig.AxisSettings.Where(a => a.IsAxisEnabled).ToList().ForEach(axisNum =>
+ IConfig.AxisSettings.FindAll(a => a.IsAxisEnabled).ForEach(axisNum =>
{
- var task = AxisOffAsync((short)IConfig.CardNum, (short)axisNum.AxisIndex);
+ var task = AxisOffAsync(axisNum.AxisIndex);
taskList.Add(task);
});
Task.WaitAll(taskList.ToArray());
@@ -291,11 +299,11 @@
/// 鍗曚釜杞村紑鍚�
/// </summary>
/// <returns></returns>
- public async Task<bool> AxisOnAsync(short cardNum, short axisNum)
+ public override async Task<bool> AxisOnAsync(int axisNum)
{
return await Task.Run(() =>
{
- var ret = GTSCardAPI.GT_AxisOn(cardNum, axisNum);
+ var ret = GTSCardAPI.GT_AxisOn((short)IConfig.CardNum, (short)axisNum);
return ret == (short)GTSRetCode.GRCRunOK;
});
}
@@ -304,11 +312,11 @@
/// 鍗曚釜杞村叧闂�
/// </summary>
/// <returns></returns>
- public async Task<bool> AxisOffAsync(short cardNum, short axisNum)
+ public override async Task<bool> AxisOffAsync(int axisNum)
{
return await Task.Run(() =>
{
- var ret = GTSCardAPI.GT_AxisOff(cardNum, axisNum);
+ var ret = GTSCardAPI.GT_AxisOff((short)IConfig.CardNum, (short)axisNum);
return ret == (short)GTSRetCode.GRCRunOK;
});
}
@@ -323,7 +331,6 @@
ResponseMessage responseMessage = new ResponseMessage();
if (opConfig is MotionOperationCollection gtsOperationCollection)
{
- _pauseHandle.WaitOne();
List<Task<bool>> taskList = new List<Task<bool>>();
foreach (var movingOp in gtsOperationCollection.MovingOps)
{
@@ -371,7 +378,7 @@
/// 鍗曚釜杞� 杩愬姩(鐐瑰埌鐐� jog 鍥為浂...锛�
/// </summary>
/// <param name="optionPara">杩愬姩鍙傛暟瀵硅薄</param>
- public async Task<bool> SingleAxisMoving(MovingOption optionPara)
+ public override async Task<bool> SingleAxisMoving(MovingOption optionPara)
{
return await Task.Run(() =>
{
@@ -707,7 +714,7 @@
/// <param name="axisNum">axisNo</param>
/// <param name="option">0琛ㄧず骞虫粦鍋滄锛�1琛ㄧず绱ф�ュ仠姝�</param>
/// <returns></returns>
- public async Task<bool> MoveStop(int axisNum, int option)
+ public override async Task<bool> MoveStop(int axisNum, int option)
{
return await Task.Run(() =>
{
@@ -871,10 +878,9 @@
/// <summary>
/// 璇诲彇杞寸姸鎬�
/// </summary>
- /// <param name="cardNum">鏉垮崱鍙�</param>
/// <param name="axisNum">杞村彿</param>
/// <returns></returns>
- public int GetAxisStatus(int axisNum)
+ public override int GetAxisStatus(int axisNum)
{
lock (moveLock)
{
@@ -884,6 +890,19 @@
return sts;
}
}
+
+ public override bool ClearStatus(int startAxisIndex, int count)
+ {
+ var rtn = GTSCardAPI.GT_ClrSts((short)IConfig.CardNum, (short)startAxisIndex, (short)count);
+ return rtn == (short)GTSRetCode.GRCRunOK;
+ }
+
+ public override bool PositionReset(int startAxisIndex, int count)
+ {
+ var rtn = GTSCardAPI.GT_ZeroPos((short)IConfig.CardNum, (short)startAxisIndex, (short)count);
+ return rtn == (short)GTSRetCode.GRCRunOK;
+ }
+
#endregion
#region IMonitor
@@ -1073,7 +1092,7 @@
{
int axis_sts;
var axisSettings = IConfig.AxisSettings.FindAll(u => u.IsAxisEnabled);
- GTSCardAPI.GT_ClrSts((short)IConfig.CardNum, 1, (short)axisSettings.Count);
+ ClearStatus(1, axisSettings.Count);
foreach (var axisSetting in axisSettings)
{
axis_sts = GetAxisStatus((short)axisSetting.AxisIndex);
@@ -1107,7 +1126,7 @@
}
// 娓呴櫎鐘舵��
- GTSCardAPI.GT_ClrSts((short)IConfig.CardNum, 1, (short)IConfig.AxisSettings.FindAll(u => u.IsAxisEnabled).Count);
+ ClearStatus(1, axisSettings.Count);
}
object _alarmLock = new object();
diff --git a/src/Bro.UI.Device.Winform/MotionCard/FrmMotionCardOperationBase.cs b/src/Bro.UI.Device.Winform/MotionCard/FrmMotionCardOperationBase.cs
index 3502964..6118331 100644
--- a/src/Bro.UI.Device.Winform/MotionCard/FrmMotionCardOperationBase.cs
+++ b/src/Bro.UI.Device.Winform/MotionCard/FrmMotionCardOperationBase.cs
@@ -17,7 +17,7 @@
public IDevice Device { get; set; }
- public MotionCardOperationConfigBase MotionCardOperationConfig { get; set; }
+ public MovingOption MotionCardMovingOption { get; set; } = new MovingOption();
/// <summary>
/// 褰撳墠鏉垮崱瀹炰緥
@@ -44,36 +44,48 @@
flowLayoutPanel1.Controls.Add(axisOperation);
}
+
+ propGrid.SelectedObject = MotionCardMovingOption;
}
private void buttonClearStatus_Click(object sender, EventArgs e)
{
-
+ MotionCard.ClearStatus(1, MotionCard.IConfig.AxisSettings.FindAll(u => u.IsAxisEnabled).Count);
}
private void buttonServoEnable_Click(object sender, EventArgs e)
{
-
+ int sts = MotionCard.GetAxisStatus(MotionCardMovingOption.AxisIndex);
+ if ((sts & 0x200) == 0)//鍏抽棴鐘舵��
+ {
+ MotionCard.AxisOnAsync(MotionCardMovingOption.AxisIndex).GetAwaiter().GetResult();
+ buttonServoEnable.Text = "浼烘湇宸插紑鍚�";
+ }
+ else
+ {
+ MotionCard.AxisOffAsync(MotionCardMovingOption.AxisIndex).GetAwaiter().GetResult();
+ buttonServoEnable.Text = "浼烘湇宸插叧闂�";
+ }
}
private void buttonPositionReset_Click(object sender, EventArgs e)
{
-
+ var res = MotionCard.PositionReset(MotionCardMovingOption.AxisIndex, 1);
}
private void btnStart_Click(object sender, EventArgs e)
{
-
+ MotionCard.SingleAxisMoving(MotionCardMovingOption).GetAwaiter().GetResult();
}
private void buttonSmoothStop_Click(object sender, EventArgs e)
{
-
+ MotionCard.MoveStop(MotionCardMovingOption.AxisIndex, 0).GetAwaiter().GetResult();
}
private void buttonEmergencyStop_Click(object sender, EventArgs e)
{
-
+ MotionCard.MoveStop(MotionCardMovingOption.AxisIndex, 1).GetAwaiter().GetResult();
}
}
--
Gitblit v1.8.0