Измерение интервала времени больше 2ч 46м
30с
Андрей;
19.11.03
Уважаемые коллеги!
Необходимо измерить интервал времени между 2-мя битовыми
фронтами.
Интервал времени больше чем 2ч 46м 30с.
Для измерения времени хочу использовать системную функцию
SFC64.
Т.е. по 1-му фронту сохраняю системное время t1, по 2-му фронту
сохраняю системное время t2 и нахожу разницу t2-t1, далее умножаю
на 10 мс и соответственно получаю время в мс между 2-мя
фронтами.
Только вот "меня терзают смутные сомнения" насчет того, что по
достижении SFC64 величины 2 в 31 степени счет начинается снова с
нуля. Видимо следует ловить этот переход через ноль и продолжать
счет с 2 в 31 степени до "бесконечности".
Возможно существуют другие варианты??
Re: Измерение интервала времени больше 2ч 46м
30с
Игорь К; 20.11.03
Здравствуйте!
Если вы используете S7 400, можно сделатьследущее:
В ОВ36 (Прерывание 50msec)выставляется меркер
AN M 8.0
= M 8.0
В принципе если в других блоках прерываний по времени делать тоже
самое (М 8.1, М8.2 и т.д) можно получить ряд импульсов заданной
длительности. Затем в FC1 (к примеру)проделаем следующее:
L MB 8
L DB31.DBB 72
XOW
TAK
T DB31.DBB 72
AW
T MB 9
В db31.dbb 72 хранится старое значение генератора импульсов времени
(МВ 8). В байте МВ9 получаем короткие импульсы, которые появляются
через определенные промежутки времени (например М9.0 в нашем
примере каждые 100 мс).
Далее организуем ряд счетчиков
A M 9.5 //импульс 1 с
JNB _006
L DB31.DBW 86 //счетчик для 1 мин. импульса
L 1
-I
T DB31.DBW 86
_006: NOP 0
в следующем Networke
A(
L DB31.DBW 86 //счетчик для 1 мин. импульса
L 0
<=I
)
= M 10.3 // 1 мин. импульс
A M 10.3
JNB _033
L 60
T DB31.DBW 86
_033: NOP 0
В конечном итоге можно получить:
M8.0 - 100ms симметричный импульс
M8.1 - 200ms симметричный импульс
M8.2 - 400ms симметричный импульс
M8.3 - 500ms симметричный импульс
M8.4 - 800ms симметричный импульс
M8.5 - 1 s симметричный импульс
M8.6 - 1.6 s симметричный импульс
M8.7 - 2 s симметричный импульс
M9.0 - 10 Гц импульс
M9.1 - 5 Гц импульс
M9.2 - 2.5 Гц импульс
M9.3 - 2 Гц импульс
M9.4 - 1.5 Гц импульс
M9.5 - 1 Гц импульс
M9.6 - 0.625 Гц импульс
M9.7 - 0.5 Гц импульс
M10.0 - 5 s импульс
M10.1 - 10 s puls
M10.2 - 30 s импульс
M10.3 - 1 min импульс
M10.4 - 5 min импульс
M10.5 - 10 min импульс
M10.6 - 30 min импульс
M10.7 - 60 min импульс
Что-то типа кварцевых часов :-)))
Меркеры можно использовать в программе как для подсчета прошедшего
времени, так и для задания интервалов определенной
длительности.
Re: Измерение интервала времени больше 2ч 46м
30с
Андр;
20.11.03
Я использую контроллер S7-314 (в котором есть только OB35),
на мой взгляд, как-то все непросто c вариантом "кварцевых
часов".
А все-таки если использовать SFC64 ??
Что вы думаете по этому варианту ??
Re: Измерение интервала времени больше 2ч 46м
30с
Иван Данилушкин; 20.11.03
Уважаемый Андрей!
Мне кажется, вы не очень хорошо понимаете как работает функция
SFC64.
1. Результат не нужно умножать на 10, чтобы получить ms.
2. 2^31 ms = 24d20h31m23s648ms
3. В трёхсотой серии счётчик не сбрасывается не на ноль, а на
-2^31.
Это увеличивает временной интервал в двое.
Такие вот дела ...
Re: Измерение интервала времени больше 2ч 46м
30с
Андр;
20.11.03
Тогда получается, что после 24d20h31m23s648ms не будет 0 ms?
И 0 ms всё-таки будет после двойного интервала (24d20h31m23s648ms *
2) ??
Re: Измерение интервала времени больше 2ч 46м
30с
Андр;
20.11.03
Резюме: Что же удобнее для измерения больших интервалов времени -
вариант "кварцевых часов" или вариант "SFC64" ??
Re: Измерение интервала времени больше 2ч 46м
30с
Иван Данилукшин; 20.11.03
Мы используем SFC64. При этом нужно следить за двумя вещами:
1. Чтобы засекаемый интервал времени не был больше чем
24d20h31m23s648ms * 2
2. В случае если t2<t1 рассчитывать временной интервал как
2^31-t1 + t2-(-2^31)
С уважением.
P.S. Да, что-то я заосмневался насчёт того куда сбрасывается
счётчик на 0 или на -2^31. Нужно провести разведку боем :)
Re: Измерение интервала времени больше 2ч 46м
30с
Garri;
22.11.03
А я советую использовать системную функцию SFB4 (или SFB5..).
Принцип использования такой же как и таймерных функций с системными
ячейками-таймерами, а время измерения достигает до
24D_20H_31M_23S_647MS.
См. http://aiz@wline.ru