def wait(self, sv, supervisor, svlist): # synchronize and retrigger suite clock = io.clock() delay = int(1000 * ((sv.Current_time + sv.t0 + Timestep / 2) - clock * Speed_factor)) # milliseconds if delay < 0: delay = 0 if delay == 0 and abs(2 * clock - int(2 * clock)) < 0.01: delay = 1 if not self.pause: self.callback = self.after( delay, lambda: self.suite(sv, supervisor, svlist))
def init_update(sv, autotest): """ run real time """ sv.t0 = io.clock( ) * Speed_factor + Epsilon_time # synchro (inputs as delayed events) sv.delayed_list = [] if not istrue(sv.Object[Exit], sv.Current_time): rt.pinscan(sv) # scan inputs and make them delayed events sv.delayed_list = rt.nextevents(sv) # prepare list of delayed events rt.update_loop(sv)
def suite(self, sv, supervisor, svlist): # continue program rt.update_loop(sv) # execute loop in runtime module self.message["text"] = ("Box" + str(1 + sv.Boxnumber)) + " time: " + ( '%0.1f' % sv.Current_time) + "s lag: " + ( '%0.1f' % max(0, (io.clock() * Speed_factor - sv.Current_time - sv.t0))) + "s" # display time bar if not (Exit in sv.Object and istrue(sv.Object[Exit], sv.Current_time)): self.wait(sv, supervisor, svlist) # continue if not exit else: supervisor.multi_stop(1 + sv.Boxnumber, svlist) # exit sequence using multistop
def changepin(self, sv, nam): if not Allow_manual: return if not nam in sv.Pinstate: print("\n", Anom, " ", Within, nam) # *** Anomaly in", nam,"*** else: if nam in sv.Namedpinlist: self.update(sv, sv.Namedpinlist[nam]) else: self.update(sv, nam) # transmit info to io module nb = nam[len(Pin) + 1:-1] if not isnumber(nb): nb = "0" pinnumber = int(nb) value = (sv.Pinstate[nam] != Vrai) # n.b. will react slowly io.panelpin(sv, pinnumber, value, io.clock() * Speed_factor)
def go(self, supervisor, sv, svlist): # (re)start program self.bouton_start["bg"] = FalseColor # appearance of start button if sv.Current_time == 0: # initialize at start io.run(sv) rt.init_outputs(sv) self.closed = False init_update(sv, self.autotest) if not (Exit in sv.Object and istrue( sv.Object[Exit], sv.Current_time)): # do not resume after exit if self.pause: # resume after pause self.pause = False sv.t0 = io.clock( ) * Speed_factor - sv.Current_time + Epsilon_time # adjust clock with delay print(Warn_resume) for element in sv.Visible: # update display before starting self.update(sv, element) self.suite(sv, supervisor, svlist)
def changeout(self, sv, nam): if not nam in sv.Object: print("\n", Anom, " ", Within, nam) # *** Anomaly in", nam,"*** else: # fit into Whand nod = sv.Object[nam] if not istrue(nod, sv.Current_time): nod.value = [(sv.Current_time, None)] else: nod.value = [(nod.value[0][0], sv.Current_time)] nod.lasttime = sv.Current_time nod.lastchange = sv.Current_time nod.haschanged = True # transmit info to io module nb = nam[len(Output) + 1:-1] if not isnumber(nb): nb = "0" pinnumber = int(nb) io.setpin(pinnumber, st, io.clock() * Speed_factor - sv.t0) # update display self.update(sv, nam)
while new_session: try: # initialize session print() new_session=False svlist=[] box=0 testnum=0 scriptlist, autotest, parallel=io.getscriptlist() # read script # prevent window from closing windowlock=lock_window(windowlock) # store test start time if autotest: debut=io.clock() # begin loop on script names for sourcename in scriptlist: sourcename, master, showname = actual_script(sourcename) # adjust if yoked # initialize box testnum+=1 sv=sp.spell() sv.Boxnumber=box if parallel: box+=1 # different channel numbers on each box sv.Graphic=False # no controlpanel sv.clear_all() # reset all variables except Graphic and Debog sv.slaveto=master # yoked script if master!=0 sv.Current_clause=None, None, None sv.Do_tests=autotest