我目前正在运行g-代码中的一个小循环,该循环必须等待一个公共变量来更改值。随着程序缓冲的启动,我的g代码程序不会看到对变量的更改!
什么是最好的方式关闭程序缓冲,而我在这个g-代码循环?
如果我手动设置程序缓冲(NC可选参数位第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);如果这个函数允许我设置param位,No2bit 7,开和关,那么这可能是一个有效的工作。
Okuma.CMDATAPI.DataAPI.COptionalParameter myCOPtionalParameter;
myCOptionalParameter = new Okuma.CMDATAPI.DataAPI.COptionalParameter();
myCOPtionalParameter.SetNCOptionalParameterBit(2, 7,
Okuma.CMDATAPI.Enumerations.OnOffStateEnum.On); 发布于 2018-03-29 23:17:49
对于我的场景,最好的解决方案是将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)发布于 2018-03-29 08:29:49
那么M331如何防止提前阅读呢?(为了验证使用情况,我几天内不会在控制室里,我正抱着我的新生儿,现在是凌晨4点,但我认为它既可以放在你读变量的线路上,也可以放在前面的行上。)
NLOOP G04 F1 M331 (buffering prohibit)
IF[VC890 EQ 0] GOTO NRTS
GOTO NLOOP
NRTS RTS发布于 2018-03-29 17:11:21
SetNCOptionalParameterBit()函数能够设置2号位,第7位。
但是,根据您的API版本,THINC测试应用程序可能无法做到这一点。我确认了API 1.17.2.0的测试应用程序中有一个bug。并在1.18.0.0发布前修复。
所以要注意这一点。即使您的机器有一个较旧的API (如1.17.2.0 ),您仍然应该能够编写成功使用此函数的代码。忽略测试应用程序的结果。
https://stackoverflow.com/questions/49543079
复制相似问题