Как хранить локальные имена подпрограмм в массиве и вызывать их в цикле, повторяя указанный массив в KUKA Robotic Language
Эта проблема:
Основная структура кода так, как я хочу,
Def main()
decl int i
decl char arr[3]
INI
PTP HOME ...
arr[1]='w()'
arr[2]='e()'
arr[3]='l()'
for i=1 to 3
arr[i]
endfor
END
def w()
PTP P1 ...
END
def e()
PTP P2 ...
END
def l()
PTP P3 ...
END
Теперь, как вы можете видеть, я хочу, чтобы имена подпрограмм хранились в массиве и вызывали их по одному в цикле. (Я мог бы написать подпрограммы одну за другой и просто полностью удалить цикл, но после вызова каждой программы мне нужно дать команду, и я ищу способ, при котором мне не нужно писать эту команду каждый раз, что может быть сделано с помощью цикла)
Проблема в том, что я не могу понять, как хранить имена подпрограмм в массиве, так как приведенный выше код дает синтаксическую ошибку.
Если есть другой способ вызова функций в цикле, я был бы рад услышать об этом. иначе, я был бы признателен за помощь здесь.
Спасибо:)
3 ответа
Вы можете реализовать переключатель / регистр внутри цикла for для имитации индексации массива.
Def main()
decl int i
decl char arr[3]
INI
PTP HOME ...
for i=1 to 3
switch i
case 1
w()
case 2
e()
default
l()
endswitch
endfor
END
def w()
PTP P1 ...
END
def e()
PTP P2 ...
END
def l()
PTP P3 ...
END
Или, если вы хотите использовать int в нескольких местах:
DEF CallFunc(i : IN)
DECL INT I
switch i
case 1
w()
case 2
e ()
case 3
l()
endswitch
END
DEF w()
;MOVE
END
DEF e()
;MOVE
END
DEF l()
;MOVE
END
И позвони куда угодно
DEF main ( )
FOR I = 1 TO 3
CallFunc(i)
ENDFOR
END
Это невозможно с KRL. Там нет указателей на функции или что-то подобное.