Reading MKR1010 with RS485 shield in big-endian ABCD

I am attempting to use the Arduino Modbus RTU example to read a Modbus power monitor. The manual states the output as:

"Float (4 byte) & UINT32 (4 byte)
Big-Endian
Float unsigned integer numbers are read as big-endian, please refer to below:
Received value (hex): A B C D
This number is then sequenced as big-endian"

It seems that default format when I read the Modbus register is middle-endian and the output is 17008 where the desired result is 60. Can I instruct the Arduino to read the register in big-endian?

There's nothing called middle-endian. Modbus doesn't transfer bytes but words (16 bit integers). The words are always transferred in big-endian (network order). There's no standard of transferring other values but your device seems to at least document it's transfer format.

The Arduino reads the values correctly, it's your sketch doing the interpretation of the word values into floats or longs. As you failed to post your code we cannot help. We don't even know which Modbus library you used.

The code is below. This outputs 17008 when it should output 60. In HEX it output is 4270 which translates to 17008 in DEC. The output I need is 0x42700000 because Float 0x42700000 = 60, I think this is HEX format but I'm not sure what to call it. Float 0x42700000 = 60. I was able to add the 0x and the trailing 0000 with a string command but that did not seam like the correct method.

#include <ArduinoRS485.h> // ArduinoModbus depends on the ArduinoRS485 library
#include <ArduinoModbus.h>


void setup() {
  Serial.begin(9600);
  while (!Serial);


  // start the Modbus RTU client
  if (!ModbusRTUClient.begin(19200)) {
    Serial.println("Failed to start Modbus RTU Client!");
    while (1);
  }
}

void loop() {

      (!ModbusRTUClient.requestFrom(9, HOLDING_REGISTERS, 0x7e0, 1));
      Serial.println(ModbusRTUClient.read());
      delay(5000); 
 }

That code reads one register value (uint16_t) and prints it. This cannot be a float. Post the manual of your device so we might be able to tell you what Modbus commands you actually have to send.

BTW: 17008 = 0x4270, so probably you're reading the correct value but only half of it. If we can see the manual we can tell.

Try to replace loop() by:

void loop() {

      ModbusRTUClient.requestFrom(9, HOLDING_REGISTERS, 0x7e0, 2);
      uint32_t i = ModbusRTUClient.read();
      i = (i << 16) | ModbusRTUClient.read();
      float f = *((float *) &i);
      Serial.println(f);
      delay(5000); 
 }