From d4f1ec2cf9db7533acad03fa72c239be77459b4f Mon Sep 17 00:00:00 2001 From: "zhengxuan.zhang" Date: Thu, 8 Aug 2024 17:47:35 +0800 Subject: [PATCH] =?UTF-8?q?#0010=EF=BC=9A=E4=B8=89=E8=BD=B4=E6=A0=B9?= =?UTF-8?q?=E6=8D=AE=E8=BE=93=E5=85=A5=E8=BD=A8=E8=BF=B9=E7=82=B9=E5=81=9A?= =?UTF-8?q?=E6=8F=92=E8=A1=A5=E8=BF=90=E5=8A=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- HSI_HexagonMI_EF3/HSI_Motion.cpp | 30 + HSI_HexagonMI_EF3/HSI_Motion.h | 42 +- HSI_HexagonMI_EF3/version.h | 4 +- Motion/ACS Motion/MainForm.Designer.cs | 114 ++- Motion/ACS Motion/MainForm.cs | 745 +++++++++++++----- .../ACS Motion/bin/x64/Debug/ACS_Motion.exe | Bin 168960 -> 175616 bytes .../ACS Motion/bin/x64/Debug/ACS_Motion.pdb | Bin 65024 -> 71168 bytes 7 files changed, 695 insertions(+), 240 deletions(-) diff --git a/HSI_HexagonMI_EF3/HSI_Motion.cpp b/HSI_HexagonMI_EF3/HSI_Motion.cpp index 1a51bff..a04d278 100644 --- a/HSI_HexagonMI_EF3/HSI_Motion.cpp +++ b/HSI_HexagonMI_EF3/HSI_Motion.cpp @@ -2424,6 +2424,8 @@ HSI_STATUS HSI_Motion::StopJog() g_pLogger->SendAndFlushWithTime(L"[StopJog] ACS acsc_HaltM error!\n"); ErrorsHandler(); } + // + g_pLogger->SendAndFlushWithTime(L"[StopJog] ACS acsc_HaltM success!\n"); } m_Thread_StateJOGStop = HSI_THREAD_PAUSED; @@ -5503,6 +5505,34 @@ HSI_STATUS HSI_Motion::DCCPPStartPoint(double* startPoint) return rStatus; } +//=========================================================================== +/* + * 设置扫描数据并指定三轴坐标点 + * @param AxisTypes 三轴类型(如X、Y、Z),用于指定要设置的触发轴,预留 + * @param speed 运动速度 + * @param points 三维坐标点数组 + * @param numPoints 坐标点数量 + */ +HSI_STATUS HSI_Motion::DCCScanSetDataWithPoints(UINT AxisTypes, double speed, Point3D* points, UINT numPoints) +{ + auto rStatus = HSI_STATUS_NORMAL; + // 处理传入的三维坐标点数组 + for (UINT i = 0; i < numPoints; ++i) + { + Point3D point = points[i]; + // 在这里处理每个点,例如打印或存储 + printf("Point %u: x = %f, y = %f, z = %f\n", i, point.x, point.y, point.z); + } + + // 控制平台的运动,(安全限位的问题,导入100个点,判断是否在运动空间内) + + // 其他处理逻辑 + // ... + + + return rStatus; +} + //=========================================================================== HSI_STATUS HSI_Motion::DCCScanSetDataOld(UINT AxisTypes, HSI_SCAN_MOTION_TYPE eType, UINT lTrigNumber, double* dTrigDis) { diff --git a/HSI_HexagonMI_EF3/HSI_Motion.h b/HSI_HexagonMI_EF3/HSI_Motion.h index d34ab8a..6ea475c 100644 --- a/HSI_HexagonMI_EF3/HSI_Motion.h +++ b/HSI_HexagonMI_EF3/HSI_Motion.h @@ -139,6 +139,12 @@ using TCPIP_RETURN_CODE = enum TCPIP_CONNECT_STATUS_UNKNOWN }; +struct Point3D { + double x; + double y; + double z; +}; + class HSI_Motion : public HSI { public: @@ -307,41 +313,25 @@ public: HSI_STATUS SetPositionStep(UINT AxisTypes, double Position, HSI_MOTION_MOVE_TYPE eType, double dSpeedGear); HSI_STATUS SetPositionEx(UINT AxisTypes, double Position, HSI_MOTION_MOVE_TYPE eType, double dSpeedGear); HSI_STATUS GetSpeedEx(UINT AxisTypes, double& Speed); - /** - * \brief 设置单轴运动速度 - * \param AxisTypes - * \param Speed - * \return - */ - HSI_STATUS SetSpeedEx(UINT AxisTypes, double Speed); + + HSI_STATUS SetSpeedEx(UINT AxisTypes, double Speed);//设置单轴运动速度 HSI_STATUS SetSpeedExOld(UINT AxisTypes, double Speed); HSI_STATUS GetAccelerationEx(UINT AxisTypes, double& Accel); HSI_STATUS SetAccelerationEx(UINT AxisTypes, double Accel); HSI_STATUS SetTriggerLight(int triggleNum, int delayLighting, int delayLightBefor, int triggleMode, double* Intensities); HSI_STATUS DCCPPStartPoint(double* startPoint); - /** - * \brief 下发触发间距 - * \param AxisTypes 轴 - * \param eType 等间距或者等时间 - * \param lTrigNumber 触发数量 - * \param dTrigDis 间距 - * \return - */ - HSI_STATUS DCCScanSetData(UINT AxisTypes, HSI_SCAN_MOTION_TYPE eType, UINT lTrigNumber, double* dTrigDis); + + HSI_STATUS DCCScanSetData(UINT AxisTypes, HSI_SCAN_MOTION_TYPE eType, UINT lTrigNumber, double* dTrigDis);// 下发触发间距,轴、等间距或者等时间、触发数量、间距 HSI_STATUS DCCScanSetDataOld(UINT AxisTypes, HSI_SCAN_MOTION_TYPE eType, UINT lTrigNumber, double* dTrigDis); - /** - * \brief 开始扫描 - * \return - */ - HSI_STATUS DCCScanStart(); + + HSI_STATUS DCCScanStart(); //开始扫描 HSI_STATUS DCCScanStartOld(); - /** - * \brief 停止扫描 - * \return - */ - HSI_STATUS DCCScanStop(); + + HSI_STATUS DCCScanStop(); //停止扫描 HSI_STATUS DCCScanStopOld(); + + HSI_STATUS DCCScanSetDataWithPoints(UINT AxisTypes, double speed, Point3D* points, UINT numPoints); // 直线电机平台新增,三轴轨迹规划 HSI_STATUS DCCForLightPlate(); HSI_STATUS IOStep(bool RunSts); diff --git a/HSI_HexagonMI_EF3/version.h b/HSI_HexagonMI_EF3/version.h index 96334d7..64ea463 100644 --- a/HSI_HexagonMI_EF3/version.h +++ b/HSI_HexagonMI_EF3/version.h @@ -12,5 +12,5 @@ #define HSI_VERSION_REVNUM #define HSI_VERSION_BUILD_DATE _T(__DATE__ ) #define HSI_VERSION_BUILD_TIME _T(__TIME__ ) -#define HSI_FILE_DESCRIPTION "周三 2.24.07 / 10:59 " -#define HSI_FILE_CSDESCRIPTION _T("周三 2.24.07 / 10:59 ") +#define HSI_FILE_DESCRIPTION "周四 2.24.08 / 13:09 " +#define HSI_FILE_CSDESCRIPTION _T("周四 2.24.08 / 13:09 ") diff --git a/Motion/ACS Motion/MainForm.Designer.cs b/Motion/ACS Motion/MainForm.Designer.cs index 873b8c4..a06220c 100644 --- a/Motion/ACS Motion/MainForm.Designer.cs +++ b/Motion/ACS Motion/MainForm.Designer.cs @@ -171,7 +171,14 @@ this.btnEventMotionEnd = new System.Windows.Forms.Button(); this.rtxtTerminal = new System.Windows.Forms.RichTextBox(); this.groupBox4 = new System.Windows.Forms.GroupBox(); + this.button17 = new System.Windows.Forms.Button(); + this.button16 = new System.Windows.Forms.Button(); + this.button15 = new System.Windows.Forms.Button(); + this.button14 = new System.Windows.Forms.Button(); + this.button13 = new System.Windows.Forms.Button(); + this.button12 = new System.Windows.Forms.Button(); this.btnSend = new System.Windows.Forms.Button(); + this.button11 = new System.Windows.Forms.Button(); this.txtCommand = new System.Windows.Forms.TextBox(); this.groupBox5 = new System.Windows.Forms.GroupBox(); this.groupBox9 = new System.Windows.Forms.GroupBox(); @@ -210,6 +217,7 @@ this.checkBox4 = new System.Windows.Forms.CheckBox(); this.checkBox3 = new System.Windows.Forms.CheckBox(); this.checkBox2 = new System.Windows.Forms.CheckBox(); + this.button18 = new System.Windows.Forms.Button(); this.groupBox1.SuspendLayout(); this.grpMotionTest.SuspendLayout(); this.grpMst.SuspendLayout(); @@ -261,7 +269,7 @@ this.txtIP.Name = "txtIP"; this.txtIP.Size = new System.Drawing.Size(91, 21); this.txtIP.TabIndex = 16; - this.txtIP.Text = "10.0.0.100"; + this.txtIP.Text = "100.0.0.100"; // // btnClose // @@ -1672,16 +1680,84 @@ // // groupBox4 // + this.groupBox4.Controls.Add(this.button18); + this.groupBox4.Controls.Add(this.button17); + this.groupBox4.Controls.Add(this.button16); + this.groupBox4.Controls.Add(this.button15); + this.groupBox4.Controls.Add(this.button14); + this.groupBox4.Controls.Add(this.button13); + this.groupBox4.Controls.Add(this.button12); this.groupBox4.Controls.Add(this.btnSend); + this.groupBox4.Controls.Add(this.button11); this.groupBox4.Controls.Add(this.txtCommand); this.groupBox4.Controls.Add(this.rtxtTerminal); this.groupBox4.Location = new System.Drawing.Point(11, 493); this.groupBox4.Name = "groupBox4"; - this.groupBox4.Size = new System.Drawing.Size(892, 220); + this.groupBox4.Size = new System.Drawing.Size(892, 256); this.groupBox4.TabIndex = 7; this.groupBox4.TabStop = false; this.groupBox4.Text = "命令行通讯"; // + // button17 + // + this.button17.Location = new System.Drawing.Point(527, 218); + this.button17.Name = "button17"; + this.button17.Size = new System.Drawing.Size(85, 30); + this.button17.TabIndex = 14; + this.button17.Text = "MoveM"; + this.button17.UseVisualStyleBackColor = true; + this.button17.Click += new System.EventHandler(this.button17_Click); + // + // button16 + // + this.button16.Location = new System.Drawing.Point(291, 218); + this.button16.Name = "button16"; + this.button16.Size = new System.Drawing.Size(85, 30); + this.button16.TabIndex = 13; + this.button16.Text = "BlendedLine"; + this.button16.UseVisualStyleBackColor = true; + this.button16.Click += new System.EventHandler(this.button16_Click); + // + // button15 + // + this.button15.Location = new System.Drawing.Point(196, 218); + this.button15.Name = "button15"; + this.button15.Size = new System.Drawing.Size(85, 30); + this.button15.TabIndex = 12; + this.button15.Text = "ExtLine"; + this.button15.UseVisualStyleBackColor = true; + this.button15.Click += new System.EventHandler(this.button15_Click); + // + // button14 + // + this.button14.Location = new System.Drawing.Point(98, 218); + this.button14.Name = "button14"; + this.button14.Size = new System.Drawing.Size(85, 30); + this.button14.TabIndex = 11; + this.button14.Text = "SegmentLine"; + this.button14.UseVisualStyleBackColor = true; + this.button14.Click += new System.EventHandler(this.button14_Click); + // + // button13 + // + this.button13.Location = new System.Drawing.Point(759, 218); + this.button13.Name = "button13"; + this.button13.Size = new System.Drawing.Size(85, 30); + this.button13.TabIndex = 10; + this.button13.Text = "AddPVTPointM"; + this.button13.UseVisualStyleBackColor = true; + this.button13.Click += new System.EventHandler(this.button13_Click); + // + // button12 + // + this.button12.Location = new System.Drawing.Point(628, 218); + this.button12.Name = "button12"; + this.button12.Size = new System.Drawing.Size(85, 30); + this.button12.TabIndex = 9; + this.button12.Text = "SplineM"; + this.button12.UseVisualStyleBackColor = true; + this.button12.Click += new System.EventHandler(this.button12_Click); + // // btnSend // this.btnSend.Location = new System.Drawing.Point(784, 20); @@ -1692,6 +1768,16 @@ this.btnSend.UseVisualStyleBackColor = true; this.btnSend.Click += new System.EventHandler(this.btnSend_Click); // + // button11 + // + this.button11.Location = new System.Drawing.Point(9, 218); + this.button11.Name = "button11"; + this.button11.Size = new System.Drawing.Size(85, 30); + this.button11.TabIndex = 8; + this.button11.Text = "MultiPointM"; + this.button11.UseVisualStyleBackColor = true; + this.button11.Click += new System.EventHandler(this.button11_Click); + // // txtCommand // this.txtCommand.Location = new System.Drawing.Point(9, 20); @@ -1984,6 +2070,7 @@ this.button1.TabIndex = 0; this.button1.Text = "开始"; this.button1.UseVisualStyleBackColor = true; + this.button1.Click += new System.EventHandler(this.button1_Click); // // groupBox10 // @@ -1996,7 +2083,7 @@ this.groupBox10.Controls.Add(this.checkBox2); this.groupBox10.Location = new System.Drawing.Point(919, 610); this.groupBox10.Name = "groupBox10"; - this.groupBox10.Size = new System.Drawing.Size(295, 103); + this.groupBox10.Size = new System.Drawing.Size(295, 139); this.groupBox10.TabIndex = 9; this.groupBox10.TabStop = false; this.groupBox10.Text = "XYZ循环"; @@ -2066,10 +2153,20 @@ this.checkBox2.Text = "X"; this.checkBox2.UseVisualStyleBackColor = true; // + // button18 + // + this.button18.Location = new System.Drawing.Point(400, 215); + this.button18.Name = "button18"; + this.button18.Size = new System.Drawing.Size(85, 30); + this.button18.TabIndex = 15; + this.button18.Text = "记录"; + this.button18.UseVisualStyleBackColor = true; + this.button18.Click += new System.EventHandler(this.button18_Click); + // // MainForm // this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None; - this.ClientSize = new System.Drawing.Size(1226, 725); + this.ClientSize = new System.Drawing.Size(1226, 761); this.Controls.Add(this.groupBox10); this.Controls.Add(this.groupBox5); this.Controls.Add(this.groupBox4); @@ -2080,6 +2177,7 @@ this.Controls.Add(this.grpMotionTest); this.Controls.Add(this.groupBox1); this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.MinimumSize = new System.Drawing.Size(1242, 800); this.Name = "MainForm"; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; this.Text = "以色列ACS 运动控制器"; @@ -2302,6 +2400,14 @@ private System.Windows.Forms.Label label50; private System.Windows.Forms.Label label49; private System.Windows.Forms.Label label47; + private System.Windows.Forms.Button button11; + private System.Windows.Forms.Button button15; + private System.Windows.Forms.Button button14; + private System.Windows.Forms.Button button13; + private System.Windows.Forms.Button button12; + private System.Windows.Forms.Button button16; + private System.Windows.Forms.Button button17; + private System.Windows.Forms.Button button18; } } diff --git a/Motion/ACS Motion/MainForm.cs b/Motion/ACS Motion/MainForm.cs index e92bb9c..f54e1a3 100644 --- a/Motion/ACS Motion/MainForm.cs +++ b/Motion/ACS Motion/MainForm.cs @@ -15,7 +15,7 @@ namespace ACS_DotNET_Library_Advanced_Demo { public partial class MainForm : Form { - private Api _ACS; + private Api _ACS; private const int MAX_AXIS_COUNT = 32; private const int MAX_BUFFER_CNT = 64; @@ -31,7 +31,7 @@ namespace ACS_DotNET_Library_Advanced_Demo // For update values private MotorStates m_nMotorState; //运动状态 - private ProgramStates m_nProgramState; //程序状态 + private ProgramStates m_nProgramState; //程序状态 private object m_objReadVar = null; private Array m_arrReadVector = null; private double m_lfRPos, m_lfFPos, m_lfPE, m_lfFVEL; //参考位置,反馈位置 位置误差 反馈速度 double类型 @@ -44,22 +44,41 @@ namespace ACS_DotNET_Library_Advanced_Demo private Label[] m_lblOutput; private Button[] m_btnOutput; + + + //定一个point结构体,用于存储点的坐标 + public struct Point + { + public double x; + public double y; + public double z; + } + //定义一个point结构体的列表,用于存储多个点的坐标 + public List pointList = new List(); + //定一个point结构体的对象 + public Point point = new Point(); + + + // 记录标志位 + private bool record = false; + private int record_count = 0; //时间计数 + public MainForm() { InitializeComponent(); - _ACS = new Api(); //初始化 ACS运动控制类 + _ACS = new Api(); //初始化 ACS运动控制类 - // Register Event 注册时间 - _ACS.PHYSICALMOTIONEND += _ACS_PHYSICALMOTIONEND; - _ACS.PROGRAMEND += _ACS_PROGRAMEND; + // Register Event 注册时间 + _ACS.PHYSICALMOTIONEND += _ACS_PHYSICALMOTIONEND; + _ACS.PROGRAMEND += _ACS_PROGRAMEND; } #region Initialize private void Form1_Load(object sender, EventArgs e) { - rdoTCP.Checked = true; - btnOpen.Enabled = true; + rdoTCP.Checked = true; + btnOpen.Enabled = true; btnClose.Enabled = false; m_lblLeftLimit = new Label[MAX_UI_LIMIT_CNT]; //左限位 @@ -111,7 +130,7 @@ namespace ACS_DotNET_Library_Advanced_Demo m_btnOutput[5] = btnSW5; m_btnOutput[6] = btnSW6; m_btnOutput[7] = btnSW7; - + //m_nFault = new int[MAX_AXIS_COUNT]; //Array.Clear(m_nFault, 0, MAX_AXIS_COUNT); m_nOutputState = 0; @@ -131,14 +150,14 @@ namespace ACS_DotNET_Library_Advanced_Demo txtIP.Enabled = false; txtPort.Enabled = false; } - #endregion + #endregion #region Communication - Open / Close private void btnOpen_Click(object sender, EventArgs e) { string strTemp; int i; - //double lfTemp = 0.0f; + //double lfTemp = 0.0f; try { @@ -148,25 +167,25 @@ namespace ACS_DotNET_Library_Advanced_Demo _ACS.OpenCommEthernetTCP( txtIP.Text, // IP Address (Default : 10.0.0.100) Convert.ToInt32(txtPort.Text.Trim())); // TCP/IP Port nubmer (default : 701) - + } else if (rdoSimu.Checked) { // Simmulation mode - _ACS.OpenCommSimulator(); + _ACS.OpenCommSimulator(); } m_bConnected = true; // Get Total number of axes - // Using Transaction function : return string text from controller, we need to convert to integer value + // Using Transaction function : return string text from controller, we need to convert to integer value strTemp = _ACS.Transaction("?SYSINFO(13)"); m_nTotalAxis = Convert.ToInt32(strTemp.Trim()); - // Using Sysinfo function - //_ACS.GetSysInfo(_ACS.ACSC_SYS_NAXES_KEY, out lfTemp); + // Using Sysinfo function + //_ACS.GetSysInfo(_ACS.ACSC_SYS_NAXES_KEY, out lfTemp); - // When we are using multi axes command (ex) ToPointM, HaltM, ...), we need to allocate the array size more 1. - // Because of the last delimeter (-1) + // When we are using multi axes command (ex) ToPointM, HaltM, ...), we need to allocate the array size more 1. + // Because of the last delimeter (-1) m_arrAxisList = new Axis[m_nTotalAxis + 1]; for (i = 0; i < m_nTotalAxis; i++) { @@ -174,7 +193,7 @@ namespace ACS_DotNET_Library_Advanced_Demo m_arrAxisList[i] = (Axis)i; } // Insert '-1' at the last - m_arrAxisList[m_nTotalAxis] = Axis.ACSC_NONE; + m_arrAxisList[m_nTotalAxis] = Axis.ACSC_NONE; cboAxisNo.SelectedIndex = 0; // Update current motion paramter to UI. @@ -192,7 +211,7 @@ namespace ACS_DotNET_Library_Advanced_Demo tmrMonitor.Interval = 50; tmrMonitor.Start(); } - + catch (COMException comex) { MessageBox.Show("Connection fail", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); @@ -229,14 +248,14 @@ namespace ACS_DotNET_Library_Advanced_Demo { try { - string terminateExceptionConnName = "ACS.Framework.exe"; + string terminateExceptionConnName = "ACS.Framework.exe"; - ACSC_CONNECTION_DESC[] connectionList = _ACS.GetConnectionsList(); - for (int index = 0; index < connectionList.Length; index++) + ACSC_CONNECTION_DESC[] connectionList = _ACS.GetConnectionsList(); + for (int index = 0; index < connectionList.Length; index++) { - if (terminateExceptionConnName.CompareTo((string)connectionList[index].Application) != 0) - _ACS.TerminateConnection(connectionList[index]); + if (terminateExceptionConnName.CompareTo((string)connectionList[index].Application) != 0) + _ACS.TerminateConnection(connectionList[index]); } } catch (Exception ex) @@ -244,7 +263,7 @@ namespace ACS_DotNET_Library_Advanced_Demo System.Diagnostics.Debug.WriteLine(ex.ToString()); } } - #endregion + #endregion #region Update UI data from Controller /// @@ -254,11 +273,11 @@ namespace ACS_DotNET_Library_Advanced_Demo { if (m_bConnected) { - txtVel.Text = _ACS.GetVelocity((Axis)cboAxisNo.SelectedIndex).ToString(); - txtAcc.Text = _ACS.GetAcceleration((Axis)cboAxisNo.SelectedIndex).ToString(); - txtDec.Text = _ACS.GetDeceleration((Axis)cboAxisNo.SelectedIndex).ToString(); - txtKdec.Text = _ACS.GetKillDeceleration((Axis)cboAxisNo.SelectedIndex).ToString(); - txtJerk.Text = _ACS.GetJerk((Axis)cboAxisNo.SelectedIndex).ToString(); + txtVel.Text = _ACS.GetVelocity((Axis)cboAxisNo.SelectedIndex).ToString(); + txtAcc.Text = _ACS.GetAcceleration((Axis)cboAxisNo.SelectedIndex).ToString(); + txtDec.Text = _ACS.GetDeceleration((Axis)cboAxisNo.SelectedIndex).ToString(); + txtKdec.Text = _ACS.GetKillDeceleration((Axis)cboAxisNo.SelectedIndex).ToString(); + txtJerk.Text = _ACS.GetJerk((Axis)cboAxisNo.SelectedIndex).ToString(); } } @@ -266,62 +285,64 @@ namespace ACS_DotNET_Library_Advanced_Demo { UpdateProfile(); } + + private void tmrMonitor_Tick(object sender, EventArgs e) { - // Get selected axis number - int iAxisNo = cboAxisNo.SelectedIndex; - // Get selected buffer number - int iBufferNo = cboBufferNo.SelectedIndex; + // Get selected axis number + int iAxisNo = cboAxisNo.SelectedIndex; + // Get selected buffer number + int iBufferNo = cboBufferNo.SelectedIndex; if (m_bConnected) { try { - // Instruction 1. Using library functions - acsc_GetFPosition, acsc_GetRPosition, .... - // Instruction 2. Read ACS variable - Already defined almost things (FPOS, RPOS, ...) - // Motion parameters and state is array (Max length is total number of axes) - // - // * Library function can read only 1 axis information, so if you want to read several axes, you have to call the function many times. - // (This may cause communication delay.) - // Recommand (if you want to read many axes) : read/write variable using ReadVariable, ReadVariableScalar, ReadVariableVector, ReadVariableMatrix + // Instruction 1. Using library functions - acsc_GetFPosition, acsc_GetRPosition, .... + // Instruction 2. Read ACS variable - Already defined almost things (FPOS, RPOS, ...) + // Motion parameters and state is array (Max length is total number of axes) + // + // * Library function can read only 1 axis information, so if you want to read several axes, you have to call the function many times. + // (This may cause communication delay.) + // Recommand (if you want to read many axes) : read/write variable using ReadVariable, ReadVariableScalar, ReadVariableVector, ReadVariableMatrix // // Get Motor State // ACSPL+ Variable : MST (integer) - m_nMotorState = _ACS.GetMotorState((Axis)iAxisNo); + m_nMotorState = _ACS.GetMotorState((Axis)iAxisNo); // Returned value is integer, you need to use bitmaks - if ((m_nMotorState & MotorStates.ACSC_MST_MOVE) != 0) lblMoving.Image = Properties.Resources.On; else lblMoving.Image = Properties.Resources.Off; // 运动中 - if ((m_nMotorState & MotorStates.ACSC_MST_INPOS) != 0) lblInPos.Image = Properties.Resources.On; else lblInPos.Image = Properties.Resources.Off; // 就位 - if ((m_nMotorState & MotorStates.ACSC_MST_ACC) != 0) lblAcc.Image = Properties.Resources.On; else lblAcc.Image = Properties.Resources.Off; // 加速 - if ((m_nMotorState & MotorStates.ACSC_MST_ENABLE) != 0) lblEnable.Image = Properties.Resources.On; else lblEnable.Image = Properties.Resources.Off; // 使能 + if ((m_nMotorState & MotorStates.ACSC_MST_MOVE) != 0) lblMoving.Image = Properties.Resources.On; else lblMoving.Image = Properties.Resources.Off; // 运动中 + if ((m_nMotorState & MotorStates.ACSC_MST_INPOS) != 0) lblInPos.Image = Properties.Resources.On; else lblInPos.Image = Properties.Resources.Off; // 就位 + if ((m_nMotorState & MotorStates.ACSC_MST_ACC) != 0) lblAcc.Image = Properties.Resources.On; else lblAcc.Image = Properties.Resources.Off; // 加速 + if ((m_nMotorState & MotorStates.ACSC_MST_ENABLE) != 0) lblEnable.Image = Properties.Resources.On; else lblEnable.Image = Properties.Resources.Off; // 使能 // Reference position // ACSPL+ Variable : RPOS (real) - m_lfRPos = _ACS.GetRPosition((Axis)iAxisNo); // 参考位置 + m_lfRPos = _ACS.GetRPosition((Axis)iAxisNo); // 参考位置 // Feedback position (Encoder value) // ACSPL+ Variable : FPO (real) - m_lfFPos = _ACS.GetFPosition((Axis)iAxisNo); //反馈位置 + m_lfFPos = _ACS.GetFPosition((Axis)iAxisNo); //反馈位置 // PE (Position Error) - // There is no function in library. We need to use ReadVariable function - m_lfPE = (double)_ACS.ReadVariable("PE", ProgramBuffer.ACSC_NONE, iAxisNo, iAxisNo); //位置误差 + // There is no function in library. We need to use ReadVariable function + m_lfPE = (double)_ACS.ReadVariable("PE", ProgramBuffer.ACSC_NONE, iAxisNo, iAxisNo); //位置误差 - // Feedback Velocity - m_lfFVEL = (double)_ACS.ReadVariable("FVEL", ProgramBuffer.ACSC_NONE, iAxisNo, iAxisNo); //实际速度 + // Feedback Velocity + m_lfFVEL = (double)_ACS.ReadVariable("FVEL", ProgramBuffer.ACSC_NONE, iAxisNo, iAxisNo); //实际速度 txtRPOS.Text = String.Format("{0:0.0000}", m_lfRPos); txtFPOS.Text = String.Format("{0:0.0000}", m_lfFPos); - txtPE.Text = String.Format("{0:0.0000}", m_lfPE); - txtFVEL.Text = String.Format("{0:0.0000}", m_lfFVEL); + txtPE.Text = String.Format("{0:0.0000}", m_lfPE); + txtFVEL.Text = String.Format("{0:0.0000}", m_lfFVEL); // Program State 运动状态 // State : Compiled, Running, Suspended, Autoroutine is running (ON syntax) // // ACSPL+ Variable : PST (integer) - m_nProgramState = _ACS.GetProgramState((ProgramBuffer)iBufferNo); + m_nProgramState = _ACS.GetProgramState((ProgramBuffer)iBufferNo); if ((m_nProgramState & ProgramStates.ACSC_PST_RUN) != 0) { lblPRG_Status_LED.Image = Properties.Resources.On; @@ -349,11 +370,11 @@ namespace ACS_DotNET_Library_Advanced_Demo } // Read digital input/output (Port means all of bits) - // If you want to read only 1 bit (not an integer), use "GetInput" function - m_nValues = _ACS.GetInputPort(0); // _ACS.ReadVariableAsVector("IN", -1, 0, 0, -1, -1); + // If you want to read only 1 bit (not an integer), use "GetInput" function + m_nValues = _ACS.GetInputPort(0); // _ACS.ReadVariableAsVector("IN", -1, 0, 0, -1, -1); UpdateIOState(m_nValues, true); - m_nOutputState = _ACS.GetOutputPort(0); // _ACS.ReadVariableAsVector("OUT", -1, 0, 0, -1, -1); + m_nOutputState = _ACS.GetOutputPort(0); // _ACS.ReadVariableAsVector("OUT", -1, 0, 0, -1, -1); UpdateIOState(m_nOutputState, false); } catch (Exception ex) @@ -361,6 +382,46 @@ namespace ACS_DotNET_Library_Advanced_Demo MessageBox.Show(ex.Message, "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error); System.Diagnostics.Debug.WriteLine(ex.Message); } + + //编写代码,刷新0,1,8轴的位置 + point.x = _ACS.GetRPosition((Axis)0); //参考位置 + point.y = _ACS.GetRPosition((Axis)1); //参考位置 + point.z = _ACS.GetRPosition((Axis)8); //参考位置 + + //对 point 保留3位小数 + label54.Text = point.x.ToString("0.000"); + label55.Text = point.y.ToString("0.000"); + label56.Text = point.z.ToString("0.000"); + + + if (record) + { + record_count++; + pointList.Add(point); + + if (record_count > 200) + { + record_count = 0; + record = false; + + //保存数据 + SaveFileDialog saveFileDialog = new SaveFileDialog(); + saveFileDialog.Filter = "文本文件|*.txt"; + saveFileDialog.Title = "保存数据"; + saveFileDialog.ShowDialog(); + + if (saveFileDialog.FileName != "") + { + StreamWriter sw = new StreamWriter(saveFileDialog.FileName); + foreach (Point p in pointList) + { + sw.WriteLine(p.x.ToString("0.000") + " " + p.y.ToString("0.000") + " " + p.z.ToString("0.000")); + } + sw.Close(); + } + } + + } } } @@ -369,8 +430,8 @@ namespace ACS_DotNET_Library_Advanced_Demo { if (axisNo < MAX_UI_LIMIT_CNT) { - if ((fault & (int)SafetyControlMasks.ACSC_SAFETY_LL) != 0) m_lblLeftLimit[axisNo].Image = Properties.Resources.Error; else m_lblLeftLimit[axisNo].Image = Properties.Resources.Off; - if ((fault & (int)SafetyControlMasks.ACSC_SAFETY_RL) != 0) m_lblRightLimit[axisNo].Image = Properties.Resources.Error; else m_lblRightLimit[axisNo].Image = Properties.Resources.Off; + if ((fault & (int)SafetyControlMasks.ACSC_SAFETY_LL) != 0) m_lblLeftLimit[axisNo].Image = Properties.Resources.Error; else m_lblLeftLimit[axisNo].Image = Properties.Resources.Off; + if ((fault & (int)SafetyControlMasks.ACSC_SAFETY_RL) != 0) m_lblRightLimit[axisNo].Image = Properties.Resources.Error; else m_lblRightLimit[axisNo].Image = Properties.Resources.Off; } } @@ -382,7 +443,7 @@ namespace ACS_DotNET_Library_Advanced_Demo for (int i = 0; i < MAX_UI_IO_CNT; i++) { if (isInput) - { + { // Input state if ((value & bitUpCnt) != 0) m_lblInput[i].Image = Properties.Resources.On; else m_lblInput[i].Image = Properties.Resources.Off; @@ -411,27 +472,27 @@ namespace ACS_DotNET_Library_Advanced_Demo #region Motor Enable / Disable private void btnEnable_Click(object sender, EventArgs e) { - // Enable selected axis + // Enable selected axis _ACS.Enable((Axis)cboAxisNo.SelectedIndex); - + // If you want to enable several axes, - // - // Ex) Eanble three axes (0, 1, 6) + // + // Ex) Eanble three axes (0, 1, 6) // - // int[] AxisList = new int[] { 0, 1, 6, -1 }; !!!! Important !! Must insert '-1' at the last + // int[] AxisList = new int[] { 0, 1, 6, -1 }; !!!! Important !! Must insert '-1' at the last // _ACS.EnableM(AxisList); } private void btnDisable_Click(object sender, EventArgs e) { - // Disable selected axis + // Disable selected axis _ACS.Disable((Axis)cboAxisNo.SelectedIndex); - // Disable multi axes : DisableM(int[] axisList) + // Disable multi axes : DisableM(int[] axisList) } private void btnDisableAll_Click(object sender, EventArgs e) { - // Disable all of axes + // Disable all of axes _ACS.DisableAll(); } #endregion @@ -439,12 +500,12 @@ namespace ACS_DotNET_Library_Advanced_Demo private void btnSetZero_Click(object sender, EventArgs e) { // Change current poisition as you want - // SetFPosition(Axis number, new position) + // SetFPosition(Axis number, new position) _ACS.SetFPosition((Axis)cboAxisNo.SelectedIndex, 0); } - #region Move to absolute position - private void btnPTP_Click(object sender, EventArgs e) + #region Move to absolute position + private void btnPTP_Click(object sender, EventArgs e) { double lfTargetPos = 0.0f; try @@ -453,9 +514,9 @@ namespace ACS_DotNET_Library_Advanced_Demo { lfTargetPos = Convert.ToDouble(txtPTP_Pos.Text); _ACS.ToPoint( - 0, // '0' - Absolute position - (Axis)cboAxisNo.SelectedIndex, // Axis number - lfTargetPos // Target position + 0, // '0' - Absolute position + (Axis)cboAxisNo.SelectedIndex, // Axis number + lfTargetPos // Target position ); } } @@ -467,7 +528,7 @@ namespace ACS_DotNET_Library_Advanced_Demo } #endregion - #region Move to relative position (from current position) + #region Move to relative position (from current position) private void btnPTP_R_Neg_Click(object sender, EventArgs e) { double lfTargetPos = 0.0f; @@ -476,12 +537,12 @@ namespace ACS_DotNET_Library_Advanced_Demo if (txtPTP_Pos.Text.Length > 0) { lfTargetPos = Convert.ToDouble(txtPTP_Pos.Text); - if (lfTargetPos > 0) lfTargetPos = lfTargetPos * (-1); // Target position (from current position, step move) + if (lfTargetPos > 0) lfTargetPos = lfTargetPos * (-1); // Target position (from current position, step move) _ACS.ToPoint( - MotionFlags.ACSC_AMF_RELATIVE, // Flat - (Axis)cboAxisNo.SelectedIndex, // Axis number - lfTargetPos // Move distance + MotionFlags.ACSC_AMF_RELATIVE, // Flat + (Axis)cboAxisNo.SelectedIndex, // Axis number + lfTargetPos // Move distance ); } } @@ -547,7 +608,7 @@ namespace ACS_DotNET_Library_Advanced_Demo #endregion #region JOG Command - // Move negative direction + private void btnJogNeg_MouseDown(object sender, MouseEventArgs e) { double lfVelocity = 0.0f; @@ -557,17 +618,17 @@ namespace ACS_DotNET_Library_Advanced_Demo if (chkUseVel.Checked) { lfVelocity = Convert.ToDouble(txtJogVel.Text.Trim()); - if (lfVelocity > 0) lfVelocity = lfVelocity * (-1); // Negative direction : Using - (minus) velocity + if (lfVelocity > 0) lfVelocity = lfVelocity * (-1); // Negative direction : Using - (minus) velocity _ACS.Jog( - MotionFlags.ACSC_AMF_VELOCITY, // Velocity flag 速度标志 - (Axis)cboAxisNo.SelectedIndex, // Axis number - lfVelocity // Velocity + MotionFlags.ACSC_AMF_VELOCITY, // Velocity flag 速度标志 + (Axis)cboAxisNo.SelectedIndex, // Axis number + lfVelocity // Velocity ); } else { - _ACS.Jog(0, (Axis)cboAxisNo.SelectedIndex, (double)GlobalDirection.ACSC_NEGATIVE_DIRECTION); + _ACS.Jog(0, (Axis)cboAxisNo.SelectedIndex, (double)GlobalDirection.ACSC_NEGATIVE_DIRECTION); } } catch (Exception ex) @@ -576,7 +637,7 @@ namespace ACS_DotNET_Library_Advanced_Demo System.Diagnostics.Debug.WriteLine(ex.Message); } } - // 정방향 이동 동작 + private void btnJogPos_MouseDown(object sender, MouseEventArgs e) { double lfVelocity = 0.0f; @@ -586,7 +647,7 @@ namespace ACS_DotNET_Library_Advanced_Demo if (chkUseVel.Checked) { lfVelocity = Convert.ToDouble(txtJogVel.Text.Trim()); - if (lfVelocity < 0) lfVelocity = lfVelocity * (-1); + if (lfVelocity < 0) lfVelocity = lfVelocity * (-1); _ACS.Jog(MotionFlags.ACSC_AMF_VELOCITY, (Axis)cboAxisNo.SelectedIndex, lfVelocity); } @@ -601,7 +662,7 @@ namespace ACS_DotNET_Library_Advanced_Demo System.Diagnostics.Debug.WriteLine(ex.Message); } } - // Stop JOG motion + private void btnJog_MouseUp(object sender, MouseEventArgs e) { _ACS.Halt((Axis)cboAxisNo.SelectedIndex); @@ -644,7 +705,7 @@ namespace ACS_DotNET_Library_Advanced_Demo private void btnStopBuffer_Click(object sender, EventArgs e) { // Stop program - _ACS.StopBuffer((ProgramBuffer)cboBufferNo.SelectedIndex); + _ACS.StopBuffer((ProgramBuffer)cboBufferNo.SelectedIndex); } #endregion @@ -670,12 +731,12 @@ namespace ACS_DotNET_Library_Advanced_Demo { // Immediately change value (On the fly) : SetVelocityImm() // Affect next motion : SetVelocity() - + case 0: _ACS.SetVelocityImm((Axis)cboAxisNo.SelectedIndex, lfTemp); break; - case 1: _ACS.SetAccelerationImm((Axis)cboAxisNo.SelectedIndex, lfTemp); break; - case 2: _ACS.SetDecelerationImm((Axis)cboAxisNo.SelectedIndex, lfTemp); break; - case 3: _ACS.SetKillDecelerationImm((Axis)cboAxisNo.SelectedIndex, lfTemp); break; - case 4: _ACS.SetJerkImm((Axis)cboAxisNo.SelectedIndex, lfTemp); break; + case 1: _ACS.SetAccelerationImm((Axis)cboAxisNo.SelectedIndex, lfTemp); break; + case 2: _ACS.SetDecelerationImm((Axis)cboAxisNo.SelectedIndex, lfTemp); break; + case 3: _ACS.SetKillDecelerationImm((Axis)cboAxisNo.SelectedIndex, lfTemp); break; + case 4: _ACS.SetJerkImm((Axis)cboAxisNo.SelectedIndex, lfTemp); break; } textBox.SelectAll(); @@ -715,11 +776,11 @@ namespace ACS_DotNET_Library_Advanced_Demo lfTemp = Convert.ToDouble(textBox.Text.Trim()); switch (textBox.TabIndex) { - case 0: _ACS.SetVelocityImm((Axis)cboAxisNo.SelectedIndex, lfTemp); break; - case 1: _ACS.SetAccelerationImm((Axis)cboAxisNo.SelectedIndex, lfTemp); break; - case 2: _ACS.SetDecelerationImm((Axis)cboAxisNo.SelectedIndex, lfTemp); break; - case 3: _ACS.SetKillDecelerationImm((Axis)cboAxisNo.SelectedIndex, lfTemp); break; - case 4: _ACS.SetJerkImm((Axis)cboAxisNo.SelectedIndex, lfTemp); break; + case 0: _ACS.SetVelocityImm((Axis)cboAxisNo.SelectedIndex, lfTemp); break; + case 1: _ACS.SetAccelerationImm((Axis)cboAxisNo.SelectedIndex, lfTemp); break; + case 2: _ACS.SetDecelerationImm((Axis)cboAxisNo.SelectedIndex, lfTemp); break; + case 3: _ACS.SetKillDecelerationImm((Axis)cboAxisNo.SelectedIndex, lfTemp); break; + case 4: _ACS.SetJerkImm((Axis)cboAxisNo.SelectedIndex, lfTemp); break; } textBox.SelectAll(); @@ -748,17 +809,17 @@ namespace ACS_DotNET_Library_Advanced_Demo { // Set only 1 bit _ACS.SetOutput( - 0, // Port number - btn.TabIndex, // Bit number - 0 // 0 = OFF, 1 = ON + 0, // Port number + btn.TabIndex, // Bit number + 0 // 0 = OFF, 1 = ON ); - // If your I/O device is EtherCAT type, you cannot use this function - // You can use WriteVariable function and Command function - // - // Ex) If EtherCAT mapped variable is 'EC_DOUT' - // Want to ON bit '3' - // _ACS.Command("EC_DOUT.3=1"); + // If your I/O device is EtherCAT type, you cannot use this function + // You can use WriteVariable function and Command function + // + // Ex) If EtherCAT mapped variable is 'EC_DOUT' + // Want to ON bit '3' + // _ACS.Command("EC_DOUT.3=1"); } else { @@ -772,45 +833,45 @@ namespace ACS_DotNET_Library_Advanced_Demo } #endregion - #region Event - private void btnEventMotionEnd_Click(object sender, EventArgs e) - { - //_ACS.PHYSICALMOTIONEND +=_ACS_PHYSICALMOTIONEND; - _ACS.EnableEvent(Interrupts.ACSC_INTR_PHYSICAL_MOTION_END); - lstLog.Items.Add("PHYSICAL_MOTION_END event enabled"); - } + #region Event + private void btnEventMotionEnd_Click(object sender, EventArgs e) + { + //_ACS.PHYSICALMOTIONEND +=_ACS_PHYSICALMOTIONEND; + _ACS.EnableEvent(Interrupts.ACSC_INTR_PHYSICAL_MOTION_END); + lstLog.Items.Add("PHYSICAL_MOTION_END event enabled"); + } - void _ACS_PHYSICALMOTIONEND(AxisMasks axis) - { - int bit = 0x01; - int axisNo = 0; - // Param value is bit number - // Bit Number = Axis Number - for (int i = 0; i < 64; i++) - { - if ((int)axis == bit) - { - axisNo = i; - break; - } - bit = bit << 1; - } + void _ACS_PHYSICALMOTIONEND(AxisMasks axis) + { + int bit = 0x01; + int axisNo = 0; + // Param value is bit number + // Bit Number = Axis Number + for (int i = 0; i < 64; i++) + { + if ((int)axis == bit) + { + axisNo = i; + break; + } + bit = bit << 1; + } - // Add log to ListBox - this.Invoke((MethodInvoker)delegate - { - lstLog.Items.Add(String.Format(" - Axis {0}, Stoppped", axisNo)); - lstLog.SelectedIndex = lstLog.Items.Count - 1; - }); - - } + // Add log to ListBox + this.Invoke((MethodInvoker)delegate + { + lstLog.Items.Add(String.Format(" - Axis {0}, Stoppped", axisNo)); + lstLog.SelectedIndex = lstLog.Items.Count - 1; + }); - private void btnEventProgramEnd_Click(object sender, EventArgs e) - { - //_ACS.PROGRAMEND += _ACS_PROGRAMEND; - _ACS.EnableEvent(Interrupts.ACSC_INTR_PROGRAM_END); - lstLog.Items.Add("PROGRAM_END event enabled"); - } + } + + private void btnEventProgramEnd_Click(object sender, EventArgs e) + { + //_ACS.PROGRAMEND += _ACS_PROGRAMEND; + _ACS.EnableEvent(Interrupts.ACSC_INTR_PROGRAM_END); + lstLog.Items.Add("PROGRAM_END event enabled"); + } private void button8_Click(object sender, EventArgs e) { @@ -822,73 +883,341 @@ namespace ACS_DotNET_Library_Advanced_Demo } + + void _ACS_PROGRAMEND(BufferMasks buffer) - { - int bit = 0x01; - int bufferNo = 0; - // Param value is bit number - // Bit Number = Axis Number - for (int i = 0; i < 32; i++) - { - if ((int)buffer == bit) - { - bufferNo = i; - break; - } - bit = bit << 1; - } + { + int bit = 0x01; + int bufferNo = 0; + // Param value is bit number + // Bit Number = Axis Number + for (int i = 0; i < 32; i++) + { + if ((int)buffer == bit) + { + bufferNo = i; + break; + } + bit = bit << 1; + } - // Add log to ListBox - this.Invoke((MethodInvoker)delegate - { - lstLog.Items.Add(String.Format(" - Buffer {0}, Stoppped", bufferNo)); - lstLog.SelectedIndex = lstLog.Items.Count - 1; - }); - } - #endregion + // Add log to ListBox + this.Invoke((MethodInvoker)delegate + { + lstLog.Items.Add(String.Format(" - Buffer {0}, Stoppped", bufferNo)); + lstLog.SelectedIndex = lstLog.Items.Count - 1; + }); + } + #endregion - #region Communication Termial - Using Transaction function - private void txtCommand_KeyPress(object sender, KeyPressEventArgs e) - { - if (e.KeyChar == (char)Keys.Enter) - btnSend.PerformClick(); - } + #region Communication Termial - Using Transaction function + private void txtCommand_KeyPress(object sender, KeyPressEventArgs e) + { + if (e.KeyChar == (char)Keys.Enter) + btnSend.PerformClick(); + } - private void btnSend_Click(object sender, EventArgs e) - { - string temp = string.Empty; - if (m_bConnected) - { - try - { - AppendTextToTextBox("> " + txtCommand.Text.Trim()); - temp = _ACS.Transaction(txtCommand.Text.Trim()); - } - catch (ACS.SPiiPlusNET.ACSException ex) - { - temp = String.Format("?{0}", ex.ErrorCode); - } - finally - { - if (temp.Length > 0) - { - AppendTextToTextBox(temp); - AppendTextToTextBox(":"); - } - } + private void btnSend_Click(object sender, EventArgs e) + { + string temp = string.Empty; + if (m_bConnected) + { + try + { + AppendTextToTextBox("> " + txtCommand.Text.Trim()); + temp = _ACS.Transaction(txtCommand.Text.Trim()); + } + catch (ACS.SPiiPlusNET.ACSException ex) + { + temp = String.Format("?{0}", ex.ErrorCode); + } + finally + { + if (temp.Length > 0) + { + AppendTextToTextBox(temp); + AppendTextToTextBox(":"); + } + } - txtCommand.Focus(); - txtCommand.SelectAll(); - } - } + txtCommand.Focus(); + txtCommand.SelectAll(); + } + } - private void AppendTextToTextBox(string text) - { - rtxtTerminal.AppendText(text); - rtxtTerminal.AppendText(Environment.NewLine); - rtxtTerminal.ScrollToCaret(); - } - #endregion - } + private void AppendTextToTextBox(string text) + { + rtxtTerminal.AppendText(text); + rtxtTerminal.AppendText(Environment.NewLine); + rtxtTerminal.ScrollToCaret(); + } + #endregion + + + #region 三轴插补运动 + + private void button11_Click(object sender, EventArgs e) //MultiPointM 方法 + { + lstLog.Items.Add("MultiPointM"); + int timeout = 5000; + Axis[] axes = { Axis.ACSC_AXIS_0, Axis.ACSC_AXIS_1, Axis.ACSC_NONE }; + double[] points = { 0, 0 }; + _ACS.EnableM(axes); // Enable axis 0 and 1 + // Wait axis 0 enabled during 5 sec + _ACS.WaitMotorEnabled(Axis.ACSC_AXIS_0, 1, timeout); + // Wait axis 1 enabled during 5 sec + _ACS.WaitMotorEnabled(Axis.ACSC_AXIS_1, 1, timeout); + // Create multi-point motion of axis 0 and 1 with default + // velocity without + // dwell in the points + _ACS.MultiPointM(MotionFlags.ACSC_NONE, axes, 0); + // Add some points + for (int index = 0; index < 5; index++) + { + + points[0] = 100 * index; + points[1] = 100 * index; + _ACS.AddPointM(axes, points); + + //将点添加到 lstLog.Items + lstLog.Items.Add("points[0]:" + points[0].ToString() + "points[1]:" + points[1].ToString()); + + } + lstLog.Items.Add("结束添加"); + // Finish the motion + // End of the multi-point motion + _ACS.EndSequenceM(axes); + lstLog.Items.Add("执行"); + record=true; + } + + + + private void button12_Click(object sender, EventArgs e) //SplineM 方法 + { + lstLog.Items.Add("SplineM"); + int timeout = 5000; + Axis[] axes = { Axis.ACSC_AXIS_0, Axis.ACSC_AXIS_1,Axis.ACSC_AXIS_8, Axis.ACSC_NONE }; + double[] points = { 0, 0 ,0}; + _ACS.EnableM(axes); // Enable axes 0 and 1 + + _ACS.WaitMotorEnabled(Axis.ACSC_AXIS_0, 1, timeout); + + _ACS.WaitMotorEnabled(Axis.ACSC_AXIS_1, 1, timeout); + + _ACS.WaitMotorEnabled(Axis.ACSC_AXIS_8, 1, timeout); + + + // Create the arbitrary path motion to axes 0 and 1 with + // uniform interval 10 ms use a cubic interpolation + // between the specified points + _ACS.SplineM(MotionFlags.ACSC_AMF_CUBIC |MotionFlags.ACSC_AMF_WAIT, axes, 5000); + + // Add some points + // 定义三维点列表 + int[,] pointsArray = new int[,] + { + { 0, 0, 0 }, + { 10, 20, -10 }, + { 20, 30, -40 }, + { 30, 50, -20 }, + { 40, 70, -30 }, + { 50, 80, -50 }, + { 60, 70, -60 }, + { 70, 50, -70 }, + { 80, 30, -80 }, + { 90, 10, -90 } + }; + + // 遍历列表并添加点 + for (int index = 0; index < pointsArray.GetLength(0); index++) + { + + points[0] = pointsArray[index, 0]; + points[1] = pointsArray[index, 1]; + points[2] = pointsArray[index, 2]; + + // 使用AddPVPointM方法添加点 + _ACS.AddPVPointM(axes, points, points); + + // 将点信息添加到lstLog.Items + lstLog.Items.Add($"points[0]: {points[0]} points[1]: {points[1]} points[2]: {points[2]}"); + } + + //_ACS.GoM(axes); + // Finish the motion + // End of the multi-point motion + _ACS.EndSequenceM(axes); + + _ACS.GoM(axes); + + + record = true; + + } + + + + private void button13_Click(object sender, EventArgs e) //AddPVTPointM 方法 + { + lstLog.Items.Add("AddPVTPointM"); + int timeout = 5000; + Axis[] axes = { Axis.ACSC_AXIS_0, Axis.ACSC_AXIS_1, Axis.ACSC_NONE }; + double[] points = { 0, 0 }; + _ACS.EnableM(axes); // Enable axes 0 and 1 + // Wait axis 0 enabled during 5 sec + _ACS.WaitMotorEnabled(Axis.ACSC_AXIS_0, 1, timeout); + // Wait axis 1 enabled during 5 sec + _ACS.WaitMotorEnabled(Axis.ACSC_AXIS_1, 1, timeout); + // PVT motion and uniform interval is not used + _ACS.SplineM(MotionFlags.ACSC_AMF_CUBIC | + MotionFlags.ACSC_AMF_VARTIME, axes, 0); + // Add some points + for (int index = 0; index < 5; index++) + { + points[0] = 100 * index; // 0, 100, 200, 300, 400 + points[1] = 50 * index; // 0, 200, 400, 600, 800 + _ACS.AddPVTPointM(axes, points, points, 1000); + } + // Finish the motion + // End of the multi-point motion + _ACS.EndSequenceM(axes); + + + record = true; + + + } + + private void button14_Click(object sender, EventArgs e)//SegmentLine,平面内 + { + lstLog.Items.Add("SegmentLine"); + int timeout = 5000; + Axis[] axes = { Axis.ACSC_AXIS_1, Axis.ACSC_AXIS_8, Axis.ACSC_NONE }; + double[] points = { 0, 0, 0 }; + _ACS.EnableM(axes); // Enable axes 0 and 1 + // Wait axis 0 enabled during 5 sec + _ACS.WaitMotorEnabled(Axis.ACSC_AXIS_0, 1, timeout); + // Wait axis 1 enabled during 5 sec + _ACS.SegmentedMotion(MotionFlags.ACSC_AMF_VELOCITY, axes, points); + + lstLog.Items.Add("SegmentLine 1"); + points[0] = 500; + points[1] = -100; + //points[2] = -100; + _ACS.SegmentLine(MotionFlags.ACSC_NONE, axes, points, Api.ACSC_NONE, Api.ACSC_NONE, null, null, Api.ACSC_NONE, null); + _ACS.Stopper(axes); //平滑 + + points[0] = 200; + points[1] = -200; + //points[2] = -200; + _ACS.SegmentLine(MotionFlags.ACSC_NONE, axes, points, Api.ACSC_NONE, Api.ACSC_NONE, null, null, Api.ACSC_NONE, null); + + _ACS.EndSequenceM(axes); + } + + private void button18_Click(object sender, EventArgs e) + { + lstLog.Items.Add("记录"); + record = true; + } + + private void button15_Click(object sender, EventArgs e) //ExtLine + { + int timeout = 5000; + + Axis[] axes = { Axis.ACSC_AXIS_0, Axis.ACSC_AXIS_1,Axis.ACSC_AXIS_8,Axis.ACSC_NONE }; + double[] points = { 0, 0, 0 }; + // Create segmented motion,coordinates of the initial point + // are(1000, 1000) + _ACS.EnableM(axes); + // Wait axis 0 enabled during 5 sec + _ACS.WaitMotorEnabled(Axis.ACSC_AXIS_0, 1, timeout); + // Wait axis 1 enabled during 5 sec + _ACS.WaitMotorEnabled(Axis.ACSC_AXIS_1, 1, timeout); + + // Wait axis 8 enabled during 5 sec + _ACS.WaitMotorEnabled(Axis.ACSC_AXIS_8, 1, timeout); + _ACS.Segment(MotionFlags.ACSC_NONE, axes, points); + // Add line segment with final point (1000,-1000),vector + // velocity 25000 + points[0] = 100; + points[1] = 100; + points[2] = -10; + _ACS.ExtLine(axes, points, 25000); + _ACS.Stopper(axes); + // Add line segment with final point (-1000,-1000),vector + // velocity 25000 + points[0] = 100; + points[1] = 200; + points[2] = -100; + _ACS.ExtLine(axes, points, 25000); + _ACS.Stopper(axes); + // Add line segment with final point (-1000,1000),vector + // velocity 25000 + points[0] = 200; + points[1] = 200; + points[2] = -200; + _ACS.ExtLine(axes, points, 25000); + _ACS.Stopper(axes); + // Add line segment with final point (1000,1000), vector + // velocity 25000 + points[0] = 200; + points[1] = 100; + points[2] = -100; + _ACS.ExtLine(axes, points, 25000); + // Finish the motion + // End of the multi-point motion + _ACS.EndSequenceM(axes); + } + + private void button16_Click(object sender, EventArgs e) //BlendedLine + { + lstLog.Items.Add("BlendedLine "); + + int timeout = 5000; + Axis[] Axes = { Axis.ACSC_AXIS_0, Axis.ACSC_AXIS_1,Axis.ACSC_AXIS_8, Axis.ACSC_NONE }; + double[] Point = { 1000, 1000 }; + _ACS.BlendedSegmentMotionAsync(MotionFlags.ACSC_NONE, Axes, + Point,//Starting point of motion + 1000, // Segment time + 500, // Segment Acceleration time + 200, // Segment jerk time + 0);// Waiting call + + _ACS.EnableM(Axes); // Enable axes 0 and 1 + _ACS.WaitMotorEnabled(Axis.ACSC_AXIS_0, 1, timeout); + _ACS.WaitMotorEnabled(Axis.ACSC_AXIS_1, 1, timeout); + _ACS.WaitMotorEnabled(Axis.ACSC_AXIS_8, 1, timeout); + + + + double[] FinalPoint = { 100, 100,-50}; + _ACS.BlendedLine(MotionFlags.ACSC_NONE, Axes, + FinalPoint, 1000, 200, 300, 0); + _ACS.EndSequenceM(Axes); + + record =true; + } + + private void button17_Click(object sender, EventArgs e) //MoveM 方法 + { + + + } + + private void button1_Click(object sender, EventArgs e) + { + + } + + #endregion + + + + + + + } } diff --git a/Motion/ACS Motion/bin/x64/Debug/ACS_Motion.exe b/Motion/ACS Motion/bin/x64/Debug/ACS_Motion.exe index e62b219172be2701c3a9a60750e8955362bede16..dd0fcfbace7f157324ed9890d32000ad131f91b6 100644 GIT binary patch delta 45896 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

BDCIq{tW(QGUV$>BzS+*! zu4rZuH+#+3H#Vt7)zfS0)V=LAeF9~Z`lHalA!WIFdQF@9sAU@5{+MI$U&~$J*rqyb zSGQ)=B#c2uRkwO5^DU1w<<+W|x%GKTF+wHHcU z2pT;`G`^k@eSlt;)SsI;n8!NoYrph$hQz+MlfmuV!SVo%R+~Ddp2VNZUf-BkPIhj6 zliJ$Ck^2IIu2XyE*o{{@rq_7VW}WK52xZhU2tA`7mJvNHd%cIauEQ{9)UVM{MxBK6 zSLzJ}kyo#EvL7GR&8@Fft!OTzPHkmaS4b#d$ugADGVCXy%&XhQ{#PjL)Mq60cQUkD zB~x%Xg3hRGyIyK)Qxh-}TupPUkqWrn_+N|q&&JU$vqc`jw~<~6?HKive0gGvx}vSU zomwx06ETeOQr`-$2YEsdyo$314?{F=X@JX*@-QXY)b zQ7^Us#lx=$Td3@te;;Lk<|CAMXMcW%8y%XQ7-9dM7c=H?bVcbN%{G9 zw(xw8<=D;^;4`GWEKm6+DL3UiAwSzO4COdyB+AikqpR>%%!zp_A2p9hd2~JHH60UC z4y%{4aSG&?#_1?GWLdj^miRO&-)>;-T{SFkmhyTj$BNfCs`duHOv=BylrNF8TFQJ4 zTJuz+&@|Vu(NA}lOB0nbObJFs@B99Q?oP?;WJVw1)mcwsl1w1F!KbFCHR>~b& zj?f%w;^)%zo6_Uu(!{@4v&WBCafFVQ@=q@13#I(np?tZNCo0M{BDaX|)6U)=pcAC& z2c+qHq#H+u~{VLJSi`ea-CRyR?6Q<;POKFXgc) zvHn+!(cuD}De?ko;{V9Xctzw9E_-=XhCO&t%H!(~g#3QP!NjHZS;4=V;b>J=(S9Ep zn@>c3U&dy*!+kWtrOl%bN>A;{UuvB6;Ax*;%4fxGySSYy!mzfYU@QV%aFE9 z*``SRJ8A7pLQ^ZlzGpQ-N#lL3syTxL=~IE`WvM+d!LQ3_ zmQ~fOuLs&C^~(vkTn$Y2TiFkFBh=I>zV;Nff_fv+UVt`A&Dm4xJhcMq81 z^VjnN#Tzk%Hst-*b?yRnV61L|XzSIzI87z%z8chRP#F)EJb-M%+1gbf;UxM$C)Y@u zeYo*+)I(_5RU70$ZgY9I^1mSCQON&bkL?cp0(S-f^;qKk=cqR@Q2*TYr!r`haqG)r ztX1#g`xIMIW^mi`Zfl*|17(YvCgm(C=SsOy%44KlCglp0oobcH7x=j6u%Q)Fu0lCX zT_Ex%ltr}`M!4~i@^K&&AU{w&S#1mC!Ro!#dulGe!)u4L80C9vW@ZuOt@$I>PUq&v zBh@bFXy;gX{jK_Vl&?!`-)lNqy{4)-q`vh)oaeSnzPkg&M16s)h<=l$nwwF zeD68$=2xqsPBzQt-s$L9t?o9!>wPdXe*%4BenwQa=%XvoR zE@y20AZ$i=Tmj^!mTOU#WD5S4XJ3ESn1}uSQobVPHYx8wIm7;IkX-0C?W zVkW-hEOa>q$GDv19Zq}pMQ59Ots#RTwsw6 znpU|Ba~Z4^X3q=I0%Uh}_Fd-~tdb9%ow9n~lyaNDlB9f3N^ci_Dfcx|-jeb|DIGXx zK)Ec>^8NOVdo@CAa5sXW-QD3F-!v5EQ`r`ETY$V;R|Mi>4eeCtw{)sa?o(Lp4+UM? zQ9l8-Z`N^HELVy*LW#}s##`^BzK^`>*SR0M$9E2*{A%+R?j{+V zweFQ&HzVkGTkn+6A9o*;(Wlq-f(lOLH!10i~2pv4wQSSvTCoH zf}_e0s-~!RPrZy^!`0g;$Ed%f>{TPGr{Knt<^EF66Z~*B2FMaYPLlF;wLg$^)XM6G z(&&1%UR_kZUR|p+%086$2IYFSt@`^S|4Pa^HT|gFUtOWRYt+}&cI7x(XN0qtGuxSm zWpkc$gL9j+*?GqKsk7Vpy>p#=pZgVeoBOm|jT~4bk7=q~AF5KSHuosXS6iP%`J4Q= zP&)OLYnxbJ(7B_^Rg>@-$5oTz=cp+tU9~4#aMe^*t6UF>vmVNH)rfM2!qc1qCR+Pn ze{=X0$VXpt@f||==RX+=vBnNcq*Cg4c%a39(^KrOZ)8pAE2om5yK|A<{ePss0nfyW zhw|=Esb?S$dCHfMl?P2Oqc2Z>q*y-Zk)=as&RjlK9dO|3%apPd+;Z>ETb**% z>#gOBe>BbQoVMkWA6@U(PQ|QG<$qgdz5Js_$0=9u9+huCO|4PqVL7ivc?O>L?OK9G zx8+Z}FR9wn|K^@f%j3&dJ$&_&gBNZob^KxN2X9_p{`S9(ANyiW(RI3qWbpl%Z3D0Q zzjileb4@uH|JnwwZX4K8Zv0hu=fI!vCgNOoBc6*5eB9L3I_R_x)|3zYRo>eOQ&?q+ zYDDY6MmN($!zMNbwL0s%ja5aJt0_8-t%tT|8*|b!ThIA!PV2(fLxp*;wZ53?M%$e^ z{KL9#YU<7woz}%b&}es#E$3>oRdmi~{Fcg{zwYohU>h|y)fTG|)zH>M8*|y}Mv1B> zi+*j$APNc5aYnQripnO@(Ogw7ivd9Ue!%#ht!-?(K*Gzx1)*1=?Iu#Y>=`|(V1T;% zY=)+}T$?wrp)OmKYdblhsX~}J8G*r3HAU4nI4+m1X&b_Tfp)hIPNv>XU4m&F*z96= zH%YV)<&@JlIJ7*6(U zR`|bGvKQTc%_=t3)ZkaF_OS~^8`$YF&0HXMuJ%wG9O7&T7m;hji=mw!zEG5B~NDuPW2F0zWJ9vkE_}@pCeMF2K)) z_*sUZwfI?AooO2wWU-ya4nQ6Fky!)L}Chse)LxpT{7zdOlU-|*JfhPRx(woRJ!`VD6?tufnmBbyC8 z;Hm+9xA(D24q5VV+ux}=X!p29U;M`}79Di?OXaQSe%WnvwifSm&vtHUy5H?{p5A)d R{cgF+d1h<=EAH>B{x8b@S7iVI diff --git a/Motion/ACS Motion/bin/x64/Debug/ACS_Motion.pdb b/Motion/ACS Motion/bin/x64/Debug/ACS_Motion.pdb index 839961b41fb42365d2381917c24b24a0170f3633..62e6d118b2fa41f9c6b2d808fa3574ac600c51fa 100644 GIT binary patch literal 71168 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 MOW;M1&