Do you know the correct
value of the number that is coming from the Modicon? Is the correct value actually 45676 (0xB26C)? Is it possible the bytes are reversed, and the
value is 27826 (0x6CB2)?
Because as @5618 notes, there is no way to represent 45676, or any positive integer greater than 32767, in a signed INT on Compactlogix. Period.
The Modbus protocol at its core merely transfers the bits; it is agnostic about whether the 16-bit data quantities it transfers are signed or unsigned, although when it uses 16-bit quantities internally (e.g. PDU addresses), it interprets them internally as unsigned (0-65535).
Is this an existing or new application on the CompactLogix that you are developing or modifying, or are you not able to change or otherwise work with the CompactLogix code?
If the former, using the COP instruction to transfer the bits from the 16-bit signed INT array into a new 16-bit unsigned UINT array (assuming 5380 and not 5370), and then using the UINT array's values where appropriate, would be my first choice.
The second would be using the BTD instruction, as @5618 suggests, to transfer the 16-bits from the Modbus value into the lower half (16-bits), and zeroing out the upper half, of a DINT, as @5618 suggests. Again, that assumes you can change the code on the CompactLogix.
A poor third choice would be to test the INT array element(s) for negative values, and simply replace same with a value of +32767. E.g.
XIC INT_array[123].15 MOV 32767 INT_array[123]
I don't know if that would work for your application, but it would replace a perhaps nonsensical negative and/or error-causing value on the CompactLogix with the upper limit of the INT data type that is as
close as possible to the actual
value from the Modicon, which
might be a good enough poor-man's conversion.
But again, as @5618 wrote, if the data
values in the Modicon UINTs
greater than +32767 are indeed
correct values, then although Modbus transfers those
bits into INTs on the CompactLogix, there is absolutely
no way to represent those UINT
values via those INTs.