Показано с 1 по 3 из 3

Тема: ПЛК100: таймеры при отладке

  1. #1
    Пользователь Аватар для drvlas
    Регистрация
    30.09.2010
    Адрес
    Киев
    Сообщений
    700

    По умолчанию ПЛК100: таймеры при отладке

    Совершенно я извелся с таймерами КДС.

    Прилагаю простой пример. В чем фишка: этот пример при отладке в режиме эмуляции прекрасно работает, а в железе - нет.

    Кому влом раскручивать, приведу тексты, благо их мало:

    Код:
    VAR_GLOBAL
    	bError_0	: BOOL;
    	bError_1	: BOOL;
    END_VAR
    Код:
    PROGRAM PLC_PRG
    VAR
    	a: WORD;
    END_VAR
    
    a := a + 1;
    
    IF a = 3 THEN ErrorsHandle(0); END_IF
    IF a = 100 THEN ErrorsHandle(1); END_IF
    
    ErrorsHandle(100);
    Код:
    FUNCTION ErrorsHandle : BOOL
    VAR_INPUT
    	byErrNmb:		BYTE;
    END_VAR
    VAR
    	t0,t1:	TON;
    END_VAR
    
    CASE byErrNmb OF
    	0:	bError_0	:=	TRUE;
    	1:	bError_1	:=	TRUE;
    END_CASE
    
    t0( IN:=bError_0	AND NOT t0.Q, PT:=T#5s);
    t1( IN:=bError_1 	AND NOT t1.Q, PT:=T#5s);
    
    IF	t0.Q	THEN	bError_0	:=	FALSE;	END_IF
    IF	t1.Q	THEN	bError_1	:=	FALSE;	END_IF
    То есть, в функции ErrorsHandle() установлены биты, запущены таймеры. В основной программе в каждом цикле вызывается эта же функция с кодом несуществующей ошибки - для проверки состояния таймеров. Какой взвелся - его ошибку сбрасываем.

    И именно так все обстоит при эмуляции. Гружу в живое тело - биты ошибок взводятся и не снимаются через положенные 5 секунд. Наблюдение за функцией ErrorsHandle() показывает, что оба таймера не запускались, или я неверно понимаю прилагаемую картинку.

    Подскажите, что я неправильно делаю?
    Просьба: не надо других способов отработки ошибок. Мне важно понять ситуацию с таймерами. Это же базовый элемент, а я с ним на ножах. Нехорошо...
    Изображения Изображения
    Вложения Вложения
    Последний раз редактировалось Николаев Андрей; 23.04.2011 в 18:17.

  2. #2

    По умолчанию

    Ключем к решению является то что errorhandle - функция. Таймеры при вызове функции каждый раз создаются в стеке. То что работает на эмуляторе - это особенность реализации эмулятора. А вообще таймеры нужно создавать глобальными или внутри программы или FB.
    Часто задаваемые вопросы по кодесис
    1) Почему программа не работает - Следует выполнить "Онлайн ->Старт"
    2) Где скачать CoDeSys, таргеты, прошивки, библиотеки - http://www.owen.ru/catalog/codesys_v3/opisanie

  3. #3
    Пользователь Аватар для drvlas
    Регистрация
    30.09.2010
    Адрес
    Киев
    Сообщений
    700

    По умолчанию

    ЩА буду пробовать.

    З.Ы. Вот, ежели не понял основ, то потом по граблям приходится ходить. Не воспринял мой организм ФБ...

    Добавлено. Итак, просто перенос всех таймеров в область глобальных переменных все полечил.
    К тому же errorhandle осталась функцией Если честно, то просто не понимаю, как ее можно было бы сделать ФБ, если к ней обращение с нескольких POU и в разных точках. Вот это "создается новый экземпляр ФБ" меня совсем в ступор заводит... Впрочем, это уже флуд.

    Спасибо, Олег!
    Последний раз редактировалось drvlas; 23.04.2011 в 20:33.

Ваши права

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