开源改变世界!!

支持从插件代码解锁 #121

推推 grbl 2年前 (2023-02-08) 98次浏览
关闭
dresco 打开了这个问题 2022 年 2 月 28 日 · 3条评论
关闭

支持从插件代码解锁#121

dresco 打开了这个问题 2022 年 2 月 28 日 · 3条评论

评论

支持从插件代码解锁 #121
贡献者

当处于警报状态时,系统可以由发送者($X)解锁,但不能由插件解锁——因为 protocol_enqueue_gcode() 目前在 STATE_ALARM 中删除命令——有人反对允许这样做吗?

(我希望能够从我的控制面板插件解锁,因为 VFD 的启动速度比控制器慢,因此当第一个 modbus 消息未被确认时 GRBL 会发出警报)。

核心/协议.c

第 67 至 72 行 4ff8f1c

//添加 gcode 以执行不是源自普通输入流
bool protocol_enqueue_gcode ( char *gcode)
{
bool ok = xcommand[ 0 ] == \0 &&
( state_get () == STATE_IDLE || ( state_get () & (STATE_JOG|STATE_TOOL_CHANGE))) &&
bit_isfalse ( sys.rt_exec_state , EXEC_MOTION_CANCEL);

 

支持从插件代码解锁 #121
贡献者

有反对意见吗?

不确定要回答什么 – 最好保持现在的状态?在警报状态下,您可以$X直接向系统命令解析器发送:

核心/系统.c

第 299 至 300 行 4ff8f1c

//注意:调用 system_execute_line() 的代码需要提供至少 LINE_BUFFER_SIZE 的行缓冲区
status_code_t system_execute_line ( char *line)

 

我自己在 HPGL 插件中直接调用了这个函数:

static void go_home (void)
{
    char cmd[LINE_BUFFER_SIZE] = "$H";
    plan_line_data_t plan_data = {0};

    process = wait;
    hal.stream.write = hal.stream.write_all = stream_write_null;

    system_execute_line(cmd);

    plan_data.feed_rate = 4000.0f;
    target.values[X_AXIS] = settings.axis[X_AXIS].max_travel; //
    target.values[Y_AXIS] = 0.0f;
    process = mc_line(target.values, &plan_data) ? await_homed : NULL;
}
支持从插件代码解锁 #121
贡献者作者

在报警状态下可以$X直接发送给系统命令解析器

哦,太棒了,不知道那个功能 – 会尝试那样做……谢谢!

支持从插件代码解锁 #121
贡献者作者

谢谢,那很好用..