增加了 运动平台底层报错的捕获
This commit is contained in:
Generated
+43
-41
@@ -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
@@ -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) //判断点是否在行程范围内
|
||||
|
||||
Reference in New Issue
Block a user