4. 机器人IO

4.1. 设置控制箱数字量输出

1/**
2* @brief  设置控制箱数字量输出
3* @param  [in] id  io编号,范围[0~15]
4* @param  [in] status 0-关,1-开
5* @param  [in] smooth 0-不平滑, 1-平滑
6* @param  [in] block  0-阻塞,1-非阻塞
7* @return  错误码
8*/
9errno_t  SetDO(int id, uint8_t status, uint8_t smooth, uint8_t block);

4.2. 设置工具数字量输出

1/**
2* @brief  设置工具数字量输出
3* @param  [in] id  io编号,范围[0~1]
4* @param  [in] status 0-关,1-开
5* @param  [in] smooth 0-不平滑, 1-平滑
6* @param  [in] block  0-阻塞,1-非阻塞
7* @return  错误码
8*/
9errno_t  SetToolDO(int id, uint8_t status, uint8_t smooth, uint8_t block);

4.3. 设置控制箱模拟量输出

1/**
2* @brief  设置控制箱模拟量输出
3* @param  [in] id  io编号,范围[0~1]
4* @param  [in] value 电流或电压值百分比,范围[0~100]对应电流值[0~20mA]或电压[0~10V]
5* @param  [in] block  0-阻塞,1-非阻塞
6* @return  错误码
7*/
8errno_t  SetAO(int id, float value, uint8_t block);

4.4. 设置工具模拟量输出

1/**
2* @brief  设置工具模拟量输出
3* @param  [in] id  io编号,范围[0]
4* @param  [in] value 电流或电压值百分比,范围[0~100]对应电流值[0~20mA]或电压[0~10V]
5* @param  [in] block  0-阻塞,1-非阻塞
6* @return  错误码
7*/
8errno_t  SetToolAO(int id, float value, uint8_t block);

4.5. 获取控制箱数字量输入

1/**
2* @brief  获取控制箱数字量输入
3* @param  [in] id  io编号,范围[0~15]
4* @param  [in] block  0-阻塞,1-非阻塞
5* @param  [out] result  0-低电平,1-高电平
6* @return  错误码
7*/
8errno_t  GetDI(int id, uint8_t block, uint8_t *result);

4.6. 获取工具数字量输入

1/**
2* @brief  获取工具数字量输入
3* @param  [in] id  io编号,范围[0~1]
4* @param  [in] block  0-阻塞,1-非阻塞
5* @param  [out] result  0-低电平,1-高电平
6* @return  错误码
7*/
8errno_t  GetToolDI(int id, uint8_t block, uint8_t *result);

4.7. 等待控制箱数字量输入

1/**
2* @brief 等待控制箱数字量输入
3* @param  [in] id  io编号,范围[0~15]
4* @param  [in]  status 0-关,1-开
5* @param  [in]  max_time  最大等待时间,单位ms
6* @param  [in]  opt  超时后策略,0-程序停止并提示超时,1-忽略超时提示程序继续执行,2-一直等待
7* @return  错误码
8*/
9errno_t  WaitDI(int id, uint8_t status, int max_time, int opt);

4.8. 等待控制箱多路数字量输入

 1/**
 2* @brief 等待控制箱多路数字量输入
 3* @param  [in] mode 0-多路与,1-多路或
 4* @param  [in] id  io编号,bit0~bit7对应DI0~DI7,bit8~bit15对应CI0~CI7
 5* @param  [in]  status 0-关,1-开
 6* @param  [in]  max_time  最大等待时间,单位ms
 7* @param  [in]  opt  超时后策略,0-程序停止并提示超时,1-忽略超时提示程序继续执行,2-一直等待
 8* @return  错误码
 9*/
10errno_t  WaitMultiDI(int mode, int id, uint8_t status, int max_time, int opt);

4.9. 等待工具数字量输入

1/**
2* @brief 等待工具数字量输入
3* @param  [in] id  io编号,范围[0~1]
4* @param  [in]  status 0-关,1-开
5* @param  [in]  max_time  最大等待时间,单位ms
6* @param  [in]  opt  超时后策略,0-程序停止并提示超时,1-忽略超时提示程序继续执行,2-一直等待
7* @return  错误码
8*/
9errno_t  WaitToolDI(int id, uint8_t status, int max_time, int opt);

4.10. 获取控制箱模拟量输入

1/**
2* @brief  获取控制箱模拟量输入
3* @param  [in] id  io编号,范围[0~1]
4* @param  [in] block  0-阻塞,1-非阻塞
5* @param  [out] result  输入电流或电压值百分比,范围[0~100]对应电流值[0~20mS]或电压[0~10V]
6* @return  错误码
7*/
8errno_t  GetAI(int id, uint8_t block, float *result);

4.11. 获取工具模拟量输入

1/**
2* @brief  获取工具模拟量输入
3* @param  [in] id  io编号,范围[0]
4* @param  [in] block  0-阻塞,1-非阻塞
5* @param  [out] result  输入电流或电压值百分比,范围[0~100]对应电流值[0~20mS]或电压[0~10V]
6* @return  错误码
7*/
8errno_t  GetToolAI(int id, uint8_t block, float *result);

4.12. 获取机器人末端点记录按钮状态

1/**
2 * @brief 获取机器人末端点记录按钮状态
3 * @param [out] state 按钮状态,0-按下,1-松开
4 * @return 错误码
5 */
6errno_t  GetAxlePointRecordBtnState(uint8_t *state);

4.13. 获取机器人末端DO输出状态

1/**
2 * @brief 获取机器人末端DO输出状态
3 * @param [out] do_state DO输出状态,do0~do1对应bit1~bit2,从bit0开始
4 * @return 错误码
5 */
6errno_t  GetToolDO(uint8_t *do_state);

4.14. 获取机器人控制器DO输出状态

1/**
2 * @brief 获取机器人控制器DO输出状态
3 * @param [out] do_state_h DO输出状态,co0~co7对应bit0~bit7
4 * @param [out] do_state_l DO输出状态,do0~do7对应bit0~bit7
5 * @return 错误码
6 */
7errno_t  GetDO(uint8_t *do_state_h, uint8_t *do_state_l);

4.15. 等待控制箱模拟量输入

 1/**
 2* @brief 等待控制箱模拟量输入
 3* @param  [in] id  io编号,范围[0~1]
 4* @param  [in]  sign 0-大于,1-小于
 5* @param  [in]  value 输入电流或电压值百分比,范围[0~100]对应电流值[0~20mS]或电压[0~10V]
 6* @param  [in]  max_time  最大等待时间,单位ms
 7* @param  [in]  opt  超时后策略,0-程序停止并提示超时,1-忽略超时提示程序继续执行,2-一直等待
 8* @return  错误码
 9*/
10errno_t  WaitAI(int id, int sign, float value, int max_time, int opt);

4.16. 等待工具模拟量输入

 1/**
 2* @brief 等待工具模拟量输入
 3* @param  [in] id  io编号,范围[0]
 4* @param  [in]  sign 0-大于,1-小于
 5* @param  [in]  value 输入电流或电压值百分比,范围[0~100]对应电流值[0~20mS]或电压[0~10V]
 6* @param  [in]  max_time  最大等待时间,单位ms
 7* @param  [in]  opt  超时后策略,0-程序停止并提示超时,1-忽略超时提示程序继续执行,2-一直等待
 8* @return  错误码
 9*/
10errno_t  WaitToolAI(int id, int sign, float value, int max_time, int opt);

4.17. 代码示例

在 C++SDK-v2.1.2.0 版本发生变更.

  1#include "libfairino/robot.h"
  2
  3//如果使用Windows,包含下面的头文件
  4#include <string.h>
  5#include <windows.h>
  6//如果使用linux,包含下面的头文件
  7/*
  8#include <cstdlib>
  9#include <iostream>
 10#include <stdio.h>
 11#include <cstring>
 12#include <unistd.h>
 13*/
 14#include <chrono>
 15#include <thread>
 16
 17using namespace std;
 18int main(void)
 19{
 20    FRRobot robot;
 21    robot.RPC("192.168.58.2");
 22
 23    uint8_t status = 1;
 24    uint8_t smooth = 0;
 25    uint8_t block  = 0;
 26    uint8_t di = 0, tool_di = 0;
 27    float ai = 0.0, tool_ai = 0.0;
 28    float value = 0.0;
 29    int i;
 30
 31    for(i = 0; i < 16; i++)
 32    {
 33        robot.SetDO(i, status, smooth, block);
 34        robot.WaitMs(1000);
 35    }
 36
 37    status = 0;
 38
 39    for(i = 0; i < 16; i++)
 40    {
 41        robot.SetDO(i, status, smooth, block);
 42        robot.WaitMs(1000);
 43    }
 44
 45    status = 1;
 46
 47    for(i = 0; i < 2; i++)
 48    {
 49        robot.SetToolDO(i, status, smooth, block);
 50        robot.WaitMs(1000);
 51    }
 52
 53    status = 0;
 54
 55    for(i = 0; i < 2; i++)
 56    {
 57        robot.SetToolDO(i, status, smooth, block);
 58        robot.WaitMs(1000);
 59    }
 60
 61    value = 50.0;
 62    robot.SetAO(0, value, block);
 63    value = 100.0;
 64    robot.SetAO(1, value, block);
 65    robot.WaitMs(1000);
 66    value = 0.0;
 67    robot.SetAO(0, value, block);
 68    value = 0.0;
 69    robot.SetAO(1, value, block);
 70
 71    value = 100.0;
 72    robot.SetToolAO(0, value, block);
 73    robot.WaitMs(1000);
 74    value = 0.0;
 75    robot.SetToolAO(0, value, block);
 76
 77    robot.GetDI(0, block, &di);
 78    printf("di0:%u\n", di);
 79    robot.WaitDI(0,1,0,2);              //一直等待
 80    robot.WaitMultiDI(1,3,3,10000,2);   //一直等待
 81    tool_di = robot.GetToolDI(1, block, &tool_di);
 82    printf("tool_di1:%u\n", tool_di);
 83    robot.WaitToolDI(1,1,0,2);          //一直等待
 84
 85    robot.GetAI(0,block, &ai);
 86    printf("ai0:%f\n", ai);
 87    robot.WaitAI(0,0,50,0,2);           //一直等待
 88    robot.WaitToolAI(0,0,50,0,2);       //一直等待
 89    tool_ai = robot.GetToolAI(0,block, &tool_ai);
 90    printf("tool_ai0:%f\n", tool_ai);
 91
 92    uint8_t _button_state = 0;
 93    robot.GetAxlePointRecordBtnState(&_button_state);
 94    printf("_button_state is: %u\n", _button_state);
 95
 96    uint8_t tool_do_state = 0;
 97    robot.GetToolDO(&tool_do_state);
 98    printf("tool DO state is: %u\n", tool_do_state);
 99
100    uint8_t do_state_h = 0;
101    uint8_t do_state_l = 0;
102    robot.GetDO(&do_state_h, &do_state_l);
103    printf("DO state high is: %u \n DO state low is: %u\n", do_state_h, do_state_l);
104    return 0;
105}

4.18. 获取机器人软件版本

在 C++SDK-v2.1.1.0 版本加入.

1/**
2* @brief 获取机器人软件版本
3* @param[out]       robotModel 机器人型号
4* @param[out]       webversion web版本
5* @param[out]       controllerVersion 控制器版本
6* @return 错误码
7*/
8errno_t GetSoftwareVersion(char robotModel[64], char webVersion[64], char controllerVersion[64]);

4.19. 获取机器人硬件版本

在 C++SDK-v2.1.1.0 版本加入.

 1/**
 2* @brief 获取机器人硬件版本
 3* @param[out] ctrlBoxBoardversion 控制箱载板硬件版本
 4* @param[out] driver1version 驱动器1硬件版本
 5* @param[out] driver2version 驱动器2硬件版本
 6* @param[out] driver3version 驱动器3硬件版本
 7* @param[out] driver4version 驱动器4硬件版本
 8* @param[out] driver5version 驱动器5硬件版本
 9* @param[out] driver6version 驱动器6硬件版本
10* @param[out] endBoardversion 未端版硬件版本
11*/
12errno_t GetHardwareVersion(char ctrlBoxBoardversion[128], char driver1version[128], char driver2version[128], char driver3version[128], char driver4version[128], char driver5version[128], char driver6version[128], char endBoardversion[128]);

4.20. 获取机器人固件版本

在 C++SDK-v2.1.1.0 版本加入.

 1/**
 2* @brief 获取机器人固件版本
 3* @param[out] ctrlBoxBoardversion 控制箱载板固件版本
 4* @param[out] driver1version 驱动器1固件版本
 5* @param[out] driver2version 驱动器2固件版本
 6* @param[out] driver3version 驱动器3固件版本
 7* @param[out] driver4version 驱动器4固件版本
 8* @param[out] driver5version 驱动器5固件版本
 9* @param[out] driver6version 驱动器6固件版本
10* @param[out] endBoardversion 未端版固件版本
11*/
12errno_t GetFirmwareVersion(char ctrlBoxBoardversion[128], char driver1version[128], char driver2version[128], char driver3version[128], char driver4version[128], char driver5version[128], char driver6version[128], char endBoardversion[128]);

4.21. 代码示例

在 C++SDK-v2.1.2.0 版本加入.

 1#include "libfairino/robot.h"
 2
 3//如果使用Windows,包含下面的头文件
 4#include <string.h>
 5#include <windows.h>
 6//如果使用linux,包含下面的头文件
 7/*
 8#include <cstdlib>
 9#include <iostream>
10#include <stdio.h>
11#include <cstring>
12#include <unistd.h>
13*/
14#include <chrono>
15#include <thread>
16
17using namespace std;
18int main(void)
19{
20    FRRobot robot;
21    robot.RPC("192.168.58.2");
22
23    int retval = 0;
24    char robotModel[64] = {0};
25    char webversion[64] = {0};
26    char controllerVersion[64] = {0};
27
28    char ctrlBoxBoardversion[128] = {0};
29    char driver1version[128] = {0};
30    char driver2version[128] = {0};
31    char driver3version[128] = {0};
32    char driver4version[128] = {0};
33    char driver5version[128] = {0};
34    char driver6version[128] = {0};
35    char endBoardversion[128] = {0};
36
37    retval = robot.GetSoftwareVersion(robotModel, webversion, controllerVersion);
38    printf("Getsoftwareversion retval is: %d\n", retval);
39    printf("robotmodel is: %s, webversion is: %s, controllerVersion is: %s \n", robotModel, webversion, controllerVersion);
40
41    retval = robot.GetHardwareVersion(ctrlBoxBoardversion,  driver1version,  driver2version, driver3version,  driver4version,  driver5version, driver6version,  endBoardversion);
42    printf("GetHardwareversion retval is: %d\n", retval);
43    printf("GetHardwareversion get hardware versoin is: %s, %s, %s, %s, %s, %s, %s, %s\n", ctrlBoxBoardversion, driver1version, driver2version, driver3version, driver4version, driver5version, driver6version, endBoardversion);
44
45    retval = robot.GetFirmwareVersion(ctrlBoxBoardversion,  driver1version,  driver2version, driver3version,  driver4version,  driver5version, driver6version, endBoardversion);
46    printf("GetFirmwareversion retval is: %d\n", retval);
47    printf("GetHardwareversion get hardware versoin is: %s, %s, %s, %s, %s, %s, %s, %s\n", ctrlBoxBoardversion, driver1version, driver2version, driver3version, driver4version, driver5version, driver6version, endBoardversion);
48
49    return 0;
50}