⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ctrlcard.cpp

📁 运动控制卡的详细开发资料
💻 CPP
字号:
// CtrlCard.cpp: implementation of the CCtrlCard class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "DEMO.h"
#include "CtrlCard.h"
#include "adt8940.h"


#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CCtrlCard::CCtrlCard()
{

}
/*******************初始化函数************************

    该函数中包含了控制卡初始化常用的库函数,这是调用
    
    其他函数的基础,所以必须在示例程序中最先调用
    
    返回值<=0表示初始化失败,返回值>0表示初始化成功

*****************************************************/
int CCtrlCard::Init_Board()
{
	Result = adt8940_initial() ;         //卡初始化函数    
	
	if (Result <= 0) return Result;

	m_nHardwareVer = get_hardware_ver(0);      //获取硬件版本
    
    for (int i = 1; i<=MAXAXIS; i++){
    
	   if(m_nHardwareVer==1)                   //硬件版本为1时,须设定范围
	   {
			set_range (0, i, 500 / 5);         //设定范围,设置初始倍率为5
	   }
       
       set_limit_mode (0, i, 0, 0, 0);   //设定限位模式,设正负限位有效,低电平有效
       
       set_command_pos (0, i, 0);        //清逻辑计数器
       
       set_actual_pos (0, i, 0);         //清实位计数器
       
       set_startv (0, i, 1000);          //设定起始速度
       
       set_speed (0, i, 1000);           //设定驱动速度
                         
    }
    
    return 1;

}


/**********************设置速度模块***********************

    依据参数的值,判断是匀速还是加减速

    设置范围,是决定倍率的参数

    在硬件版本为1时,设置范围决定倍率

    在硬件版本为2时,已经停用
	
	设置轴的初始速度、驱动速度和加速度

    参数:axis   -轴号

	      startv -初始速度

		  speed  -驱动速度

          add    -加速度

		  ratio  -倍率
    
    返回值=0正确,返回值=1错误

*********************************************************/
int CCtrlCard::Setup_Speed(int axis, long startv, long speed, long add ,long ratio)
{
	if(m_nHardwareVer==1)            //硬件版本为1 ,须于范围联系
	{
		if (startv - speed >= 0) 
		{
			Result = set_range(0, axis, 500/ratio);
    
			set_startv(0, axis, startv/ratio);
			
			set_speed (0, axis, startv/ratio);
		}
		else
		{
			Result = set_range(0, axis, 500/ratio);
    
			set_startv(0, axis, startv/ratio);
			
			set_speed (0, axis, speed/ratio);
			
			set_acc (0, axis, add/125/ratio);
        
		}
	}
	else                               //硬件版本为2 ,无范围设置
	{
		if (startv - speed >= 0) 
		{
    
			Result = set_startv(0, axis, startv);
			
			set_speed (0, axis, startv);
		}
		else
		{
    
			Result = set_startv(0, axis, startv);
			
			set_speed (0, axis, speed);
			
			set_acc (0, axis, add/125);
        
		}

	}

	return Result;

}
/*********************单轴驱动函数**********************

    该函数用于驱动单个运动轴运动

    参数: axis-轴号,value-输出脉冲数
    
    返回值=0正确,返回值=1错误

*******************************************************/
int CCtrlCard::Axis_Pmove(int axis, long value)
{
	Result = pmove(0, axis, value);
	
	return Result;

}

/*******************任意两轴插补函数********************

    该函数用于驱动任意两轴进行插补运动

    参数:axis1,axis2-轴号、value1,value2-脉冲数
    
    返回值=0正确,返回值=1错误

*******************************************************/
int CCtrlCard::Interp_Move2(int axis1, int axis2, long value1, long value2)
{
	Result = inp_move2(0, axis1, axis2, value1, value2);

	return Result;

}
/*******************任意三轴插补函数********************

    该函数用于驱动任意三轴进行插补运动

    参数:axis1,axis2,axis3-轴号、value1,value2,value3-脉冲数
    
    返回值=0正确,返回值=1错误

*******************************************************/
int CCtrlCard::Interp_Move3(int axis1, int axis2, int axis3, long value1, long value2, long value3)
{
	Result = inp_move3(0, axis1, axis2, axis3, value1, value2, value3);

	return Result;

}

/*******************四轴插补函数****************************

    该函数用于驱动XYZW四轴进行插补运动
    
	参数:value1,value2,value3,value4-输出脉冲数

    返回值=0正确,返回值=1错误

***********************************************************/
int CCtrlCard::Interp_Move4(long value1, long value2, long value3, long value4)
{
	Result = inp_move4(0, value1, value2, value3, value4);

	return Result;

}

/*****************停止轴驱动******************************

    该函数用于立即或减速停止轴的驱动

	参数:axis-轴号、mode-减速方式(0-立即停止, 1-减速停止)
    
    返回值=0正确,返回值=1错误

************************************************************/
int CCtrlCard::StopRun(int axis, int mode)
{
	if (mode == 0)        //立即停止
    
        Result = sudden_stop(0, axis);
        
    else                 //减速停止
    
        Result = dec_stop(0, axis);
        
    return Result;

}
/*****************获取轴的驱动状态**************************

    该函数用于获取单轴的驱动状态或插补驱动状态

    参数:axis-轴号,value-状态指针(0-驱动结束,非0-正在驱动)
	  
		  mode(0-获取单轴驱动状态,1-获取插补驱动状态)
    
    返回值=0正确,返回值=1错误

************************************************************/
int CCtrlCard::Get_Status(int axis, int &value, int mode)
{
	if (mode==0)          //获取单轴驱动状态

		Result=get_status(0,axis,&value);

	else                  //获取插补驱动状态

		Result=get_inp_status(0,&value);

	return Result;

}

/*****************获取运动信息******************************

    该函数用于反馈轴当前的逻辑位置,实际位置和运行速度

    参数:axis-轴号,LogPos-逻辑位置,ActPos-实际位置,Speed-运行速度
    
    返回值=0正确,返回值=1错误

************************************************************/
int CCtrlCard::Get_CurrentInf(int axis, long &LogPos, long &ActPos, long &Speed )
{
	Result = get_command_pos(0, axis, &LogPos);

	get_actual_pos(0, axis, &ActPos);

	get_speed(0, axis, &Speed);

	return Result;

}

/***********************读取输入点*******************************

     该函数用于读取单个输入点

     参数:number-输入点(0 ~ 39)

     返回值:0 - 低电平,1 - 高电平,-1 - 错误

****************************************************************/
int CCtrlCard::Read_Input(int number)
{
	Result = read_bit(0, number);
    
	return Result;
}

/*********************输出单点函数******************************

    该函数用于输出单点信号

    参数: number-输出点(0 ~ 15),value 0-低电平、1-高电平

    返回值=0正确,返回值=1错误
****************************************************************/

int CCtrlCard::Write_Output(int number, int value)
{
	Result = write_bit(0, number, value);

	return Result;

}
/*******************设置位置计数器*******************************

     该函数用于设置逻辑位置和实际位置

     参数:axis-轴号,pos-设置的位置值
	       mode 0-设置逻辑位置,非0-设置实际位置

     返回值=0正确,返回值=1错误
****************************************************************/
	 
int CCtrlCard::Setup_Pos(int axis, long pos, int mode)
{
	if(mode==0)
	{
		Result = set_command_pos(0, axis, pos);
	}
	else
	{
		Result = set_actual_pos(0, axis, pos);
	}

	return Result;

}
/********************获取版本信息************************
      
	该函数用于获取硬件版本和函数库版本

	参数:LibVer-库版本号,HardwareVer - 硬件版本号

*********************************************************/
void CCtrlCard::Get_Version(float &LibVer, int &HardwareVer)
{
	int  Ver;

	Ver = get_lib_version(0);

	LibVer = float(Ver%100)/10;

	HardwareVer = get_hardware_ver(0);

}
/********************设置脉冲输出方式**********************
      
	该函数用于设置脉冲的工作方式

	参数:axis-轴号, value-脉冲方式 0-脉冲+脉冲方式 1-脉冲+方向方式

    返回值=0正确,返回值=1错误

    默认脉冲方式为脉冲+方向方式

    本程序采用默认的正逻辑脉冲和方向输出信号正逻辑

*********************************************************/
int CCtrlCard::Setup_PulseMode(int axis, int value)
{
	Result = set_pulse_mode(0, axis, value, 0, 0);

	return Result;

}
/********************设置限位信号方式**********************

   该函数用于设定正/负方向限位输入nLMT信号的模式

   参数: axis-轴号
          value1   0-正限位有效  1-正限位无效
		  value2   0-负限位有效  1-负限位无效
		  logic    0-低电平有效  1-高电平有效
   默认模式为:正限位有效、负限位有效、低电平有效

   返回值=0正确,返回值=1错误
  *********************************************************/
int CCtrlCard::Setup_LimitMode(int axis, int value1, int value2, int logic)
{
	Result = set_limit_mode(0, axis, value1, value2, logic);

	return Result;

}
/********************设置stop0信号方式**********************

   该函数用于设定stop0信号的模式

   参数: axis-轴号
          value   0-无效  1-有效
		  logic   0-低电平有效  1-高电平有效
   默认模式为:无效

   返回值=0正确,返回值=1错误
  *********************************************************/
int CCtrlCard::Setup_Stop0Mode(int axis, int value, int logic)
{
	Result = set_stop0_mode(0, axis, value ,logic);

	return Result;

}
/********************设置stop1信号方式**********************

   该函数用于设定stop1信号的模式

   参数: axis-轴号
          value   0-无效  1-有效
		  logic   0-低电平有效  1-高电平有效
   默认模式为:无效

   返回值=0正确,返回值=1错误
  *********************************************************/
int CCtrlCard::Setup_Stop1Mode(int axis, int value, int logic)
{
	Result = set_stop1_mode(0, axis, value, logic);

	return Result;

}

/********************设置硬件停止模式**********************

   该函数用于设定硬件停止信号的模式,硬件版本为1时无此功能

   参数: value   0-无效  1-有效
		  logic   0-低电平有效  1-高电平有效
   默认模式为:无效

   返回值=0正确,返回值=1错误

   硬件停止信号固定使用P3端子板34引脚(IN31)
  *********************************************************/
int CCtrlCard::Setup_HardStop(int value, int logic)
{
	Result = set_suddenstop_mode(0, value, logic);

	return Result;

}
/********************设置延时**********************

   该函数用于设定延时,硬件版本为1时无此功能

   参数: time - 延时时间(单位为us)

   返回值=0正确,返回值=1错误

  *********************************************************/
int CCtrlCard::Setup_Delay(long time)
{
	Result = set_delay_time(0, time*8);

	return Result;

}
/********************获取延时状态**********************

   该函数获取延时状态,硬件版本为1时无此功能

   返回值   0-延时结束    1-延时进行中

  *********************************************************/
int CCtrlCard::Get_DelayStatus()
{
	Result = get_delay_status(0);

	return Result;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -