Страница 86 из 135 ПерваяПервая ... 3676848586878896 ... ПоследняяПоследняя
Показано с 851 по 860 из 1349

Тема: Hardella IDE

  1. #851

    По умолчанию

    Цитата Сообщение от murdemon Посмотреть сообщение
    А на каком софте основана сама Hardella IDE? Есть возможность компилировать ST в код IL (все описание самого кода есть). Интересна возможность запилить поддержку Delta PLc. На которых нет ST.
    Hardella IDE написана на JetBrains MPS.
    Да, сделать компиляцию ST -> IL можно.
    Delta на может IL в текстовом виде обрабатывать?

  2. #852
    Пользователь Аватар для murdemon
    Регистрация
    03.02.2014
    Адрес
    Санкт-Петербург
    Сообщений
    844

    По умолчанию

    На DELTA PLC (для ПЛК DVP серии) в среде ISPSoft IL можно только копи пастом, есть импорт и экспорт (но формат там не текстовый)
    Dmitriy Murashov
    SPS Software Engineer Automation Engineering RUS

  3. #853

    По умолчанию

    Цитата Сообщение от Sulfur Посмотреть сообщение
    Созданный в 1.6.1 проект без изменений перекомпилирован в 1.6.2, и все нужные файлы перенесены в КДС как положено.
    Что я не так делаю?
    Да, в 1.6.2 не работает обмен.

    Если других дополнений нет, то выложу обновление с таким составом:
    Цитата Сообщение от Hardella 1.7.0
    Исправлено:
    - Восстановлен PRU - host обмен данными (в 1.6.2 обмен был сломан)

    Новые возможности:
    - Получение фактической длительности PRU цикла в online режиме. При включении этой опции в PRU configuration, в программу `MemoryRead` передаётся максимальная длительность работы программы и фактическая длительность PRU цикла. PRU ядро накапливает максимальнюу длительность и сброс происходит в момент очередного чтения данных из PRU.
    - Теперь комментарии можно добавять после точки с запятой, после `IF`, `ELSE`, и т.п.

    Замечание:
    - При открытии проекта, созданного в предыдущих версиях Hardella, запустится "Migration Assistant" и предложит обновить проект (формат хранения комментариев изменился). Достаточно просто пронажимать next.
    Статистика времени выполнения выводится в MemoryRead следующим образом.
    Фактическая длительность PRU цикла. Т.е. время от одной записи выходов до следующей.
    Код:
      maxOutputWriteTimeMicros : REAL; (* макс. длительность цикла за всё время работы ПЛК, мкс *)
      lastOutputWriteTimeMicros : REAL; (* последняя длительность цикла, считанная из PRU, мкс *)
    Например, если указать "min cycle: 1µs", и PRU программа очень простая (всегда укладывается в 1мкс), то OutputWriteTimeMicros будут равны 1.0
    Ну, мы указали, что хотим 1 мкс цикл, его и получили.
    Если же программа заняла дольше, то тут будет фактическое значение.

    Разумеется, второй вопрос "а сколько реально занимает программа, без учёта ожиданий?"
    Для этого выведены переменные про длительность полезного кода (это длительность программы + 2 опроса входов с фильтрацией + приём-передача)
    Код:
      maxCycleTimeMicros : REAL; (* макс. длительность работы PRU программы за всё время работы ПЛК, мкс *)
      lastCycleTimeMicros : REAL; (* последняя длительность работы PRU программы, считанная из PRU, мкс *)

  4. #854
    Пользователь
    Регистрация
    31.07.2013
    Адрес
    Аркаим
    Сообщений
    1,033

    По умолчанию

    Владимир Ситников

    Спасибо! Протестирую и сообщу о результатах.
    Кстати, на следующей неделе предстоит воплощение одного из проектов на реальном железе в реальной установке. Будет использоваться сокращенная версия моего проекта. Будет использоваться только PRU-энкодер с детектором машинного нуля.
    Последний раз редактировалось Sulfur; 20.03.2017 в 08:27.

  5. #855

    По умолчанию

    Цитата Сообщение от Sulfur Посмотреть сообщение
    Спасибо! Протестирую и сообщу о результатах.
    Опубликовал Hardella 1.7.0.
    Можно через автообновление, можно с нуля выкачать.

  6. #856

    По умолчанию

    Владимир, какое минимальное время допустимо между этим

    SteppersConfig_Pru1MemoryTransfer(STEPPER1_PRU1_st epper_enable := FALSE);

    и этим

    SteppersConfig_Pru1MemoryTransfer(STEPPER1_PRU1_st epper_enable := TRUE);

    операторами ?

  7. #857

    По умолчанию

    Цитата Сообщение от Вольд Посмотреть сообщение
    Владимир, какое минимальное время допустимо между этим

    SteppersConfig_Pru1MemoryTransfer(STEPPER1_PRU1_st epper_enable := FALSE);

    и этим

    SteppersConfig_Pru1MemoryTransfer(STEPPER1_PRU1_st epper_enable := TRUE);

    операторами ?
    Примерно 2-3 цикла PRU.

  8. #858

    По умолчанию

    Цитата Сообщение от Владимир Ситников Посмотреть сообщение
    Примерно 2-3 цикла PRU.
    Если цикл PRU 1 мкс, то 2...3 мкс ?

    А обмен между ЦП и PRU постоянно идет ? Когда начинается и когда заканчивается обмен между ЦП и PRU ? Или как прошло это

    SteppersConfig_Pru0Init();
    SteppersConfig_Pru1Init();


    так и пошел обмен ?

    Или надо постоянно делать это иначе обмена не будет?

    SteppersConfig_Pru0MemoryTransfer();
    SteppersConfig_Pru1MemoryTransfer();
    Последний раз редактировалось Вольд; 23.03.2017 в 00:07.

  9. #859

    По умолчанию

    Цитата Сообщение от Вольд Посмотреть сообщение
    Если цикл PRU 1 мкс, то 2...3 мкс ?
    Да.

    Цитата Сообщение от Вольд Посмотреть сообщение
    А обмен между ЦП и PRU постоянно идет ? Когда начинается и когда заканчивается обмен между ЦП и PRU ? Или как прошло это
    PRU программа выполняет следующее:
    Код:
    t0 := засекаем_время();
    WHITE TRUE
        USER_PROGRAM(); (* вызываем программу, указанную в pru configuration *)
    
        REPEAT
            обрабатываем_обмен_данными_с_host();
            читаем_входы();
        UNTIL время < t0 + мин_ц
        END_REPEAT;
    
        t0 := засекаем_время();
        записываем_выходы();
        читаем_входы();
    END_WHILE;
    Иначе говоря, большую часть времени PRU ядро ждёт от КДС программы команд на чтение-запись PRU данных.
    Но эти данные PRU программа сможет использовать только на следующем PRU цикле.

    Возвращаясь к исходному вопросу "когда можно перезапускать stepper". После перевода enable в false нужно выполнять memoryread и ждать когда блок сменит состояние. В целом, за одну-две микросекунды это может и случиться, т.е. можно это выполнять и в рамках одного цикла ПЛК (while stepper.state<>... memory read ...).



    Цитата Сообщение от Вольд Посмотреть сообщение
    SteppersConfig_Pru0Init();
    SteppersConfig_Pru1Init();


    так и пошел обмен ?
    Нет. После Init запускается только "ответная" сторона в PRU. Сами данные идут только по управлению КДС программы.

    Чтобы данные реально ходили нужно вызывать MemoryTransfer или MemoryRead или MemoryWrite.
    При каждом вызове Memory* будет новый обмен.

  10. #860

    По умолчанию

    Цитата Сообщение от Владимир Ситников Посмотреть сообщение
    После перевода enable в false нужно выполнять memoryread и ждать когда блок сменит состояние. В целом, за одну-две микросекунды это может и случиться, т.е. можно это выполнять и в рамках одного цикла ПЛК (while stepper.state<>... memory read ...).
    А можно перевести enable в false и не делать memoryread для анализа состояния блока, а просто подождать немного и далее перевести enable в true ?

Страница 86 из 135 ПерваяПервая ... 3676848586878896 ... ПоследняяПоследняя

Ваши права

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