Страница 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

    По умолчанию

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

  4. #4

    По умолчанию

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

  5. #5

    По умолчанию

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

  6. #6

    По умолчанию

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

  7. #7

    По умолчанию

    Проверил на 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 требует дополнительных команд.

  8. #8

    По умолчанию

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

  9. #9

    По умолчанию

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

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

    У меня структура
    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?

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

  10. #10

    По умолчанию

    disconnect555 Так, ага. Это плохой изврат, но так делать можно. Я такое виде в одном проекте, скопированном с какого-то другого: там брался первый адрес Modbus-регистров из Slave, и привязывался к адресу структуры. И поля совпадали. Но при малейших изменениях всё съезжало по адресам.
    А вот что за адрес MWxxx? Это откуда взято? Я с такими не работал ни фига.


    Формально верно следующее: в пределах одного объекта (структура, массив), все данные в памяти всегда располагаются последовательно. Так что адреса будут идти подряд.
    Но надо обратить внимание:
    а) На упаковку некоторых переменных (если специально не указано, то CodeSys может байт расширить до Word и так далее)
    б) Про хранение строк. В каких-то из форматов строка занимает, условно 9 символов + конечный нулевой = 10.
    У ОВЕНа это было в руководстве по программированию на CodeSys 2.3
    Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живёте. © Steve McConnell
    Мой рабочий блог со статьями про щиты и автоматику ОВЕН - Cs-Cs.Net | Почта: Info@Cs-Cs.Net

Страница 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

Ваши права

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