xcore_api 介绍
本文汇总控制器插件二次开发时可调用的接口,按二次开发包 xcore_api/ 中的头文件分节说明。
当前头文件版本为 0.0.3(#include "version.hpp" 中的宏 XCORE_API_VERSION)。接口包 README.md 写明基于控制器 v3.2.1。开发时应确保插件使用的 xcore_api 版本与目标控制器版本匹配。
launch/launch_api.hpp
| 头文件: | #include "launch/launch_api.hpp" |
宏
LAUNCH_MODULE(CLASS_NAME)
LAUNCH_MODULE 用于将入口类登记到控制器,默认优先级为 0。
CLASS_NAME 为入口类名,须为 LaunchAPI 的派生类。
- 宏在动态库加载时生效,内部调用
LaunchAPI::Register()。 - 未使用本宏或
LAUNCH_MODULE_PRIORITY()时,控制器不会执行该入口类的生命周期函数。
另请参阅 LAUNCH_MODULE_PRIORITY()、LaunchAPI、插件入口。
LAUNCH_MODULE_PRIORITY(CLASS_NAME, priority)
以指定优先级登记入口类。priority 越高,Init()、Start()、Stop() 越先执行。同优先级的执行顺序不固定。
另请参阅 LAUNCH_MODULE()、LaunchAPI::Register()。
LaunchAPI 类
LaunchAPI 类是所有控制器插件入口模块的抽象基类。
| 头文件: | #include "launch/launch_api.hpp" |
| 命名空间: | xcore_api::launch |
公有函数
[pure virtual] void | Init() |
[pure virtual] void | Start() |
[pure virtual] void | Stop() |
[static] bool | Register(int priority, std::shared_ptr<LaunchAPI> ptr) |
详细描述
LaunchAPI 类是控制器插件的入口。派生类须实现 Init()、Start()、Stop(),并用 LAUNCH_MODULE() 或 LAUNCH_MODULE_PRIORITY() 登记。
控制器按下列顺序调用:构造、按优先级 Init()、全部 Init 完成后按优先级 Start()、停止时按优先级 Stop()、析构。构造与析构顺序不固定;有依赖的资源回收应在 Stop() 中完成。
#include "launch/launch_api.hpp"
class ExamplePlugin : public xcore_api::launch::LaunchAPI {
public:
void Init() override {
// 加载配置、初始化日志
}
void Start() override {
// 注册指令、服务、Hook、日志码
}
void Stop() override {
// 释放资源、停止线程、关闭总线
}
};
LAUNCH_MODULE(ExamplePlugin)
另请参阅 LAUNCH_MODULE()、插件入口。
成员函数说明
[pure virtual] void LaunchAPI::Init()
初始化插件。
所有入口模块按优先级依次执行。适合加载配置、初始化日志、准备数据结构。
另请参阅 Start()、InitLogAPI()。
[pure virtual] void LaunchAPI::Start()
在全部 Init() 完成后调用。
适合注册 RL 指令、服务、Hook、日志码,或启动后台任务。
另请参阅 Init()、RegPluginCmdsAPI()、RegisterHooksAPI()、RegServiceAPI()。
[pure virtual] void LaunchAPI::Stop()
控制器停止或卸载插件时调用。
在此释放资源、停止线程、关闭设备连接。
另请参阅 Start()。
[static] bool LaunchAPI::Register(int priority, std::shared_ptr<LaunchAPI> ptr)
将入口模块登记到控制器。priority 越高越先执行。成功返回 true。
二次开发请使用 LAUNCH_MODULE(),不必直接调用。
另请参阅 LAUNCH_MODULE()、LAUNCH_MODULE_PRIORITY()。
rl_cmd/morden_rl_cmd_api.hpp
| 头文件: | #include "rl_cmd/morden_rl_cmd_api.hpp" |
文件名中的拼写 morden 与二次开发包一致。
宏
BEGIN_COMMAND_API(cmd_config)
按 cmd_config 构造内部 ModernRLCmdAPI 构建器。须与 PARAMS_API()、EXECUTE_API()、REGISTER_COMMAND_API 配合使用。
另请参阅 RLCmdConfigAPI、指令注册。
PARAMS_API(...)
为当前指令设置参数检查器。参数为若干 ArgTypeAPI。
EXECUTE_API(lambda)
设置正向执行体。lambda 类型为 RLCmdActionAPI。
EXECUTE_STB_API(lambda)
设置步退执行体。步退类型为 STEP_BACK_CUSTOM 时使用。
REGISTER_COMMAND_API
将当前构建的指令登记到控制器,内部调用 RegPluginCmdsAPI()。
建议在入口模块 Start() 中调用。
另请参阅 RegPluginCmdsAPI()。
枚举类型
enum class xcore_api::rl_cmd::ValueTypeAPI
该枚举类型描述指令参数类型。读取参数前须与 RL 调用方式一致。
| 常量 | 描述 |
|---|---|
ValueTypeAPI::VALUE_UNKNOWN | 未知类型 |
ValueTypeAPI::VALUE_INT | 整数 |
ValueTypeAPI::VALUE_DOUBLE | 浮点 |
ValueTypeAPI::VALUE_BOOL | 布尔 |
ValueTypeAPI::VALUE_STRING | 字符串 |
ValueTypeAPI::VALUE_BYTE | 字节 |
ValueTypeAPI::VALUE_CLOCK | 时钟 |
ValueTypeAPI::VALUE_CONFDATA | 构型数据 |
ValueTypeAPI::VALUE_FCBOXVOL / VALUE_FCCARTNUM / VALUE_FCCYLINDERVOL / VALUE_FCSPHEREVOL / VALUE_FCXYZNUM | 力控相关 |
ValueTypeAPI::VALUE_INTNUM | 整数数组 |
ValueTypeAPI::VALUE_JOINTTARGET | 关节目标 |
ValueTypeAPI::VALUE_LOAD | 负载 |
ValueTypeAPI::VALUE_ORIENT | 方向 |
ValueTypeAPI::VALUE_PATH | 路径 |
ValueTypeAPI::VALUE_POS | 位置 |
ValueTypeAPI::VALUE_POSE | 位姿 |
ValueTypeAPI::VALUE_ROBTARGET | 笛卡尔点 |
ValueTypeAPI::VALUE_SPEED | 速度 |
ValueTypeAPI::VALUE_TOOL | 工具 |
ValueTypeAPI::VALUE_TRIGDATA | 触发器 |
ValueTypeAPI::VALUE_WOBJ | 工件 |
ValueTypeAPI::VALUE_ZONE | 转弯区 |
ValueTypeAPI::VALUE_SIGNAL_DI / VALUE_SIGNAL_DO / VALUE_SIGNAL_GI / VALUE_SIGNAL_GO / VALUE_SIGNAL_AI / VALUE_SIGNAL_AO | IO 信号 |
ValueTypeAPI::VALUE_MODBUS | Modbus |
ValueTypeAPI::VALUE_INPUT_SIGNAL | 输入信号 |
ValueTypeAPI::VALUE_TRANS | 附加开关参数,例如 \Stop |
ValueTypeAPI::VALUE_KEY_PARA | 关键字参数 |
ValueTypeAPI::VALUE_SWITCH | On / Off |
ValueTypeAPI::VALUE_TORQUE_INFO / VALUE_JOINT_TORQUE / VALUE_CART_TORQUE | 力矩信息 |
ValueTypeAPI::VALUE_SOCKET_SERVER / VALUE_SOCKET_CONNECT | 网络控制 |
ValueTypeAPI::VALUE_NULL | 空类型 |
另请参阅 ArgTypeAPI、SymbolVarBaseAPI。
enum class xcore_api::rl_cmd::ArgRuleTypeAPI
该枚举类型描述参数缺省规则。
| 常量 | 值 | 描述 |
|---|---|---|
ArgRuleTypeAPI::ARG_MUST_HAVE | 0 | 必须存在 |
ArgRuleTypeAPI::ARG_DEFAULT_AT_LAST | 1 | 在参数列表末尾缺省 |
ArgRuleTypeAPI::ARG_DEFAULT_NOT_LAST | 2 | 不在参数列表末尾缺省 |
enum xcore_api::rl_cmd::CommandProcessResultAPI
该枚举类型描述指令执行结果,由内层执行函数返回。
| 常量 | 值 | 描述 |
|---|---|---|
CMD_PROCESS_SUCCESS | 0 | 成功,RL 继续运行 |
CMD_PROCESS_ERROR | 1 | 失败,仅暂停当前任务 |
CMD_PROCESS_FATAL | 2 | 致命错误,RL 停止 |
CMD_PROCESS_IGNORE | 3 | 异步指令,任务进入异步等待 |
CMD_PROCESS_EXTRA | 4 | 额外执行的指令,常用于运动指令 |
CMD_PROCESS_RESCHEDULE | 5 | 请求重新调度 |
CMD_PROCESS_SPECIAL | 6 | 特殊指令,会影响调度 |
另请参阅 RLCmdActionAPI、SendCmd()。
enum xcore_api::rl_cmd::CmdLookAheadImplAPI
该枚举类型描述指令前瞻行为。
| 常量 | 值 | 描述 |
|---|---|---|
WAIT_MOVE_PAUSE | 0 | 等待运动结束,断前瞻(默认) |
ACTIVATE_AT_LOOKAHEAD | 1 | 前瞻触发,例如打印类指令 |
ACTIVATE_IN_ZONE | 2 | 转弯区触发,上一条运动后触发 |
MOVEMENT_ITSELF | 3 | 运动指令本身 |
涉及运动的指令须正确设置前瞻,避免破坏控制器调度。
另请参阅 RLCmdConfigAPI::SetLookAhead()、自定义运动指令。
enum xcore_api::rl_cmd::TaskLimitAPI
该枚举类型描述指令的任务限制。
| 常量 | 值 | 描述 |
|---|---|---|
TASK_NO_LIMIT | 0 | 不限制 |
TASK_LIMIT_MOVE | 1 | 限制运动任务 |
TASK_LIMIT_NORMAL_AND_STATIC | 2 | 限制普通任务和半静态任务 |
enum xcore_api::rl_cmd::StepBackAPI
该枚举类型描述步退行为。
| 常量 | 值 | 描述 |
|---|---|---|
STEP_BACK_SKIP | 0 | 跳过该指令 |
STEP_BACK_STOP | 1 | 停止步退 |
STEP_BACK_CUSTOM | 2 | 使用 EXECUTE_STB_API() 定制行为 |
类型
using xcore_api::rl_cmd::CommandExecuteAPI = std::function<CommandProcessResultAPI()>
指令内层执行函数。返回 CommandProcessResultAPI。
using xcore_api::rl_cmd::RLCmdActionAPI
指令外层工厂。签名为:
std::function<CommandExecuteAPI(
std::shared_ptr<RLCallFrameAPI>,
std::vector<std::shared_ptr<SymbolVarBaseAPI>>)>
外层在调度时构造内层 CommandExecuteAPI;内层真正执行指令逻辑。
另请参阅 RLCallFrameAPI、SymbolVarBaseAPI。
ArgTypeAPI 类
ArgTypeAPI 类描述单个指令参数的类型、缺省规则与默认值。
| 头文件: | #include "rl_cmd/morden_rl_cmd_api.hpp" |
| 命名空间: | xcore_api::rl_cmd |
公有函数
ArgTypeAPI() | |
ArgTypeAPI(ValueTypeAPI type) | |
ArgTypeAPI(std::vector<ValueTypeAPI> types) | |
ArgTypeAPI(ValueTypeAPI type, ArgRuleTypeAPI arg_rule, SymbolVarBaseAPI value) | |
ArgTypeAPI(std::vector<ValueTypeAPI> types, ArgRuleTypeAPI arg_rule, SymbolVarBaseAPI value) | |
void | SetValueType(const ValueTypeAPI &type) |
void | SetRule(const ArgRuleTypeAPI &rule) |
void | SetDefaultValue(const SymbolVarBaseAPI &value) |
std::vector<ValueTypeAPI> | GetValueType() const |
ArgRuleTypeAPI | GetRule() const |
std::shared_ptr<SymbolVarBaseAPI> | GetDefaultValue() const |
详细描述
无缺省参数使用单类型或类型列表构造。可缺省参数须同时给出 ArgRuleTypeAPI 与默认值。
另请参阅 PARAMS_API()、ValueTypeAPI。
成员函数说明
void ArgTypeAPI::SetValueType(const ValueTypeAPI &type)
设置参数类型。
void ArgTypeAPI::SetRule(const ArgRuleTypeAPI &rule)
设置缺省规则。
void ArgTypeAPI::SetDefaultValue(const SymbolVarBaseAPI &value)
设置缺省时的默认值。
std::vector<ValueTypeAPI> ArgTypeAPI::GetValueType() const
返回该参数支持的类型列表。
ArgRuleTypeAPI ArgTypeAPI::GetRule() const
返回缺省规则。
std::shared_ptr<SymbolVarBaseAPI> ArgTypeAPI::GetDefaultValue() const
返回默认值。
RLCmdConfigAPI 类
RLCmdConfigAPI 类描述一条自定义 RL 指令的名称、前瞻、任务限制与步退行为。
| 头文件: | #include "rl_cmd/morden_rl_cmd_api.hpp" |
| 命名空间: | xcore_api::rl_cmd |
公有函数
RLCmdConfigAPI() | |
RLCmdConfigAPI(std::shared_ptr<RLCmdConfigImpl> ptr) | |
void | SetFuncName(const std::string &func_name) |
void | SetLookAhead(const CmdLookAheadImplAPI &look_ahead) |
void | SetTaskLimit(const TaskLimitAPI &limit) |
void | SetStepBack(const StepBackAPI &step_type) |
std::string | GetFuncName() const |
CmdLookAheadImplAPI | GetLookAhead() const |
TaskLimitAPI | GetTaskLimit() const |
StepBackAPI | GetStepBack() const |
详细描述
在 BEGIN_COMMAND_API() 之前填写配置。默认前瞻为 WAIT_MOVE_PAUSE。运动指令须将前瞻设为 MOVEMENT_ITSELF。
成员函数说明
void RLCmdConfigAPI::SetFuncName(const std::string &func_name)
设置指令函数名,须与 RL 中的调用名一致。
void RLCmdConfigAPI::SetLookAhead(const CmdLookAheadImplAPI &look_ahead)
设置前瞻方式,默认断前瞻。
另请参阅 CmdLookAheadImplAPI。
void RLCmdConfigAPI::SetTaskLimit(const TaskLimitAPI &limit)
设置任务限制。
void RLCmdConfigAPI::SetStepBack(const StepBackAPI &step_type)
设置步退类型。
std::string RLCmdConfigAPI::GetFuncName() const
返回指令函数名。
CmdLookAheadImplAPI RLCmdConfigAPI::GetLookAhead() const
返回前瞻类型。
TaskLimitAPI RLCmdConfigAPI::GetTaskLimit() const
返回任务限制。
StepBackAPI RLCmdConfigAPI::GetStepBack() const
返回步退行为。
RLCallFrameAPI 类
RLCallFrameAPI 类提供当前指令的运行上下文,并可设置返回值。
| 头文件: | #include "rl_cmd/morden_rl_cmd_api.hpp" |
| 命名空间: | xcore_api::rl_cmd |
公有函数
RLCallFrameAPI(std::shared_ptr<RLCallFrameImpl> ptr) | |
std::string | GetCmdTask() |
std::string | GetCmdFile() |
int | GetCmdLine() |
int | GetVisitedLine() |
void | SetReturnValue(const SymbolVarBaseAPI &val) |
成员函数说明
std::string RLCallFrameAPI::GetCmdTask()
返回当前任务名。
std::string RLCallFrameAPI::GetCmdFile()
返回当前文件名。
int RLCallFrameAPI::GetCmdLine()
返回当前行号。
int RLCallFrameAPI::GetVisitedLine()
返回已访问行号。
void RLCallFrameAPI::SetReturnValue(const SymbolVarBaseAPI &val)
设置指令返回值。
另请参阅 SymbolVarBaseAPI。
ModernRLCmdAPI 类
ModernRLCmdAPI 类是自定义指令的构造器。二次开发一般通过宏使用,不必直接实例化。
| 头文件: | #include "rl_cmd/morden_rl_cmd_api.hpp" |
| 命名空间: | xcore_api::rl_cmd |
公有函数
| explicit | ModernRLCmdAPI(const RLCmdConfigAPI &cfg) |
| virtual | ~ModernRLCmdAPI() |
RLCmdConfigAPI | GetCmdConfig() |
const std::vector<std::shared_ptr<SymbolVarBaseAPI>> & | GetCmdArgs() |
void | SetParams(const std::initializer_list<ArgTypeAPI> &v) |
void | SetExecutor(RLCmdActionAPI &action) |
void | SetExecutorStb(RLCmdActionAPI &action) |
ModernRLCmdAPI | Convert() |
详细描述
宏 BEGIN_COMMAND_API() 会构造本对象;PARAMS_API()、EXECUTE_API()、EXECUTE_STB_API()、REGISTER_COMMAND_API 分别调用 SetParams()、SetExecutor()、SetExecutorStb() 与 RegPluginCmdsAPI()。
指令执行函数中不要做长时间阻塞;耗时任务建议使用 线程池。
另请参阅 指令注册。
成员函数说明
RLCmdConfigAPI ModernRLCmdAPI::GetCmdConfig()
返回当前指令配置。
const std::vector<std::shared_ptr<SymbolVarBaseAPI>> &ModernRLCmdAPI::GetCmdArgs()
返回当前指令参数符号表。
void ModernRLCmdAPI::SetParams(const std::initializer_list<ArgTypeAPI> &v)
设置参数检查器。请使用 PARAMS_API()。
void ModernRLCmdAPI::SetExecutor(RLCmdActionAPI &action)
设置正向执行体。请使用 EXECUTE_API()。
void ModernRLCmdAPI::SetExecutorStb(RLCmdActionAPI &action)
设置步退执行体。请使用 EXECUTE_STB_API()。
ModernRLCmdAPI ModernRLCmdAPI::Convert()
转换为可注册对象。由 REGISTER_COMMAND_API 调用。
SymbolVarBaseAPI 类
SymbolVarBaseAPI 类用于读写指令参数的具体值。
| 头文件: | #include "rl_cmd/morden_rl_cmd_api.hpp" |
| 命名空间: | xcore_api::rl_cmd |
公有函数
SymbolVarBaseAPI() | |
SymbolVarBaseAPI(std::shared_ptr<SymbolVarBaseImpl> ptr) | |
SymbolVarBaseAPI | GetSubUnit(const std::string &key) |
double | GetDoubleVal() |
bool | GetBoolVal() |
int | GetIntVal() |
unsigned char | GetByteVal() |
std::string | GetStringVal() |
PointAPI | GetPointAPI() |
SpeedAPI | GetSpeedAPI() |
ZoneAPI | GetZoneAPI() |
ToolAPI | GetToolAPI() |
WobjAPI | GetWobjAPI() |
void | ResetRobTarget(const PointAPI &point) |
void | ResetBool(bool val) |
void | ResetInt(int val) |
void | ResetDouble(double val) |
void | ResetString(const std::string &val) |
void | ResetBoolArr(const std::vector<bool> &v) |
void | ResetIntArr(const std::vector<int> &v) |
void | ResetDoubleArr(const std::vector<double> &v) |
void | ResetStringArr(const std::vector<std::string> &v) |
详细描述
读取前须确认参数类型。复合结构(例如笛卡尔点中的四元数)通过 GetSubUnit() 进入子字段。类型不匹配时,基础类型读取接口返回 0 / false / 空字符串。
另请参阅 ValueTypeAPI、PointAPI。
成员函数说明
SymbolVarBaseAPI SymbolVarBaseAPI::GetSubUnit(const std::string &key)
按 key 读取复合结构的子单元。
double SymbolVarBaseAPI::GetDoubleVal()
返回 double。类型不匹配时返回 0。
bool SymbolVarBaseAPI::GetBoolVal()
返回 bool。
int SymbolVarBaseAPI::GetIntVal()
返回 int。
unsigned char SymbolVarBaseAPI::GetByteVal()
返回字节值。
std::string SymbolVarBaseAPI::GetStringVal()
返回字符串。
PointAPI SymbolVarBaseAPI::GetPointAPI()
返回点位。
另请参阅 PointAPI。
SpeedAPI SymbolVarBaseAPI::GetSpeedAPI()
返回速度。
ZoneAPI SymbolVarBaseAPI::GetZoneAPI()
返回转弯区。
ToolAPI SymbolVarBaseAPI::GetToolAPI()
返回工具。
WobjAPI SymbolVarBaseAPI::GetWobjAPI()
返回工件。
void SymbolVarBaseAPI::ResetRobTarget(const PointAPI &point)
将 robtarget 参数写为 point。
void SymbolVarBaseAPI::ResetBool(bool val)
将布尔参数写为 val。
void SymbolVarBaseAPI::ResetInt(int val)
将整数参数写为 val。
void SymbolVarBaseAPI::ResetDouble(double val)
将浮点参数写为 val。
void SymbolVarBaseAPI::ResetString(const std::string &val)
将字符串参数写为 val。
void SymbolVarBaseAPI::ResetBoolArr(const std::vector<bool> &v)
重写布尔数组。须注意长度。
void SymbolVarBaseAPI::ResetIntArr(const std::vector<int> &v)
重写整数数组。
void SymbolVarBaseAPI::ResetDoubleArr(const std::vector<double> &v)
重写浮点数组。
void SymbolVarBaseAPI::ResetStringArr(const std::vector<std::string> &v)
重写字符串数组。
相关非成员函数
std::shared_ptr<RLCmdArgImpl> xcore_api::rl_cmd::RequireArgsAPI(const std::vector<ArgTypeAPI> &v)
按参数类型列表构造指令参数对象。二次开发一般通过 PARAMS_API() 完成,不必直接调用。
bool xcore_api::rl_cmd::RegPluginCmdsAPI(std::shared_ptr<ModernRLCmdAPI> ptr)
将指令登记到控制器。成功返回 true。二次开发请使用 REGISTER_COMMAND_API。
另请参阅 REGISTER_COMMAND_API。
motion_cmd/motion_cmd_api.hpp
| 头文件: | #include "motion_cmd/motion_cmd_api.hpp" |
通常与自定义 RL 指令配合:解析参数后填入 MotionCmdArgsAPI,再由 MotionCmdAPI 送入运动队列。
枚举类型
enum xcore_api::motion_cmd::MoveTypeAPI
该枚举类型描述运动类型。
| 常量 | 值 | 描述 |
|---|---|---|
MOVE_ABSJ | 0 | 关节绝对运动 |
MOVE_J | 1 | 关节运动 |
MOVE_L | 2 | 直线运动 |
MOVE_C | 3 | 圆弧运动 |
MOVE_CF | 4 | 全圆运动,须调用 SetMoveCFData() |
MOVE_T | 5 | 摆线运动,须调用 SetMoveTData() |
MOVE_SP | 6 | 螺旋线运动,须调用 SetMoveSPData() |
enum xcore_api::motion_cmd::RotTypeAPI
该枚举类型描述全圆运动的姿态旋转方式。
| 常量 | 描述 |
|---|---|
CONST_POSE | 姿态不变 |
ROT_AXIS | 动轴旋转 |
FIXED_AXIS | 定轴旋转 |
enum xcore_api::motion_cmd::CallBackTypeAPI
该枚举类型描述运动回调类型。
| 常量 | 值 | 描述 |
|---|---|---|
MOVE_START | 0 | 运动开始 |
MOVE_PAUSE | 1 | 运动暂停 |
MOVE_FINISH | 2 | 运动完成 |
MOVE_ERROR | 3 | 运动错误 |
另请参阅 MotionCmdArgsAPI::SetCallback()。
MotionCmdArgsAPI 类
MotionCmdArgsAPI 类描述一条运动指令的目标、类型、工具、工件、速度、转弯区、触发器与回调。
| 头文件: | #include "motion_cmd/motion_cmd_api.hpp" |
| 命名空间: | xcore_api::motion_cmd |
公有函数
详细描述
位姿、速度、距离采用国际单位:位置为米,角度通常为弧度。除另行说明外,成员返回 0 表示成功。
回调与 Trigger 中不要执行长时间阻塞。
另请参阅 MotionCmdAPI、自定义运动指令、PointAPI。
成员函数说明
int MotionCmdArgsAPI::SetTargetPoint(const PointAPI &point)
设置目标点。成功返回 0。
int MotionCmdArgsAPI::SetMoveType(const MoveTypeAPI &type)
设置运动类型。
另请参阅 MoveTypeAPI。
int MotionCmdArgsAPI::SetMoveCFData(RotTypeAPI type, double rundeg)
设置全圆额外参数。须搭配 MOVE_CF。rundeg 为执行角度,范围为 -359 到 3600 度。
int MotionCmdArgsAPI::SetMoveTData(double radius, double step)
设置摆线额外参数。须搭配 MOVE_T。radius 与 step 单位为米。
int MotionCmdArgsAPI::SetMoveSPData(double radius, double step, double angle, bool clockwise)
设置螺旋额外参数。须搭配 MOVE_SP。radius 单位为米,step 单位为 m/rad,angle 单位为弧度。clockwise 为 true 表示顺时针。
int MotionCmdArgsAPI::SetTool(const ToolAPI &tool)
设置工具。
int MotionCmdArgsAPI::SetWobj(const WobjAPI &wobj)
设置工件。
int MotionCmdArgsAPI::SetZone(const ZoneAPI &zone)
设置转弯区。
int MotionCmdArgsAPI::SetSpeed(const SpeedAPI &speed)
设置速度。
int MotionCmdArgsAPI::SetLast(bool last)
将本指令标为连续运动的最后一条。last 为 true 时结束当前连续运动。
int MotionCmdArgsAPI::SetUpdatePointer(const std::string &task_name, const std::string &file_name, int line)
更新客户端执行指针。任务、文件、行号可通过 RLCallFrameAPI 取得。
int MotionCmdArgsAPI::SetCallback(CallBackTypeAPI type, const std::function &func)
设置运动开始、暂停、完成或错误回调。
另请参阅 CallBackTypeAPI。
int MotionCmdArgsAPI::SetAuxPoint(const PointAPI &point)
设置辅助点。圆弧等多点运动会用到。
int MotionCmdArgsAPI::SetTriggers(const std::vector<TriggerAPI> &triggers)
设置轨迹触发器。MOVE_ABSJ 不支持。
另请参阅 TriggerAPI。
int MotionCmdArgsAPI::SetFinishInAdvance(double distance = 0.002)
提前终止本条轨迹。可配合 Trigger / IO 实现搜索类指令。distance 为最大停止距离,单位为米,默认 2 mm。
MotionCmdAPI 类
MotionCmdAPI 类用于把运动参数发送到控制器运动队列。
| 头文件: | #include "motion_cmd/motion_cmd_api.hpp" |
| 命名空间: | xcore_api::motion_cmd |
公有函数
MotionCmdAPI() | |
| virtual | ~MotionCmdAPI() |
int | SendCmd(const MotionCmdArgsAPI &args) |
int | SendSegmentCmds(const std::vector<MotionCmdArgsAPI> &vargs) |
int | SendStepBackCmd(const MotionCmdArgsAPI &args) |
详细描述
发送前应确认控制器模式、任务空间与机器人忙状态。成功返回 0。运动指令的 RL 执行结果通常返回 CMD_PROCESS_EXTRA。
警告: 会改变机器人运动状态。
成员函数说明
int MotionCmdAPI::SendCmd(const MotionCmdArgsAPI &args)
发送单条运动指令。成功返回 0。
另请参阅 SendSegmentCmds()。
int MotionCmdAPI::SendSegmentCmds(const std::vector<MotionCmdArgsAPI> &vargs)
发送多段间断连续运动。每条结束后暂停,再开始下一条,严格保证上一条结束之后再启动下一条。
适用于一条 RL 指令包含多段轨迹的情形。
另请参阅 SendCmd()。
int MotionCmdAPI::SendStepBackCmd(const MotionCmdArgsAPI &args)
生成并发送步退指令。
sdk/sdk_cmd_api.hpp
| 头文件: | #include "sdk/sdk_cmd_api.hpp" |
枚举类型
enum class xcore_api::sdk_cmd::Status
该枚举类型描述 SDK 非运动指令的执行状态。
| 常量 | 描述 |
|---|---|
Status::SUCCESS | 指令执行完毕 |
Status::PENDING | 执行中 |
Status::ERROR | 执行出错,由指令自行上报 |
SDKCmdAPI 类
SDKCmdAPI 类是可进入 SDK 指令队列的非运动指令基类。
| 头文件: | #include "sdk/sdk_cmd_api.hpp" |
| 命名空间: | xcore_api::sdk_cmd |
公有函数
SDKCmdAPI() | |
| virtual | ~SDKCmdAPI() |
[virtual] void | BeforeProcess() |
[pure virtual] Status | DerivedProcess() |
[virtual] void | AfterProcess() |
详细描述
派生类须实现 DerivedProcess()。可选重写执行前、执行后回调。通过 MordenSDKCmdAPI::SendSDKCmd() 入队。
成员函数说明
[virtual] void SDKCmdAPI::BeforeProcess()
指令执行前回调。默认实现为空。
[pure virtual] Status SDKCmdAPI::DerivedProcess()
指令核心逻辑。返回 Status。
[virtual] void SDKCmdAPI::AfterProcess()
指令执行后回调。默认实现为空。
MordenSDKCmdAPI 类
MordenSDKCmdAPI 类用于把运动指令或非运动指令送入 SDK 指令队列。类名中的拼写 Morden 与头文件一致。
| 头文件: | #include "sdk/sdk_cmd_api.hpp" |
| 命名空间: | xcore_api::sdk_cmd |
公有函数
MordenSDKCmdAPI() | |
| virtual | ~MordenSDKCmdAPI() |
int | SendSDKMotionCmd(const MotionCmdArgsAPI &args, int cmd_id) |
int | SendSDKCmd(std::shared_ptr<SDKCmdAPI> ptr, int cmd_id) |
void | SetFinalSDKCmd() |
成员函数说明
int MordenSDKCmdAPI::SendSDKMotionCmd(const MotionCmdArgsAPI &args, int cmd_id)
发送一条 SDK 运动指令。cmd_id 为指令标识。成功返回 0。
另请参阅 MotionCmdArgsAPI。
int MordenSDKCmdAPI::SendSDKCmd(std::shared_ptr<SDKCmdAPI> ptr, int cmd_id)
发送一条 SDK 普通指令。成功返回 0。
另请参阅 SDKCmdAPI。
void MordenSDKCmdAPI::SetFinalSDKCmd()
设置打断前瞻的指令。
hooks/
对应 #include "hooks/hooks_api.hpp" 与 #include "hooks/hooks_args_api.hpp"。插件注册 Hook 后,控制器在对应事件发生时回调。详见 hooks 模块。
| 头文件: | #include "hooks/hooks_api.hpp"、#include "hooks/hooks_args_api.hpp" |
枚举类型
enum xcore_api::hooks::HookEventAPI
该枚举类型描述可注册的控制器事件。
| 常量 | 描述 |
|---|---|
INVALID_EVENT | 无效事件 |
POINT_CHANGE | 点位增加、删除、修改 |
PP_TO_MAIN | 程序指针跳转到主程序 |
PP_TO_LINE | 程序指针跳转到指定行 |
B_START_RUN | 开始运行 |
B_PAUSE_RUN | 暂停运行 |
E_STOP_RUN | 急停 |
enum xcore_api::hooks::RunTypeAPI
该枚举类型描述 Hook 回调的运行方式。
| 常量 | 描述 |
|---|---|
SYNC_RUN | 同步执行,会阻塞控制器对应事件 |
ASYNC_RUN_IN_THREAD_POOL | 在普通线程池中异步执行 |
ASYNC_RUN_IN_RT_THREAD | 在实时线程中执行 |
同步 Hook 中不要执行耗时操作。
enum xcore_api::hooks::CURDAPI
该枚举类型描述点位变更操作。
| 常量 | 描述 |
|---|---|
CREATE | 新增 |
UPDATE | 修改 |
READ | 读取 |
DELETE | 删除 |
类型
using xcore_api::hooks::FUNC = std::function<void(const std::shared_ptr<const HookArgsBaseAPI>)>
Hook 回调函数类型。带参数的事件须将参数动态转换为对应派生类型,例如 HookPPToLineArgsAPI。
HookDataAPI 类
HookDataAPI 类描述要注册的事件、回调、运行方式与优先级。
| 头文件: | #include "hooks/hooks_api.hpp" |
| 命名空间: | xcore_api::hooks |
公有函数
HookDataAPI() | |
| virtual | ~HookDataAPI() |
bool | SetEvent(HookEventAPI event) |
bool | SetHook(const FUNC &hook) |
bool | SetRunType(RunTypeAPI type) |
bool | SetPriority(int pri) |
const HookEventAPI | GetEvent() const |
const FUNC | GetHook() const |
const RunTypeAPI | GetRunType() const |
const int | GetPriority() const |
详细描述
注册流程:构造 HookDataAPI,依次调用 SetEvent()、SetHook(),按需 SetRunType()、SetPriority(),再调用 RegisterHooksAPI()。
RegisterHooksAPI()不接受插件Start()之后的动态注册。UnRegisterHooksAPI()须在全部插件 Start 完成之后调用才生效。
另请参阅 RegisterHooksAPI()、hooks 模块。
成员函数说明
bool HookDataAPI::SetEvent(HookEventAPI event)
设置事件类型。成功返回 true。
bool HookDataAPI::SetHook(const FUNC &hook)
设置回调函数。成功返回 true。
bool HookDataAPI::SetRunType(RunTypeAPI type)
设置同步或异步运行方式。成功返回 true。
bool HookDataAPI::SetPriority(int pri)
设置调度优先级。数值越高越先调度。成功返回 true。
const HookEventAPI HookDataAPI::GetEvent() const
返回已设置的事件。
const FUNC HookDataAPI::GetHook() const
返回回调函数。
const RunTypeAPI HookDataAPI::GetRunType() const
返回运行方式。
const int HookDataAPI::GetPriority() const
返回优先级。
HookArgsBaseAPI 类
HookArgsBaseAPI 类是全部 Hook 参数的基类。
| 头文件: | #include "hooks/hooks_args_api.hpp" |
| 命名空间: | xcore_api::hooks |
无业务成员。带参数的事件在回调中转换为 HookPointArgsAPI 或 HookPPToLineArgsAPI。
HookPointArgsAPI 类
HookPointArgsAPI 类描述 POINT_CHANGE 的点位名称与增删改操作。
| 头文件: | #include "hooks/hooks_args_api.hpp" |
| 继承自: | HookArgsBaseAPI |
公有函数
HookPointArgsAPI() | |
const std::string | GetPointName() const |
bool | SetPointName(const std::string &name) |
const CURDAPI | GetOperate() const |
bool | SetOperate(const CURDAPI &operate) |
成员函数说明
const std::string HookPointArgsAPI::GetPointName() const
返回点位名。
bool HookPointArgsAPI::SetPointName(const std::string &name)
设置点位名。成功返回 true。
const CURDAPI HookPointArgsAPI::GetOperate() const
返回增 / 删 / 改操作。
bool HookPointArgsAPI::SetOperate(const CURDAPI &operate)
设置操作类型。成功返回 true。
HookPPToLineArgsAPI 类
HookPPToLineArgsAPI 类描述 PP_TO_LINE 的任务、文件与行号。
| 头文件: | #include "hooks/hooks_args_api.hpp" |
| 继承自: | HookArgsBaseAPI |
公有函数
HookPPToLineArgsAPI() | |
const std::string | GetFileName() const |
bool | SetFileName(const std::string &name) |
const int | GetFileLine() const |
bool | SetFileLine(const int line) |
const std::string | GetTaskName() const |
bool | SetTaskName(const std::string &name) |
成员函数说明
const std::string HookPPToLineArgsAPI::GetFileName() const
返回跳转目标文件名。
bool HookPPToLineArgsAPI::SetFileName(const std::string &name)
设置文件名。成功返回 true。
const int HookPPToLineArgsAPI::GetFileLine() const
返回跳转行号。
bool HookPPToLineArgsAPI::SetFileLine(const int line)
设置行号。成功返回 true。
const std::string HookPPToLineArgsAPI::GetTaskName() const
返回任务名。
bool HookPPToLineArgsAPI::SetTaskName(const std::string &name)
设置任务名。成功返回 true。
相关非成员函数
int xcore_api::hooks::RegisterHooksAPI(const HookDataAPI &data)
将 Hook 登记到控制器。返回值大于 0 为 hook id,表示成功;返回 -1 表示失败。
不接受插件 Start() 之后的动态注册。
另请参阅 UnRegisterHooksAPI()、HookDataAPI。
int xcore_api::hooks::UnRegisterHooksAPI(int hook_id)
按 hook_id 删除已注册 Hook。须在全部插件 Start 完成之后调用才生效。成功返回 0。
另请参阅 RegisterHooksAPI()。
states/states_api.hpp
| 头文件: | #include "states/states_api.hpp" |
枚举类型
enum xcore_api::states::TaskSpaceAPI
该枚举类型描述任务空间占用。
| 常量 | 描述 |
|---|---|
TS_READY | 空闲 |
TS_BUSY | 占用 |
enum xcore_api::states::RunningStateAPI
该枚举类型描述机器人当前所处的调用阶段。
| 常量 | 值 | 描述 |
|---|---|---|
RS_NONE | 0 | 无 |
RS_START | 1 | 开始 |
RS_PAUSE | 2 | 暂停 |
RS_STEP | 3 | 单步 |
RS_BACK | 4 | 上一步 |
RS_ERROR_HANDLER | 5 | 错误处理 |
RS_RESET | 6 | 复位 |
RS_COLLISION | 7 | 碰撞 |
RS_STOP_EVENT | 8 | 急停 |
RS_NUM_NEVER_USE | 9 | 哨兵,请勿使用 |
StatesAPI 类
StatesAPI 类用于查询或设置控制器运行状态。
| 头文件: | #include "states/states_api.hpp" |
| 命名空间: | xcore_api::states |
公有函数
StatesAPI() | |
| virtual | ~StatesAPI() |
bool | IsAutoMode() |
bool | SetAutoMode(bool mode) |
bool | IsPowerOn() |
bool | SetPowerOn(bool on) |
bool | IsTaskSpaceReady() |
int | SetTaskSpace(const TaskSpaceAPI &space, bool busy) |
bool | IsRobotBusy() |
bool | SetRobotBusy(bool busy) |
RunningStateAPI | GetRunningState() |
bool | IsSimuMode() |
详细描述
修改控制器状态前应确认当前模式与任务状态。与运动或任务控制组合使用时,应先判断当前是否允许执行。
SetRobotBusy()、SetTaskSpace() 须成对占用与释放,否则可能影响其他模块使用机器人。
另请参阅 RLTaskAPI、MotionCmdAPI。
成员函数说明
bool StatesAPI::IsAutoMode()
返回是否为自动模式。true 为自动,false 为手动。
另请参阅 SetAutoMode()。
bool StatesAPI::SetAutoMode(bool mode)
设置自动 / 手动模式。mode 为 true 时设为自动。成功返回 true。
警告: 会改变控制器运行模式。
另请参阅 IsAutoMode()。
bool StatesAPI::IsPowerOn()
返回是否已上电。
另请参阅 SetPowerOn()。
bool StatesAPI::SetPowerOn(bool on)
设置上下电。on 为 true 时上电。成功返回 true。
警告: 会改变控制器电源状态。
另请参阅 IsPowerOn()。
bool StatesAPI::IsTaskSpaceReady()
返回任务空间是否空闲可用。
另请参阅 SetTaskSpace()。
int StatesAPI::SetTaskSpace(const TaskSpaceAPI &space, bool busy)
设置任务空间占用。space 为 TS_BUSY 且 busy 为 true 时占用;busy 为 false 时释放并回到 Ready。成功返回 0。
另请参阅 IsTaskSpaceReady()、TaskSpaceAPI。
bool StatesAPI::IsRobotBusy()
返回机器人是否被占用。true 表示忙、不可用。
另请参阅 SetRobotBusy()。
bool StatesAPI::SetRobotBusy(bool busy)
设置机器人忙 / 空闲。须成对使用。成功返回 true。
另请参阅 IsRobotBusy()。
RunningStateAPI StatesAPI::GetRunningState()
返回当前运行阶段。
另请参阅 RunningStateAPI。
bool StatesAPI::IsSimuMode()
返回是否为仿真模式。true 为仿真,false 为实机。
rl_task/rl_task_api.hpp
| 头文件: | #include "rl_task/rl_task_api.hpp" |
RLTaskAPI 类
RLTaskAPI 类用于控制和查询 RL 程序任务。
| 头文件: | #include "rl_task/rl_task_api.hpp" |
| 命名空间: | xcore_api::rl_task |
公有函数
详细描述
跳转失败后解释器状态可能不可控,必要时须重新加载任务。指针行号可能有 1 行偏差。
警告: StopRun() 会删除任务,停止后须重新加载才能执行。
成员函数说明
bool RLTaskAPI::PPToMain()
将程序指针重置到主程序。成功返回 true。
另请参阅 IsProgramResetDone()。
bool RLTaskAPI::IsProgramResetDone()
返回程序复位是否完成。
bool RLTaskAPI::PPToLine(const int line, const std::string &task_name = "", const std::string &file_name = "")
跳转到指定任务、文件、行。task_name 与 file_name 皆为空时,在单任务模式下跳转到当前执行文件的 line。
跳转失败后状态不可控,须重新加载任务。
另请参阅 PPToFunc()、PPToMain()。
bool RLTaskAPI::PPToFunc(const int line, const std::string &task_name = "", const std::string &file_name = "")
跳转到指定函数,主要用于调试。后两个参数为空时,在单任务模式下跳转到当前执行文件的函数。
跳转失败后解释器状态不可控,须重新加载任务。
bool RLTaskAPI::ModifyProgramLoop(bool prog_loop)
修改循环模式。prog_loop 为 true 时循环执行。
bool RLTaskAPI::AlarmRLTask(const std::string &name)
唤醒名为 name 的任务。成功返回 true。
bool RLTaskAPI::StartRun()
开始执行程序。成功返回 true。
另请参阅 PauseRun()、StopRun()。
bool RLTaskAPI::PauseRun()
暂停 RL,之后可再次开始。成功返回 true。
另请参阅 StartRun()、PauseRunAndWaitIdle()。
bool RLTaskAPI::PauseRunAndWaitIdle(int timeout_ms = 2000)
暂停程序并等待机器人停止。timeout_ms 默认 2000,一般不超过 500 ms。
bool RLTaskAPI::PauseTask(const std::string &task_name)
仅将指定任务暂停。
bool RLTaskAPI::StopRun()
停止执行。停止后会删除任务,须重新加载才能执行。
警告: 会改变控制器任务状态。
另请参阅 StartRun()。
std::pair<std::string, int> RLTaskAPI::GetPointedLine(const std::string &task_name = "")
返回程序指针所在文件与行号。行号可能有 1 的差别。
另请参阅 SetPointedLine()、GetExecLine()。
std::pair<std::string, int> RLTaskAPI::GetExecLine(const std::string &task_name = "")
返回运动指针所在文件与行号。行号可能有 1 的差别。
另请参阅 SetExecLine()。
int RLTaskAPI::SetPointedLine(const std::string &task_name, const std::string &file_name, int line)
设置程序指针。成功返回 0。
int RLTaskAPI::SetExecLine(const std::string &task_name, const std::string &file_name, int line)
设置运动指针。成功返回 0。
bool RLTaskAPI::IsTaskExists(const std::string &name)
返回名为 name 的任务是否存在。
bool RLTaskAPI::IsTaskRunning(const std::string &task_name)
bool RLTaskAPI::IsTaskRunning()
带 task_name 的形式判断指定任务是否正在执行。无参形式判断当前是否有任务在执行。
这是重载函数。
io/analog_api.hpp
| 头文件: | #include "io/analog_api.hpp" |
Analog 类
Analog 类提供 AI / AO / DI / DO / GI / GO 与内部寄存器访问。
| 头文件: | #include "io/analog_api.hpp" |
| 获取: | Analog::getInstance() |
| 命名空间: | xcore_api::io |
公有函数
详细描述
通过 getInstance() 取得单例。信号读写成功返回 true,信号不存在返回 false。寄存器读写成功返回 0。AI / DI / GI 只读。
读写前应确认名称、地址、数据类型与目标架构一致。
警告: 写入 AO / DO / GO 或寄存器会改变现场信号。
另请参阅 通信模块。
成员函数说明
[static] Analog *Analog::getInstance()
返回 Analog 单例。
bool Analog::GetAIValue(const std::string &signal_name, double &value)
读取 AI。成功时写入 value。信号不存在返回 false。
bool Analog::GetAOValue(const std::string &signal_name, double &value)
读取 AO。
另请参阅 SetAOValue()。
bool Analog::SetAOValue(const std::string &signal_name, const double value)
写入 AO。
警告: 会改变现场模拟量输出。
bool Analog::GetDIValue(const std::string &signal_name, bool &value)
读取 DI。
bool Analog::GetDOValue(const std::string &signal_name, bool &value)
读取 DO。
另请参阅 SetDOValue()。
bool Analog::SetDOValue(const std::string &signal_name, const bool value)
写入 DO。
警告: 会改变现场数字量输出。
bool Analog::GetGIValue(const std::string &signal_name, unsigned int &value)
读取 GI。
bool Analog::GetGOValue(const std::string &signal_name, unsigned int &value)
读取 GO。
另请参阅 SetGOValue()。
bool Analog::SetGOValue(const std::string &signal_name, const unsigned int value)
写入 GO。信号不存在或超出限制时返回 false。
int Analog::WriteInt16Register(const std::string &name, const int16_t &value, int bias)
按名称与偏置写入 int16 寄存器。成功返回 0。
另请参阅 ReadInt16Register()。
int Analog::WriteBoolRegister(const std::string &name, const bool &value, int bias)
写入 bool 寄存器。
int Analog::WriteFloatRegister(const std::string &name, const float &value, int bias)
写入 float 寄存器。
int Analog::WriteBitRegister(const std::string &name, const bool &value, int bias)
写入 bit 寄存器。
int Analog::WriteInt32Register(const std::string &name, const int32_t &value, int bias)
写入 int32 寄存器。
int Analog::WriteByteRegister(const std::string &name, const uint8_t &value, int bias)
写入 byte 寄存器。
int Analog::ReadInt16Register(const std::string &name, int16_t &value, int bias)
读取 int16 寄存器。
int Analog::ReadBoolRegister(const std::string &name, bool &value, int bias)
读取 bool 寄存器。
int Analog::ReadFloatRegister(const std::string &name, float &value, int bias)
读取 float 寄存器。
int Analog::ReadBitRegister(const std::string &name, bool &value, int bias)
读取 bit 寄存器。
int Analog::ReadInt32Register(const std::string &name, int32_t &value, int bias)
读取 int32 寄存器。
int Analog::ReadByteRegister(const std::string &name, uint8_t &value, int bias)
读取 byte 寄存器。
bool Analog::IsAiExist(const std::string &signal_name)
返回 AI 是否存在。
bool Analog::IsAoExist(const std::string &signal_name)
返回 AO 是否存在。
bool Analog::IsDiExist(const std::string &signal_name)
返回 DI 是否存在。
bool Analog::IsDoExist(const std::string &signal_name)
返回 DO 是否存在。
bool Analog::IsGiExist(const std::string &signal_name)
返回 GI 是否存在。
bool Analog::IsGoExist(const std::string &signal_name)
返回 GO 是否存在。
bool Analog::RegisterType(const std::string ®ister_name, std::string &type)
按名称查询寄存器类型,写入 type(int16、bool、float、bit、int32、byte)。寄存器不存在返回 false。
bool Analog::RegisterWriteable(const std::string ®ister_name, bool &writeable)
查询寄存器是否可写。寄存器不存在返回 false。
bool Analog::CheckRegisterCanUsedAsIO(const std::string ®ister_name, const std::string &io_type)
判断寄存器能否作为指定 IO 类型的替代。满足返回 true。
registers/function_code_api.hpp
| 头文件: | #include "registers/function_code_api.hpp" |
插件可声明功能码类,定义支持的寄存器类型、长度、读写属性,并实现执行逻辑。注册后可在 HMI 功能码列表中显示。详见 通信模块。
宏
DECLARE_FUNCTION_CODE_API(type_name)
声明功能码类 type_name,使其继承 FuncCodeAPI,并实现 Clone()。
另请参阅 FUNCTION_CODE_EXECUTE_API()、RegFuncCodeAPI()。
FUNCTION_CODE_EXECUTE_API(type_name)
定义 type_name 的 ExecFuncCode() 函数体。
枚举类型
enum xcore_api::registers::RegTypeAPI
该枚举类型描述寄存器数据类型。
| 常量 | 描述 |
|---|---|
BIT | 位 |
BOOL | 布尔 |
BYTE | 字节 |
INT16 | 16 位整数 |
INT32 | 32 位整数 |
FLOAT | 浮点 |
FuncCodeCfgAPI 类
FuncCodeCfgAPI 类描述功能码名称、支持类型、长度与是否可写。
| 头文件: | #include "registers/function_code_api.hpp" |
| 命名空间: | xcore_api::registers |
公有函数
FuncCodeCfgAPI() | |
| virtual | ~FuncCodeCfgAPI() |
bool | SetName(const std::string &name) |
std::string | GetName() |
bool | SetSupportType(const std::vector<RegTypeAPI> &v) |
std::vector<RegTypeAPI> | GetSupportType() |
bool | SetLen(uint32_t len) |
uint32_t | GetLen() |
bool | SetWriteable(bool writeable) |
bool | IsWriteable() |
成员函数说明
bool FuncCodeCfgAPI::SetName(const std::string &name)
设置功能码名称。成功返回 true。
std::string FuncCodeCfgAPI::GetName()
返回功能码名称。
bool FuncCodeCfgAPI::SetSupportType(const std::vector<RegTypeAPI> &v)
设置支持的寄存器类型集合。
std::vector<RegTypeAPI> FuncCodeCfgAPI::GetSupportType()
返回支持的类型集合。
bool FuncCodeCfgAPI::SetLen(uint32_t len)
设置寄存器长度。
uint32_t FuncCodeCfgAPI::GetLen()
返回寄存器长度。
bool FuncCodeCfgAPI::SetWriteable(bool writeable)
设置读写属性。writeable 为 true 时为写类型,为 false 时为读类型。
只读寄存器在值变化时执行功能码;只写寄存器在执行功能码后写入寄存器。
bool FuncCodeCfgAPI::IsWriteable()
返回是否为写类型。
FuncCodeAPI 类
FuncCodeAPI 类是功能码基类。派生类须实现 ExecFuncCode() 与 Clone()。
| 头文件: | #include "registers/function_code_api.hpp" |
| 命名空间: | xcore_api::registers |
公有函数
FuncCodeAPI(const FuncCodeCfgAPI &cfg) | |
| virtual | ~FuncCodeAPI() |
[pure virtual] bool | ExecFuncCode() |
[pure virtual] std::shared_ptr<FuncCodeAPI> | Clone() |
FuncCodeCfgAPI | GetCfg() |
int | ReadIntRegValue(std::vector<int> &v) |
int | ReadFloatRegValue(std::vector<float> &v) |
int | WriteIntRegValue(const std::vector<int> &v) |
int | WriteFloatRegValue(const std::vector<float> &v) |
详细描述
建议使用 DECLARE_FUNCTION_CODE_API() 声明派生类,再调用 RegFuncCodeAPI() 登记。
另请参阅 通信模块。
成员函数说明
[pure virtual] bool FuncCodeAPI::ExecFuncCode()
功能码执行逻辑。成功返回 true。
[pure virtual] std::shared_ptr<FuncCodeAPI> FuncCodeAPI::Clone()
克隆当前功能码实例。宏 DECLARE_FUNCTION_CODE_API() 已提供默认实现。
FuncCodeCfgAPI FuncCodeAPI::GetCfg()
返回功能码配置。
int FuncCodeAPI::ReadIntRegValue(std::vector<int> &v)
读取关联的整数寄存器。成功返回 0。
int FuncCodeAPI::ReadFloatRegValue(std::vector<float> &v)
读取关联的浮点寄存器。成功返回 0。
int FuncCodeAPI::WriteIntRegValue(const std::vector<int> &v)
写入整数寄存器。成功返回 0。
int FuncCodeAPI::WriteFloatRegValue(const std::vector<float> &v)
写入浮点寄存器。成功返回 0。
相关非成员函数
bool xcore_api::registers::RegFuncCodeAPI(std::shared_ptr<FuncCodeAPI> ptr)
将功能码登记到控制器。成功返回 true。建议在 Init() 中调用。
另请参阅 DECLARE_FUNCTION_CODE_API()。
ethercat/ecat_base_api.hpp
| 头文件: | #include "ethercat/ecat_base_api.hpp" |
PDO / SDO 数据结构见 const_data/ecat_api.hpp。使用方式见 通信模块。
EcatBaseAPI 类
EcatBaseAPI 类用于操作指定从站的 PDO 与 SDO。二次开发通常继承本类,在派生类中注册对象后再读写。
| 头文件: | #include "ethercat/ecat_base_api.hpp" |
| 命名空间: | xcore_api::ecat |
公有函数
EcatBaseAPI(uint16_t slave_id) | |
| virtual | ~EcatBaseAPI() |
int | GetPdoValue(const PdoAPI &obj, void *value, bool bOutputData = false) |
int | SetPdoValue(const PdoAPI &obj, void *value) |
int | SetSdoValue(SdoAPI &sdo, void *value) |
int | GetSdoValue(SdoAPI &sdo, void *value) |
保护函数
详细描述
构造时传入从站 ID。传入的数据指针空间须与对象长度匹配。除另行说明外,返回 0 表示成功。
成员函数说明
int EcatBaseAPI::GetPdoValue(const PdoAPI &obj, void *value, bool bOutputData = false)
读取 PDO。bOutputData 为 true 时读输出数据,为 false 时读输入数据。value 指向的缓冲区须足够大。成功返回 0。
另请参阅 SetPdoValue()、PdoAPI。
int EcatBaseAPI::SetPdoValue(const PdoAPI &obj, void *value)
写入 PDO。成功返回 0。
int EcatBaseAPI::SetSdoValue(SdoAPI &sdo, void *value)
写入 SDO。成功返回 0。
另请参阅 GetSdoValue()、SdoAPI。
int EcatBaseAPI::GetSdoValue(SdoAPI &sdo, void *value)
读取 SDO。成功返回 0。
bool EcatBaseAPI::InitEcat()
初始化 EtherCAT。成功返回 true。供派生类在初始化流程中调用。
int EcatBaseAPI::RegisterPdo(PdoAPI &pdo, uint16_t baseIndex, uint16_t byteoffs, uint16_t byteLen)
将 PDO 注册到对应基址、字节偏移与长度。成功返回 0。
int EcatBaseAPI::RegisterSdo(SdoAPI &sdo, uint16_t index, uint16_t subIndex, uint16_t dateLen, uint16_t timeOut, const ThreadFunc &func)
注册 SDO。dateLen、timeOut 的拼写与头文件一致。成功返回 0。
fieldbus/fieldbus_api.hpp
| 头文件: | #include "fieldbus/fieldbus_api.hpp" |
封装现场总线设备的创建、配置、打开、关闭、寄存器读写和 DI / DO 访问。详见 通信模块。
枚举类型
enum xcore_api::fieldbus::DeviceTypeAPI
该枚举类型描述总线设备类型。
| 常量 | 描述 |
|---|---|
MODBUS_TCP_MASTER | Modbus TCP 主站 |
MODBUS_TCP_SLAVER | Modbus TCP 从站 |
MODBUS_RTU_MASTER | Modbus RTU 主站 |
MODBUS_RTU_SLAVER | Modbus RTU 从站 |
PROFINET_SLAVER | Profinet 从站 |
EIP_SLAVER | EtherNet/IP 从站 |
CCLINK_IE_SLAVER | CC-Link IE 从站 |
CCLINK_ECAT_SLAVER | CC-Link EtherCAT 从站 |
常量名中的拼写 SLAVER 与头文件一致。
enum xcore_api::fieldbus::EndianAPI
该枚举类型描述寄存器数据的大小端。
| 常量 | 描述 |
|---|---|
ABCD | 大端 |
CDAB | 字节大端、字小端 |
BADC | 字节小端、字大端 |
DCBA | 字节与字均为小端 |
FieldbusCfgAPI 类
FieldbusCfgAPI 类是总线设备的基础配置,包含设备类型、名称与大小端。
| 头文件: | #include "fieldbus/fieldbus_api.hpp" |
| 命名空间: | xcore_api::fieldbus |
公有函数
FieldbusCfgAPI() | |
FieldbusCfgAPI(DeviceTypeAPI type) | |
| virtual | ~FieldbusCfgAPI() |
void | Reset(DeviceTypeAPI type) |
int | SetName(const std::string &value) |
std::string | GetName() |
int | SetEndian(EndianAPI endian) |
EndianAPI | GetEndian() |
成员函数说明
void FieldbusCfgAPI::Reset(DeviceTypeAPI type)
重置设备类型。
int FieldbusCfgAPI::SetName(const std::string &value)
设置设备名。成功返回 0。
std::string FieldbusCfgAPI::GetName()
返回设备名,默认为空。
int FieldbusCfgAPI::SetEndian(EndianAPI endian)
设置大小端。成功返回 0。
EndianAPI FieldbusCfgAPI::GetEndian()
返回大小端。
ModbusCfgAPI 类
ModbusCfgAPI 类描述 Modbus TCP / RTU 的 IP、端口、串口、从站 ID 以及寄存器 / 线圈数量。
| 头文件: | #include "fieldbus/fieldbus_api.hpp" |
| 继承自: | FieldbusCfgAPI |
公有函数
ModbusCfgAPI(DeviceTypeAPI type) | |
void | SetIp(const std::string &value) |
const std::string | GetIp() const |
void | SetPort(const uint32_t &value) |
const uint32_t | GetPort() const |
void | SetSerialName(const std::string &value) |
const std::string | GetSerialName() const |
void | SetSlaverId(const uint32_t &value) |
const uint32_t | GetSlaverId() const |
void | SetHoldRegStartAddr(const uint32_t &value) |
const uint32_t | GetHoldRegStartAddr() const |
void | SetHoldRegNum(const uint32_t &value) |
const uint32_t | GetHoldRegNum() const |
void | SetInputRegStartAddr(const uint32_t &value) |
const uint32_t | GetInputRegStartAddr() const |
void | SetInputRegNum(const uint32_t &value) |
const uint32_t | GetInputRegNum() const |
void | SetCoilsStartAddr(const uint32_t &value) |
const uint32_t | GetCoilsStartAddr() const |
void | SetCoilsNum(const uint32_t &value) |
const uint32_t | GetCoilsNum() const |
void | SetDiscInputStartAddr(const uint32_t &value) |
const uint32_t | GetDiscInputStartAddr() const |
void | SetDiscInputNum(const uint32_t &value) |
const uint32_t | GetDiscInputNum() const |
详细描述
TCP 类型使用 SetIp()、SetPort()。RTU 类型使用 SetSerialName()。从站不支持读线圈或离散输入时,须将对应数量设为 0,否则可能影响功能。
成员函数说明
void ModbusCfgAPI::SetIp(const std::string &value)
设置 IP。仅 Modbus TCP 有效。
const std::string ModbusCfgAPI::GetIp() const
返回 IP。
void ModbusCfgAPI::SetPort(const uint32_t &value)
设置端口。仅 Modbus TCP 有效。
const uint32_t ModbusCfgAPI::GetPort() const
返回端口。
void ModbusCfgAPI::SetSerialName(const std::string &value)
设置串口名。仅 Modbus RTU 有效。
const std::string ModbusCfgAPI::GetSerialName() const
返回串口名。
void ModbusCfgAPI::SetSlaverId(const uint32_t &value)
设置从站 ID。函数名中的拼写 Slaver 与头文件一致。
const uint32_t ModbusCfgAPI::GetSlaverId() const
返回从站 ID。
void ModbusCfgAPI::SetHoldRegStartAddr(const uint32_t &value)
设置保持寄存器起始地址。
const uint32_t ModbusCfgAPI::GetHoldRegStartAddr() const
返回保持寄存器起始地址。
void ModbusCfgAPI::SetHoldRegNum(const uint32_t &value)
设置保持寄存器数量。
const uint32_t ModbusCfgAPI::GetHoldRegNum() const
返回保持寄存器数量。
void ModbusCfgAPI::SetInputRegStartAddr(const uint32_t &value)
设置输入寄存器起始地址。
const uint32_t ModbusCfgAPI::GetInputRegStartAddr() const
返回输入寄存器起始地址。
void ModbusCfgAPI::SetInputRegNum(const uint32_t &value)
设置输入寄存器数量。
const uint32_t ModbusCfgAPI::GetInputRegNum() const
返回输入寄存器数量。
void ModbusCfgAPI::SetCoilsStartAddr(const uint32_t &value)
设置线圈起始地址。
const uint32_t ModbusCfgAPI::GetCoilsStartAddr() const
返回线圈起始地址。
void ModbusCfgAPI::SetCoilsNum(const uint32_t &value)
设置线圈数量。从站不支持时设为 0。
const uint32_t ModbusCfgAPI::GetCoilsNum() const
返回线圈数量。
void ModbusCfgAPI::SetDiscInputStartAddr(const uint32_t &value)
设置离散输入起始地址。
const uint32_t ModbusCfgAPI::GetDiscInputStartAddr() const
返回离散输入起始地址。
void ModbusCfgAPI::SetDiscInputNum(const uint32_t &value)
设置离散输入数量。从站不支持时设为 0。
const uint32_t ModbusCfgAPI::GetDiscInputNum() const
返回离散输入数量。
ProfinetCfgAPI 类
ProfinetCfgAPI 类描述 Profinet 站点名、网卡、更新周期与槽模块 ID。
| 头文件: | #include "fieldbus/fieldbus_api.hpp" |
| 继承自: | FieldbusCfgAPI |
公有函数
ProfinetCfgAPI(DeviceTypeAPI type) | |
void | SetStationName(const std::string &value) |
const std::string | GetStationName() const |
void | SetNetcard(const std::string &value) |
const std::string | GetNetcard() const |
void | SetUpdateDataInternal(const uint32_t &value) |
const uint32_t | GetUpdateDataInternal() const |
void | SetSlot1ModuleID(const uint32_t &value) |
const uint32_t | GetSlot1ModuleID() const |
void | SetSlot2ModuleID(const uint32_t &value) |
const uint32_t | GetSlot2ModuleID() const |
void | SetSlot3MmoduleID(const uint32_t &value) |
const uint32_t | GetSlot3ModuleID() const |
void | SetSlot4ModuleID(const uint32_t &value) |
const uint32_t | GetSlot4ModuleID() const |
void | SetSlot5ModuleID(const uint32_t &value) |
const uint32_t | GetSlot5ModuleID() const |
void | SetSlot6ModuleID(const uint32_t &value) |
const uint32_t | GetSlot6ModuleID() const |
成员函数说明
void ProfinetCfgAPI::SetStationName(const std::string &value)
设置站点名。
const std::string ProfinetCfgAPI::GetStationName() const
返回站点名。
void ProfinetCfgAPI::SetNetcard(const std::string &value)
设置网卡。函数名中的拼写 Netcard 与头文件一致。
const std::string ProfinetCfgAPI::GetNetcard() const
返回网卡。
void ProfinetCfgAPI::SetUpdateDataInternal(const uint32_t &value)
设置更新周期。函数名中的拼写 Internal 与头文件一致。
const uint32_t ProfinetCfgAPI::GetUpdateDataInternal() const
返回更新周期。
void ProfinetCfgAPI::SetSlot1ModuleID(const uint32_t &value)
设置槽 1 模块 ID。槽 2、4、5、6 的设置函数同理。
const uint32_t ProfinetCfgAPI::GetSlot1ModuleID() const
返回槽 1 模块 ID。槽 2 至槽 6 的获取函数同理。
void ProfinetCfgAPI::SetSlot2ModuleID(const uint32_t &value)
设置槽 2 模块 ID。
const uint32_t ProfinetCfgAPI::GetSlot2ModuleID() const
返回槽 2 模块 ID。
void ProfinetCfgAPI::SetSlot3MmoduleID(const uint32_t &value)
设置槽 3 模块 ID。函数名中的拼写 Mmodule 与头文件一致。
const uint32_t ProfinetCfgAPI::GetSlot3ModuleID() const
返回槽 3 模块 ID。
void ProfinetCfgAPI::SetSlot4ModuleID(const uint32_t &value)
设置槽 4 模块 ID。
const uint32_t ProfinetCfgAPI::GetSlot4ModuleID() const
返回槽 4 模块 ID。
void ProfinetCfgAPI::SetSlot5ModuleID(const uint32_t &value)
设置槽 5 模块 ID。
const uint32_t ProfinetCfgAPI::GetSlot5ModuleID() const
返回槽 5 模块 ID。
void ProfinetCfgAPI::SetSlot6ModuleID(const uint32_t &value)
设置槽 6 模块 ID。
const uint32_t ProfinetCfgAPI::GetSlot6ModuleID() const
返回槽 6 模块 ID。
EipCfgAPI 类
EipCfgAPI 类描述 EtherNet/IP 的读写寄存器数量与网卡。
| 头文件: | #include "fieldbus/fieldbus_api.hpp" |
| 继承自: | FieldbusCfgAPI |
公有函数
EipCfgAPI(DeviceTypeAPI type) | |
void | SetReadRegNum(const uint16_t &value) |
const uint16_t | GetReadRegNum() const |
void | SetWriteRegNum(const uint16_t &value) |
const uint16_t | GetWriteRegNum() const |
void | SetNetCard(const std::string &value) |
const std::string | GetNetCard() const |
成员函数说明
void EipCfgAPI::SetReadRegNum(const uint16_t &value)
设置读寄存器数量。
const uint16_t EipCfgAPI::GetReadRegNum() const
返回读寄存器数量。
void EipCfgAPI::SetWriteRegNum(const uint16_t &value)
设置写寄存器数量。
const uint16_t EipCfgAPI::GetWriteRegNum() const
返回写寄存器数量。
void EipCfgAPI::SetNetCard(const std::string &value)
设置网卡。
const std::string EipCfgAPI::GetNetCard() const
返回网卡。
CCLinkCfgAPI 类
CCLinkCfgAPI 类描述 CC-Link 协议类型、网卡、占用站数、波特率与协议版本。
| 头文件: | #include "fieldbus/fieldbus_api.hpp" |
| 继承自: | FieldbusCfgAPI |
公有函数
CCLinkCfgAPI(DeviceTypeAPI type) | |
void | SetProtoType(const std::string &value) |
const std::string | GetProtoType() const |
void | SetNetCard(const std::string &value) |
const std::string | GetNetCard() const |
void | SetOccupiedStaNum(const uint32_t &value) |
const uint32_t | GetOccupiedStationNum() const |
void | SetBaudRate(const uint32_t &value) |
const uint32_t | GetBaudRate() const |
void | SetProtoVersion(const uint32_t &value) |
const uint32_t | GetProtoVersion() const |
成员函数说明
void CCLinkCfgAPI::SetProtoType(const std::string &value)
设置协议类型。
const std::string CCLinkCfgAPI::GetProtoType() const
返回协议类型。
void CCLinkCfgAPI::SetNetCard(const std::string &value)
设置网卡。
const std::string CCLinkCfgAPI::GetNetCard() const
返回网卡。
void CCLinkCfgAPI::SetOccupiedStaNum(const uint32_t &value)
设置占用站数。
const uint32_t CCLinkCfgAPI::GetOccupiedStationNum() const
返回占用站数。
void CCLinkCfgAPI::SetBaudRate(const uint32_t &value)
设置波特率。
const uint32_t CCLinkCfgAPI::GetBaudRate() const
返回波特率。
void CCLinkCfgAPI::SetProtoVersion(const uint32_t &value)
设置协议版本。
const uint32_t CCLinkCfgAPI::GetProtoVersion() const
返回协议版本。
FieldbusAPI 类
FieldbusAPI 类提供打开、关闭、寄存器读写与 DI / DO 的统一访问。
| 头文件: | #include "fieldbus/fieldbus_api.hpp" |
| 命名空间: | xcore_api::fieldbus |
公有函数
FieldbusAPI(const FieldbusCfgAPI &cfg) | |
| virtual | ~FieldbusAPI() |
int | Open() |
int | Close() |
int | ReadRegisters(uint32_t addr, uint16_t *dest, const uint32_t &nb = 1) |
int | WriteRegisters(uint32_t addr, const uint16_t *src, const uint32_t &nb = 1) |
int | GetDINum() |
int | GetDONum() |
int | SetDO(const uint32_t &index, const bool &value) |
int | GetDI(const uint32_t &index, bool &value) |
详细描述
构造时传入 FieldbusCfgAPI 或其派生配置。除另行说明外,返回 0 表示成功。
另请参阅 通信模块。
成员函数说明
int FieldbusAPI::Open()
打开总线设备。成功返回 0。
另请参阅 Close()。
int FieldbusAPI::Close()
关闭总线设备。成功返回 0。
int FieldbusAPI::ReadRegisters(uint32_t addr, uint16_t *dest, const uint32_t &nb = 1)
从 addr 读取 nb 个寄存器到 dest。nb 默认 1。成功返回 0。
另请参阅 WriteRegisters()。
int FieldbusAPI::WriteRegisters(uint32_t addr, const uint16_t *src, const uint32_t &nb = 1)
将 src 中 nb 个寄存器写入 addr。成功返回 0。
int FieldbusAPI::GetDINum()
返回 DI 数量。
int FieldbusAPI::GetDONum()
返回 DO 数量。
int FieldbusAPI::SetDO(const uint32_t &index, const bool &value)
按索引设置 DO。成功返回 0。
警告: 会改变现场数字量输出。
int FieldbusAPI::GetDI(const uint32_t &index, bool &value)
按索引读取 DI。成功时写入 value。
endtool/endtool_api.hpp
| 头文件: | #include "endtool/endtool_api.hpp" |
用于通过末端协议透传控制电爪等设备。当前主要封装 Modbus RTU。
ModbusRTUEndtoolAPI 类
ModbusRTUEndtoolAPI 类封装末端 Modbus RTU 常用功能码。
| 头文件: | #include "endtool/endtool_api.hpp" |
| 命名空间: | xcore_api::endtool |
公有函数
详细描述
适合封装电爪、工具快换、传感器等末端设备的私有协议。crc_inverse 为是否反转 CRC。成功返回 true。
成员函数说明
bool ModbusRTUEndtoolAPI::RWData(const int &send_len, const std::vector<uint8_t> &send_data, const int &rev_len, std::vector<uint8_t> &rev_data, int &ret_status)
直接发送和接收原始数据。ret_status 为返回状态。
bool ModbusRTUEndtoolAPI::ReadCoil_01(const int &slave_id, const uint16_t &addr, const int &len, std::vector<bool> &data, bool crc_inverse = false)
读线圈,功能码 01。
bool ModbusRTUEndtoolAPI::ReadDiscreteInput_02(const int &slave_id, const uint16_t &addr, const int &len, std::vector<bool> &data, bool crc_inverse = false)
读离散输入,功能码 02。
bool ModbusRTUEndtoolAPI::ReadRegister_03(const int &slave_id, const uint16_t &addr, const uint16_t &len, std::vector<uint16_t> &data, bool crc_inverse = false)
读保持寄存器,功能码 03。
bool ModbusRTUEndtoolAPI::ReadRegister_04(const int &slave_id, const uint16_t &addr, const uint16_t &len, std::vector<uint16_t> &data, bool crc_inverse = false)
读输入寄存器,功能码 04。
bool ModbusRTUEndtoolAPI::WriteCoil_05(const int &slave_id, const uint16_t &addr, const int &len, std::vector<bool> &data, bool crc_inverse = false)
写单个线圈,功能码 05。
bool ModbusRTUEndtoolAPI::WriteRegister_06(const int &slave_id, const uint16_t &addr, const uint16_t &len, const std::vector<uint16_t> &data, bool crc_inverse = false)
写单个寄存器,功能码 06。
bool ModbusRTUEndtoolAPI::WriteCoil_0F(const int &slave_id, const uint16_t &addr, const int &len, std::vector<bool> &data, bool crc_inverse = false)
写多个线圈,功能码 15。
bool ModbusRTUEndtoolAPI::WriteRegister_10(const int &slave_id, const uint16_t &addr, const uint16_t &len, const std::vector<uint16_t> &data, bool crc_inverse = false)
写多个寄存器,功能码 16。
service/service_api.hpp
| 头文件: | #include "service/service_api.hpp" |
用于在控制器插件中注册自定义 JSON 协议。客户端按 plugin_name 与 key 发送请求后,控制器调用已注册回调并返回其生成的 JSON。详见 客户端交互。
相关非成员函数
int xcore_api::service::RegServiceAPI(const std::string &plugin_name, const std::string &key, const std::function &func)
登记一条服务协议。plugin_name 为插件名,key 为协议键,func 接收请求 JSON 并返回应答 JSON。成功返回 0。
建议在 Start() 中注册。可用于读取状态、下发配置,或用 JSON 实现轻量级插件间通信。
另请参阅 客户端交互。
log/log_api.hpp
| 头文件: | #include "log/log_api.hpp" |
初始化插件独立日志,并提供带插件名前缀的日志宏。详见 log 库使用。
宏
| 宏 | 级别 |
|---|---|
LOG_DEBUG / LOG_INFO / LOG_WARNING / LOG_ERROR / LOG_FATAL | Debug / Info / Warning / Error / Fatal |
宏说明
用法与流式输出类似:
LOG_INFO << "hello world";
请使用本头文件中的定制宏。不用这些宏时,日志会与控制器日志输出到一起。日志存储总量不能超过 1 GB。
另请参阅 InitLogAPI()、log 库使用。
相关非成员函数
int xcore_api::log::InitLogAPI(const std::string &dir, size_t max_size, size_t max_nubmer)
初始化插件日志。dir 为相对插件 data 目录的存储目录。max_size 为单个文件大小上限,单位 MB。max_nubmer 为文件个数,参数名拼写与头文件一致。成功返回 0。
建议在 Init() 中调用。
头文件还声明 xcore_api::log::PLUGIN,值为 GetPluginNameAPI() 的返回值,供日志级别前缀使用。
user_log/user_log_api.hpp
| 头文件: | #include "user_log/user_log_api.hpp" |
向控制器注册和上报多语言用户日志、运行日志。建议在 Init() 加载配置,在 Start() 注册日志码。详见 用户日志上报。
相关非成员函数
int xcore_api::user_log::ConfigReportLogAPI(const Json::Value &val)
配置本插件的多语言日志。须在 Init() 中调用。成功返回 0。
另请参阅 ConfigEnglishReportLogAPI()、RegisterReportLogAPI()。
int xcore_api::user_log::ConfigEnglishReportLogAPI(const Json::Value &val)
配置英文兜底日志。须在 Init() 中调用。成功返回 0。
int xcore_api::user_log::RegisterReportLogAPI()
将已配置的日志码登记到控制器并生效。须在 Start() 中调用。成功返回 0。
void xcore_api::user_log::ReportUserLogAPI(int log_no, const std::string &detail = "", const std::string &context = "")
上报多语言用户日志。log_no 为日志编号,detail 为细化原因键,context 用于替换文案中的 $arg。
void xcore_api::user_log::ReportRunLogAPI(int log_no, const std::string &arg = "", const std::string &detail = "")
上报用户运行日志。log_no 对应 RunLog 编号。arg 替换 content 中的 $arg。detail 会在客户端详情页展示。
const_data/pose_api.hpp
| 头文件: | #include "const_data/pose_api.hpp" |
定义控制器插件常用的运动数据结构,采用国际单位:米、弧度、千克。这些类型支持 operator<<,可直接写入日志。
PositionAPI 结构体
PositionAPI 结构体描述位置,单位为米。
| 成员 | 类型 | 描述 |
|---|---|---|
x / y / z | double | 坐标,单位为米 |
QuaternionAPI 结构体
QuaternionAPI 结构体描述姿态四元数。默认值为 (1, 0, 0, 0)。
| 成员 | 类型 | 描述 |
|---|---|---|
q1 / q2 / q3 / q4 | double | 四元数分量 |
ConfDataAPI 结构体
ConfDataAPI 结构体描述机器人构型,用于确定到达目标点的解。
| 成员 | 类型 | 描述 |
|---|---|---|
cfx / cf1–cf7 | int | 构型分量 |
PoseAPI 结构体
PoseAPI 结构体描述位姿 / 坐标系。
| 成员 | 类型 | 描述 |
|---|---|---|
p | PositionAPI | 位置 |
q | QuaternionAPI | 姿态 |
支持右乘 operator* 与 Inverse()。
PoseAPI PoseAPI::Inverse() const
返回该坐标系的逆。
PointAPI 结构体
PointAPI 结构体描述点位,可表示笛卡尔点或关节点。
| 成员 | 类型 | 描述 |
|---|---|---|
pose | PoseAPI | 笛卡尔位姿 |
joint | std::vector<double> | 关节角,单位为弧度 |
is_joint | bool | 是否为关节点 |
extjoint | std::vector<double> | 外部轴,单位为弧度 |
is_ext_rad | bool | 头文件注释为「外部轴是度」,默认 false |
arm_angle | double | 七轴机器人臂角 |
confdata | ConfDataAPI | 构型 |
ZoneAPI 结构体
ZoneAPI 结构体描述转弯区。
| 成员 | 类型 | 描述 |
|---|---|---|
distance | double | 距离,单位为米 |
percent | double | 百分比 |
SpeedAPI 结构体
SpeedAPI 结构体描述速度。
| 成员 | 类型 | 描述 |
|---|---|---|
tcpvel | double | TCP 平动速度,单位为 m/s |
orivel | double | 姿态旋转速度,单位为 rad/s |
psivel | double | 七轴臂角速度 |
percent | double | 关节速度百分比 |
forced | bool | 为 true 时不受速度滑条影响 |
LoadAPI 结构体
LoadAPI 结构体描述负载。
| 成员 | 类型 | 描述 |
|---|---|---|
mass | double | 质量,单位为千克 |
cog | PoseAPI | 质心 |
ix / iy / iz | double | 转动惯量 |
TriggerAPI 结构体
TriggerAPI 结构体描述轨迹触发器。
| 成员 | 类型 | 描述 |
|---|---|---|
type | TriggerType | DISTANCE 或 TIME |
reference_is_from_start | bool | 是否从起点起算 |
value_from_reference | double | 相对参考点的值,单位为米或秒 |
trigger_callback | std::function<void()> | 触发回调 |
另请参阅 MotionCmdArgsAPI::SetTriggers()。
ToolAPI 结构体
ToolAPI 结构体描述工具坐标系与工具负载。
WobjAPI 结构体
WobjAPI 结构体描述工件坐标系、用户坐标系与工件负载。
| 成员 | 类型 | 描述 |
|---|---|---|
rob_hold | bool | true 为手持工件,false 为外部工件 |
wobj_frame | PoseAPI | 相对用户坐标系的工件坐标系 |
wobj_load | LoadAPI | 工件负载 |
user_frame | PoseAPI | 用户坐标系 |
uf_prog | bool | 用户坐标系是否移动 |
uf_mec | std::string | 关联机械单元 |
uf_id | int | 用户坐标 ID |
mech_unit | void * | 机械单元数据 |
const_data/ecat_api.hpp
| 头文件: | #include "const_data/ecat_api.hpp" |
定义 EtherCAT PDO / SDO 数据结构,供 ethercat 使用。
类型
using xcore_api::const_data::ecat::ThreadFunc = std::function
SDO 回调函数类型。
PdoAPI 结构体
PdoAPI 结构体描述 PDO。
| 成员 | 类型 | 描述 |
|---|---|---|
baseIndex | uint16_t | 数据 index |
byteOffs | uint16_t | 字节偏移 |
byteSize | uint16_t | 数据大小 |
name | std::string | PDO 名 |
另请参阅 RegisterPdo()、GetPdoValue()。
SdoAPI 结构体
SdoAPI 结构体描述 SDO。默认超时 4000。
| 成员 | 类型 | 描述 |
|---|---|---|
index | uint16_t | 索引 |
subIndex | uint8_t | 子索引 |
dateLen | uint32_t | 数据长度,成员名拼写与头文件一致 |
timeOut | uint32_t | 超时 |
flags | uint32_t | 标志位 |
m_msg_callback | ThreadFunc | 回调 |
另请参阅 RegisterSdo()、GetSdoValue()。
utils/filesystem_api.hpp
| 头文件: | #include "utils/filesystem_api.hpp" |
JSON 用法示例见 json 库使用。
相关非成员函数
bool xcore_api::utils::WriteBinaryToFileAPI(const std::string &filename, const std::string &content)
将二进制内容写入 filename。成功返回 true。
另请参阅 ReadBinaryFromFileAPI()。
bool xcore_api::utils::ReadBinaryFromFileAPI(const std::string &filename, std::string &content)
从 filename 读取二进制内容到 content。成功返回 true。
bool xcore_api::utils::LoadFromFileAPI(Json::Value &root, const std::string &file_name)
从文件解析 JSON 到 root。成功返回 true。
另请参阅 LoadFromStringAPI()、SaveToFileAPI()。
bool xcore_api::utils::LoadFromStringAPI(Json::Value &root, const std::string &json_str)
从字符串解析 JSON 到 root。成功返回 true。
bool xcore_api::utils::SaveToFileAPI(const Json::Value &root, const std::string &file_name)
将 JSON 写入文件。成功返回 true。
std::string xcore_api::utils::SaveToStringAPI(const Json::Value &root)
将 JSON 序列化为字符串。
std::string xcore_api::utils::SaveToStringInLineAPI(const Json::Value &root)
将 JSON 按行序列化为字符串。
void xcore_api::utils::CreateEmptyJsonFileAPI(const std::string &file_name)
创建空 JSON 文件。
bool xcore_api::utils::IsJsonFileAPI(const std::string &file_name)
判断 file_name 是否为 JSON 文件。
std::string xcore_api::utils::GetPluginNameAPI()
返回当前插件名称。
utils/thread_pool_api.hpp
| 头文件: | #include "utils/thread_pool_api.hpp" |
同步 Hook、自定义指令执行函数和运动回调中不要长时间阻塞;耗时任务请使用本接口。
相关非成员函数
std::future<void> xcore_api::utils::RunInThreadPoolAPI(const std::function<void()> &func)
在线程池中执行无返回值函数。
另请参阅 RunInThreadPoolIntAPI()。
std::future<int> xcore_api::utils::RunInThreadPoolIntAPI(const std::function<int()> &func)
在线程池中执行返回 int 的函数。通过 future.get() 取回返回值。
utils/singleton_api.hpp
| 头文件: | #include "utils/singleton_api.hpp" |
宏
DECLARE_SINGLETON(type)
在类内声明单例友元,使 SingletonBaseAPI 能构造 type。
另请参阅 SINGLETON_INSTANCE()。
SINGLETON_INSTANCE(type)
返回 type 的单例指针,等价于 type::GetInstancePtr()。
INIT_SINGLETON(type)
初始化单例,内部即 SINGLETON_INSTANCE()。
SingletonBaseAPI 类
SingletonBaseAPI 类是单例基类模板。
| 头文件: | #include "utils/singleton_api.hpp" |
| 命名空间: | xcore_api::utils |
公有函数
SingletonBaseAPI(const SingletonBaseAPI &) = delete | |
SingletonBaseAPI & | operator=(const SingletonBaseAPI &) = delete |
[static] T & | GetInstance() |
[static] T * | GetInstancePtr() |
详细描述
派生类须:继承 SingletonBaseAPI<T>,在类内使用 DECLARE_SINGLETON(),并将构造与析构设为私有。
class object : public xcore_api::utils::SingletonBaseAPI<object> {
DECLARE_SINGLETON(object);
private:
object() {}
~object() {}
};
成员函数说明
[static] T &SingletonBaseAPI::GetInstance()
返回单例引用。
[static] T *SingletonBaseAPI::GetInstancePtr()
返回单例指针。
另请参阅 SINGLETON_INSTANCE()。