NI LabVIEW,CVI,数据采集等产品讨论区

取消
显示结果 
搜索替代 
您的意思是: 

计数器由另一路信号触发后才开始计数的问题

我现在在做一个计数器采集转速的程序,具体要求是这样的,有两路信号进来,一路信号(TTL信号)是由计数器(NI USB-6216)进行计数的,另一路信号(TTL信号)是用来控制计数器是否开始计数的,相当于计数器被这路信号触发后,才开始对第一路信号进行计数.
注:我这里说的触发并非是上升沿或者下降沿对计数器的触发,而是相当于对计数器的控制指令,告诉它是否可以开始计数了,这样的话,也就使得程序开始运行后,并不立即开始计数,而是等待触发信号,才开始计数
我查了一下labview里自带的一些例子,里面都是程序一运行,就直接开始计数采集了,都没有加另一路触发的信号进行触发的例子.我自己也在那些例子的基础上做过很多种尝试,但还是没有触发成功.
请各位帮帮小弟,谢谢了!
下面附件里是我加的触发的计数器的程序,但是运行的时候,触发不了,请大家帮我提点意见,谢谢了!
0 项奖励
1 条消息(共 8 条)
6,104 次查看
你的用法是标准的计数器用法.你可以用另一路TTL来控制计数器的GATE门,控制计数器是否计数,LV也提供了例子
COUNT DIGITAL EVENTS-PAUSE TRIG.VI
陈树学
QQ:276509891 .
EMAIL:CSXCS_366@126.COM
qq群:78561268 80754347 37591940
http://labview.weebly.com/
新书《LabVIEW实用工具详解》已经发售,敬请关注。
0 项奖励
2 条消息(共 8 条)
6,102 次查看
很感谢您的帮忙!
您推荐的COUNT DIGITAL EVENTS-PAUSE TRIG.VI程序,好像是终止触发的作用,应该实现的功能类似这样的:计数器在程序运行后,一直在计数,一旦接受到触发信号,就会结束计数.
我现在想实现:在程序运行后,计数器暂不计数,当接受到另一路触发信号后,才开始计数.
请前辈帮忙指点一下啊!谢谢了!
0 项奖励
3 条消息(共 8 条)
6,093 次查看
是暂停计数,是您需要的功能
陈树学
QQ:276509891 .
EMAIL:CSXCS_366@126.COM
qq群:78561268 80754347 37591940
http://labview.weebly.com/
新书《LabVIEW实用工具详解》已经发售,敬请关注。
0 项奖励
4 条消息(共 8 条)
6,071 次查看
我还是不太明白,哎,脑袋笨啊,.还请前辈帮我再分析一下好吗?其中的逻辑关系我还是不太明白
可能我的需求还是没说清楚,是这样的:比如说有两路信号,信号1和信号2,其中信号1是我要采集的转速信号,信号仅仅只是一个触发信号.
当程序开始运行的时候,我希望把计数器先想办法停止对信号1的计数,然后当接受到信号2的触发哦,才开始对信号1计数.
说得有点乱哦,啊哈,请前辈指点迷津啊!
谢谢了,谢谢了.
0 项奖励
5 条消息(共 8 条)
6,059 次查看

我用的是CVI编程实现你所说的功能,必须要配置trigger,把我的代码贴出来希望能有所启发

  /*********************************************/
  DAQmxErrChk (DAQmxCreateTask("",&taskHandle));
  DAQmxErrChk (DAQmxCreateCICountEdgesChan(taskHandle,chan,"",edge,initialCount,countDirection));
  ////////////////////
  DAQmxErrChk (DAQmxSetTrigAttribute (taskHandle, DAQmx_PauseTrig_Type,DAQmx_Val_DigLvl));
  DAQmxErrChk (DAQmxSetTrigAttribute (taskHandle, DAQmx_DigLvl_PauseTrig_Src, "/Dev1/PFI9"));
  DAQmxErrChk (DAQmxSetTrigAttribute (taskHandle, DAQmx_DigLvl_PauseTrig_When,DAQmx_Val_Low));
  ////////////////////
  /*********************************************/
  /*/ DAQmx Start Code
  /*********************************************/
  DAQmxErrChk (DAQmxStartTask(taskHandle));

  SetCtrlAttribute(panel,PANEL_START,ATTR_DIMMED,1);
  gRunning = 1;

  while( gRunning ) {
   /*********************************************/
   /*/ DAQmx Read Code
   /*********************************************/
   DAQmxErrChk (DAQmxReadCounterScalarU32(taskHandle,10.0,&data,NULL));

   SetCtrlVal(panel,PANEL_DATA,data);
   ProcessSystemEvents();
  }

0 项奖励
6 条消息(共 8 条)
5,061 次查看

你可以考虑这样完成它:

 

1.  NI USB-6216的打开(Open)、初始化(Initial)、配置(Config);

 

2.  查询第2路信号发送的命令(可以考虑While循环或Event事件结构)。如果接到计数命令,跳转到3;否则重复步骤2;

 

3.  NI USB-6216开始工作计数;

 

4.  计数工作完成,关闭仪器,释放所有系统资源。

 

编程过程中,最好采用状态机(State Machine),反复用到的功能编成子VI。 

Best Recards,

Shade
0 项奖励
7 条消息(共 8 条)
5,024 次查看
如果小熊龙 还在做这个项目的话, 那公司也不赚钱了吧! 我想... 😉
Ian F
Since LabVIEW 5.1... 7.1.1... 2009, 2010, 2014
依恩与LabVIEW
LVVILIB.blogspot.com
0 项奖励
8 条消息(共 8 条)
5,021 次查看