Изменить программу буферизации Okuma OSP-300M

В настоящее время я выполняю небольшой цикл в g-коде, который должен ждать, пока общая переменная не изменит значения. При включенной буферизации программ моя программа g-кода не видит изменений в переменных!

Каков наилучший способ выключить буферизацию программы, пока я нахожусь в этом цикле g-кода?

Если я вручную установлю "Буферизацию программы" (Бит 7 необязательного параметра NC, бит 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);

Если эта функция позволит мне включать и выключать параметр param bit no 2 bit 7, то это, вероятно, будет правильным решением.

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

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

3 ответа

Решение

Лучшим решением для моего сценария было сохранение текущего значения необязательного параметра 2 NC в общую переменную, затем изменение его на "Не буферизировать", затем выполнение моего кода, а затем возврат его на прежнее значение.

в 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)

Как насчет 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, вы все равно сможете писать код, который успешно использует эту функцию. Просто игнорируйте результаты тестового приложения.

Другие вопросы по тегам