Попытка вызвать глобальную трассировку стека Sicherheitskreis (с нулевым значением) - PullRequest
0 голосов
/ 06 марта 2020

Я пытаюсь защитить двери моего CN C с помощью переключателей, которые посылают сигнал на мой ноутбук (у меня на нем установлен Mach 4). Я создал этот код, который должен заставить шпиндель оставаться на месте, если двери не заперты, но я всегда получаю сообщение об ошибке:

[string""]1576 attempt to call global 'SicherheitsKreis' (a Nil value) stack traceback:

Я пытался переместить Код и читать темы на это, но ничего не работает. У кого-нибудь есть решение? Вот весь мой код:

function SicherheitsKreis(Schliesserstate, Oeffnerstate)
   if (Schliesserstate ==0 and Oeffnerstate ==1 ) then 
     mc.mcSpindleSetDirection(inst,0)
   elseif (Schliesserstate == 1 and Oeffnerstate == 0 ) then 
     local sigh = mc.mcSignalGetHandle(inst, mc.OSIG_SPINDLEON);
     local sigState = mc.mcSignalGet State(sigh);
     if (sigState == 1) then 
       mc.mcSpindleSetDirection(inst,0)
     else 
       mc.mcSpindleSetDirection(inst,1);
     end
   else 
     mc.mcSpindleSetDirection(inst,0)
     end
end 

if (mc.mcInEditor() == 1) then
    SicherheitsKreis()
end

Код, который я использую для вызова SicherheitsKreis:

local inst = mc.mcGetInstance()
local hsigSchliesser = mc.mcSignalGetHandle(inst, mc.ISIG_INPUT8);
local hsigOeffner = mc.mcSignalGetHandle (inst, mc.ISIG_INPUT9);
local Schliesserstate = mc.mcSignalGetState(hsigSchliesser);
local Oeffnerstate = mc.mcSignalGetState(hsigSchliesser); 
 SicherheitsKreis(Schliesserstate, Oeffnerstate)

Этот скрипт набирается в мах 4, и функция сохраняется как функция am. (nach4 имеет бесплатную функцию m, которую пользователь может настроить) в памяти Mach 4 (для моего компьютера это m146)

1 Ответ

0 голосов
/ 11 марта 2020

Ваш код:

function SicherheitsKreis(Schliesserstate, Oeffnerstate)
...
end

Первая возможность состоит в том, что код находится в какой-то другой функции или другом элементе, поэтому он не является глобальным. Вторая возможность заключается в том, что вы запускаете SicherheitsKreis(Schliesserstate, Oeffnerstate) перед загрузкой этой части кода. В-третьих (очень редко), вы переопределяете его на SicherheitsKreis = nil или эквивалентный. Других возможностей нет.

...