注释
一行中的关键字顺序在 G 代码规范中没有意义。命令按优先顺序解释,修饰符可以出现在行中的任何位置。 |
感谢您的解释,我假设启动代码将按顺序执行,而不是作为一行执行。 |
我同意菲利普的观点。我无法想象让 linuxcnc 按顺序应用它们会很困难。有没有理由不呢?克里斯米
|
在 2019 年 3 月 18 日星期一 01:20,c-morley ***@***.***> 写道:我同意 Phillip 的观点。我无法想象让 linuxcnc 按顺序应用它们会很困难。有没有理由不呢?
是的。这不是 G 代码的工作原理。因此,您将不得不重新编写解释器并同时打破 G 代码标准。但是,我认为接受逗号分隔的列表相当容易。我现在正在研究这种可能性。
|
我并不是建议更改代码被解释,只是建议如何从 INI 文件中提取代码并将其输入解释器。克里斯
——– 原始消息 ——– 来自:andypugh <notifications@github.com> 日期:2019-03-17 6:50 PM (GMT-08:00) 至:LinuxCNC/ linuxcnc <linuxcnc@noreply.github.com> 抄送:c-morley <chrisinnanaimo@hotmail.com>,评论 <comment@noreply.github.com>
主题:回复:[LinuxCNC/linuxcnc] RS274NGC_STARTUP_CODE 多个 P 字(#569)2019 年 3 月 18 日星期一 01:20,c-morley ***@***.***> 写道:我同意 Phillip 的观点. 我无法想象让 linuxcnc 按顺序应用它们会很困难。有没有理由不呢?
是的。这不是 G 代码的工作原理。因此,您将不得不重新编写解释器并同时打破 G 代码标准。但是,我认为接受逗号分隔的列表相当容易。我现在正在研究这种可能性。
|
我们可以接受多个 STARTUP_CODE 行,如 MDI_COMMAND 和其他一些。但是列表可能更容易。 |
我最初的想法和 Chris 的一样,这应该只是关于如何从 ini 文件中读取它。 |
interp 中的基本块读取例程只允许一个块内的唯一标志,并且重复是错误,因为@phillc54发现。 有些选项可以重复,但这个显然不能。它看起来并不难,遵循其他示例,例如 所以,+1@andypugh的建议。今天有效;请参阅中的示例 |
我很高兴保留它,因为它是 o 调用的工作方式。也许只是在此处 |
我已经实现了一个逗号分隔的列表,这是对 emctask.cc 的一个小改动 if (retval > INTERP_MIN_ERROR) { // I'd think this should be fatal.
print_interp_error(retval);
} else {
if (0 != rs274ngc_startup_code[0]) {
char startupcmd[LINELEN];
char* ptr;
strcpy(startupcmd, rs274ngc_startup_code);
ptr = strtok(startupcmd, ",");
while (ptr != NULL){
retval = interp.execute("ptr");
while (retval == INTERP_EXECUTE_FINISH) {
retval = interp.execute(0);
}
if (retval > INTERP_MIN_ERROR) {
print_interp_error(retval);
}
ptr = strtok(NULL, ",");
}
}
}
哪个有效,但 Axis 抱怨逗号,我怀疑 gremlin 和 Gmoccapy 也可能如此,因为它们也都查看了 RS274NGC_STARTUP_CODE 条目。 |
另外,我更喜欢多行的想法和使用 ini.findall() |
以下是我重现该问题所遵循的步骤:
这是我期望发生的事情:
LinuxCNC 启动时以上两个命令都生效
这是发生了什么:
LinuxCNC 因屏幕上出现以下错误而停止:
emc/task/emctask.cc 405: interp_error: Multiple p words on one line
Multiple p words on one line
emc/task/emctaskmain.cc 3085: can’t initialize interpreter
有关我的硬件和软件的信息: