Grbl学习(4)--Grbl的框架(3)(补充)

  笔者在翻看之前学习Grbl的笔记时,突然发现有些部分由于粗心遗漏没有写出来,但是又是比较重要的内容:架构的补充和Grbl重要源码的学习。于是本文将对框架知识进行补充,下一篇介绍重要的源码后再继续重要算法的介绍


  Grbl的核心是带有梯形加减速过程的直线插补算法的实现,它包含一个G代码的解析器,一个全局状态机,还有一系列的守护进程,是一个典型的前台+后台架构(架构图如下)

  前台:指的是直接与硬件交互的部分,如处理中断。前台负责快速响应外部事件,如串口通信和硬件中断。

  后台:指的是持续运行的循环,它执行不那么紧急的任务,如执行G代码指令、更新机器状态等。后台通常是一个无限循环,它不断地检查和执行任务,直到控制器关闭。

  状态机关联前后台: 前台和后台通过状态机相互关联。状态机定义了控制器在任何给定时间应该处于的状态,以及如何根据前台接收的输入(如G代码指令)和后台执行的任务在不同状态之间转换。

  用一个形象的比喻来描述此架构就是:GRBL 就像一座智能工厂,前台是快速响应的接待台和急件处理员,负责快速响应外部事件;后台是稳定可靠的生产线,负责稳定执行加工指令;状态机则是调度中心,协调二者运作,实现高效精准的运动控制。  

  总的来说,Grbl的这种架构设计使其能够高效地处理实时输入和后台任务,同时保持对机器运动的精确控制。这种设计在实时控制系统中非常常见,因为它可以确保系统的响应性和稳定性。


  下一篇将详细介绍Grbl的源码分析

  以上便是本篇的全部内容啦!

  欢迎大家一起交流学习!

 

 

ain()主函数首先执行下面初始化函数 serial_init(); // Setup serial baud rate and interrupts settings_init(); // Load Grbl settings from EEPROM stepper_init(); // 配置步进方向和中断定时器 system_init(); // 配置引脚分配别针和pin-change中断 memset(&sys, 0, sizeof(system_t)); // Clear all system variables sys.abort = true; // Set abort to complete initialization 完成初始化设置中止 sei(); // Enable interrupts #ifdef HOMING_INIT_LOCK //宏运算(settings.flags & (1 << 4)) != 0结果flags等于执行sys.state = STATE_ALARM //系统状态赋值为报警状态 if (bit_istrue(settings.flags,BITFLAG_HOMING_ENABLE)) { sys.state = STATE_ALARM; } #endif _____________________________________________________________________________________________________________________________________ 接下来是一些主要初始化循环 for(;;) { serial_reset_read_buffer(); // Clear serial read buffer gc_init(); // Set g-code parser to default state spindle_init(); //主轴 coolant_init(); //冷却液 limits_init(); //极限开关 probe_init(); //探测 plan_reset(); // Clear block buffer and planner variables 清晰块缓冲区和规划师变量 st_reset(); // Clear stepper subsystem variables. 清晰的步进系统变量。 // Sync cleared gcode and planner positions to current system position. 同步清除gcode和策划师职位当前系统位置。 plan_sync_position(); gc_sync_position(); // Reset system variables. sys.abort = false; //系统中止标志 sys_rt_exec_state = 0; //系统执行标志状态变量状态位清零。 sys_rt_exec_alarm = 0; //系统执行警报标志变量清零。 sys.suspend = false; //系统暂停标志位,取消,和安全的门。 sys.soft_limit = false; //系统限制标志状态机复位。(布尔) protocol_main_loop(); //主协议循环 } // ___________________________________________________________________________
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值