2017-02-22 47 views
1

Для одной из моих программ мне нужно нормально замкнутое реле с таймированным замыканием (NCTC) в Лестничной диаграмме.Определение обнаружения падения фронта в Codesys

Я не знаю стандартного метода для реализации такого, поэтому я сам пытаюсь построить его. Моему нынешнему подходу требуется обнаружение падения. Код такого детектора, который я нашел в конце книги: «IEC 61131-3: Программирование промышленных Системы» (2-е издание, стр. 327). Похоже, это:

FUNCTION_BLOCK  F_TRIG  (* falling edge *) 
    VAR_INPUT 
     CLK :  BOOL; 
    END_VAR 
    VAR_OUTPUT 
     Q : BOOL; 
    END_VAR 
    VAR RETAIN 
     MEM : BOOL := 1;  (* initialise edge flag *) 
    END_VAR 
    Q := NOT CLK AND NOT MEM; (* recognise falling edge *) 
    MEM := NOT CLK;    (* reset edge flag *) 
END_FUNCTION_BLOCK 

Который дает мне ровно 5 ошибок (игнорирование сборки неисправного из-за тех, кто):

ОШИБКА 4250: F_TRIG (1): Еще одно заявление 'ST' или конец POU ожидается
ОШИБКА 4250: F_TRIG (4): Другое заявление 'ST' или конец POU ожидается
ОШИБКА 4250: F_TRIG (7): Другое заявление 'ST' или конец POU ожидается
ОШИБКА 4250: F_TRIG (10) : Ожидается другое утверждение «ST» или конец POU
ОШИБКА 4250: F_TRIG (13): Другое заявление «ST» или конец POU ожидается

я правильно настроен тип POU быть функциональный блок и язык POU быть СТ. Я подозреваю, что мой синтаксис ржавый, но я открыт для предложений. Особенно, если я решаю эту проблему во всем неправильном подходе.

Это выглядит хорошо для меня. Что случилось?

Запуск Codesys 2.3.

ответ

0

Если я правильно понимаю, вы хотите, чтобы вывод быть:

  • ИСТИНА в режиме ожидания (нормально закрытый)
  • FALSE во время таймера
  • ИСТИНА, когда время истекает

Этот является противоположностью встроенного функционального блока TP (импульсный импульс). Просто инвертируйте вывод TP «Q».

2
  1. Удалить END_FUNCTION_BLOCK
  2. Удалить RETAIN. Вы можете сохранить функциональный блок. Не переменная в функциональном блоке
  3. Q и MEM внизу нигде не объявлены.
  4. F_TRIG уже относится к кодам. Необходимо объявить что-то еще

Вот пример того, как он должен выглядеть.

FUNCTION_BLOCK CustomTrig  
VAR_INPUT 
    CLK :  BOOL; 
END_VAR 
VAR_OUTPUT 
    Q : BOOL; 
END_VAR 
VAR 
    MEM : BOOL := 1;  
END_VAR 

Не могли бы вы подробнее объяснить, что вы пытаетесь сделать? Я мог бы помочь вам что-то разработать (или может быть что-то уже встроено в кодексы)

+0

Точка 3, 'Q' и' MEM' объявлены как 'BOOL'. Похоже, у них будет определенное значение в конце. – Mast

+0

Я вернусь, чтобы подробно рассказать о том, что я делаю, и работало ли ваше предложение. – Mast

+0

Что я пытаюсь сделать, это сборка реле с нормально замкнутым таймером (NCTC). – Mast