欢迎光临
我们一直在努力

#06 硬件抽象层 Hardware Abstract Layer

硬件抽象是一种标准的设计模式,解决了脱离硬件调试的问题

当Labview在与硬件通讯时,我们需要调用硬件驱动,但是往往有时候手边没有硬件或者暂时不能连接硬件的时候,仍然需要调试其他的功能代码,这个时候程序如果还是保存调用硬件驱动代码,则会产生错误,那如何能够在没有硬件的条件下完成代码调试的工作?

最直观的办法很多人会在调用实际硬件驱动的时候,用Disable Structure将部分代码禁用,待到连接硬件时再取消禁用,然而这并不是长久之计。

1硬件抽象

首先,我们定义一个DMM的抽象父类,子类则是:实际的硬件类A34401以及模拟硬件类Emulation。其次,在父类DMM中,定义动态调用的方法如Ini,Query Voltage,Cleanup等操作,而实际的硬件类A3440用来编写实际的硬件驱动代码,模拟硬件类Emulation则用来编写模拟硬件操作的代码.

看一下Query Voltage的代码,Parent类用来定义需要的Voltage数据,而在两个子类中,分别以不同的方式来实现Voltage采集。

我们只需要在主程序开始选择需要实例化的子类,而在后续的ini,query voltage,cleanup等父类vi中,Labview会自动根据实例化的子类动态调用子类所属vi。因此,这里的DMM类则是实现了抽象硬件层,我们无需频繁的更新程序代码,只需要分配不同的子类来继承这个抽象类即完美的解决了开始的问题。

2实际应用

父类定义需要调用的硬件操作方法以及需要传递的私有数据。

以AI Acquire为例,两个子类分别实现实际采集和模拟采集操作。

除了case结构,我们还可以根据路径来引入需要实例化的子类:

在AI采集的时候,Labview则会根据已实例化的子类引用动态分配至子类的方法中执行,而通过上一次提到的HelpLoop来实现采集的循环并广播出去。

硬件抽象层解决了代码脱离硬件调试中的问题,让我们可以更加专注于软件的其他功能模块。

赞(12)
分享到: 更多

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址