LabVIEW环境下的DAQmx持续信号读取技术

本文还有配套的精品资源,点击获取 menu-r.4af5f7ec.gif

简介:DAQmx是由National Instruments开发的软件开发工具包,旨在简化与测量和控制硬件的交互,特别是在数据采集应用中。本项目或教程主要关注在LabVIEW环境中实现使用DAQmx连续读取数据的技术。LabVIEW以其独特的“虚拟仪器”界面在工程和科研领域得到广泛使用。项目可能包括一个LabVIEW程序"DAQmx 读取信号.vi",用于演示如何持续地从各种硬件设备(如传感器)中获取实时数据。在持续读取模式下,DAQmx会根据预设条件不断地从设备收集数据,对于实时监控和长时间数据流的应用至关重要。此外,本项目可能还涵盖了如何通过配置缓冲区大小、读取速率和触发机制等参数来优化数据采集性能。用户通过学习本项目中的"DAQmx 读取信号.vi"程序,可以掌握DAQmx在LabVIEW中的使用方法及其在各类测量和控制项目中的应用。

1. National Instruments DAQmx介绍

National Instruments(NI)的DAQmx库是开发数据采集(DAQ)应用程序的强大工具集,广泛用于测试、测量和控制应用。DAQmx为NI的硬件设备提供了一个编程接口,如数据采集卡和模块化仪器,使得在LabVIEW环境中的数据采集任务变得简单高效。利用DAQmx,开发者可以快速配置输入输出通道、采样率、触发条件等参数,实现对各种信号的精确测量和控制。

接下来我们将深入了解如何在LabVIEW中使用DAQmx驱动程序,这包括其安装、配置以及在数据采集任务中的实际应用。通过本章的学习,读者将能够掌握DAQmx的基本概念,并为进一步探索高级功能打下坚实基础。

2. LabVIEW编程环境说明

2.1 LabVIEW编程基础

2.1.1 LabVIEW界面布局和开发工具

LabVIEW(Laboratory Virtual Instrument Engineering Workbench)是一种图形化编程语言,广泛应用于测试、测量和控制系统开发。LabVIEW的主要特点是其图形化的编程界面,工程师可以通过拖放各种图形化的代码块(称为Virtual Instruments,VIs)来快速构建应用程序。这一特点极大地降低了学习曲线,并允许工程师们专注于问题解决而非编程语言的语法细节。

LabVIEW开发环境包括以下几个核心部分:

  • 前面板(Front Panel) :这是LabVIEW应用程序的用户界面,类似于传统的仪器前面板。用户可以通过前面板上的控件(比如按钮、开关、图表等)与程序进行交互。

  • 块图(Block Diagram) :这是LabVIEW程序的核心,所有的逻辑和数据流都在这里实现。块图由图形化的节点、线和结构组成,这些节点通常代表了内置的函数或用户定义的子VI。

  • 控件和指示器 :前面板上的控件用于输入数据,指示器用于显示数据。在块图上,与之对应的则是输入和输出端口。

  • 菜单和工具栏 :提供各种命令和快捷方式,以帮助用户管理和开发程序。

2.1.2 LabVIEW中的数据流编程概念

数据流编程是LabVIEW的核心概念。在LabVIEW中,程序的执行不是按照代码行的顺序进行,而是依赖于数据在各个节点之间的流动。这意味着一个节点的执行是当其所有输入端口都接收到了数据之后,而节点执行后产生的数据则流向下一个节点。

这种编程范式要求开发者在设计程序时考虑数据的流向,使得程序逻辑清晰可见。在LabVIEW中实现数据流的方式如下:

  • 连线(Wiring) :数据的流动是通过在VI内部的节点之间连线来表示的。每个节点都有输入和输出端口,数据会通过连线从一个节点的输出端口流向另一个节点的输入端口。

  • 顺序结构(顺序循环和for循环) :数据流的顺序是由连线和顺序结构来控制的。对于一些需要迭代处理的操作,LabVIEW提供了顺序结构,如for循环和while循环,以确保数据按正确的顺序处理。

  • 并行执行(并行子VI和事件结构) :在LabVIEW中,可以并行运行多个VI或者在块图中的不同分支。这允许程序同时处理多个任务,提高了程序的执行效率。

2.2 LabVIEW与硬件接口

2.2.1 LabVIEW的硬件配置和通信方式

LabVIEW作为一个与硬件紧密集成的开发环境,提供了广泛的硬件接口支持,使得工程师可以轻松地控制和读取各种测量设备、数据采集卡以及自定义硬件。LabVIEW通过硬件配置和通信方式与外部设备进行交互,包括但不限于:

  • GPIB(General Purpose Interface Bus) :通过GPIB接口,LabVIEW可以与支持GPIB通信的仪器进行数据交换。

  • 串行通信 :支持RS-232等串行通信标准,用于与串行设备如温度传感器等进行通信。

  • USB和IEEE 1394 :用于连接各种USB和Firewire设备,如数据采集设备、图像采集设备等。

  • 以太网和TCP/IP :通过网络接口,LabVIEW可以与支持TCP/IP协议的仪器通信。

在进行硬件配置时,首先需要在LabVIEW的硬件配置工具中识别并安装相应硬件。然后,通过LabVIEW的编程接口,如National Instruments的DAQmx VIs,进行数据的读取和写入操作。

2.2.2 实现LabVIEW与外部设备的数据交互

实现LabVIEW与外部设备的数据交互通常包含以下步骤:

  • 硬件初始化 :使用配置节点初始化连接到计算机的硬件设备。这可能包括设定通信参数,如波特率、数据位、停止位等。

  • 数据读取和写入 :通过适当的VIs或者直接的硬件读写函数进行数据的输入和输出。例如,对于数据采集设备,可以使用DAQmx VIs来控制模拟输入输出通道,读取或发送数据。

  • 错误处理 :在硬件交互过程中,需要考虑可能发生的错误,并通过错误处理节点来确保程序能够稳定运行。

  • 数据展示和记录 :利用前面板的图表、指示器等工具显示实时数据,并可以使用LabVIEW的文件I/O功能将数据记录到文件中。

下面是一个简单的LabVIEW代码示例,展示了如何读取一个模拟输入通道的数据:

// DAQmx Read Analog Input Channels - 示例VI
// 这是一个LabVIEW代码块,展示了如何使用DAQmx VIs从一个模拟输入通道读取数据

// 创建任务
DAQmxCreateTask("","",&taskHandle);

// 配置通道
DAQmxCreateAIVoltageChan(taskHandle,"Dev1/ai0","MyChannel",DAQmx_AcquireForever, -10.0, 10.0,DAQmx_Volts,Dummy);

// 开始任务
DAQmxStartTask(taskHandle);

// 循环读取数据
For(i=0;i<1000;i++)
{
    // 读取单点数据
    DAQmxReadAnalogF64(taskHandle,1,10.0,&read,"",&error);
    if(error) {break;}
    data[i] = read;
}

// 停止任务
DAQmxStopTask(taskHandle);

// 清理任务
DAQmxClearTask(taskHandle);

这个VI创建了一个数据采集任务,配置了一个模拟输入通道,并在循环中读取1000个数据点,最后清理了任务。注意,在实际应用中,你需要根据你的硬件设备和具体需求来修改这个示例代码中的参数。

3. 持续信号读取的概念与实现

3.1 持续信号读取的基本原理

3.1.1 信号采集与数据流概述

信号采集是数据采集系统的关键部分,它涉及到将现实世界中的物理现象转化为电子信号的过程。对于持续信号读取来说,采集过程具有连续不断的特性,即系统会不断从传感器或其他信号源获取数据。在数据流处理中,这通常意味着有一个稳定的信号输入,通过采集装置连续地转换成数字信号,并被传输到处理系统中。

数据流在持续信号读取中起到了桥梁的作用,它将采集模块与处理模块连接起来。数据流的概念在不同环境下有不同的表现,但其核心都是提供一种机制来处理实时或近实时的数据。在持续信号读取的上下文中,数据流需要有高效率的处理方式,以避免丢失数据或延迟。

3.1.2 持续读取在信号处理中的角色

在信号处理中,持续读取扮演着非常重要的角色。特别是在动态变化的系统中,比如工业监控、环境监测以及实时控制系统等,持续信号读取确保了实时数据的捕获和分析。这样,相关系统可以根据实时数据做出快速的响应,确保系统的稳定和优化运行。

持续读取不仅仅是一个数据采集的过程,它还包括了数据的实时分析、存储和可视化等多个环节。在很多情况下,持续信号读取需要与反馈机制结合,以实现闭环控制。这种闭环系统能够根据实时数据的反馈调整控制策略,从而提高系统的精度和可靠性。

3.2 实现持续信号读取的方法

3.2.1 使用循环结构进行数据读取

在LabVIEW环境下实现持续信号读取时,一个常见的方法是使用循环结构。循环结构可以保证数据采集的连续性,同时提供实时数据处理和分析的平台。通过合理配置循环,可以确保每次迭代都能够读取到最新的一组数据,进而进行必要的计算和处理。

循环的类型和结构取决于所需信号读取的速度和精度要求。例如,快速连续采集可能需要使用 While Loop ,而基于事件的采集则可能适合使用 Event Structure 。在配置循环时,还需考虑如何处理数据流中的异常和错误,例如数据丢失或读取错误等。

下面是一个使用 While Loop 实现连续信号读取的基本代码示例:

While Loop
    -- Analog Input Read VI (DAQmx)
    -- Data Processing (如滤波、转换等)
    -- Data Transfer to Display or Storage
End While Loop

3.2.2 处理大量数据的技术和策略

对于大量数据的处理,策略和技术的选择对于系统的性能至关重要。持续信号读取可能会产生大量的数据,尤其是在高采样率或者长时间运行的情况下。因此,合理地管理内存和优化数据流是实现持续信号读取的关键。

一种常见的策略是采用数据缓冲技术,这意味着在内存中预先分配一块空间来存储读取到的数据,而不是每次都立即处理或存储数据。这样可以减少因数据写入或处理导致的延迟,同时避免内存溢出问题。在LabVIEW中,数据缓冲可以通过设置缓冲区的大小以及在读取循环中使用适当的队列或移位寄存器来实现。

While Loop
    -- Analog Input Read VI (DAQmx) with Buffering
    -- Data Processing (如平均、滤波等)
    -- Data Transfer to Display or Storage
    -- Adjust Buffer Size as necessary
End While Loop

在处理大量数据时,还需要考虑如何有效地对数据进行存储。对于历史数据的存储,可能需要使用数据库或者文件系统,并且要考虑到数据的可查询性和检索效率。对于实时数据的显示,可以使用图表和图形控制,让操作人员可以直观地观察数据流的变化。

综上所述,持续信号读取需要细致的工程设计和优化,以确保实时数据的准确读取和高效处理。在下一章节,我们将探讨DAQmx在LabVIEW中的使用方法,包括驱动的安装、配置以及功能块的集成应用。这将为实现持续信号读取提供更加具体的技术实现路径。

4. DAQmx在LabVIEW中的使用方法

4.1 DAQmx驱动的安装与配置

4.1.1 安装DAQmx驱动的步骤和要求

为了在LabVIEW中使用National Instruments的DAQmx驱动,首先需要确保已从NI官方网站下载并安装了适合您操作系统版本的最新DAQmx驱动。以下是安装DAQmx驱动的基本步骤:

  1. 访问NI官方网站 :导航到National Instruments的官方网站,搜索DAQmx驱动或者从产品下载中心进行查找。
  2. 选择适合的操作系统 :下载与您的操作系统(如Windows、Linux或macOS)版本相匹配的驱动版本。
  3. 运行安装程序 :执行下载的安装文件,并遵循安装向导的指示。务必选择在安装过程中包括NI-VISA驱动,以确保与多种设备的兼容性。
  4. 接受许可协议 :阅读并接受软件许可协议。
  5. 选择安装路径 :选择或创建一个安装路径,安装路径最好选择默认设置,除非有特别的需要更改。
  6. 完成安装 :根据安装向导的提示完成安装过程。安装过程中可能会要求重启计算机。

安装完成后,进行以下检查以确保驱动正确安装:

  • 确认软件版本 :打开NI MAX (Measurement & Automation Explorer),检查软件中列出的DAQmx驱动版本是否与安装的相匹配。
  • 测试设备连接 :使用NI MAX测试连接的NI设备,确保所有设备能够被正常识别和通信。

4.1.2 配置LabVIEW以支持DAQmx功能

安装完DAQmx驱动后,接下来是配置LabVIEW环境以支持使用DAQmx功能块。以下是详细步骤:

  1. 启动LabVIEW :打开LabVIEW开发环境。
  2. 加载NI-DAQmx VIs :从函数选板中选择NI-DAQmx选项,将所需的DAQmx功能块(Virtual Instruments,简称VIs)拖拽到VIs上。
  3. 配置VI属性 :右键点击功能块,选择"属性"选项,以配置特定的VI属性。例如,创建任务VI的属性包括设备类型、通道配置等。
  4. 配置全局变量(可选) :在LabVIEW中,可以使用全局变量或资源名称(如任务名称)来跨多个VI共享同一个DAQmx任务。
  5. 创建VI模板 :为了加快开发速度,可以使用LabVIEW提供的DAQmx VI模板开始新VI,这些模板自带了一些常用功能块。

完成以上步骤后,LabVIEW环境便已经配置好,可以开始使用DAQmx VIs进行数据采集和输出任务的设计。

4.2 DAQmx功能块的集成与应用

4.2.1 创建基本的输入输出任务

在LabVIEW中创建一个基本的DAQmx数据采集任务涉及几个关键步骤。这里,我们以创建一个模拟输入任务为例,来演示整个过程。

创建任务

首先,使用DAQmx Create Task VI来创建一个新任务。这个VI位于函数选板的NI-DAQmx » DAQmx - Control » Task中。

[DAQmx Create Task]

参数说明:

  • task name or control :输入或返回一个任务名称或任务控制引用。如果留空,则创建一个新的任务。
  • error in (无数据连接):表示错误的输入。
  • error out (无数据连接):表示错误的输出。
配置通道

接下来,需要为任务配置输入通道。这里,我们添加一个模拟输入电压通道。使用 DAQmx Create Channel VI。

[DAQmx Create Channel]

参数说明:

  • task name or control :任务的名称或控制引用。
  • physical channels :指定要配置的物理通道名称,例如"Dev1/ai0"代表设备1的模拟输入0。
  • name to assign to channel :给通道分配一个友好的名称。
  • min val max val :分别设置输入信号的最小值和最大值。
  • error in (无数据连接):表示错误的输入。
  • error out (无数据连接):表示错误的输出。
启动任务

配置完通道后,使用 DAQmx Start Task VI来启动任务。

[DAQmx Start Task]

参数说明:

  • task name or control :任务的名称或控制引用。
  • error in (无数据连接):表示错误的输入。
  • error out (无数据连接):表示错误的输出。
读取数据

最后,可以使用 DAQmx Read VI来读取数据。

[DAQmx Read]

参数说明:

  • task name or control :任务的名称或控制引用。
  • number of samples per channel :每次调用VI读取的每个通道的样本数。
  • timeout (ms) :读取操作的超时时间,单位是毫秒。
  • data :表示读取到的数据。
  • bytes per sample :每个样本的字节数。
  • number of samples read per channel :返回读取的样本数。
  • error in (无数据连接):表示错误的输入。
  • error out (无数据连接):表示错误的输出。

完成以上步骤后,你就可以开始从指定的模拟输入通道采集数据了。每个步骤都可以通过LabVIEW的执行逻辑来进一步细化和调整。

4.2.2 使用LabVIEW中的DAQmx VIs进行数据采集

在LabVIEW中,NI提供了丰富的DAQmx VIs用于数据采集、设备控制等操作。以下是使用DAQmx VIs进行数据采集的高级步骤。

创建和配置任务

首先,根据需要采集的数据类型(如模拟输入、数字输出等),使用相应的DAQmx VIs来创建和配置任务。

启动任务

创建并配置好任务之后,接下来是启动任务。对于连续数据采集,可以使用 DAQmx Start Task VI来开始数据流。

采集数据

使用 DAQmx Read VI进行数据的实时读取。这个VI可以配置成单次读取或周期性读取模式,以便根据具体应用场景采集数据。

停止任务

当数据采集任务完成之后,使用 DAQmx Stop Task VI来停止任务,并释放相关资源。

错误处理

在任务创建、配置、启动、读取和停止的每一个步骤,都应该考虑到错误处理。可以使用LabVIEW的错误连线功能来处理可能出现的错误,并通过适当的VI进行错误处理和反馈。

通过以上步骤,可以在LabVIEW中集成DAQmx功能块,实现一个完整的数据采集流程。每个步骤都可以详细到具体的功能块的属性设置和参数配置,以适应不同的数据采集需求。这样一套完整的数据采集VI模板,可以被保存并在以后的项目中重复使用,提高开发效率。

graph LR
    A[开始] --> B[创建任务]
    B --> C[配置通道]
    C --> D[启动任务]
    D --> E[采集数据]
    E --> F[停止任务]
    F --> G[错误处理]
    G --> H[结束]

在接下来的章节中,我们将深入探讨如何利用LabVIEW的高级功能来进一步优化和管理数据采集任务。

5. 配置硬件设置与任务创建

在利用LabVIEW和DAQmx进行数据采集之前,正确配置硬件设备和创建数据采集任务至关重要。这一章节将深入探讨硬件设置的配置细节和创建与管理数据采集任务的步骤。

5.1 硬件设置的配置细节

在开始配置之前,了解硬件设备的规格和特性是必要的。选择合适的硬件和通道类型,以及确定采样率和分辨率的要求,都是保证数据采集准确性的关键因素。

5.1.1 选择合适的硬件和通道类型

在数据采集系统中,硬件的选择至关重要。例如,根据应用需求的不同,可能需要选择模拟输入、模拟输出、数字I/O或计数器类型的通道。此外,还需要考虑通道的数量、信号的类型和范围。

以NI的DAQ设备为例,以下是选择硬件和通道时的考量要点:

  • 输入/输出范围 :确保硬件支持的电压或电流范围符合信号源的输出或传感器的输出要求。
  • 分辨率 :分辨率决定了系统能够检测到的信号变化的最小单位,更高的分辨率能提供更精确的数据。
  • 采样率 :采样率是每秒采集样本数,对于动态信号分析,较高的采样率是必要的。
  • 通道数量 :通道数量应满足同时采集多路信号的需求。
  • 隔离与非隔离 :在测量高电压信号或需要较高安全标准的场合,隔离型通道是必须的。

5.1.2 确定采样率和分辨率的要求

确定采样率和分辨率时需遵循奈奎斯特定理,即采样率至少要大于信号最高频率的两倍,以避免混叠现象的发生。分辨率的选择则应满足应用中对信号精度的要求。

例如,如果待测量信号的频率为100Hz,为避免混叠,采样率应至少选择250Hz以上。同时,如果应用需求精度为10mV,那么硬件设备的分辨率应优于10mV。

5.2 创建与管理数据采集任务

创建和管理数据采集任务涉及到定义任务的参数,如通道配置、采样模式、采样率等,并在LabVIEW环境中运用DAQmx功能块进行操作。

5.2.1 使用DAQmx创建任务的流程

在LabVIEW中,使用DAQmx创建任务的基本步骤如下:

  1. 启动任务 :使用"DAQmx Create Virtual Channel" VI创建虚拟通道,并配置通道类型(如模拟输入、模拟输出)和通道的具体参数。

  2. 配置任务属性 :通过"DAQmx Configure Sample Clock" VI设置采样率和采样模式(连续或有限样本)。

  3. 启动任务 :使用"DAQmx Start Task" VI来启动数据采集任务。

  4. 数据采集与传输 :根据任务设置读取采集到的数据,如使用"DAQmx Read" VI来读取样本。

  5. 停止并清理任务 :在数据采集完成后,使用"DAQmx Stop Task" VI停止任务,并使用"DAQmx Clear Task" VI来释放所有资源。

(* LabVIEW伪代码块 *)
VI 1: DAQmx Create Virtual Channel
    - Channel Type: Analog Input
    - Channel Name: AI1
    - Input Terminal Configuration: Differential

VI 2: DAQmx Configure Sample Clock
    - Sample Mode: Continuous Samples
    - Samples Per Channel: 1000
    - Sample Rate: 1000 Hz

VI 3: DAQmx Start Task

(* 数据采集循环开始 *)
VI 4: DAQmx Read
    - Number of Samples: 1000
    - Timeout: 10 Seconds

(* 循环结束 *)
VI 5: DAQmx Stop Task
VI 6: DAQmx Clear Task

5.2.2 管理任务的生命周期和同步问题

管理任务生命周期意味着要确保任务正确启动、数据采集完毕后正确停止,并清理所有资源。同时,必须注意同步问题,例如,确保读取操作与数据采集任务的时序一致。

在多任务环境下,正确管理任务的同步至关重要。例如,可以使用"DAQmx Wait Until Done" VI来确保读取操作完成后再继续程序的执行。此外,高级同步技术如使用触发器和事件可用于实现精确的时序控制。

通过上述步骤,我们能够创建并管理一个持续的数据采集任务,并针对特定的信号采集需求进行优化配置。这为后续的信号处理和分析打下了坚实的基础。

6. 读取和写入数据的能力

数据读取与写入是数据采集系统中的核心环节,涉及到实时数据的获取、处理、存储和分析。在LabVIEW环境中,使用DAQmx不仅可以简化数据采集的流程,还能高效地处理与存储大量数据。

6.1 数据读取技术的实现

6.1.1 实时数据流的捕获和处理

实时数据流的捕获和处理是信号分析的第一步。在LabVIEW中,可以利用DAQmx的定时功能来实现对信号的精确采集。例如,使用连续采样模式来捕获连续的数据流。下面是一个简单的示例,展示如何使用DAQmx的连续采样功能:

VI Name: Continuous Analog Input.vi

在LabVIEW程序中,首先需要配置任务,然后调用 DAQmx Start Task 函数开始数据采集,最后使用 DAQmx Read 函数来读取数据流。 DAQmx Read 函数可以连续读取数据,并将其存储在数组中,以便于后续的实时处理。

6.1.2 处理和分析采集到的数据

采集到的数据需要通过各种分析方法进行处理和分析,包括滤波、统计分析、频谱分析等。在LabVIEW中,可以使用内置的分析VI或者自定义的分析函数来处理数据。数据分析的结果可以用于实时显示、报警系统或记录到文件中。

VI Name: Data Analysis Example.vi

在处理数据时,一个常见的需求是实时更新波形图表,以便用户可以观察到最新的数据动态。可以使用图表控件或图形显示VI将分析结果直观地展示出来。

6.2 数据写入与存储方法

6.2.1 将处理后的数据写入文件或数据库

处理完的数据需要被保存,以便于后续的访问和分析。LabVIEW提供了多种数据写入的方式,包括写入到文本文件、二进制文件或数据库中。

VI Name: Write Data to File.vi

在LabVIEW中,使用 Write to Measurement File VI可以将数据以TDMS格式写入,这种格式具有高效读写和高度压缩的特点。此外,还可以将数据写入到Excel、Access或SQL数据库中,这取决于数据存储的需求。

6.2.2 优化数据存储的策略和性能

数据存储的优化是提高整体系统性能的关键。首先,需要根据数据的类型和用途选择合适的存储格式和压缩方法。然后,可以考虑分块写入的方式,这样可以减少内存消耗并提高数据写入速度。最后,使用异步写入可以提升系统的响应性,避免数据写入操作阻塞其他处理任务。

VI Name: Data Storage Optimization Example.vi

例如,将数据写入到硬盘时,可以使用DMA(Direct Memory Access)传输,避免CPU负担过重,从而优化写入速度。此外,在写入大量数据到数据库时,批处理和索引优化也是提高性能的重要手段。

数据读取和写入能力是数据采集系统中不可或缺的部分,它直接关系到整个系统的实时性和数据完整性。在实际应用中,需要根据不同的需求选择合适的方法和优化策略,才能高效地实现数据的读写任务。

本文还有配套的精品资源,点击获取 menu-r.4af5f7ec.gif

简介:DAQmx是由National Instruments开发的软件开发工具包,旨在简化与测量和控制硬件的交互,特别是在数据采集应用中。本项目或教程主要关注在LabVIEW环境中实现使用DAQmx连续读取数据的技术。LabVIEW以其独特的“虚拟仪器”界面在工程和科研领域得到广泛使用。项目可能包括一个LabVIEW程序"DAQmx 读取信号.vi",用于演示如何持续地从各种硬件设备(如传感器)中获取实时数据。在持续读取模式下,DAQmx会根据预设条件不断地从设备收集数据,对于实时监控和长时间数据流的应用至关重要。此外,本项目可能还涵盖了如何通过配置缓冲区大小、读取速率和触发机制等参数来优化数据采集性能。用户通过学习本项目中的"DAQmx 读取信号.vi"程序,可以掌握DAQmx在LabVIEW中的使用方法及其在各类测量和控制项目中的应用。

本文还有配套的精品资源,点击获取 menu-r.4af5f7ec.gif

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值