首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >nidaqmx:防止任务在功能更改后关闭

nidaqmx:防止任务在功能更改后关闭
EN

Stack Overflow用户
提问于 2020-01-17 23:23:50
回答 1查看 220关注 0票数 1

我正在尝试编写一个API,它利用了NI-DAQmx的python包装器,并且需要有一个可以在整个模块中编辑的全局任务列表。

以下是我到目前为止尝试过的:

1)创建了一个重要的任务字典,每当调用ni-daqmx时,该字典就会被更新。函数端点处理来自HTTPS请求的数据,我保证它不仅仅是ni-daqmx库本身的无意义的包装器。

例如,在启动时,创建了以下内容:

代码语言:javascript
复制
#./daq/__init.py__
import nidaqmx
# ... other stuff ...#
TASKS = {}

然后,用户可以通过调用这个端点来创建一个任务。

代码语言:javascript
复制
#./daq/task/task.py
from daq import TASKS

# ... 

def api_create_task_endpoint(task_id):
    try:
        task = nidaqmx.Task(new_task_name=task_id)
        TASKS[task_id] = task
    except Exception:
        # handle it

到这里为止,一切都按应有的方式运作。我可以得到任务列表,任务保持打开。我也尝试显式地调用task.control(nidaqmx.constants.TaskMode.TASK_RESERVE),但是无论发生什么,下面的代码都会给我同样的问题。

当我试图向任务添加通道时,不管我如何设置状态,它都会在函数调用的末尾关闭。

代码语言:javascript
复制
#./daq/task/channels.py
from daq import TASKS

def api_add_channel_task_endpoint(task_id, channel_type, function):
    # channel_type corresponds to ni-daqmx channel modules (e.g. ai_channels).
    # function corresponds to callable functions (e.g. add_ai_voltage_chan)
    # do some preliminary checks (e.g. task exists, channel type valid)
    channels = get_chans_from_json_post()
    with TASKS[task_id] as task:
        getattr(getattr(task, channel_type), function)(channels)
        # e.g. task.ai_channels.add_ai_voltage_chan("Dev1/ai0")

这显然是在结束任务。当我再次调用api_create_task_endpoint(task_id)时,我会收到任务已关闭且不再存在的DaqResourceWarning

同样,我尝试在这里使用TaskMode设置task.control,但没有效果。

我希望能够通过将其存储在模块范围的TASKS dict中对任务进行编辑,但不能让任务保持足够长的打开时间。

2)我还尝试使用NI-MAX保存功能来实现这个功能。这样做的问题是,除非任务已经包含通道,否则无法保存这些任务,我不一定要在创建任务之后立即这样做。

我试图通过在api_create_task_endpoint()中添加一些默认行为来解决这个问题,它只是添加了一个随机通道,该通道将在用户添加的第一个通道上删除。问题是,在没有GUI的情况下添加通道后,我找不到从任务中删除通道的任何文档(这是在CENTOS上运行的,所以GUI是不启动的)。

非常感谢你的帮助!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-01-20 22:05:39

我还没有为NI-DAQmx使用Python绑定,但是

with TASKS[task_id] as task:

看起来它会在更新任务后立即停止并清除它,因为程序流离开with块并执行()

因为您期望这些任务在使用Python模块时仍然存在,所以我建议您只在需要更改任务的状态时使用task.control()

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59796043

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档