It is posible to do this with a PLC but to do it well is not a trivial task and the PLC will never match the performance/response of a dedicated motion controller.
To do it very crudely you could make it proprtional only:
Error = set position - actual position
Intermediate result = Error * gain
Valve command = intermediate result clamped to limits
By varying the gain and the clamps you alter the proportional band and the maximum velocity. This is a very crude method and will never reach the actual setpoint position. This may be all you require for your application.
If you require anything more sophisticated then I suggest that you speak to Delta Motion. If you still want to do it in a PLC then here are few things to think about:
Make a virtual master to generate a position setpoint; this must ramp up and down producing a position setpoint and a velocity demand.
The servo valve will need to be profiled in the software (non-linear) so that the velocity demand can be used to generate a valve command that generates approximately the correct velocity of the axis.
Make a PID function based on the demand position from the virtual master and the actual position from your cylinder then sum the PID output with the predicted valve command to correct the position error.
I should also add that you will need a fast PLC and fast I/O with response times < 5mS to make a decent job of it.
Good luck,
Nick