我在NI-USB6525上切换输入,并尝试用Python脚本检测更改。你知道吗
我能够写这些行并在写之后成功地读取它们,但是我没有检测到这些变化。我输入了一些指纹来演示我可以将输入设置为True或False,然后手动读取输入并得到正确的结果。我需要这个脚本来自动检测更改。你知道吗
import sys
import time
import nidaqmx
import logging
def readControlSimulator(niDaqDevice = "Dev1"):
# On NI-USB6501 all IOs are configurable.
# On NI-USB6525 port0 are outputs, port1 are inputs.
INPUT_PORT = 'port1'
# Function for reading a line
def readLine(lineNumber):
# Read the corresponding line
with nidaqmx.Task() as line:
try:
line.di_channels.add_di_chan(niDaqDevice + '/' + INPUT_PORT + '/line' + str(lineNumber))
logging.debug("HPT line {} = {}".format(lineNumber, line.read()))
except nidaqmx.DaqError as e:
logging.debug(str(e))
# read command line arguments
for arg in sys.argv[1:]:
niDaqDevice = arg
logging.basicConfig(format="%(asctime)15s - %(levelname)8s: %(message)s", level=logging.DEBUG)
for line in range(8):
readLine(line)
# Set up NIDAQ line detection for all lines
with nidaqmx.Task() as task:
# Will only work if using a compatible device.
try:
logging.debug("SET UP CHANGE DETECTION")
task.di_channels.add_di_chan(niDaqDevice + '/' + INPUT_PORT + '/line0:7')
task.timing.cfg_change_detection_timing(rising_edge_chan = niDaqDevice + '/' + INPUT_PORT + '/line0:7',
falling_edge_chan = niDaqDevice + '/' + INPUT_PORT + '/line0:7',
sample_mode=nidaqmx.constants.AcquisitionType.CONTINUOUS)
def callback(task_handle=task._handle,
signal_type=nidaqmx.constants.Signal.CHANGE_DETECTION_EVENT,
callback_data=1):
logging.debug("task_handle {}".format(task_handle))
logging.debug("signal_type {}".format(signal_type))
logging.debug("callback_data {}".format(callback_data))
logging.debug("CHANGE LINE")
return 0
task.register_signal_event(nidaqmx.constants.Signal.CHANGE_DETECTION_EVENT, callback)
task.start()
except nidaqmx.DaqError as e:
print(str(e))
time.sleep(10)
for line in range(8):
readLine(line)
return
if __name__ == '__main__':
readControlSimulator()
如果一行发生更改,代码应该打印“CHANGE LINE”,但它没有。下面是在运行代码时切换开关时得到的结果:
$py src/read_controlSimulator.py
2019-06-25 09:53:58,757 - DEBUG: HPT line 0 = True
2019-06-25 09:53:58,760 - DEBUG: HPT line 1 = True
2019-06-25 09:53:58,766 - DEBUG: HPT line 2 = True
2019-06-25 09:53:58,772 - DEBUG: HPT line 3 = False
2019-06-25 09:53:58,777 - DEBUG: HPT line 4 = False
2019-06-25 09:53:58,781 - DEBUG: HPT line 5 = False
2019-06-25 09:53:58,786 - DEBUG: HPT line 6 = False
2019-06-25 09:53:58,791 - DEBUG: HPT line 7 = False
2019-06-25 09:53:58,792 - DEBUG: SET UP CHANGE DETECTION
2019-06-25 09:54:08,838 - DEBUG: HPT line 0 = False
2019-06-25 09:54:08,842 - DEBUG: HPT line 1 = False
2019-06-25 09:54:08,847 - DEBUG: HPT line 2 = True
2019-06-25 09:54:08,852 - DEBUG: HPT line 3 = True
2019-06-25 09:54:08,856 - DEBUG: HPT line 4 = False
2019-06-25 09:54:08,860 - DEBUG: HPT line 5 = False
2019-06-25 09:54:08,865 - DEBUG: HPT line 6 = False
2019-06-25 09:54:08,871 - DEBUG: HPT line 7 = False
因此,当我显式读取时,我得到了正确的值,但是没有像我期望的那样检测到更改。。。你知道吗
我没有为nidaqmx使用Python绑定,但是
with nidaqmx.Task() as task:
看起来它会在启动任务后立即停止并清除它,因为程序流离开} 执行。当您运行它时,脚本是无限期等待还是快速退出?你知道吗
with
块并^{相关问题 更多 >
编程相关推荐