LabVIEW 在事件结构中动态地初始化和关闭 VISA 资源

LabVIEW initializing and closing VISA resources, dynamically, in event structures

我想通过用户前端实时启动不同的资源。这个有多种用途,比如

我以为它看起来像这样:

我遇到的问题是找出可以使用的结构。我目前使用的可能并不理想,而且我在实施过程中遇到了一些问题。我会告诉你我的想法

  1. 使用包含 while 循环 来保持程序 运行ning,更改资源和资源上的 运行 子程序。

  2. 使用 事件结构 并在 (1) 内设置超时,用于初始化按钮将是理想的,以处理 VISA 资源的初始化或关闭。

  3. 使用 enum 移位寄存器 在包含 while 循环 (1) 中创建状态机,以便 UI 具有不同的状态因为它 运行 的子程序或不同的资源组合被转换 on/off.

看起来像这样:

虽然我对一些事情感到困惑:

  1. a) 我可以在较大的程序 while 循环中通过事件结构初始化 VISA 资源吗?

    b) 似乎很容易将所有资源名称连接到一些后程序逻辑隧道,但由于每个按钮案例仅初始化一个资源,错误传播隧道将具有空心点。 这个问题进一步发展了吗?

    c) 另外,在同一个 case 结构中的闭包和初始化看起来很奇怪...... 我应该把它们分成两个 case 结构,它们只响应它们相应的 true/false 状态?

  2. 到运行以后的一个程序,我打算用另一个事件结构来响应按钮点击。在执行之前,我会检查资源是否已启用以及程序是否对 运行 有效。 运行 一个程序会改变机器状态,即。 运行ning 子程序,运行ning 子程序连续、空闲等,基于用户选择。

    我想这个块看起来像按钮事件结构中的一个案例结构。每个程序都会有一个案例,如果设置不合适会给出错误信息。

    a) 是否存在多个事件结构的问题? 超时将确保每个事件结构都会 运行,但我不能将其作为程序事件结构可能需要在程序中长时间 运行。根据用户与界面的交互进行 UI 更新也很好。

在此先感谢您的帮助和建议!

您需要稍微修改一下您的应用程序,现在是用错误的方法完成的。您的 while 循环将被阻塞,b/c 每次迭代都要求每个事件结构都将捕获一个事件 - 但您不希望 init/deinit 设备每次循环迭代。

你的 while 循环应该只包含一个事件结构。将围绕它传递的所有数据(和案例结构)保存在集群中的移位寄存器中。通过事件结构和案例选择器的所有 cases/pages 将该线与集群连接起来。

您的状态机可以按如下方式实现:while 循环,内部是带有枚举选择器的 case 结构(用于状态机状态)。其中一个状态将是 "Wait for event",其中将放置单个事件结构。每次等待进一步命令时,您的状态机都应进入 "Wait for event" 状态。

例如,选中“JKI State Machine” - 这是开发具有此类架构的应用程序的良好起点。 为了获得更大的灵活性,您可以实施生产者-消费者队列状态机。 总体而言,您可以通过此 link - https://labviewwiki.org/wiki/Design_Patterns_Overview.

找到常见模式列表