Показано с 1 по 10 из 26

Тема: Перепрошивка на версию 2.10.9 для работы с быстрыми выходами

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1
    Пользователь
    Регистрация
    10.11.2014
    Адрес
    Санкт-Петербург
    Сообщений
    995

    По умолчанию

    Теперь у меня появился другой вопрос.

    В основной программе, я добавил следующий код:
    Код:
    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 мкс. И программа в ПЛК работала (еще не проверял на объекте, но сам контроллер в стоп не уходил). Что происходит, если программа еще не успела выполнится, а уже по времени необходимо вызывать ее снова? Она просто не выполняет те операторы, которые не были выполнены к моменту нового вызова?
    Последний раз редактировалось Спорягин Кирилл; 22.06.2016 в 19:00.

  2. #2

    По умолчанию

    Цитата Сообщение от Спорягин Кирилл Посмотреть сообщение
    Что происходит, если программа еще не успела выполнится, а уже по времени необходимо вызывать ее снова? Она просто не выполняет те операторы, которые не были выполнены к моменту нового вызова?
    Т.к. сторожевой таймер будет срабатывать при превышении 20 мкс для программы, вызываемой по прерыванию, то ситуация, которую Вы описываете невозможна.

Похожие темы

  1. Ответов: 12
    Последнее сообщение: 12.09.2018, 04:30
  2. Ответов: 5
    Последнее сообщение: 06.05.2015, 13:13
  3. Ответов: 38
    Последнее сообщение: 16.02.2013, 12:34
  4. Ответов: 2
    Последнее сообщение: 26.01.2009, 21:15

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •