Страница 5 из 6 ПерваяПервая ... 3456 ПоследняяПоследняя
Показано с 41 по 50 из 57

Тема: Проект CoDeSys в виде текстовых файлов?

  1. #41

    По умолчанию

    Ну, я про красивость, а не распространенность (с ней не поспоришь).
    А насчет примера у меня такая строчка может быть в цикле (20 одинаковых объектов), плюс расчетные задачи (выход целое или плавающее, а не логическое; тот же ПИД). Мне удобнее изменить в одном месте, чем в 20 сразу при изменении логики. Или приведенный пример; он тоже на LD реализуется?
    Код:
    tim3(in:=TRUE,pt:=t#5s);
    IF tim3.Q THEN
    	time4:=DINT_TO_WORD(TIME_TO_DINT(tim2.ET)/60000);
    	IF tp1c<>tp1co THEN
    		n:=n+1;
    		ss:=ss+tp1;
    	ELSE
    		tp1:=t;
    	END_IF;
    	IF tp2c<>tp2co THEN
    		n:=n+1;
    		ss:=ss+tp2;
    	ELSE
    		tp2:=t;
    	END_IF;
    	IF tp3c<>tp3co THEN
    		n:=n+1;
    		ss:=ss+tp3;
    	ELSE
    		tp3:=t;
    	END_IF;
    	IF tp4c<>tp4co THEN
    		n:=n+1;
    		ss:=ss+tp4;
    	ELSE
    		tp4:=t;
    	END_IF;
    	IF tp5c<>tp5co THEN
    		n:=n+1;
    		ss:=ss+tp5;
    (*	ELSE
    		tp5:=t; *)
    	END_IF;
    	tim3(in:=FALSE);
    	tp1co:=tp1c; tp2co:=tp2c; tp3co:=tp3c; tp4co:=tp4c; tp5co:=tp5c;
    	IF n<>0 THEN
    		t:=ss/n;
    	END_IF;
    	ttemp:=t;
    END_IF;

  2. #42

    По умолчанию

    Andy!

    Может проще завести массивы:
    tpc[0..20]
    tpc0[0..20]
    tp[0..20]

    и в цикле опрашивать функцию, в которой входной переменной будет индекс массива i и выполняется:
    Код:
    	IF tpc[i]<>tpco[i] THEN
    		n:=n+1;
    		ss:=ss+tp[i];
    	ELSE
    		tp[i]:=t;
    	END_IF;
    Да и саму двадцатку объявить глобальной константой и менять при увеличении числа объектов.

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

  3. #43

    По умолчанию

    Нет, это разные случаи. В приведенном примере используются переменные из области ВВ, для массива надо их переприсваивать и т.д.

  4. #44

    По умолчанию

    Цитата Сообщение от Andy Посмотреть сообщение
    Или приведенный пример; он тоже на LD реализуется?
    Почему нет? Правой кнопкой мышки щелкаете, Конвертировать объект… в LD. Получится зуб в зуб с ветвлениями. Руками с нуля будет красивее.

    Все языки приводятся препроцессором в один собственный формат. Это значит: 1. Любую программу можно перевести на любой язык. 2. Машинный код при этом не изменится. 3. Выбор языка исключительно дело вкуса.

    Переделывать тут нет никакого смысла. Если думать в IF ELSE и так писать на LD, то получается жуть. Поэтому и говорю, что красиво писать на LD нужно уметь и думать не так как на текстовых языках. Мне лично ST ближе. Есть мастера, которые делают на LD изящные программы.

    * Область ВВ позволяет объявлять переменные ‘внахлест’. Можно положить массив поверх входов. Будет типа union в Си.

    * ; после END_IF в ST не нужна, дает пустой оператор.

  5. #45

    По умолчанию

    Насчет "внахлест" - это ж надо описывать переменные не в дереве конфигурации; хотя, когда проект устоялся (не добавляются внешние переменные), можно и переделать под такой вариант.
    Про "думать на LD" - наверное, да, мешает опыт программирования на процедурных языках. Может, когда-нибудь прозрею?

  6. #46

    По умолчанию

    Как это внахлёст адреса? Подскажите

  7. #47

    По умолчанию

    В области в/в и в маркерной (M) переменные кладутся на определенные адреса по AT. Никто не запрещает положить 2 или более переменных на один адрес. Компилятор выдаст предупреждение. Оно опционально отключаемое.

    Например, можно объявить текстовую строку в М памяти и на этот же адрес положить байтовый массив. Получим легкий побайтовый доступ к строке.

  8. #48

    По умолчанию

    Пока смутно представляю, как например все 8 входов от МВА8 на модбасе в массив загнать без присвоения, чтоб не плодить переменные и не копировать строчки с однотипными операциями. Попробую. Спасибо за идею.

  9. #49

    По умолчанию

    Некропост в поддержку Herzog'a:
    Заходим в Simatic Manager/Sources, нажимаем Ctrl+A, правый клик - Export Source... И получаем пачку текстовых файлов имя_функции.SCL. - Это библиотека, причём полностью совместимая с CoDeSys (ну разве что END_FUNCTION_BLOCK в конце каждой функции, но это не смертельно). Вот только поддерживать её синхронизированной между S7 и КДС можно только при помощи копипасты каждой функции в КДС ручками...

    Сименс не парился, - просто сделал простейшую фичу и всё. Я уж не говорю что эти файлы можно пихать и в SVN и в GIT и куда угодно бесплатно.

  10. #50

    По умолчанию

    Цитата Сообщение от Thorn Посмотреть сообщение
    Некропост
    Не дождетесь.

    Я делаю импорт, сохраняя текстовые файлы для системы контроля версий. Чтобы не тыкать "yes" на каждый файл - использовал макрос.
    Противно, конечно, но это самый простой выход.

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

Страница 5 из 6 ПерваяПервая ... 3456 ПоследняяПоследняя

Ваши права

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