Skip to content

Commit 5d2d549

Browse files
author
Dilmi Wickramanayake
committed
Merge branch 'users/DilmiWickramanayake/Analog_Input_filtering' of https://github.com/ni/nipanel-python into users/DilmiWickramanayake/Analog_Input_filtering
2 parents 4937acd + 8c70ac5 commit 5d2d549

File tree

3 files changed

+411
-369
lines changed

3 files changed

+411
-369
lines changed

examples/nidaqmx_analog_input_filtering/nidaqmx_analog_input_filtering.py

Lines changed: 98 additions & 112 deletions
Original file line numberDiff line numberDiff line change
@@ -2,132 +2,118 @@
22

33
from pathlib import Path
44

5-
65
import nidaqmx
7-
from nidaqmx.constants import AcquisitionType, ExcitationSource, Edge, Slope, Timescale, TerminalConfiguration
8-
from settings_enum import DigitalEdge, PauseWhen, Slopes, AnalogPause, TerminalConfig
6+
from nidaqmx.constants import AcquisitionType, ExcitationSource, Edge, Slope, Timescale, TerminalConfiguration, FilterResponse
7+
8+
from settings_enum import DigitalEdge, PauseWhen, Slopes, AnalogPause, TerminalConfig, ShuntLocation
9+
import numpy as numpy
910
import nipanel
1011
import time
1112

1213
panel_script_path = Path(__file__).with_name("nidaqmx_analog_input_filtering_panel.py")
1314
panel = nipanel.create_panel(panel_script_path)
1415

16+
print(f"Panel URL: {panel.panel_url}")
17+
while True:
18+
with nidaqmx.Task() as task:
19+
if panel.get_value("run_button", False):
20+
print(f"...")
21+
else:
22+
placeholder = panel.get_value("placeholder", "1")
23+
if placeholder == "1":
24+
chan = task.ai_channels.add_ai_voltage_chan("Mod3/ai10", terminal_config=TerminalConfiguration.DEFAULT, max_val=panel.get_value("max_value_voltage", 5.0), min_val=panel.get_value("min_value_voltage", -5.0))
25+
chan.ai_filter_freq = panel.get_value("filter_freq",0.0)
26+
27+
# chan.ai_filter_order = panel.get_value("filter_order", 0)
28+
29+
elif placeholder == "2":
30+
chan = task.ai_channels.add_ai_current_chan("Mod3/ai10", max_val = panel.get_value("max_value_current", 0.01), min_val= panel.get_value("min_value_current", -0.01), ext_shunt_resistor_val= panel.get_value("shunt_resistor_value", 249.0))
31+
elif placeholder == "3":
32+
chan = task.ai_channels.add_ai_strain_gage_chan("Mod3/ai10", nominal_gage_resistance= panel.get_value("gage_resistance", 350.0), voltage_excit_source=ExcitationSource.EXTERNAL,
33+
max_val=panel.get_value("max_value_strain", 0.001), min_val=panel.get_value("min_value_strain", -0.001), poisson_ratio=panel.get_value("poisson_ratio",0.3), lead_wire_resistance=panel.get_value("wire_resistance",0.0),
34+
initial_bridge_voltage=panel.get_value("initial_voltage", 0.0), gage_factor=panel.get_value("gage_factor",2.0), voltage_excit_val=panel.get_value("voltage_excitation_value",0.0))
35+
36+
task.timing.cfg_samp_clk_timing(
37+
rate = 1000.0, sample_mode = AcquisitionType.CONTINUOUS, samps_per_chan = 1000)
38+
39+
task.timing.samp_clk_dig_fltr_min_pulse_width = 20.0e-6
40+
task.timing.samp_clk_dig_fltr_enable = True
41+
1542

16-
with nidaqmx.Task() as task:
17-
terminal_config = TerminalConfig(panel.get_value("terminal_config", TerminalConfig.RSE.value))
18-
chan_voltage = task.ai_channels.add_ai_voltage_chan("Mod3/ai10", terminal_config=TerminalConfiguration.DEFAULT)
19-
chan_strain_gage = task.ai_channels.add_ai_strain_gage_chan("Mod3/ai7", voltage_excit_source=ExcitationSource.EXTERNAL, max_val=0.001, min_val=-0.001)
20-
chan_current = task.ai_channels.add_ai_current_chan("Mod3/ai9", max_val = 0.01, min_val= -0.01, ext_shunt_resistor_val=249)
21-
task.timing.cfg_samp_clk_timing(
22-
rate = 1000.0, sample_mode = AcquisitionType.CONTINUOUS, samps_per_chan = 1000
23-
)
24-
25-
task.timing.samp_clk_dig_fltr_min_pulse_width = 20.0e-6
26-
task.timing.samp_clk_dig_fltr_enable = True
27-
chan_voltage.ai_filter_response
28-
filter = panel.get_value("filter", "No Filtering")
29-
# if filter == "No Filtering":
30-
# chan_voltage.ai_filter_freq = 0.0
31-
# chan_current.ai_filter_freq = 0.0
32-
# chan_strain_gage.ai_filter_freq = 0.0
33-
34-
# chan_voltage.ai_filter_order = 0
35-
# chan_current.ai_filter_order = 0
36-
# chan_strain_gage.ai_filter_order = 0
37-
38-
# chan_voltage.ai_filter_response = panel.get_value("filter_response", "Comb")
39-
# chan_current.ai_filter_response = panel.get_value("filter_response", "Comb")
40-
# chan_strain_gage.ai_filter_response = panel.get_value("filter_response", "Comb")
41-
# else:
42-
# chan_voltage.ai_filter_freq = panel.get_value("filter_freq", 1000.0)
43-
# chan_current.ai_filter_freq = panel.get_value("filter_freq", 1000.0)
44-
# chan_strain_gage.ai_filter_freq = panel.get_value("filter_freq", 1000.0)
45-
46-
# chan_voltage.ai_filter_order = panel.get_value("filter_order", 1)
47-
# chan_current.ai_filter_order = panel.get_value("filter_order", 1)
48-
# chan_strain_gage.ai_filter_order = panel.get_value("filter_order", 1)
49-
50-
# chan_voltage.ai_filter_response = panel.get_value("filter_response", "Comb")
51-
# chan_current.ai_filter_response = panel.get_value("filter_response", "Comb")
52-
# chan_strain_gage.ai_filter_response = panel.get_value("filter_response", "Comb")
5343

54-
55-
56-
panel.set_value("source", [task.triggers.pause_trigger.dig_lvl_src])
57-
panel.set_value("analog_source", [task.triggers.start_trigger.anlg_edge_src])
58-
59-
panel.set_value("sample_rate", task._timing.samp_clk_rate)
60-
61-
slope = Slopes(panel.get_value("slope",Slopes.FALLING.value))
62-
63-
if slope == "Rising":
64-
task.triggers.start_trigger.cfg_anlg_edge_start_trig(trigger_source="APFI0", trigger_level=0, trigger_slope= Slope.RISING)
65-
else:
66-
task.triggers.start_trigger.cfg_anlg_edge_start_trig(trigger_source="APFI0", trigger_level=0, trigger_slope= Slope.FALLING)
67-
68-
digital_edge = DigitalEdge(panel.get_value("edge_digital", DigitalEdge.FALLING.value))
69-
if digital_edge == "RISING":
70-
task.triggers.start_trigger.cfg_dig_edge_start_trig(trigger_source="/Dev2/PFI0", trigger_edge=Edge.RISING)
71-
else:
72-
task.triggers.start_trigger.cfg_dig_edge_start_trig(trigger_source="/Dev2/PFI0", trigger_edge=Edge.FALLING)
73-
task.start()
44+
panel.set_value("source", [task.triggers.pause_trigger.dig_lvl_src])
45+
panel.set_value("analog_source", [task.triggers.start_trigger.anlg_edge_src])
7446

75-
try:
76-
print(f"Press Ctrl + C to stop")
77-
78-
while True:
79-
# date = panel.get_value("date", None)
80-
# time_input = panel.get_value("time", None)
47+
panel.set_value("sample_rate", task._timing.samp_clk_rate)
8148

82-
hysteriresis = panel.get_value("hysteriesis", 0.0)
83-
# task.triggers.start_trigger.cfg_time_start_trig(when = date, timescale=Timescale.USE_HOST)
84-
level = panel.get_value("level", 0.0)
85-
new_slope = Slopes(panel.get_value("slope",Slopes.FALLING.value))
86-
if slope != new_slope:
87-
task.stop()
88-
89-
if new_slope == "Rising":
90-
task.triggers.start_trigger.cfg_anlg_edge_start_trig(trigger_source="APFI0", trigger_level=level, trigger_slope= Slope.RISING)
91-
else:
92-
task.triggers.start_trigger.cfg_anlg_edge_start_trig(trigger_source="APFI0", trigger_level=level, trigger_slope= Slope.FALLING)
93-
task.triggers.start_trigger.anlg_edge_hyst = hysteriresis
94-
task.start()
95-
slope = new_slope
96-
97-
analog_pause = AnalogPause(panel.get_value("analog_pause", AnalogPause.ABOVE.value))
49+
slope = Slopes(panel.get_value("slope",Slopes.FALLING.value))
9850

99-
if analog_pause == "ABOVE":
100-
task.triggers.pause_trigger.anlg_lvl_when.ABOVE
51+
if slope == "Rising":
52+
task.triggers.start_trigger.cfg_anlg_edge_start_trig(trigger_source="APFI0", trigger_level=0, trigger_slope= Slope.RISING)
10153
else:
102-
task.triggers.pause_trigger.anlg_lvl_when.BELOW
103-
54+
task.triggers.start_trigger.cfg_anlg_edge_start_trig(trigger_source="APFI0", trigger_level=0, trigger_slope= Slope.FALLING)
10455

105-
pause_when = PauseWhen(panel.get_value("pause_when",PauseWhen.HIGH.value))
106-
if pause_when == "High":
107-
task.triggers.pause_trigger.dig_lvl_when.HIGH
56+
digital_edge = DigitalEdge(panel.get_value("edge_digital", DigitalEdge.FALLING.value))
57+
if digital_edge == "RISING":
58+
task.triggers.start_trigger.cfg_dig_edge_start_trig(trigger_source="/Dev2/PFI0", trigger_edge=Edge.RISING)
10859
else:
109-
task.triggers.pause_trigger.dig_lvl_when.LOW
110-
111-
new_edge = DigitalEdge(panel.get_value("edge_digital", DigitalEdge.FALLING.value))
112-
if new_edge != digital_edge:
113-
task.stop()
114-
if new_edge == "RISING":
115-
task.triggers.start_trigger.cfg_dig_edge_start_trig(trigger_source="/Dev2/PFI0", trigger_edge=Edge.RISING)
116-
else:
117-
task.triggers.start_trigger.cfg_dig_edge_start_trig(trigger_source="/Dev2/PFI0", trigger_edge=Edge.FALLING)
60+
task.triggers.start_trigger.cfg_dig_edge_start_trig(trigger_source="/Dev2/PFI0", trigger_edge=Edge.FALLING)
61+
try:
11862
task.start()
119-
digital_edge = new_edge
120-
121-
122-
task.triggers.start_trigger.cfg_dig_edge_start_trig
123-
124-
data = task.read(number_of_samples_per_channel=100)
125-
panel.set_value("voltage_data", data[0])
126-
panel.set_value("current_data", data[2])
127-
panel.set_value("strain_data", data[1])
63+
while True:
64+
hysteriresis = panel.get_value("hysteriesis", 0.0)
65+
# task.triggers.start_trigger.cfg_time_start_trig(when = date, timescale=Timescale.USE_HOST)
66+
level = panel.get_value("level", 0.0)
67+
new_slope = Slopes(panel.get_value("slope",Slopes.FALLING.value))
68+
if slope != new_slope:
69+
task.stop()
70+
71+
if new_slope == "Rising":
72+
task.triggers.start_trigger.cfg_anlg_edge_start_trig(trigger_source="APFI0", trigger_level=level, trigger_slope= Slope.RISING)
73+
else:
74+
task.triggers.start_trigger.cfg_anlg_edge_start_trig(trigger_source="APFI0", trigger_level=level, trigger_slope= Slope.FALLING)
75+
task.triggers.start_trigger.anlg_edge_hyst = hysteriresis
76+
task.start()
77+
slope = new_slope
78+
79+
analog_pause = AnalogPause(panel.get_value("analog_pause", AnalogPause.ABOVE.value))
80+
81+
if analog_pause == "ABOVE":
82+
task.triggers.pause_trigger.anlg_lvl_when.ABOVE
83+
else:
84+
task.triggers.pause_trigger.anlg_lvl_when.BELOW
85+
86+
pause_when = PauseWhen(panel.get_value("pause_when",PauseWhen.HIGH.value))
87+
if pause_when == "High":
88+
task.triggers.pause_trigger.dig_lvl_when.HIGH
89+
else:
90+
task.triggers.pause_trigger.dig_lvl_when.LOW
91+
92+
new_edge = DigitalEdge(panel.get_value("edge_digital", DigitalEdge.FALLING.value))
93+
if new_edge != digital_edge:
94+
task.stop()
95+
if new_edge == "RISING":
96+
task.triggers.start_trigger.cfg_dig_edge_start_trig(trigger_source="/Dev2/PFI0", trigger_edge=Edge.RISING)
97+
else:
98+
task.triggers.start_trigger.cfg_dig_edge_start_trig(trigger_source="/Dev2/PFI0", trigger_edge=Edge.FALLING)
99+
task.start()
100+
digital_edge = new_edge
101+
102+
103+
task.triggers.start_trigger.cfg_dig_edge_start_trig
104+
105+
if panel.get_value("is_running", True):
106+
data = task.read(number_of_samples_per_channel=100)
107+
panel.set_value("voltage_data", data)
108+
panel.set_value("current_data", data)
109+
panel.set_value("strain_data", data)
110+
else:
111+
break
112+
except KeyboardInterrupt:
113+
raise
114+
finally:
115+
task.stop()
116+
panel.set_value("is_running", False)
117+
128118

129-
except KeyboardInterrupt:
130-
pass
131-
finally:
132-
task.stop()
133-
119+

0 commit comments

Comments
 (0)