Here's the single biggest "why is this different from my old PLC?" on the S7-1500. The default optimized data block has no byte addresses at all β the compiler reorders your variables for the fastest access and packs the bits. The legacy standard block keeps fixed byte.bit offsets you can address absolutelyβ¦ and wastes memory doing it. Flip between them and watch the layout rearrange.
Both columns declare the same five variables, in the same order. On the left, standard access lays them out in declaration order with strict word-alignment β see the wasted padding bytes. On the right, optimized access reorders them (all the Bools collected into one byte, words aligned naturally) so nothing is wasted and access is fastest. Toggle the switch to compare totals.
The optimized layout is why you can't write %DB20.DBX4.0 on it β there is no fixed bit 4.0, the compiler decides placement and may change it on the next edit. You give up absolute addressing and gain speed, smaller footprint, and the freedom to add variables without shifting anything.
β Stay optimized for almost everything: faster access, no wasted bytes, symbolic-only safety, and add-a-variable-anytime. It's the Siemens default for a reason.
β οΈ Switch to standard only when something genuinely needs absolute addressing β certain legacy comms blocks, byte-oriented data via SLICE/pointers, or porting old code that hard-codes addresses.
Migration trap: convert an old standard DB to optimized and every absolute %DBxx.DBXy.z reference elsewhere β including HMI tags β breaks, because the offsets vanish. Re-point them to symbolic names before you flip the switch.
In an optimized DB, the Offset column is blank/greyed. Why can't you just read the byte address?