Skip to content

架构说明

C# SDK 是对 C++ SDK 的托管封装,Csharp_api/ 目录包含 SWIG 自动生成的 C# 接口。

托管接口与原生库

层次文件说明
托管接口Csharp_api.dllC# 可直接引用的托管程序集
原生库nrc_host.dllC++ 底层通信库(必须随程序分发

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::stringstring
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_movelset_servo_state
7000双向伺服数据流:点位跟踪、状态回调servo_moveservo_point_position_motion_control
5000双向文件流:作业文件上传/下载/备份文件传输接口

6001 为 SDK 主命令端口;涉及伺服跟踪(如外部点移动、点位运动控制)需同时连接 7000 端口。