使用 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)
我正在尝试从 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)