Страница 3 из 3 ПерваяПервая 123
Показано с 21 по 30 из 38

Тема: Существует ли в CoDeSys v.2(v.3) альтернатива #if defined

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

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

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    а зачем думать, когда документация есть
    Вот я и не понял написанное в документации:

    Обычно при использовании МЭК констант подразумевается наименьший из возможных типов данных. Если нужно точно указать тип константы, применяется префикс типа: <Type>#<Literal>
    <Type> указывает необходимый тип. Это может быть: BOOL, SINT, USINT, BYTE, INT, UINT, WORD, DINT, UDINT, DWORD, REAL, LREAL. Тип нужно указывать заглавными буквами.
    <Literal> указывает значение константы.
    Пример:
    var1:=DINT#34;

  2. #2

    По умолчанию

    допустим я меняю биты в переменной так:

    var1 := var1 OR 2#00000001;

    мне нужно где-то глобально как-то определить 2#00000001, чтобы писать как-то так:

    #define BIT1 2#00000001

    var1 := var1 OR BIT1;

  3. #3
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,575

    По умолчанию

    Вот один из вариантов моего видения, как можно использовать что то типа define в КДС, например сделать преобразование на своих условиях
    Изображения Изображения
    • Тип файла: png owen.png (110.2 Кб, Просмотров: 37)
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

    среди успешных людей я не встречала нытиков
    Барбара Коркоран

  4. #4

    По умолчанию

    capzap прямо с языка сорвал
    Захват-1.png

  5. #5

    По умолчанию

    ага, пытался

  6. #6

    По умолчанию

    capzap, Мимоход, понял, спасибо!

  7. #7

    По умолчанию

    Спасибо, а как это будет выглядеть на st? Графические языки плохо понимаю.
    Железяка должна быть такой: нажал кнопку — работает

  8. #8

    По умолчанию

    Я бы тоже хотел иметь возможность условной компиляции.
    Но не для кросплатформенности (такая задача не стоит и никогда не стояла), а для отладки - заменять аппаратные входные сигналы отладочными программными.
    А то потом ищи в десятке мест, где вставил дебаговские затычки.

    С уважением,
    Herzog

  9. #9

    По умолчанию

    Цитата Сообщение от Herzog Посмотреть сообщение
    Но не для кросплатформенности (такая задача не стоит и никогда не стояла), а для отладки - заменять аппаратные входные сигналы отладочными программными.
    А то потом ищи в десятке мест, где вставил дебаговские затычки.
    Кроссплатформенность просто в пример привёл, а так, конечно, тоже нужна именно возможность отладки.
    Цитата Сообщение от capzap Посмотреть сообщение
    a:=SEL(FLAG_DEBUG,REAL_RightSensor,VIRT_RightSenso r); или POU_FB(in:=SEL(FLAG_DEBUG,REAL_RightSensor,VIRT_Ri ghtSensor));
    и т.д.
    Честно говоря, ничего не понял. Мне нужно (пока только это), чтобы для каждого символьного имени входа и выхода, используемого в программе, было два объявления, одно вида:
    Код:
    RightSensor AT %IX3.0.0: BOOL; (* реальный вход *)
    Другое вида:
    Код:
    RightSensor AT %IW8.0.0.0: BOOL; (* бит входной сетевой переменной, управляемый мастером *)
    И чтобы переключать с "реальных" на "виртуальные" входы/выходы можно было "одной кнопкой". А использовать переменные просто:
    PHP код:
    IF RightSensor THEN... 
    Без дополнительных сущностей. Такое возможно? Если нет, то всё понятно, и вопрос снимается, но если возможно, то хотелось бы об этом знать, чтобы не изобретать велосипед.
    Железяка должна быть такой: нажал кнопку — работает

  10. #10

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    вроде я про это и толкую, только вместо if-ов у меня sel, почитайте документацию
    Sel тот же if, только в профиль.

    Но условная компиляция имеет гораздо большие возможности.
    Например, кусок кода:
    #ifdef (флаг-условие А)
    ... 200 операторов ...
    #else
    ... еще полсотни другого кода ....
    #endif
    не компилирует одновременно 250 строк, а - в зависимости от условия А - либо первые 200, либо вторые полсотни.

    Если же использовать простой if, то Вам может прости не хватить памяти - как для программы, так и для данных. Если Вы отлаживаете запись в retain, то без условной компиляции придется компилировать два набора данных - один истинный, другой отладочный - и объема retain может не хватить.
    Так что простые sel и if условную компиляцию не заменяют.

    С уважением,
    Herzog
    Последний раз редактировалось Herzog; 03.07.2011 в 09:25.

Страница 3 из 3 ПерваяПервая 123

Ваши права

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