Страница 1 из 3 123 ПоследняяПоследняя
Показано с 1 по 10 из 24

Тема: Моя первая программа. Критикуйте

  1. #1

    По умолчанию Моя первая программа. Критикуйте

    Начал изучать контроллеры ОВЕН и среду Codesys.
    Моя первая задача такая: есть простейшая схема - кнопка и лампочка. Кнопка без фиксации НО, подключена к DI1. Лампочка через реле подключена к DO1.
    Кнопку нажал - лампочка загорелась, второй раз нажал - потухла ну и т.д.
    Вот такую программу написал на ST:
    PROGRAM PLC_PRG
    VAR
    RTRIGInst: R_TRIG;
    STATUS_BTN1: BOOL;
    END_VAR

    IF BTN1 = TRUE THEN (*Если нажали кнопку 1*)
    RTRIGInst(CLK:= BTN1); (*Вызываем функцию генератора одиночного импульса по переднему фронту*)
    IF RTRIGInst.Q = TRUE THEN
    IF STATUS_BTN1 = TRUE THEN STATUS_BTN1 := FALSE; (*Если статус первого прожектора был "вкл", то отключаем*)
    ELSE STATUS_BTN1 := TRUE; (*Иначе - включаем*)
    END_IF
    END_IF
    ELSE RTRIGInst(CLK:= BTN1); (*Вызываем функцию генератора одиночного импульса по переднему фронту, чтобы сбросить в след. цикле*)
    END_IF


    IF STATUS_BTN1 = TRUE THEN RELAY1 := TRUE; (*Если статус первого прожектора "вкл", то включаем реле 1*)
    ELSE RELAY1 := FALSE;
    END_IF
    Вроде работает, но..... может быть можно как-то попроще...
    Вообщем жду критики и замечаний.
    Спасибо.

  2. #2

    По умолчанию

    Цитата Сообщение от tolik777 Посмотреть сообщение
    Начал изучать контроллеры ОВЕН и среду Codesys.
    Моя первая задача такая: есть простейшая схема - кнопка и лампочка. Кнопка без фиксации НО, подключена к DI1. Лампочка через реле подключена к DO1.
    Кнопку нажал - лампочка загорелась, второй раз нажал - потухла ну и т.д.
    Вот такую программу написал на ST:


    Вроде работает, но..... может быть можно как-то попроще...
    Вообщем жду критики и замечаний.
    Спасибо.
    Сильно проще уже не сделаете. Но если оформите в виде ФБ, то дальше можно будет использовать, как готовый алгоритм))

  3. #3

    По умолчанию

    Код:
    IF STATUS_BTN1 = TRUE THEN RELAY1 := TRUE; (*Если статус первого прожектора "вкл", то включаем реле 1*)
    ELSE RELAY1 := FALSE;
    END_IF
    вот какой смысл огород городить?
    весть код умещается в одну строку
    Код:
    RELAY1 :=STATUS_BTN1;
    А вообще я бы весь этот код записал бы в событии OnMouseClik на кнопку,
    Код:
    IF Lampa = TRUE THEN
    Lampa :=FALSE;
    ELSE 
    Lampa :=TRUE;
    END_IF
    Зачем лишний раз цикл рабочий загружать?
    Последний раз редактировалось Crusash; 26.08.2009 в 10:57.

  4. #4

    По умолчанию

    Цитата Сообщение от Crusash Посмотреть сообщение
    А вообще я бы весь этот код записал бы в событии OnMouseClik на кнопку,
    ...
    Ой, извиняюсь, задание прочитал не внимательно...

  5. #5
    Пользователь
    Регистрация
    11.08.2008
    Адрес
    Астрахань
    Сообщений
    58

    По умолчанию

    Front(CLK:=knopka);
    IF Front.Q AND NOT lampa THEN
    lampa:=TRUE;
    ELSIF Front.Q AND lampa THEN
    lampa:=FALSE;
    END_IF

    нажали кнопку - включилась лампа, ещё раз нажали - выключилась и т. д.
    проще, кажется, некуда

  6. #6
    Пользователь
    Регистрация
    10.01.2007
    Адрес
    Красноярск
    Сообщений
    138

    По умолчанию

    Цитата Сообщение от nikita Посмотреть сообщение
    Front(CLK:=knopka);
    IF Front.Q AND NOT lampa THEN
    lampa:=TRUE;
    ELSIF Front.Q AND lampa THEN
    lampa:=FALSE;
    END_IF

    нажали кнопку - включилась лампа, ещё раз нажали - выключилась и т. д.
    проще, кажется, некуда
    Пробуем проще:
    Front(CLK:=knopka);
    IF Front.Q THEN
    lampa := NOT lampa;
    END_IF

  7. #7
    Пользователь
    Регистрация
    11.08.2008
    Адрес
    Астрахань
    Сообщений
    58

    Smile

    Пробуем проще:
    Front(CLK:=knopka);
    IF Front.Q THEN
    lampa := NOT lampa;
    END_IF

    действительно, нет предела совершенству

  8. #8
    Пользователь
    Регистрация
    18.03.2007
    Адрес
    г. Краснодар
    Сообщений
    233

    По умолчанию

    А есть еще библиотека Oscat там много прибомбасов для работы лампочек и кнопок (Диммеры и тп).

  9. #9
    Пользователь
    Регистрация
    10.01.2007
    Адрес
    Красноярск
    Сообщений
    138

    По умолчанию

    конечно, если использовать спец.фб или написать свой фб, то можно и уложиться в одну строчку. тут важно разобраться, отимальности в чем пытаемся достичь: в компактности текста программы, быстроты отработки кода процессором, объеме кода, понимании текста программы ...

  10. #10

    По умолчанию

    Пробуем проще:
    Front(CLK:=knopka);
    IF Front.Q THEN
    lampa := NOT lampa;
    END_IF
    А Front это какая библиотека?

Страница 1 из 3 123 ПоследняяПоследняя

Ваши права

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