FC=03: Modbus Master reads analog output holding registers (4xxxx) from the slave
FC=04: Modbus Master reads analog input registers (3xxxx) from the slave
FC=16: Modbus Master writes analog output holding registers (4xxxx) to the slave
I was caught out because I created a MODBUS address list with both 3xxxx and 4xxxx register addresses, to utilize FC4 and FC3 respectively. But I was asked to change the 3xxxx address to 4xxxx addresses to conform with the way it was done on a previous project.
I came across this old article http://control.com/thread/1026208903
Extract: "Unless you're creating a Master to poll unknown 3rd party products and have to support function 4, the 3xxxx "Input Status registers" are obsolete. Some important embedded systems 'CANNOT' issue the function 4 command required to read them."
Is it true? Why would anyone consider the FC4/3xxxx combination obsolete, what is the argument for preferring the FC3/4xxxx combination?
Yes, it's true. As the previously cited thread relates, some Master/clients don't support Function Code 04 at the 3xxxxx address range. No FC 04 makes it difficult to get the 3xxxxx data values, for those who use those master/clients.
I guess the argument for dropping FC 04 is that it's just a matter of mapping the raw inputs to 4xxxxx, and designating them read-only.
Given the low cost of memory and the move to 6 digit register addressing, the 65535 available registers for 4xxxxx is sufficiently large enough to cover both the number of raw input registers and all those considered to be a Holding register value.