As I mentioned in a thread on CN, I image 5-10 objects per evening … as each object comes into the ideal “cone” for imaging (<15deg from zenith) the scope is slewed to it, I take images and then I move to the next object that enters the “cone”. This means two things for me: first, that the time spent imaging an object is relatively short, usually less than 90min, and second that if I spend too long on an individual object then I will miss another object being in the “cone”.
I currently use DragScript to chain together slew/ focus/ guide/ expose operations into blocks, with each block being similar to the sample “Multi Sequence Robot” DragScript with a difference being the sequence start time is set to an absolute time rather than an interval. There’s a problem with that that I face though, in that there are multiple actions outside of the Sequence that will still affect my being able to follow my “hard deadline” of how long to work on one object before I must abandon it and move on to the next object.
My current very crude method is to keep track of how long I have for a particular object, say 7000sec and create a block for that object. At the start of that block an external program is called to which I write the start time (0:10:00) and the time for the block to execute (7000 sec) as well as an array of “milestone” names and expected seconds … “Slew:10, Focus:60, Tracking:60, Expose:6000, Maximum:7000”. At the end of each “milestone” event like a slew I call the external program with the milestone name, and the external program returns “go” or “no-go” depending on how much time is left to complete the rest of the tasks in the maximum time.
So, following this example, at the end of the “slew” action after 30sec of runtime after it would call the program and the program would return “go” as the time remaining (7000 - 30) is more than the total still remaining (60 + 60 + 6000). After the “focus” milestone completed after 200sec of runtime the program would return “go” as time remaining is (7000 - 200) and the task remaining are (60 + 6000) seconds, less than the maximum time remaining.
However, let’s assume that it takes a really long time to focus, 1200 seconds. Now when I make the call to the program it compares the time remaining of (7000 - 30 - 1200) against the task remaining time of (60 + 6000) and finds there isn’t enough time to complete the milestones remaining … and it returns “no-go” to the DragScript. The block then terminates and I wait for the next object sequence to start, ensuring that a delay in a part of one object doesn’t goof up the other objects for that evening
As a request, I would like to have the ability to assign a “watchdog” time to a block, which would prevent the action(s) in that block from occurring if there was no expectation that the action(s) could complete within that timeframe. You already keep statistics on individual actions, so you “know” how long it will take to complete various things as the DragScript executes … if you treat each action as a “milestone” and add all of the incomplete action times together you can do roughly what I’m doing, estimating if there is enough time to complete an action(s) within the time remaining. The watchdog value could be listed in the Block configuration dialog and be in seconds …
As an additional nicety and following from my logging request one could specify which value to use for the time check: low, high or average … that way a user could be aggressive (maybe it completes in time), conservative (never let it go over time) or in the middle …
As always, great stuff and thanks!