路径预处理和队列大小
G 代码处理的流水线
从文件中读取 G 代码时,在开始加工之前读取和处理整个文件通常是不切实际的。对于某些应用程序,G 代码文件可能有几十万甚至数百万行。一次全部读取将花费很长时间,还需要大量内存。
而代之的是,G 代码是逐行读取的,但每个时间点的内存中只保留一小部分(几百行)。这部分保存在队列中,即按照 “先进先出” 原则工作的数据结构中:生成功能块向队列中添加元素。消费函数块按照插入元素的顺序读取和删除元素。
该图显示了 G 代码在系统中的流动。首先,从文件中读取 G 代码,然后由解释器转换为所谓的 GeoInfo 元素。这些元素由路径预处理功能块处理,最后进行插值。标有 “GeoInfo” 的部分代表队列。如果有多个路径预处理器(例如 SMC_SmoothPath
, SMC_ToolRadiusCorr
,或 SMC_AvoidLoop
) 被使用,然后它们也通过队列连接。

建议的队列大小
根据经验,对于大多数队列,16 个元素的大小是合适的。之前的最后一个队列 SMC_Interpolator
功能块(通常是路径预处理功能块之前的队列) SMC_CheckVelocities
) 应该有更高的队列大小 — 对于大多数应用程序来说,100 个元素是一个很好的起点。
延迟 处理时间:队列越大,最初填满队列所需的时间就越长。这个
SMC_Interpolator
函数块会等到最后一个队列被填满后才开始插值。对于延迟,队列总大小(所有队列大小的总和)是相关的。LookaHead 插值器的:插值器之前的最后一个队列的大小
SMC_Interpolator
确定插值的前景。计算轨迹时,插值器只能计划直到前瞻结束。如果前向太小,则插值器可能无法达到全路径速度。根据路径速度和元素长度,100 个元素是一个不错的起点,但是对于高速度和/或较短的元素,可能需要更大的队列大小对... 的影响 特定的功能块: 功能块,例如
SMC_AvoidLoop
或者SMC_SmoothMerge
需要一定大小的传入队列才能有效工作。例如,要检测 G 代码中的循环,此循环必须先放入队列SMC_AvoidLoop
。有关详细信息,请查看路径处理管道中功能块的文档。
调用处理功能块
如上所述,插值仅在所有队列都填满后才开始。这会在开始加工时导致初始延迟。除了减少队列总大小外,还有另一种方法可以减少这种延迟。
路径预处理功能块通常在循环后台任务中调用,如以下示例所示 CNC实例03:在线进行路径预处理。为了减少延迟,程序调用 SMC_ReadNCFile2
, SMC_NCInterpreter
,并且可以在循环中调用路径预处理器。根据应用程序和任务优先级的不同,每次任务调用多次执行程序(例如 100 次)或在一定时间跨度(例如 5 毫秒)后终止循环可能就足够了。