教你创建Custom Device自定义设备

2023-05-16

 

1.问题描述

在半物理仿真测试中需要调用仿真机上的硬件设备实现仿真设备间数据通信、模拟和数字信号的采集或驱动等功能。在Veristand实时测试配置环境中可以通过创建Custom Device自定义设备实现PXI机箱(仿真机)上的硬件设备调用。

那么什么是Custom Device?

个人理解Custom Device是Veristand功能上的一种扩展。Veristand只作为一种环境配置工具存在,可以将Simulink模型编译生成的dll文件配置在实时环境中运行。但是不能实现对模型产生或接收数据的运算操作(编程、运算),特别是涉及到硬件调用的操作,比如需要将串口接收到的数据传送给Simulink模型。这时就需要Custom Device作为数据的“二传手”,首先从串口中接收数据并处理,然后将处理好的数据发送给模型的输入端口。Custom Device的实质是通过特定的Labview编程方式调用PXI机箱(仿真机)上的硬件外设,将编好的程序通过“程序生成”,生成特定的llb文件,在Veristand配置环境中,可以调用生成的llb文件,最终实现Labview程序在RT环境中运行,实现数据采集或处理的功能。

这里可能有疑惑要问LabVIEW程序要是在RT下运行可以通过在LabVIEW下创建实时工程的方法来解决,为什么还要生成llb文件这么繁琐?这又回到了最核心的问题,因为我们想实现Simulink模型在实时环境下运行!想要调用Simulink模型就必须在Veristand环境下配置!想在Veristand环境下调用硬件就必须创建Custom Device(调用硬件可能不只有创建Custom Device这一种方法)!

本文将会讲解如何创建一个涉及到串口的Custom Device并在Veristand环境中配置运行。

另注:以上对Custom Device说明的源自于个人理解,不代表官方资料解释.

2.问题解答

2.1准备工作

软件环境:NI Labview 2015,NI Veristand 2015,Microsoft Visual Studio 2008

硬件环境:PXIe-8135,PXI-8434 RS232串口卡,Serial S8串口线,飞行控制器V3。

2.2程序功能

(1)在Veristand实时环境中加入一个串口的自定义设备。

(2)将模型产生数据通过串口发送至飞行控制器,并接收飞控发送的控制量,将控制量传送至模型中对应的input端口。

2.3开发过程

(1)打开LabVIEW安装目录下的LabVIEW 2015\vi.lib\NI Veristand <vi.lib>\NI Veristand\Custom Device Tools\Custom Device Template Tool\Custom Device Template Tool.vi。这个vi的作用是配置我们要建立的Custom Device工程的信息。运行这个vi后会生成一个Labview工程,Custom Device的具体功能会在到时候生成的工程中去设计。Target Folder含义为该Custom Device项目的保存目录,Custom Device Name为自定义设备的名称,Execution Mode选择异步运行方式。由于这个教程不涉及到Extra Page,所以对第4项不用更改。

1 配置Custom Device Template Tool.vi

(2)运行该vi,得到PXI_8434 Custom Device Project.lvproj,关闭Custom Device Template Tool.vi。

(3)展开新创建工程中的PXI_8434 Custom Device.lvlib,如下图所示:

2 自动生成的Custom Device Project

展开后可以看到工程中包括4个vi文件,其中:

PXI_8434 Initialization.vi实现的功能是当Veristand中创建该Custom Device时,为Custom Device创建相对应的属性和通道;

PXI_8434 Main Page.vi实现的功能是在Veristand中显示Custom Device的属性和通道的信息;

PXI_8434 RT Driver.vi是Custom Device的执行核心,也是最终在RT环境下运行的程序,Custom Device调用外设和数据处理的功能就是在这个vi中实现的。

(4)打开PXI_8434 Initialization.vi,利用Projiect里面Custom Device API.lvlib里面的API函数创建通道和属性。

这里解释一下通道和属性的区别:

Channel(通道):Channel(通道)是针对我们要生成的Custom Device而言的。因为我们创建的Custom Device需要与Simulink模型实现数据交互,因此需要有与模型数据相对应的输入和输出通道。输入是指从模型向Custom Device注入数据的通道。输出是指从Custom Device向Simulink模型注入数据的通道。

Property(属性):Property(属性)是针对我们生成Custom Device时所调用的硬件设备(板卡等)而言的。因为硬件设备(板卡等)在调用时需要设置板卡的属性,比如对于多用IO卡需要配置板卡的通道对应的功能,对于串口卡需要配置所使用的串口号、波特率等。

PXI_8434 Initialization.vi修改后包括5个部分,如图3所示。1、3部分中使用的VI是Add Custom Device Section,实现逻辑上的分组,如输入和输出;2、4部分使用的VI是Add Custom Device Channel,为各分组添加通道;第5部分属性配置在Main Page中介绍。

3 修改后的PXI_8434 Initialization.vi

(5)保存好PXI_8434 Initialization.vi后打开PXI_8434 Main Page,在此VI中配置    Custom Device属性,在该项目中也就是配置串口板卡的属性,我们通过MAX确定我们调用的串口为COM3,因此在COM Board Resource Name设置为COM3。由于串口的参数可以在RT中设置,因此本例中的Pattern只做创建工作,不会真正去调用,设置Pattern默认为0。

另外多说明一下,Main page中采用了一个顺序帧结构和一个事件结构。在顺序帧结构中所做的工作是读取默认的属性,当属性在Veristand中的配置改变时,会通过事件结构将新值赋给Custom Device属性。

4 修改后的Main page程序框图

(6)保存PXI_8434 Main Page,打开PXI_8434 RT Driver VI.vi。添加代码来读取Custom Device属性中的Resource和Pattern,默认Resource为COM3,默认Pattern为0,如图5所示。除了串口名外,对传口其他参数的配置采用VISA串口配置控件,设置波特率等参数。

5  RT Driver VI中获取板卡资源和Pattern信息,初始化并配置串口

利用RT FIFO Read获取模型产生的数据,并利用局部变量写入到VISA串口板卡里面;利用RT FIFO Write,将VISA串口板卡获得的信息写入到OUT_1里面,系统框图如图:

 

6  RT.vi系统框图

(7) 保存所有VI,打开项目中程序生成规范“Configuration”。一般情况下不需要更改里面的设置,如果你在一开始的时候创建了Extra Page,请在生成规范里面的“源文件”中,将Extra Page相关的VI添加到“始终包含”里面。

(8)在“Engine”程序生成规范的“源文件设置”里面,将目标变为“PXI_8434  Engine LLB”。设置的目的在于Veristand下载程序到RT的时候只会下载Custom Device的Engine LLB,如果不将所需要支持的文件放到这个LLB里面,Veristand会在部署的过程中提示VI断开,无法执行。另外一种方式就是通过FTP,将所需的文件手动地添加到Real-time控制里面Custom Device相对应的文件夹中(C:\ni-rt\Veristand\Custom Devices\Custom Device Name)。

(9)保存配置,生成“Configuration”和“Engine”。两个LLB和相对应的XML文件会自动生成在Veristand的<Custom Device>文件夹中,如图7所示。(Win7的位置位于:C:\Users\Public\Documents\National Instruments\NI VeriStand 2015\Custom Devices)

7 生成的文件

2.3试验验证

(1)建立一个Simulink模型,具有两个输出端口和一个输入端口,按照要求配置编译器,注意模型Solver需要选择为定步长求解,步长可选择为1ms,编译后生成模型对应的dll文件。

8 测试模型

(2)在Veristand中创建测试项目,配置Controller,添加Custom Device(PXI_8434),配置Resource为COM3(根据MAX的串口名和自己的使用需求设定),如下图所示。

9 配置Veristand,创建PXI_8434Custom Device

(3) 保存并关闭System Explorer,打开Project Explorer里面的Tools->Workspace Tools->Console Viewer,如下图所示:

10 控制台信息

(4)在System Explorer中,通过Tools->Edits Mappings映射Simulink模型与Custom Device的引脚,如图11所示。

10  Edits Mappings映射

(5)在台式机上接入一根Usb转串口的连接线,打开串口助手后选择好对应的Com口通道。

(6)在Workspace中创建两个个数值输入控件和数值显示控件,分别映射到Custom Device上面的IN和OUT:

11 work space中创建输入和显示控件并关联Custom Device通道

(7)通过串口线缆将板卡上的COM3与USB串口连接,明确DB9引脚的定义,保证收发对接正确。

(8)运行Veristand,运行串口助手,以1000ms为周期向pxi_8434发送字符串“1.0000”,同时观察串口接收区,如图12所示。

12 串口数据发送及监测

观察Workspace,可以看到模型产生两个数据分别为1、2,这两个数据通过串口Custom Device发送至串口助手,也就是我们在串口接收区接到的数据。同时我们还可以Workspace看到Out显示值为1.这个值就是我们通过串口助手向串口板卡的“1.00”,如图13所示。

13 WorkSpace数据状态显示

2.4最终发布

Custom Device调试完之后需要发布到另外一台电脑上面,进行更进一步的测试和最终发布。

  1. 创建Readme.txt用来介绍该Custom Device实现的功能、适用条件以及使用方法。
  2. 将源代码(往往创建一个Source文件夹)、生成的Custom Device(往往创建一个Built文件夹)以及Readme.txt打包发布。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

教你创建Custom Device自定义设备 的相关文章

  • 如何唯一标识 USB 设备?

    我想知道如何获取 USB 存储设备的唯一 ID 我已经知道如何从这篇文章中获取 SCSI 序列 id linux下C U盘序列号该帖子提到使用设备描述符来获取 ID 有人可以发布一些代码来确定 Linux 下的设备描述符信息吗 ls l d
  • 在设备上记录数据并检索日志

    在 Xcode 中进行调试构建时 无论我使用的是模拟器还是实际设备 NSLog printf fprintf assert 和 NSAssert 语句都会出现在控制台上 如果我现在在设备上运行一个发布版本 假设我发送了一个测试飞行版本并在我
  • WP7:获取手机名称

    我正在寻找一个简单的信息 我想获取用户当前使用的设备的名称 例如 我想获取 Eric s Phone 就像在 Zune 中一样 是否可以 我寻找设备扩展属性 参见link 或 UserExtendedProperties 参见link 谢谢
  • Tensorflow:使用 CPU 的特定核心执行操作

    目前可以通过 tf device 函数指定用于特定操作的 CPU 或 GPU 但是无论如何您都可以指定一个coreCPU 的 目前没有用于将操作固定到特定核心的 API 尽管这将是一个很好的选择功能要求 https github com t
  • 网络设备发现

    对于我的 Android 应用程序 用户需要连接到托管在同一 LAN 上某处的服务器 同一 LAN 上可以托管多个服务器 为了方便用户 我打算扫描 Android 设备当前连接的 LAN 然后列出所有运行服务器的网络设备 而不是让用户将 I
  • android 在模拟器或设备中执行?

    有什么方法可以知道我的应用程序是在模拟器上还是在设备上运行 我使用的代码片段适用于 Intel 和 ARM 模拟器 if Build MODEL contains google sdk Build MODEL contains Emulat
  • Windows Phone 8.1 C# 应用程序:仅在发布模式下的真实设备上发生严重崩溃 (ExecutionEngineException)

    想象一下以下结构类型 public struct Token IDictionary
  • Android adb 在列表设备和其他命令中挂起

    当我尝试从终端运行 adb 命令时 尤其是adb devices adb kill server and adb start server它挂起 我需要输入CTRL C退出进程 无法将 APK 部署到物理或虚拟设备 有东西阻止了 adb 进
  • 如何编写Linux驱动模块调用/使用另一个驱动模块?

    我正在开发一个 Linux 驱动程序可加载模块 我必须在我的驱动程序中使用另一个设备 某种驱动程序堆叠在另一个驱动程序上 如何在我的驱动程序中调用 使用其他驱动程序 我认为它们都在内核中 所以可能有一种方法可以直接使用另一个驱动程序 您将需
  • Rails devise_token_auth gem,如何设置密码重置链接?

    我在使用这个 gem 的密码重置功能时遇到问题 https github com lynndylanhurley devise token auth https github com lynndylanhurley devise token
  • Windows shell:如何获取音频设备名称?

    我不确定这是否严格来说是一个编程问题 只要我 不介意使用额外的软件来解决问题 只要它保持可编写脚本或命令行即可 这是 非 GUI 解决方案 不管怎样 我已经发布了另一个 有点不同 问题超级用户 https superuser com que
  • 适用于多种设备的演示技术

    我们的应用程序应该为多种设备提供服务 从简单的智能手机 iPhone 触摸屏到普通浏览器 应用程序是分层的 因此我们可以重用业务层和持久层 然而 我们也想对单个表示层进行编程 例如 我知道 ASP NET 根据浏览器类型生成不同的 html
  • 如何以编程方式获取 Admob 的设备 ID?

    我有多个设备 而且可能还会有更多 并且不想一一添加 有人知道 Admob 使用什么 ID 吗 String aid Settings Secure getString getContext getContentResolver androi
  • 使用 Devise 身份验证进行 Ruby on Rails 功能测试

    我正在寻找一个奇怪问题的解决方案 我有一个控制器 需要身份验证 使用 devise gem 我添加了 Devise TestHelpers 但无法让它工作 require test helper class KeysControllerTe
  • 如何在 Unix 中从键盘设备捕获用户输入?

    我想从键盘设备捕获所有用户输入 一次读取一个字节 我编写了以下代码 但它不起作用 if fd open dev char O RDONLY 1 tty open dev tty O RDONLY tcsetattr 0 TCSANOW or
  • 无法为 Kindle Fire HD 安装 ADB

    我正在尝试root它 尽管在我安装了正确的ADB驱动程序之后 当我插入我的Kindle fire HD 7 时 点燃火 gt Android 复合 ADB 接口 没有出现在设备管理器中 因此我无法执行root 我已将 0x1949 添加到
  • 如何识别“hw.machine”标识符可靠?

    我正在寻找最官方的来源来完成 维护此方法 NSString platformString NSString platform self platform if platform isEqualToString iPhone1 1 retur
  • 限制特定设备销售应用程序?

    是否可以通过特定设备或设备的功能 屏幕分辨率 处理器 磁盘空间等 来限制 Android Market 上应用程序的销售 我知道我会受到人们的轰炸 他们说如果你的应用程序设计得好 它应该能够在任何尺寸的设备上运行 这一切都很好 但出于某些原
  • Android 设备 ID(不是 IMEI)

    我使用命令 adb devices 列出连接的设备 在我的电脑上我得到 附加设备列表 HT9CTP820988 器件 我的问题是 如何以编程方式获取此 id HT9CTP820988 你所看到的adb devices命令是序列号 序列号 创
  • 支持的 Android 设备:0 台设备

    我们是 TourisMap 的开发商 我们不明白为什么在 Google Play 开发者控制台上上传 apk 后 我们支持 0 台设备 我们个人的想法是 Manifest 和 build gradle 都可以 我们可以生成 apk 然后我们

随机推荐