Страница 2 из 4 ПерваяПервая 1234 ПоследняяПоследняя
Показано с 11 по 20 из 39

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

  1. #11

    По умолчанию

    Цитата Сообщение от Малышев Олег Посмотреть сообщение
    В проекте можно исключить из компиляции один POU и включить другой - это конечно не так удобно как ifdef - но работать можно
    Очень неудобно.

    Если Вы используете переменную, которую нужно исключить в процессе компиляции или заменить на отлаживаемум программную, 40 раз в разных местах программы, то неужели нужно оформлять ее вызов (не функциональные действия, поскольку они разные - все 40 раз, а только вызов!) в виде отдельного ФБ?
    Причем после отладки для возвращения к нормальному функционированию - вручную удалять все вызовы ФБ? Впрочем в Вашей идее есть частица рациональности, т.к. отыскивать один ФБ проще - нужно удалить его и затем последовательно по ошибкам компилятора на несуществующий теперь ФБ убрать все ссылки, восстановив наромальную переменную. Муторно правда делать сие вручную.

    Но все же заводить специальный ФБ только для вызова переменной - непозволительная роскошь.

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

  2. #12

    По умолчанию

    Цитата Сообщение от Herzog Посмотреть сообщение
    Однако все это чисто гипотетически, поскольку сравнения версий на уровне исходных кодов в CodeSys нет..
    Хм, а мы применяем. В ходе отладки пишем на диск Имя_проекта_номер версии. Далее Проект – Сравнить. Удобный инструмент, причем не ограниченный только текстовыми языками (было бы крайне странно для профессиональной МЭК системы). В одной из наших текущих работ рабочая версия фала проекта 47. Удобно что в CoDeSys проект храниться в одном файле. Все версии лежат в отдельной папочке. За 3 сек на любой ноут переносим всю историю и в седло, в поля. Пока, наши прикладники сопротивляются тотальному внедрению СКВ, считают вышеописанный подход ‘ближе к народу’ в глубинке

    Для СКВ в CoDeSys V2.3 ставится дополнительный платный компонент ENI. Он позволяет интегрироваться с SVN в удобной форме, для текстовых и графических языков без ограничений. Содержит наглядный инструмент для сравнения. В одной базе можно хранить все документы, включая программы Дельфи и др. без всяких извратов.


    Условная компиляция в V2.3 есть только на уровне объектов: в глобальных переменных создаем 2 папки с разными наборами объявлений. Проект- Опции - Генератора кода – Исключить объекты – отключаем лишнюю. Для поставленной в этой теме задачи, даже удобнее, ибо переключаемся мышкой, набирать буквы вообще не нужно.

    В CoDeSys V3:

    {IF defined (variable:bXZ)}
    bXZ := TRUE;
    {text ''Эта надпись будет показана в окне сообщений компилятора'}
    {END_IF}

    См. также язык ExST в хелпе и Директивы компилятора.

  3. #13

    По умолчанию

    Цитата Сообщение от Игорь Петров Посмотреть сообщение
    Условная компиляция в V2.3 есть только на уровне объектов: в глобальных переменных создаем 2 папки с разными наборами объявлений. Проект- Опции - Генератора кода – Исключить объекты – отключаем лишнюю.
    Мало что дает - переключать набор переменных.

    Вот я использую какие-то входные данные, поступающие от внешнего железа. Мне важно отладить другой кусок, где они обрабатываются.
    Для этого я пишу отладочный программный кусок, где задаю нужные крайние случаи, аварийные комбинации - и отлаживаю их обработку в своей программе. Пишу "генератор поступления сигналов".
    Это блок нужно сделать компилируемым по условию на этапе отладки, а далее будут работать настоящие внешние сигналы - если условие компиляции отключить.
    Различные наборы данных, как Вы предлагаете, ничем помочь здесь не могут. Дело не в переменных, а в вариациях программного кода.

    Ситуация эта типичнейшая. Необходимость ее есть у всех, кто работает с внешним железом, а не собирает из PLC вещь в себе. Почему CodeSys не предусмотрела условной компиляции, инструмента, который есть во всех существующих компиляторах и интегрированных средах разработки - понять не могу.

    О неудобстве использовать специализированную СКВ типа ENI в системе, использующей комбинацию PLC и внешнего компи (что является почти стандартным решением большинства практических задач) я уже писал в другой теме.

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

  4. #14

    По умолчанию

    Цитата Сообщение от Herzog Посмотреть сообщение
    Почему CodeSys не предусмотрела условной компиляции, инструмента, который есть во всех существующих компиляторах и интегрированных средах разработки - понять не могу.

    О неудобстве использовать специализированную СКВ типа ENI в системе, использующей комбинацию PLC и внешнего компи (что является почти стандартным решением большинства практических задач) я уже писал в другой теме.
    Условная компиляция нужна. Это очевидно. Поэтому она сделана в CoDeSys V3. Даже более сильно, чем некоторых популярных компиляторах.

    В стандарте МЭК 61131-3 условная компиляция не предусмотрена, как и много чего еще. Совместимость для V2.3 была очень важна. Поэтому самодеятельность недопустима. Есть включение/отключение целых объектов. Полумера с сохранением МЭК совместимости.

    В V3 поднимается на уровень выше, чем стандарт МЭК. Тут уже можно импровизировать и даже вводить новые ключевые слова и целые языки программирования.

    Про ENI повторю: нет никакой ‘специализированной СКВ типа ENI’. Ставите свой любимый Subversion и к нему же через ENI цепляется CoDeSys. Это шлюз к СКВ, такой же, как Gateway server для портов связи. Полчаса тратим на установку и экономим кучу времени на извратах. Поставить бесплатно я один раз уже предлагал..

  5. #15

    По умолчанию

    Подниму старую тему
    А в версии 2.3 есть что-то типа #define?

  6. #16
    Пользователь Аватар для A.Simonov
    Регистрация
    11.07.2017
    Адрес
    Москва
    Сообщений
    50

    По умолчанию

    Цитата Сообщение от -=Vovka=- Посмотреть сообщение
    Подниму старую тему
    А в версии 2.3 есть что-то типа #define?
    К сожалению, нет.

    Инженер группы технической поддержки
    Симонов Александр Андреевич
    e-mail: support@owen.ru
    e-mail: a.simonov@owen.ru

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

    По умолчанию

    Цитата Сообщение от A.Simonov Посмотреть сообщение
    К сожалению, нет.
    чёйто? а VAR CONSTANT не подходит разве, спрашивалось же что-то типа
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

  8. #18

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    чёйто? а VAR CONSTANT не подходит разве, спрашивалось же что-то типа
    А при чем тут VAR CONSTANT ?

    Директива #define определяет идентификатор и последовательность символов, которой будет замещаться данный идентификатор при его обнаружении в тексте программы.

    Например, если необходимо использовать TRUE для значения 1, a FALSE для 0 то можно объявить следующие два макроса:

    #define TRUE 1
    #define FALSE 0

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

    По умолчанию

    ну и, напишу я в константах EDINICA : INT := 1; разве слово не заменит целочисленную единицу в формулах?
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

  10. #20

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    ну и, напишу я в константах EDINICA : INT := 1; разве слово не заменит целочисленную единицу в формулах?
    У директивы #define более широкие возможности. Здесь почитайте: http://www.c-cpp.ru/books/define

Страница 2 из 4 ПерваяПервая 1234 ПоследняяПоследняя

Ваши права

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