LabVIEW学习笔记(2)

前言

这几天用LabVIEW给师兄的液压缸试验台做了一套上位机,设计模式借鉴了LabVIEW例程中的连续采集和测量,软件,硬件方面都学到了很多东西。硬件方面:运动控制卡的API,各种数据采集(编码器,电压),信号发生器(硬件条件限制,只能单点输出),转换时钟和采样时钟的区别。软件方面,多循环并行的设计模式,循环状态,文件IO(文件路径名[:]),使用用户事件停止程序,队前插入元素(如果插入数组要注意数组顺序,等等)

1.试验台组成

这次做的液压缸试验台主要由伺服电机,丝杠和液压缸组成,丝杠上的工作台连接到液压缸上,工作台往复运动,来检测液压缸的工作情况。液压缸不在实验室,所以没有安装。传感器有扭矩传感器,直线光栅尺,分别用来检测扭矩和位移,实物大概和下图差不多。除此之外,还有伺服驱动器,控制电机的运动控制卡和采集传感器信号的数据采集卡和计数器卡,和一个模拟量输出卡(当电机处于力矩模式下,用来给伺服驱动器发送模拟电压),以及各种接线端子和限位开关。数据采集卡和运动控制卡都选择了研华的产品,研华提供了运动控制卡和数据采集卡Labview驱动的和相关的VI,在LabVIEW可以方便的调用。
图片摘自《LabVIEW案例实战》

2.程序框架

程序框架使用了LabVIEW多循环程序框架,参考借鉴了LabVIEW中自带的项目例子:连续采集和测量。主要就是用户事件处理器+消息队列状态机组成。用户界面处理器接收前面板上的用户操作,根据用户不同的操作,将命令发送至主状态机,主状态机再根据用户的操作,将具体命令发送至各个功能模块。共有以下几个功能模块:电机状态监测,电机运动,AO模拟电压发送,数据采集(光栅尺和扭矩),数据记录五个部分。程序在运行时给各个模块发送初始化的命令,完成初始化操作。

2.1 电机部分

这一部分主要包括电机状态检测,电机运动两个模块。除此之外还有一小部分,功能是打开设备(DevOpen),打开轴(AxOpen),然后向电机状态监测和电机运动提供设备和轴的引用。我将这一小部分封装成一个子VI。
一些题外话:)刚开始没有电机状态检测这一模块的,后来考虑到电机处于运动状态(HOME或START时)时,用户只能按下STOP或者EXIT,其他按钮应该禁用,所以加了一个电机状态检测来实现此功能。分成三部分也受研华给的例程的启发,例程中就是打开设备,轴,放在一个CASE中,状态监测放到一个定时结构中,控制电机运动放到另一个循环中。
电机检测模块流程:

打开设备Dev
打开轴Ax
初始化Initialize
监测轴状态
退出Exit

打开设备(Dev),轴(Ax),初始化(Initialize),一直检测轴状态(GetState),如果轴状态为Ready或Stopping,则启用控件,否则禁用并变灰,直到接收到Exit命令。
电机运动模块:

打开设备Dev
打开轴Ax
初始化Initialize
接收命令
清除错误
关闭轴Ax设备Dev伺服SV
退出Exit

流程与上面相似,打开设备(Dev),轴(Ax),初始化(Initialize),设置参数(ParaSet),然后就是各种命令了,包括原点(Home),往复运动(Start),停止(Stop)等等,因为这个运动控制卡还有数字IO输出的功能,所以用这个数字IO来控制电机的动作模式:力矩/位置,最后就是退出Exit,退出前要执行清理错误(CLEARERROR),关闭轴(AXCLOSE),关闭伺服(SVOFF)。
最后Exit中都会清除队列。

2.2 AO模拟电压发送

这一部分主要用来给伺服驱动器发送模拟电压,通过电压的不同来控制伺服电机力矩模式下的力矩大小。
程序流程:

初始化Initialize
开始Start
输出OUTPUT
停止Stop
退出Exit

初始化Initialize,【开始Start(创建虚拟通道)→输出OUTPUT】,停止Stop,退出Exit。开始后就下发输出命令,这两个命令是连着的。
输出波形由于硬件只能单点输出,不能波形输出,所以用单点+循环次数i模拟了出几个波形的幅值,然后发送给伺服驱动器。

2.3 数据采集

数据采集部分采集光栅尺和扭矩传感器接收到的物理量。开始的时候将采集光栅尺和扭矩传感器放到了两个循环中,后来,考虑到这两个传感器采样率相同,流程也基本相同,又放到了一个循环里。
程序流程和AO输出一样:

初始化Initialize
开始Start
读取Read
停止Stop
退出Exit

同样,创建虚拟通道和读取Read的命令是连在一起的。
在数据采集和AO模拟电压发送的时候,都使用了开始任务VI,如果不使用开始任务,直接使用读取或者写入VI,读取或者写入VI在工作签会自动开始任务,这样每次循环都开始一次任务,影响系统性能。

2.4 数据记录

将采集到的值记录到文件中,主要用了文件操作,字符串,定时中的几个函数,流程与上面类似,(其实各子模块的流程都类似,数据采集,数据记录,AO电压这三个流程几乎一模一样)。
这个模块中遇到了问题就是:无法进入退出Exit状态,最后还是在QQ群中高手给了回复,在此循环中设置了一个定时,比数据采集循环中的定时稍微慢了一点,就进入了退出循环,具体机制仍然不了解,如果有网友知道欢迎讨论。
最后注意的要点就是,结束任务的时候要把所有数据清除队列,然后保存至文件中。

2.5 其他

这个项目的程序主要参考的是自带范例:连续测量和记录。其中有一些要点值得注意,我目前学习到的有:

  1. 在子模块中加一个CASE结构来判断程序的状态,是空闲(IDLE)还是工作(比如LOGGING),如果空闲,则进入状态,如果工作,则略过此状态,在程序开始时初始化状态为(IDLE),在进入工作时将状态改为(LONGGING),这样做可以避免重复操作,(比如一直按DAQ)可能产生的程序错误。
  2. 使用用户事件退出。这种方法为什么好,还得在后面的实践中体会(如果有机会的话)。
  3. 使用队前插入消息的时候要注意消息数组插入的顺序和元素入队列正好相反。目前程序中用的都是先清除消息,再插入命令,这也是某位QQ群里的群主推荐的方法,虽然我还没觉得好到哪去。。
  4. 在设置文件路径的时候,试了几个名字,都出现非法路径的错误,今天看书看到,文件命名的时候,文件路径名中不要出现这四个符号,因为他们是文件路径的定界符[:]。(LabVIEW大学实用教程)
  5. 与程序无关,在使用研华的DAQNavi时,接触到了转换时钟这一概念,最后在NI官网上找到了答案采样时钟和转换时钟的区别,主要就是因为采集卡里面的各通道共用一个ADC,故转换时钟频率应远远大于采样时钟,转换的说的也是AD转换。

3. 下一篇

今天看完了LabVIEW大学实用教程,下一次整理一下这本书上的内容以及新学习到的一些知识点。和接下来的学习打算。有可能下一个项目不用LabVIEW了,学习可能要缓一缓,不过我还是想把这门语言学好。

一、消息处理中的主要概念 “消息”是在两台计算机间传送的数据单位。消息可以非常简单,例如只包含文本字符串;也可以更复杂,可能包含嵌入对象。 消息被发送到队列中。“消息队列”是在消息的传输过程中保存消息的容器。消息队列管理器在将消息从它的源中继到它的目标时充当中间人。队列的主要目的是提供路由并保证消息的传递;如果发送消息时接收者不可用,消息队列会保留消息,直到可以成功地传递它。 “消息队列”是 Microsoft 的消息处理技术,它在任何安装了 Microsoft Windows 的计算机组合中,为任何应用程序提供消息处理和消息队列功能,无论这些计算机是否在同一个网络上或者是否同时联机。 “消息队列网络”是能够相互间来回发送消息的任何一组计算机。网络中的不同计算机在确保消息顺利处理的过程中扮演不同的角色。它们中有些提供路由信息以确定如何发送消息,有些保存整个网络的重要信息,而有些只是发送和接收消息。 “消息队列”安装期间,管理员确定哪些服务器可以互相通信,并设置特定服务器的特殊角色。构成此“消息队列”网络的计算机称为“站点”,它们之间通过“站点链接”相互连接。每个站点链接都有一个关联的“开销”,它由管理员确定,指示了经过此站点链接传递消息的频率。 “消息队列”管理员还在网络中设置一台或多台作为“路由服务器”的计算机。路由服务器查看各站点链接的开销,确定经过多个站点传递消息的最快和最有效的方法,以此决定如何传递消息。
当然,我可以为您提供一些关于 LabVIEW 学习笔记LabVIEW(Laboratory Virtual Instrument Engineering Workbench)是一种图形化编程环境,主要用于控制、数据采集和处理等应用。以下是一些常见的学习笔记: 1. 界面与控件:LabVIEW 的主要特点之一是其图形化界面。了解如何创建界面和使用各种控件(如按钮、滑块、图表等)是学习 LabVIEW 的第一步。 2. 数据流编程:LabVIEW 是一种基于数据流的编程语言,意味着程序的执行顺序由数据的流动决定。理解数据流编程的概念对于使用 LabVIEW 是非常重要的。 3. 连接与通信:LabVIEW 可以与其他设备或系统进行通信,如传感器、仪器、数据库等。学习如何建立连接和进行数据交换是实际应用中常见的需求。 4. 数据处理与分析:LabVIEW 提供了丰富的数据处理和分析工具,如滤波、傅里叶变换、统计分析等。学习如何使用这些工具可以帮助您更好地处理和分析数据。 5. 并行与多线程:LabVIEW 支持并行处理和多线程操作,可以提高程序的性能和效率。了解如何利用这些特性可以优化程序的运行。 6. 错误处理与调试:在开发过程中,遇到错误是不可避免的。学习如何处理错误和进行调试可以帮助您快速解决问题。 这些只是一些基础的学习笔记,希望对您的 LabVIEW 学习有所帮助。如果您有具体的问题或者需要进一步的指导,请随时告诉我。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值