Through exec() calls a state machine can call any program or script
written in any language on your system. You find that too low level?!
Could you explain your definition of high level in that context?
end_stations_protocol:
align sample with beam
detector_acquire_image
move_grid
rotate_sample
detector_acquire_image
[...]
each command is drag-and-dropped by the experimenter (not a programmer)
sequence can be changed by the experimenter function of what he wants to do
He should be able to work independently of programmers
[...]
Of course, each of those states can be further broken down and later refined
(I can easily see a state machine with 500+ states)
interpreted languages are better, no compilation needed
+ you can program a sequence on the fly (no downtime required)