使用 python 在 NI 9219 上读取称重传感器

Reading a load cell on an NI 9219 using python

我正在尝试从 NI cDAQ 9174 读取称重传感器,该 NI cDAQ 9174 在第一个插槽(cDAQ 9174 的)中有一个 NI 9219 模块,但我收到此错误:

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),没有任何问题,图表将读取热电偶(30 个样本并停止)。

API 提供了几种不同的方法来添加力测量通道,我已经尝试了一些,但仍然没有读数。

此处参考:https://nidaqmx-python.readthedocs.io/en/latest/ai_channel_collection.html

理想情况下,我想使用 .add_ai_force_bridge_table_chan() 方法,因为我有一个校准 table 来添加信息,但是当我遇到上述错误时,我也尝试了 add_ai_force_bridge_two_point_lin_chan()但也收到错误。任何帮助是极大的赞赏!

我还想提一下,我有一个 LabVIEW 程序可以读取称重传感器,因此它确实可以工作。我的想法是最终将所有控件都带入 Python,这样我就可以加快我的 post-测试数据分析,而且我认为这会很有趣!

有效的热电偶代码:

#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)

给出错误的称重传感器代码:

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)

参考这里是现在的样子:

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)