this is not something secret, in fact it is rather well documented. just check key manuals (system variables and programming manual for system integrators).
you need jumpers for things that must come through input and you have no option but to drive that input yourself. since inputs are read only, you cannot drive them directly. solution is to connect inputs to outputs (outputs you can control from your program).
example of signals that must be passed through such jumpers are $EXT_START, $DRIVES_ON and $CONF_MESS
you cannot have those signals simply mapped to $IN[1025] because they are edge senitive and MUST be able to change state.
other signals may be "massaged" into submission through some workarounds. for example:
$DRIVES_OFF can be fixed to $IN[1025]
$MOVE_ENABLE can also be fixed to $IN[1025] (this requires modifying $CHCK_MOVENA) etc.
as already mentioned, CWRITE command runs slowly and asynchronously. this means entire SPS may run multiple times before one CWRITE command is processed. this can cause problems specially on fast controllers (KRC4). therefore proper way is to condition your code so that each of those commands is only called once (give it a chance to complete what it is doing).