This is topic Управляемый генератор in forum TRACE MODE 6 бесплатная Базовая версия / TRACE MODE 6 free Base version at Форум TRACE MODE: техническая поддержка.
Здравствуйте. В FBD имеется раздел генераторы. Как используя стандартные блоки можно сделать управляемый генератор? Т.е. известно время цикла CALC. Я так понял генератор меандра изменяет свое состояние раз в цикл. Есть подозрение что необходимо использовать управляющий вход, но вод что и как на него навесить?
Posted by lumen_xp (Участник № / Member № 4034) on :
Немного подумав, я пришел к выводу что в случае если время цикла 100 мс, то ряд доступных частот будет весьма ограничен. Например возможно использование максимальной частоты 5Гц (больше просто не пройдет из-за времени цикла), далее 1Гц, 0,1Гц и т.д. Т.е. доступны те частоты при которых результат выражения 5/n, где n - частота [Гц], есть целое число. Выражение справедливо для цикла 100 мс. Возможным решением представляется написание программы на STL с использованием счетчиков.
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
Управление генератором можно осуществлять программно либо через управление циклом пересчета канала, вызывающего этот генератор, либо внутри программы с генератором. В любом случае получить генератор с временным интервалом изменения его значения, меньшим, чем цикл обработки базы каналов, нельзя.
Posted by lumen_xp (Участник № / Member № 4034) on :
Не совсем понимаю как будет обсчитываться программа:
PROGRAM VAR_INPUT IN_F : REAL := 0.1; END_VAR VAR_OUTPUT OUT_F : BOOL; END_VAR
VAR a: REAL; END_VAR VAR b: REAL; END_VAR a=5/in_f; while b!=a do b=b+1; end_while; out_f:=!(out_f);
END_PROGRAM
Т.е. счетчик будет прибавлять значение переменной b c интевалом CALC (задан 0,1с)? Если нет, то как модифицировать программу что бы она изменяла значение out_f с частотой 0,1 Гц при времени цикла CALC 0,1c.
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
Оператор цикла
while b!=a do b=b+1; end_while;
реализует внутренний цикл в одном вызове программы.
Вот пример программы, которая при цикле вызова 0.1 сек. будет генерировать меандр с периодом 10 сек.
PROGRAM VAR_INPUT cicle : UINT := 50; END_VAR VAR_INOUT RESULT : BOOL; END_VAR VAR_INOUT count : UINT; END_VAR
count = count + 1; IF count == cicle THEN RESULT = !RESULT; count = 0; END_IF;