주요 콘텐츠

이 페이지는 기계 번역을 사용하여 번역되었습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.

read

하드웨어로 수집한 데이터 읽기

설명

scanData = read(d)DataAcquisition 객체 d의 모든 입력 채널에서 단일 입력 스캔을 읽고 스캔 데이터를 타임테이블로 반환합니다.

예제

scanData = read(d,span)DataAcquisition 객체 d로부터 입력 스캔 범위를 읽습니다. span를 기간, 스캔 횟수 또는 "all"로 지정할 수 있습니다.

[scanData,triggerTime] = read(___)는 수집한 스캔을 읽고, 스캔 데이터를 타임테이블로, 스캔 트리거 시간을 날짜/시간으로 반환합니다.

예제

scanData = read(___,OutputFormat=format)는 스캔 데이터 OutputFormat의 출력 형식을 행렬이나 타임테이블로 지정합니다. 기본 형식은 타임테이블입니다.

예제

[scanData,timeStamp,triggerTime] = read(___,OutputFormat="Matrix")는 수집한 스캔을 읽고 스캔 데이터, 타임스탬프, 트리거 시간을 행렬로 반환합니다. 이 함수는 OutputFormatMatrix인 경우에만 두 번째 출력 인수로 타임스탬프를 반환합니다.

참고

  • 포그라운드 데이터 수집(동기 읽기): read 함수를 호출하여 포그라운드 데이터 수집을 시작합니다. 이 동작은 포그라운드의 MATLAB를 차단하고 데이터를 수집합니다.

  • 백그라운드 수집(비동기 읽기): read 함수 전에 start 함수를 호출하여 백그라운드 데이터 수집을 시작합니다. start 함수는 백그라운드에서 수집을 트리거하고 내부 버퍼를 비동기적으로 채웁니다. 나중에 호출하는 read 함수는 이 내부 버퍼에서 지정된 범위의 데이터를 가져옵니다. 수집을 중단하더라도 내부 버퍼에 남아 있는 모든 데이터를 읽을 수 있습니다.

예제

예제

모두 축소

read 함수를 사용하면 DataAcquisition 객체만 지정하여 모든 채널에 대한 단일 주문형 스캔을 얻을 수 있습니다.

d = daq("ni")
addinput(d,"Dev1",1,"Voltage"); % add more channels as needed
scanData = read(d)
data =

  timetable

    Time     Dev1_ai1
    _____    ________

    0 sec    -1.9525

DataAcquisition 객체를 만들고 두 개의 입력 채널을 추가합니다.

d = daq("ni");
ch = addinput(d,"Dev1",1:2,"Voltage")
ch = 

    Index    Type    Device    Channel    Measurement Type          Range              Name   
    _____    ____    ______    _______    ________________    __________________    __________

      1      "ai"    "Dev1"     "ai1"     "Voltage (Diff)"    "-10 to +10 Volts"    "Dev1_ai1"
      2      "ai"    "Dev1"     "ai2"     "Voltage (Diff)"    "-10 to +10 Volts"    "Dev1_ai2"

모든 채널에서 5개의 스캔 데이터를 읽습니다.

scanData = read(d,5)
scanData =

  5×2 timetable

      Time       Dev1_ai1    Dev1_ai2
    _________    ________    ________

    0 sec         0.1621     0.62579 
    0.001 sec    0.42124     0.56955 
    0.002 sec    0.51069     0.56002 
    0.003 sec    0.54193     0.56166 
    0.004 sec    0.55377     0.56396

모든 채널에서 5밀리초 분량의 데이터를 읽습니다.

d.Rate = 1000;
scanData = read(d,seconds(0.005))
scanData =

  5×2 timetable

      Time       Dev1_ai1    Dev1_ai2
    _________    ________    ________

    0 sec         0.2259     0.33278 
    0.001 sec    0.28871     0.31699 
    0.002 sec     0.3068     0.31633 
    0.003 sec     0.3137     0.31929 
    0.004 sec    0.31732     0.32028

스캔된 데이터를 읽는 동안 트리거 시간을 알아보기 위해 DataAcquisition 객체를 쿼리합니다.

[scanData triggerTime] = read(d,5)
scanData =

  5×2 timetable

      Time       Dev1_ai1    Dev1_ai2
    _________    ________    ________

    0 sec         0.1621     0.62579 
    0.001 sec    0.42124     0.56955 
    0.002 sec    0.51069     0.56002 
    0.003 sec    0.54193     0.56166 
    0.004 sec    0.55377     0.56396

triggerTime = 

  datetime

   22-May-2024 12:22:35.899

데이터를 double 값의 배열로 읽습니다. 이 예에서 두 채널에서 5번 스캔하여 수집한 데이터를 읽으면 함수는 5x2 행렬을 반환합니다. 열의 수는 읽은 채널의 수에 해당합니다.

scanData = read(d,5,OutputFormat="Matrix")
scanData =

    0.0424    0.0644
    0.0572    0.0621
    0.0605    0.0638
    0.0618    0.0641
    0.0631    0.0648

DataAcquisition 객체를 만들고, 입력 채널을 추가한 다음, start 함수를 사용하여 데이터의 백그라운드 수집을 시작합니다.

d = daq("ni");
ch = addinput(d,"Dev1",1:2,"Voltage")
start(d,"NumScans",5)
Background operation has started.
Background operation will stop after 0.005 s.
To read acquired scans, use read.

read 함수를 사용하여 데이터를 가져옵니다.

scanData = read(d,"all",OutputFormat="TimeTable")
scanData =

  5×2 timetable

      Time       Dev1_ai1    Dev1_ai2
    _________    ________    ________

    0 sec        0.012466    0.023977
    0.001 sec    0.019373    0.023319
    0.002 sec    0.021017     0.02299
    0.003 sec    0.021346     0.02299
    0.004 sec    0.022661    0.023648

DataAcquisition 객체를 만들고, 입력 채널을 추가한 다음, start 함수를 사용하여 데이터의 백그라운드 수집을 시작합니다.

d = daq("ni");
ch = addinput(d,"Dev1",1,"Voltage")
start(d,"Duration",seconds(30))
Background operation has started.
Background operation will stop after 30 s.

수집된 데이터를 저장하기 위한 행렬을 생성합니다.

dataAll = [];
timestampsAll = [];

1초 단위로 데이터를 읽고 수집된 데이터를 지속적으로 그래프로 표시합니다.

chunkDuration = seconds(1);
while d.Running
    [data, timestamps] = read(d,chunkDuration,OutputFormat="Matrix");
    dataAll = [dataAll; data];
    timestampsAll = [timestampsAll; timestamps];
    plot(timestampsAll,dataAll)
    pause(0.5*seconds(chunkDuration))
end

dynamically updating plot with acquired data

입력 인수

모두 축소

daq 함수를 사용하여 생성된 DataAcquisition 객체로 지정된 DataAcquisition 인터페이스입니다.

예: d = daq()

읽기 작업의 길이이며, 기간이나 double로 지정됩니다. 수집 시간은 duration으로 지정하고, 스캔 횟수는 double로 지정합니다.

백그라운드 수집 중에 "all"를 지정하여 DataAcquisition 객체 버퍼에 있는 모든 데이터를 수집합니다.

예: read(dObj,seconds(5))

데이터형: double | duration

읽기 작업 출력 형식은 다음 중 하나로 지정됩니다.

예: read(dObj,10,OutputFormat="Matrix")

데이터형: string

출력 인수

모두 축소

장치에서 스캔 데이터를 입력하면 OutputFormat 설정에 따라 타임테이블 또는 M x N 행렬로 반환됩니다. 행렬에서 M은 스캔 수이고 N은 입력 채널 수입니다. 각 열에는 한 채널의 데이터가 들어 있습니다.

타임테이블의 각 스캔에 대한 타임스탬프는 트리거 시간을 기준으로 한 기간입니다. 스캔 트리거 시간은 datetime 값으로 반환되는 타임테이블 속성 scanData.Properties.CustomProperties.TriggerTime에서 액세스할 수 있습니다.

데이터 수집 시작 시간은 OutputFormat'Timetable'(기본값)인 경우 datetime으로 반환되고, OutputFormat'Matrix'인 경우 double로 반환됩니다. 이 정보는 타임테이블 속성 scanData.Properties.CustomProperties.TriggerTime의 날짜/시간 값으로도 사용할 수 있습니다.

데이터 수집의 상대적 타임스탬프는 스캔 횟수인 Mx1 벡터로 반환됩니다. 각 값은 첫 번째 스캔 후의 상대적 시간(초)을 나타냅니다. 이 함수는 OutputFormat"Matrix"로 설정한 경우에만 두 번째 출력 인수에 타임스탬프를 반환합니다.

버전 내역

R2020a에 개발됨

참고 항목

함수