Чтение тензодатчика на NI 9219 с использованием Python - PullRequest
1 голос
/ 09 июля 2019

Я пытаюсь прочитать загрузочную ячейку NI cDAQ 9174 с модулем NI 9219 в первом слоте (cDAQ 9174), но я получаю эту ошибку:

In [1]: runfile('C:/Users/Desktop/Testing/Training/Python/Spyder Data 
Analysis/Loadcells/Load cell trial.py', 
wdir='C:/Users/Desktop/Testing/Training/Python/Spyder Data 
Analysis/Loadcells')
Traceback (most recent call last):

File "<ipython-input-1-2d4c817735fa>", line 1, in <module>
runfile('C:/Users/Desktop/Testing/Training/Python/Spyder Data 
Analysis/Loadcells/Load cell trial.py', 
wdir='C:/Users/Desktop/Testing/Training/Python/Spyder Data 
Analysis/Loadcells')

File "C:\Users\AppData\Local\Continuum\anaconda3\lib\site- 
packages\spyder_kernels\customize\spydercustomize.py", line 668, in runfile
execfile(filename, namespace)

File "C:\Users\AppData\Local\Continuum\anaconda3\lib\site- 
packages\spyder_kernels\customize\spydercustomize.py", line 108, in execfile
exec(compile(f.read(), filename, 'exec'), namespace)

File "C:/Users/Desktop/Testing/Training/Python/Spyder Data 
Analysis/Loadcells/Load cell trial.py", line 35, in <module>
custom_scale_name=None)
File "C:\Users\AppData\Local\Continuum\anaconda3\lib\site- 
packages\nidaqmx\_task_modules\ai_channel_collection.py", line 743, in 
add_ai_force_bridge_table_chan
    min_val, max_val, units.value, bridge_config.value,

AttributeError: 'int' object has no attribute 'value'

МысльЭта нагрузка будет отображаться на графике до тех пор, пока 30 образцов не будут отобраны и остановлены.Однако я могу прочитать другой модуль из NI 9174, 3-й модуль (NI 9211), который имеет 3 термопары без каких-либо проблем, и график будет считывать термопары (30 образцов и стоп).

API предоставляет паруразличные способы добавления канала измерения силы, и я пробовал несколько и до сих пор не получаю чтения.

Ссылка здесь: https://nidaqmx -python.readthedocs.io / en / latest / ai_channel_collection.html

В идеале, я хотел бы использовать метод .add_ai_force_bridge_table_chan(), потому что у меня есть таблица калибровки для добавления информации, но когда я получил ошибку выше, я также попробовал add_ai_force_bridge_two_point_lin_chan(), но также получилошибка.Любая помощь с благодарностью!

Я также хотел упомянуть, что у меня есть программа LabVIEW, которая будет считывать загрузочную ячейку, чтобы она работала.Идея состоит в том, чтобы в конечном итоге перенести весь контроль в Python, чтобы я мог ускорить свой анализ данных после тестирования, а также я подумал, что это будет весело!

Код термопары, который работает:

#import the national instrument wrapper and plotting
import nidaqmx
import matplotlib.pyplot as plt

#keep the plat from closing between data sets
plt.ion()

i = 0

#code portion to read from the NI instrument
with nidaqmx.Task() as task:
    task.ai_channels.add_ai_thrmcpl_chan("cDAQ3Mod3/ai0:2")

    while i<30:
        data = task.read(number_of_samples_per_channel=1)
        plt.scatter(i,data[0],c='r')
        plt.scatter(i,data[1],c='b')
        plt.scatter(i,data[2],c='g')
        plt.pause(0.05)
        plt.show()
        i=i+1
        print(data)

Код Loadcell, который выдает ошибку:

import nidaqmx
import matplotlib.pyplot as plt

#keep the plat from closing between data sets
plt.ion()

i = 0

#code portion to read from the NI instrument
with nidaqmx.Task() as task:
#adding linear table of values for load cell reading: loadcell SN 666133
task.ai_channels.add_ai_force_bridge_table_chan("cDAQ3Mod3/ai0", 
name_to_assign_to_channel="Loadcell",
            min_val=-4000.0, max_val=4000.0, units= 15876,
            bridge_config=10182,
            voltage_excit_source=10200,
            voltage_excit_val=2.5, nominal_bridge_resistance=350.0,
            electrical_vals= [-19183, 0, 0.3383, 0.7703, 1.1525, 1.535, 
1.9183],
            electrical_units=15897,
            physical_vals=[-4000, 0, 800, 1600, 2400, 3200, 4000], 
physical_units=15876,
            custom_scale_name=None)

    while i<30:
        data = task.read(number_of_samples_per_channel=1)
        plt.scatter(i,data[0],c='r')
        #plt.scatter(i,data[1],c='b')
        plt.pause(0.05)
        plt.show()
        i=i+1
        print(data)

1 Ответ

1 голос
/ 11 июля 2019

Для справки вот как это выглядит сейчас:

import nidaqmx
import matplotlib.pyplot as plt

#keep the plat from closing between data sets
plt.ion()

i = 0

#code portion to read from the NI instrument
with nidaqmx.Task() as task:
    #adding linear table of values for load cell reading: loadcell SN 666133
    task.ai_channels.add_ai_force_bridge_table_chan("cDAQ3Mod1/ai0", 
 name_to_assign_to_channel="Loadcell",
        min_val=-4000.0, max_val=4000.0, units= nidaqmx.constants.ForceUnits.POUNDS,
        bridge_config=nidaqmx.constants.BridgeConfiguration.FULL_BRIDGE,
        voltage_excit_source= nidaqmx.constants.ExcitationSource.INTERNAL,
        voltage_excit_val=2.5, nominal_bridge_resistance=350.0,
        electrical_vals= [-1.9183, 0, 0.3383, 0.7703, 1.1525, 1.535, 1.9183],
        electrical_units=nidaqmx.constants.BridgeElectricalUnits.M_VOLTS_PER_VOLT,
        physical_vals=[-4000, 0, 800, 1600, 2400, 3200, 4000], 
physical_units=nidaqmx.constants.BridgePhysicalUnits.POUNDS,
        custom_scale_name=None)

    while i<30:
        data = task.read(number_of_samples_per_channel=1)
        plt.scatter(i,data[0],c='r')
        #plt.scatter(i,data[1],c='b')
        plt.pause(0.05)
        plt.show()
        i=i+1
        print(data)
...