Показано с 1 по 10 из 688

Тема: Программирование ПЛК110 [М02] для задач реального времени

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

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

    По умолчанию

    Линкер, кстати, Владимиру дали. Так что я вообще не понимаю проблемы!? Делаешь ФБ и вперёд. Запустить пару бат-файлов из Hardell-ы несложно.
    Дмитрий Артюховский вот использует.
    Тролль-наседка, добрый, нежный и ласковый

  2. #2

    По умолчанию

    Цитата Сообщение от Филоненко Владислав Посмотреть сообщение
    Линкер, кстати, Владимиру дали. Так что я вообще не понимаю проблемы!? Делаешь ФБ и вперёд. Запустить пару бат-файлов из Hardell-ы несложно.
    Дмитрий Артюховский вот использует.
    А вы посмотрите, что Дмитрий пишет:
    Цитата Сообщение от Дмитрий Артюховский Посмотреть сообщение
    Я пошел по другому пути - ФБ PRU_DIMAS и в нем голый ассемблер с минимальным использованием описателей, лишь бы удовлетворить транслятор, в котором требуемый мне алгоритм не отягощен требованиями на совместимость блоков и выделением регистров на хранение промежуточных результатов... ну и START END по краям, вроде как обязательные..
    Судя по этим словам, Дмитрий пишет один большой монолитный блок на ассемблере, и использует линкер не потому, что нравится, а потому, что выбора у него нет. И? Этот "ФБ PRU_DIMAS и в нем голый ассемблер с минимальным использованием описателей" надёжнее, чем аналогичный код на ST?

    Т.е. не я один пошёл по варианту "неиспользования предоставленных блоков".


    Очевидно, что:
    1) Для среднего инженера-программиста вариант "написать на ассемблере" недостижим
    2) При написании монолитного кода на ассемблере гораздо проще ошибиться, чем при написании того же кода на ST или FBD языке
    3) Требование использовать "линкер" только для того, чтобы "использовать" лишь усложняет общую систему, и добавляет нетривиальные проблемы. Кто, например, тестирует сам линкер?
    Как тестировать, что ваш линкер правильно слинковал мою конкретную программу? Да и вообще, линкер привязан к windows, что создаёт проблемы при запуске на macos.
    Последний раз редактировалось Владимир Ситников; 15.09.2016 в 10:44.

  3. #3

    По умолчанию

    Цитата Сообщение от Филоненко Владислав Посмотреть сообщение
    Линкер, кстати, Владимиру дали. Так что я вообще не понимаю проблемы!? Делаешь ФБ и вперёд. Запустить пару бат-файлов из Hardell-ы несложно.
    Дмитрий Артюховский вот использует.
    Объясню почему невозможно использовать "линкер".

    Жизненный цикл кода (жирным я выделил, собственно, "секретный инструмент"; всё остальное -- общедоступно):
    Код:
    assember + СЕКРЕТНЫЙ ИНСТРУМЕНТ ==> FB_ARRAY.bin
    КДС_CFC.EXP + target.trg + editor.exe ==> program.p
    program.p + FB_ARRAY.bin + compilator.exe ==> PRU0.prg
    
    КДС_CFC.EXP -- это программа из PRU блоков, составленная в КДС
    program.p -- это по сути описание того, какие ФБ вызывать и как они соединены между собой
    FB_ARRAY.bin -- содержит код самих блоков и ещё что-то
    Я без проблем могу из Hardella сгенерировать всю программу под видом одного ФБ (и, соответственно, program.p будет состоять из одного гордого вызова этого самого ФБ), но это всё равно не позволит мне создавать PRU0.prg из Hardella.

    Дело в том, что мой ФБ нужно каким-то образом завернуть в FB_ARRAY.bin файл, а инструмент, который это делает секретный.


    Иными словами:
    1) Я могу генерировать и публиковать PRU0.prg для законченных программ. Например, я могу опубликовать PRU0.prg для работы с ШД.
    2) Я не могу встроить механизм генерации PRU0.prg в Hardella, т.к. для этого придётся публиковать "секретный инструмент создания FB_ARRAY.bin"
    3) Если все эти песни пляски вокруг FB_ARRAY.bin сводятся только к тому, чтобы ублажить линкер, подсовывая ему программу из одного-единственного ФБ, то зачем такая сложность? Для повышения надёжности мы в цепочку добавляем 2 лишних звена под названиями FB_ARRAY.bin и program.p?
    4) Ещё раз подчеркну, что я работаю в macos, и для меня секретный_инструмент.exe, editor.exe, compilator.exe создают проблему даже сами по себе -- на macos непросто запускать windows программы. Есть желающие проспонсировать развитие Hardella IDE? Подобные же "хоть чучелом, но без *.exe никак" весьма удручают.

  4. #4

    По умолчанию

    Цитата Сообщение от vladimirisitnikov Посмотреть сообщение
    Иными словами:
    1) Я могу генерировать и публиковать PRU0.prg для законченных программ. Например, я могу опубликовать PRU0.prg для работы с ШД.
    2) Я не могу встроить механизм генерации PRU0.prg в Hardella, т.к. для этого придётся публиковать "секретный инструмент создания FB_ARRAY.bin"
    Прошу провести натурные испытания.
    pru_pulse_v1.zip

    Порядок работы:
    1) Заливаем PRU0.prg (как-то)
    2) Подключаем ШД на fast output 3
    2) Используем блок pru_pulse.lib для работы с ШД
    CYCLE_LENGTH задаёт длительность единичного и нулевого значения на выходе. Оно указывается в тактах PRU. Вроде как PRU работает на частоте 150МГц, т.е. значение cycle_length=150 это импульсы по 1мкс.
    Параметр CYCLE_LENGTH сейчас WORD, т.е. максимальное значение 65535, и, значит, возможна генерация частот в пределах 1кГц...1МГц
    Если нужны более низкие частоты, то придётся перекомпилировать программу, а мне было немного лень, т.к. для этого нужно перезапускать bat'ники.

    В pru_pulse один блок:
    Код:
    FUNCTION_BLOCK PRU_PULSE
    (* Output will be generated to FAST OUTPUT 3 *)
    VAR_INPUT
      ENABLE: BOOL;
      CYCLE_LENGTH: WORD; (* PRU cycles *)
      QUANTITY: DWORD;
    END_VAR
    VAR_OUTPUT
      READY : BOOL;
      QUANTITY_LEFT: DWORD; (* for debugging *)
    END_VAR

    Вышеобозначенное получено "официальным линкером".
    Я ему скормил всю-всю программу как один ФБ.

    Для примера, вот так выглядит pulse.p -- т.е. просто вызов одного моего ФБ.
    Код:
    ;include "target.trg"
    FBDECL
    #defFB PRU_PULSE PRU_PULSE
    /FBDECL
    
    SYNCLIST
    IN=R25
    IN=R26
    IN=R27
    OUT=R28
    OUT=R29
    /SYNCLIST
    PROGRAMM
    PRU_PULSE
    /PROGRAMM
    А так выглядит "ассемблерный код" моего ФБ:
    Код:
    .origin 0
    .entrypoint __INIT_PROGRAM
    
    ;FB_WORKTIME=40
    ;FB_NAME=PRU_PULSE
    
    __INIT_PROGRAM:
    Да, да. Код целиком и полностью сгенерирован в Hardella, а линкеру я скормил пустой файл. Вроде, тот не подавился, и ладно.


    Обмен с PRU я сделал так. Тут, к сожалению, сделано наугад в надежде на то, что PRU_FB_GetParameter/PRU_FB_SetParameter будут читать/писать по нужным адресам в PRU памяти.
    Код:
    TMP : DWORD;
    ...
    PRU_FB_GetParameter(pru_num:=0, index:=28, value:=ADR(TMP));
    READY := TMP <> 0;
    PRU_FB_GetParameter(pru_num:=0, index:=29, value:=ADR(QUANTITY_LEFT));
    PRU_FB_SetParameter(pru_num:=0, index:=25, value:=ADR(QUANTITY));
    TMP := WORD_TO_DWORD(CYCLE_LENGTH);
    PRU_FB_SetParameter(pru_num:=0, index:=26, value:=ADR(TMP));
    TMP := SEL(ENABLE, 0, 1);
    PRU_FB_SetParameter(pru_num:=0, index:=27, value:=ADR(TMP));
    Последний раз редактировалось Владимир Ситников; 19.09.2016 в 13:10. Причина: fast output 1 -> fast output 3

  5. #5

    По умолчанию

    Цитата Сообщение от vladimirisitnikov Посмотреть сообщение
    Прошу провести натурные испытания.
    Обмен с PRU так не работает. смотрим ФБ END_1_1 и понимаем 2 номера регистра, по которым идёт обмен.
    Если надо больше - модифицируем ФБ соответственно.

    Сама библиотека работает с любым номером регистра, если он задаётся и поддерживается ФБ END и опредёлен в программе в разделе
    SYNCLIST

    Копирование данных в PRU и из PRU происходит силами самой PRU. Через разделяемую память, куда пишет библиотека
    Последний раз редактировалось Филоненко Владислав; 20.09.2016 в 09:34.
    Тролль-наседка, добрый, нежный и ласковый

  6. #6

    По умолчанию

    Цитата Сообщение от Филоненко Владислав Посмотреть сообщение
    Копирование данных в PRU и из PRU происходит силами самой PRU. Через разделяемую память, куда пишет библиотека
    У меня вопрос про HOST составляющую.
    Библиотека pruAccessLib.lib, похоже, не просто "пишет в память", а ещё и ждёт того, как PRU обработает данные. Вот этот момент ни в "писании" не сказан, ни из исходных кодов тоже не считывается.
    Последний раз редактировалось Владимир Ситников; 20.09.2016 в 09:47.

  7. #7

    По умолчанию

    Цитата Сообщение от vladimirisitnikov Посмотреть сообщение
    У меня вопрос про HOST составляющую.
    Библиотека pruAccessLib.lib, похоже, не просто "пишет в память", а ещё и ждёт того, как PRU обработает данные. Вот этот момент ни в "писании" не сказан, ни из исходных кодов тоже не считывается.
    Смотрим ФБ END
    Тролль-наседка, добрый, нежный и ласковый

Похожие темы

  1. Ответов: 38
    Последнее сообщение: 24.01.2022, 11:56
  2. Ответов: 10
    Последнее сообщение: 11.06.2021, 14:55
  3. часы реального времени
    от vetaly в разделе ПЛК1хх
    Ответов: 4
    Последнее сообщение: 28.08.2015, 16:21
  4. Таймер реального времени УТ1-РiС
    от ser10 в разделе Трёп (Курилка)
    Ответов: 0
    Последнее сообщение: 16.09.2010, 12:24

Ваши права

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