CRC order is right, Modbus sends the low byte first and 0x71 0xCB is correct for that frame. The problem is print.
Serial.print(0x01) sends the text „1“, the byte 0x31. Serial.print(0x71) sends „113“, three bytes. So the meter receives something like „1400021137…“ in ASCII, which isn’t a Modbus frame at all, and it stays quiet. Serial.write sends the raw byte, which is what Modbus RTU needs.
Second problem: you drop DE the moment the loop ends, but at 2400 baud the bytes are still going out of the UART for another ~30 ms. Switching to receive cuts the end of the frame. Wait for the transmit to finish:
digitalWrite(2, HIGH);
Serial.write(frame, sizeof frame);
Serial.flush(); // returns when the last byte has left the UART
digitalWrite(2, LOW);
The answer is 9 bytes: address, 0x04, byte count 0x04, four data bytes, CRC. The SDM120 voltage is a 32-bit float, big-endian, high word first:
union { uint32_t u; float f; } v;
v.u = ((uint32_t)r[3] << 24) | ((uint32_t)r[4] << 16) | (r[5] << 8) | r[6];
// v.f is the voltage
Since the Nano’s only hardware UART is now on the RS485 side, debug through a SoftwareSerial pin or a blink, not the USB serial monitor. When you send it on, send {"voltage": 231.4} as a number so the chart works.

