So we agree that FM1 has a known, physical start memory location and size, just like a DINT would. However, because of the UDT definition the compiler also knows that FM1.Rate is a REAL starting 16 bytes after the start address of FM1 (REAL and 16 bytes are arbitrary values used for illustration). FM1.Rate occupies a fixed, known memory address. The compiler knows how to find it. Why can't it be aliased to, since the memory definitions are determined at compile time. It's not like the development system can't determine the data type needed for the alias; it's part of the UDT definition.
It can be aliased to. FM1.Rate is aliased by Product_1_Flow.Rate. Even the element .Rate inside of FM1 can be aliased. I could open up the tag editor, click on FM1, expand it, right click on FM1.Rate, and create an Alias named SyrupGPM that points directly to FM1.Rate. Now FM1.Rate, Product_1_Flow.Rate, and SyrupGPM all name the exact same location in memory.
What I cannot do is embed an Alias inside of the UDT definition.
I cannot define the UDT Flow Meter to contain
Status - DINT
Rate - Real
Alarms - DINT
Input - Alias
where I'm trying to make the element .Input an alias to something that is outside of the UDT, and then have the outside data just show up in my tag by magic.
Look at it this way.
A developer wants to build a tract of spec homes. Each home will have the same floor plan. So he has an architect draw up a plan. The plan specifies a living room, a kitchen, two bedrooms, and a bathroom. The house plan compares to a UDT.
Once the developer has the plans, he secures funds and now goes out and finds a piece of property to build the tract homes on. He finds a stretch of empty land, and build a street called Maple street. Then the developer builds a house at address #1 Maple Street. This is like creating a tag. Now not only is there a house at #1 Maple Street, there is a living room, a kitchen, two bedrooms, and a bathroom. Along comes Bob and buys the house. Now we can call the house Bob's house. This is like an alias. Bob's house has Bob's living room, Bob's kitchen, Bob's bedrooms, and Bob's bathroom. Bob's kitchen is the exact same kitchen as the one at #1 Maple Street. It is not a different kitchen that magically mirrors the kitchen at #1 maple street, it is the same kitchen, we just call it Bob's kitchen because it's a more meaningful name. Meanwhile, Bob and Bob's closes buddies call it the "mess hall" and they all know where it is and they all know that its Bob's, but don't bother to refer to it as Bob's (Kinda like the SyrupGPM alias mentioned above)
But back when the architect drew up the plan, he had absolutely no idea where the house would be built, and he had no idea that it would one day be Bob's house. So he couldn't write Bob's kitchen on the plan, and he couldn't write Bob's bathroom on the plan. So the Alias doesn't exist on the house plan.
Lets carry it one step farther. The builder also builds the same plan house at #2 Maple Street (a tag is defined). Then Jim buys the house (Alias). Now there are two houses that follow the plan (UDT). So while there is a place called #1 Maple Street's kitchen, also known as Bob's kitchen, there is also a place called #2 Maple Street's kitchen, also known as Jim's kitchen. But the plan itself only tell us what the kitchen is, not where it is.
Now in the PLC it gets even more complex, if it were possible to put an alias in the UDT, then the Alias points to a piece of memory that is outside of the UDT. So back to our house plan. lets say we want one of the bedrooms doors to lead to a bedroom in a different city. Now that doesn't make sense at all. But if by some trick of magic, it were possible, how exactly is the architect supposed to know what bedroom in what city so he can write it on the plan, especially since the house hasn't even been built yet, nor does he even know where the house is going to be, much less the magic bedroom. He also doesn't know if the magic bedroom is a tiny 80 sq ft windowless room with a dim light bulb dangling from a cord, or if its a 800 sq. ft. suite with a crystal chandellier, so how does he show it on the plan (what data type is the alias when an alias doesn't even have an inherent data type)?
Now AB could create instructions to fetch the exact memory address of a tag at run time and a data type that could store that memory address in the UDT, and then resolve its data type and location every time it was referenced, but that carries a lot more overhead than just MOVing or COPying the data to the UDT, and you would still have to write code to make it happen, so it doesn't save you anything at all. So it is possible that they could allow it, it just doesn't make any sense to do it.