PLC-5, SLC-500, and MicroLogix family controllers use a String datatype that is composed of a 16-bit Length value, followed by 41 16-bit integers, each of which holds two 8-bit ASCII characters. This gives you a fixed String datatype payload of 82 characters.
The ControlLogix family uses a different format; the Length is a 32-bit DINT and the data is an array of 8-bit SINT values. The default STRING datatype in ControlLogix is also 82 characters, but you can create user-defined String datatypes that have between 1 and 2048 characters.
These datatypes aren't radically different, and each one fits the underlying operating system of its control platform.
But they're different enough that RA did not build an automatic datatype conversion into the MSG instruction.
The conventional workaround is to use an Integer data array as an intermediary data storage location.
Copy the String datatype in the MicroLogix into an Integer datatype array, then read that integer datatype with the MSG instruction in the CompactLogix. In the CompactLogix, move the first INT[x] element to the .LEN subelement of your String tag, then copy the next several (up to 41) INT[x] elements into the .DATA subelement of your String tag.
In the MicroLogix, you will actually use two instructions; One MOV to put the String.LEN value into the first INT holding register, and then a Copy Word (CPW) to copy the String.Data[0] words into the next (and subsequent) holding registers.
Clear as mud ?
In RSLogix 500, type in these two rungs:
MOV ST12:0 LEN N10:0 [Enter]
CPW ST12:0.DATA[0] N10:1 41 [Enter]
That's going to put your String data into N10:0 through N10:41.
Make that data table (of course, choose your own data file numbers if you wish) the source for the MSG instruction in the CompactLogix, then we'll take on the data handling on the CompactLogix end.