Just curious why you want to do this?
Why not control the engines using the PLC language? By using a C# app you are risking that the engine ends up in a bad state. PCs like to shut down and drop communication as you may know. This could do something such as leave the engine running dry or even worse ramp it up.
I have done similar things in the past and it is really best to have the PLC have base logic, for state control. Then if you are not liking the UI or want to simply work from a standard PC (not a Windows CE or something) you communicate via TCP/IP (if possible).
If you still need to I am guessing you will need to use a serial communication port to connect to the Modbus. You will need to look at the protocols of how to do this.
This[
^] should get you started. Again, I would recomend not doing it though for state control reasons. PLCs are more robust and should have full control over the state. External apps should merely 'request' state change.