취소
다음에 대한 결과 표시 
다음에 대한 검색 
다음을 의미합니까? 

while 루프 주기

안녕하세요.

while 루프 내 wait 함수는 1로 설정되어 있고 샘플링 속도와 읽을 샘플 수도 각각 1000으로 맞춰줘 있는데 루프가 돌아가는 속도를 확인해 보면 0.6초입니다. 문제되는 게 무엇인지 알 수 있을까요?

0 포인트
1/15 메시지
588 조회수
0 포인트
2/15 메시지
571 조회수

샘플속도가 1000 이면  데이터 1개가 들어오는데 걸리는 시간은 대략 1/1000 초 인데,

 

이것을 1000개씩 모아서 읽으면 이론적으로 1초에 한번 읽을 수 있습니다.

 

(1) wait 함수가 1 이라고 하셨는데,  1ms 일 때는 아무런 의미가 없습니다.  따라서 루프는  DAQmx 1000/1000 의  1초에 맞춰서 돌아갑니다.

 

그런데, 경우에 따라서 데이터를 읽어오는 버스의 사용률이나 윈도우의 시분할에 따라서 루프의  지연시간이 아래 그림처럼 출렁이기도 합니다.

 

_0-1722829295782.png

따라서, 0.6 이라 표기될 수도 있고, 1.3 이라고 표기될 수도 있고 그렇습니다.

 

(2) wait 의 1 이  1초 일때(1000ms)는  DAQmx 1000/1000 이 위의 그림처럼 출렁이고 있을 때, 

아래 그림처럼 1초 이상에서 출렁일 수 있습니다.  이 때는  DAQmx 의 데이터가 조금씩 쌓이기 때문에 나중에 데이터가 지연됩니다.

 

_1-1722829409016.png

일반적으로 연속 수집에서는 while 루프안에 기다림 함수를 사용하지 않으며(그래서 hardware timed 라고 합니다.)

루프 타임의 변화는 조금씩 있을 수 밖에 없습니다.

 

 

0 포인트
3/15 메시지
561 조회수

안녕하세요! 

 

1ms를 추가한 것은 이론적으로 샘플속도와 읽을 샘플 수가 1000으로 맞춰져 있다면 0.001초에 하나씩 데이터가 수집이 되어야 하는데 0.6초의 간격으로 데이터가 수집되는 것을 보고 혹시나 하는 마음에 추가했던 것 같습니다. 

 

저는 DAQ Assistant와 측정 파일에 쓰기 함수를 이용하여 측정한 아날로그 데이터를 엑셀 파일로 저장하려고 하는데 제가 알기론 DAQ Assistant의 출력 데이터 타입은 다이나믹이라 측정 시간은 따로 인가하여야 하는 걸로 알고 있습니다. 

캡처.PNG

 혹시나 버스나 윈도우의 상태를 제외하고는 여기서 잘못된 부분이 있을까요?

0.001초마다 한 개의 데이터가 불가능하다면 0.01초마다 하나의 데이터를 기록하는 식이라도 구현하고 싶은데 샘플링속도와 읽을 샘플 수를 각각 100으로 맞추어도 시작 후 0.01부터 시작하지 않아서 어려움을 겪고 있습니다. 필요하시다면 원하시는 버전의 vi를 드릴 수 있습니다. 도움 주시면 정말 감사하겠습니다. 

0 포인트
4/15 메시지
556 조회수

DAQ 어시스턴트에서 나오는 다이나믹 데이터를 더블클릭해서 

 

아래와 같이 웨이브폼의 1D 배열을 선택합니다.

 

 

_0-1722932380015.png

 

그걸 그대로 아래 그림과 같이  측정 파일에 쓰기에 연결하면

 

_1-1722932528112.png

 

 

아래 그림과 같이 시간 정보가 들어갑니다.

_3-1722932566007.png

 

 

데이터가 획득된 시간은  루프를 돌리면서 획득하셔서 저장하실 필요가 없습니다.

(아니 그렇게 하면 안됩니다.)

 

데이터는 당연히 0.001 초 마다 1개씩 들어옵니다. 걱정 안하셔도 됩니다.

 

0 포인트
5/15 메시지
520 조회수

안녕하세요! 초반 답변해 주신 것처럼 데이터 결과를 얻을 당시에 시간이 절대시간으로 나타나는 점과 총 100개의 데이터를 수집하면 같은 시간대가 몇 개 껴 있다는 문제가 있었습니다. 측정 파일에 쓰기에서 절대시간이 아닌 상대 시간으로 바꾸어도 동일하게 겹치는 숫자가 있을뿐만 아니라 0.06초가 지나면 새롭게 00:00:00:000부터 시작이 됩니다. 해결 방법 있을까요? 샘플속도와 읽을 샘플 수는 각각 100입니다. 답변 감사합니다. 

 

+ 추가 확인한 결과 100개 중 겹치는 숫자가 있는 이유는 0.60초에 맞추어 다음으로 넘어가기 위해 100개의 데이터가 0.06초에 맞추어 중복되어 들어가 있습니다. 아직까지 해결 방법을 찾지 못했습니다. 

0 포인트
6/15 메시지
511 조회수

_2-1723020385515.png

 

이 그림 처럼 DAQ 에서 나오는 다이나믹 데이터를 웨이브폼 배열로 바꾸면 아래 그림과 같이

루프를 돌 때마다, 시작시간(t0) 이 계속 바뀌면서 나오게 됩니다.

(동영상으로 찍지 않아서 3초 차이가 나지만 실제로 1초 단위로 바뀝니다.)

_3-1723020420039.png

_4-1723020431446.png

 

이렇게 되는지 먼저 확인 하시구요.

 

실제로 데이터는 시작시간만 있고, 모든 데이터에 절대시간이 찍혀 있는게 아닙니다.

 

측정 파일에 쓰기에 연결하면, 알아서 0.001, 0.002 이런식으로 들어갑니다.

 

아래 그림에서 빨간 네모는 시간정보를 획득해서 넣을려고 하시는 것 같은데

 

저 부분을 지우세요. 저렇게 코딩하면 안됩니다. 

 

_5-1723020771290.png

 

 

Windows 시스템에서는 while 루프가 정확한 시간에 돌아가는 것도 아니고요.

 

차라리 소스 코드를 올려주시면 0.6초가 뭔지 찾아 볼게요.  0.6초가 나올 수 있는 조건이 없습니다.

 

아 그리고, 2024 버전으로 다른 게시물에 올리셨던데, 아래 그림과 같이 '이전 버전으로 저장' 해주셔야

 

여러 사람(저도 그렇고...)이 보고 도와드릴 수 있을 것 같아요

 

_0-1723021142801.png

 

 

0 포인트
7/15 메시지
482 조회수

게시물에 올라온 코드가 아닌 새로운 VI를 만들어서 Assistant와 측정 파일에 쓰기만을 사용하여서 측정했을 때 절대시간으로 찍히고 0.06초가 끝으로 다음이 기록이 잘 되지 않습니다. dt의 경우 0.000605로 나오며 측정 파일에 쓰기 설정으로 상대시간으로 바꾸고 각 채널마다 시간을 찍히도록 했을 때의 소스코드와 측정한 엑셀 파일 드립니다. 다시 한번 답변 감사드립니다. 버전은 20.0 버전인데 원하시는 버전이 있으시다면 다시 드리겠습니다!

모두 다운로드
0 포인트
8/15 메시지
476 조회수

설마설마 했지만....우려가 맞네요...

9234 같은 모듈인거 같은데...(혹은 9237 등 923x DAQ 아무것이나)

 

이 모듈은 샘플속도가 정해져 있어요

 

1000 을 넣는다고 샘플속도가 1000 이 아닙니다 

 

https://www.ni.com/docs/ko-KR/bundle/ni-9234-specs/page/specs.html

 

여기에 스펙 보시면 아래 그림과 같이 1652 가 최소 값입니다.

 

_0-1723025374499.png

 

그래서 1000/1000 넣으셔도  1652/1000  이 되면서 0.6초만에 1000개 수집이 끝납니다.

 

1초분량 받으실려면 1652/1652 하셔야 됩니다

 

0 포인트
9/15 메시지
469 조회수

그럼 타임 베이스가 fm이 13.1072MHz인 상태에서 internal의 최소 fs가 1652Hz이고 이 모델엔 각 지정돼 있는 샘플 속도가 다 지정되어 있다는 말씀으로 이해했는데 맞나요? 1652/1652로 했을 때 dt가 0.000020으로 나타나는 걸  보아 1초에 1000개, 즉 0.001초마다 한 개의 샘플을 얻기 위해서는 가능한 일인지는 모르겠으나 사용자가 따로 계산을 하거나 샘플속도에 맞추어 사용해야만 하는 것이 맞나요? 

0 포인트
10/15 메시지
460 조회수