前言
做这个课设把labview摸索了两天,赶在检查前极限完成,写本文记录一下学到的东西。如果对你有帮助,那再好不过了。程序上传csdn了,想要网盘可以直接找我,看到就回。
一、任务要求
设备:NPN型 E3F-DS30C4E3F-DS30C4 光电开关
NI USB6009 采集卡
任务:
首先明确方案,将两个光电开关安装在一条直线上距离为L,获取物体经过时传感器的时间,做一个时间差T。平均速度 v = L / T。
所以关键在于怎么获取经过时间。
二、具体实现
1.DAQ采集电压
这个直接找例程:在 帮助-查找范例
图片
基本流程(以函数名代替)是:DAQmx创建通道-DAQmx定时-DAQmx开始任务-DAQmx读取-DAQmx停止任务-DAQmx清除任务
中间的记录和触发看需求。
2.读入数据,获取时间
两种方案,都用到了<基本电平触发>这个函数。
方案一:开关触发,读取保存系统时间,假设 t1为物体经过第一个开关的时间,t2同理。时间差T = t2-t1
方案二:开关触发,获取已用时间,假设假设 t1为物体经过第一个开关的已用时间,t2同理。时间差T = t2-t1
方案一
上面两张是获取时间+计算、显示结果的全部,有重复的部分
逐一解释:
使用<基本电平触发>,具体使用详见帮助文档,检测到下降沿就触发,输出布尔量,由于我是两个信号,输出的是布尔数组,分贝对应两个信号的触发情况,将其使用<布尔数组至数值转换>,转换成数值,为1是代表信号1触发,为2代表信号2触发,做一个判断等于1还是2,分别传给 布尔显示控件 通道1、2 的属性:值,例:信号1触发数值为1,通道1为ture。
将通道1、2的值作为条件结果的判断输入,红框部分是触发后读取系统时间拆分出 分、秒、秒的小数部分,把两个值相加转为最终的秒数,传给时间2(时间2也是显示控件的属性:值)
时间1先得到,2后得到,两个都不为0时,做时间差,并计算车速显示,然后清0给下一次计算。
方案二
方案2的主要区别是使用<已用时间>和<条件结构>,这样结构简洁了很多,已用时间运行后会一直计时,直到目标值后重置。这里我设置的目标值是3600s,足够大了但是也在清零是顺便计时重置了,即每次测量都是重新计时。
主要对中间的条件结构解释:我们条件结构设置的事件[1]是 显示控件 触发通道 的值改变,改变前的原值是0,如果为0,再通过和1比较,判断是1还是2。是1就保存 已用时间 给 时间1,2同理。还有一个事件[0]是超时事件,设置的超时是1ms,超过就把一个true常量传给循环条件,中止循环进入下一阶段,避免因为没有触发,导致程序卡在这里(这个一定要有)。
剩下的和方案一一样。
三、重要的使用知识
1.事件结构的软件触发。一般事件结构设置值改变,直接设置输入控件能正常用,但是设置显示控件的值改变是不会起作用的,可以创建显示控件的 属性-值(信号),注意:值 和 值(信号) 有区别,只有值(信号)可以作为事件结构的条件。
2.事件结构放在while循环里面
3.创建属性节点可以方便的传递值进行写入写出
详细参考文章:http://t.csdnimg.cn/J2YHb
感想与总结
由于是新手,很多控件的使用,程序设计都不是最佳的,有大佬觉得不合理的可以给点建议。
做的时候由于不知道控件的使用方法,很多想法都卡住不能实现......如果是和我一样的小白做数据采集,建议先去b站看看课程,比如 up加油小林哥 还有 数据采集入门,摸清楚基本的控件的使用省去摸索的时间。
光电开关本来是数字量,但是我当时设置的模拟量采集,也当模拟量处理了,还好发现了基本电平触发可以检测下降沿上升沿,不然要去比较电平做判断就更麻烦了。搞完后才想起开关应该是数字量,看了看数字量采集有什么可以用的,应该可以是搜索数字波形找到触发的那一段并返回时间,更方便。
本次课设就记录这么多了,欢迎各位交流