Main Content

직렬 포트 데이터 쓰기 및 읽기

쓰기 및 읽기 작업을 완료하기 위한 규칙

쓰기 작업 완료하기

write 또는 writeline을 사용한 쓰기 작업은 다음 조건 중 하나가 충족될 때 완료됩니다.

  • 지정된 데이터가 다 기록되었을 때

  • Timeout 속성으로 지정된 시간이 경과하면

계측기가 필요한 종결자를 수신할 경우에만 텍스트 명령이 처리됩니다. 직렬 포트 객체의 경우 ASCII 명령에 나오는 각각의 \nTerminator 속성값으로 대체됩니다. Terminator의 디폴트 값은 라인 피드 문자입니다. 계측기에 필요한 종결자를 확인하려면 계측기의 설명서를 참조하십시오.

읽기 작업 완료하기

read 또는 readline을 사용한 읽기 작업은 다음 조건 중 하나가 충족될 때 완료됩니다.

  • 지정된 개수의 값을 읽으면

  • Timeout 속성으로 지정된 시간이 경과하면

  • Terminator 속성으로 지정된 종결자를 읽으면

텍스트 데이터 쓰기 및 읽기

이 예제에서는 텍스트 데이터를 쓰고 읽는 방법을 통해 직렬 포트 계측기와 통신하는 방법을 보여줍니다.

계측기는 직렬 포트 COM1에 연결된 Tektronix® TDS 210 2채널 오실로스코프입니다. 따라서 예제에 나와 있는 많은 명령은 이 계측기에만 해당됩니다. 사인파는 오실로스코프의 채널 2에 대한 입력입니다. 목표는 입력 신호의 피크 간(peak-to-peak) 전압을 측정하는 것입니다.

텍스트를 읽고 쓸 때 다음 함수와 속성이 사용됩니다.

함수용도
readline계측기에서 텍스트 데이터를 읽어옵니다.
writeline텍스트 데이터를 계측기에 씁니다.
Terminator계측기에 전송된 명령을 종료하는 데 사용되는 문자입니다.

참고

이 예제는 Windows®에 한합니다.

  1. 직렬 포트 객체 만들기 — 직렬 포트 COM1에 연결된 직렬 포트 객체 s를 만듭니다.

    s = serialport("COM1",9600);
  2. 데이터 쓰기 및 읽기writeline을 사용하여 *IDN? 명령을 계측기에 쓴 다음, readline을 사용하여 명령 결과를 다시 읽어옵니다.

    writeline(s,"*IDN?")
    s.NumBytesAvailable
    
    ans =
    
         56
    idn = readline(s)
    
    idn =
    
         "TEKTRONIX,TDS 210,0,CF:91.1CT FV:v1.16 TDS2CM:CMV:v1.04"

    측정 소스를 결정해야 합니다. 가능한 측정 소스에는 오실로스코프의 채널 1과 채널 2가 포함됩니다.

    writeline(s,"MEASUREMENT:IMMED:SOURCE?")
    source = readline(s)
    source =
    
         "CH1"

    채널 1에서 측정값을 반환하도록 스코프가 구성되었습니다. 입력 신호가 채널 2에 연결되었기 때문에, 채널 2에서 측정값을 반환하도록 계측기를 구성해야 합니다.

    writeline(s,"MEASUREMENT:IMMED:SOURCE CH2")
    writeline(s,"MEASUREMENT:IMMED:SOURCE?")
    source = readline(s)
    
    source =
    
         "CH2"

    이제 피크 간 전압을 반환하도록 스코프를 구성한 다음, 측정값을 요청할 수 있습니다.

    writeline(s,"MEASUREMENT:MEAS1:TYPE PK2PK")
    writeline(s,"MEASUREMENT:MEAS1:VALUE?")

    readline 함수를 사용하여 결과를 다시 읽어옵니다.

    ptop = readline(s)
    ptop =
    
         "2.0199999809E0"
  3. 연결 끊기 및 정리하기 — 직렬 포트 객체 s를 사용하는 작업이 다 끝났으면 MATLAB® 작업 공간에서 이 객체를 지웁니다.

    clear s

이진 데이터 쓰기 및 읽기

이 예제에서는 직렬 포트 객체를 사용한 이진 읽기 및 쓰기 작업에 대해 살펴봅니다. 사용된 계측기는 Tektronix® TDS 210 오실로스코프입니다.

함수 및 속성

이진 데이터를 읽고 쓸 때 다음 함수가 사용됩니다.

함수용도
read계측기에서 이진 데이터를 읽어옵니다.
write이진 데이터를 계측기에 씁니다.

직렬 객체를 구성하고 이에 연결하기

직렬 객체를 만들어야 합니다. 이 예제에서는 COM1 포트와 연결된 직렬 포트 객체를 만듭니다.

s = serialport("COM1",9600);

이진 데이터 쓰기

write 함수를 사용하여 이진 데이터를 계측기에 씁니다. 이진 쓰기 작업은 다음 조건 중 하나가 충족될 때 완료됩니다.

  • 모든 데이터의 쓰기가 완료되면

  • Timeout 속성으로 지정한 제한 시간이 만료되면

참고

쓰기 작업을 할 때는 전송된 데이터를 바이트가 아니라 값으로 생각해야 합니다. 값은 1바이트 이상으로 구성됩니다. 예를 들어 uint32 값 하나는 4바이트로 구성됩니다.

Int16 이진 데이터 쓰기

파형을 int16 배열로 씁니다.

write(s,"Data:Destination RefB","string");
write(s,"Data:Encdg SRPbinary","string");
write(s,"Data:Width 2","string");
write(s,"Data:Start 1","string");
t = (0:499) .* 8 * pi / 500;
data = round(sin(t) * 90 + 127);
write(s,"CURVE #3500","string");

참고로, int16 값 하나는 2바이트로 구성됩니다. 따라서 다음 명령은 1000바이트를 씁니다.

write(s,data,"int16")

이진 데이터 읽어오기

read 함수를 사용하여 계측기에서 이진 데이터를 읽어옵니다. 이진 읽기 작업은 다음 조건 중 하나가 충족될 때 완료됩니다.

  • Timeout 속성으로 지정한 제한 시간이 만료되면

  • 지정된 개수의 값을 읽으면

참고

읽기 작업을 할 때는 수신된 데이터를 바이트가 아니라 값으로 생각해야 합니다. 값은 1바이트 이상으로 구성됩니다. 예를 들어 uint32 값 하나는 4바이트로 구성됩니다.

int16 이진 데이터 읽어오기

채널 1의 동일한 파형을 int16 배열로 읽어옵니다.

write(s,"Data:Source CH1","string");
write(s,"Data:Encdg SRPbinary","string");
write(s,"Data:Width 2","string");
write(s,"Data:Start 1","string");
write(s,"Data:Stop 2500","string");
write(s,"Curve?","string")

참고로, int16 값 하나는 2바이트로 구성됩니다. 따라서 다음 명령은 512바이트를 읽어옵니다.

data = read(s,256,"int16");

연결 끊기 및 정리하기

직렬 포트 객체를 사용한 작업이 끝났으면 작업 공간에서 이 객체를 지웁니다.

clear s