Измерение интервала времени больше 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