Hello,
I'll be glad to help you. I'm proposing a Winforms .NET 4.5.2 application and also a device simulator with FC1..6,15,16 and 23 (TCP, UDP or COM); the device simulator could be a real help in case you don't have a Modbus device at hand to test the application.
Regarding your specs, I will note that you cannot write into Discrete Inputs or into Input Registers, but only read, because I'm sure you know that they are read only.
Also, regarding your request related to a function (F(x)) associated with a register - I would use a native .NET math expression evaluator, but it lacks the ^ operator (raise to power; in other words you could have an expression containing + , - , / , * , sqrt , ( ) , mod and %; if you need something more complex than that, you have to specify.
Your specs are missing an important thing: Modbus specification doesn't define exactly how the data is stored in the registers, therefore some manufacturers implemented Modbus in their equipment to store and transmit the higher byte first followed by the lower byte, others store and transmit the lower byte first. If you have to obtain a 32bit integer, lets say, you have to specify the byte order. Please, clarify this aspect.
I'm thinking of using a dataset with read/write to xml as storage, instead of using a fancy embedded database.
Regards,
Dragos