Example #1
0
 def test_OpenWithInvalidChannelInSingleEndedMode_ShowAssertion(self):
     with self.assertRaises(AssertionError):
         AnalogInput({
             'bank': bankA,
             'channel': 8,
             'mode': AIMode.SINGLE_ENDED
         })
Example #2
0
 def test_OpenWithInvalidRange_ShowAssertion(self):
     with self.assertRaises(AssertionError):
         AnalogInput({
             'bank': bankA,
             'channel': AIChannel.AI2,
             'range': '+/-20V'
         })
Example #3
0
 def test_OpenWithInvalidChannelInDifferentialMode_ShowAssertion(self):
     with self.assertRaises(AssertionError):
         AnalogInput({
             'bank': bankA,
             'channel': AIChannel.AI4,
             'mode': AIMode.DIFFERENTIAL
         })
Example #4
0
def readWaveformFromAI(p_sampleRate, p_sampleSize):
    ai_bank = Bank.A
    ai_channel = AIChannel.AI0
    ai_range = AIRange.PLUS_OR_MINUS_1V
    ai_mode = AIMode.SINGLE_ENDED

    value_array = []
    with AnalogInput({
            'bank': ai_bank,
            'channel': ai_channel,
            'range': ai_range,
            'mode': ai_mode
    }) as AI_single_channel:
        # configure the sample rate and start the acquisition
        AI_single_channel.start_continuous_mode(p_sampleRate)
        print('start recording...')

        # read the value
        timeout = -1
        value_array = AI_single_channel.read(p_sampleSize, timeout)

        print('stop recording')
        # stop signal acquisition
        AI_single_channel.stop_continuous_mode()

    return value_array[0]
Example #5
0
 def setUp(self):
     self.AI_single_channel = AnalogInput({
         'bank': bankA,
         'channel': AIChannel.AI2,
         'range': AIRange.PLUS_OR_MINUS_5V,
         'mode': AIMode.SINGLE_ENDED
     })
Example #6
0
    def test_WriteTenPointsThenWriteSinglePointInBankB_ReturnExpectedReadBack(self):
        AO0 = AnalogOutput({'bank': Bank.B, 'channel': AOChannel.AO0})
        AI0 = AnalogInput({'bank': Bank.B, 'channel': AIChannel.AI0})

        def __multipleWriteAndRead():
            sample_rate = 1000
            input_value = [7,7,7,7,7,7,7,5,5,10]
            expected_value = '7,7,7,7,7,7,7,5,5,10'
            irq_thread = threading.Thread(target=self.__reading_thread, args=(AI0, len(input_value), sample_rate, expected_value))
            self.__start_thread(irq_thread)
            
            AO0.write(input_value, sample_rate)
            
            self.__close_thread(irq_thread)

        def __singleWriteAndRead():
            input_value = 3.2
            AO0.write(input_value)
            value = AI0.read()[0]

            self.assertEqual(value, pytest.approx(input_value, 0.1))
          
        __multipleWriteAndRead()
        __singleWriteAndRead()

        AO0.close()
        AI0.close()
Example #7
0
 def test_OpenWithInvalidBank_ShowAssertion(self):
     with self.assertRaises(AssertionError):
         AnalogInput({
             'bank': 'C',
             'channel': AIChannel.AI0,
             'mode': AIMode.SINGLE_ENDED
         })
Example #8
0
def readWaveformFromAI(p_sampleRate,
                       p_sampleSize,
                       p_bank=Bank.A,
                       p_channel=AIChannel.AI0,
                       p_channelRef=None):
    ai_range = AIRange.PLUS_OR_MINUS_1V
    ai_mode = AIMode.SINGLE_ENDED
    isNewChannel = p_channelRef is None

    value_array = []
    if isNewChannel:
        p_channelRef = AnalogInput({
            'bank': p_bank,
            'channel': p_channel,
            'range': ai_range,
            'mode': ai_mode
        })

    # configure the sample rate and start the acquisition
    p_channelRef.start_continuous_mode(p_sampleRate)
    printString('开始10秒录音...')

    # read the value
    timeout = -1
    value_array = p_channelRef.read(p_sampleSize, timeout)

    printString('结束录音')

    # stop signal acquisition
    p_channelRef.stop_continuous_mode()

    if isNewChannel:
        p_channelRef.close()

    return value_array[0]
Example #9
0
 def setUp(self):
     self.AI_single_channel = AnalogInput({
         'bank': bankA,
         'channel': AIChannel.AI2,
         'range': AIRange.PLUS_OR_MINUS_5V,
         'mode': AIMode.SINGLE_ENDED
     })
     self.AI_multiple_channels = AnalogInput(
         {
             'bank': bankA,
             'channel': AIChannel.AI2,
             'range': AIRange.PLUS_OR_MINUS_10V
         }, {
             'bank': bankA,
             'channel': AIChannel.AI2,
             'mode': AIMode.DIFFERENTIAL
         })
Example #10
0
 def setUp(self):
     self.AO_single_channel = AnalogOutput({
         'bank': bank,
         'channel': AOChannel.AO0
     })
     self.AI_single_channel = AnalogInput({
         'bank': bank,
         'channel': AIChannel.AI0
     })
Example #11
0
 def open_first_ai(self):
     self.first_ai = AnalogInput(
         {
             'bank': bankA,
             'channel': AIChannel.AI2,
             'range': AIRange.PLUS_OR_MINUS_10V
         }, {
             'bank': bankA,
             'channel': AIChannel.AI2,
             'mode': AIMode.DIFFERENTIAL
         })
Example #12
0
    def test_GivenBankAAI0AI1AndBankBAI0AI1_Write_ReturnExpectedReadBack(self):
        def __read(number_of_times_to_read, read_object, number_of_samples_to_read, timeout, expected_value):
            title = {'A': 'Bank A AI0 - AO0 and AI1 - AO3', 'B': 'Bank B AI0 - AO1 and AI0 - AO3'}
            result = {'A': [[],[]], 'B': [[],[]]}
            for i in range(0, number_of_times_to_read):
                value_array = read_object.read(number_of_samples_to_read, timeout)
                # print(value_array)
                bank_A_values = value_array[0]
                bank_B_values = value_array[1]
                result['A'][0].append(bank_A_values[0])
                result['A'][1].append(bank_A_values[1])
                result['B'][0].append(bank_B_values[0])
                result['B'][1].append(bank_B_values[1])

            def __print(bank):
                print(title[bank])
                for index, channel in enumerate(result[bank]):
                    for values_per_channel in channel:
                        values = [ round(value) for value in values_per_channel ]
                        print('continuous: %s should almost equal to %s and continuous from the last read' % (values, expected_value[bank][index]))

            __print(Bank.A.value)
            __print(Bank.B.value)
        
        AO = AnalogOutput({'bank': Bank.B, 'channel': AOChannel.AO0},
                          {'bank': Bank.B, 'channel': AOChannel.AO1},
                          {'bank': bank, 'channel': AOChannel.AO0},
                          {'bank': bank, 'channel': AOChannel.AO1})
        AI = AnalogInput({'bank': Bank.B, 'channel': AIChannel.AI0},
                         {'bank': Bank.B, 'channel': AIChannel.AI3},
                         {'bank': bank, 'channel': AIChannel.AI0},
                         {'bank': bank, 'channel': AIChannel.AI3})

        timeout = -1
        sample_rate = 1000
        input_value = [[1,2,3,4,5,6,7,8,9,10], [10,9,8,7,6,5,4,3,2,1], [2,3,4,5,6,2,3,4,5,6], [7,6,5,4,3,7,6,5,4,3]]
        number_of_samples_to_read = 5
        expected_value = {
            'A': [self.__convert_list_to_string(input_value[2]), self.__convert_list_to_string(input_value[3])],
            'B': [self.__convert_list_to_string(input_value[0]), self.__convert_list_to_string(input_value[1])]
            }
        irq_thread = threading.Thread(target=self.__writing_thread, args=(AO, input_value, timeout))
        
        AO.start_continuous_mode(input_value, sample_rate, timeout)
        self.__start_thread(irq_thread)
        
        AI.start_continuous_mode(sample_rate)
        
        __read(2, AI, number_of_samples_to_read, timeout, expected_value)
        
        self.__close_thread(irq_thread)

        AO.close()
        AI.close()
Example #13
0
    def test_ContinuousMode_StartTwoAiInSameBank_ShowAssertion(self):
        sample_rate = 1000
        first_ai = AnalogInput({
            'bank': bankA,
            'channel': AIChannel.AI2,
            'range': AIRange.PLUS_OR_MINUS_10V
        })
        second_ai = AnalogInput({
            'bank': bankA,
            'channel': AIChannel.AI7,
            'range': AIRange.PLUS_OR_MINUS_10V
        })

        first_ai.start_continuous_mode(sample_rate)
        with self.assertRaises(AssertionError):
            second_ai.start_continuous_mode(sample_rate)

        first_ai.stop_continuous_mode()
        first_ai.close()
        second_ai.close()
Example #14
0
    def test_OpenTwoChannelsInBankAAndThreeChannelsInBankB_HaveExpectedCnfgvalue(
            self):
        expectedResults = [{
            'bank': 'A',
            'channel': AIChannel.AI0,
            'cnfgval': 8
        }, {
            'bank': 'A',
            'channel': AIChannel.AI5,
            'cnfgval': 13
        }, {
            'bank': 'B',
            'channel': AIChannel.AI3,
            'cnfgval': 11
        }, {
            'bank': 'B',
            'channel': AIChannel.AI2 + 8,
            'cnfgval': 2
        }, {
            'bank': 'B',
            'channel': AIChannel.AI4,
            'cnfgval': 12
        }]

        AI = AnalogInput({
            'bank': bankA,
            'channel': AIChannel.AI0
        }, {
            'bank': bankB,
            'channel': AIChannel.AI3
        }, {
            'bank': bankB,
            'channel': AIChannel.AI2,
            'mode': AIMode.DIFFERENTIAL
        }, {
            'bank': bankA,
            'channel': AIChannel.AI5
        }, {
            'bank': bankB,
            'channel': AIChannel.AI4
        })
        AI.read()

        for index, channel_settings in enumerate(AI.channel_list):
            self.assertEqual(channel_settings['bank'],
                             expectedResults[index]['bank'])
            self.assertEqual(channel_settings['channel'],
                             expectedResults[index]['channel'])
            self.assertEqual(channel_settings['cnfgval'],
                             expectedResults[index]['cnfgval'])

        AI.close()
Example #15
0
    def test_GivenBankAAI0AI1AndBankBAI0_WriteWithDifferentValuesLength_ReturnExpectedReadBack(self):
        def __read(number_of_times_to_read, read_object, number_of_samples_to_read, timeout, expected_value):
            # result = [A: [AO0, AO1], B: [AO0]]
            result = [[[],[]], [[],[]]]
            for i in range(0, number_of_times_to_read):
                value_array = read_object.read(number_of_samples_to_read, timeout)
                bank_A_values = value_array[0]
                bank_B_values = value_array[1]
                result[0][0].append(bank_A_values[0])
                result[0][1].append(bank_A_values[1])
                result[1][0].append(bank_B_values[0])

            def __print(channels, bank):
                for channel in channels:
                    for index, values_per_channel in enumerate(channel):
                        values = [ round(value) for value in values_per_channel ]
                        if bank == Bank.A.value:
                            print('continuous: %s should almost equal to %s and continuous from the last read' % (values, expected_value[index]))
                        else:
                            print('continuous: %s should almost equal to %s and continuous from the last read' % (values, expected_value[2]))

            print('Bank A AI0 - AO0 and AI1 - AO3')
            __print(result[0], Bank.A.value)
            print('Bank B AI0 - AO0')
            __print(result[1], Bank.B.value)
        
        AO = AnalogOutput({'bank': Bank.B, 'channel': AOChannel.AO0},
                          {'bank': bank, 'channel': AOChannel.AO0},
                          {'bank': bank, 'channel': AOChannel.AO1})
        AI = AnalogInput({'bank': Bank.B, 'channel': AIChannel.AI0},
                         {'bank': bank, 'channel': AIChannel.AI0},
                         {'bank': bank, 'channel': AIChannel.AI3})

        timeout = -1
        sample_rate = 1000
        input_value = [[0,1,2,3,4,5,0,1,2,3,4,5], [7,8,9,10,7,8,9,10,7,8,9,10], [1,2,3,4,5,1,2,3,4,5]]
        number_of_samples_to_read = 4
        expected_value = [self.__convert_list_to_string(input_value[1]), self.__convert_list_to_string(input_value[2]), self.__convert_list_to_string(input_value[0])]
        irq_thread = threading.Thread(target=self.__writing_thread, args=(AO, input_value, timeout))
        
        AO.start_continuous_mode(input_value, sample_rate, timeout)
        self.__start_thread(irq_thread)
        
        AI.start_continuous_mode(sample_rate)
        
        __read(2, AI, number_of_samples_to_read, timeout, expected_value)
        
        self.__close_thread(irq_thread)

        AO.close()
        AI.close()
Example #16
0
        def openAndCheck(bank):
            AI = AnalogInput({
                'bank': bank,
                'channel': AIChannel.AI0
            }, {
                'bank': bank,
                'channel': AIChannel.AI1
            }, {
                'bank': bank,
                'channel': AIChannel.AI2
            }, {
                'bank': bank,
                'channel': AIChannel.AI3
            }, {
                'bank': bank,
                'channel': AIChannel.AI4
            }, {
                'bank': bank,
                'channel': AIChannel.AI5
            }, {
                'bank': bank,
                'channel': AIChannel.AI6
            }, {
                'bank': bank,
                'channel': AIChannel.AI7
            }, {
                'bank': bank,
                'channel': AIChannel.AI0,
                'mode': AIMode.DIFFERENTIAL
            }, {
                'bank': bank,
                'channel': AIChannel.AI1,
                'mode': AIMode.DIFFERENTIAL
            }, {
                'bank': bank,
                'channel': AIChannel.AI2,
                'mode': AIMode.DIFFERENTIAL
            }, {
                'bank': bank,
                'channel': AIChannel.AI3,
                'mode': AIMode.DIFFERENTIAL
            })
            AI.read()

            for index, channel_settings in enumerate(AI.channel_list):
                self.assertEqual(channel_settings['channel'],
                                 expectedResults['channel'][index])
                self.assertEqual(channel_settings['cnfgval'],
                                 expectedResults['cnfgval'][index])

            AI.close()
Example #17
0
    def test_WriteSinglePoint_ReturnDifferentValueFromEachChannel(self):
        AO_multiple_channels = AnalogOutput({'bank': bank, 'channel': AOChannel.AO0}, 
                                            {'bank': bank, 'channel': AOChannel.AO1})
        AI_multiple_channels = AnalogInput({'bank': bank, 'channel': AIChannel.AI0},
                                           {'bank': bank, 'channel': AIChannel.AI3})
        input_value_for_single_channels = 2.5
        input_value_for_multiple_channels = 3.3
        AO_multiple_channels.write(input_value_for_multiple_channels)
        self.AO_single_channel.write(input_value_for_single_channels)
        value_array = AI_multiple_channels.read()
        for index, value in enumerate(value_array):
            if index == 0:
                self.assertEqual(value, pytest.approx(input_value_for_single_channels, 0.1))
            else:
                self.assertEqual(value, pytest.approx(input_value_for_multiple_channels, 0.1))

        AO_multiple_channels.close()
        AI_multiple_channels.close()
Example #18
0
    def test_GivenBankBAI0AndBankAAI1_Write_ReturnExpectedReadBack(self):
        def __read(number_of_times_to_read, read_object, number_of_samples_to_read, timeout, expected_value_for_bank_A, expected_value_for_bank_B):
            result = [[], []]
            for i in range(0, number_of_times_to_read):
                value_array = read_object.read(number_of_samples_to_read, timeout)
                result[0].append(value_array[0])
                result[1].append(value_array[1])

            def __print(channels, expected_value):
                for channel in channels:
                    for values_per_channel in channel:
                        values = [ round(value) for value in values_per_channel ]
                        print('continuous: %s should almost equal to %s and continuous from the last read' % (values, expected_value))

            print('Bank A AI3 - AO1')
            __print(result[0], expected_value_for_bank_A)
            print('Bank B AI0 - AO0')
            __print(result[1], expected_value_for_bank_B)
        
        AO = AnalogOutput({'bank': Bank.B, 'channel': AOChannel.AO0},
                          {'bank': bank, 'channel': AOChannel.AO1})
        AI = AnalogInput({'bank': Bank.B, 'channel': AIChannel.AI0},
                         {'bank': bank, 'channel': AIChannel.AI3})

        timeout = -1
        sample_rate = 1000
        input_value = [[1,2,3,4,5,6,7,8,9,10], [10,9,8,7,6,5,4,3,2,1]]
        number_of_samples_to_read = 5
        expected_value_for_bank_B = self.__convert_list_to_string(input_value[0])
        expected_value_for_bank_A = self.__convert_list_to_string(input_value[1])
        irq_thread = threading.Thread(target=self.__writing_thread, args=(AO, input_value, timeout))
        
        AO.start_continuous_mode(input_value, sample_rate, timeout)
        self.__start_thread(irq_thread)

        AI.start_continuous_mode(sample_rate)
        
        __read(2, AI, number_of_samples_to_read, timeout, expected_value_for_bank_A, expected_value_for_bank_B)
            
        self.__close_thread(irq_thread)

        AO.close()
        AI.close()
Example #19
0
        def __write_and_read(input_value):
            AO_single_channel = AnalogOutput({'bank': Bank.B, 'channel': AOChannel.AO0})
            AI_single_channel = AnalogInput({'bank': Bank.B, 'channel': AIChannel.AI0})

            timeout = -1
            sample_rate = 1000
            number_of_samples_to_read = 10
            expected_value = self.__convert_list_to_string(input_value)
            irq_thread = threading.Thread(target=self.__writing_thread, args=(AO_single_channel, input_value, timeout))
            
            AO_single_channel.start_continuous_mode(input_value, sample_rate, timeout)
            self.__start_thread(irq_thread)

            AI_single_channel.start_continuous_mode(sample_rate)
            
            self.__read(2, AI_single_channel, number_of_samples_to_read, timeout, expected_value)
                
            self.__close_thread(irq_thread)

            AO_single_channel.close()
            AI_single_channel.close()
Example #20
0
    def test_Given7PointsWith1000SampleRateOnBankA_WriteThenCloseWithoutStop_ReturnExpectedReadBack(self):
        AO_single_channel = AnalogOutput({'bank': bank, 'channel': AOChannel.AO0})
        AI_single_channel = AnalogInput({'bank': bank, 'channel': AIChannel.AI0})

        timeout = -1
        sample_rate = 2000
        input_value = [[9,8,7,6,5,4,3,2,1,0,9,8,7,6,5,4,3,2,1,0]]
        number_of_samples_to_read = 7
        expected_value = self.__convert_list_to_string(input_value)
        irq_thread = threading.Thread(target=self.__writing_thread, args=(AO_single_channel, input_value, timeout))
        
        AO_single_channel.start_continuous_mode(input_value, sample_rate, timeout)
        self.__start_thread(irq_thread)

        AI_single_channel.start_continuous_mode(sample_rate)
        
        self.__read(3, AI_single_channel, number_of_samples_to_read, timeout, expected_value)
            
        self.__close_thread(irq_thread)

        AO_single_channel.close()
        AI_single_channel.close()
Example #21
0
 def test_OpenWithoutMode_DoesnotShowAssertion(self):
     AnalogInput({
         'bank': bankA,
         'channel': AIChannel.AI0,
         'range': AIRange.PLUS_OR_MINUS_10V
     })
Example #22
0
 def setUp(self):
     self.AO_multiple_channels = AnalogOutput({'bank': bank, 'channel': AOChannel.AO0}, 
                                              {'bank': bank, 'channel': AOChannel.AO1})
     self.AI_multiple_channels = AnalogInput({'bank': bank, 'channel': AIChannel.AI0},
                                             {'bank': bank, 'channel': AIChannel.AI3})
Example #23
0
 def open_second_ai(self):
     self.second_ai = AnalogInput({
         'bank': bankA,
         'channel': AIChannel.AI6,
         'range': AIRange.PLUS_OR_MINUS_10V
     })
Example #24
0
    def test_ContinuousMode_ReadTwoChannelsAndCloseItThenReadAgain_ReturnExpectedReadBack(
            self):
        sample_rate = 1000
        number_of_samples = 2
        timeout = -1

        first_ai = AnalogInput(
            {
                'bank': bankA,
                'channel': AIChannel.AI2,
                'range': AIRange.PLUS_OR_MINUS_10V
            }, {
                'bank': bankA,
                'channel': AIChannel.AI2,
                'mode': AIMode.DIFFERENTIAL
            })
        second_ai = AnalogInput({
            'bank': bankB,
            'channel': AIChannel.AI7,
            'range': AIRange.PLUS_OR_MINUS_10V
        })

        first_ai.start_continuous_mode(sample_rate)
        second_ai.start_continuous_mode(sample_rate)

        first_ai_value_array = first_ai.read(number_of_samples, timeout)
        second_ai_value_array = first_ai.read(number_of_samples, timeout)

        self.checkReadbankValue(first_ai_value_array[0][0], 3.3,
                                number_of_samples)
        self.checkReadbankValue(first_ai_value_array[0][1], -1.7,
                                number_of_samples)
        self.checkReadbankValue(second_ai_value_array[0][0], 3.3,
                                number_of_samples)

        first_ai.stop_continuous_mode()
        second_ai.stop_continuous_mode()

        first_ai.close()
        second_ai.close()

        first_ai = AnalogInput(
            {
                'bank': bankA,
                'channel': AIChannel.AI2,
                'range': AIRange.PLUS_OR_MINUS_10V
            }, {
                'bank': bankA,
                'channel': AIChannel.AI2,
                'mode': AIMode.DIFFERENTIAL
            })

        first_ai.start_continuous_mode(sample_rate)

        first_ai_value_array = first_ai.read(number_of_samples, timeout)

        self.checkReadbankValue(first_ai_value_array[0][0], 3.3,
                                number_of_samples)
        self.checkReadbankValue(first_ai_value_array[0][1], -1.7,
                                number_of_samples)

        first_ai.stop_continuous_mode()

        first_ai.close()
Example #25
0
 def test_OpenWithoutChannel_ShowAssertion(self):
     with self.assertRaises(AssertionError):
         AnalogInput({'bank': bankA, 'mode': AIMode.SINGLE_ENDED})
# specify the bank, channel, range, and mode
ai_bank = Bank.A
ai_channel = AIChannel.AI0
ai_range = AIRange.PLUS_OR_MINUS_10V
ai_mode = AIMode.SINGLE_ENDED

##############################################################################
# Section 1: Single Point (1 Sample)
# Use the read function to read a single point of data back from the channel. The
# hardware acquires one sample for a channel.
##############################################################################
print('Single Point, Single Channel')
# configure the AI channel
with AnalogInput({
        'bank': ai_bank,
        'channel': ai_channel,
        'range': ai_range,
        'mode': ai_mode
}) as AI_single_channel:
    # read from the AI channel and display the values 20 times
    for i in range(0, 20):
        # read the value
        value_array = AI_single_channel.read()
        # print the value
        print(value_array[0])

        # add a short delay before acquiring the next data point
        time.sleep(0.001)

##############################################################################
# Section 2: Multiple Points (n samples)
# Use the read function to read multiple points of data from the channel. The
Example #27
0
 def test_OpenWithoutRange_DoesnotShowAssertion(self):
     AnalogInput({
         'bank': bankA,
         'channel': AIChannel.AI0,
         'mode': AIMode.SINGLE_ENDED
     })
Example #28
0
 def setUpClass(self):
     self.AI = AnalogInput({'bank': bankA, 'channel': AIChannel.AI2})
ai_mode = AIMode.SINGLE_ENDED

##############################################################################
# Section 1: Single Point (1 Sample)
# Use the read function to read a single point of data back from the channels.
# The hardware acquires one sample for a channel.
##############################################################################
print('Single Point, Multiple Channels')
# configure the AI channel
with AnalogInput(
    {
        'bank': ai_bankA,  # define the first channel: AI0
        'channel': ai_channel0,
        'range': ai_range0,
        'mode': ai_mode
    },
    {
        'bank': ai_bankB,  # define the second channel: AI1
        'channel': ai_channel1,
        'range': ai_range1,
        'mode': ai_mode
    }) as AI_multiple_channels:
    # read from the AI channels and display the values 20 times
    for i in range(0, 20):
        # read the values
        value_array = AI_multiple_channels.read()
        # use a loop to print all values
        for value in value_array:
            # print the values
            print(value)