【功能全局变量】设计模式讲解

1.什么是功能全局变量(FGV)?

        FGV是一种标准的LabVIEW数据结构,允许对数据或资源进行受控访问,通常允许执行各种操作。每次调用FGV时,框图只会执行一次,要么进行数据更新,要么进行读取数据。

        功能全局变量最常使用未初始化的移位寄存器或未初始化的反馈节点作为存储数据的机制,并支持您在应用程序中的任何位置(即“全局”)访问该数据。只要 VI 仍在内存中,USR 就会在 VI 的连续运行之间存储其数据。

        功能全局变量又称LV2型全局变量,VI Global。

        一些文章也可能任务“动作引擎(AE)”也可以称为功能全局变量,严格来说,FGV是AE的一个子集,它只允许对数据进行读/写访问,AE是更大的集合,它允许对数据执行一些其他定义的操作。

        功能全局变量的主要用途是在整个项目里提供水平和垂直的数据共享。

  •         水平共享:多个自主运行的顶层VI都可以访问相同的数据。
  •         垂直共享:任何深度的子 VI 都可以访问数据,而无需使用连线方式传递数据。

         另一个主要的用途是封装某些功能,尤其是与数据和资源相关的功能,这种封装可保护资源并提供与数据或资源交互的可扩展接口。封装还允许您避免在单个 VI 中使用过多的移位寄存器。

2.功能全局变量与全局变量

        FGV可以有效的防止数据竞争的发生。

        在选择FGV或全局变量时,应考虑三个标准:

  • 性能:如果确认不会发生竞争条件(只有一处地方写入),那么选择全局变量,与FGV相比,全局变量的速度更快
  • 自定义范围:如果希望设置某些数据的范围(数值区间),则FGV可以在设置值时强制执行此操作。
  • 竞争条件:当两段并行代码修改同一个变量时,可能会发生竞争条件。例如,两段代码同时写入变量的值。最后保存变量新值的代码段会覆盖另一段代码写入的值。这可能会导致在后续读取变量时出现意外值。如果以不安全、意外的方式使用,普通全局变量可能会导致代码中出现竞争条件。FGV 可以帮助防止这种情况。

        关键的读取-修改-写入代码部分已作为 FGV 的操作实现。由于 FGV 的非重入设置确保一次只执行一个操作,因此两个调用将始终相继执行,从而防止出现竞争条件。

        但是 FGV并不是完全没有竞争的,如果需要多次调用FGV,那么竞争条件可能也会存在,只有当所有数据更新都在 FGV 内部通过一次调用完成时,竞争条件才会被消除。以下是允许 FG 出现竞争条件的几种方法。

  • 从FGV中请求数据,改变后再写回FGV。
  • 连续修改,例如{设置数据、规范化数据、排序数据、输出最大值},当您对数据进行排序时,可能已经设置了尚未初始化的新数据。

3.功能全局变量的实现方式

        功能全局变量通常具有一个动作输入参数,用于指定VI执行的任务,VI使用While循环中的未初始化的移位寄存器来保存操作的结果。

FGV(Simple)

 

FGV-AE(封装set、get、modify)

 

         调用VI。 

        也可以加入事件结构,控制。

 

FPV-AE(Delay)

 封装全局变量

        创建一个全局变量,将其添加到项目库并将访问范围设置为私有。

        在lvlib里创建VI。 

         调用VI。

 FGV(资源存储)

        该设计模式与键值查找表类似,名称数组与数据集数组一一对应,无法防止竞争条件,但是允许对有效数据进行限定。

        常用于存储参考资料,设备信息,数据存储路径,配置信息等。

        

DVR

        这是将任意数据类型封装到引用的最简单的方法。

        creat

         get

        Decrement

         Increment

        Destroy 

        

        调用VI。

        

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值