架构说明
libnrc_host 是基于 Socket API 通讯协议封装的 C++ 动态库,提供网络接口供上位机快速集成控制器功能。
系统架构
text
┌──────────────────────┐
│ 上位机应用程序 │
│ (C++/C#/Python 通过 │
│ SDK 调用接口) │
└──────────┬───────────┘
│ TCP Socket (JSON 协议)
▼
┌──────────────────────┐
│ 纳博特控制器 │
│ Linux 实时系统 │
└──────────────────────┘上位机通过 TCP Socket 连接控制器的指定端口,以 JSON 文本格式发送指令和接收响应。libnrc_host 封装了网络通信、JSON 编解码和接口调用,开发者无需关心底层通信细节。
SDK 组成
| 组件 | 路径 | 说明 |
|---|---|---|
libnrc_host.dll / .so | SDK 根目录 | 核心动态库,封装全部接口 |
include/cpp_interface/ | 头文件目录 | C++ 接口声明(按模块拆分) |
include/parameter/ | 参数头文件目录 | 数据结构与枚举定义 |
include/c_interface/ | C 接口目录 | 跨语言 ABI 兼容封装 |
头文件模块
| 头文件 | 模块 |
|---|---|
nrc_api.h | 主入口,聚合所有接口 |
nrc_interface.h | 连接管理、伺服控制、运动控制、工具手、坐标系、标定 |
nrc_io.h | 数字/模拟 IO、远程 IO、安全 IO |
nrc_modbus.h | Modbus 主站(TCP/RTU) |
nrc_track.h | 轨迹记录与回放 |
nrc_dual_arm.h | 双臂机器人 |
nrc_vfd_ctr.h | VFD 主轴变频器 |
nrc_job_operate.h | 作业文件管理、运动/逻辑指令插入 |
nrc_queue_operate.h | 队列运动模式 |
nrc_craft_weld.h | 焊接工艺 |
nrc_craft_pallet.h | 码垛工艺 |
nrc_craft_vision.h | 视觉工艺 |
nrc_craft_laser_cutting.h | 激光切割工艺 |
nrc_craft_conveyor_belt_track.h | 传送带跟踪工艺 |
nrc_define.h | 宏定义、枚举、基础数据结构 |
端口体系
| 端口 | 用途 |
|---|---|
| 6000 | 控制/查询:上下电、模式切换、状态查询(通常示教器使用) |
| 6001 | 上位机 SDK 命令端口:运动和程序控制(C++/C#/Python SDK 使用) |
| 7000 | 伺服跟踪数据:servo_move、点位运动控制、状态回调 |
| 5000 | 文件传输:作业文件上传/下载/备份 |
SDK 用户通常使用 6001 端口。 servo_move 等跟踪运动需要额外连接 7000 端口。
ABI 兼容性
C++ SDK 分为两个 ABI 版本,不能混用:
| 编译器 | 平台 | 导入库 |
|---|---|---|
| MSVC (Visual Studio 2019+) | Windows x64 | nrc_host.lib |
| MinGW (GCC 8.3+) | Windows x64 | libnrc_host.dll.a |
| GCC (8.3+) | Linux x64 / ARM64 | libnrc_host.so |
通信模型
libnrc_host 采用 JSON 文本协议进行请求/响应交互,支持两种通信模式:
| 模式 | 说明 | 典型场景 |
|---|---|---|
| 同步请求/响应 | 上位机发送指令,阻塞等待控制器回复 | 参数设置、状态查询、标定计算 |
| 异步回调 | 控制器主动推送数据,通过注册的回调函数接收 | 7000 端口伺服跟踪、状态变化通知 |
请求流程: 上位机构造 JSON 指令 → TCP 发送 → 控制器解析执行 → 返回 JSON 响应 → SDK 解析为返回值/输出参数。
回调机制: 调用 send_message / recv_message / set_receive_error_or_warnning_message_callback 等注册回调函数后,控制器事件到达时 SDK 在内部线程触发回调,开发者无需主动轮询。
多机器人支持
控制器支持 1~4 台机器人协同工作,SDK 提供两种调用方式:
| 方式 | 接口 | 说明 |
|---|---|---|
| 单机器人 | robot_xxx(...)(如 robot_movej) | 默认操作 1 号机器人 |
| 多机器人 | robot_xxx_robot(fd, robotNum, ...) | 通过 robotNum 参数指定机器人编号(1-4) |
多机器人并行需先调用
set_robots_parallel开启并行模式;外部轴跟随主机器人编号管理。
工艺扩展架构
工艺类功能以独立头文件形式提供,通过工艺号(1-9)管理多套参数:
| 头文件 | 工艺 | 典型接口 |
|---|---|---|
nrc_craft_weld.h | 焊接 | 焊接参数配置、送丝/退丝/送气、摆焊 |
nrc_craft_pallet.h | 码垛 | 码垛参数设置、状态查询 |
nrc_craft_vision.h | 视觉 | 视觉参数、标定、目标点计算 |
nrc_craft_laser_cutting.h | 激光切割 | 全局/工艺/模拟量/IO 参数 |
nrc_craft_conveyor_belt_track.h | 传送带跟踪 | 传送参数、编码器、PID 同步 |
工艺参数采用"设置/查询"成对接口,设置前需先指定工艺号,与示教器工艺配置保持数据一致。
数据流说明
| 端口 | 数据方向 | 内容 | 典型接口 |
|---|---|---|---|
| 6001 | 双向 | 命令流:控制指令与响应(JSON) | robot_movel、set_servo_state |
| 7000 | 双向 | 伺服数据流:点位跟踪、状态回调 | servo_move、servo_point_position_motion_control |
| 5000 | 双向 | 文件流:作业文件上传/下载/备份 | file_upload 等文件接口 |
6001 为 SDK 主命令端口;涉及伺服跟踪(如外部点移动、点位运动控制)需同时连接 7000 端口。