Теперь у меня появился другой вопрос.
В основной программе, я добавил следующий код:
Код:
var
PRGTime : DWORD;
SysTime1 : SysTime64;
SysTime2 : SysTime64;
dbCurTime: CurTime;
dbStat : STATISTICS_INT;
end_var
dbCurTime(SystemTime:= SysTime1);
PRG_Timer();
dbCurTime(SystemTime:= SysTime2);
PRGTime := SysTime2.ulLow - SysTime1.ulLow;
dbStat(IN := DWORD_TO_INT(PRGTime));
С помощью данного кода я измеряю минимальное, максимальное и среднее время в микросекундах выполнения программы PRG_Timer.
В этой программе собственно и содержится тот код, который я собираюсь выполнять по высокочастотному таймеру.
Измерения показали следующие значения:
Минимальное время - 160 мкс;
Максимальное время - 520 мкс;
Среднее время - 212 мкс.
Вопросы:
1. Почему период выполнения так разница, хотя программа выполняется "пустая", т.е. все время ходит по одним и тем же логическим ветвям?
2. Какой период можно задать при таких значениях времени выполнения для высокочастотного таймера?
3. Я задавал период вызова по таймеру - 400 мкс. И программа в ПЛК работала (еще не проверял на объекте, но сам контроллер в стоп не уходил). Что происходит, если программа еще не успела выполнится, а уже по времени необходимо вызывать ее снова? Она просто не выполняет те операторы, которые не были выполнены к моменту нового вызова?