Maybe I'm missing something, but in the DL series, if you wanted to read a Vmem location, you found the address, calculated the offset from the beginning of the address block, converted number formats, and send a modbus read. There is no mapping required.
What I understood from the previous comment (and what makes sense, give the editable memory blocks and references), is that you have to explicitly map address locations to exposed modbus addresses. Is this correct?
In DL, Modbus was mapped through the entire internal memory, and yes, you had to do some math to get what you wanted, but you could directly access everything in the controller.
In Do-more, any Modbus server/slave references the Modbus Mxx memory types, and only them. You can directly reference Mxx blocks from your program, so copying is only required if you don't want to use the Mxx locations directly in your program. If you do choose to copy, look at the PUBLISH and SUBSCRIBE instructions. They are designed to do exactly that, while performing any data conversions that might be required.
So why did we do it that way? Several reasons:
1) Modbus can't realistically map to everything in a Do-more controller, and since Do-more is dynamic, the mapping DL style would be a mess.
2) Modbus is not secure, so giving it direct access to everything in your controller is unwise (trust me, we've dealt with the Department of Homeland Security on this issue).
3) If I want to access Modbus Holding Register 187, it doesn't get any easier than MHR187. Whereas in DL, MHR187 is likely at V3721 or some other random octal numbered location.