One inconsistency I see is this:
Function code 0x03 and 0x04 are both shown as “read holding registers.”
But it should read like this, i.e. function code 0x04 reads the input registers