コード例 #1
0
def test_stimulus_steps_legacy():
    #Every test should have a user variable that have a test ID number to ensure that you are running the correct test configuration.
    TEST_ID = 12000
    wks = NIVeriStand.Workspace2()

    #print(statement take a string and it is piped out to a single trace file in the background, for your tracing needs.)
    print("")

    SYSDEFFILE = os.path.join(configutilities.get_autotest_projects_path(),
                              "ProfileTest", "Profile Test.nivssdf")
    print("Deploying %s" % SYSDEFFILE)
    wks.ConnectToSystem(SYSDEFFILE, 1, 60000)
    print("System Definition deployed")

    try:
        #Verify the TEST_ID var on test file.
        test_ID = wks.GetSingleChannelValue("TEST_ID")
        assert (test_ID == TEST_ID), "Deployed wrong test file"

        stm = NIVeriStand.Stimulus()

        assert run_test(wks, stm, "Ramp Test.nivstest", 120)
        sleep()
        assert run_test(wks, stm, "Conditional Test.nivstest", 120)
        sleep()
        assert run_test(wks, stm, "Dwell Test.nivstest", 120)

    finally:
        #Always stop the engine.
        wks.DisconnectFromSystem("", 0)
コード例 #2
0
def run_test(wks, stimulus, test_name, wait_time):
    TESTFILE = os.path.join(configutilities.get_autotest_projects_path(),
                            "ProfileTest", test_name)
    result = -1
    print("")
    print("Running stimulus profile %s" % test_name)
    print("File Path: %s" % TESTFILE)
    print("...")
    LOGDIR = os.path.join(configutilities.get_autotest_projects_path(), "ProfileTest", "Logs")
    stimulus.RunStimulusProfile(TESTFILE,LOGDIR,60000,1,1)
    timeout = wait_for_test(stimulus, 120)

    assert not timeout, "Timed out waiting for test to complete!"

    print("Stimulus Profile completed.")
    result = wks.GetSingleChannelValue("Gen 1 Pass Fail")
    print("Result = %d" % result)
    print("")
    return result
コード例 #3
0
def test_expected_profile_failures_legacy():

    #Every test should have a user variable that have a test ID number to ensure that you are running the correct test configuration.
    TEST_ID = 12000

    #Getting a handle to the workspace API
    #Other API: Model, Alarm, AlarmManager, SoftwareForcing, ModelManager
    wks = NIVeriStand.Workspace2()

    try:
        #print(statement take a string and it is piped out to a single trace file in the background, for your tracing needs.)
        print("")

        #standard way of running a configuration file.  VSTANDPROJECTDIR is configured to the location where test project files get sync. So just append your folder and rig file.
        SYSDEFFILE = os.path.join(configutilities.get_autotest_projects_path(),
                                  "ProfileTest", "Profile Test.nivssdf")
        print("Deploying %s" % SYSDEFFILE )
        wks.ConnectToSystem(SYSDEFFILE,1,60000)
        print("System Definition deployed")

        #Verify the TEST_ID var on test file.
        test_ID = wks.GetSingleChannelValue("TEST_ID")
        assert(test_ID == TEST_ID), "Deployed wrong test file"


        stm = NIVeriStand.Stimulus()

        with pytest.raises(NIVeriStandException):
            gens_error = run_test(wks, stm, "Too Many Gens.nivstest", 120)
            assert (gens_error == 4294659383)

        with pytest.raises(NIVeriStandException):
            steps_error = run_test(wks, stm, "Too Many Steps.nivstest", 120)
            assert (steps_error == 4294659395)

        with pytest.raises(NIVeriStandException):
            aux_error = run_test(wks, stm, "Aux Buffer Overflow.nivstest", 120)
            assert (aux_error == 4294659393)

        with pytest.raises(NIVeriStandException):
            chan_error = run_test(wks, stm, "Invalid Channel.nivstest", 120)
            assert (chan_error == 4294659387)

    finally:
        #Always stop the engine.
        wks.DisconnectFromSystem("", 0)
コード例 #4
0
def run_test(wks, stimulus, test_name, wait_time):
    TESTFILE = os.path.join(configutilities.get_autotest_projects_path(),
                            "ProfileTest", test_name)
    print("")
    print("Running stimulus profile %s" % test_name)
    print("File Path: %s" % TESTFILE)
    print("...")
    import tempfile
    stimulus.RunStimulusProfile(TESTFILE, "", 60000, 1, 1)
    timeout = wait_for_test(stimulus, wait_time)

    assert not timeout, "Test %s timed out." % test_name

    print("Stimulus Profile completed.")
    result = wks.GetSingleChannelValue("Gen 1 Pass Fail")
    print("Result = %d" % result)
    print("")
    return result
コード例 #5
0
def test_custom_devices_legacy():
    import random
    #Getting a handle to the workspace API
    #Other API: Model, Alarm, AlarmManager, SoftwareForcing, ModelManager
    wks = NIVeriStand.Workspace2('localhost')
    #print(statement take a string and it is piped out to a single trace file in the background, for your tracing needs.)
    print("")

    #standard way of running a configuration file.  VSTANDPROJECTDIR is configured to the location where test project files get sync. So just append your folder and rig file.
    SYSDEFFILE = os.path.join(configutilities.get_autotest_projects_path(),
                              "CustomDevices", "CustomDevices.nivssdf")
    print("[b] Deploying %s" % SYSDEFFILE)
    wks.ConnectToSystem(SYSDEFFILE, 1, 60000)

    try:
        #Verify the TEST_ID var on test file.
        #Every test should have a user variable that have a test ID number to ensure that you are running the correct test configuration.
        TEST_ID = 10239
        # Verify the TEST_ID var on test file.
        test_ID = wks.GetSingleChannelValue("TEST_ID")
        assert (test_ID == TEST_ID), "Deployed wrong test file"

        #Get Parameter from test system if necessary, if you are being passed an argument from the test system then you will need to get the parameters. The following
        #python code is recommended practice:
        #Declare variable to store the parameter with a default value since you will always want to trouble shoot your test script without running the full LabVIEW auto test.
        #TEST_PARAM_IPADDRESS  = "localhost" #set default IP address to localhost for manual run.
        #if EnvVars.ARG_LIST.has_key( "IPADDRESS"):
        #	TEST_PARAM_IPADDRESS = EnvVars.ARG_LIST["IPADDRESS"]
        #repeat the above process for all parameters you expect to be passed in by the LabVIEW test system.

        _test_device(wks, "Async", 100 * random.random())
        _test_device(wks, "HW", 200 * random.random())
        _test_device(wks, "Mdl", 300 * random.random())

        print("Test PASSED")
    finally:
        #Always stop the engine.
        wks.DisconnectFromSystem("", 1)
コード例 #6
0
def test_worksspace2_api():
    wks = NIVeriStand.Workspace2("localhost")
    print("")
    SYSDEFINITION = os.path.join(configutilities.get_autotest_projects_path(),
                                 "TestWorkspaceAPI",
                                 "TestWorkspaceAPI.nivssdf")
    print("Deploying %s" % SYSDEFINITION)
    wks.ConnectToSystem(SYSDEFINITION, True, 60000)

    try:
        #Verify the TEST_ID var on test file.
        test_ID = wks.GetSingleChannelValue("TEST_ID")
        assert (test_ID == TEST_ID), "Deployed wrong test file"

        result = wks.GetSystemState()
        assert (result['systemdefinition_file'] == SYSDEFINITION
                ), "System definition file is not the same as deployed"

        wks.LockConnection("", 'LOCK_PASSWORD')
        with pytest.raises(NIVeriStandException):
            wks.DisconnectFromSystem("", 0)

        with pytest.raises(NIVeriStandException):
            wks.UnlockConnection("")

        wks.UnlockConnection('LOCK_PASSWORD')

        print("Get System Node Children")
        result = wks.GetSystemNodeChildren(
            r"Controller/Simulation Models/Models/sinewave/Execution")
        assert (len(result) == 4), "Model Exceution should return 4 node"

        #test we can still get system node children with full path.
        result = wks.GetSystemNodeChildren(
            r"Targets Section/Controller/Simulation Models/Models/sinewave/Execution"
        )
        assert (len(result) == 4), "Model Exceution should return 4 node"

        print("Get System Node Channel List")
        result = wks.GetSystemNodeChannelList('')
        assert (len(result) >=
                100), "At the very list we always have 100 channel"
        print(result[2])

        print("Get Alias List")
        result = wks.GetAliasList()
        assert (
            len(result) == 3
        ), "Expected 3 alias but get something different %d" % len(result)
        assert (result['TEST_ID'] ==
                r"Targets Section/Controller/User Channel/TEST_ID"
                ), "Expected an alias for TEST_ID incorrect"

        #Mix up different mode of how we look up system nodes data: full path and also relative to Targets Section.
        nodes = ('Targets Section/Controller/User Channel',
                 'Controller/User Channel/TEST_ID')
        result = wks.GetMultipleSystemNodesData(nodes)
        assert (len(result) == 2), "Ask for 2 node info get no info"

        print("Validating channels")
        section = result[0]
        print(section)
        assert (section['isChannel'] == 0), "Expecting a section to returned"

        testNode = result[1]
        print(testNode)
        assert (testNode['isChannel'] == 1), "Expecteing a node to returned"

        print("Test PASSED")
        print("")

    finally:
        wks.DisconnectFromSystem("", 1)
コード例 #7
0
def test_calculated_channel_formula_legacy():
    wks = NIVeriStand.Workspace()
    print("")
    SYSDEFFILE = os.path.join(configutilities.get_autotest_projects_path(),
                              "CalcChanFormulaTest", "CalcChanFormulaTest.nivssdf")
    print("Deploying %s" % SYSDEFFILE)
    wks.RunWorkspaceFile(SYSDEFFILE,0,1,60000,"","")

    try:
        # Compute Machine Epsilon: The smallest floating point number when
        # added to one is greater than one.

        eps = 1.0
        while ((1.0 + eps) > 1.0):
            epsLast = eps;
            eps = eps / 2.0;
        eps = epsLast;
        print("Machine Epsilon = %g" % (eps))

        # Sleep until the first Time (a calculated channel) is greater than
        # zero. This will be either the first or second time the calculated
        # channels are computed. In VeriStand 2010, the first time the
        # channels are calculated is at Delta T. At any rate, we do not want
        # to proceed until we have performed some calculations.

        result=0
        while (result <= 0):
            sleep()
            result = wks.GetSingleChannelValue("Time")

        # All formulas in VeriStand must have input values. Zero is computed
        # so that it can be used as an input to certain formulas. The way
        # it is computed, it should be precisely zero. No epsilon logic should
        # be used to ensure that it is in fact zero.

        print("Checking Zero=(Time - Time)")
        expectedResult = 0
        result = wks.GetSingleChannelValue("Zero")
        assert(result == expectedResult), "Time-Time (%g) does not match calculated (%g)"  % (expectedResult, result)
        print("...Pass")

        # All formulas in VeriStand must have input values. MinusOne is computed
        # so that it can be used as an input to certain formulas. The way
        # it is computed, it should be precisely -1. No epsilon logic should
        # be used to ensure that it is in fact -1.

        print("Checking MinusOne=(Zero - 1)")
        expectedResult = -1
        result = wks.GetSingleChannelValue("MinusOne")
        assert(result == expectedResult), "Zero-1 (%g) does not match calculated (%g)"  % (expectedResult, result)
        print("...Pass")

        # This computation of Pi should be accurate to all bits in the mantissa.
        # We only use epsilon logic to allow for difference between the transfer
        # between C# and Python.

        print("Checking Pi=acos(-1) Computation")
        expectedResult = math.pi
        abstol = 0
        reltol = eps
        result = wks.GetSingleChannelValue("Pi")
        tol = abstol + reltol*abs(expectedResult);
        assert((result >= expectedResult - tol) and (result <= expectedResult + tol)), "Pi=acos(-1) (%g) does not match calculated (%g)"  % (expectedResult, result)
        print("...Pass")

        # Exponentiation is higher precedence than multiplication and
        # multiplication is higher precedence than addition. The floating
        # point values contain integers. Therefore no epsilon logic is
        # needed.

        print("Checking Operator Precedence with P+Q*R^2 == P+(Q*(R^2))")
        channels = ("P","Q","R")
        channelsValues= (12,6,3)
        wks.SetMultipleChannelValues(channels,channelsValues)

        channels = ("PplusQtimesRsq","PplusQtimesRsq_Exact")
        expectedResults = [66,66]
        results = wks.GetMultipleChannelValues(channels)
        for i in range(0,len(expectedResults)):
            assert(results[i] == expectedResults[i]), "%s Expected %g Return Value %g not expected" % (channels[i], expectedResult, result)
        print("...Pass")

        # Testing against zero; don't use reltol; only use abstol.

        print("Testing T-acos(cos(T)) where T=(Time modulo Pi)")
        expectedResult = 0
        abstol = eps
        reltol = 1
        result = wks.GetSingleChannelValue("ZeroEqualsTMinusAcosCosT")
        tol = abstol + reltol*abs(expectedResult);
        assert(expectedResult - tol <= result <= expectedResult + tol), "T-acos(cos(T)) (%g) does not match calculated (%g)"  % (expectedResult, result)
        print("...Pass")

        # Testing against zero; don't use reltol; only use abstol.

        print("Testing T-asin(sin(T)) where T=(Time modulo Pi) - (Pi/2)")
        expectedResult = 0
        abstol = eps
        reltol = 1
        result = wks.GetSingleChannelValue("ZeroEqualsTMinusAsinSinT")
        tol = abstol + reltol*abs(expectedResult);
        assert(expectedResult - tol <= result <= expectedResult + tol), "T-asin(sin(T)) (%g) does not match calculated (%g)"  % (expectedResult, result)
        print("...Pass")

        # Testing against one; don't use abstol; only use reltol.

        print("Testing Sin^2(T)+Cos^2(T) [should be one]")
        expectedResult = 1.0
        abstol = 0
        reltol = eps
        result = wks.GetSingleChannelValue("OneEqualsSinSqTPlusCosSqT")
        tol = abstol + reltol*abs(expectedResult);
        assert(expectedResult - tol <= result <= expectedResult + tol), "Sin^2(T)+Cos^2(T) (%g) does not match calculated (%g)"  % (expectedResult, result)
        print("...Pass")

        # This computation of Pi should be accurate to all bits in the mantissa.
        # We only use epsilon logic to allow for difference between the transfer
        # between C# and Python.

        print("Checking Pi=4*atan(1) Computation")
        expectedResult = math.pi
        abstol = 0
        reltol = eps
        result = wks.GetSingleChannelValue("PiEquals4TimesAtan1")
        tol = abstol + reltol*abs(expectedResult);
        assert(expectedResult - tol <= result <= expectedResult + tol), "Pi=4*atan(1) (%g) does not match calculated (%g)"  % (expectedResult, result)
        print("...Pass")

        # Each value in the subtraction should be plus or minus one.
        # The result should be precisely zero. The only value for this
        # equation that is not zero happens when Time=0.

        print("Checking (-1)^int(Time/Pi) - sign(sin(Time)); Should be zero")
        expectedResult = 0
        result = wks.GetSingleChannelValue("AnotherFormulaForZero")
        assert(result == expectedResult), "Test value (%g) does not match calculated (%g)"  % (expectedResult, result)
        print("...Pass")

        # To check the properties of random numbers, we must wait
        # until we have at least 100 data points.

        print("Checking mean and variance of a uniform random number between 0 and 1.")
        print("Mean should be 1/2 and the variance should be 1/12.")

        result=0
        while (result < 100):
            sleep()
            result = wks.GetSingleChannelValue("RandCount")

        # We must be sloppy in our checks here. We cannot expect the
        # underlying pseudo random number generator to be precisely white.

        channels = ("RandRunningMean","RandRunningVariance","RandErrorInVariance")
        expectedResults = [0.5, 1./12., 0.0]
        abstol = 0.03
        reltol = 0.2
        results = wks.GetMultipleChannelValues(channels)
        print("...Got mean=%g, variance=%g, errorInVariance=%g" % (results[0], results[1], results[2]))

        for i in range(0,len(expectedResults)):
            tol = abstol + reltol*abs(expectedResults[i]);
            assert(expectedResults[i] - tol <= results[i] <= expectedResults[i] + tol), "%s Expected %g Return Value %g not expected" % (channels[i], expectedResults[i], results[i])
        print("...Pass")

        # In order to test Peak & Valley, we must wait for at least
        # one cycle time of our input waveform. The time period for
        # the cosine is 2*Pi. We will wait for 10 seconds to allow
        # the waveform to be filtered and the peak detection's offset
       # algorithm to complete.

        print("Input waveform: X = 2*sin(30*Time) + 0.5*cos(Time) + 4")
        print("Applied lowpass Butterworth filter at 3Hz")
        print("Expected output waveform: 0.5*cos(Time) + 4")

        result=0
        while (result < 10):
            sleep()
            result = wks.GetSingleChannelValue("Time")

       # Be a bit sloppy on these checks.

        print("Checking error (tol) and offset (4.0) of output waveform")
        channels = ("ErrorInFilterOutMinusFour", "Z")
        channelNames=("Error", "Offset")
        expectedResults = [0.0, 4.0]
        abstol = 0.05
        reltol = 0.1
        results = wks.GetMultipleChannelValues(channels)
        print("...Got offset=%g, acceptable error=%g" % (results[1], results[0]))

        for i in range(0,len(expectedResults)):
            tol = abstol + reltol*abs(expectedResults[i])
            assert(expectedResults[i] - tol <= results[i] <= expectedResults[i] + tol), "%s Expected %g Return Value %g not expected" % (channelNames[i], expectedResults[i], results[i])
        print("...Pass")

        # Wait a lot more for the peak detection algorithm to publish
        # the peak and valley of our expected sinusoidal channel.

        result=0
        while (result < 30):
            sleep()
            result = wks.GetSingleChannelValue("Time")

        print("Checking peak (4.5) and valley (3.5) of output waveform")
        channels = ("PeakAndValleyOfFilterOut","Y")
        channelNames=("Peak", "Valley")
        expectedResults = [4.5, 3.5]
        abstol = 0.0001
        reltol = 0.01
        results = wks.GetMultipleChannelValues(channels)
        print("...Got peak=%g, valley=%g" % (results[0], results[1]))

        for i in range(0,len(expectedResults)):
            tol = abstol + reltol*abs(expectedResults[i]);
            assert(expectedResults[i] - tol <= results[i] <= expectedResults[i] + tol), "%s Expected %g Return Value %g not expected" % (channelNames[i], expectedResults[i], results[i])
        print("...Pass")

       # Be a bit sloppy in the following test. We have filtered the
        # two tone input and subtracted its offset and we are now
       # integrating the waveform using Simpson's rule.

        print("Applied Simpson's rule integration formula")
        print("Expected output waveform: 0.5*sin(Time)")

        expectedResult = 0
        abstol = 0.05
        reltol = 0.5
        result = wks.GetSingleChannelValue("ErrorInIntegral")
        print("...Got acceptable error=%g" % (result))

        tol = abstol + reltol*abs(expectedResult);
        assert(expectedResult - tol <= result <= expectedResult + tol), "Integral of (FilterOut - 4) does not match expected. Error is %g "  % (result)
        print("...Pass")

        # VeriStand computes all calculated channels in one time step.
        # We check here that it did just that.

        print("Checking final calculated channels time equals initial calculated channels time")
        channels = ("Time","FinalTime")
        results = wks.GetMultipleChannelValues(channels)
        assert(results[0] == results[1]), "Final Calculated Channels Time (%g) does not equal Initial (%g)" % (results[1], results[0])
        print("...Pass")

        print("Test PASSED")
        print("")

    finally:
        wks.StopWorkspaceFile("")
コード例 #8
0
def test_procedures_legacy():
    wks = NIVeriStand.Workspace2("localhost")
    SYSDEFINITION = os.path.join(configutilities.get_autotest_projects_path(),
                                 "ProceduresTest", "ProceduresTest.nivssdf")
    print("Deploying %s" % SYSDEFINITION)
    wks.ConnectToSystem(SYSDEFINITION, 1, 60000)

    try:
        #Verify the TEST_ID var on test file.
        test_ID = wks.GetSingleChannelValue("TEST_ID")
        assert (test_ID == TEST_ID), "Deployed wrong test file"

        print("")
        print("Test ID =", TEST_ID)

        #Now do your test
        #Sample common operation

        #Give some time for the startup procedure to finish setting the initial variables
        time.sleep(2)

        print("")

        #Check that we skipped the first procedure and executed the Startup Procedure
        assert (wks.GetSingleChannelValue("Test Channel 6") >=
                0), "Invalid procedure executed before Startup!"
        print(
            "Successfully skipped initial procedure. Checking Startup Procedure was invoked..."
        )

        channelValues = wks.GetMultipleChannelValues(
            ("Test Channel 0", "Test Channel 1", "Test Channel 2",
             "Test Channel 3", "Test Channel 4", "Test Channel 7",
             "Test Channel 10", "Test Channel 11"))

        print("Startup channel values =", channelValues)
        assert (channelValues == [1000, 2000, 20000, 30000, 40000, 0, 10,
                                  11]), "Startup Test Data Errors!"
        print("Startup Procedure invoked successfully")

        print(
            "Checking that Startup Procedure is waiting on Test Channel 5 before continuing"
        )
        #Check that AfterStartupProcedure hasn't run yet. StartupProcedure should be waiting for TC5 >= 50000
        assert (wks.GetSingleChannelValue("Test Channel 5") !=
                -50000), "After Startup Procedure premature execution!"
        print("Startup Procedure successfully waiting")

        #Set Test Channel 5 to 50000 so that the Startup Procedure ends and proceeds to After Startup Procedure
        print("Triggering After Startup Procedure")
        wks.SetSingleChannelValue("Test Channel 5", 50000)
        time.sleep(2)
        assert (wks.GetSingleChannelValue("Test Channel 5") == -50000
                ), "Failed to move onto After Startup Procedure"
        print("After Startup Procedure Executed Successfully")

        #Check that we don't move onto Also Should Not Run Procedure, because After Startup ends with End
        time.sleep(1)
        assert (wks.GetSingleChannelValue("Test Channel 6") >=
                0), "Invalid procedure executed after After Startup!"
        print("Procedure execution ended successfully")

        #Test triggering alarms

        #Set number of alarm triggers. Each triggered alarm procedure should increment its trigger count variable.
        x = 5
        print("Triggering Alarm 1 and 2 and 3", x, "times")
        for i in range(x):
            wks.SetSingleChannelValue("Alarm Channel 1", 1)
            time.sleep(2)
            wks.SetSingleChannelValue("Alarm Channel 2", 1)
            time.sleep(2)
            wks.SetSingleChannelValue("Alarm Channel 3", 1)
            time.sleep(2)

        a1TrigCount = wks.GetSingleChannelValue("Alarm 1 Trigger Count")
        a2TrigCount = wks.GetSingleChannelValue("Alarm 2 Trigger Count")
        a3TrigCount = wks.GetSingleChannelValue("Alarm 3 Trigger Count")
        print("Alarm 1 Trigger Count =", a1TrigCount)
        print("Alarm 2 Trigger Count =", a2TrigCount)
        print("Alarm 3 Trigger Count =", a3TrigCount)

        assert ((a1TrigCount == x)
                and (a2TrigCount
                     == x)), "Alarms failed to trigger Alarm Procedures!"
        print("Alarm procedures successfully triggered")

        assert (a3TrigCount <= 0), "Alarm 3 triggered while disabled!"
        print("Alarm 3 successfully disabled, did not trigger")

        print("Triggering Procedure 4 which should enable Alarm 3")
        wks.SetSingleChannelValue("Alarm Channel 4", 1)
        time.sleep(1)

        print("Attempting to trigger Alarm 3...")
        wks.SetSingleChannelValue("Alarm Channel 3", 1)
        time.sleep(1)
        a3TrigCount = wks.GetSingleChannelValue("Alarm 3 Trigger Count")
        assert (a3TrigCount == 1), "Alarm 3 not successfully enabled!"
        print("Alarm 3 Trigger Count =", a3TrigCount)
        print("Alarm 3 successfully triggered")

        print(
            "Attempting to retrigger Alarm 3, which should now be disabled again after Alarm 3 Procedure executed"
        )
        wks.SetSingleChannelValue("Alarm Channel 3", 1)
        time.sleep(1)
        a3TrigCount = wks.GetSingleChannelValue("Alarm 3 Trigger Count")
        assert (a3TrigCount == 1
                ), "Alarm 3 failed to be set to disabled and was triggered!"
        print("Alarm 3 Trigger Count =", a3TrigCount)
        print("Alarm 3 successfully disabled and not triggered")

        #Alarms 5 and 6 test resetting multiple alarms in same sub-procedure using "Reset This Alarm".
        #Alarms 7 and 8 test the "Triggered alarm" checkbox of an Alarm command by having one sub-procedure which can reset any calling alarm.
        #(Using a sub-procedure tests to make sure that the triggered alarm is correctly passed to sub-procedures)
        x = 3
        print("Triggering Alarm 5, 6, 7 and ", x, "times")
        for i in range(x):
            wks.SetSingleChannelValue("Alarm Channel 5", 1)
            time.sleep(2)
            wks.SetSingleChannelValue("Alarm Channel 6", 1)
            time.sleep(2)
            wks.SetSingleChannelValue("Alarm Channel 7", 1)
            time.sleep(2)
            wks.SetSingleChannelValue("Alarm Channel 8", 1)
            time.sleep(2)

        a5TrigCount = wks.GetSingleChannelValue("Alarm 5 Trigger Count")
        a6TrigCount = wks.GetSingleChannelValue("Alarm 6 Trigger Count")
        a7TrigCount = wks.GetSingleChannelValue("Alarm 7 Trigger Count")
        a8TrigCount = wks.GetSingleChannelValue("Alarm 8 Trigger Count")
        print("Alarm 5 Trigger Count =", a5TrigCount)
        print("Alarm 6 Trigger Count =", a6TrigCount)
        print("Alarm 7 Trigger Count =", a7TrigCount)
        print("Alarm 8 Trigger Count =", a8TrigCount)

        #Testing the alarm call stack with alarms 9, 10, and 11.  Each alarm waits 5 seconds, then calls "Reset Triggered Alarm Sub-Procedure".
        #During this test, procedure 9 starts and is interrupted by procedure 10, which is interrupted by procedure 11.
        #The whole thing is run twice and makes sure that preempted alarms are properly reset once they resume.
        x = 2
        print("Triggering Alarm 9, 10, 11 and ", x, "times")
        for i in range(x):
            wks.SetSingleChannelValue("Alarm Channel 9", 1)
            time.sleep(2)
            wks.SetSingleChannelValue("Alarm Channel 10", 1)
            time.sleep(2)
            wks.SetSingleChannelValue("Alarm Channel 11", 1)
            time.sleep(20)

        a9TrigCount = wks.GetSingleChannelValue("Alarm 9 Trigger Count")
        a10TrigCount = wks.GetSingleChannelValue("Alarm 10 Trigger Count")
        a11TrigCount = wks.GetSingleChannelValue("Alarm 11 Trigger Count")
        print("Alarm 9 Trigger Count =", a9TrigCount)
        print("Alarm 10 Trigger Count =", a10TrigCount)
        print("Alarm 11 Trigger Count =", a11TrigCount)

        assert ((a9TrigCount == x) and (a10TrigCount == x)
                and (a11TrigCount
                     == x)), "Alarms failed to trigger Alarm Procedures!"
        print("Alarm procedures successfully triggered")

        print("Test PASSED")
    finally:
        #Always stop the engine.
        wks.StopWorkspaceFile("")
コード例 #9
0
def test_stimulus_api_legacy():

    wks = NIVeriStand.Workspace()
    print("")
    SYSDEFFILE = os.path.join(configutilities.get_autotest_projects_path(),
                              "TestStimulusAPI", "TestStimulusAPI.nivssdf")
    print("Deploying %s" % SYSDEFFILE)
    wks.RunWorkspaceFile(SYSDEFFILE, 0, 1, 60000, "", "")

    try:
        #Verify the TEST_ID var on test file.
        test_ID = wks.GetSingleChannelValue("TEST_ID")
        assert (test_ID == TEST_ID), "Deployed wrong test file"

        STIMULUSPROFILES_DIR = os.path.join(
            configutilities.get_autotest_projects_path(), "TestStimulusAPI")
        AutoStepTestStimulusAPI = os.path.join(
            STIMULUSPROFILES_DIR, "AutoStepTestStimulusAPI.nivstest")

        stimTest1 = NIVeriStand.Stimulus()
        stimTest2 = NIVeriStand.Stimulus()

        print("Test Reserve and Unreserve")
        stimTest1.ReserveStimulusProfileManager()
        print("Done reserving stimulus test 1")
        with pytest.raises(NIVeriStandException):
            stimTest2.ReserveStimulusProfileManager()
        print("Start unreserving")
        stimTest1.UnreserveStimulusProfileManager()
        stimTest2.ReserveStimulusProfileManager()
        stimTest2.UnreserveStimulusProfileManager()

        print("Run and get test state")
        result = stimTest1.GetStimulusProfileManagerState()
        assert (result == 0), "Test state not expected"

        print("Running Test " + AutoStepTestStimulusAPI)
        stimTest1.RunStimulusProfile(AutoStepTestStimulusAPI,
                                     STIMULUSPROFILES_DIR, 60000, 1, 1)
        sleep()
        result = stimTest1.GetStimulusProfileManagerState()
        assert (result == 2), "Test expected to started already"
        print("Test Getting back the file we are running")
        file = stimTest1.GetStimulusProfileFile()
        assert (file == AutoStepTestStimulusAPI), "Test file are not expected"

        print("Wait untill stimulus is done")
        time.sleep(40)
        result = stimTest1.GetStimulusProfileResult()

        result = stimTest1.GetStimulusProfileManagerState()
        assert (result == 0), "Test should have finished by now"

        stimTest1.RunStimulusProfile(AutoStepTestStimulusAPI,
                                     STIMULUSPROFILES_DIR, 60000, 1, 1)
        sleep()
        result = stimTest1.GetStimulusProfileManagerState()
        assert (result == 2), "Test expected to started already"

        stimTest1.StopStimulusProfile()
        sleep()
        result = stimTest1.GetStimulusProfileManagerState()
        assert (result == 0), "Test expected to stop"

        print("Test PASSED")
        print("")

    finally:
        wks.StopWorkspaceFile("")
コード例 #10
0
def test_alarm_api():
    wks = NIVeriStand.Workspace()
    print("")
    SYSDEFINITION = os.path.join(configutilities.get_autotest_projects_path(),
                                 "TestAlarmAPI", "TestAlarmAPI.nivssdf")
    print("Deploying %s" % SYSDEFINITION)
    wks.RunWorkspaceFile(SYSDEFINITION, 0, 1, 80000, "", "")

    try:
        test_ID = wks.GetSingleChannelValue("TEST_ID")
        assert (test_ID == TEST_ID), "Deployed wrong test file"

        print("Testing Alarm manager functionality")
        alarmMgr = NIVeriStand.AlarmManager()
        result = alarmMgr.GetAlarmList()
        assert (len(result) == 3), "Expected 3 alarms returned from the system"

        print("Testing support for deprecated GetAlarmStatus() function")
        result = alarmMgr.GetAlarmsStatus()
        print(result)
        assert (
            result['HighAlarm'] == 0), "Not expecting any alarm to be trigger"
        assert (result['MediumAlarm'] == 0
                ), "Not expecting any alarm to be trigger"
        assert (
            result['LowAlarm'] == 0), "Not expecting any alarm to be trigger"

        print("Testing Read Alarm Data")
        alarms = ('Alarm Group/AlarmTest1', 'Alarm Group/AlarmTest2',
                  'ConstantBoundAlarm')
        result = alarmMgr.GetMultipleAlarmsData(alarms, 60000)
        print("Verifying alarm data returned")
        assert (len(result) == 3), "Expected to get 3 alarms data back"

        print("Verifying Alarm Data")
        alarmTest1 = result[0]
        alarmTest2 = result[1]
        constantBoundAlarm = result[2]
        print(alarmTest1)
        assert (alarmTest1['WatchChannel'] == r"AlarmChannel1"
                ), "Fail to confirm alarm channel"
        assert ((alarmTest1['HighLimitIsConstant'] == 0) |
                (alarmTest1['HighLimitChannel']
                 == r"AlarmChannel1High")), "Fail to confirm high limit"
        assert ((alarmTest1['LowLimitIsConstant'] == 0) |
                (alarmTest1['LowLimitChannel']
                 == r"AlarmChannel1Low")), "Fail to confirm low limit"
        assert (alarmTest1['DelayDuration'] == 0.5
                ), "Fail to confirm delay duration"
        assert (alarmTest1['ProcedureName'] == r"ResetAlarmTest1"
                ), "Fail to confirm procedure"
        assert (alarmTest1['Priority'] == 2
                ), "Fail to confirm priority enum (deprecated)"
        # TODO: PriorityNumber not found key
        assert (alarmTest1['PriorityNumber'] == 5
                ), "Fail to confirm priority number"
        assert (alarmTest1['State'] == 1), "Fail to confirm state"
        assert (alarmTest1['Mode'] == 0), "Fail to confirm mode"
        # TODO: GroupNumber not found key
        assert (alarmTest1['GroupNumber'] == 1), "Fail to confirm group number"

        print("Test alarm interface")
        BoundAlarmRef = NIVeriStand.Alarm('ConstantBoundAlarm')
        result = BoundAlarmRef.GetAlarmData(30000)
        assert (result == constantBoundAlarm
                ), "Alarm data from alarm interface differ from alarm manager"

        print("Test modifying alarm data")
        modAlarmData = result
        modAlarmData['HighLimit'] = 3
        modAlarmData['LowLimit'] = -3

        print("Testing support for deprecated SetAlarmData() function")
        BoundAlarmRef.SetAlarmData(modAlarmData)
        sleep()
        result = BoundAlarmRef.GetAlarmData(30000)
        assert (result == modAlarmData
                ), "Alarm data set cannot be confirmed on deprecated function"

        # TODO: SetAlarmData2 not implemented.
        print("Testing support using SetAlarmData2() function")
        BoundAlarmRef.SetAlarmData2(modAlarmData)
        sleep()
        result = BoundAlarmRef.GetAlarmData(30000)
        assert (result == modAlarmData
                ), "Alarm data set cannot be confirmed on function"

        print("Test modifying alarm state and mode")
        BoundAlarmRef.SetEnabledState(0)
        #indicate only
        BoundAlarmRef.SetAlarmMode(1)
        sleep()

        result = BoundAlarmRef.GetAlarmData(30000)
        assert (result['State'] == 0), "Alarm Mode is wrong"

        assert (result['Mode'] == 1), "Alarm Mode is wrong"

        BoundAlarmRef.SetEnabledState(1)
        BoundAlarmRef.SetAlarmMode(0)
        sleep()
        sleep()
        wks.SetSingleChannelValue(r"Controller/User Channel/AlarmChannel1", 20)
        wks.SetSingleChannelValue(r"Controller/User Channel/AlarmChannel2", 10)
        sleep()
        sleep()

        print("Testing alarm mutual exclusion within a group")
        AlarmTest2Ref = NIVeriStand.Alarm('Alarm Group/AlarmTest2')
        AlarmTest1Ref = NIVeriStand.Alarm('Alarm Group/AlarmTest1')
        result = AlarmTest1Ref.GetAlarmData(30000)
        result2 = AlarmTest2Ref.GetAlarmData(30000)
        assert (result['State'] == 2), "Alarm should be tripped"
        assert (
            result2['State'] != 2
        ), "Alarm should not be running due to an execution of a higher priority."

        print("Testing Alarm Execution Across Groups")
        result = BoundAlarmRef.GetAlarmData(30000)
        result2 = AlarmTest2Ref.GetAlarmData(30000)
        assert ((result['State'] == 2)
                and (result2['State']
                     == 2)), " Two alarms should be tripped simulteneously."

        print("Test PASSED")
        print("")

    finally:
        wks.StopWorkspaceFile("")
コード例 #11
0
def test_fault_api_legacy():
    TEST_ID = 1879

    wks = NIVeriStand.Workspace()
    print("")
    SYSDEFFILE = os.path.join(configutilities.get_autotest_projects_path(),
                              "FaultChannelTest", "FaultChannelTest.nivssdf")
    print("Deploying %s" % SYSDEFFILE)
    wks.RunWorkspaceFile(SYSDEFFILE,0,1,60000,"","")

    try:
        #Verify the TEST_ID var on test file.
        test_ID = wks.GetSingleChannelValue("TEST_ID")
        assert(test_ID == TEST_ID), "Deployed wrong test file"

        faultChannel0 = 'FaultChannel0'

        chanfault = NIVeriStand.ChannelFaultManager()
        result = chanfault.GetFaultList()
        assert(len(result) == 0), "No channel should be faulted on startup"

        result = chanfault.GetFaultValue(faultChannel0)
        assert(result['faulted'] == 0), "Channel should not be faulted"

        nonFaultValue = wks.GetSingleChannelValue(faultChannel0)
        channel = chanfault.SetFaultValue(faultChannel0,512)
        sleep()
        faultedValue = wks.GetSingleChannelValue(faultChannel0)
        assert(faultedValue == 512), "Channel is faulted and not returning expected value"

        result = chanfault.GetFaultValue(faultChannel0)
        assert(result['faulted'] == 1), "Channel should have been faulted"

        chanfault.ClearFault(faultChannel0)
        sleep()
        newValue = wks.GetSingleChannelValue(faultChannel0)
        assert(newValue == nonFaultValue), "Channel should have return to original value"

        result = chanfault.GetFaultList()
        assert(len(result) == 0), "All channel should have been cleared"

        print("Test multiple channel faults")
        FaultValues= [('FaultChannel2',12231),('FaultChannel4',123235),('FaultChannel5',1238945)]
        checkChannel = []
        checkValues = []
        for toFault in FaultValues:
            print("Set Fault %s"  % (toFault[0]))
            chanfault.SetFaultValue(toFault[0],toFault[1])
            checkChannel.append(toFault[0])
            checkValues.append(toFault[1])
            wks.SetSingleChannelValue(toFault[0],11)
        sleep()
        result = chanfault.GetFaultList()
        assert(result == FaultValues), "Channel faulted does not match"
        chanValues = wks.GetMultipleChannelValues(tuple(checkChannel))
        assert(checkValues == chanValues), "Get Channel Value differ from Get Fault List result"
        print("Done test multiple channel faults")

        chanfault.ClearAllFaults()
        result = chanfault.GetFaultList()
        assert(len(result) == 0), "Fault channels should have been cleard"

        chanfault.ClearAllFaults()

        print("Test PASSED")
    finally:
        wks.StopWorkspaceFile("")
コード例 #12
0
def test_calculated_channel_latch_legacy():
    wks = NIVeriStand.Workspace()
    print("")
    SYSDEFFILE = os.path.join(configutilities.get_autotest_projects_path(),
                              "CalcChanLatchTest", "CalcChanLatchTest.nivssdf")
    print("Deploying %s" % SYSDEFFILE)
    wks.RunWorkspaceFile(SYSDEFFILE, 0, 1, 60000, "", "")

    try:
        # Compute Machine Epsilon: The smallest floating point number when
        # added to one is greater than one.

        eps = 1.0
        while ((1.0 + eps) > 1.0):
            epsLast = eps
            eps = eps / 2.0
        eps = epsLast
        print("Machine Epsilon = %g" % (eps))

        # This test suite latches the first eleven data points into conditional
        # calculated channels. We must wait for the counter to become 10. The
        # steps are enumerated 0..10 (eleven points).

        result = 0
        while (result < 10):
            sleep()
            result = wks.GetSingleChannelValue("Counter")

        # This test is sensitive to the system Delta T. Ensure that it is 0.1.

        print("Checking (Delta T)=0.1")
        expectedResult = 0.1
        result = wks.GetSingleChannelValue("Delta T")
        assert (result == expectedResult
                ), "Delta T (%g) does not match expected (%g)" % (
                    result, expectedResult)
        print("...Pass")

        print("Checking first 11 latched time points")
        channels = ("Latch_T_0", "Latch_T_1", "Latch_T_2", "Latch_T_3",
                    "Latch_T_4", "Latch_T_5", "Latch_T_6", "Latch_T_7",
                    "Latch_T_8", "Latch_T_9", "Latch_T_10")

        results = wks.GetMultipleChannelValues(channels)

        expectedResults = [
            0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0
        ]
        abstol = eps
        reltol = math.sqrt(eps)
        for i in range(0, len(expectedResults)):
            tol = abstol + reltol * abs(expectedResult)
            assert (
                expectedResults[i] - tol <= results[i] <= expectedResults[i] +
                tol), "%s => Expected %g. Return Value %g not expected." % (
                    channels[i], expectedResults[i], results[i])
        print("...Pass")

        channels = ("P", "Q", "R", "S")
        results = wks.GetMultipleChannelValues(channels)

        print("Input waveform: X = P*sin(Q*(Time+DeltaT) + R) + S")
        print("with P=%g, Q=%g, R=%g, S=%g" %
              (results[0], results[1], results[2], results[3]))

        print("Testing 11 stage latch of the first 11 points")

        channels = ("Latch_fT_0", "Latch_fT_1", "Latch_fT_2", "Latch_fT_3",
                    "Latch_fT_4", "Latch_fT_5", "Latch_fT_6", "Latch_fT_7",
                    "Latch_fT_8", "Latch_fT_9", "Latch_fT_10")
        results = wks.GetMultipleChannelValues(channels)

        channels = ("Exact_fT_0", "Exact_fT_1", "Exact_fT_2", "Exact_fT_3",
                    "Exact_fT_4", "Exact_fT_5", "Exact_fT_6", "Exact_fT_7",
                    "Exact_fT_8", "Exact_fT_9", "Exact_fT_10")
        expectedResults = wks.GetMultipleChannelValues(channels)

        for i in range(0, len(expectedResults)):
            assert (results[i] == expectedResults[i]
                    ), "%s => Expected %g. Return Value %g not expected." % (
                        channels[i], expectedResults[i], results[i])
        print("...Pass")

        print("Test PASSED")
        print("")
    finally:
        wks.StopWorkspaceFile("")
コード例 #13
0
def test_calculated_channel_legacy():
    TEST_ID = 1112
    wks = NIVeriStand.Workspace()
    print("")
    SYSDEFINITION = os.path.join(configutilities.get_autotest_projects_path(),
                                 "CalculatedChannelTest",
                                 "CalculatedChannelTest.nivssdf")
    print("Deploying %s" % SYSDEFINITION)
    wks.RunWorkspaceFile(SYSDEFINITION, 0, 1, 60000, "", "")

    try:
        #Verify the TEST_ID var on test file.
        test_ID = wks.GetSingleChannelValue("TEST_ID")
        assert (test_ID == TEST_ID), "Deployed wrong test file"

        print("Checking Get Constant")
        channels = ("MaxConstant", "MinConstant")
        expectedResults = [5, -5]
        results = wks.GetMultipleChannelValues(channels)
        for i in range(0, len(expectedResults)):
            assert (results[i] == expectedResults[i]
                    ), "%s Expected %f Return Value %f not expected" % (
                        channels[i], expectedResults[i], results[i])

        print("Checking Max Min Mode")
        channels = ("MaxUV1", "MaxUV2", "MinUV1", "MinUV2")
        channelsValues = (-1000, -1000.1, 1000, 1000.1)
        wks.SetMultipleChannelValues(channels, channelsValues)
        sleep()
        #verifying the value get set on these channels
        results = wks.GetMultipleChannelValues(channels)
        for i in range(0, len(results)):
            assert (results[i] == channelsValues[i]
                    ), "%s Expected %f Return Value %f not expected" % (
                        channels[i], channelsValues[i], results[i])
        #verifying the new max min value is correct
        outchannels = ("MaxUV1ToConstVal5", "MaxUV2ToConstVal10",
                       "MinUV1ToConstVal2", "MinUV2ToConstVal3", "Max2Var",
                       "Min2Var")
        expectedResults = [5, 10, 2, 3, -1000, 1000]
        results = wks.GetMultipleChannelValues(outchannels)
        for i in range(0, len(expectedResults)):
            assert (results[i] == expectedResults[i]
                    ), "%s Expected %f Return Value %f not expected" % (
                        outchannels[i], expectedResults[i], results[i])
        #verifying that the new max min value take the value of the variable.
        channelsValues = (10, 15, 1, -1)
        wks.SetMultipleChannelValues(channels, channelsValues)
        sleep()
        results = wks.GetMultipleChannelValues(outchannels)
        expectedResults = [10, 15, 1, -1, 15, -1]
        for i in range(0, len(expectedResults)):
            assert (results[i] == expectedResults[i]
                    ), "%s Expected %f Return Value %f values not expected" % (
                        outchannels[i], expectedResults[i], results[i])

        print(
            "Checking Acceleration Mode - assuming delta T for low priority loop is .2"
        )
        channels = ("AccelerationOnDistanceChannel", "VelocityChan",
                    "DistanceChannel", "VelocityChanPrevIteration",
                    "DistanceChannelPrevIteration")
        results = wks.GetMultipleChannelValues(channels)
        accelerationCalculated = round((results[1] - results[3]) / .2)
        assert (accelerationCalculated == round(results[0])
                ), "%s Expected %f Return Value %f value not expected" % (
                    channels[0], accelerationCalculated, results[0])

        print("Computing velocity")
        velocityCalculated = round((results[2] - results[4]) / 0.2)
        assert (velocityCalculated == round(results[1])
                ), "%s Expected %f Return Value %f value not expected" % (
                    channels[1], velocityCalculated, results[1])

        print("Checking Averaging Mode")
        #Get a list of the last 6 points.  if we take a sum of the complete 3 elements we are bound to find the correct average.
        channels = ("3PointAverager", "ChanToAverage", "ChanToAverageMin1Step",
                    "ChanToAverageMin2Step", "ChanToAverageMin3Step",
                    "ChanToAverageMin4Step", "ChanToAverageMin5Step",
                    "ChanToAverageMin6Step")
        results = wks.GetMultipleChannelValues(channels)

        i = 0
        for channel in channels:
            print(("%s value is %f" % (channel, round(results[i], 3))))
            i = i + 1

        possibleAverages = []
        for i in range(0, 4):
            temp = 0
            for y in range(0, 3):
                temp = temp + results[1 + i + y]
            possibleAverages.append(temp / 3)

        found = 0
        for potentialAverage in possibleAverages:
            print(("Potential Averages %f" % round(potentialAverage, 3)))
            if (round(potentialAverage, 3) == round(results[0], 3)):
                found = 1

        assert (found == 1), "Fail to auto check averaging module"

        print("Test PASSED")

    finally:
        wks.StopWorkspaceFile("")
コード例 #14
0
def test_worspace_api():
    TEST_ID = 124123

    wks = NIVeriStand.Workspace()
    print("")
    SYSDEFINITION = os.path.join(configutilities.get_autotest_projects_path(),
                                 "TestWorkspaceAPI",
                                 "TestWorkspaceAPI.nivssdf")
    print("Deploying %s" % SYSDEFINITION)
    wks.RunWorkspaceFile(SYSDEFINITION, 0, 1, 80000, "", "")

    try:
        # Verify the TEST_ID var on test file.
        test_ID = wks.GetSingleChannelValue("TEST_ID")
        assert test_ID == TEST_ID, "Deployed wrong test file"

        result = wks.GetEngineState()
        assert result[
            'systemdefinition_file'] == SYSDEFINITION, "Workspace file is not the same as deployed"

        wks.LockWorkspaceFile("", 'LOCK_PASSWORD')
        with pytest.raises(NIVeriStandException):
            wks.StopWorkspaceFile("")

        with pytest.raises(NIVeriStandException):
            wks.UnlockWorkspaceFile("")

        wks.UnlockWorkspaceFile('LOCK_PASSWORD')

        print("Get System Node Childern")
        result = wks.GetSystemNodeChildren(
            r"Controller/Simulation Models/Models/sinewave/Execution")
        assert len(result) == 4, "Model Exceution should return 4 nodes"

        print("Get System Node Channel List")
        result = wks.GetSystemNodeChannelList('')
        assert len(
            result) >= 100, "At the very least we always have 100 channel"
        print(result[2])

        print("Get Alias List")
        result = wks.GetAliasList()
        assert len(
            result
        ) == 3, "Expected 3 alias but get something different %d" % len(result)
        assert result[
            'TEST_ID'] == r"Targets Section/Controller/User Channel/TEST_ID", "Expected an alias for TEST_ID incorrect"

        nodes = ('Controller/User Channel', 'Controller/User Channel/TEST_ID')
        result = wks.GetMultipleSystemNodesData(nodes)
        assert len(result) == 2, "Ask for 2 node info get no info"

        print("Validating channels")
        section = result[0]
        print(section)
        assert section['isChannel'] is False, "Expecting a section to returned"

        testNode = result[1]
        print(testNode)
        assert testNode['isChannel'] is True, "Expecteing a node to returned"

        print("Test PASSED")
        print("")

        # Report your result here
        assert True
    finally:
        wks.StopWorkspaceFile("")
コード例 #15
0
def test_alarm2_api():
    wks = NIVeriStand.Workspace2("localhost")
    print("")
    SYSDEFINITION = os.path.join(configutilities.get_autotest_projects_path(),
                                 "TestAlarmAPI", "TestAlarmAPI.nivssdf")
    print("Deploying %s" % SYSDEFINITION)
    wks.ConnectToSystem(SYSDEFINITION, 1, 80000)

    try:
        # Verify the TEST_ID var on test file.
        test_ID = wks.GetSingleChannelValue("TEST_ID")
        assert (test_ID == TEST_ID), "Deployed wrong test file"

        print("Testing Alarm manager Get Alarm List")
        alarmMgr = NIVeriStand.AlarmManager2("localhost")
        result = alarmMgr.GetAlarmList("Controller")
        assert (len(result) == 3), "Expected 3 alarms returned from the system"

        with pytest.raises(NIVeriStandException):
            alarmMgr.GetAlarmList("Invalid Controller")

        print("Testing Alarm manager Read Alarm Data")
        alarms = ('Alarm Group/AlarmTest1', 'Alarm Group/AlarmTest2',
                  'ConstantBoundAlarm')
        result = alarmMgr.GetMultipleAlarmsData("Controller", alarms, 60000)
        print("Verifying alarm data returned")
        assert (len(result) == 3), "Expected to get 3 alarms data back"

        with pytest.raises(NIVeriStandException):
            alarmMgr.GetMultipleAlarmsData("INVALID CONTROLLER", alarms, 60000)

        print("Verifying Alarm Data")
        alarmTest1 = result[0]
        alarmTest2 = result[1]
        constantBoundAlarm = result[2]
        print(alarmTest1)
        assert (alarmTest1['WatchChannel'] == r"Aliases/AlarmChannel1"
                ), "Fail to confirm alarm channel"
        assert ((alarmTest1['HighLimitIsConstant'] == 0)
                or (alarmTest1['HighLimitChannel']
                    == r"AlarmChannel1High")), "Fail to confirm high limit"
        assert ((alarmTest1['LowLimitIsConstant'] == 0)
                or (alarmTest1['LowLimitChannel']
                    == r"AlarmChannel1Low")), "Fail to confirm low limit"
        assert (alarmTest1['DelayDuration'] == 0.5
                ), "Fail to confirm delay duration"
        assert (alarmTest1['ProcedureName'] == r"ResetAlarmTest1"
                ), "Fail to confirm procedure"
        assert (alarmTest1['Priority'] == 2
                ), "Fail to confirm priority (deprecated)"
        assert (alarmTest1['PriorityNumber'] == 5
                ), "Fail to confirm priority number"
        assert (alarmTest1['State'] == 1), "Fail to confirm state"
        assert (alarmTest1['Mode'] == 0), "Fail to confirm mode"
        assert (alarmTest1['GroupNumber'] == 1), "Fail to confirm alarm group"

        print("Test alarm interface")

        print("Test Alarm constructor mode")
        Constructor1 = NIVeriStand.Alarm('Alarm Group/Alarm Test2')
        Constructor2 = NIVeriStand.Alarm('Alarm Group/Alarm Test2',
                                         'Controller')
        Constructor3 = NIVeriStand.Alarm('Alarm Group/Alarm Test2', None,
                                         'localhost')
        Constructor4 = NIVeriStand.Alarm('Alarm Group/Alarm Test2',
                                         'Controller', 'localhost')

        print("Test access to alarm")
        BoundAlarmRef = NIVeriStand.Alarm('ConstantBoundAlarm', 'Controller',
                                          'localhost')
        result = BoundAlarmRef.GetAlarmData(30000)
        assert (result == constantBoundAlarm
                ), "Alarm data from alarm interface differ from alarm manager"

        print("Test modifying alarm data")
        modAlarmData = result
        modAlarmData['HighLimit'] = 3
        modAlarmData['LowLimit'] = -3
        BoundAlarmRef.SetAlarmData2(modAlarmData)
        sleep()
        result = BoundAlarmRef.GetAlarmData(30000)
        assert (result == modAlarmData), "Alarm data set cannot be confirmed"

        print("Test modifying alarm state and mode")
        BoundAlarmRef.SetEnabledState(0)
        #indicate only
        BoundAlarmRef.SetAlarmMode(1)
        sleep()

        result = BoundAlarmRef.GetAlarmData(30000)
        assert (result['State'] == 0), "Alarm Mode is wrong"

        assert (result['Mode'] == 1), "Alarm Mode is wrong"

        BoundAlarmRef.SetEnabledState(1)
        BoundAlarmRef.SetAlarmMode(0)
        sleep()
        sleep()
        wks.SetSingleChannelValue(r"Controller/User Channel/AlarmChannel1", 20)
        wks.SetSingleChannelValue(r"Controller/User Channel/AlarmChannel2", 10)
        sleep()
        sleep()

        print("Testing alarm mutual exclusion within a group")
        AlarmTest2Ref = NIVeriStand.Alarm('Alarm Group/AlarmTest2')
        AlarmTest1Ref = NIVeriStand.Alarm('Alarm Group/AlarmTest1')
        result = AlarmTest1Ref.GetAlarmData(30000)
        result2 = AlarmTest2Ref.GetAlarmData(30000)
        assert (result['State'] == 2), "Alarm should be tripped"
        assert (
            result2['State'] != 2
        ), "Alarm should not be running due to an execution of a higher priority."

        print("Testing Alarm Execution Across Groups")
        result = BoundAlarmRef.GetAlarmData(30000)
        result2 = AlarmTest2Ref.GetAlarmData(30000)
        assert ((result['State'] == 2)
                and (result2['State']
                     == 2)), " Two alarms should be tripped simulteneously."

        print("Test PASSED")
        print("")
    finally:
        wks.DisconnectFromSystem("", 1)
コード例 #16
0
def test_calculated_channel_ut_legacy():
    wks = NIVeriStand.Workspace()
    print("")
    SYSDEFFILE = os.path.join(configutilities.get_autotest_projects_path(),
                              "CalcChanUnitTest", "CalcChanUnitTest.nivssdf")
    print("Deploying %s" % SYSDEFFILE)
    wks.RunWorkspaceFile(SYSDEFFILE, 0, 1, 60000, "", "")

    try:
        # Compute Machine Epsilon: The smallest floating point number when
        # added to one is greater than one.

        eps = 1.0
        while ((1.0 + eps) > 1.0):
            epsLast = eps
            eps = eps / 2.0
        eps = epsLast
        print("Machine Epsilon = %g" % (eps))

        # We will be testing NaNs and Infs as well

        NaN = float('nan')
        Inf = float('inf')

        # Sleep until the first Time (a calculated channel) is greater than
        # zero. This will be either the first or second time the calculated
        # channels are computed. In VeriStand 2010, the first time the
        # channels are calculated is at Delta T. At any rate, we do not want
        # to proceed until we have performed some calculations.

        result = 0
        while (result <= 0):
            sleep()
            result = wks.GetSingleChannelValue("Time")

        # All formulas in VeriStand must have input values. Zero is computed
        # so that it can be used as an input to certain formulas. The way
        # it is computed, it should be precisely zero. No epsilon logic should
        # be used to ensure that it is in fact zero.

        print("Checking Zero channel is 0.0")
        expectedResult = 0.
        result = wks.GetSingleChannelValue("Zero")
        assert (result == expectedResult
                ), "Time-Time (%g) does not match calculated (%g)" % (
                    expectedResult, result)
        print("...Pass")

        # Test functions of one variable

        TestFct = [
            "abs", "int", "sign", "sin", "cos", "tan", "asin", "acos", "atan",
            "exp", "sqrt"
        ]

        TestChan = [
            "Abs(X)", "Int(X)", "Sign(X)", "Sin(X)", "Cos(X)", "Tan(X)",
            "Asin(X)", "Acos(X)", "Atan(X)", "Exp(X)", "Sqrt(X)"
        ]

        # Input and expected output values for the calculated channels

        ## NOTE: abs(-Inf) == Inf in Xmath
        ## NOTE: abs( Inf) == Inf in Xmath

        absIn = [-1., 0., 1., NaN, Inf, Inf]
        absOut = [1., 0., 1., NaN, NaN, NaN]

        ## NOTE: (int)(-2.718) == -2   in the c language
        ## NOTE: (int)(-3.142) == -3   in the c language
        ## NOTE: (int)(-1.500) == -1   in the c language
        ## NOTE: (int)(-1.500) == -1   in the c language
        ## NOTE: (int)(-Inf)   == -Inf in Xmath
        ## NOTE: (int)( Inf)   ==  Inf in Xmath

        intIn = [-math.pi, -math.e, -1.5, 1.5, math.e, math.pi, NaN, -Inf, Inf]
        intOut = [-4., -3., -2., 1., 2., 3., NaN, NaN, NaN]

        signIn = [-math.pi, 0., math.pi, NaN, -Inf, Inf]
        signOut = [-1., 0., 1., NaN, -1., 1.]

        sinIn = [-math.pi / 2., math.pi / 6., math.pi / 2., NaN, -Inf, Inf]
        sinOut = [-1., 0.5, 1., NaN, NaN, NaN]

        cosIn = [math.pi, math.pi / 3., 0., NaN, -Inf, Inf]
        cosOut = [-1., 0.5, 1., NaN, NaN, NaN]

        tanIn = [math.pi, math.pi / 4., 0., NaN, -Inf, Inf]
        tanOut = [0., 1., 0., NaN, NaN, NaN]

        asinIn = [-1., 0., 1., NaN, -Inf, Inf]
        asinOut = [-math.pi / 2., 0., math.pi / 2., NaN, NaN, NaN]

        acosIn = [-1., 0., 1., NaN, -Inf, Inf]
        acosOut = [math.pi, math.pi / 2., 0., NaN, NaN, NaN]

        atanIn = [-1., 0., 1., NaN, -Inf, Inf]
        atanOut = [
            -math.pi / 4., 0., math.pi / 4., NaN, -math.pi / 2., math.pi / 2.
        ]

        ## NOTE: exp(Inf) == Inf in Xmath

        expIn = [-1., 0., 1., NaN, -Inf, Inf]
        expOut = [1. / math.e, 1., math.e, NaN, 0., NaN]

        ## NOTE: sqrt(Inf) == Inf in Xmath

        sqrtIn = [0., 1., 2., NaN, -Inf, Inf]
        sqrtOut = [0., 1., math.sqrt(2.), NaN, NaN, NaN]

        # Loop through the various calculated channels to test

        TestIn = (absIn, intIn, signIn, sinIn, cosIn, tanIn, asinIn, acosIn,
                  atanIn, expIn, sqrtIn)

        TestOut = (absOut, intOut, signOut, sinOut, cosOut, tanOut, asinOut,
                   acosOut, atanOut, expOut, sqrtOut)

        abstol = eps
        reltol = math.sqrt(eps)

        for j in range(0, len(TestOut)):
            Fct = TestFct[j]
            Chan = TestChan[j]
            In = TestIn[j]
            Out = TestOut[j]

            for i in range(0, len(Out)):
                print("Testing: %g = %s(%g) ..." % (Out[i], Fct, In[i]))
                wks.SetSingleChannelValue("X", In[i])
                sleep()
                result = wks.GetSingleChannelValue(Chan)

                if (math.isnan(Out[i]) and not math.isnan(result)):
                    assert False, "%s(%g): Expected %g Return Value %g not expected" % (
                        Chan, In[i], Out[i], result)

                elif (math.isinf(Out[i]) and not math.isinf(result)):
                    assert False, "%s(%g): Expected %g Return Value %g not expected" % (
                        Chan, In[i], Out[i], result)

                elif (math.isinf(Out[i]) and math.isinf(result)):
                    if (math.copysign(1, Out[i])
                            and not math.copysign(1, result)):
                        assert False, "%s(%g): Expected %g Return Value %g not expected" % (
                            Chan, In[i], Out[i], result)
                else:
                    tol = abstol + reltol * abs(Out[i])
                    if ((result < Out[i] - tol) | (result > Out[i] + tol)):
                        assert False, "%s(%g): Expected %g Return Value %g not expected" % (
                            Chan, In[i], Out[i], result)
                    else:
                        print("...Pass")

        # Test operators: functions of two variables

        ## NOTE: The following formulas can be entered in the SystemExplorer
        ##       and do not report parsing errors, but, they do not deploy.
        ##           X * -Y
        ##          -X * -Y
        ##           X / -Y
        ##          -X / -Y
        ##           X ^ -Y
        ##          -X ^ -Y
    ##
    ## NOTE: The SystemExplorer allows you to create aliases with '/' in
    ##       them even though this interferes with the path description.
    ##       Rejected by the API:
    ##           X / Y
    ##          -X / Y

        TestMinus1 = [
            "", "-", "", "-", "", "-", "", "-", "", "-", "", "-", "", "-"
        ]

        TestMinus2 = [
            "", "", "-", "-", "", "", "-", "-", "", "", "", "", "", ""
        ]

        TestOp = [
            "+", "+", "+", "+", "-", "-", "-", "-", "*", "*", "/", "/", "^",
            "^"
        ]

        TestChan = [
            "X + Y", "-X + Y", "X + -Y", "-X + -Y", "X - Y", "-X - Y",
            "X - -Y", "-X - -Y", "X * Y", "-X * Y", "X div Y", "-X div Y",
            "X ^ Y", "-X ^ Y"
        ]

        # Input and expected output values for the calculated channels

        # Inf + Inf should be Inf

        XplusYIn1 = [-5., 0., 2., Inf, Inf]
        XplusYIn2 = [-2., 0., 5., Inf, -Inf]
        XplusYOut = [-7., 0., 7., NaN, NaN]

        minusXplusYIn1 = [-5., 0., 2.]
        minusXplusYIn2 = [-2., 0., 5.]
        minusXplusYOut = [3., 0., 3.]

        XplusMinusYIn1 = [-5., 0., 2.]
        XplusMinusYIn2 = [-2., 0., 5.]
        XplusMinusYOut = [-3., 0., -3.]

        minusXplusMinusYIn1 = [-5., 0., 2.]
        minusXplusMinusYIn2 = [-2., 0., 5.]
        minusXplusMinusYOut = [7., 0., -7.]

        XminusYIn1 = [-5., 0., 2., Inf]
        XminusYIn2 = [-2., 0., 5., Inf]
        XminusYOut = [-3., 0., -3., NaN]

        minusXminusYIn1 = [-5., 0., 2.]
        minusXminusYIn2 = [-2., 0., 5.]
        minusXminusYOut = [7., 0., -7.]

        XminusMinusYIn1 = [-5., 0., 2.]
        XminusMinusYIn2 = [-2., 0., 5.]
        XminusMinusYOut = [-7., 0., 7.]

        minusXminusMinusYIn1 = [-5., 0., 2.]
        minusXminusMinusYIn2 = [-2., 0., 5.]
        minusXminusMinusYOut = [3., 0., 3.]

        # (2 *  Inf) should be  Inf
        # (2 * -Inf) should be -Inf

        XtimesYIn1 = [-5., 0., 2., 0., 2., 0., 2.]
        XtimesYIn2 = [-2., 0., 5., 24., Inf, Inf, -Inf]
        XtimesYOut = [10., 0., 10., 0., NaN, NaN, NaN]

        minusXtimesYIn1 = [-5., 0., 2.]
        minusXtimesYIn2 = [-2., 0., 5.]
        minusXtimesYOut = [-10., 0., -10.]

        XdivYIn1 = [-5., 0., 2., 0., 1., -1.]
        XdivYIn2 = [-2., 0., 5., 24., 0., 0.]
        XdivYOut = [2.5, NaN, 0.4, 0., Inf, -Inf]

        minusXdivYIn1 = [-5., 0., 2., 0., 1., -1.]
        minusXdivYIn2 = [-2., 0., 5., 24., 0., 0.]
        minusXdivYOut = [-2.5, NaN, -0.4, 0., -Inf, Inf]

        # Most languages return NaN for 0^0

        XtoTheYIn1 = [-5., 0., 2.]
        XtoTheYIn2 = [-2., 0., 5.]
        XtoTheYOut = [.04, 1., 32.]

        # Most languages return NaN for -(0^0)

        minusXtoTheYIn1 = [-5., 0., 2., 1.]
        minusXtoTheYIn2 = [-2., 0., 5., 2.]
        minusXtoTheYOut = [-.04, -1., -32., -1.]

        # Loop through the various calculated channels to test

        TestIn1 = [
            XplusYIn1, minusXplusYIn1, XplusMinusYIn1, minusXplusMinusYIn1,
            XminusYIn1, minusXminusYIn1, XminusMinusYIn1, minusXminusMinusYIn1,
            XtimesYIn1, minusXtimesYIn1, XdivYIn1, minusXdivYIn1, XtoTheYIn1,
            minusXtoTheYIn1
        ]

        TestIn2 = [
            XplusYIn2, minusXplusYIn2, XplusMinusYIn2, minusXplusMinusYIn2,
            XminusYIn2, minusXminusYIn2, XminusMinusYIn2, minusXminusMinusYIn2,
            XtimesYIn2, minusXtimesYIn2, XdivYIn2, minusXdivYIn2, XtoTheYIn2,
            minusXtoTheYIn2
        ]

        TestOut = [
            XplusYOut, minusXplusYOut, XplusMinusYOut, minusXplusMinusYOut,
            XminusYOut, minusXminusYOut, XminusMinusYOut, minusXminusMinusYOut,
            XtimesYOut, minusXtimesYOut, XdivYOut, minusXdivYOut, XtoTheYOut,
            minusXtoTheYOut
        ]

        abstol = eps
        reltol = math.sqrt(eps)

        for j in range(0, len(TestOut)):
            Chan = TestChan[j]
            Out = TestOut[j]
            Minus1 = TestMinus1[j]
            In1 = TestIn1[j]
            Op = TestOp[j]
            Minus2 = TestMinus2[j]
            In2 = TestIn2[j]

            for i in range(0, len(Out)):
                print("Testing: %g = %s(%g) %s %s(%g) ..." %
                      (Out[i], Minus1, In1[i], Op, Minus2, In2[i]))
                wks.SetSingleChannelValue("X", In1[i])
                wks.SetSingleChannelValue("Y", In2[i])
                sleep()
                result = wks.GetSingleChannelValue(Chan)

                if (math.isnan(Out[i]) and not math.isnan(result)):
                    assert False, "%s(%g) %s %s(%g): Expected %g Return Value %g not expected" % (
                        Minus1, In1[i], Op, Minus2, In2[i], Out[i], result)

                elif (math.isinf(Out[i]) and not math.isinf(result)):
                    assert False, "%s(%g) %s %s(%g): Expected %g Return Value %g not expected" % (
                        Minus1, In1[i], Op, Minus2, In2[i], Out[i], result)

                elif (math.isinf(Out[i]) and math.isinf(result)):
                    if (math.copysign(1, Out[i])
                            and not math.copysign(1, result)):
                        assert False, "%s(%g) %s %s(%g): Expected %g Return Value %g not expected" % (
                            Minus1, In1[i], Op, Minus2, In2[i], Out[i], result)
                else:
                    tol = abstol + reltol * abs(Out[i])
                    if ((result < Out[i] - tol) | (result > Out[i] + tol)):
                        assert False, "%s(%g) %s %s(%g): Expected %g Return Value %g not expected" % (
                            Minus1, In1[i], Op, Minus2, In2[i], Out[i], result)
                    else:
                        print("...Pass")

    # All operations at the same precedence are evaluated left to right
    # Precedence (highest is 1)
    # 1 -- Functions
    # 2 -- Power
    # 3 -- Unary minus
    # 4 -- Multiplication and division
    # 5 -- Addition and subtraction

        print(" ")
        print("Checking Operator Precedence...")
        channels = ("P", "Q", "R", "X", "Y", "Z")
        channelsValues = (16.0, 9.0, 3.0, 5.0, 0.125, 4.0)
        wks.SetMultipleChannelValues(channels, channelsValues)
        sleep()

        print("Using:")
        for i in range(0, 6):
            print("   %s = %g" % (channels[i], channelsValues[i]))
        print(" ")

        channels = ("P+(Q*(R^2))", "(P*Q) + (X*Z)", "(P ^ Z) ^ Y",
                    "(Q div R) div Y", "(P - Q) - R",
                    "P + Z*((Q^4)^Y)*R + (P^2)^Y", "(P+R)*(Q^(Y*Z)+21)")

        expectedResults = [97.0, 164.0, 4.0, 24.0, 4.0, 54.0, 456.0]
        abstol = eps
        reltol = math.sqrt(eps)

        results = wks.GetMultipleChannelValues(channels)
        for i in range(0, len(expectedResults)):
            print("Testing: %g = %s ..." % (expectedResults[i], channels[i]))
            tol = abstol + reltol * abs(expectedResults[i])
            if ((results[i] < expectedResults[i] - tol) |
                (results[i] > expectedResults[i] + tol)):
                assert False, "%s: Expected %g Return Value %g not expected" % (
                    channels[i], expectedResults[i], results[i])
            else:
                print("...Pass")

        print("Test PASSED")

    finally:
        wks.StopWorkspaceFile("")
コード例 #17
0
def test_model_manager_legacy():
    #Getting a handle to the workspace API
    #Other API: Model, Alarm, AlarmManager, SoftwareForcing, ModelManager
    wks = NIVeriStand.Workspace()
    mmgr = NIVeriStand.ModelManager()

    SYSDEFINITION = os.path.join(configutilities.get_autotest_projects_path(),
                                 "ModelParameterAPI_AUTOTEST",
                                 "ModelParameterAPI_AUTOTEST.nivssdf")
    print("Deploying %s" % SYSDEFINITION)
    wks.RunWorkspaceFile(SYSDEFINITION, 0, 1, 60000, "", "")

    try:
        #Verify the TEST_ID var on test file.
        test_ID = wks.GetSingleChannelValue("TEST_ID")
        assert (test_ID == TEST_ID), "Deployed wrong test file"

        #declaring known and expected system values
        models = [
            "VectMod", "VectModWorkspace", "VectModWorkspace2", "clocktest",
            "sinewave"
        ]
        sinewaveParams = ["Amplitude", "Bias", "Frequency", "Gain", "Phase"]
        workspaceList = ["CONST1by5", "CONST2by3", "CONST5by1"]
        paramList = [
            "VectMod/1by5Param/Value", "VectMod/2by3Param/Value",
            "VectMod/5by1Param/Value"
        ]
        vectorParamList = workspaceList + paramList
        nonVectorParamList = sinewaveParams
        allParamInSystem = vectorParamList + nonVectorParamList
        CONST_1by5_initValue = [[1, 2, 3, 4, 5]]
        CONST_2by3_initValue = [[1, 2, 3], [10, 20, 30]]
        CONST_5by1_initValue = [[1], [2], [3], [4], [5]]
        CONST_VALUES = [
            CONST_1by5_initValue, CONST_2by3_initValue, CONST_5by1_initValue
        ]

        #Now do your test
        print("Testing GetModelList")
        sysmodels = mmgr.GetModelList()
        for model in models:
            assert model in sysmodels, "Missing model expected to be returned by system"

        print("Testing GetParameterList")
        sysparamlist = mmgr.GetParametersList()
        for param in allParamInSystem:
            assert param in sysparamlist, "Missing parameter expected to be returned by system %s" % param

        print("Testing Get Single Parameter Value")
        result = mmgr.GetSingleParameterValue(workspaceList[1])
        assert (
            result == CONST_1by5_initValue[0][0]
        ), "Error on getting single parameter value get %f and expected %d" % (
            result, CONST_1by5_initValue[0][0])

        print("Testing Get Multiple Parameter Values")
        result = mmgr.GetMultipleParameterValues(vectorParamList)
        expresult = [1, 1, 1, 1, 1, 1]
        for i in result:
            assert (
                i == 1
            ), "Error on getting multiple parameter value get %d and expected 1" % i

        print("Testing Get Parameter Vector Values")
        for i in range(0, 3):
            result = mmgr.GetParameterVectorValues(workspaceList[i])
            assert (result == CONST_VALUES[i]
                    ), "Error verifying vector values %s" % workspaceList[i]

        print("Testing Get Parameter Vector Values 2")
        for i in range(0, 3):
            result = mmgr.GetParameterVectorValues(paramList[i])
            assert (result == CONST_VALUES[i]
                    ), "Error verifying vector values %s" % paramList[i]

        print("Test Set Single Parameter Value")
        for param in nonVectorParamList:
            print(("Set parameter " + param))
            mmgr.SetSingleParameterValue(param, 2)
            sleep()

        for param in nonVectorParamList:
            print(("Verifying Set Paramater " + param))
            result = mmgr.GetSingleParameterValue(param)
            assert (result == 2
                    ), "Error verifying set single parameter value %s %d" % (
                        param, result)

        print("Test Set Multiple Parameter Values")
        newValue = (3, 3, 3, 3, 3)
        mmgr.SetMultipleParameterValues(nonVectorParamList, newValue)
        sleep()
        result = mmgr.GetMultipleParameterValues(nonVectorParamList)
        for i in result:
            assert (
                i == 3
            ), "Error verifying set multiple parameter value get %d and expected 3" % i

        print("Test Set Single Vector Values")
        CONST_1by5_modValue = [[6, 7, 8, 9, 10]]
        CONST_2by3_modValue = [[4, 5, 6], [7, 8, 9]]
        CONST_5by1_modValue = [[6], [7], [8], [9], [10]]
        CONST_MODVALUES = [
            CONST_1by5_modValue, CONST_2by3_modValue, CONST_5by1_modValue,
            CONST_1by5_modValue, CONST_2by3_modValue, CONST_5by1_modValue
        ]
        for i in range(0, 6):
            print("Set Parameter Vector for " + vectorParamList[i])
            mmgr.SetParameterVectorValues(vectorParamList[i],
                                          CONST_MODVALUES[i])
            sleep()

        for i in range(0, 6):
            print("Verifying Set Parameter Vector for " + vectorParamList[i])
            result = mmgr.GetParameterVectorValues(vectorParamList[i])
            assert (
                result == CONST_MODVALUES[i]
            ), "Error verifying set parameter vector values %s" % vectorParamList[
                i]

        print("Test Set and Get Vector Channel Values")
        #VectModWorksace_2by3Out value = VectModWorkspace_2by3In value + CONST2by3 param value
        #VectModWorksace2_2by3Out value = VectModWorkspace2_2by3In value + CONST2by3 param value
        CONST_2by3_VECTOR = [[1, 2, 3], [10, 20, 30]]
        CONST_2by3_VECTOR_TIMES2 = [[2, 4, 6], [20, 40, 60]]
        CONST_2by3_VECTOR_ZEROES = [[0, 0, 0], [0, 0, 0]]
        inports = ["VectModWorkspace_2by3In", "VectModWorkspace2_2by3In"]
        outports = ["VectModWorkspace_2by3Out", "VectModWorkspace2_2by3Out"]
        wks.SetChannelVectorValues(inports[0], CONST_2by3_VECTOR_ZEROES)
        wks.SetChannelVectorValues(inports[1], CONST_2by3_VECTOR)
        mmgr.SetParameterVectorValues("CONST2by3", CONST_2by3_VECTOR)
        sleep()
        result = wks.GetChannelVectorValues(outports[0])
        assert (
            result == CONST_2by3_VECTOR
        ), "Error verifying get channel vector value for %s" % outports[0]

        result = wks.GetChannelVectorValues(outports[1])
        assert (
            result == CONST_2by3_VECTOR_TIMES2
        ), "Error verifying get channel vector value for %s" % outports[1]

        print("Test Model Set State")
        model = NIVeriStand.Model("VectMod")

        #return 'time' : 'state'
        #Running = 0 Paused = 1 Resetting = 2 Idle = 3 Stopped = 4 Restoring = 5 Stopping = 6
        #Start = 0, Pause = 1, Reset = 2
        result = model.GetModelExecutionState()
        assert (result['state'] == 0), "Expected the model to be running"

        model.SetModelExecutionState(1)
        sleep()
        result = model.GetModelExecutionState()
        assert (result['state'] == 1), "Expected the model to be paused"

        model.SetModelExecutionState(2)
        sleep()
        result = model.GetModelExecutionState()
        assert (result['state'] == 3), "Expected the model to be idle"

        model.SetModelExecutionState(0)
        sleep()
        result = model.GetModelExecutionState()
        assert (result['state'] == 0), "Expected the model to be running"

        print("Test Save and Restore Model state")
        import tempfile
        SAVE_STATE_LOC = os.path.join(tempfile.mkdtemp(), 'saveModelState.txt')
        clock = NIVeriStand.Model("clocktest")

        print("Pause and get clock time")
        clock.SetModelExecutionState(1)
        sleep()
        result = clock.GetModelExecutionState()
        timeAtSave = result['time']
        print("Time At Save %d" % timeAtSave)
        clock.SaveModelState(SAVE_STATE_LOC)
        sleep()

        print("Set model running")
        clock.SetModelExecutionState(0)
        sleep()
        sleep()
        sleep()
        sleep()
        sleep()

        print("Check if save state file exist on disk")
        assert (
            (os.path.isfile(SAVE_STATE_LOC)) == 1
        ), "Error verifying that the save parameter state file is on disk %s" % SAVE_STATE_LOC

        print("Pause and restore model state")
        clock.SetModelExecutionState(1)
        sleep()
        result = clock.GetModelExecutionState()
        currentTime = result['time']
        print("Current Model Time %d" % currentTime)
        clock.RestoreModelState(SAVE_STATE_LOC)
        sleep()
        clock.SetModelExecutionState(0)
        sleep()
        result = clock.GetModelExecutionState()
        timeRestored = result['time']
        print("Time Restored %d" % timeRestored)
        assert timeAtSave <= timeRestored <= currentTime, "Error verifying restore parameter state"

        print("Test PASSED")
    finally:
        #Always stop the engine.
        wks.StopWorkspaceFile("")