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

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