示例#1
0
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
示例#2
0
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
示例#4
0
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
示例#5
0
def multitask_wrong_var_name_fails():
    a = I32Value(0)
    with multitask():

        @task(a)
        def f1():
            pass

    return a.value
示例#6
0
def multitask_stmt_fails():
    a = I32Value(0)
    with multitask() as mt:

        @task(mt)
        def f1():
            a = I32Value(1)
            a.value = 2

        return a.value
示例#7
0
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
示例#8
0
def multitask_task_multi_dec_fails():
    a = I32Value(0)
    with multitask() as mt:

        @task(mt)
        @task(mt)
        def f1():
            pass

    return a.value
示例#9
0
        def f1():
            with multitask() as mt_inside:

                @task(mt_inside)
                def fa():
                    a.value = 5

                @task(mt_inside)
                def fb():
                    a.value *= 7
示例#10
0
def multitask_funcdef_in_task_fails():
    a = I32Value(0)
    with multitask() as mt:

        @task(mt)
        def f1():
            def func():
                pass

    return a.value
示例#11
0
                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()
示例#12
0
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
示例#13
0
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()
示例#15
0
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
示例#16
0
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
示例#17
0
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
示例#18
0
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
示例#19
0
def multitask_pass():
    a = I32Value(1)
    with multitask() as mt:

        @task(mt)
        def f1():
            pass

        @task(mt)
        def f2():
            pass

    return a.value
示例#20
0
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
示例#21
0
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
示例#22
0
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
示例#23
0
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
示例#24
0
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
示例#25
0
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
示例#26
0
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
示例#27
0
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
示例#28
0
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
示例#29
0
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
示例#30
0
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