雷赛运动控制卡编程(2)限位设定与回原方式、脉冲模式设置

一、限位开关及急停开关的设置

限位开关的设置

            //设置限位开关
            // dmc_set_el_mode
            ushort _cardNo=0;
            ushort _axisNo = 0;
            ushort _enable = 1;  // 正负限位使能 
            ushort _elLogic = 0;  // 正负限位 低电平 有效
            ushort _model = 0;//  正负限位停止方式为立即停止
            LTDMC.dmc_set_el_mode( _cardNo, _axisNo, _enable, _elLogic, _model);

急停开关设置

            // 急停设置
            LTDMC.dmc_set_emg_mode(_cardNo, _axisNo, _enable, _elLogic);

二、回原点设置

回原点的步骤

回原点运动主要步骤如下:
1)使用 dmc_set_home_pin_logic 函数设置原点开关的有效电平;
2)使用 dmc_set_homemode 函数设置回原点方式;
3)设置回原点运动的速度曲线;
4)设置回零偏移量、回零完成是否清零及非限位回零方式遇限位是否反找;
5)使用 dmc_home_move 函数执行回原点运动;

回原方式

方式 0:一次原点回零

适合于行程短、安全性要求高的场合。动作过程为:电机从初
始位置以恒定速度向原点方向运动,当到达原点开关位置,原点信号被触发,电机立即停止(过
程 0);将停止位置设为原点位置

 方式 1:一次原点回零加回找

该方式先进行方式 0运动,完成后再反向回找原点开关的边缘位置,当原点信号第一次无
效的时候,电机立即停止;

 方式 2:两次原点回零

该方式为方式 0和方式1的组合。先进行方式 1 的回零加反找,完成后再 进行方式 0的一次回零

 方式 3:一次原点回零后再同向找 1 个 EZ 信号后回零

该方式在回原点运动过程中,当找到原点信号后,还要等待该轴的 EZ 信号出现,此时电
机停止

 方式 4:记 1 个 EZ 信号回零

方式 5:一次原点回零再反找 EZ 信号 

该方式在回原点运动过程中,当找到原点信号后,减速停止,然后以反找速度反向找到 EZ 生效此时电机停止

 方式 6:原点锁存

电机先以设定速度回原点,当原点开关边沿触发时,将当前位置锁存下来, 同时电机减速停止。电机减速停止完成后再反向回找锁存位置,运动到锁存位置,电机停止

 方式 7:原点锁存加同向 EZ 锁存

该方式先以方式 6 执行一次原点锁存回零,完成后继续沿设定回零方向运行到 EZ 信号产
生, EZ 信号产生时锁存当前位置并执行减速停,电机减速停止之后再反向回找 EZ 的锁存位
置,运动到锁存位置,电机停止

方式 8:单独记一个 EZ 锁存

在回零过程中检测到 EZ 有效边沿出现,锁存当前位置,执行减速停,电机减速停止之后 再反向回找 EZ 的锁存位置,运动到锁存位置,电机停止

 方式 9:原点锁存加反向 EZ 锁存

该方式先以方式 6 执行一次原点锁存回零,完成后以与设定回零方向相反的方向运行到 EZ 信号产生, EZ 信号产生时锁存当前位置并执行减速停,电机减速停止之后再反向回找 EZ 的锁存位置,运动到锁存位置,电机停止

方式 10:一次限位回零

该方式以设定速度回原点;适合于行程短、安全性要求高的场合。动作过程为:电机从初
始位置以恒定速度向限位方向运动,当到达限位开关位置,限位信号被触发,电机立即停止(过
程 0);将停止位置设为原点位置

 方式 11:一次限位回零加回找

三、 脉冲模式设置

指令脉冲输出模式

 设置指定轴的脉冲输出模式

 读取指定轴的脉冲输出模式设置

四、函数测试

初始化板卡

 控制卡关闭

控制卡硬件复位函数 

获取控制卡硬件 ID 号

获取控制卡固件版本号

获取控制卡硬件版本号

 Code

        private void InitBtn_Click(object sender, EventArgs e)
        {

            short res;
            res = LTDMC.dmc_board_init();
            if (res <= 0 || res > 8)
            {
                Console.WriteLine("shibai");
                return;
            }
            // 获取轴卡上所有的ID号和固件版本号
            ushort cardNumber = 0;
            uint[] CardTypeList = new uint[8];
            ushort[] CardIdList = new ushort[8];
            res = LTDMC.dmc_get_CardInfList(ref cardNumber, CardTypeList, CardIdList);
            if (res == 0)
            {
                // 卡号
                _CardNo = CardIdList[0];
                // 版本
 
            }
            uint axises = 0;
            // 卡的轴数
          short res2=  LTDMC.dmc_get_total_axes(CardIdList[0], ref axises);
            if(res2==0)
            {
                Movtion_Number.Items.Clear();
                for (ushort i = 0; i < axises; i++)
                {
                    Axises[i] = i;
                    Movtion_Number.Items.Add(Axises[i]);
                }
                Movtion_Number.SelectedItem = 0;
                _Init_flag = true;
            }
        }

        private void ClosedBtn_Click(object sender, EventArgs e)
        {
            if (_Init_flag)
            {
                LTDMC.dmc_board_close();
            }
        }

限位开关设置

 设置 EL 限位信号

设置软限位

 

设置圆弧区域限位配置信息

查询相应轴的状态 

 配置圆弧限位功能使能状态

code 

   public   int  Set_Limit_Switches()
   {
       //设置限位开关
       // dmc_set_el_mode
       ushort _cardNo=0;
       ushort _axisNo = 0;
       ushort _enable = 1;  // 正负限位使能 
       ushort _elLogic = 0;  // 正负限位 低电平 有效
       ushort _model = 0;//  正负限位停止方式为立即停止
       LTDMC.dmc_set_el_mode( _cardNo, _axisNo, _enable, _elLogic, _model);


       // 急停设置
       LTDMC.dmc_set_emg_mode(_cardNo, _axisNo, _enable, _elLogic);





       // 设置EL限位信号
       ushort _el_mode = 3;
       LTDMC.dmc_set_el_home(_cardNo, _axisNo, _el_mode);


       // 设置回零遇限位是否反找
       //ushort _enable = 0;
       LTDMC.dmc_set_home_el_return(_cardNo, _axisNo, _enable);


       // 设置回零偏移量及清零模式
       LTDMC.dmc_set_home_position(_cardNo, _axisNo, _enable, -19);

       // 按指定的方向和速度方式开始回原点
       LTDMC.dmc_home_move(_cardNo, _axisNo);

       // 读取回零状态
       ushort _statble = 0;
       LTDMC.dmc_get_home_result(_cardNo, _axisNo, ref _statble);



       // 设置软限位
       ushort _source_sel = 1;// 0 指令位置计数器   1 编码器计数器
       ushort _sl_action = 1;  // 限位停止方式   0 减速停止   1立即停止
       ushort _N_limit = 1000;  // 负限位位置 单位是pulse 
       ushort _P_limit = 1000;  //  正限位位置 单位是pulse 
       LTDMC.dmc_set_softlimit(_cardNo, _axisNo, _enable, _source_sel, _sl_action, _N_limit, _P_limit);



       //设置圆弧区域限位配置信息
       ushort[] _Axislist = new ushort[14];
       ushort _AxisNum = 1;
       double[] _center = new double[14];
       ushort _radius = 23;
       ushort _source = 1;  // 计数器 选择    0指令位置  1 反馈位置
       ushort _stopMode = 1;  // 限位触发后停止的模式  0 减速停止  1 急停
       LTDMC.dmc_set_arc_zone_limit_config(_cardNo, _Axislist, _AxisNum, _center, _radius, _source, _stopMode);



       // 配置圆弧限位功能使能状态
       ushort _enablearc = 1;
       LTDMC.dmc_set_arc_zone_limit_enable(_cardNo, _enablearc);

       return 0 ;
   }

 位置计数器控制

设置指令脉冲位置

 

Code 

        public  int LocationCounter()
        {
            ushort _cardNo = 0;
            ushort _axisNo = 0;
            ushort _enable = 1;  // 正负限位使能 
            ushort _elLogic = 0;  // 正负限位 低电平 有效
            // 设置指令脉冲位置
            int _position = 2222;
            LTDMC.dmc_set_position(_cardNo, _axisNo, _position);

            // 读取脉冲位置
            LTDMC.dmc_get_position(_cardNo, _axisNo);

            return 0;
        }

回原 

设置 ORG 原点信号  

读取 ORG 原点信号

*设置回原点模式(重点)

注意
1)当回零模式 mode=4 时,回零速度模式将固定为低速回零
2)DMC3C00 后四轴只支持 0、1、2、10、11、12 六种回零模式
3)后三种回零模式最新固件(3XX201611 及以后固件)才支持。正向回零时进行正限
位回零,负向回零时进行负限位回零; 若开始回零时处于限位信号中,会先向设置的
回零方向的反向运动,移出限位信号范围后,再变向,找相应的限位信号;一次限位回
零遇到限位信号后急停;一次限位回零加反找在反找阶段遇到限位信号后急停;二次限
位回零在第二次遇到限位信号后急停;

 读取回原点模式

回零遇限位是否反找

设置回零偏移量及清零模式

设置开启限位反找偏移距离

回原点运动

Code

   public int GoHome()
  {
      //设置原点信号的有效电平
      ushort _cardNo = 0;
      ushort _axisNo = 0;
      ushort _org_log = 0;  // 原点信号低电平有效
      double filter = 0.4;  //保留参数
    
      LTDMC.dmc_set_home_pin_logic(_cardNo, _axisNo,_org_log,filter);


      // 选择回原的模式
      ushort _home_dir = 0;  //负方向回零
      double _vel = 0;   //回零速度模式为低速
      ushort _mode = 1;  //回零模式为方式 1,一次回零
      ushort _EZ_count = 0;//保留参数
      LTDMC.dmc_set_homemode(_cardNo, _axisNo, _home_dir, _vel, _mode, _EZ_count);


      // 回零遇到限位是否反找
      ushort   _anble= 0;
      LTDMC.dmc_set_home_el_return(_cardNo, _axisNo, _anble);


      //  设置回零 偏移量以及清零模式
      ushort _enable_is_zero = 0;  // 0 不清零  1 回零后清零  然后偏移   2 回零以及偏移完成后清零
      LTDMC.dmc_set_home_position(_cardNo, _axisNo, _enable_is_zero,2900);




      // 设置开启限位反找偏移距离
      double _distance = 20;
      LTDMC.dmc_set_el_ret_deviation(_cardNo, _axisNo, _anble, _distance);


      // 回原点运动
      LTDMC.dmc_home_move(_cardNo, _axisNo);




      return 0;
  }

 原点锁存

设置原点锁存模式

 清除原点锁存标志

 Code

   public int OrgionLocked()
   {

       //
       ushort _cardNo = 0;
       ushort _axisNo = 0;
       ushort _enable = 0;  // 原点锁存模式  0 禁止 1 允许
       ushort _logic = 0;//  设置触发的方式 0 下降沿   1 上升沿
       ushort _source = 1;   // 0 指令位置计数器     1 编码器计数器
       // 设置原点锁存模式
       LTDMC.dmc_set_homelatch_mode(_cardNo, _axisNo, _enable, _logic, _source);

       //清除原点锁存标志
       LTDMC.dmc_reset_homelatch_flag(_cardNo, _axisNo);

       return 0;
   }

运动状态检测及控制

读取指定轴的停止原因

清除指定轴的停止原因

 读取当前速度值

 检测主卡与接线盒的通讯连接状态

 设置所有输出电平状态

检测指定轴的运动状态

检测坐标系的运动状态

 读取指定轴有关运动信号的状态

指定轴停止运动

停止坐标系内所有轴的运动

紧急停止所有轴

读取正在运动的目标位置

Code

  public  int  StationTestAndControl()
      {

      // 读取指定轴的停止原因
      ushort _cardNo = 0;
      ushort _axisNo = 0;
      ushort outmode = 4;
      int  _stopReason=-1;
      LTDMC.dmc_get_stop_reason(_cardNo, _axisNo, ref _stopReason);


      // 清除指定轴的停止原因
      LTDMC.dmc_clear_stop_reason(_cardNo, _axisNo);


      // 读取当前轴的速度
   double  _speed=    LTDMC.dmc_read_current_speed(_cardNo, _axisNo);



      // 检测主卡与接线盒的通讯状态
      ushort _state = 1;   //  连接状态   0  连接 1 断开
       LTDMC.dmc_LinkState(_cardNo, ref _state);


      //  设置所有输出电平状态
      ushort _State = 1;
      LTDMC.dmc_set_output_status_repower(_cardNo, _State);


      // 检测指定轴的运动状态
      short _axisState= LTDMC.dmc_check_done(_cardNo, _State);   // 1 指定轴已经停止  0 正常运行


      // 检测坐标系的运动状态
      short _coorState= LTDMC.dmc_check_done_multicoor(_cardNo, _State);   // 0 正在使用中,1 正常运行


      //  读取指定轴有关运动信号的状态
      LTDMC.dmc_axis_io_status(_cardNo, _axisNo);




      // 指定轴停止运行
      ushort _stop_mode=21;
      LTDMC.dmc_stop(_cardNo, _axisNo,  _stop_mode);


      // 停止坐标系内所有轴的运动
      LTDMC.dmc_stop_multicoor(_cardNo, _axisNo, _stop_mode);

      // 紧急停止所有轴
      LTDMC.dmc_emg_stop(_cardNo);

      // 读取正在运动的目标位置
      LTDMC.dmc_get_target_position(_cardNo, _axisNo);
      return 0; 
     }

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值