增加了 运动平台底层报错的捕获

This commit is contained in:
zhengxuan.zhang
2024-03-22 18:37:28 +08:00
parent a43ebd53fe
commit df934d5daf
2 changed files with 161 additions and 45 deletions
+43 -41
View File
@@ -52,6 +52,10 @@
this.rtb_demo = new Telerik.WinControls.UI.RadButtonElement();
this.radRibbonBarGroup6 = new Telerik.WinControls.UI.RadRibbonBarGroup();
this.rtb_quick_loc = new Telerik.WinControls.UI.RadButtonElement();
this.radRibbonBarButtonGroup8 = new Telerik.WinControls.UI.RadRibbonBarButtonGroup();
this.rtb_SetX = new Telerik.WinControls.UI.RadTextBoxElement();
this.rtb_Sety = new Telerik.WinControls.UI.RadTextBoxElement();
this.rtb_SetZ = new Telerik.WinControls.UI.RadTextBoxElement();
this.ribbonTab2 = new Telerik.WinControls.UI.RibbonTab();
this.radRibbonBarGroup2 = new Telerik.WinControls.UI.RadRibbonBarGroup();
this.rtb_about = new Telerik.WinControls.UI.RadButtonElement();
@@ -142,10 +146,6 @@
this.TextBoxMsg = new System.Windows.Forms.RichTextBox();
this.tmrMonitor = new System.Windows.Forms.Timer(this.components);
this.timer_RefreshUI = new System.Windows.Forms.Timer(this.components);
this.radRibbonBarButtonGroup8 = new Telerik.WinControls.UI.RadRibbonBarButtonGroup();
this.rtb_SetX = new Telerik.WinControls.UI.RadTextBoxElement();
this.rtb_Sety = new Telerik.WinControls.UI.RadTextBoxElement();
this.rtb_SetZ = new Telerik.WinControls.UI.RadTextBoxElement();
((System.ComponentModel.ISupportInitialize)(this.radRibbonBar1)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.radRibbonBarBackstageView1)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.radStatusStrip1)).BeginInit();
@@ -355,6 +355,45 @@
this.rtb_quick_loc.Text = "";
this.rtb_quick_loc.Click += new System.EventHandler(this.rtb_quick_loc_Click);
//
// radRibbonBarButtonGroup8
//
this.radRibbonBarButtonGroup8.Items.AddRange(new Telerik.WinControls.RadItem[] {
this.rtb_SetX,
this.rtb_Sety,
this.rtb_SetZ});
this.radRibbonBarButtonGroup8.Name = "radRibbonBarButtonGroup8";
this.radRibbonBarButtonGroup8.Orientation = System.Windows.Forms.Orientation.Vertical;
this.radRibbonBarButtonGroup8.Text = "radRibbonBarButtonGroup8";
this.radRibbonBarButtonGroup8.TextOrientation = System.Windows.Forms.Orientation.Horizontal;
//
// rtb_SetX
//
this.rtb_SetX.MinSize = new System.Drawing.Size(80, 0);
this.rtb_SetX.Name = "rtb_SetX";
this.rtb_SetX.Padding = new System.Windows.Forms.Padding(0, 2, 0, 1);
this.rtb_SetX.Text = "100.0";
this.rtb_SetX.TextAlign = System.Windows.Forms.HorizontalAlignment.Left;
this.rtb_SetX.UseCompatibleTextRendering = false;
//
// rtb_Sety
//
this.rtb_Sety.MinSize = new System.Drawing.Size(80, 0);
this.rtb_Sety.Name = "rtb_Sety";
this.rtb_Sety.Padding = new System.Windows.Forms.Padding(0, 2, 0, 1);
this.rtb_Sety.Text = "150.0";
this.rtb_Sety.TextAlign = System.Windows.Forms.HorizontalAlignment.Left;
this.rtb_Sety.UseCompatibleTextRendering = false;
//
// rtb_SetZ
//
this.rtb_SetZ.AutoSize = false;
this.rtb_SetZ.Bounds = new System.Drawing.Rectangle(0, 0, 80, 20);
this.rtb_SetZ.Name = "rtb_SetZ";
this.rtb_SetZ.Padding = new System.Windows.Forms.Padding(0, 2, 0, 1);
this.rtb_SetZ.Text = "-100";
this.rtb_SetZ.TextAlign = System.Windows.Forms.HorizontalAlignment.Left;
this.rtb_SetZ.UseCompatibleTextRendering = false;
//
// ribbonTab2
//
this.ribbonTab2.AutoEllipsis = false;
@@ -1241,43 +1280,6 @@
this.timer_RefreshUI.Interval = 1000;
this.timer_RefreshUI.Tick += new System.EventHandler(this.Timer_RefreshUI_Tick);
//
// radRibbonBarButtonGroup8
//
this.radRibbonBarButtonGroup8.Items.AddRange(new Telerik.WinControls.RadItem[] {
this.rtb_SetX,
this.rtb_Sety,
this.rtb_SetZ});
this.radRibbonBarButtonGroup8.Name = "radRibbonBarButtonGroup8";
this.radRibbonBarButtonGroup8.Orientation = System.Windows.Forms.Orientation.Vertical;
this.radRibbonBarButtonGroup8.Text = "radRibbonBarButtonGroup8";
this.radRibbonBarButtonGroup8.TextOrientation = System.Windows.Forms.Orientation.Horizontal;
//
// rtb_SetX
//
this.rtb_SetX.Name = "rtb_SetX";
this.rtb_SetX.Padding = new System.Windows.Forms.Padding(0, 2, 0, 1);
this.rtb_SetX.Text = "100.0";
this.rtb_SetX.TextAlign = System.Windows.Forms.HorizontalAlignment.Left;
this.rtb_SetX.UseCompatibleTextRendering = false;
//
// rtb_Sety
//
this.rtb_Sety.Name = "rtb_Sety";
this.rtb_Sety.Padding = new System.Windows.Forms.Padding(0, 2, 0, 1);
this.rtb_Sety.Text = "150.0";
this.rtb_Sety.TextAlign = System.Windows.Forms.HorizontalAlignment.Left;
this.rtb_Sety.UseCompatibleTextRendering = false;
//
// rtb_SetZ
//
this.rtb_SetZ.AutoSize = false;
this.rtb_SetZ.Bounds = new System.Drawing.Rectangle(0, 0, 80, 20);
this.rtb_SetZ.Name = "rtb_SetZ";
this.rtb_SetZ.Padding = new System.Windows.Forms.Padding(0, 2, 0, 1);
this.rtb_SetZ.Text = "-100";
this.rtb_SetZ.TextAlign = System.Windows.Forms.HorizontalAlignment.Left;
this.rtb_SetZ.UseCompatibleTextRendering = false;
//
// MainFrom
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
+118 -4
View File
@@ -5,6 +5,7 @@ using System.IO;
using System.Net;
using System.Runtime.InteropServices;
using System.Windows.Forms;
using System.Windows.Threading;
using ACS.SPiiPlusNET;
using HexcalMC.Base;
using HexcalMC.Form;
@@ -44,6 +45,15 @@ namespace HexcalMC
public MainFrom()
{
InitializeComponent();
//处理未捕获的异常
Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
//处理UI线程异常
Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException);
//处理非UI线程异常
AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
}
private void MainFrom_Load(object sender, EventArgs e)
@@ -60,6 +70,8 @@ namespace HexcalMC
//启动界面刷新
timer_RefreshUI.Start();
}
private void MainFrom_Shown(object sender, EventArgs e) //窗体显示准备好接受用户输入时发生
@@ -333,7 +345,7 @@ namespace HexcalMC
}
//else if (msg.Contains("^B")) //查询状态, READY或BUSY
//{
// CheckPlatformStatus();
// checkPlatformStatus();
//}
else if (msg.Contains("CMMTYP")) //测量机类型
@@ -528,6 +540,108 @@ namespace HexcalMC
#region ACS平台相关
#region
//实现函数
private void DispatcherUnhandledException(object sender, DispatcherUnhandledExceptionEventArgs e)
{
MessageBox.Show($"Application_ThreadException:{e.Exception}");
e.Handled = true; // 标记为 “已处理”,避免异常进一步传递而引起崩溃
}
private static void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e)
{
// 在这里处理未被捕获的异常
// 您可以记录异常、显示错误信息等等
// 防止程序终止
MessageBox.Show("发生了未处理的异常:" + e.Exception.Message);
}
private void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
MessageBox.Show($"CurrentDomain_UnhandledException: {e.ExceptionObject}");
}
//订阅报错
private void EnableFaultEvent()
{
_acs.EnableEvent(Interrupts.ACSC_INTR_COMM_CHANNEL_CLOSED);
_acs.EnableEvent(Interrupts.ACSC_INTR_EMERGENCY);
_acs.EnableEvent(Interrupts.ACSC_INTR_SYSTEM_ERROR);
_acs.EnableEvent(Interrupts.ACSC_INTR_ETHERCAT_ERROR);
_acs.EnableEvent(Interrupts.ACSC_INTR_MOTOR_FAILURE);
_acs.EnableEvent(Interrupts.ACSC_INTR_MOTION_FAILURE);
_acs.COMMCHANNELCLOSED += _acs_COMMCHANNELCLOSED;
_acs.MOTORFAILURE += _acs_MOTORFAILURE;
_acs.MOTIONFAILURE += _acs_MOTIONFAILURE;
_acs.SYSTEMERROR += _acs_SYSTEMERROR;
_acs.ETHERCATERROR += _acs_ETHERCATERROR;
_acs.EMERGENCY += _acs_EMERGENCY;
}
//关联函数
private void _acs_EMERGENCY(ulong param)
{
DebugDfn.AddLogText($"[EStopError] Error Message:{_acs.GetErrorString((int)param)}");
}
private void _acs_ETHERCATERROR(ulong param)
{
DebugDfn.AddLogText($"[EtherCatError] Error Message:{_acs.GetErrorString((int)param)}");
}
private void _acs_SYSTEMERROR(ulong param)
{
DebugDfn.AddLogText($"[SystemError] Error Message:{_acs.GetErrorString((int)param)}");
}
private void _acs_MOTIONFAILURE(AxisMasks axis)
{
for (int i = 0; i < _acs.GetAxesCount(); i++)
{
if (((int)axis & (int)Math.Pow(2, i)) == Math.Pow(2, i))
{
if (_acs.GetMotionError((Axis)i) != 0)
{
//Motor无法自动捕获,需要在motion报错中获取
int errorcode = _acs.GetMotionError((Axis)i);
DebugDfn.AddLogText(
$"[MotionError] Axis:{i} Error Code:{errorcode} Error Message: {_acs.GetErrorString(errorcode)}");
int errorcodes = _acs.GetMotorError((Axis)i);
DebugDfn.AddLogText(
$"[MotorError] Axis:{i} Error Code:{errorcodes} Error Message:{_acs.GetErrorString(errorcodes)}");
}
}
}
}
private void _acs_MOTORFAILURE(AxisMasks axis)
{
for (int i = 0; i < _acs.GetAxesCount(); i++)
{
if (((int)axis & (int)Math.Pow(2, i)) == Math.Pow(2, i))
{
int errorcode = _acs.GetMotorError((Axis)i);
DebugDfn.AddLogText(
$"[MotorError] Axis:{i} Error Code:{errorcode} Error Message:{_acs.GetErrorString(errorcode)}");
}
}
}
private void _acs_COMMCHANNELCLOSED(ulong param)
{
DebugDfn.AddLogText($"[CommError] Error Message:{_acs.GetErrorString((int)param)}");
}
#endregion
private void BtnEnable_Click(object sender, EventArgs e) //使能所有轴
{
if (_mAcsConnected)
@@ -659,7 +773,6 @@ namespace HexcalMC
// 启动定时器
tmrMonitor.Interval = 50;
tmrMonitor.Start();
}
catch (COMException comex)
@@ -715,7 +828,6 @@ namespace HexcalMC
case Axis.ACSC_AXIS_8:
newAxisNumber = 2;
break;
}
return newAxisNumber;
@@ -730,7 +842,7 @@ namespace HexcalMC
axis = UseAxis[i];
_axisNo = TranslateAxisNumber(UseAxis[i]);
// Get Motor State ACSPL+ Variable : MST (integer)
_mNMotorState = _acs.GetMotorState(axis);
@@ -906,6 +1018,8 @@ namespace HexcalMC
_mlblEnable[0] = lblEnable0;
_mlblEnable[1] = lblEnable1;
_mlblEnable[2] = lblEnable2;
EnableFaultEvent();//订阅错误事件
}
public static bool IsWithinLimit(Point3D point) //判断点是否在行程范围内