UDT's cannot and do not store single bools ever. Any time you add a BOOL into a UDT, it creates a phantom SINT value.
Export the program to an L5K file, and you can see where these come from. They also will appear in an L5X file, but the XML is a royal pain to deal with compared to the L5K version.
A typical member of a UDT that has bools is defined as follows for me:
Code:
SINT ZZZZZZZZZZCmd_Word_80 (Hidden := 1);
BIT Drv_Enab ZZZZZZZZZZCmd_Word_80 : 0 (Description := "True = Drive Enabled");
BIT Rem_Res ZZZZZZZZZZCmd_Word_80 : 1 (Description := "True = Trip Reset");
BIT Direction ZZZZZZZZZZCmd_Word_80 : 2 (Description := "True = Reverse");
BIT Jog ZZZZZZZZZZCmd_Word_80 : 3 (Description := "True = Drive Jog");
BIT Run ZZZZZZZZZZCmd_Word_80 : 4 (Description := "True = Drive Run");
BIT Torq_Mode ZZZZZZZZZZCmd_Word_80 : 5 (Description := "True = Torque demand Isolate");
BIT Bit_06 ZZZZZZZZZZCmd_Word_80 : 6;
BIT Bit_07 ZZZZZZZZZZCmd_Word_80 : 7;
Note that the hidden word (SINT ZZZZZZZZZZCmd_Word_80) doesn't show up at all in tag listings, as it has the 'Hidden' state set to 'true'.
In the XML Export, each member can have an attribute for hidden as well.
If you play with the UDT in a text editor, especially the XML version, you have a lot of control over it. I do that a lot in order to have UDT members that act like a union (in C). Define a name, instead of 'SINT ZZZZZZZZZZCmd_Word_80' to start. I usually use 'Data', or 'Status' or something that makes sense, make it non-hidden, and then define the bits up individually after.
That way I can refer either to the whole word at a time (DINT's work as well), or individual bits. For things like sequencers, that is incredibly useful. The drawback, is that once you play with the definition in a text editor, you can no longer edit it inside of Logix5000.