2011-08-31 2 views
2

방금 ​​MATLAB을 사용하여 데이터 수집 보드에서 데이터를 수집하기 시작했으며 연속적으로 데이터를 수집하는 기능이 필요했습니다 (예 : Ctrl + C 중 함수). 이렇게하려면 32 비트 Windows OS에서 데이터 수집 도구 상자를 사용하고 있습니다. matlab에 도움의 문서와이 사이트에 대한 답변의 몇 가지를 바탕으로콜백 및 영구 변수를 사용하여 MATLAB에서 데이터를 지속적으로 수집합니다.

, 나는 발견 내가해야 내 입력 핸들에 채널을 추가 한 후 :

  1. 은 Inf를
  2. 내 'SamplesPerTrigger'을 설정 영구 가변

에 데이터를 추가 일부 하위 메뉴 콜에 'TimerFcn'

  • 설정된 'TimerFcn'를 트리거하도록 어떤 값으로 'TimerPeriod'을 설정하여 이것을 맞 이 일을하는 방법? 다음과 같이

    내 코드는 다음과 같습니다 초기 아날로그 입력이 확실히 제대로 작동

    function acquire_arena_test(samprate,daq_device ,device_ID ,channels, saveroot) 
         setup.SampleRate = samprate; 
         setup.DAQdevice = {daq_device, device_ID}; 
         setup.AIChannels = channels;    
         setup.SaveRoot = {saveroot}; 
    
    
         ai = analoginput(setup.DAQdevice{1},setup.DAQdevice{2}); 
         addchannel(ai,[setup.AIChannels]); 
         set(ai,'SamplesPerTrigger',Inf); 
         set(ai,'TimerPeriod',0.5); 
         set(ai,'TimerFcn',{@AcquireData,ai}); 
    
         start(ai); 
    
         while(strcmpi(get(ai,'Running'),'On')) 
          pause(1) 
         end 
    
         stop(ai); 
         time = datestr(now,30); 
         save([saveroot time], 'data'); 
         delete(ai); 
         clear ai; 
    
    
         function AcquireData(hObject, ~) 
          persistent totalData; 
          data = getdata(hObject); 
          if isempty(totalData) 
           totalData =data; 
          else 
           totalData = [totalData; data]; 
          end 
    

    . 나는 많은의 순열을 통해 'TimerFcn'에 AcquireData 콜백을 제공하려고 시도했다. 내가받는 오류는

    입니다. ==> acquire_arena_test> AcquireData를 사용한 오류 입력 인수가 너무 많습니다.

    경고 : TimerFcn 콜백을 사용할 수 없습니다. 콜백을 사용하려면 TimerFcn 속성을 설정하십시오. `

    도움을 받으려면 미리 감사드립니다.

  • +0

    'daqreset'와'all all'을 실행 한 후, 함수를 호출했을 때'acquire_arena_test (1000, 'nidaq', 'Dev1', [0 : 7], 'C : \ .... \') . 'SamplesPerTrigger'를 주석 처리하면 출력 파일을 저의 saveroot에 저장하기 때문에 8 개의 채널에 입력이 들어옵니다. –

    답변

    1

    내 자신의 질문에 답변 해 주셔서 죄송 합니다만, 알아 냈습니다. 결국 트리거가 필요하지 않았습니다. National Instruments 보드 (또는 사운드 카드)를 사용하면 LoggingMode를 '디스크'로 변경하고 .daq (데이터 수집 도구 상자) 파일을 저장할 파일을 지정하여 LogFileName과 같이 저장할 수 있습니다. 보드의 메모리를 사용하려면 디스크를 & 메모리로 변경하십시오. 도움 문서 : 당신은 여전히 ​​'SamplesPerTrigger'을 설정해야

    http://www.mathworks.com/help/toolbox/daq/f12-16658.html

    스크립트는 아래만큼 당신이 원하는대로되는 일시 정지, 동안 데이터를 수집 ..

    daqreset; 
    clear all; 
    ai = analoginput('nidaq','Dev1'); 
    chans = addchannel(ai,0:6); 
    set(ai,'SamplesPerTrigger',Inf); 
    set(ai,'SampleRate',1000) 
    set(ai,'LogToDiskMode','Overwrite') 
    set(ai,'LogFileName','log.daq') 
    set(ai,'LoggingMode', 'disk') 
    
    start(ai) 
    
    pause() 
    stop(ai) 
    
    data = daqread('log.daq'); 
    delete(ai); 
    

    주 이 작업이 제대로 작동하려면 Inf에 연결해야합니다. Jonas에게 도움을 주셔서 감사합니다.

    +0

    디스크 및 메모리 옵션은 DAQ 보드의 메모리를 사용하여 GUI를 채우거나 새로 고침 그래프에 표시하려는 경우에 유용합니다. –

    1

    TimerFcn 설정에 사용하는 구문이 잘못되었다고 생각합니다. 당신은

    set(ai,'TimerFcn',{@AcquireData,ai}); 
    

    쓰기하지만이 함수의 AcquireData이 나무의 매개 변수와 함께 호출되는 것을 의미합니다 : 두 개의 매개 변수를 허용 AcquireData(ai, event, ai) 다음 물론 당신의 AcquireData 기능 때문에 오류 메시지를 트리거 explained here로. 코드를

    set(ai,'TimerFcn',@AcquireData); 
    

    으로 변경하면 올바르게 작동합니다. ai 객체는 첫 번째 매개 변수로 자동 전달됩니다 (위의 MATLAB 문서 링크 참조).

    +0

    이것은 내가 가지고있는 문제를 제거합니다. 고마워요! 데이터를 지속적으로 수집하기 위해 실제로 뭔가 다른 작업을 수행해야한다는 결론을 얻었지만 (여전히 아래 답변 참조) 여전히 투표했습니다. –