Доброго дня! Планируется ли добавлять поддержку типов, определенных в подпунктах пункта 6.4 МЭК 61131-3-2016? Интересуют:
6.4.4 Определенные пользователем типы данных
6.4.4.2 Перечислимый тип данных
6.4.4.6 Структурированный тип данных


Этот интерес возник в ходе чтения вашей документации; заметил что во-первых этого нет, а во-вторых размеры типов указанные в OWENLogic.chm не совпадают с размерами указанными в пп. 6.4.2.1 ГОСТ Р МЭК 61131-3-2016
Тип Bool должен занимать 1 бит, а не 4 байта. Не оправданно расходуется память устройства и сильно разряженные данные с бОльшей вероятностью не окажутся в самом быстром кэше процессора, что также негативно сказывается на быстродействии.


Программируя "сырые" мироконтроллеры, удаётся упаковать в 32х битный int 32 логические переменные и очень даже читабельно к ним обращаться в коде. В языке ST чуть более пёстрый синтаксис, но можно писать столь же эффективный и компактный код, если использовать структуры с битовыми полями и объединения; перечисляемые типы нужны сколько не для эффективности, а для повышения читабельности кода и его надежности.

Вот пример программы:

PHP код:
#include <stdio.h>
#include <inttypes.h>

typedef struct {
    
_Bool S11;
    
_Bool S21;
    
_Bool S31;
    
_Bool S41;
    
_Bool S51;
    
_Bool S61;
    
_Bool S71;
    
_Bool S81;
KeyBits;

typedef struct {
    
union {
        
KeyBits bits;
        
uint8_t data;
    };
MachineInput;

typedef enum uint8_t {
    
ST_ONE,
    
ST_TWO,
    
ST_THREE,
    
ST_FOUR,
    
ST_FIVE,
    
ST_SIZE,
    
ST_SEVEN,
    
last_state
eMachineState;

int main (void) {
    
MachineInput Input;
    
eMachineState State ST_THREE;

    
Input.data 0b10000000// = Rs485.ReadByte(address);
    
Input.bits.S7 1;

    
printf ("sizeof(Input)=%lu sizeof(State)=%lu\n"sizeof(Input), sizeof(State));
    
printf ("Input value = %" PRIu8 "\n"Input.data);
    
printf ("State value = %" PRIu8 "\n"State);

    return 
0;

PHP код:
gcc ./main.-std=c2x -Wall -Wextra -o main && ./main 
sizeof
(Input)=1 sizeof(State)=1
Input value 
192
State value 

Как видите, структура позволяет обращаться в её данным двумя удобными способами: через битовые поля, что удобно в логических выражениях и целиком к блоку данных, что удобно при работе с протоколам обмена.
Как структура для восьми кнопок, так и перечисляемый тип для семи состояний занимают по одному байту.

С учётом необходимости выравнивания по длине процессорного слова в реальных прошивках контроллеров размеры структур всё же подгоняются под длину слова, но для 8 битных МК пойдёт и так; все операции с такими типами данных будут делаться за один машинный такт.

Мне бы очень хотелось используя модуль МВ110-24.32ДН получать от него 4 байта по сети, складывать их в структуру состоящей из объединения 32х логических переменных с одним UDINT и обращаться к битовым полям этой структуры не расходуя лишней памяти. Может быть есть пример, как это сделать также эффективно, как в примере на C, что я привёл выше?