Согласно вашему коду «Triggermemory» не должно следовать выходной переменной триггерного фронта.
Она должна быть установлена только при наличии условия повышения, как вы положили здесь.
IF Rtrigger.Q = true THEN
Triggermemory := true;
END_IF
Этот код находится внутри функции, функционального блока или программы? Если вы объявили свой RTrigger внутри функции, он будет «создан» при каждом входе в функцию и «уничтожен» при каждом выходе из функции. Таким образом, RTrigger не будет работать так, как вы ожидаете.
Если этот код находится в функции, вы можете рассмотреть возможность его создания в качестве глобальной переменной.
Однако Если все, что вы хотите сделать, это проверить, стала ли переменная TRUE, рассматривали ли вы возможность использования бистабильного SR? Это станет ИСТИНОЙ, если в любой момент переменная станет ИСТИНОЙ. Даже если переменная вернется к значению false, она останется TRUE.
Тогда вы можете использовать вход «Сброс», чтобы заставить его вернуться в положение сброса (FALSE).
Относительно «постоянные глобальные переменные», эти переменные полезны, когда вы хотите, чтобы ваши переменные пережили сброс.