Возможно что-то не так делаете. Можно и читать, что записано. Были примеры ПЗУ от Сергей308, использовал для сохранения аварий в журнале, и соответственно мог прочитать по кругу, какие аварии были, то есть записаны давно.
Вид для печати
Возможно что-то не так делаете. Можно и читать, что записано. Были примеры ПЗУ от Сергей308, использовал для сохранения аварий в журнале, и соответственно мог прочитать по кругу, какие аварии были, то есть записаны давно.
То что записано, это ежу понятно, мне надо что сейчас в нем в данный момент времени!
Ну например: Есть ФБ TON (таймер задержки включения) и как бы мне нужно видеть сколько времени осталось до этого самого включения, а он этого не показывает, он показывает то что я в него записал, я это и так знаю!:)
Когда я в симуляторе в отладке программы я вижу как там меняется значение, когда в Он-Лайн отладке уже ничего не видно, но это ладно, вот эти бы значения считывать и выводить на дисплей или далее в программу если есть такая необходимость...
Ну была сначала мысль, что этот блок считывания настраивается, типа какие данные считывать, уставку или динамику, но этого тоже нет!
тю, ну ведь делали люди таймеры на ST и даже на FBD с выводом пройденного времени. Штатные не поддерживают такого. Овен не предусматривал :)
Надо использовать самописные таймеры и получить ET (отсчёт таймера). Тут первые 2 ссылки на TON и TOF, есть с паузой и без.
В примерах программ есть ещё много всего, есть и таймер TP.
https://owen.ru/forum/showthread.php...=9&p=429061#81
И все же городить пришлось, там нет ФБ TP (Импульс включения заданной длительности), там по ссылкам нет такого на ST, а я пока на ST не силен, поэтому он у меня получился аляповатым, т.е. по факту считает в 2 раза медленнее, хотя я почти уверен, если считать не миллисекундах а в секундах, то будет норм, в общем вот:
Вложение 85479
Ну и собсно сама программа, если кому такое барахло нужно:
https://owen.ru/forum/attachment.php...1&d=1756469102
Если кто напишет на ST, что нить похожее будет полезно... :)
Не претендую на оптимальность
Код:function_block fbTP
var_input
IN : bool;
PT : udint;
RST : bool;
end_var
var_output
Q : bool;
ET : udint;
end_var
var
st, tm : udint;
fl : bool;
end_var
tm := time_to_udint(get_time());
if RST then
Q := false;
elsif IN and not fl then
Q := true;
st := tm;
end_if
if Q then
ET := tm - st;
if ET >= PT then Q := false; end_if
else
ET := PT;
end_if;
fl := Q or IN;
end_function_block
Вариант 2:
Вложение 85482
Код:function_block TP
var_input
I : bool; // Входной импульс
T : udint; // Время в мс
end_var
var_output
Q : bool; // Выход
ET : udint; // Текущее значение таймера с обратным отсчетом
end_var
var
ts, d : udint; // Фиксация системного времени и дельты
rt : SYS.RTRIG; // Тригер фронта
end_var
rt(I := I and not Q); // Фиксируем начало нового импульса
if rt.Q then
ts := time_to_udint(get_time()); ET := T; Q := true; // Фиксируем продолжительность и начало импульса
end_if
if ET > 0 then
d := time_to_udint(get_time()) - ts; ts := ts + d; // Прошло времени в мc
if ET > d then
ET := ET - d; // Уменьшаем ET на это время
else
ET := 0; Q := false; // Иначе фиксируем завершение импульса
end_if
end_if
end_function_block