Skip to content

驱动

定时器的初始化及设置

void timeTest()
{
    RTimer timer;
    TimeSlot timeslot;
    gettimestart(&timeslot);
    initUserTimer(&timer, 1, 3); //初始化时钟
    while (1)
    {
        userTimer(&timer); 
        // userTimerE(&timer); // 定时,无论RTimer.cycle_times为多少,按照总线时间返回,总线周期内阻塞,当到达RTimer.cycle_times设置的定时周期返回值为ture(1),否则,为false(0)
        gettimeend(&timeslot);
        printftimediff(&timeslot);
        gettimestart(&timeslot);
    }
}

initUserTimer 初始化时钟,实现总线整数倍时钟定时

userTimer 定时,按照设置的RTimer.cycle_times返回,定时时间未到,函数阻塞

userTimerE 定时,无论RTimer.cycle_times为多少,按照总线时间返回,总线周期内阻塞,当到达RTimer.cycle_times设置的定时周期返回值为ture(1), 否则,为false(0)

获取驱动设备名

void Test()
{
    int err=0;
    int robot_index=0;
    //获取索引robot_index的机器人名称
    const char* robot_name=get_name_robot_device(get_deviceName(0,NULL), robot_index);
    if (NULL==robot_name)
    {
        return -1;
    }
}

get_name_robot_device 获取机器人子设备名称

get_deviceName 获取驱动设备名(创建时指定的名称)

一轴上/下电

void Test()
{
    int err=0;
    int robot_index=0;
    //获取索引robot_index的机器人名称
    const char* robot_name=get_name_robot_device(get_deviceName(0,NULL), robot_index);
    if (NULL==robot_name)
    {
        return -1;
    }
    int axis_ID=1;
    //一轴上电
    err=axis_power_on(robot_name,axis_ID);
    if (0!=err)
    {
        Rdebug("2\n");
    }
    //一轴下电
    err = axis_power_off(robot_name,axis_ID);
    if (0!=err)
    {
        Rdebug("3\n");
    }
}

axis_power_on 轴使能

axis_power_off 轴去使能

robot_name 设备名称

axis_ID 轴地址(1,2,3,······)

数字输入获取/输出设置

void Test()
{
    int err=0;
    int robot_index=0;
    //获取索引robot_index的机器人名称
    const char* robot_name=get_name_robot_device(get_deviceName(0,NULL), robot_index);
    if (NULL==robot_name)
    {
        return -1;
    }
    //获取第一数字输入
    int id_index=0;
    int flag=1;
    flag=get_di(robot_name, id_index);
    //设置第一路数字输出
    err=set_do(robot_name, id_index,flag);
    if (0!=err)
    {
        Rdebug("8\n");
    }
}

get_di 获取数字输入

set_do 设置数字输出

robot_name 设备名称

id_index 数字输出索引 (0, 1, 2, 3, ...)

flag 输出值 (0, 1)

第一模拟输入获取/输出设置

void Test()
{
    int err=0;
    int robot_index=0;
    //获取索引robot_index的机器人名称
    const char* robot_name=get_name_robot_device(get_deviceName(0,NULL), robot_index);
    if (NULL==robot_name)
    {
        return -1;
    }
    int id_index=0;
    //获取第一模拟输入
    short ai=1;
    ai=get_ai(robot_name, id_index);
    //设置第一路模拟输出
    err=set_ao(robot_name, id_index, ai);
    if (0!=err)
    {
        Rdebug("9\n");
    }
    Rdebug("over\n");
}

get_ai 获取模拟输入

set_ao 设置模拟输出

robot_name 设备名称

id_index 模拟输出索引 (0, 1, 2, 3, ...)

ai 输出值

获取机器人自由度

void Test()
{
    int err=0;
    int robot_index=0;
    //获取索引robot_index的机器人名称
    const char* robot_name=get_name_robot_device(get_deviceName(0,NULL), robot_index);
    if (NULL==robot_name)
    {
        return -1;
    }
    int dof=get_group_dof(robot_name);
    //数据会保存到日志文件,Rdebug用于保存操作过程中的关系信息。
    Rdebug("dof=%d\n",dof);
}

get_group_dof 获取机器人自由度

robot_name 设备名称

机器人上/下电

void Test()
{
    int err=0;
    int robot_index=0;
    //获取索引robot_index的机器人名称
    const char* robot_name=get_name_robot_device(get_deviceName(0,NULL), robot_index);
    if (NULL==robot_name)
    {
        return -1;
    }
    //机器人上电
    err = group_power_on(robot_name);
    if (0!=err)
    {
        Rdebug("6\n");
    }
    //机器人下电
    err = group_power_off(robot_name);
    if (0!=err)
    {
        Rdebug("7\n");
    }
}

get_group_dof 轴组使能

get_group_dof 轴组去使能

robot_name 设备名称

一轴关节力矩获取/设置

void Test()
{   
    int err=0;
    int robot_index=0;
    //获取索引robot_index的机器人名称
    const char* robot_name=get_name_robot_device(get_deviceName(0,NULL), robot_index);
    if (NULL==robot_name)
    {
        return -1;
    }    
    //获取一轴关节力矩
    double torque=0;
    int axis_ID=1;
    torque=GetAxisTorque(robot_name, axis_ID);
    //设置一轴关节力矩
    err=SetAxisTorque(robot_name, torque, axis_ID);
    if (0!=err)
    {
        Rdebug("1\n");
    }
}

GetAxisTorque 设置一轴关节力矩

SetAxisTorque 设置一轴关节力矩

robot_name 设备名称

torque 目标关节力

axis_ID 轴地址(1,2,3,······)

轴组关节位置获取/设置

void Test()
{   
    int err=0;
    int robot_index=0;
    //获取索引robot_index的机器人名称
    const char* robot_name=get_name_robot_device(get_deviceName(0,NULL), robot_index);
    if (NULL==robot_name)
    {
        return -1;
    }
    //得到机器人当前关节角度(rad)
    double position[10];
    err=GetGroupPosition(robot_name, position);
    if (0!=err)
    {
        Rdebug("4\n");
    }
    Rdebug("angle=%f,%f,%f,%f,%f,%f\n",position[0],position[1],position[2],position[3],position[4],position[5]);
    //设置期望关节角度(rad)
    err=SetGroupPosition(robot_name, position);
    if (0!=err)
    {
        Rdebug("5\n");
    }
}

GetGroupPosition 获取轴组关节位置

SetGroupPosition 设置轴组关节位置

robot_name 设备名称

position 关节位置 (rad或mm)