更改程序缓冲 Okuma OSP-300M

Change Program Buffering Okuma OSP-300M

我目前 运行 g 代码中的一个小循环,必须等待公共变量更改值。打开程序缓冲后,我的 g 代码程序 不会 看到变量的变化!

当我处于这个 g 代码循环中时,关闭程序缓冲的最佳方法是什么?

如果我 手动 设置程序缓冲(NC 可选参数第 2 位第 7 位到 "DOES NOT"。然后我的循环行为适当并且控制器正确检查值每个循环的公共变量。

NLOOP G04 F1
IF[VC890 EQ 0] GOTO NRTS
GOTO NLOOP
NRTS RTS

非常简单的循环。也许它需要更复杂。
也许如果时间更长,缓冲区就无关紧要了?

我预计我的客户会希望打开程序缓冲。
我可以用 THINC API 暂时关闭它吗?
因为如果它有效,那就太好了:

public void SetNCOptionalParameterBit(
    int intBitIndex,
    int intBitNo,
    OnOffStateEnum enValue);

如果此函数允许我将参数第 2 位和第 7 位设置为打开和关闭,那么这可能是一个有效的解决方法。

Okuma.CMDATAPI.DataAPI.COptionalParameter myCOPtionalParameter;
myCOptionalParameter = new Okuma.CMDATAPI.DataAPI.COptionalParameter();

myCOPtionalParameter.SetNCOptionalParameterBit(2, 7,
    Okuma.CMDATAPI.Enumerations.OnOffStateEnum.On);    

M331如何防止预读? (几天内我不会在控制中心验证使用情况,我抱着我的新生儿,现在是凌晨 4 点,但我 认为 它可以在你读取变量或之前的行。)

NLOOP G04 F1 M331 (buffering prohibit)
IF[VC890 EQ 0] GOTO NRTS
GOTO NLOOP
NRTS RTS

SetNCOptionalParameterBit()函数可以设置NO。 2、第 7 位。

但是,根据您拥有的 API 版本,THINC API 测试应用程序可能无法执行此操作。我确认 API 1.17.2.0 的测试应用程序中存在错误。并在 1.18.0.0 发布时修复。

所以请注意这一点。即使您的机器有较旧的 API,例如 1.17.2.0,您仍然应该能够编写成功使用此功能的代码。忽略测试应用结果。

我的方案的最佳解决方案是将 NC 可选参数 2 的当前值保存到一个公共变量中,然后将其更改为不缓冲然后 运行 我的代码,然后将其恢复为原来的状态之前。

在 Gcode 中:

VC892 = VOPRB[2] (save current NC Optional Parameter bit 2 value)
VOPRB[2] = [VOPRB[2] OR 128] (bit magic to flip bit 7 to a 1 if its not)
(insert code to be run without buffering)
VOPRB[2] = VC892 (put back saved NC Optional Parameter bit 2 value)