3

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

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

如果我手动将程序缓冲(NC 可选参数第 2 位第 7 位)设置为“不”。然后​​我的循环运行正常,控制器正确检查每个循环的公共变量的值。

NC 可选参数 NO.  2、位 7

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);    
4

3 回答 3

1

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

NLOOP G04 F1 M331 (buffering prohibit)
IF[VC890 EQ 0] GOTO NRTS
GOTO NLOOP
NRTS RTS
于 2018-03-29T08:29:49.507 回答
1

SetNCOptionalParameterBit()功能可以设置NO。2,第 7 位。

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

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

于 2018-03-29T17:11:21.253 回答
1

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

在 G 代码中:

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)
于 2018-03-29T23:17:49.260 回答