Instead of using R as your setpoint, use casts of Modbus 16 bit Holding Register block (MHR). Two gotchas in Do-more is that REAL casts of a memory location must be aligned on DWORD boundaries (so even MHR addresses), and the 2nd gotcha is there is no Modbus address 0 (everything starts at offset 1 with Modbus, e.g. Modbus Holding Register 40001 maps to MHR1, so you can't use MHR0, but you can use MHR2 or MHR10 for the cast).
To help out, let's use Nicknames. Instead of assigning the Nickname MySetpoint to R0, assign it to MHR10:RD (the : is a "cast operator"), which means look at Holding Register 40010 and 40011 (MHR10 and MHR11) as a DWORD REAL.
To learn about casts, there's a video that helps with that:
https://www.youtube.com/watch?v=BvTuz6H3sD4The easiest way to assign a nickname to a cast is from within the Doc Editor (Ctrl+D), hit the
Add button and enter
MHR10:RD in the Element field (see screen shot).
Then just use and enter
MySetpoint in your logic, data view, trend view, everywhere (or enter MHR10:RD). The Auto-Complete should make entering the Nickname easy.
The behavior for the relay is simpler, just use MC (Modbus Coil) instead of a C bit for everything that is read/write via Modbus. No casts needed for bit memory (bit is a bit).
The purpose of these reserved memory areas is to protect the memory locations that are NOT accessible via Modbus. In a 260, ANYTHING can write to I/O since EVERYTHING is mapped to Modbus memory (you just need that spreadsheet). In Do-more, ONLY put the Modbus accessible data in your MHR, MIR, MC, MI data blocks. Nothing else is accessible via Modbus (not X, not Y).
There are similar blocks for legacy DirectLOGIC data types: DLX, DLY, DLC, DLV that are octal. So a 260 could read/write using RX/WX to Do-more to those memory blocks. There is also DLRX, DLWX instructions for Do-more program performing the legacy DL protocol to those legacy PLCs. Similar reasoning for the DL blocks as for the Modbus blocks.