架构说明
C# SDK 是对 C++ SDK 的托管封装,Csharp_api/ 目录包含 SWIG 自动生成的 C# 接口。
托管接口与原生库
| 层次 | 文件 | 说明 |
|---|---|---|
| 托管接口 | Csharp_api.dll | C# 可直接引用的托管程序集 |
| 原生库 | nrc_host.dll | C++ 底层通信库(必须随程序分发) |
Csharp_api.dll 通过 P/Invoke 调用 nrc_host.dll。运行时两个文件都必须在输出目录中。
SDK 组成
text
Csharp_api/
├── Csharp_api.dll ← 托管程序集
├── nrc_host.dll ← C++ 原生动态库
├── nrc_interface.cs ← 主接口类(静态方法)
├── nrc_interfacePINVOKE.cs ← P/Invoke 底层调用
├── MoveCmd.cs ← 运动指令参数
├── ServoMovePara.cs ← 伺服运动参数
├── ToolParam.cs ← 工具手参数
├── RobotDHParam.cs ← DH 参数
└── ... ← 其他数据结构与枚举调用链
text
C# 代码 → Csharp_api.dll (托管) → P/Invoke → nrc_host.dll (原生) → TCP Socket → 控制器所有 C# 接口与 C++ 同名同参,可对照 C++ API 参考 了解详细参数说明。
类型映射
| C++ | C# |
|---|---|
SOCKETFD (int) | int |
std::string | string |
std::vector<double> | VectorDouble |
std::vector<vector<double>> | VectorVectorDouble |
通信模型
C# SDK 与 C++ 一致,采用 JSON 文本协议进行请求/响应交互,支持两种通信模式:
| 模式 | 说明 | 典型场景 |
|---|---|---|
| 同步请求/响应 | 上位机发送指令,阻塞等待控制器回复 | 参数设置、状态查询、标定计算 |
| 异步回调 | 控制器主动推送数据,通过注册的回调函数接收 | 7000 端口伺服跟踪、状态变化通知 |
请求流程: C# 构造 JSON 指令 → Csharp_api.dll → P/Invoke → nrc_host.dll → TCP 发送 → 控制器解析执行 → 返回 JSON 响应 → SDK 解析为返回值/输出参数。
回调机制: 调用 send_message / recv_message / set_receive_error_or_warnning_message_callback 等注册回调函数后,控制器事件到达时 SDK 在内部线程触发回调,开发者无需主动轮询。
多机器人支持
控制器支持 1~4 台机器人协同工作,C# 接口与 C++ 一致,提供两种调用方式:
| 方式 | 接口 | 说明 |
|---|---|---|
| 单机器人 | robot_xxx(...)(如 robot_movej) | 默认操作 1 号机器人 |
| 多机器人 | robot_xxx_robot(fd, robotNum, ...) | 通过 robotNum 参数指定机器人编号(1-4) |
多机器人并行需先调用
set_robots_parallel开启并行模式;外部轴跟随主机器人编号管理。
工艺扩展架构
工艺类功能以独立头文件形式提供,C# 中对应接口类,通过工艺号(1-9)管理多套参数:
| 工艺 | C# 接口 | 典型接口 |
|---|---|---|
| 焊接 | nrc_craft_weld | 焊接参数配置、送丝/退丝/送气、摆焊 |
| 码垛 | nrc_craft_pallet | 码垛参数设置、状态查询 |
| 视觉 | nrc_craft_vision | 视觉参数、标定、目标点计算 |
| 激光切割 | nrc_craft_laser_cutting | 全局/工艺/模拟量/IO 参数 |
| 传送带跟踪 | nrc_craft_conveyor_belt_track | 传送参数、编码器、PID 同步 |
工艺参数采用"设置/查询"成对接口,设置前需先指定工艺号,与示教器工艺配置保持数据一致。
数据流说明
| 端口 | 数据方向 | 内容 | 典型接口 |
|---|---|---|---|
| 6001 | 双向 | 命令流:控制指令与响应(JSON) | robot_movel、set_servo_state |
| 7000 | 双向 | 伺服数据流:点位跟踪、状态回调 | servo_move、servo_point_position_motion_control |
| 5000 | 双向 | 文件流:作业文件上传/下载/备份 | 文件传输接口 |
6001 为 SDK 主命令端口;涉及伺服跟踪(如外部点移动、点位运动控制)需同时连接 7000 端口。