📄 ctrlcard.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 + -