2017-03-06 15 views
0

저는 Keithley 2635A 소스 미터를 제어하기 위해 LabVIEW와 VISA 기능을 사용하고 있습니다. 기기를 식별하려고 할 때마다 읽기와 쓰기 모두에서 정상적으로 작동합니다.LabVIEW와 Keithley 2635A - 데이터를 읽을 수 없습니다.

viWRITE(*IDN?) /* VISA subVI to send the command to the machine */ 
viREAD /* VISA subVI to read output */ 

그러나 전압 (또는 전류)을 설정하자마자 그렇게합니다. 그럼 난 측정을 수행 할 명령을 전송하지만 오류 그 후

VISA: (Hex 0xBFFF0015) Timeout expired before operation completed. 

로, 데이터를 읽을 수 아니에요, 나는 *IDN? 출력 중 하나 이상을 읽을 수 없습니다.

소스 미터는 National Instrument GPIB-USB-HS 어댑터를 통해 PC에 연결됩니다.

EDIT : 추가하는 것을 잊어 버렸습니다. VISA 대화식 제어 프로그램에서도 마찬가지입니다.

+1

팁 : 오류가 있는지 확인하기 위해 명령이나 쿼리를 보낼 때 전면 패널을주의해야합니다. 또한 "설정"하고 "읽음"이라고하셨습니다."세트"(명령)가 반드시 응답을 초래하지는 않습니다. 설명서를 확인하십시오. –

답변

2

좋아, 문서가 분명하지 않은 것 같습니다. 물론 (여기서 X은 필요한 매개 변수입니다) 명령은 버퍼에 측정 결과를 기록합니다. 그러나 해당 버퍼를 읽으려면 간단한 viREAD[]으로 충분하지 않습니다.

그래서 기본적으로 대답은 단순히 print 명령을 추가했다 :이 방법은 내가

viWRITE[print(smua.measure.X())]; 
viREAD[] 

을 그리고 난 더 이상 오류가 없습니다. 그러한 명령이 필요한 이유는 확실하지 않지만 그게 그 것입니다. 나에게 대답 해 주셔서 감사합니다.

+1

SMU에 측정 버퍼가 있지만'smua.measure.X() '가 그 버퍼에 쓰여질 지 확신하지 못합니다. 하지만 핵심은 출력 (통신) 버퍼에 쓰지 않기 때문에 viREAD는 아무 것도 얻지 않고 시간이 초과된다는 것입니다. BTW - 언어는 루아이고'print'는 그들이 출력 버퍼에 쓰려고 배선하는 표준 루아 함수입니다. –

+0

@TomBlodget 설명해 주셔서 감사합니다. 나는'smua.measure.X()'가 버퍼에 실제로 쓴다고 생각한다. – Enzo

+0

일단 당신이 그것을 알아 냈어 귀하의 답변을 게시 주셔서 감사합니다! 문서에 대한 링크를 포함하도록 답변을 편집 할 수 있습니까? – SNygard

0

주석에 @Tom Blodget이 언급 했으므로 기계는 전압을 설정 한 후 읽을 수있는 응답이 없을 수 있습니다. *IDN? 문자열은 인 명령과 쿼리입니다. 즉, 이라고 쓰면 명령은 *IDN?이고 이라고 읽습니다. 일부 명령에는 읽기에 대한 응답이 없습니다. 다음은 장비에서 읽어야하는지 확인하는 빠른 테스트입니다. 다음 코드는 파이썬에 있습니다. 전압을 설정하기 위해 GPIB 명령을 구성했습니다. 악기로부터 응답을 얻을 것으로 예상 할 때

sm = SourceMonitor() 
# Prints out IDN  
sm.query('*IDN?') 

# Prints out current voltage (change this to your actual command) 
sm.query('SOUR:VOLT?') 

# Set a new voltage 
sm.write('SOUR:VOLT 1V') 

# Read the new voltage 
sm.query('SOUR:VOLT?') 

참고 질문 마크 GPIB 명령과 query이 사용됩니다. 계측기는 write 명령에 대한 응답을 제공하지 않습니다. 검색어는 write(...)read(...)의 조합입니다. LabView를 사용하는 경우 별도로 작성하고 읽어야 할 수도 있습니다.

당신은 필요 기계가 당신의 명령을 받고 그것을 행동 검증은 대부분의 장비는 다음과 같은 일반적인 명령 한 경우 : 작업이

  • SYST:ERR? 쿼리가 완료되었는지

    • *OPC? 쿼리를 확인합니다 오류가 발생했는지 확인하십시오.
    • 전압을 설정하는 데 사용되는 GPIB 명령 끝에 물음표를 추가하십시오
  • +0

    나는 더 분명해야했다, 미안. 내가 의미하는 바는, 전압을 설정하라는 명령을 보낸 후 측정을 요청하기 위해 또 다른'write' 명령을 보낸 다음'read'를 사용하여 그 측정 값을 검색한다는 것입니다. '* IDN? '명령에 관해서, 내가 피드백을 가지고 있지 않은 머신에 보낼 때, 나는 여전히'read' 신호를 보내야합니다. 게시물에서도이 내용을 수정하겠습니다. – Enzo

    +0

    내가보기 ... 당신의 데이터 세트가 큰 경우, 악기를 읽는 데 오랜 시간이 걸릴 수 있습니다. 일부 GPIB 연결의 경우 테스트 결과를 읽을 때 더 긴 시간 초과 값을 지정해야합니다. 시간 초과 오류를 일으키는 최소 명령 세트 (전압 및'* IDN? ')를 게시 할 수 있습니까? – SNygard

    +0

    명령 집합은 사실 아주 기본적인 자체입니다. 'viWRITE'와'viREAD'를 각각 호출하고, VISA subVI를 쓰고 읽으며, 대괄호 안에 문자열 입력을 넣습니다. my VI는'viWRITE [* IDN?]; viREAD []; viWRITE [smua.output.levelv = 0.1]; viWRITE [smua.measure.v()]; viREAD []'. 타임 아웃은 마지막 읽기 명령에서 발생합니다. 읽기 명령 모두에 충분히 큰 버퍼가 공급됩니다. – Enzo