Another day lost in the lab because of stupid problems with the sequencer. This is driving me mad ! So I am starting to note down a few ideas I have to design proper sequencer control program. These are mostly notes to myself, but if I put them on my website/blog I wont loose them.
Event timing can be specified relative or absolute. Using only absolute fails very quickly. Using only relative (to the last event) is OK, but is quite limiting.
I think the best way to organise events is to put them in a tree, each beeing specified relatively to there father node. The leafs of the tree could be the actual channel changes.
Maybe a Gantt chart would be a great way of representing this, but there is no common widget for a Gantt chart, where as Python has a nice tree widget through pyface.
What if I have a shutter, and I cannot remembers whether it is NO or NC ? And it actually has a opening and a closing delay ? When I am coding a sequence I do not want to have to worry about this. I want to be able to say: "I want the shutter close at this precise instant". The code in charge of processing the sequence should be able to translate this into the actual parameters sent to the shutter. This means each channel should take have a function that has a prototype looking like this:
(experimental_value, experimental_time) = translate(old_value, new_value, time)
The reason why this function needs to take the old_value and the new_value is that it can do some magic taking in account the value of the change (for instance compensating for a rise time larger than a fall time).
For instance allow for "stop points" to pause the sequencer at some point of the sequence. This allows to check its state, channel by channel.