LabVIEW在面向对象编程中利用硬件抽象层(HAL)设计1

news2024/11/19 13:22:01

LabVIEW在面向对象编程中利用硬件抽象层(HAL)设计1

LabVIEW面向对象编程(OOP)采用仪器为中心的硬件抽象层(HAL),使用面向对象的设计模式,可以部署一个仪器重用库,该库可以随着需求和仪器趋势的变化而增长,同时在不可避免的硬件过时中,可以继续使用,避免软件维护成本。

硬件抽象层(HAL)允许测试开发人员在与用户沟通时使用高级功能。通常,OEM开发或定制的仪器驱动程序是特定于某个型号或仪器系列的。对于HAL,底层实现对于顶层的开发人员来说并不重要。该设备可以使用IVI或SCPI,它可以是GPIB,以太网,串口等。HAL不会改变仪器的接口。比如对于电源,希望设置电压并打开输出,作为测试开发人员,并不必关心它是如何发生的。

使用HAL的优点:

不需要依赖于特定的仪器型号

可以轻松地在模拟硬件和实际硬件之间切换

无需重新编译EXE即可更改仪器和软件

使用它的缺点包括:

需要更多的前期设计

需要更多的软件开发来设计好它

对于简单的程序开发来说,似乎就不适用了,但如果想持续提升自身水平,或者项目需要持续升级和维护,那这些缺点不值一提。

DMM是常用的设备,很多厂家都有DMM产品,每一家的功能类似,但程序却不尽相同。

传统方法是使选择结构。这个例子是一个完整的配置、读取、关闭循环,但是如果这些函数分布在代码中,或者当需要添加新设备时该怎么办?开发人员必须找到所有的仪器驱动程序,并添加一个新的案例或替换为新的驱动程序集。

在开发中还会有不同的问题—两个设备之间的配置测量输入不相同。是否需要强制转换以匹配不同的驱动程序集。但是,无需如此操作。

著名的程序员比尔·盖茨,曾经说过,“我选择一个懒惰的人去做艰苦的工作。因为懒人总能找到简单的方法”

回到定义——抽象的工具没有具体的存在。它只是想要执行的实际功能的接口。使用LabVIEW面向对象编程的概念来实现。

父类是抽象的实现——没有真正的功能,只是定义了接口

子类是具体的实现——实现接口的功能并匹配连接器窗格

现在所讨论的大多数仪器都相当简单:电源、DMM等。那复杂的仪器呢?频谱分析仪,矢量网络分析仪?该如何部署HAL使用?如何选择正确的子类?

如LabVIEW开发的射频试验台需要控制众多仪器,包括:

10台电源

2块电表

1台矢量网络分析仪(VNA)

1台频谱分析仪

1 台示波器

1台信号发生器

2台交换机

3 张开关卡

2 台万用表

2台形发生器

涉及众多公司比NI, Keysight,Rohde& Schwarz,Tektronix,Gigatronics等。要实现包括所有这些仪器的自动化测试台架的跨功能、跨公司的开发工作。建立3个测试试验台,使用期限在20年。

那么如何部署HAL?开发人员如何知道使用哪个函数?为哪些功能创建驱动程序?使用什么输入?以下是使用这么多仪器所面临的问题。

1.     如何部署HAL供开发人员使用?

2.     软件开发人员如何知道使用哪个函数?

3.     需要为哪些功能创建驱动程序?

4.     使用什么输入?特别是当它是环形输入时,不同的驱动器有不同的解决方案

通过讨论,发现最好的方法是使用打包的项目库(*.lvlibp)来部署代码——不能意外编辑,并且可以设置为可调试。这就要求做到:

•在项目中创建父工具类并编译

•所有仪器类型继承自父仪器

开发人员不应该使用子对象,那样会破坏整个目的

•创建调色板以确保开发人员使用的是顶级函数

•手动创建调色板文件

•添加到库(不是类)

•构建打包的库

•创建一个部署的调色板,将调色板文件从打包的库中拉出来

•顶级工具使用相同的颜色(蓝色),所有子类使用相同的颜色(红色),这样就很容易在代码审查中判断是否使用了不正确的函数

需要说明的是,上述的例程和文档,都是可以下载的,双击即可打开,其中压缩文件是可以采用粘贴复制的方式,拷贝到硬盘上。这不是图片,各位小伙伴看到后尝试一下,这个问题就不用加微信咨询了。有关LabVIEW编程、LabVIEW开发等相关项目,可联系们。

设备有通讯协议,根据协议开发了LabVIEW程序,如下附件所示。

相关资料说明,如下所示。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/80885.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Redis】主从复制

一、简介 1、什么是主从复制 主机数据更新后根据配置和策略,自动同步到备机的master/slave机制,Matser以写为主,Slave以读为主,简单来说如下图 2、主从复制的好处 读写分离:Matser以写为主,Slave以读为主…

指针的初步认识

🏖️作者:malloc不出对象 ⛺专栏:《初识C语言》 👦个人简介:一名双非本科院校大二在读的科班编程菜鸟,努力编程只为赶上各位大佬的步伐🙈🙈 目录前言一、指针是什么1.1 如何理解编址…

《深入分布式缓存-从原理到实践》笔记

《深入分布式缓存-从原理到实践》笔记 笔记作者:arthury.dy.lee 日期:2018.12.05 笔记只是本人觉得重要的部分的一些摘要或总结,更侧重于后5章。其它更详细内容,请自行买书阅读。 文章目录《深入分布式缓存-从原理到实践》笔记…

【Linux C】线程简单介绍

线程的概念 基本概念 进程:是指⼀个内存中运⾏的应⽤程序,每个进程都有⼀个独⽴的内存空间,⼀个应⽤程序可以同时运⾏多个进程;进程也是程序的⼀次执⾏过程,是系统运⾏程序的基本单位;系统运⾏⼀个程序即…

时序预测 | MATLAB实现具有外生回归变量的ARIMAX时间序列预测(含AR、MA、ARIMA、SARIMA、VAR对比)

时序预测 | MATLAB实现具有外生回归变量的ARIMAX时间序列预测(含AR、MA、ARIMA、SARIMA、VAR对比) 目录 时序预测 | MATLAB实现具有外生回归变量的ARIMAX时间序列预测(含AR、MA、ARIMA、SARIMA、VAR对比)预测效果基本介绍程序设计ARMAARMAARIMASARIMAARIMAXVAR参考资料预测效果…

LC-6260. 矩阵查询可获得的最大分数(最小堆,并查集+离线(海平面上升问题))【周赛323】

6260. 矩阵查询可获得的最大分数 难度困难7 给你一个大小为 m x n 的整数矩阵 grid 和一个大小为 k 的数组 queries 。 找出一个大小为 k 的数组 answer ,且满足对于每个整数 queres[i] ,你从矩阵 左上角 单元格开始,重复以下过程&#xf…

2022年了,你还没搞清楚箭头函数与普通函数的区别嘛?

目录 1.箭头函数简介 2.箭头函数与普通函数的区别 A.声明方式不同,匿名函数 B.this指向不同 C.箭头函数的this永远不会变,call、apply、bind也无法改变 D.箭头函数没有原型prototype E.箭头函数不能当成一个构造函数 F.箭头函数没有自己的argume…

javaSE(数据类型、运算、逻辑控制、方法)

1.初识Java JDK、JRE、JVM之间的关系? JDK(Java Development Kit):Java开发工具包,提供给Java程序员使用,包含了JRE,同时还包含了编译器javac与自带的调试工具Jconsole、jstack等。 JRE(Java Runtime Environment):Java运行时环…

LeetCode 1775. 通过最少操作次数使数组的和相等 --双指针

通过最少操作次数使数组的和相等 中等 174 相关企业 给你两个长度可能不等的整数数组 nums1 和 nums2 。两个数组中的所有值都在 1 到 6 之间(包含 1 和 6)。 每次操作中,你可以选择 任意 数组中的任意一个整数,将它变成 1 到 6 …

Android9.0以上系统安装Edxposed

说明:仅供学习使用,请勿用于非法用途,若有侵权,请联系博主删除 作者:zhu6201976 一、背景说明 Android9.0以前,Xposed框架可通过apk进行快速安装,github地址: GitHub - rovo89/Xpos…

CRACK:CAD Exchanger SDK 3.15.0/MAC/WIN/LINUX/Android

CAD Exchanger SDK用于读取、写入和可视化 3D CAD 文件的软件库 通过访问 CAD 和 BIM 数据,快速轻松地丰富您的 Web、服务器或桌面应用程序。Ω578867473 使用 CATIA、SOLIDWORKS、Creo、STEP、JT、IFC 以及来自 C、Python、C#、Java 和 JavaScript 的更多格式。 适…

人民日报强烈推荐的13本证书,含金量都很高!

人民日报每年都会推荐一些当代最具含金量的证书,并建议大学生在大学期间的时候着手准备,为毕业后的简历添加色彩。 本次,人民日报推荐的证书主要有下列13种: 01 CPA(注册会计师) 含金量:★★…

博客管理系统

大致思路 1. 引入的依赖 数据库 Maven Repository: mysql mysql-connector-java 5.1.47 (mvnrepository.com) <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java --><dependency><groupId>mysql</groupId><artifactId>mys…

centos7用容器搭建svn仓库和管理页面

文章目录安装docker拉取 svn 仓库管理镜像创建仓库使用仓库安装docker 安装 docker 服务 yum install -y docker 修改 docker 服务配置&#xff0c;添加镜像拉取加速路径 vim /etc/docker/daemon.json javascript {"registry-mirrors": ["http://f1361db2.m.da…

【网页期末作业】基于HTML学校教育网页项目的设计与实现

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

更自动化的开发----给开发插上恣意飞翔的翅膀!

总结&#xff1a; 设置启动项&#xff1a;开机时候快速启动自己所需要的程序&#xff0c;根据程序数量不一样&#xff0c;每天节省可重复的劳动时间约为5s-1min(此处数据为自己瞎说 O(∩_∩)O哈哈~)&#xff1b; 使用生成代码的插件&#xff1a;开发使用easycode的插件&#…

m基于多D2D通信对和多蜂窝用户的LTE预编码技术matlab仿真

目录 1.算法描述 2.仿真效果预览 3.MATLAB核心程序 4.完整MATLAB 1.算法描述 LTE网络中采用MIMO技术增加系统容量&#xff0c;提升吞吐率&#xff0c;从理论上来看,多天线的空分复用能成倍增加系统容量。但实际上并非如此,如&#xff0c;22MIMO的容量C&#xff08;容量&…

深度学习实验3 - 卷积神经网络

文章目录实验要求数据集定义1 手写二维卷积1.1 自定义卷积通道1.2 自定义卷积层1.3 添加卷积层导模块中1.4 定义超参数1.5 初始化模型、损失函数、优化器1.6 定义模型训练和测试函数&#xff0c;输出训练集和测试集的损失和精确度1.7 训练1.8 loss及acc可视化2 torch.nn 实现二…

一文打通ER图(手把手教你画)

期末了&#xff0c;E-R图也是大学课程设计中经常用到的&#xff0c;也是期末考的重点&#xff0c;毕竟大学生也没什么好考的&#xff0c;最近也有不少同学问&#xff0c;不少单子也扯到E-R图&#xff0c;但是我看了看网上的玩意好像没到手把手的地步&#xff0c;那么我就写一个…

Java面试题总结-ArrayList和LinkedList的区别

ArrayList和LinkedList都实现了List接口&#xff0c;并且两者都不是线程安全的。他们有以下的区别&#xff1a; &#xff08;1&#xff09;首先&#xff0c;最最本质的区别是&#xff1a;ArrayList内部使用的是动态数组来存储元素&#xff0c;而LinkedList内部使用的是双向链表…