PDA

Просмотр полной версии : Основная программа на ST



igorlisin
03.02.2026, 10:59
Здравствуйте. Можете ли Вы (разработчики) реализовать точку входа в программу на языке ST как функцию или функциональный блок ST. У меня большая часть программы написана на языке ST, очень неудобно постоянно создавать/обновлять связи между функциональными блоками при обновлении функциональных блоков. Так же при реализации такого подхода будет возможность точнее контролировать последовательность вызова функциональных блоков и их периодичность (например, можно написать менеджер, который будет вызывать функциональные блоки не каждый цикл, а реже тем самым экономя процессорное время снижает время цикла).

kondor3000
03.02.2026, 12:12
Здравствуйте. Можете ли Вы (разработчики) реализовать точку входа в программу на языке ST как функцию или функциональный блок ST. У меня большая часть программы написана на языке ST, очень неудобно постоянно создавать/обновлять связи между функциональными блоками при обновлении функциональных блоков. Так же при реализации такого подхода будет возможность точнее контролировать последовательность вызова функциональных блоков и их периодичность (например, можно написать менеджер, который будет вызывать функциональные блоки не каждый цикл, а реже тем самым экономя процессорное время снижает время цикла).

1) При изменении входов-выходов ФБ, достаточно обновить ФБ, а связи сами не восстанавливаются даже в Codesys. Как вы себе это представляете?
2) Никакой менеджер не нужен, если надо исключить ФБ из работы, введите в ФБ включение по Enable и код не будет исполняться. Код надо оптимизировать.
Кроме того если делать ФБ в разумных пределах (не 100500 блоков), то и экономить ничего не придётся. Иначе вам нужен ПЛК.

EFrol
03.02.2026, 12:15
Ещё раз и очень медленно.
Что Вам мешает написать всю программу в одном ФБ и просто вставить в холст?

igorlisin
03.02.2026, 17:41
1) При изменении входов-выходов ФБ, достаточно обновить ФБ, а связи сами не восстанавливаются даже в Codesys. Как вы себе это представляете?
2) Никакой менеджер не нужен, если надо исключить ФБ из работы, введите в ФБ включение по Enable и код не будет исполняться. Код надо оптимизировать.
Кроме того если делать ФБ в разумных пределах (не 100500 блоков), то и экономить ничего не придётся. Иначе вам нужен ПЛК.

1. Я себе это никак не представляю, я этого и не писал
2. Какая логика будет включать bEnable
3. С тем, что мне нужно было выбирать ПЛК на не умное реле, я согласен

igorlisin
03.02.2026, 17:41
Ещё раз и очень медленно.
Что Вам мешает написать всю программу в одном ФБ и просто вставить в холст?

Мне мешает необходимость обновления связей входов и выходов функционального блока с переменными в основной части программы.

EFrol
03.02.2026, 18:14
Мне мешает необходимость обновления связей входов и выходов функционального блока с переменными в основной части программы.

Понятно. Я к этому уже привык. Все сетевые и энергонезависимые да - приходится потом подгонять.

Cs-Cs
03.02.2026, 18:43
Сожалею, но ПР - это НЕ ПЛК.
И тут есть ограничения:
* Только FBD
* ST только в макросах, так как перевод всего OWL на ST тянет за собой такие проблемы:
-- Как передавать в ST глобальные переменные и переменные IO
-- Как и где расположить основной корень программы так, чтобы удовлетворить FBD и ST сразу. Это НЕ должно выглядеть как разные типы проектов (условно, в одном типе проекта - поле для рисования, а в другом - сразу текст.
* Контроль порядка выполнения блоков специально НЕ сделан, чтобы не связываться с дурью типа контроллеров Segnetics, где внезапно от того, как расположены блоки на рисунке, скрыто зависит порядок их выполнения, и всех путает
* Контроль работы всей программы делается двумя способами:
-- Взять значение из предыдущего цикла (специальный элемент схемы)
-- Записать значение в конце цикла (свойство переменной)
Это более удобно, и я за это памятник поставил бы.
Так как это позволяет рисовать нагляно схемы и не перетряхивать весь порядок выполнения блоков (если бы он был), когда в середину последовательности надо вставить ещё блоков.
* Enable (EN) у базовых блоков НЕ поддерживается, и для него (если надо) нужно использовать SEL или писать свои блоки