Во-первых, вы можете объявить реманентными сами регистры UST1 и UST2. Для этого надо имена задавать не в окне конфигурации, а в глобальных переменных, т.е.
Код:
VAR_GLOBAL RETAIN
UST1 AT %QD7.1.0: REAL;
UST2 AT %QD7.2.0: REAL;
END_VAR
Во-вторых, переменные, к которым вы только обращаетесь в теле блока, но которые объявлены где-то в стороне, не являются частью состояния блока. Следовательно, их удаление, сокрытие и т.п. не приведёт к уменьшению структуры, описывающей состояние.
В-третьих, если памяти всё-таки хватает, то не надо ломать блоки без причины. Если переменная действительно принадлежит блоку, то вынести её из блока без жутких костылей невозможно по определению — вам придётся городить какую-то привязку либо обеспечивать единственность блока в программе.
Тут надо ещё у Приходько уточнить, на какую глубину эта «фишка» с попаданием всего блока в ритэйн работает. Потому что если она вылезает наверх и реманентные входы функционального блока делают реманентными всех пользователей этого блока, то это уже не особенность, а страшный баг. Как никак, динамического выделения памяти в языках IEC 61131-3 нет, и при полностью статической аллокации переменных такой ерунды происходить не должно.