Это ближе к телу. Делал похожим способом на ПЛК с Codesys. Вот и думал перейти на ПР. Погрешность + - 10 мс не имеет значения.
Вид для печати
Это ближе к телу. Делал похожим способом на ПЛК с Codesys. Вот и думал перейти на ПР. Погрешность + - 10 мс не имеет значения.
Период следования импульсов от 300 мсек
Тогда и ST в руки.
Массив bool, два индекса на запись и на чтение, тактирование при помощи BLINK и RTrig.
Столь простые вещи не буду делать - неинтересно, и подозреваю, что исходная задача решается не через звено чистого запаздывания.
Так это же проще пареной репы, вот когда-то очень давно кому-то помогал на форуме, в смысле, делал задержку почти на 2000 тактов:
Вложение 81366
Задержку можно настраивать!
На вход CLK подать выход связки BLINK+RTrig с полным периодом 10 мс (5+5 мс).Код:A: array [0..999] of bool; // буфер на 1000 * 10 мс = 10 с
InIndx: udint;
OutIndx: udint;
if CLK then // если на тактовом входе true - выполнить пересчёт
A[InIndx] := In;
OutIndx := InIndx + 123; // 123 * 10 ms = 1 s 23 ms - задержка при такте 10 ms
if OutIndx > 999 then
OutIndx := OutIndx - 1000; //минус длина массива
end_if
Out := A[OutIndx]; // значение выхода
InIndx := InIndx + 1;
if InIndx > 999 then
InIndx := InIndx - 1000; //минус длина массива
end_if
end_if
Мне не нужено масштабирование входного импульса, просто по восходящему фронту выдать импульс с задержкой
Немогу понять как работает выше проведённый код. Что такое In и Out. Типа состояние входа и выхода?
Сначала идёт блок Blink, а затем Rtrig?
Типа змейки, которая непрерывно бегает и ловит вход
℅-/
Гениально
Преобразуем Ваш импульс в целое число: целое умножаем, делим,,, записываем полученное в таймер ТР или TOF - так может?
Антон_Б почему змейки? Blink дает половину выставленного периода 1 а половину 0, если время Th, Tl равны. А для работы вашего или иного макроса нужен импульс, а не удержание 1 Н-ное время. вот RTrig и дает этот самый импульс, длительностью в 1 цикл программы.