Программирование ПЛК на Codesys. Bit c Bool.
@asutp_bestСегодня я поставил для себя точку в свое сравнении переменной типа Bit с типoм BOOL. Так что я расскажу что сколько занимает место в структурах и расскажу как, по моему мнению, лучше мапить данные в среде Codesys.
Размеры Bit и BoolBit и Bool типы переменных, которые хранят бинарное значение. И дальше у меня была ловушка, которая образовалась после продолжительного программирования контроллеров Siemens. И так, в Siemens BOOL имел доступ как Byte.Bit, что мне казалось логичным. Что мы выделяем целый байт, а потом с него забираем.
Теперь как дела обстоят в Codesys. При объявлении в структуре одной переменной типа Bit или типа Bool структура будет занимать 1 байт.

Далее я объявил по 9 переменных. В моем мозгу данная структура должна занимать была 2 байта в обоих вариантах.

Но увы и ах. Codesys действительно отводит 1 байт под переменную BOOL.
Исходя из этого можно сделать вывод, что использование BOOL переменной с точки зрения памяти не всегда является разумным.
Union с Bit и BoolТеперь как же нам красиво отмапить Byte в BOOL/BIT. И тут мое второе заблуждение. Я думал что массивы BOOL в Union c Byte будут прекрасно мапиться.

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

Размер данного объединения составлял 8 байт, но он прекрасно перекинул значения из байта в bool

Но вот при значении 3 уже так радужно не было.

Но вот доступ по указателю дает нам понять, что тройку мы туда записали.
Так что если вам надо куда-то сныкать какие-то данные, то… Я вам ничего не говорил.
Как же смапить байт в bit
Так как массив из bit создать нельзя, то нам потребуется где то создать структуру из 8 bit — это полноценный Byte и уже вместе закидывать их в объединение.

Многие могут спросить: «Ты что не знал?». Я отвечу, что нет. Я читал что Bool занимает байт, а для красивого маппинга надо сделать структуру из Bit, но я не проверял, так как в моей практике до момента сегодня не было задач с подобным маппингом.
Теперь по выводам. Будем ли менять все BOOL на BIT? И нет и да. Смотрите сами где вам удобнее, а где не особо. В любом случае я не могу представить все варианты использования, но в некоторых моментах я готов пожертвовать лишними байтами ради удобства массивов. Но это касается лишь затрат памяти, а вот как спрофилировать затраты по времени — задача. Буду рад если предложите ответ.
Источник: https://blog.engcore.ru/2022/03/21/программирование-плк-на-codesys-bit-c-bool/