Программирование ST PL C: обнаружение нарастающего фронта и запоминание его значения - PullRequest
1 голос
/ 30 апреля 2020

Я недавно начал работать в программировании структурированного текста на PL C. Извините за вопрос noob ie, но как мне сохранить значение детекторов с нарастающим фронтом?

Я имею в виду какой-нибудь RS-триггер.

Я использую CodeSy v2. 3, и имеется функциональный блок (R_TRIG) для обнаружения изменения сигнала с ложного на истинное. Однако выходной сигнал от функционального блока длится около 1 секунды (независимо от времени цикла -> я пробовал его с действительно высокими значениями).

Я пытался сохранить значение с помощью простого if:

IF Rtrigger.Q = true THEN Triggermemory := true;

Однако новая переменная (Triggermemory) следует за выходным значением краевого триггера (конечно).

Есть ли способ сохранить когда-то истинный сигнал от детектора фронта ??

Я пытался использовать сохранение и постоянные глобальные переменные (безуспешно), но я думаю, что настоящая проблема заключается в том, что мне как-то нужно хранить это истинное значение где-то.

1 Ответ

0 голосов
/ 30 апреля 2020

Согласно вашему коду «Triggermemory» не должно следовать выходной переменной триггерного фронта.

Она должна быть установлена ​​только при наличии условия повышения, как вы положили здесь. IF Rtrigger.Q = true THEN Triggermemory := true; END_IF

Этот код находится внутри функции, функционального блока или программы? Если вы объявили свой RTrigger внутри функции, он будет «создан» при каждом входе в функцию и «уничтожен» при каждом выходе из функции. Таким образом, RTrigger не будет работать так, как вы ожидаете.

Если этот код находится в функции, вы можете рассмотреть возможность его создания в качестве глобальной переменной.

Однако Если все, что вы хотите сделать, это проверить, стала ли переменная TRUE, рассматривали ли вы возможность использования бистабильного SR? Это станет ИСТИНОЙ, если в любой момент переменная станет ИСТИНОЙ. Даже если переменная вернется к значению false, она останется TRUE.

Тогда вы можете использовать вход «Сброс», чтобы заставить его вернуться в положение сброса (FALSE).

Относительно «постоянные глобальные переменные», эти переменные полезны, когда вы хотите, чтобы ваши переменные пережили сброс.

...