BFY运动控制板API手册

BFY运动控制板API手册

最近更新 2026-08-14 全文字数 16,515 37 个章节

版本: 1.0.5 日期: 2026-06-07


1. 概述#

BFYCore 是从 BFYCore 工程核心功能封装的 C++ 动态链接库,提供BFY控制器的完整通信与控制能力。所有导出函数使用 extern "C" 约定,确保 C#、Python 等外部语言可通过 FFI 直接调用。

核心能力#

功能 说明
连接管理 USB 串口 / TCP 网络连接
命令收发 G 代码命令队列、缓冲区管理、实时指令
状态解析 BFY控制器 状态报告实时解析
文件处理 G 代码文件加载/保存/范围分析/时间预估
程序执行 从头运行、暂停/恢复、中止、循环执行
Jog 控制 手动点动(支持6轴X/Y/Z/A/B/C)
绝对位置点动 多轴同时绝对/相对位置点动 (bfy_jog_to)
倍率控制 进给/快速/功率倍率实时调整
配置管理 $$ 参数读写、版本检测
自动上报 控制板状态自动上报参数配置 ($10/$481)
IO 控制 数字输出控制、IO端口状态查询、限位开关查询
NGC 宏解析 NGC 流程控制解析(IF/WHILE/DO/SUB等),支持参数读写
YMODEM 上传 通过 YMODEM 协议上传文件到控制板 w25Q128存储芯片
六轴关节角度 获取机器人关节角度反馈

2. 快速开始#

2.1 创建项目#

在 Visual Studio 中创建一个新的 C# 项目,复制"BFYCore.dll"到项目目录。

2.2 C# 调用示例#

using System;
using System.Runtime.InteropServices;

class Program
{
    // ---- 导入 DLL 函数 ----
    [DllImport("BFYCore.dll")] public static extern IntPtr bfy_create();
    [DllImport("BFYCore.dll")] public static extern void bfy_destroy(IntPtr handle);
    [DllImport("BFYCore.dll")] public static extern int bfy_configure(IntPtr handle, int type, string param1, int param2);
    [DllImport("BFYCore.dll")] public static extern int bfy_open(IntPtr handle);
    [DllImport("BFYCore.dll")] public static extern void bfy_close(IntPtr handle, bool user);
    [DllImport("BFYCore.dll")] public static extern bool bfy_is_connected(IntPtr handle);
    [DllImport("BFYCore.dll")] public static extern int bfy_get_status(IntPtr handle);
    [DllImport("BFYCore.dll")] public static extern int bfy_send_command(IntPtr handle, string command);
    [DllImport("BFYCore.dll")] public static extern int bfy_load_file(IntPtr handle, string filename, bool append);
    [DllImport("BFYCore.dll")] public static extern int bfy_run_program(IntPtr handle, bool homing);
    [DllImport("BFYCore.dll")] public static extern void bfy_abort_program(IntPtr handle);
    [DllImport("BFYCore.dll")] public static extern void bfy_pause(IntPtr handle, bool cooling);
    [DllImport("BFYCore.dll")] public static extern void bfy_resume(IntPtr handle);
    [DllImport("BFYCore.dll")] public static extern void bfy_reset(IntPtr handle);
    [DllImport("BFYCore.dll")] public static extern void bfy_set_override_feed(IntPtr handle, int percent);
    [DllImport("BFYCore.dll")] public static extern int bfy_jog(IntPtr handle, int dir, float speed, float step);
    [DllImport("BFYCore.dll")] public static extern void bfy_jog_abort(IntPtr handle);

    // 回调委托
    [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
    delegate void OnStatusChanged(int newStatus, IntPtr userData);

    [DllImport("BFYCore.dll")] public static extern void bfy_on_status_changed(
        IntPtr handle, OnStatusChanged callback, IntPtr userData);

    static void Main()
    {
        // 1. 创建实例
        IntPtr core = bfy_create();

        // 2. 注册状态回调
        OnStatusChanged onStatus = (status, _) =>
            Console.WriteLine($"状态变化: {status}");
        bfy_on_status_changed(core, onStatus, IntPtr.Zero);

        // 3. 配置并连接(USB 串口)
        bfy_configure(core, 0, "COM3", 115200);
        if (bfy_open(core) != 0)
        {
            Console.WriteLine("连接失败!");
            bfy_destroy(core);
            return;
        }

        // 4. 发送 G 代码命令
        bfy_send_command(core, "G0 X0 Y0");
        bfy_send_command(core, "G1 X100 Y100 F1000");

        // 5. 加载并执行文件
        bfy_load_file(core, "test.nc", false);
        bfy_run_program(core, homing: false);

        // 6. 暂停/恢复
        bfy_pause(core, false);   // 暂停
        bfy_resume(core); // 恢复

        // 7. 点动控制
        bfy_jog(core, 5, 1000f, 10f); // E 方向,1000mm/min,10mm步长
        bfy_jog_abort(core);           // 中止点动

        // 8. 倍率调整
        bfy_set_override_feed(core, 150); // 150% 进给倍率

        // 9. 断开并销毁
        bfy_close(core, true);
        bfy_destroy(core);
    }
}

2.3 Python 调用示例#

import ctypes
from ctypes import c_int, c_float, c_bool, c_char_p, c_void_p, POINTER

# 加载 DLL
dll = ctypes.CDLL("BFYCore.dll")

# ---- 函数签名声明 ----
dll.bfy_create.restype = c_void_p
dll.bfy_destroy.argtypes = [c_void_p]
dll.bfy_configure.argtypes = [c_void_p, c_int, c_char_p, c_int]
dll.bfy_configure.restype = c_int
dll.bfy_open.argtypes = [c_void_p]
dll.bfy_open.restype = c_int
dll.bfy_close.argtypes = [c_void_p, c_bool]
dll.bfy_is_connected.argtypes = [c_void_p]
dll.bfy_is_connected.restype = c_bool
dll.bfy_get_status.argtypes = [c_void_p]
dll.bfy_get_status.restype = c_int
dll.bfy_send_command.argtypes = [c_void_p, c_char_p]
dll.bfy_send_command.restype = c_int
dll.bfy_load_file.argtypes = [c_void_p, c_char_p, c_bool]
dll.bfy_load_file.restype = c_int
dll.bfy_run_program.argtypes = [c_void_p, c_bool]
dll.bfy_run_program.restype = c_int
dll.bfy_abort_program.argtypes = [c_void_p]
dll.bfy_pause.argtypes = [c_void_p, c_bool]
dll.bfy_resume.argtypes = [c_void_p]
dll.bfy_reset.argtypes = [c_void_p]
dll.bfy_set_override_feed.argtypes = [c_void_p, c_int]
dll.bfy_jog.argtypes = [c_void_p, c_int, c_float, c_float]
dll.bfy_jog.restype = c_int
dll.bfy_jog_abort.argtypes = [c_void_p]

# 状态枚举
STATUS = {
    0: "Disconnected", 1: "Connecting", 2: "Idle", 3: "Run",
    4: "Hold", 5: "Door", 6: "Home", 7: "Alarm",
    8: "Check", 9: "Jog", 10: "Queue", 11: "Cooling",
    12: "AutoHold", 13: "Tool"
}

# ---- 使用示例 ----

# 1. 创建实例
core = dll.bfy_create()

# 2. 配置并连接(USB 串口 COM3, 115200)
ret = dll.bfy_configure(core, 0, b"COM3", 115200)
ret = dll.bfy_open(core)
if ret != 0:
    print("连接失败!")
    dll.bfy_destroy(core)
    exit(1)

print(f"已连接,当前状态: {STATUS.get(dll.bfy_get_status(core), 'Unknown')}")

# 3. 发送 G 代码命令
dll.bfy_send_command(core, b"G0 X0 Y0")
dll.bfy_send_command(core, b"G1 X100 Y100 F1000")

# 4. 加载并执行文件
dll.bfy_load_file(core, b"test.nc", False)
dll.bfy_run_program(core, False)

# 5. 暂停/恢复
dll.bfy_pause(core, False)   # 暂停
dll.bfy_resume(core) # 恢复

# 6. 点动控制
dll.bfy_jog(core, 5, 1000.0, 10.0)  # E 方向
dll.bfy_jog_abort(core)

# 7. 倍率调整
dll.bfy_set_override_feed(core, 150)  # 150%

# 8. 断开并销毁
dll.bfy_close(core, True)
dll.bfy_destroy(core)

3. API 参考#

3.1 数据类型#

句柄类型#

类型 说明
BfyCoreHandle 不透明指针,代表一个 BfyCore 实例
BfyFileHandle 不透明指针,代表一个 G代码文件 实例

枚举#

BfyMacStatus — 机器运行状态

名称 说明
0 BFY_MAC_DISCONNECTED 未连接
1 BFY_MAC_CONNECTING 正在连接
2 BFY_MAC_IDLE 空闲
3 BFY_MAC_RUN 运行中
4 BFY_MAC_PAUSED 暂停
5 BFY_MAC_DOOR 电子围栏触发
6 BFY_MAC_HOME 回零中
7 BFY_MAC_STOPPED 急停
8 BFY_MAC_ALARM 报警
9 BFY_MAC_CHECK 检查模式
10 BFY_MAC_JOG 手动点动
13 BFY_MAC_AUTOHOLD 自动保持
14 BFY_MAC_TOOL 更换执行器

BfyWrapperType — 通信后端类型

名称 说明
0 BFY_WRAPPER_USB_SERIAL USB 串口
1 BFY_WRAPPER_TCP_CLIENT TCP 网络客户端

BfyJogDirection — 点动方向

名称 说明
0 BFY_JOG_ABORT 急停
1 BFY_JOG_HOME 回零
2 BFY_JOG_N Y+ (北)
3 BFY_JOG_S Y- (南)
4 BFY_JOG_W X- (西)
5 BFY_JOG_E X+ (东)
6 BFY_JOG_NW X- Y+ (西北)
7 BFY_JOG_NE X+ Y+ (东北)
8 BFY_JOG_SW X- Y- (西南)
9 BFY_JOG_SE X+ Y- (东南)
10 BFY_JOG_ZUP Z+
11 BFY_JOG_ZDOWN Z-
12 BFY_JOG_POSITION 设定位置
13 BFY_JOG_AP A+ (第四轴正方向)
14 BFY_JOG_AM A- (第四轴负方向)
15 BFY_JOG_BP B+ (第五轴正方向)
16 BFY_JOG_BM B- (第五轴负方向)
17 BFY_JOG_CP C+ (第六轴正方向)
18 BFY_JOG_CM C- (第六轴负方向)

BfyStreamingMode — 流传输模式

名称 说明
0 BFY_STREAM_BUFFERED 缓冲模式
1 BFY_STREAM_SYNCHRONOUS 同步模式
2 BFY_STREAM_REPEAT_ON_ERROR 出错重试模式

BfyDetectedIssue — 检测到的问题

名称 说明
0 BFY_ISSUE_UNKNOWN 未知问题
-1 BFY_ISSUE_MANUAL_RESET 用户手动复位
-2 BFY_ISSUE_MANUAL_DISCONNECT 用户手动断开
-3 BFY_ISSUE_MANUAL_ABORT 用户手动急停
1 BFY_ISSUE_STOP_RESPONDING 设备停止响应
3 BFY_ISSUE_UNEXPECTED_RESET 意外复位
4 BFY_ISSUE_UNEXPECTED_DISCONNECT 意外断开连接
5 BFY_ISSUE_MACHINE_ALARM 机器报警

结构体#

BfyGPoint — 三维坐标点

typedef struct {
    float x;  // X 轴坐标
    float y;  // Y 轴坐标
    float z;  // Z 轴坐标
} BfyGPoint;

BfyVersionInfo — 固件版本信息

typedef struct {
    char  version_info[256]; // 固件版本信息(完整字符串)
} BfyVersionInfo;

BfyIoPinState — IO端口状态

typedef struct {
    char  type[8];       // 端口类型: "DIN"/"DOUT"/"AIN"/"AOUT"
    char  name[64];      // 端口描述
    int   pin;           // 端口号
    int   value;         // 当前值(数字0/1,或模拟量)
} BfyIoPinState;

BfyConfigParam — 配置参数项

typedef struct {
    int   number;          // 参数编号
    char  value[64];       // 参数值字符串
    char  name[128];       // 参数名称
    char  unit[32];        // 参数单位
    char  description[256]; // 参数描述
} BfyConfigParam;

BfyProgramStats — 程序执行统计

typedef struct {
    int    target;         // 总行数目标
    int    sent;           // 已发送行数
    int    executed;       // 已执行行数
    double total_time_ms;  // 当前作业已用时间(ms)
    double global_time_ms; // 全局总时间(ms)
    double projected_ms;   // 预估剩余时间(ms)
} BfyProgramStats;

BfyFileRange — G代码文件范围信息

typedef struct {
    bool  valid;           // 范围是否有效
    float draw_x_min;      // 绘制范围 X 最小值
    float draw_x_max;      // 绘制范围 X 最大值
    float draw_y_min;      // 绘制范围 Y 最小值
    float draw_y_max;      // 绘制范围 Y 最大值
    float move_x_min;      // 移动范围 X 最小值
    float move_x_max;      // 移动范围 X 最大值
    float move_y_min;      // 移动范围 Y 最小值
    float move_y_max;      // 移动范围 Y 最大值
    double estimated_time_ms; // 预估执行时间(ms)
} BfyFileRange;

回调函数类型#

// 核心回调
typedef void (*BfyOnStatusChanged)(BfyMacStatus new_status, void* user_data);
typedef void (*BfyOnOverrideChanged)(int feed, int rapid, int spindle, void* user_data);
typedef void (*BfyOnIssueDetected)(BfyDetectedIssue issue, void* user_data);
typedef void (*BfyOnLogMessage)(const char* message, void* user_data);
typedef void (*BfyOnFileLoaded)(long elapsed_ms, const char* filename, void* user_data);
typedef void (*BfyOnProgramEnded)(void* user_data);
typedef void (*BfyOnCommandSent)(const char* command, void* user_data);

// NGC 宏程序解析回调
typedef void (*BfyOnNgcOutput)(const char* line, int line_number, void* user_data);
typedef void (*BfyOnNgcAlarm)(int alarm_code, void* user_data);
typedef void (*BfyOnNgcLog)(const char* message, int type, void* user_data);
// type: 0=Info, 1=Warning, 2=Error, 3=Plain

// YMODEM 文件上传回调
typedef void (*BfyOnYmodemProgress)(int progress, void* user_data); // progress: 0-100
typedef void (*BfyOnYmodemResult)(int success, void* user_data);   // success: 1=成功, 0=失败
typedef void (*BfyOnYmodemLog)(const char* message, void* user_data);

3.2 函数参考#

核心生命周期#

函数 说明 返回值
bfy_create() 创建 BfyCore 实例 实例句柄,失败返回 NULL
bfy_destroy(handle) 销毁实例并释放资源

连接管理#

函数 说明 参数 返回值
bfy_configure(handle, type, param1, param2) 配置通信后端 type: 0=USB串口, 1=TCP; param1: 串口名或IP:PORT; param2: 波特率或端口 0=成功, -1=失败
bfy_open(handle) 打开连接 - 0=成功, -1=失败
bfy_close(handle, user) 关闭连接 user: true=主动断开
bfy_is_connected(handle) 查询连接状态 - true/false

配置示例:

// USB 串口连接
bfy_configure(handle, BFY_WRAPPER_USB_SERIAL, "COM3", 115200);

// TCP 网络连接
bfy_configure(handle, BFY_WRAPPER_TCP_CLIENT, "192.168.1.152:12121", 0);

状态查询#

函数 说明 返回值
bfy_get_status(handle) 获取当前机器状态 BfyMacStatus 枚举
bfy_get_machine_position(handle, &pos) 获取机器坐标 写入 BfyGPoint
bfy_get_work_position(handle, &pos) 获取工件坐标 写入 BfyGPoint
bfy_get_working_offset(handle, &offset) 获取工件坐标系偏移 写入 BfyGPoint
bfy_get_joint_angles(handle, angles) 获取六关节角度(固定6个元素数组) 写入 float[6]
bfy_get_current_feed(handle) 获取当前进给速率 float (mm/min)
bfy_get_program_stats(handle, &stats) 获取程序执行统计 写入 BfyProgramStats
bfy_get_version_info(handle, &info) 获取固件版本信息 写入 BfyVersionInfo

实时指令#

函数 说明 返回值
bfy_resume(handle) 循环启动/恢复 (~),恢复暂停状态
bfy_pause(handle) 进给暂停 (!)
bfy_safe_pause(handle) 安全暂停 (@),触发安全暂停状态
bfy_reset(handle) 复位控制器 (Ctrl-X),清空所有队列
bfy_send_immediate(handle, byte) 发送实时单字节指令(不进入规划缓冲区)

命令发送#

函数 说明 返回值
bfy_send_command(handle, command) 发送 G 代码命令 0=成功, -1=失败
bfy_execute_custom_code(handle, code) 执行自定义代码 0=成功, -1=失败

命令示例:

bfy_send_command(handle, "G0 X0 Y0");        // 快速移动
bfy_send_command(handle, "G1 X100 F1000");   // 线性插补
bfy_send_command(handle, "M3 S1000");         // 开启激光
bfy_send_command(handle, "$H");               // 回零
bfy_send_command(handle, "$X");               // 解锁

程序执行#

函数 说明 返回值
bfy_run_program(handle, homing) 从头执行程序 0=成功, -1=无法执行
bfy_abort_program(handle) 中止程序
bfy_can_run_program(handle) 是否可以执行 true/false
bfy_can_abort_program(handle) 是否可以中止 true/false
bfy_set_loop_count(handle, count) 设置循环次数

倍率控制#

函数 说明 说明
bfy_set_override_feed(handle, percent) 设置进给倍率 如 150 表示 150%
bfy_set_override_rapid(handle, percent) 设置快速倍率 仅支持 100/50/25
bfy_set_override_spindle(handle, percent) 设置功率倍率 如 200 表示 200%
bfy_get_overrides(handle, &f, &r, &s) 获取当前倍率 输出三个 int

点动控制#

函数 说明 返回值
bfy_jog(handle, dir, speed, step) 执行单方向点动 0=成功, -1=失败
bfy_jog_abort(handle) 中止连续点动
bfy_set_jog_params(handle, speed, step, continuous) 设置点动默认参数
bfy_jog_to(handle, x, y, z, a, b, c, feed, is_absolute, axis_mask) 多轴同时绝对/相对位置点动 0=成功, -1=失败

点动示例:

// X+ 方向,1000mm/min 速度,10mm 步长
bfy_jog(handle, BFY_JOG_E, 1000.0f, 10.0f);

// 中止点动
bfy_jog_abort(handle);

// 多轴绝对位置点动:X=50, Y=30, Z=10,进给 2000mm/min
// axis_mask: bit0=X, bit1=Y, bit2=Z, bit3=A, bit4=B, bit5=C
// 此处 mask=0b000111 = 7,仅 X/Y/Z 轴参与运动
bfy_jog_to(handle, 50.0f, 30.0f, 10.0f, 0, 0, 0, 2000.0f, true, 7);

G代码文件操作#

函数 说明 返回值
bfy_load_file(handle, filename, append) 加载 G 代码文件 0=成功, -1=失败
bfy_load_gcode_string(handle, gcode, name, append) 从字符串加载 0=成功, -1=失败
bfy_save_file(handle, filename, header, footer, between, cycles) 保存到文件 0=成功, -1=失败
bfy_get_file_range(handle, &range) 获取文件范围信息 写入 BfyFileRange
bfy_get_file_command_count(handle) 获取命令数量 int
bfy_get_file_estimated_time(handle) 获取预估时间 double (ms)

配置管理#

函数 说明 返回值
bfy_refresh_config(handle) 刷新配置(从设备读取 $$) 0=成功, -1=失败
bfy_get_config_count(handle) 获取配置参数数量 int
bfy_get_config_params(handle, params, max) 获取参数列表 实际填充数量
bfy_get_config_value(handle, number, buf, size) 获取单个参数值 0=成功, -1=不存在
bfy_set_config_value(handle, number, value) 设置参数值(写入设备) 0=成功, -1=失败
bfy_refresh_machine_info(handle) 刷新机器信息 0=成功, -1=失败

配置示例:

// 读取 $30 参数
char value[64];
bfy_get_config_value(handle, 30, value, sizeof(value));

// 设置 $32=1 (启用激光模式)
bfy_set_config_value(handle, 32, "1");

自动上报#

函数 说明
bfy_set_auto_report(handle, report_mask, interval_ms) 设置控制板自动上报参数。report_mask=$10 反馈内容掩码(1=位置,2=缓冲区,3=全部),interval_ms=$481 上报间隔(毫秒)

线程模式#

函数 说明
bfy_set_threading_mode(handle, mode) 设置线程模式: 0=Slow, 1=Quiet, 2=Fast(默认), 3=UltraFast, 4=Insane

回调注册#

函数 说明
bfy_on_status_changed(handle, callback, user_data) 注册状态变化回调
bfy_on_override_changed(handle, callback, user_data) 注册倍率变化回调
bfy_on_issue_detected(handle, callback, user_data) 注册异常检测回调
bfy_on_log_message(handle, callback, user_data) 注册日志消息回调
bfy_on_file_loaded(handle, callback, user_data) 注册文件加载完成回调
bfy_on_program_ended(handle, callback, user_data) 注册程序执行结束回调
bfy_on_command_sent(handle, callback, user_data) 注册命令发送回调(头文件 typedef,未导出则忽略)

工具函数#

函数 说明 返回值
bfy_status_to_string(status) 状态枚举转字符串 静态字符串指针
bfy_get_last_error(handle) 获取最后错误信息 内部缓冲区指针
bfy_get_version() 获取 DLL 版本号 版本字符串
bfy_notify_program_ended(handle) 通知程序执行结束(NGC模式专用,C#端检测到所有命令执行完毕后调用)

3.3 NGC 流程控制解析#

NGC 宏程序解析器,支持条件判断、循环、子程序、表达式求值等。

函数 说明 返回值
bfy_ngc_init() 初始化 NGC 解析器,重置状态、清空参数和栈 0=成功, -1=失败
bfy_ngc_set_macro_path(path) 设置宏文件搜索路径(命名子程序调用时搜索 .macro 文件)
bfy_ngc_parse_file(filename, output_cb, alarm_cb, log_cb, user_data) 解析并执行 NGC 程序文件,G代码行通过 output_cb 输出 0=成功, 其他=状态码
bfy_ngc_parse_string(gcode, name, output_cb, alarm_cb, log_cb, user_data) 解析并执行 NGC 宏字符串 0=成功, 其他=状态码
bfy_ngc_check_file(filename, log_cb, user_data) 仅语法检查 NGC 文件(不执行、不输出 G代码) 0=成功, 其他=状态码
bfy_ngc_get_param(param_id, &value) 获取编号式 NGC 参数值 (1-65535) 0=成功, -1=不存在
bfy_ngc_set_param(param_id, value) 设置编号式 NGC 参数值 0=成功, -1=失败
bfy_ngc_get_named_param(name, &value) 获取命名 NGC 参数值(下划线开头为全局参数) 0=成功, -1=不存在
bfy_ngc_set_named_param(name, value) 设置命名 NGC 参数值 0=成功, -1=失败
bfy_ngc_status_string(status) 获取 NGC 状态码的字符串描述 静态字符串指针

支持的 NGC 语法:

  • 条件判断:IF / ELSEIF / ELSE / ENDIF
  • 循环结构:WHILE / ENDWHILE, DO / WHILE, REPEAT / ENDREPEAT
  • 循环控制:BREAK, CONTINUE
  • 子程序:SUB / ENDSUB / CALL / RETURN
  • 异常触发:RAISE ALARM / RAISE ERROR
  • 表达式求值和参数引用(#1, #<_param>)

3.4 IO 控制#

函数 说明 返回值
bfy_set_output(handle, port, state) 设置数字输出端口状态。port: 0=AUXOUTPUT0, 1=AUXOUTPUT1...; state: true=M64开启, false=M65关闭
bfy_query_pin_states(handle) 查询所有IO端口状态(发送 $PINSTATE 命令),结果存入内部缓存
bfy_get_io_pin_states(handle, states, max_count) 获取已缓存的IO端口状态数组,返回实际填充数量 int 状态数量
bfy_query_limit_states(handle) 查询限位开关状态(发送 $LIM 命令),结果存入内部缓存
bfy_get_limit_states(handle) 获取已缓存的限位开关状态字符串,如 "XYZ" 表示X/Y/Z轴限位触发 内部缓冲区指针

3.5 YMODEM 文件上传#

通过 YMODEM 协议上传文件到 W25Q128 存储芯片。使用独立串口连接,调用前需确保主连接已断开(串口未被占用)。此函数为阻塞调用,建议在后台线程执行。

函数 说明 返回值
bfy_ymodem_upload(port_name, baud_rate, file_path, on_progress, on_result, on_log, user_data) 上传文件。on_progress(0-100), on_result(1=成功,0=失败), on_log 日志回调均可为 NULL 0=成功, -1=失败

4. 典型工作流程#

4.1 基本连接与控制#

创建实例 → 配置通信 → 打开连接 → 发送命令 → 关闭连接 → 销毁实例

4.2 文件执行流程#

创建实例 → 配置通信 → 打开连接
  → 加载G代码文件 → 获取范围/时间预估
  → 执行程序 → (暂停/恢复/倍率调整)
  → 程序结束 → 关闭连接 → 销毁实例

4.3 手动点动流程#

连接后 → 设置点动参数 → 按方向点动 → 释放/中止点动

5. 注意事项#

  1. 线程安全:所有 API 函数内部使用互斥锁保护,可从多线程调用
  2. 回调线程:回调函数在内部工作线程中触发,回调内不应执行耗时操作
  3. 字符串生命周期bfy_get_last_error 返回的指针在下次调用前失效
  4. 多实例:支持创建多个 BfyCore 实例,每个实例独立管理连接
  5. 资源释放:使用完毕后必须调用 bfy_destroy 释放资源
  6. 串口独占:同一串口同时只能被一个实例打开
  7. 协议兼容:部分功能(如 Jog)的行为取决于 BFY控制器固件版本

6. 错误处理#

大多数函数返回 0 表示成功,-1 表示失败。失败时可通过 bfy_get_last_error 获取详细错误信息。

int ret = bfy_open(handle);
if (ret != 0) {
    const char* err = bfy_get_last_error(handle);
    printf("连接失败: %s\n", err);
}

8. 版本更新记录#

版本 日期 说明
1.0.5 2026-06-07 新增:六轴关节角度获取(bfy_get_joint_angles)、绝对位置点动(bfy_jog_to,支持A/B/C轴)、自动上报配置(bfy_set_auto_report)、IO控制(bfy_set_output/bfy_query_pin_states/bfy_query_limit_states)、NGC宏程序完整解析器(11个API)、YMODEM文件上传(bfy_ymodem_upload)、程序结束通知(bfy_notify_program_ended)。修正:BfyMacStatus枚举(增加STOPPED=7,ALARM=8,TOOL=14)、BfyJogDirection增加A/B/C轴方向、bfy_pause参数简化(移除cooling)、bfy_safety_door重命名为bfy_safe_pauseBfyVersionInfo结构体简化为单一version_info字段;新增BfyStreamingModeBfyIoPinState类型及多个回调类型。
1.0.0 2025-06-16 初始版本:通信、文件处理、Jog控制、倍率控制、配置管理