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

news2024/11/26 8:34:45

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

这部分是< LabVIEW在面向对象编程中利用硬件抽象层(HAL)设计1>的下半部分。

一体化项目

因此,部署为打包库,实际上有多种方法来开发代码:首先,将查看all-in-one项目方法。父类和子类存在于同一个LabVIEW库中。即使使用调色板和构建打包库,开发人员仍然可能不小心选择了错误的类-从打包库中“隐藏”它,将子类设置为private。在一些初始化方法中硬编码子类,命名为Create.vi。

Packed library doesn’t include child classbecause it was private in the development environment

Colors denote difference between parentclass and child class

Development Methods:  Separate

  • Description: 

    • All models within individual libraries

    • Parent library defines interface

    • Children inherit from deployed abstract parent

    • Build new child without parent rebuild

    • Use a configuration file to select child

  • Downsides:

    • Can’t hide child classes

    • More projects and libraries to maintain

打包库不包括子类,因为它在开发环境中是私有的。颜色表示父类和子类之间的区别。开发方式:单独开发

描述:

单个库中的所有模型

父库定义接口

子节点继承自部署的抽象父节点

构建新的子节点而不需要父节点重建

使用配置文件选择子节点

缺点:

无法隐藏子类

更多的项目和库需要维护

对于这个方法,子类和父类在不同的项目中

•       每个仪器(电源,VNA, DMM等)都有自己的项目/库

•       父类只定义了函数的接口,没有实际的代码

•       子类继承父类的部署版本

•       可以构建子进程,而无需重建父进程

•       某种类型的配置文件将选择适当的子类

•       不能隐藏子类——当开发人员看到正在使用的特定模型时,可能会选择错误的函数

•       在这种情况下,会有更多的项目和库需要维护

独立的项目

这种结构读取仪器配置文件,该文件定义了VISA资源名和子类名,假定子类打包库在父类打包库的旁边,还假定打包库和类名相同。那么,这种方法导致了软件开发中的依赖倒置——子类依赖于父类,而主应用程序只依赖于父类。尽管主应用程序在运行时使用了子类的函数,但在编辑时它只依赖于父类。

在用HAL开发时,会遇到一些问题。比如,如何部署HAL?开发人员如何知道使用哪个函数?为哪些功能创建驱动程序?使用什么输入?以下是使用这么多仪器所面临的一些挑战:

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

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

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

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

矢量网络分析仪(vna)非常复杂,但是,一旦你学会了设置,测量类型就相当容易了。

VNA: Measurement

  • Channel ≠ Trace

  • Do all VNAs act this way?

  • Why make developer track names and pass into all VIs?

  • Keep the minor details behind the scenes

Software steps for creating a measurement:

•       Create trace (after making sureit doesn’t exist)

•       Create measurement parameter(after making sure it doesn’t exist)

•       Select type of measurement forthe measurement parameter

•       Create a measurement channel(does not match channel on screen)

•       Assign channel a parameter

•       Apply channel to trace

•       To make measurement, refer totrace, parameter name, and channel name (tracked by developer)

VNA: Electronic Calibration Module Characterization

  • ECal Module:  precision     calibration module for VNA

  • Characterization requires descriptive inputs

Our (original) approach:

  • Create a function for each descriptive value

  • Use all functions to perform a characterization

  • Copy the code over and over again

Better approach:

  • Pull low-level functions up (encapsulation)

  • Path calibration requires a lot of descriptive terms –     connector types, ancillary equipment, user name, description, etc.

  • We created a parent driver for each of the functions to set     those values

  • The extra functions were only used for a calibration

  • Once we got into multiple-UUT development, we repeatedly copied     the code over and over again – seemed crazy to keep doing this

  • We moved up a level and made the function “Ecal Characterize”     input of a cluster of all the relevant information – made much more sense,     unfortunately required us to update already completed UUTs

  • This is the principle of encapsulation – we are hiding low-level     details of the specific instrument inner workings so that the developer     doesn’t actually screw them up

What about making a change with a bigeffect?

  • Deprecate

  • Remove from Palette

  • Document the removal of support

  • Have to make an update that affects a lot of already-developed     code?  Deprecate the function (mark     the documentation so user knows not to use for future development)

  • Remove from palette

  • Cross out icon – new development shouldn’t use, but not deleted     for those already developed

  • If it doesn’t work, though, that is a different story, you have     to make the change for a bug

How generic/specific?

•       What is high-level enough thata replacement would work the same way?

•       Have I looked at multiplepotential instruments to see commonality?

Am I designing around our measurementneeds?  OR am I completely connected tothe current OEM driver?

Are the inputs common for different models?

Do we need all the inputs the driverfunction has?

•       Consult programming manual

•       OEM driver may contain extracalls that you don’t need, break out what you do (never update the driverdirectly, but copy contents into your VI and edit)

Changing an instrument is probably notcommon and comes with its own set of challenges, therefore:

Is a completely plugin-enabled solutionwith separate projects necessary?

•       One bench configuration: oneall-in-one project may be okay

•       Multiple configurations:separate projects

•       Choose one approach, don’t mix

Is the way this measurement is implementedcommon or specific to this model only?  

•       Does only my VNA treatchannels, parameters, traces this way or just mine?

Know the impact of changes!

Now a lot of these questions cannot beanswered without experience or without going down the wrong road for a while(or a few years), however it is important to adapt as you go to make theproduct more bullet proof.  Who wants toupdate the API for instrumentation in 50 UUT’s test software when an instrumentis changed?

VNA:测量

要进行测量,请参考跟踪、参数名称和通道名称(由开发人员跟踪)。VNA:电子校准模块描述

·ecal模块:VNA精密校准模块,描述需要描述性输入,

(原始)方法:

为每个描述性值创建一个函数

使用所有函数进行描述

一遍又一遍地复制代码

更好的方法:

提升底层功能(封装)

路径校准需要很多描述性术语——连接器类型、辅助设备、用户名、描述等。

为每个函数创建了一个父驱动程序来设置这些值

额外的功能仅用于校准

一旦我们进入多UUT开发,我们就会一遍又一遍地复制代码——继续这样做似乎很疯狂,现在,并使“Ecal Characterize”功能输入所有相关cluster-更有意义。这就是封装的原理——我们隐藏了特定仪器内部工作的底层细节,这样开发人员就不会把它们搞砸了。

现在,如果没有经验或没有走上错误的道路一段时间(或几年),许多问题都无法回答,但重要的是,你要适应,使产品更加有弹性。当仪器发生变化时,谁想更新50 UUT测试软件中的仪器API ?

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

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

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

相关文章

python numpy 的输出控制

示例代码&#xff1a; import numpy as np #precision: xnp.array([3.1415926]) print(x) np.set_printoptions(precision4) print(x)#threshold: xnp.arange(0,12,1) print(x) np.set_printoptions(threshold7) print(x)#edgeitems: xnp.arange(0,12,1) print(x) np.set_prin…

【大数据】clickhouse 常用语法规则优化策略详解

一、前言 在之前的文章中&#xff0c;我们了解到clickhouse作为一款列式存储数据库 &#xff0c;查询性能非常高效&#xff0c;一方面与其自身的存储引擎设计有关&#xff0c;另一方面&#xff0c;在执行查询语句时&#xff0c;底层做了大量的语法规则的优化&#xff0c;本文将…

一体化闸门控制机如何使用

一体化闸门控制机是一款集水位采集、流量计算、图片视频采集、远程通讯、远程控制、本地控制于一体的闸门自动化、信息化测控设备&#xff0c;能够在监控中心远程启闭以及闸门手/自动控制;并通过实时图像监控可以直观了解闸门的运行工况以及周边环境。 1、设备介绍 闸门自动化…

Windows11 Docker镜像存储路径更改(非C盘路径)

Windows11 Docker镜像存储路径更改&#xff08;非C盘路径&#xff09; 基于WSL2安装docker后&#xff0c;在使用过程中会发现大量的docker镜像文件&#xff0c;使系统C盘容量激增&#xff0c;对电脑后续使用造成不便&#xff0c;所以需要在安装的时候&#xff0c;手动修改dock…

已开发多款原型,或明年发布新品,三星XR专利布局大揭秘

近期据韩媒Naver新闻爆料&#xff0c;三星电子或将于明年面向开发者推出XR头显&#xff0c;以构建XR生态系统。据悉&#xff0c;三星计划通过打造XR生态系统&#xff0c;来整合元宇宙、软件、内容、元件开发和科研等上下游领域。据称&#xff0c;为了开发XR设备&#xff0c;三星…

数据仓库电商业务简介完整使用 (第二章)

电商业务简介一、电商业务简介1、电商业务流程2、电商常识1&#xff09;SKU和SPU2&#xff09;平台属性和销售属性1&#xff09;平台属性2&#xff09;销售属性二、业务数据介绍1、电商系统表结构1、活动信息表&#xff08;activity_info&#xff09;2、动规则表&#xff08;ac…

【Docker】解决Docker创建Tomcat容器实例后访问Tomcat主页时报HTTP状态404-未找到的错误

专栏精选文章 《Docker是什么&#xff1f;Docker从介绍到Linux安装图文详细教程》《30条Docker常用命令图文举例总结》《Docker如何构建自己的镜像&#xff1f;从镜像构建到推送远程镜像仓库图文教程》《Docker多个容器和宿主机之间如何进行数据同步和数据共享&#xff1f;容器…

LeetCode HOT 100 —— 215.数组中的第K个最大元素

题目 给定整数数组 nums 和整数 k&#xff0c;请返回数组中第 k 个最大的元素。 请注意&#xff0c;你需要找的是数组排序后的第 k 个最大的元素&#xff0c;而不是第 k个不同的元素。 你必须设计并实现时间复杂度为 O(n) 的算法解决此问题。 思路 一.暴力法&#xff1a; cla…

计算机研究生就业方向之去大厂做人工智能

我一直跟学生们说你考计算机的研究生之前一定要想好你想干什么&#xff0c;如果你只是转码&#xff0c;那么你不一定要考研&#xff0c;至少以下几个职位研究生是没有啥优势的&#xff1a; 1&#xff0c;软件测试工程师&#xff08;培训一下就行&#xff09; 2&#xff0c;前…

ARM32汇编逆向分析基础

寄存器和指令基本格式 寄存器 寄存器名称寄存器描述R0函数的第1个参数, 以及保存函数返回的结果R1 - R3保存函数的第2~4个参数R4 – R8通用寄存器&#xff0c;其中R7在系统调用时存储调用号R9平台相关R10通用寄存器, 可用于保存局部变量R11/FP栈帧指针, 用于记录栈帧R12过程间…

欣奥诚分享:企业最应避讳这八类广告宣传词汇

广告宣传中&#xff0c;企业最应避讳这八类词汇 众所周知&#xff0c;拥有一个朗朗上口、脍炙人口的广告标语、广告口号&#xff0c;对于企业战略部署、发展壮大具有最要作用。一个好的广告标语&#xff0c;不仅可以传达产品买点、展现品牌魅力&#xff0c;激发购买欲望&#…

安装多版本node

一、安装多版本node的原因&#xff1a; 在项目开发过程中&#xff0c;不同项目使用的nodejs版本不同&#xff0c;有时会因为node版本过高或太低&#xff0c;导致报错&#xff1b; 解决方式 利用nvm进行管理&#xff08;本文使用此种方式&#xff09;配置环境变量&#xff08;如…

iOS 组件化开发----(一)图片资源管理的方式

1.直接拖拽到工程&#xff0c;勾选Target membership 1&#xff09;Resource 的使用方式 将文件直接拖入到工程目录下, 并告诉Xcode打包项目时候把这些图片文件打包进去. 这样在应用的".app"文件夹中就有这些图片. 在项目中, 读取这些图片可以通过以下方式来获取图片…

JavaWeb开发(一)——maven仓库

一、maven仓库 1、maven的定义 Maven 是一个项目管理工具&#xff0c;可以对 Java 项目进行构建、依赖管理。 2、maven的约定配置 -- /src/main/java //项目java源代码 -- /src/main/resources //项目的资源文件&#xff0c;比如springmvc.xml -- /src/…

极狐gitlib的安装和使用

极狐gitlib的安装和使用一、实验环境二、安装部署&#xff08;不带邮箱&#xff09;三、一些操作3.1 常用命令3.2 备份3.2.1 备份文件分为两步&#xff1a;3.2.2 自定义备份位置3.3 恢复3.4 一些问题3.5 包含的组件四、使用极狐gitlib4.1 初始登录说明4.2 新建用户4.3 新建一个…

CSS之文字样式

1、字体类型设置 标签名&#xff1a;font-family注意&#xff1a;英文字体只适用于英文&#xff0c;中文字体可以适用中文和英文代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-…

Linux学习-81-Apache安装过程

17.9 Apache安装过程 Apache&#xff1a;作为LAMP架构的前端是一款功能强大&#xff0c;稳定性好的Web服务器程序&#xff0c;该服务器直接面向用户提供网站访问&#xff0c;发送网页&#xff0c;图片等文件内容。之前的名称就叫做 Apache&#xff0c;不过后来改名字叫做 httpd…

如何将Unity开发的AR程序编译到IPad/iPhone上真机运行

如何将Unity项目编译成iOS app&#xff0c;并在ipad或者iphone上真机运行呢&#xff1f;大体步骤分为三步&#xff1a; 使用Unity生成 .xcodeproj 文件使用XCode将AR APP编译到IPad/iPhone在真机上设置开发者模式和信任开发者 我的环境&#xff1a; 使用MacBook Pro 进行开发…

分布式操作系统 - 7.分布式一致性与复制管理

文章目录1.一致性与复制1.1 对象复制问题&#xff08;1&#xff09;单副本对象的同步控制&#xff08;2&#xff09;单副本同步控制方法&#xff08;3&#xff09;多副本对象的同步控制方法1.2 支持伸缩性的复制技术2.以数据为中心的一致性模型2.1 分布式数据仓&#xff08;dat…

Redis框架(五):大众点评项目 商品目录 添加Redis缓存

大众点评项目 商品目录 添加Redis缓存需求&#xff1a;基于Redis查询商品信息业务实现给商品添加缓存给店铺类型添加缓存总结和业务流程SpringCloud章节复习已经过去&#xff0c;新的章节Redis开始了&#xff0c;这个章节中将会回顾Redis实战项目 大众点评 主要依照以下几个原则…