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

Тема: Вопрос про ST от новичка (Codesys 3.5)

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

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

    По умолчанию Вопрос про ST от новичка (Codesys 3.5)

    Добрый день.

    Допустим у меня есть две программы. Main и Prg1

    Первый вариант:
    PROGRAM MAIN
    VAR
    START:BOOL:=True;
    END_VAR

    IF START THEN
    PRG1();
    START := FALSE;
    END_IF


    Второй вариант:
    PROGRAM MAIN
    VAR
    END_VAR
    PRG1();


    PROGRAM PRG1
    VAR
    START:BOOL:=True;
    //какие-то переменные
    END_VAR


    IF NOT START THEN RETURN; END_IF
    START := FALSE;
    //какой-то код....



    Вопрос. Первый вариант лучше второго в плане экономии памяти, быстродействии или чего-то ещё? Или все едино?

  2. #2

    По умолчанию

    В общем случае едино.
    И лучше делать Start наобррот: FALSE, а потом писать что-то типа
    IF (NOT(Start)) THEN
    Start := TRUE;
    .....
    END_IF
    Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живёте. © Steve McConnell
    Мой рабочий блог со статьями про щиты и автоматику ОВЕН - Cs-Cs.Net | Почта: Info@Cs-Cs.Net

  3. #3

    По умолчанию

    Цитата Сообщение от Cs-Cs Посмотреть сообщение
    В общем случае едино.
    И лучше делать Start наобррот: FALSE, а потом писать что-то типа
    IF (NOT(Start)) THEN
    Start := TRUE;
    .....
    END_IF
    Как раз лучше начинать с TRUE, зачем Вам на каждом цикле делать операцию NOT?
    И назвать ее можно что-то вида FirstCycle.

  4. #4

    По умолчанию

    Цитата Сообщение от saii Посмотреть сообщение
    Как раз лучше начинать с TRUE, зачем Вам на каждом цикле делать операцию NOT?
    Ну так это не микроконтроллер, где лишняя операция сожрёт несколько тактов.
    И чего-то, если это не Z80, то мне помнится что в большинстве ассемблеров есть JZ и JNZ.
    А ещё можно записать IF (Start = FALSE). Сколько тогда операций будет? =))
    Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живёте. © Steve McConnell
    Мой рабочий блог со статьями про щиты и автоматику ОВЕН - Cs-Cs.Net | Почта: Info@Cs-Cs.Net

  5. #5

    По умолчанию

    Проверил на Codesys 2.3 трансляцию ST в IL
    Код:
    IF Start THEN...
    преобразуется в
    Код:
    LDN Start
    JMPC Else1
    Код:
    IF NOT Start THEN...
    преобразуется в
    Код:
    LD Start
    JMPC Else1
    Код:
    IF Start = FALSE THEN...
    преобразуется в
    Код:
    LD Start
    EQ FALSE
    NOT
    JMPC Else1
    Т.е. если стоимость операций LD и LDN не отличается, то варианты
    Код:
    IF Start THEN
    и
    Код:
    IF NOT Start THEN
    равнозначны.

    А вот сравнение с FALSE требует дополнительных команд.

  6. #6
    Пользователь
    Регистрация
    31.01.2019
    Адрес
    РФ/РБ
    Сообщений
    917

    По умолчанию

    Цитата Сообщение от saii Посмотреть сообщение
    Как раз лучше начинать с TRUE, зачем Вам на каждом цикле делать операцию NOT?
    И назвать ее можно что-то вида FirstCycle.
    Лучше начинать не с TRUE, ни с FALSE, а с условия начала работы.

    PROGRAM MAIN
    VAR
    END_VAR

    PRG1(Start:= ButtonStart AND PowerOk AND StartEnabled);
    В трансформаторной будке живет трансформаторная собака (с) Прозрачный гонщик

  7. #7

    По умолчанию

    Тогда переменная должна называться notStart

  8. #8

    По умолчанию

    Емельянов Кирилл Почему? Она ж при старте ставится в TRUE - вот, раз TRUE - значит старт успешен.
    А вообще это прям в CodeSys FAQ есть (вот тут: https://www.owen.ru/forum/showthread...l=1#post304642), так что троллинг очень толстый.
    Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живёте. © Steve McConnell
    Мой рабочий блог со статьями про щиты и автоматику ОВЕН - Cs-Cs.Net | Почта: Info@Cs-Cs.Net

  9. #9

    По умолчанию

    Вот и повеселились!
    А что? Кто-то на IL ещё пишет?
    Косяки CDS 3.5 другие. Это, например, скорость работы встроенных драйверов Modbus, где между запросами идёт 70 мсек задержка.
    А сколько байт займёт IF - пофиг.
    Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живёте. © Steve McConnell
    Мой рабочий блог со статьями про щиты и автоматику ОВЕН - Cs-Cs.Net | Почта: Info@Cs-Cs.Net

  10. #10

    По умолчанию

    Спасибо всем за ответы.

    Если позволите, то ещё один вопрос.

    У меня структура
    TYPE Example :
    STRUCT
    First:INT;
    Second:REAL;
    Third:STRING[9];
    Fourth:WORD;
    END_STRUCT
    END_TYPE

    Затем объявляется экземпляр этой структурой с привязкой к адресу.
    Expl: AT %MW2000:Example;

    Гарантировано ли, что адрес:
    Expl.First будет MW2000?
    Expl.Second будет MW2001?
    Expl.Third будет MW2003?
    Expl.Fourth будет MW2013?

    Если гарантировано, то насколько связыванием через структуры считается хорошим/дурным тоном?
    Привязка нужна для соединения с панелью оператора.

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

Похожие темы

  1. Вопрос от Новичка
    от valizo в разделе Среда программирования OWEN Logic
    Ответов: 6
    Последнее сообщение: 29.12.2017, 17:20
  2. Вопрос новичка
    от Dmitro в разделе Мх110
    Ответов: 2
    Последнее сообщение: 21.02.2017, 09:47
  3. Вопрос от новичка))
    от Володя28 в разделе Master SCADA 3
    Ответов: 3
    Последнее сообщение: 25.09.2015, 22:22
  4. Вопрос новичка.
    от Georgiy в разделе ПЛК1хх
    Ответов: 2
    Последнее сообщение: 20.02.2011, 15:45
  5. вопрос новичка
    от Антонн в разделе ПЛК1хх
    Ответов: 8
    Последнее сообщение: 09.02.2010, 10:48

Ваши права

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