Сегодня я бы хотел поговорить об организации структур или пользовательских типов данных, или составных типов данных и работы с ними.
У многих есть свои подходы, свои приемы. Что-то я поддерживаю, что-то считаю неправильным, но как по мне это очень плодотворная тема для обсуждения, так что я тут поделюсь кое какими выводами, считай что бест практис(нет)
Разделяйте структуры настроек и логики для объекта.
Не надо всё упаковывать в одну огромную структуру, чтоб потом искать способы работы с этим. Сейчас объясню на примере.

Выше вашему вниманию представлена типичная структура в типичном проекте и вот так делать не надо. Все что относится к таким вещам как настройки, уставки, режимы работ, выносите в отдельную структуру.


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

И мы хотим что-то сделать с этим внутренним полем. Некоторые среды разработки позволяют нам достучаться напрямую к этому полю, вот так делать не надо.
Формируй Output в структуре.
Вот тут стоит вспомнить великое правило.
OUTPUT функционального блока пишутся в одном месте



И будет вам и нам счастье. И чтобы вы понимали что это не моя фантазия, то вот вам немного от статических анализаторов.

Откажись от управления с верхнего уровня без прослойки.
Я понимаю, что очень удобно, в некоторых экосистемах, сразу подцеплять теги и управлять объектом напрямую, сам грешу таким же.
Но надо приучать себя к посреднику. Который бы забирал данные с верхнего уровня(визуализации), обрабатывал их, а уже потом отдавал в модель или дальше по логике.
Тут еще стоит отметить, что проверка получаемых данных должна происходить как на стороне визуализации, так и на стороне ПЛК.
Зачем?
Ну все это требуется, для обмена знаниями, подходами и обычный обмен опытом. Так как в среде АСУТП есть только материалы, как подключиться или как управлять чем-то, что в основном представляет собой пересказ мануала. Тут же я хочу затронуть более абстрактные темы. Так что если есть вопросы, замечания, корректировки, предложения — добро пожаловать.
Ну и по традиции Канал с новостями и не только
