def multitask_multiple_in_sequence_validate_order(): a = I32Value(0) with multitask() as mt: @task(mt) def f1(): nivs_yield() if a.value == 1: a.value = 2 @task(mt) def f2(): if a.value == 0: a.value = 1 nivs_yield() with multitask() as mt2: @task(mt2) def fa(): nivs_yield() if a.value == 3: a.value = 4 @task(mt2) def fb(): if a.value == 2: a.value = 3 nivs_yield() return a.value
def multitask_tasks_with_different_iter_count(): a = I32Value(0) ret = I32Value(1) with multitask() as mt: @task(mt) def f1(): while a.value < 15: a.value += 1 if a.value % 2 != 1 and a.value < 10: ret.value = a.value * -1 nivs_yield() @task(mt) def f2(): while a.value < 10: a.value += 1 if a.value % 2 != 0: ret.value = a.value * -1 if a.value > 10: ret.value -= 100 nivs_yield() ret.value *= a.value return ret.value
def yield_multitask(): with multitask() as mt: @task(mt) def f1(): for a in range(5): nivs_yield() @task(mt) def f2(): with multitask() as mt_inner: @task(mt_inner) def fa(): for b in range(7): nivs_yield() @task(mt_inner) def fb(): for c in range(13): nivs_yield() a = I32Value(0) a.value = iteration() return a.value
def wait_multitask(): ret = BooleanValue(False) init1 = DoubleValue(0) end1 = DoubleValue(0) init2 = DoubleValue(0) end2 = DoubleValue(0) tot_init = DoubleValue(0) tot_end = DoubleValue(0) tot_init.value = seqtime() with multitask() as mt: @task(mt) def f1(): init1.value = seqtime() nivs_yield() end1.value = wait(DoubleValue(1)) - init1.value @task(mt) def f2(): init2.value = seqtime() end2.value = wait(DoubleValue(3)) - init2.value tot_end.value = seqtime() - tot_init.value ret.value = tot_end.value >= 3 and tot_end.value <= 4 and \ end1.value >= 1 and end1.value <= 2 and \ end2.value >= 3 and end2.value <= 4 return ret.value
def multitask_wrong_var_name_fails(): a = I32Value(0) with multitask(): @task(a) def f1(): pass return a.value
def multitask_stmt_fails(): a = I32Value(0) with multitask() as mt: @task(mt) def f1(): a = I32Value(1) a.value = 2 return a.value
def multitask_redefine_var_fails(): a = I32Value(0) with multitask() as mt: @task(mt) def f1(): a = I32Value(1) a.value = 2 return a.value
def multitask_task_multi_dec_fails(): a = I32Value(0) with multitask() as mt: @task(mt) @task(mt) def f1(): pass return a.value
def f1(): with multitask() as mt_inside: @task(mt_inside) def fa(): a.value = 5 @task(mt_inside) def fb(): a.value *= 7
def multitask_funcdef_in_task_fails(): a = I32Value(0) with multitask() as mt: @task(mt) def f1(): def func(): pass return a.value
def f0(): with multitask() as mt_bottom: @task(mt_bottom) def fx(): if a.value != 0: ret.value = -1000 while counter.value > 0: counter.value -= 1 nivs_yield()
def multitask_return_in_task_fails(): a = I32Value(0) with multitask() as mt: @task(mt) def f1(): a = I32Value(1) return a.value return a.value
def generate_abort_mt(): a = DoubleValue(0) with multitask() as mt: @task(mt) def f1(): generate_error(-200, "Abort", ErrorAction.AbortSequence) @task(mt) def f2(): nivs_yield() a.value = 1 return a.value
def f2(): with multitask() as mt_inner: @task(mt_inner) def fa(): for b in range(7): nivs_yield() @task(mt_inner) def fb(): for c in range(13): nivs_yield()
def generate_continue_mt(): a = DoubleValue(0) with multitask() as mt: @task(mt) def f1(): generate_error(1, "Continue", ErrorAction.ContinueSequenceExecution) @task(mt) def f2(): nivs_yield() a.value = 1 return a.value
def generate_stop_mt(): a = DoubleValue(0) with multitask() as mt: @task(mt) def f1(): generate_error(-100, "Stop", ErrorAction.StopSequence) @task(mt) def f2(): nivs_yield() a.value = 1 return a.value
def _subseq_with_multitask(param): with multitask() as mt: @task(mt) def fa(): nivs_yield() if param.value == 2: param.value = 3 @task(mt) def fb(): if param.value == 0: param.value = 1
def multitask_task_with_param_fails(): a = I32Value(1) with multitask(a) as mt: @task(mt) def f1(x): pass @task(mt) def f2(): pass return a.value
def multitask_pass(): a = I32Value(1) with multitask() as mt: @task(mt) def f1(): pass @task(mt) def f2(): pass return a.value
def multitask_access_local(): a = I32Value(0) with multitask() as mt: @task(mt) def f1(): a.value = 5 @task(mt) def f2(): a.value *= 7 return a.value
def multitask_duplicate_name_fails(): a = I32Value(0) with multitask() as mt: @task(mt) def f1(): a.value = 1 @task(mt) def f1( ): # noqa: F811 redefinition is exactly what we're testing here. a.value = 2 return a.value
def try_in_multitask1(): a = DoubleValue(0) with multitask() as mt: try: @task(mt) def f1(): pass finally: a.value += 1 @task(mt) def f2(): nivs_yield() return a.value
def enter_autonomous(): error_status = BooleanValue(False) enter_autonomous_complete = BooleanValue(False) enter_autonomous_succeeded = BooleanValue(False) ReAX_GearA_Disable_chan = ChannelReference( 'Targets/TruckSim_TTC580/User Channels/NI-XNET/VCAN-B/ReAX_GearA (486535187)/ReAX_GearA (486535187) Disable') ReAX_GearB_Disable_chan = ChannelReference( 'Targets/TruckSim_TTC580/User Channels/NI-XNET/VCAN-B/ReAX_GearB (486535443)/ReAX_GearB (486535443) Disable') Power_On_chan = ChannelReference( 'Targets/TruckSim_TTC580/Hardware/Chassis/DAQ/PXI1Slot2/Digital Output/port0/Power on') SystemStatus_chan = ChannelReference( 'Targets/TruckSim_TTC580/Hardware/Chassis/NI-XNET/CAN/Server CAN/Incoming/Single-Point' '/SystemStatus(69785)/SystemStatus') Autonomous_Drive_chan = ChannelReference('Targets/TruckSim_TTC580/Hardware/Chassis/DAQ' '/PXI1Slot2/Digital Output/port0/Autonomous Drive') MODE_TRANS_chan = ChannelReference( 'Targets/TruckSim_TTC580/Simulation Models/Models/trucksim_LVRT/Inports/MODE_TRANS') with multitask() as mt: @task(mt) def enter_30(): ReAX_GearA_Disable_chan.value = 0 ReAX_GearB_Disable_chan.value = 0 # Power on button Power_On_chan.value = 1 # Check System Status if SystemStatus_chan.value != 25: error_status.value = True # Push autonomous driving button Autonomous_Drive_chan.value = 1 wait(DoubleValue(1)) Autonomous_Drive_chan.value = 0 # Check System Status if SystemStatus_chan.value != 30: error_status.value = True MODE_TRANS_chan.value = 18 enter_autonomous_succeeded.value = True @task(mt) def monitor_error_status(): while enter_autonomous_complete.value is False: if error_status.value: stop_task(enter_30) enter_autonomous_complete.value = True enter_autonomous_succeeded.value = False nivs_yield() return enter_autonomous_succeeded.value
def multitask_task_with_yield(): a = I32Value(0) with multitask() as mt: @task(mt) def f1(): nivs_yield() a.value = 1 @task(mt) def f2(): a.value = 2 nivs_yield() return a.value
def docstring_multitask(): """Test multitask docstring.""" with multitask() as mt: @task(mt) def func1(): """Test task docstring in func1.""" pass @task(mt) def func2(): """Test task docstring in func2. Multi-line comment here. """ pass pass
def multitask_blocks_until_done(): a = I32Value(0) with multitask() as mt: @task(mt) def f1(): nivs_yield() a.value = 1 @task(mt) def f2(): a.value = 2 nivs_yield() if a.value != 1: a.value = -1 return a.value
def multitask_call_subroutine_params_by_ref(): a = I32Value(0) b = I32Value(1) with multitask() as mt: @task(mt) def f1(): _increase_param_by_ref(a) @task(mt) def f2(): _increase_param_by_ref(b) @task(mt) def f3(): a.value += b.value return a.value
def multitask_nested(): a = I32Value(0) with multitask() as mt: @task(mt) def f1(): with multitask() as mt_inside: @task(mt_inside) def fa(): a.value = 5 @task(mt_inside) def fb(): a.value *= 7 @task(mt) def f2(): a.value *= 13 return a.value
def engine_demo_advanced(desired_rpm, actual_rpm, engine_temp): """Turns on the engine, sets it to the desired rpm, and monitors the engine temperature.""" # Use the following local variable declarations to keep track of the test's status: warmup_complete = BooleanValue(False) warmup_succeeded = BooleanValue(False) test = BooleanValue(False) # Create a multitask with two tasks: one for setting rpm values and another for monitoring. # In general, a multitask can contain as many tasks as desired. The tasks will all execute asynchronously, # but not in parallel. For more information on multitask behavior, refer to the VeriStand help. with multitask() as mt: # You must decorate tasks using the following notation. # The following code shows example of a task. @task(mt) def engine_warmup(): """Spawns a task to wait for the actual rpm signal to settle.""" desired_rpm.value = 2500 # Waits for up to 120 seconds for the actual RPM to be between 999999 and 2450 for 25 seconds. wait_until_settled(actual_rpm, 9999999, 2450, 25, 120) desired_rpm.value = 8000 wait_until_settled(actual_rpm, 9999999, 7800, 25, 120) warmup_complete.value = True test.value = check_val(desired_rpm, 8000) @task(mt) def monitor_temp(): """Spawns a task to monitor engine temperature. If the temperature rises above 110 degrees (C), the previous task will stop. """ while warmup_complete.value is False: if engine_temp.value > 110: stop_task(engine_warmup) warmup_complete.value = True warmup_succeeded.value = False nivs_yield() # You can use a return value, but some restrictions will apply. # For example, the function may only return previously declared variables. return warmup_succeeded.value
def wait_until_settled_multitask(): a = DoubleValue(15000) timer = DoubleValue(0) ret = BooleanValue(False) timer.value = seqtime() with multitask() as mt: @task(mt) def monitor(): ret.value = wait_until_settled(a, DoubleValue(1000), DoubleValue(500), DoubleValue(2), DoubleValue(-1)) @task(mt) def signal(): a.value = 600 wait(DoubleValue(1)) a.value = 12000 wait(DoubleValue(1)) a.value = 300 wait(DoubleValue(1)) a.value = 750 timer.value = seqtime() - timer.value ret.value = a.value == 750 and timer.value >= 4 and timer.value <= 6 and not ret.value return ret.value