1. Я бы почитал документацию по CoDeSys и понял чем различается Retain и маркерная память.
2. Локальная переменная на то и локальная, что действует в одной подпрограмме. В другой подпрограмме может быть локальная переменная с таким же именем - и это 2 разных переменных. Если Вы уже понимаете, что у Вас будут подпрограммы - не стесняйтесь делать для них входящие и выходящие переменные: надо данные из другого куска передать: var_input, надо результат в основную программу вернуть - var_output.
В разделе примеров есть пример создания подпрограмм и вызова из основной программы.