C#控制固高运动卡进行点位,Jog和插补运动

csharp 复制代码
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using static gts.mc;

namespace GTS
{
    public partial class Form1 : Form
    {
        private bool IsOpend;
        private short rtn;
        short Axis;
        short JogAxis;
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void button1_Click(object sender, EventArgs e)
        {

        }

        private void opend_Click(object sender, EventArgs e)
        {

            rtn = gts.mc.GT_Open(0,1);
            AxisNumber.SelectedIndex = 3;//选定R轴
            if (rtn == 0) 
            {              
                CommandPrint("GT_Open", 0);
                IsOpend =true;
            }
            else
            {
                CommandPrint("GT_Open", rtn);
            }
        }

        /// <summary>
        /// 复位控制卡
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void 复位控制卡_Click(object sender, EventArgs e)
        {
            if (IsOpend==true)
            {
               rtn= GT_Reset();
                CommandPrint("GT_Reset", rtn);
            }
        }

        private void CommandPrint(string cmdName,short rtn)
        {
            Console.WriteLine($"调用命令:{cmdName} ,返回码结果: {rtn}");
        }

        /// <summary>
        /// 初始化控制卡
        /// </summary>
        string Initialize_Filen_ame = "";//文件名
        private void 初始化控制卡_Click(object sender, EventArgs e)
        {
            rtn= GT_LoadConfig(Initialize_Filen_ame);

            Axis = Convert.ToInt16(AxisNumber.Text);
            GT_PrfTrap(Axis);
        }

        /// <summary>
        /// 清除状态
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void 清除状态_Click(object sender, EventArgs e)
        {
            Axis = Convert.ToInt16(AxisNumber.Text);
            rtn=GT_ClrSts(Axis, 8);//清除1到8轴状态
            CommandPrint("GT_ClrSts", rtn);
        }

        /// <summary>
        /// 位置清零
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void 位置清零_Click(object sender, EventArgs e)
        {
           rtn=GT_ZeroPos(Axis,8);//1到8轴位置清零
           CommandPrint("GT_ZeroPos", rtn);
        }

        /// <summary>
        /// 点位运动
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void 点位运动_Click(object sender, EventArgs e)
        {

            Axis = Convert.ToInt16(AxisNumber.Text);
            rtn = GT_ClrSts(Axis, 8);//清除1到8轴状态

            TTrapPrm trap=new TTrapPrm();

            //获取参数
            double acc = Convert.ToDouble(Acceleration.Text);
            double dec=Convert.ToDouble(Deceleration.Text);
            short SmoothTime = Convert.ToInt16(SmoothingTime.Text);

            //设置参数
            trap.acc= acc;
            trap.dec= dec;
            trap.smoothTime = SmoothTime;
            trap.velStart = 10;

           // Axis = Convert.ToInt16(AxisNumber.Text);
            rtn = GT_SetTrapPrm(Axis, ref trap);
            CommandPrint("GT_SetTrapPrm", rtn);

            //设置目标位置和速度
            int pos = Convert.ToInt32(Position.Text);
            rtn = GT_SetPos(Axis, pos);
            CommandPrint("GT_SetPos", rtn);

            double vel = Convert.ToDouble(Speed.Text);
            rtn= GT_SetVel(Axis, vel);
            CommandPrint("GT_SetVel", rtn);

            //启动点位运动
            rtn = GT_Update(1 << (Axis - 1));
            CommandPrint("GT_Update", rtn);
        }


        /// <summary>
        /// 停止运动
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void 停止运动_Click(object sender, EventArgs e)
        {
            Axis = Convert.ToInt16(AxisNumber.Text);
            rtn = GT_Stop(1 << (Axis - 1), 0);
            CommandPrint("GT_Stop", rtn);
        }

        /// <summary>
        /// 更新监控数据
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void timer1_Tick(object sender, EventArgs e)
        {
            if (AxisNumber.SelectedIndex > 0)
            {
                Axis = Convert.ToInt16(AxisNumber.Text);

                GT_GetPrfPos(Axis, out double prfPos, 1, out uint clk);
                GT_GetEncPos(Axis, out double encPos, 1, out clk);
                GT_GetPrfVel(Axis, out double prfVel, 1, out clk);
                GT_GetEncVel(Axis, out double encVel, 1, out clk);

                PrfPos.Text = Math.Round(prfPos, 1).ToString();
                EncPos.Text = Math.Round(encPos, 1).ToString();
                PrfVel.Text = Math.Round(prfVel, 1).ToString();
                EncVel.Text = Math.Round(encVel, 1).ToString();
            }
              
        }

        /// <summary>
        /// 启动Jog模式
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void openJog_Click(object sender, EventArgs e)
        {
           
        }


        /// <summary>
        /// Jog运动松开按钮时
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Jog_MouseUp(object sender, MouseEventArgs e)
        {
            JogAxis = Convert.ToInt16(JogAxisNumber.Text);
            rtn = GT_Stop(1 << (JogAxis - 1), 0);
            CommandPrint("GT_Stop", rtn);
        }


        /// <summary>
        /// 按下正向运动
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void ForJog_MouseDown(object sender, MouseEventArgs e)
        {
            //连接运动卡
            rtn = gts.mc.GT_Open(0, 1);
            if (rtn == 0)
            {
                CommandPrint("GT_Open", 0);
                IsOpend = true;
            }
            else
            {
                CommandPrint("GT_Open", rtn);
            }


            //启动Jog模式
            JogAxis = Convert.ToInt16(JogAxisNumber.Text);
            rtn = GT_PrfJog(JogAxis);
            CommandPrint("GT_PrfJog", rtn);

            //清除状态
            GT_ClrSts(JogAxis, 8);

            TJogPrm jog = new TJogPrm();
            //设置加速度和减速度
            double acc = Convert.ToDouble(JogAcc.Text);
            double dec = Convert.ToDouble(JogDec.Text);
            jog.acc = acc;
            jog.dec = dec;

            //设置jog模式下的运动参数          
            GT_SetJogPrm(JogAxis, ref jog);

            //设置目标速度
            double vel;
            if (JogAxis < 4)//R轴和XY轴的反应速度不一样
            {
                vel = Convert.ToDouble(JogVel.Text) * 10;
            }
            else
            {
                vel = Convert.ToDouble(JogVel.Text)/5;
                jog.acc = jog.acc / 5;
                jog.dec = jog.dec / 5;
            }
            rtn = GT_SetVel(JogAxis, vel);

            GT_Update(1 << (JogAxis - 1));
        }

        /// <summary>
        /// 按下负向运动
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void NegJog_MouseDown(object sender, MouseEventArgs e)
        {
            //连接运动卡
            rtn = gts.mc.GT_Open(0, 1);
            if (rtn == 0)
            {
                CommandPrint("GT_Open", 0);
                IsOpend = true;
            }
            else
            {
                CommandPrint("GT_Open", rtn);
            }

            //启动Jog模式
            JogAxis = Convert.ToInt16(JogAxisNumber.Text);
            rtn = GT_PrfJog(JogAxis);
            CommandPrint("GT_PrfJog", rtn);

            //清除状态
            GT_ClrSts(JogAxis, 8);

            TJogPrm jog = new TJogPrm();
            //设置加速度和减速度
            double acc = Convert.ToDouble(JogAcc.Text);
            double dec = Convert.ToDouble(JogDec.Text);
            jog.acc = acc;
            jog.dec = dec;
            

            //设置jog模式下的运动参数
            GT_SetJogPrm(JogAxis, ref jog);

            //设置目标速度
            double vel;
            if (JogAxis < 4)//R轴和XY轴的反应速度不一样
            {
                vel = Convert.ToDouble(JogVel.Text) * 10;
            }
            else
            {
                 vel = Convert.ToDouble(JogVel.Text)/5;
                jog.acc = jog.acc / 5;
                jog.dec = jog.dec / 5;
            }
            rtn = GT_SetVel(JogAxis, -vel);

            GT_Update(1 << (JogAxis - 1));
        }



        /// <summary>
        /// 建立插补坐标系
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void BuildSystem_Click(object sender, EventArgs e)
        {
            var crd = new TCrdPrm();

            //设置坐标系维度
            crd.dimension = 2;
            crd.synVelMax = 500;
            crd.synAccMax = 3;
            crd.evenTime = 10;

            //规划XY轴
            crd.profile1 = 1;//X轴
            crd.profile2 = 2;//Y轴

            //设置原点
            crd.setOriginFlag = 1;
            crd.originPos1 = 100;
            crd.originPos2 = 100;

            rtn=GT_SetCrdPrm(1,ref  crd);
            CommandPrint("GT_SetCrdPrm", rtn);
        }


        /// <summary>
        /// 定义直线插补
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Linear_Int_Click(object sender, EventArgs e)
        {
           rtn= GT_LnXY(1, -200000, -200000, 100, 0.1, 0, 0);
            GT_LnXY(2, -400000, -400000, 100, 0.1, 0, 0);
            CommandPrint("GT_LnXY", rtn);
           rtn= GT_CrdStart(1, 0);
            CommandPrint("GT_CrdStart", rtn);
        }


        /// <summary>
        /// 圆弧插补
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Circular_Int_Click(object sender, EventArgs e)
        {
            GT_LnXY(1, 10000, 10000, 4, 0.1, 0, 0);
            rtn = GT_ArcXYC(1, 10000, 10000, 2000, 20000, 0, 5, 0.5, 0, 0);
            CommandPrint("GT_ArcXYC", rtn);
            rtn = GT_CrdStart(1, 0);
        }

        private void ForMotion_Click(object sender, EventArgs e)
        {

        }
    }

}
相关推荐
19H2 小时前
Flink-Source算子状态恢复分析
c#·linq
weixin_472339464 小时前
高效处理大体积Excel文件的Java技术方案解析
java·开发语言·excel
枯萎穿心攻击4 小时前
响应式编程入门教程第二节:构建 ObservableProperty<T> — 封装 ReactiveProperty 的高级用法
开发语言·unity·c#·游戏引擎
Eiceblue6 小时前
【免费.NET方案】CSV到PDF与DataTable的快速转换
开发语言·pdf·c#·.net
m0_555762906 小时前
Matlab 频谱分析 (Spectral Analysis)
开发语言·matlab
浪裡遊7 小时前
React Hooks全面解析:从基础到高级的实用指南
开发语言·前端·javascript·react.js·node.js·ecmascript·php
lzb_kkk8 小时前
【C++】C++四种类型转换操作符详解
开发语言·c++·windows·1024程序员节
好开心啊没烦恼8 小时前
Python 数据分析:numpy,说人话,说说数组维度。听故事学知识点怎么这么容易?
开发语言·人工智能·python·数据挖掘·数据分析·numpy
简佐义的博客9 小时前
破解非模式物种GO/KEGG注释难题
开发语言·数据库·后端·oracle·golang