I am developing a GUI-based client for ARTIQ which interfaces with artiq_master by programmatically writing experiment scripts into the repository and adding them to the schedule using sipyco. For simplicity, when programming a DAC ramp I end up outputting long lists of write_dac instructions instead of using for loops. However, there are two delays that I didn't expect to encounter:
1) First, 10s elapse before the kernel starts executing (i.e. before the "Kernel started" appears on the log). Am I reaching a limit with the size of the script? I tested this with the same waveform but using for loops instead of long lists and I don't get this delay.

2) The second delay I find happens at some point in the middle of the experiment script, where nothing special seems to be happening. The kernel waits until the slack is reduced as if self.core.wait_until_mu(now_mu()) was being called. This happens between printing "Before" and "After". What triggers this wait?

Thanks for any guidance.

Apologies for the long code. It's the only way I could reproduce the issues.

from artiq.experiment import EnvExperiment,kernel,ms
class PyPlayerExperimentList(EnvExperiment):
    def build(self):
        self.setattr_device('core')
        self.setattr_device('zotino0')

    @kernel
    def run(self):
        self.core.reset()
        delay(10000*ms)
        print("Kernel started",self.core.mu_to_seconds(now_mu() - self.core.get_rtio_counter_mu()))
        self.zotino0.init(blind = True)
        print("Init Finished",self.core.mu_to_seconds(now_mu() - self.core.get_rtio_counter_mu()))
        print("Start loading data")
        delay(10*ms)
        print("Starting ramp: ",self.core.mu_to_seconds(now_mu() - self.core.get_rtio_counter_mu()))
        self.zotino0.write_dac(0, 0.000000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 0.016667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 0.033333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 0.050000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 0.066667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 0.083333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 0.100000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 0.116667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 0.133333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 0.150000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 0.166667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 0.183333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 0.200000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 0.216667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 0.233333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 0.250000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 0.266667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 0.283333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 0.300000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 0.316667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 0.333333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 0.350000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 0.366667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 0.383333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 0.400000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 0.416667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 0.433333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 0.450000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 0.466667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 0.483333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 0.500000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 0.516667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 0.533333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 0.550000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 0.566667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 0.583333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 0.600000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 0.616667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 0.633333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 0.650000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 0.666667)
        self.zotino0.load()
        delay(ms)
        print("Before: ",self.core.mu_to_seconds(now_mu() - self.core.get_rtio_counter_mu()))
        self.zotino0.write_dac(0, 0.683333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 0.700000)
        self.zotino0.load()
        delay(ms)
        print("After: ",self.core.mu_to_seconds(now_mu() - self.core.get_rtio_counter_mu()))
        self.zotino0.write_dac(0, 0.716667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 0.733333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 0.750000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 0.766667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 0.783333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 0.800000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 0.816667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 0.833333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 0.850000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 0.866667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 0.883333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 0.900000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 0.916667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 0.933333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 0.950000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 0.966667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 0.983333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 1.000000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 1.016667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 1.033333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 1.050000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 1.066667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 1.083333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 1.100000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 1.116667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 1.133333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 1.150000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 1.166667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 1.183333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 1.200000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 1.216667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 1.233333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 1.250000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 1.266667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 1.283333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 1.300000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 1.316667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 1.333333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 1.350000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 1.366667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 1.383333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 1.400000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 1.416667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 1.433333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 1.450000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 1.466667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 1.483333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 1.500000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 1.516667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 1.533333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 1.550000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 1.566667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 1.583333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 1.600000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 1.616667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 1.633333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 1.650000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 1.666667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 1.683333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 1.700000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 1.716667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 1.733333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 1.750000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 1.766667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 1.783333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 1.800000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 1.816667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 1.833333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 1.850000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 1.866667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 1.883333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 1.900000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 1.916667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 1.933333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 1.950000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 1.966667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 1.983333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 2.000000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 2.016667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 2.033333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 2.050000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 2.066667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 2.083333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 2.100000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 2.116667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 2.133333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 2.150000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 2.166667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 2.183333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 2.200000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 2.216667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 2.233333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 2.250000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 2.266667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 2.283333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 2.300000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 2.316667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 2.333333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 2.350000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 2.366667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 2.383333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 2.400000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 2.416667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 2.433333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 2.450000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 2.466667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 2.483333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 2.500000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 2.516667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 2.533333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 2.550000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 2.566667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 2.583333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 2.600000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 2.616667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 2.633333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 2.650000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 2.666667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 2.683333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 2.700000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 2.716667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 2.733333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 2.750000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 2.766667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 2.783333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 2.800000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 2.816667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 2.833333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 2.850000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 2.866667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 2.883333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 2.900000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 2.916667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 2.933333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 2.950000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 2.966667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 2.983333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 3.000000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 3.016667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 3.033333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 3.050000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 3.066667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 3.083333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 3.100000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 3.116667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 3.133333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 3.150000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 3.166667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 3.183333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 3.200000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 3.216667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 3.233333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 3.250000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 3.266667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 3.283333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 3.300000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 3.316667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 3.333333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 3.350000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 3.366667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 3.383333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 3.400000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 3.416667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 3.433333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 3.450000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 3.466667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 3.483333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 3.500000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 3.516667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 3.533333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 3.550000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 3.566667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 3.583333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 3.600000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 3.616667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 3.633333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 3.650000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 3.666667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 3.683333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 3.700000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 3.716667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 3.733333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 3.750000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 3.766667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 3.783333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 3.800000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 3.816667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 3.833333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 3.850000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 3.866667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 3.883333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 3.900000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 3.916667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 3.933333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 3.950000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 3.966667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 3.983333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 4.000000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 4.016667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 4.033333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 4.050000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 4.066667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 4.083333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 4.100000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 4.116667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 4.133333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 4.150000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 4.166667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 4.183333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 4.200000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 4.216667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 4.233333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 4.250000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 4.266667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 4.283333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 4.300000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 4.316667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 4.333333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 4.350000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 4.366667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 4.383333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 4.400000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 4.416667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 4.433333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 4.450000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 4.466667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 4.483333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 4.500000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 4.516667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 4.533333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 4.550000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 4.566667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 4.583333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 4.600000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 4.616667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 4.633333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 4.650000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 4.666667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 4.683333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 4.700000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 4.716667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 4.733333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 4.750000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 4.766667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 4.783333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 4.800000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 4.816667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 4.833333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 4.850000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 4.866667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 4.883333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 4.900000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 4.916667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 4.933333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 4.950000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 4.966667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 4.983333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 5.000000)
        self.zotino0.load()
        delay(ms)       
        self.zotino0.write_dac(0, 5.000000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 4.983333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 4.966667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 4.950000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 4.933333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 4.916667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 4.900000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 4.883333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 4.866667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 4.850000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 4.833333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 4.816667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 4.800000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 4.783333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 4.766667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 4.750000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 4.733333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 4.716667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 4.700000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 4.683333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 4.666667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 4.650000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 4.633333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 4.616667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 4.600000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 4.583333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 4.566667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 4.550000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 4.533333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 4.516667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 4.500000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 4.483333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 4.466667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 4.450000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 4.433333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 4.416667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 4.400000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 4.383333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 4.366667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 4.350000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 4.333333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 4.316667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 4.300000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 4.283333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 4.266667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 4.250000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 4.233333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 4.216667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 4.200000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 4.183333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 4.166667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 4.150000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 4.133333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 4.116667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 4.100000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 4.083333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 4.066667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 4.050000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 4.033333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 4.016667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 4.000000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 3.983333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 3.966667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 3.950000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 3.933333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 3.916667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 3.900000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 3.883333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 3.866667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 3.850000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 3.833333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 3.816667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 3.800000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 3.783333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 3.766667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 3.750000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 3.733333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 3.716667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 3.700000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 3.683333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 3.666667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 3.650000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 3.633333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 3.616667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 3.600000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 3.583333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 3.566667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 3.550000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 3.533333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 3.516667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 3.500000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 3.483333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 3.466667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 3.450000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 3.433333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 3.416667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 3.400000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 3.383333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 3.366667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 3.350000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 3.333333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 3.316667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 3.300000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 3.283333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 3.266667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 3.250000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 3.233333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 3.216667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 3.200000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 3.183333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 3.166667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 3.150000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 3.133333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 3.116667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 3.100000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 3.083333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 3.066667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 3.050000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 3.033333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 3.016667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 3.000000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 2.983333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 2.966667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 2.950000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 2.933333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 2.916667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 2.900000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 2.883333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 2.866667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 2.850000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 2.833333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 2.816667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 2.800000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 2.783333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 2.766667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 2.750000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 2.733333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 2.716667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 2.700000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 2.683333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 2.666667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 2.650000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 2.633333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 2.616667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 2.600000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 2.583333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 2.566667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 2.550000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 2.533333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 2.516667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 2.500000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 2.483333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 2.466667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 2.450000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 2.433333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 2.416667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 2.400000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 2.383333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 2.366667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 2.350000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 2.333333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 2.316667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 2.300000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 2.283333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 2.266667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 2.250000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 2.233333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 2.216667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 2.200000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 2.183333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 2.166667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 2.150000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 2.133333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 2.116667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 2.100000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 2.083333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 2.066667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 2.050000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 2.033333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 2.016667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 2.000000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 1.983333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 1.966667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 1.950000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 1.933333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 1.916667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 1.900000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 1.883333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 1.866667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 1.850000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 1.833333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 1.816667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 1.800000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 1.783333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 1.766667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 1.750000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 1.733333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 1.716667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 1.700000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 1.683333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 1.666667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 1.650000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 1.633333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 1.616667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 1.600000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 1.583333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 1.566667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 1.550000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 1.533333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 1.516667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 1.500000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 1.483333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 1.466667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 1.450000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 1.433333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 1.416667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 1.400000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 1.383333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 1.366667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 1.350000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 1.333333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 1.316667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 1.300000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 1.283333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 1.266667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 1.250000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 1.233333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 1.216667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 1.200000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 1.183333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 1.166667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 1.150000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 1.133333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 1.116667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 1.100000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 1.083333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 1.066667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 1.050000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 1.033333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 1.016667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 1.000000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 0.983333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 0.966667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 0.950000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 0.933333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 0.916667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 0.900000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 0.883333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 0.866667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 0.850000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 0.833333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 0.816667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 0.800000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 0.783333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 0.766667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 0.750000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 0.733333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 0.716667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 0.700000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 0.683333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 0.666667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 0.650000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 0.633333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 0.616667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 0.600000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 0.583333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 0.566667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 0.550000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 0.533333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 0.516667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 0.500000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 0.483333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 0.466667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 0.450000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 0.433333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 0.416667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 0.400000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 0.383333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 0.366667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 0.350000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 0.333333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 0.316667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 0.300000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 0.283333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 0.266667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 0.250000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 0.233333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 0.216667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 0.200000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 0.183333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 0.166667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 0.150000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 0.133333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 0.116667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 0.100000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 0.083333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 0.066667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 0.050000)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 0.033333)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 0.016667)
        self.zotino0.load()
        delay(ms)
        self.zotino0.write_dac(0, 0.000000)
        self.zotino0.load()
        print("Ramp finished",self.core.mu_to_seconds(now_mu() - self.core.get_rtio_counter_mu()))

The output I get for this is:

INFO:worker(3084,experiment-list.py):print:Kernel started 10.000122584000001
INFO:worker(3084,experiment-list.py):print:Init Finished 9.997339888
INFO:worker(3084,experiment-list.py):print:Start loading data
INFO:worker(3084,experiment-list.py):print:Starting ramp: 10.002362448000001
INFO:worker(3084,experiment-list.py):print:Before: 10.037003496
INFO:worker(3084,experiment-list.py):print:After: 0.052921856
INFO:worker(3084,experiment-list.py):print:Ramp finished 0.043967024

Your approach is unlikely to scale. People have tried before to abuse the experiment language as an intermediate exchange format. It's just too much hard to analyze code and too heavy for the compiler. NAC3 might help a bit here but the approach is still highly questionable and out of the design scope.
If (and I assume that is what you are doing, but you don't say) you can't/don't want to express your experiments in python and you want a GUI that looks like the usual time line/sheet music interfaces, then directly generate instructions for the target architecture and just assemble that.

  • asaf replied to this.

    The other likely effect you are seeing is SED lane stall. AFAICT one event from load and the bus write event are at the same RTIO cycle (that also violates the chip protocol by the way). That causes the SED lane usage to blow up and you get a stall until they are emptied again (which takes 10 s since you have written your program like that).
    As you see from this, what this is getting you into is rewriting a significant part of ARTIQ (the RTIO PHY and chip driver, and likely also the compiler). You may want to seek advice whether this is practical.

    • asaf replied to this.

      Aternatively use fastino and its interpolator to achieve ultra-smooth waveforms with a single sample.

      rjo Thank you for your reply. Indeed I want a traditional timeline-style GUI.

      This has pointed me in the right direction. I can now see, by running artiq_compile, that the delay is caused by this step. I was not aware of NAC3. I will check it out. That might be helpful.

      When you say

      rjo directly generate instructions for the target architecture

      Do you mean skipping the compiler altogether and writing the ELF file directly?

      Maybe a better strategy is to make my GUI program a bit smarter and generate the for loops when possible but first I wanted to know the source of the issue.

      rjo The documentation for AD53xx.write_dac and AD53xx.load says that both methods advance the timeline so I don't understand why it would need to use more than one SED lane. However, I have tested adding a delay between write_dac and load to avoid simultaneous events and I still get the stall. This also happens in the concise version of the script which uses for loops (script at end of post). Is it possible to prevent the stall from happening?

      from artiq.experiment import EnvExperiment,kernel,ms
      class PyPlayerExperimentForsSimplified(EnvExperiment):
          def build(self):
              self.setattr_device('core')
              self.setattr_device('zotino0')
      
          @kernel
          def run(self):
              self.core.reset()
              delay(10000*ms)
              
              n = 300
              
              print("Pre Init", self.core.mu_to_seconds(now_mu() - self.core.get_rtio_counter_mu()))
              self.zotino0.init(blind=True)
              print("After Init", self.core.mu_to_seconds(now_mu() - self.core.get_rtio_counter_mu()))
              delay(500.000000*ms)
              
              dt = 300/n*ms
              dv = 5/n
              
              print("Ramp starts",self.core.mu_to_seconds(now_mu() - self.core.get_rtio_counter_mu()))
              
              for i in range(n+1):
                  self.zotino0.write_dac(0, dv*i)
                  self.zotino0.load()
                  delay(dt)
                  
              print("Half way",self.core.mu_to_seconds(now_mu() - self.core.get_rtio_counter_mu()))
                  
              for i in range(n+1):
                  self.zotino0.write_dac(0, 5-dv*i)
                  self.zotino0.load()
                  delay(dt)
                  
              print("Ramp finished",self.core.mu_to_seconds(now_mu() - self.core.get_rtio_counter_mu()))

      This is the output.

      INFO:worker(3098,experiment-fors-simplified.py):print: Pre Init 10.00012324
      INFO:worker(3098,experiment-fors-simplified.py):print: After Init 9.997305232
      INFO:worker(3098,experiment-fors-simplified.py):print: Ramp starts 10.494855272
      INFO:worker(3098,experiment-fors-simplified.py):print: Half way 0.044935856
      INFO:worker(3098,experiment-fors-simplified.py):print: Ramp finished 0.044941512

      When the "Half way" is reached the slack has been consumed by a stall.

        Yes. Generate the instructions directly.
        Right. Not a lane usage due to simultaneous events but maybe then just filling up the FIFO. Whether you use a loop or not is irrelevant for that.

        • asaf replied to this.

          asaf Is it possible to prevent the stall from happening?

          Remove your 10s delay and (if necessary) regenerate slack with smaller delays throughout the samples.