教你创建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自定义设备 的相关文章

  • 针对不同设备应用分辨率

    我一直在尝试为一系列设备设置屏幕分辨率 我已经查找了所有答案 根据我的理解 如果我创建 res layout normal res layout large 等 我可以在那里放置调整后的布局应用程序将自动加载它们 怎么还没有出现这样的情况
  • 怎么知道是iphone还是ipad?

    我想知道用户使用iphone还是ipad 如果用户使用iphone我想打开相机 如果他使用ipad或在模拟器中运行我想打开库 怎么可能 如何查找设备的详细信息 如何通过xcode知道用户当前使用的设备 NSString deviceType
  • 在Python中获取音频输入设备列表

    如何使用 Python 以这种格式获取 Linux 中的音频输入设备列表hw 0 1 我已经使用 pyaudio 尝试了以下操作 def getaudiodevices p pyaudio PyAudio print p get defau
  • 如何扫描 LAN 网络中的设备

    我想在 LAN 网络中进行扫描以查找链接的设备 我正在 IOS 中为 IPAD 开发一个应用程序 我该怎么做 因为这些是移动设备 所以我假设您想要在无线网络上查找设备 理论上 由于 wifi 使用共享介质进行通信 因此您可以被动侦听流经网络
  • Eclipse 设备选择器找不到我的 Dell Streak

    我开始为 Android 进行开发 我想在我的 Dell Streak 中测试我的应用程序 它运行的是 1 6 我的操作系统是 Windows 7 根据这个链接http developer android com guide develop
  • 获取linux中每个设备的内存映射

    如何获取 Linux 识别的所有物理设备的内存映射 我已经查看了 proc iomem 和 proc ioports 但是 我无法找到每个设备的内存映射 关于如何实现这一目标有什么想法吗 据我所知 唯一通用的方法是 proc iomem 这
  • android 在模拟器或设备中执行?

    有什么方法可以知道我的应用程序是在模拟器上还是在设备上运行 我使用的代码片段适用于 Intel 和 ARM 模拟器 if Build MODEL contains google sdk Build MODEL contains Emulat
  • 开始对计算机以外的其他东西进行编程的最佳方法是什么? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 在计算机之外开始编程的最佳方法是什么 我指的不是带有 API 的手机之类的主流产品 请假设具备 C C 的工作知识 我投票给任天堂 DS 不错的
  • 当我切换设备时 Android Logcat 不显示日志

    我正在尝试使用 Logcat 来帮助诊断我的 Android 问题 我经常插入手机并运行模拟器 有时我在模拟器上调试 有时我在手机上调试 甚至可能在第三个设备上调试 设备切换后 Logcat 不会继续显示消息 如何指定 Logcat 的功能
  • 如何通过安装 .app(二进制)文件在设备上测试应用程序? (不使用Xcode进行测试)

    我创建了一个应用程序 我想将其发送给另一个人进行测试 他有一部 iPhone 和一台 Mac 但他的 Mac 上没有 xcode 他不是 iPhone 程序员 所以 如果我发送 app 文件 他可以在他的 iPhone 上测试吗 如果没有
  • 将 Windows 设备路径解析为驱动器盘符

    如何解析 NT 样式的设备路径 例如 Device CdRom0 到其逻辑驱动器号 例如G 编辑 不幸的是 卷名称与设备路径不同GetVolumePathNamesForVolumeName 行不通的 希望下面的代码足以解决这个问题 在初始
  • 用 C++ 读/写设备

    如何用 C 读取 写入设备 该设备位于 dev ttyPA1 我考虑过 fstream 但我不知道设备是否具有我可以在不阻塞应用程序的情况下读取的输出 我的目标是创建一个应用程序 您可以在终端中写入一些内容 然后将其发送到 dev ttyP
  • 如何在 Unix 中从键盘设备捕获用户输入?

    我想从键盘设备捕获所有用户输入 一次读取一个字节 我编写了以下代码 但它不起作用 if fd open dev char O RDONLY 1 tty open dev tty O RDONLY tcsetattr 0 TCSANOW or
  • 如何让我的设备振动?

    我正在使用 AS3 为 Android 制作 Flash 游戏 我希望用户知道他通过使设备振动一秒钟来按下按钮 有人可以向我解释如何才能做到这一点吗 我是否需要导入特定的类以及代码应该是什么样子 提前致谢 要使用振动扩展 AIR 应用程序将
  • 检测到设备正在关闭?

    在我的 Android 应用程序中 如果设备突然关闭 我需要执行一些操作 有什么方法可以检测设备是否已关闭 广播操作 设备正在关闭 这是广播时 设备正在关闭 完全关闭 而不是睡眠 一次 广播完毕 将进行最后的关闭 所有 未保存的数据丢失 应
  • Mozilla firefox 版本 53 在“响应式设计模式”中不显示“设备”选项

    根据这个链接 https developer mozilla org en US docs Tools Responsive Design Mode 它应该 但我的响应式设计模式似乎来自版本 52 之前的版本 尽管 Firefox 说它是版
  • Android Studio 无法识别我的设备 - 一加一

    我激活了 开发人员选项 并选中 USB 调试 我在 sdk 上安装了 google usb 驱动程序 但 Android studio 仍然无法识别我的手机 一加一 我在朋友的笔记本电脑上测试了我的手机 它可以工作 当我安装驱动程序时 我的
  • 在 Windows 上使用 Python 打开设备句柄

    我正在尝试使用 Giveio sys 驱动程序 该驱动程序需要先打开一个 文件 然后才能访问受保护的内存 我正在查看 WinAVR AVRdude 中的 C 示例 它使用以下语法 define DRIVERNAME giveio HANDL
  • C#驱动开发?

    在我一头扎进 C 之前 我一直认为 C 或 C 最适合在 Windows 上开发驱动程序 我不喜欢在 NET 机器上开发驱动程序的想法 但 NET 似乎是 MS 应用程序开发的方向 所以我现在想知道 人们正在使用 C 来开发驱动程序吗 您是
  • 如何将设备连接到Eclipse?

    我无法解决这个简单的问题 我正在尝试通过 USB 电缆将我的设备连接到 Eclipse 在我的 PC 上 我已经安装了 Eclipse 和 Android SDK 并且在模拟器上运行该程序运行良好 我已在我的电脑上下载并安装了 Samsun

随机推荐