labscript-suite / labscript

The 𝗹𝗮𝗯𝘀𝗰𝗿𝗶𝗽𝘁 library provides a translation from expressive Python code to low-level hardware instructions.
http://labscriptsuite.org
BSD 2-Clause "Simplified" License
9 stars 51 forks source link

Ability to define duration of a constant instruction #54

Open philipstarkey opened 5 years ago

philipstarkey commented 5 years ago

Original report (archived issue) by Chris Billington (Bitbucket: cbillington, GitHub: chrisjbillington).


An issue that wasted a lot of time for someone here is that they intended to set an output to a value for some amount of time, but it turned out that a function being called later in the script was setting the same output to some other value "in advance", something like:

def stage_1(t, duration):
    output.constant(t, value)
    return duration

def stage_2(t, duration):
    output.constant(t - offset, some_other_value)
    return duration

start()
t = 0
t += stage_1(t, duration_1)
t += stage_2(t, duration_2)
stop(t)

Ideally one would be able to specify a duration to the .constant() method in stage_1() so that any instructions to the same output within some duration will result in a compile time error.

Also, a ramp instruction should be able to have a duration provided that exceeds the actual ramping duration, so that the final value being held as a constant can also be guaranteed by the compiler not be be cut short of some desired length of time.

Not sure how easy this will be to add to labscript as is, so whilst anyone should feel free to hack it in if they want, I'll try to include it in labscript 3.

philipstarkey commented 5 years ago

Original comment by Chris Billington (Bitbucket: cbillington, GitHub: chrisjbillington).


Ian suggest a keyword argument block_until to instructions, which seems like a good name to disambiguate from other instruction time intervals like the duration of the ramp. block_until sounds like it takes an absolute time, so the argument should be an absolute time, or named block_for or similar if its a duration.