跳到主要内容

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 的派生类。

注意

另请参阅 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] voidInit()
[pure virtual] voidStart()
[pure virtual] voidStop()
[static] boolRegister(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_AOIO 信号
ValueTypeAPI::VALUE_MODBUSModbus
ValueTypeAPI::VALUE_INPUT_SIGNAL输入信号
ValueTypeAPI::VALUE_TRANS附加开关参数,例如 \Stop
ValueTypeAPI::VALUE_KEY_PARA关键字参数
ValueTypeAPI::VALUE_SWITCHOn / 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_HAVE0必须存在
ArgRuleTypeAPI::ARG_DEFAULT_AT_LAST1在参数列表末尾缺省
ArgRuleTypeAPI::ARG_DEFAULT_NOT_LAST2不在参数列表末尾缺省

enum xcore_api::rl_cmd::CommandProcessResultAPI

该枚举类型描述指令执行结果,由内层执行函数返回。

常量值描述
CMD_PROCESS_SUCCESS0成功,RL 继续运行
CMD_PROCESS_ERROR1失败,仅暂停当前任务
CMD_PROCESS_FATAL2致命错误,RL 停止
CMD_PROCESS_IGNORE3异步指令,任务进入异步等待
CMD_PROCESS_EXTRA4额外执行的指令,常用于运动指令
CMD_PROCESS_RESCHEDULE5请求重新调度
CMD_PROCESS_SPECIAL6特殊指令,会影响调度

另请参阅 RLCmdActionAPI、SendCmd()。

enum xcore_api::rl_cmd::CmdLookAheadImplAPI

该枚举类型描述指令前瞻行为。

常量值描述
WAIT_MOVE_PAUSE0等待运动结束,断前瞻(默认)
ACTIVATE_AT_LOOKAHEAD1前瞻触发,例如打印类指令
ACTIVATE_IN_ZONE2转弯区触发,上一条运动后触发
MOVEMENT_ITSELF3运动指令本身

涉及运动的指令须正确设置前瞻,避免破坏控制器调度。

另请参阅 RLCmdConfigAPI::SetLookAhead()、自定义运动指令。

enum xcore_api::rl_cmd::TaskLimitAPI

该枚举类型描述指令的任务限制。

常量值描述
TASK_NO_LIMIT0不限制
TASK_LIMIT_MOVE1限制运动任务
TASK_LIMIT_NORMAL_AND_STATIC2限制普通任务和半静态任务

enum xcore_api::rl_cmd::StepBackAPI

该枚举类型描述步退行为。

常量值描述
STEP_BACK_SKIP0跳过该指令
STEP_BACK_STOP1停止步退
STEP_BACK_CUSTOM2使用 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)
voidSetValueType(const ValueTypeAPI &type)
voidSetRule(const ArgRuleTypeAPI &rule)
voidSetDefaultValue(const SymbolVarBaseAPI &value)
std::vector<ValueTypeAPI>GetValueType() const
ArgRuleTypeAPIGetRule() 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

公有函数​

详细描述​

在 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::stringGetCmdTask()
std::stringGetCmdFile()
intGetCmdLine()
intGetVisitedLine()
voidSetReturnValue(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

公有函数​

explicitModernRLCmdAPI(const RLCmdConfigAPI &cfg)
virtual~ModernRLCmdAPI()
RLCmdConfigAPIGetCmdConfig()
const std::vector<std::shared_ptr<SymbolVarBaseAPI>> &GetCmdArgs()
voidSetParams(const std::initializer_list<ArgTypeAPI> &v)
voidSetExecutor(RLCmdActionAPI &action)
voidSetExecutorStb(RLCmdActionAPI &action)
ModernRLCmdAPIConvert()

详细描述​

宏 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

公有函数​

详细描述​

读取前须确认参数类型。复合结构(例如笛卡尔点中的四元数)通过 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_ABSJ0关节绝对运动
MOVE_J1关节运动
MOVE_L2直线运动
MOVE_C3圆弧运动
MOVE_CF4全圆运动,须调用 SetMoveCFData()
MOVE_T5摆线运动,须调用 SetMoveTData()
MOVE_SP6螺旋线运动,须调用 SetMoveSPData()

enum xcore_api::motion_cmd::RotTypeAPI

该枚举类型描述全圆运动的姿态旋转方式。

常量描述
CONST_POSE姿态不变
ROT_AXIS动轴旋转
FIXED_AXIS定轴旋转

enum xcore_api::motion_cmd::CallBackTypeAPI

该枚举类型描述运动回调类型。

常量值描述
MOVE_START0运动开始
MOVE_PAUSE1运动暂停
MOVE_FINISH2运动完成
MOVE_ERROR3运动错误

另请参阅 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

公有函数​

详细描述​

发送前应确认控制器模式、任务空间与机器人忙状态。成功返回 0。运动指令的 RL 执行结果通常返回 CMD_PROCESS_EXTRA。

警告: 会改变机器人运动状态。

另请参阅 StatesAPI、自定义运动指令。

成员函数说明​

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] voidBeforeProcess()
[pure virtual] StatusDerivedProcess()
[virtual] voidAfterProcess()

详细描述​

派生类须实现 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

公有函数​

成员函数说明​

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,依次调用 SetEvent()、SetHook(),按需 SetRunType()、SetPriority(),再调用 RegisterHooksAPI()。

注意

另请参阅 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

公有函数​

成员函数说明​

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

公有函数​

成员函数说明​

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_NONE0无
RS_START1开始
RS_PAUSE2暂停
RS_STEP3单步
RS_BACK4上一步
RS_ERROR_HANDLER5错误处理
RS_RESET6复位
RS_COLLISION7碰撞
RS_STOP_EVENT8急停
RS_NUM_NEVER_USE9哨兵,请勿使用

StatesAPI 类​

StatesAPI 类用于查询或设置控制器运行状态。

头文件:#include "states/states_api.hpp"
命名空间:xcore_api::states

公有函数​

详细描述​

修改控制器状态前应确认当前模式与任务状态。与运动或任务控制组合使用时,应先判断当前是否允许执行。

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

公有函数​

[static] Analog *getInstance()
boolGetAIValue(const std::string &signal_name, double &value)
boolGetAOValue(const std::string &signal_name, double &value)
boolSetAOValue(const std::string &signal_name, const double value)
boolGetDIValue(const std::string &signal_name, bool &value)
boolGetDOValue(const std::string &signal_name, bool &value)
boolSetDOValue(const std::string &signal_name, const bool value)
boolGetGIValue(const std::string &signal_name, unsigned int &value)
boolGetGOValue(const std::string &signal_name, unsigned int &value)
boolSetGOValue(const std::string &signal_name, const unsigned int value)
intWriteInt16Register(const std::string &name, const int16_t &value, int bias)
intWriteBoolRegister(const std::string &name, const bool &value, int bias)
intWriteFloatRegister(const std::string &name, const float &value, int bias)
intWriteBitRegister(const std::string &name, const bool &value, int bias)
intWriteInt32Register(const std::string &name, const int32_t &value, int bias)
intWriteByteRegister(const std::string &name, const uint8_t &value, int bias)
intReadInt16Register(const std::string &name, int16_t &value, int bias)
intReadBoolRegister(const std::string &name, bool &value, int bias)
intReadFloatRegister(const std::string &name, float &value, int bias)
intReadBitRegister(const std::string &name, bool &value, int bias)
intReadInt32Register(const std::string &name, int32_t &value, int bias)
intReadByteRegister(const std::string &name, uint8_t &value, int bias)
boolIsAiExist(const std::string &signal_name)
boolIsAoExist(const std::string &signal_name)
boolIsDiExist(const std::string &signal_name)
boolIsDoExist(const std::string &signal_name)
boolIsGiExist(const std::string &signal_name)
boolIsGoExist(const std::string &signal_name)
boolRegisterType(const std::string &register_name, std::string &type)
boolRegisterWriteable(const std::string &register_name, bool &writeable)
boolCheckRegisterCanUsedAsIO(const std::string &register_name, const std::string &io_type)

详细描述​

通过 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 &register_name, std::string &type)

按名称查询寄存器类型,写入 type(int16、bool、float、bit、int32、byte)。寄存器不存在返回 false。

bool Analog::RegisterWriteable(const std::string &register_name, bool &writeable)

查询寄存器是否可写。寄存器不存在返回 false。

bool Analog::CheckRegisterCanUsedAsIO(const std::string &register_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字节
INT1616 位整数
INT3232 位整数
FLOAT浮点

FuncCodeCfgAPI 类​

FuncCodeCfgAPI 类描述功能码名称、支持类型、长度与是否可写。

头文件:#include "registers/function_code_api.hpp"
命名空间:xcore_api::registers

公有函数​

成员函数说明​

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] boolExecFuncCode()
[pure virtual] std::shared_ptr<FuncCodeAPI>Clone()
FuncCodeCfgAPIGetCfg()
intReadIntRegValue(std::vector<int> &v)
intReadFloatRegValue(std::vector<float> &v)
intWriteIntRegValue(const std::vector<int> &v)
intWriteFloatRegValue(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

公有函数​

保护函数​

详细描述​

构造时传入从站 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_MASTERModbus TCP 主站
MODBUS_TCP_SLAVERModbus TCP 从站
MODBUS_RTU_MASTERModbus RTU 主站
MODBUS_RTU_SLAVERModbus RTU 从站
PROFINET_SLAVERProfinet 从站
EIP_SLAVEREtherNet/IP 从站
CCLINK_IE_SLAVERCC-Link IE 从站
CCLINK_ECAT_SLAVERCC-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()
voidReset(DeviceTypeAPI type)
intSetName(const std::string &value)
std::stringGetName()
intSetEndian(EndianAPI endian)
EndianAPIGetEndian()

成员函数说明​

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

公有函数​

详细描述​

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

公有函数​

成员函数说明​

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

公有函数​

成员函数说明​

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

公有函数​

成员函数说明​

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

公有函数​

详细描述​

构造时传入 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_FATALDebug / 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 / zdouble坐标,单位为米

QuaternionAPI 结构体​

QuaternionAPI 结构体描述姿态四元数。默认值为 (1, 0, 0, 0)。

成员类型描述
q1 / q2 / q3 / q4double四元数分量

ConfDataAPI 结构体​

ConfDataAPI 结构体描述机器人构型,用于确定到达目标点的解。

成员类型描述
cfx / cf1–cf7int构型分量

PoseAPI 结构体​

PoseAPI 结构体描述位姿 / 坐标系。

成员类型描述
pPositionAPI位置
qQuaternionAPI姿态

支持右乘 operator* 与 Inverse()。

PoseAPI PoseAPI::Inverse() const

返回该坐标系的逆。

PointAPI 结构体​

PointAPI 结构体描述点位,可表示笛卡尔点或关节点。

成员类型描述
posePoseAPI笛卡尔位姿
jointstd::vector<double>关节角,单位为弧度
is_jointbool是否为关节点
extjointstd::vector<double>外部轴,单位为弧度
is_ext_radbool头文件注释为「外部轴是度」,默认 false
arm_angledouble七轴机器人臂角
confdataConfDataAPI构型

ZoneAPI 结构体​

ZoneAPI 结构体描述转弯区。

成员类型描述
distancedouble距离,单位为米
percentdouble百分比

SpeedAPI 结构体​

SpeedAPI 结构体描述速度。

成员类型描述
tcpveldoubleTCP 平动速度,单位为 m/s
oriveldouble姿态旋转速度,单位为 rad/s
psiveldouble七轴臂角速度
percentdouble关节速度百分比
forcedbool为 true 时不受速度滑条影响

LoadAPI 结构体​

LoadAPI 结构体描述负载。

成员类型描述
massdouble质量,单位为千克
cogPoseAPI质心
ix / iy / izdouble转动惯量

TriggerAPI 结构体​

TriggerAPI 结构体描述轨迹触发器。

成员类型描述
typeTriggerTypeDISTANCE 或 TIME
reference_is_from_startbool是否从起点起算
value_from_referencedouble相对参考点的值,单位为米或秒
trigger_callbackstd::function<void()>触发回调

另请参阅 MotionCmdArgsAPI::SetTriggers()。

ToolAPI 结构体​

ToolAPI 结构体描述工具坐标系与工具负载。

成员类型描述
rob_holdbooltrue 为手持工具,false 为外部工具
tool_framePoseAPI工具坐标系
tool_loadLoadAPI工具负载

WobjAPI 结构体​

WobjAPI 结构体描述工件坐标系、用户坐标系与工件负载。

成员类型描述
rob_holdbooltrue 为手持工件,false 为外部工件
wobj_framePoseAPI相对用户坐标系的工件坐标系
wobj_loadLoadAPI工件负载
user_framePoseAPI用户坐标系
uf_progbool用户坐标系是否移动
uf_mecstd::string关联机械单元
uf_idint用户坐标 ID
mech_unitvoid *机械单元数据

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。

成员类型描述
baseIndexuint16_t数据 index
byteOffsuint16_t字节偏移
byteSizeuint16_t数据大小
namestd::stringPDO 名

另请参阅 RegisterPdo()、GetPdoValue()。

SdoAPI 结构体​

SdoAPI 结构体描述 SDO。默认超时 4000。

成员类型描述
indexuint16_t索引
subIndexuint8_t子索引
dateLenuint32_t数据长度,成员名拼写与头文件一致
timeOutuint32_t超时
flagsuint32_t标志位
m_msg_callbackThreadFunc回调

另请参阅 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()。