직렬 포트 데이터 쓰기 및 읽기
쓰기 및 읽기 작업을 완료하기 위한 규칙
쓰기 작업 완료하기
write
또는 writeline
을 사용한 쓰기 작업은 다음 조건 중 하나가 충족될 때 완료됩니다.
지정된 데이터가 다 기록되었을 때
Timeout
속성으로 지정된 시간이 경과하면
계측기가 필요한 종결자를 수신할 경우에만 텍스트 명령이 처리됩니다. 직렬 포트 객체의 경우 ASCII 명령에 나오는 각각의 \n
이 Terminator
속성값으로 대체됩니다. Terminator
의 디폴트 값은 라인 피드 문자입니다. 계측기에 필요한 종결자를 확인하려면 계측기의 설명서를 참조하십시오.
읽기 작업 완료하기
read
또는 readline
을 사용한 읽기 작업은 다음 조건 중 하나가 충족될 때 완료됩니다.
지정된 개수의 값을 읽으면
Timeout
속성으로 지정된 시간이 경과하면Terminator
속성으로 지정된 종결자를 읽으면
텍스트 데이터 쓰기 및 읽기
이 예제에서는 텍스트 데이터를 쓰고 읽는 방법을 통해 직렬 포트 계측기와 통신하는 방법을 보여줍니다.
계측기는 직렬 포트 COM1에 연결된 Tektronix® TDS 210 2채널 오실로스코프입니다. 따라서 예제에 나와 있는 많은 명령은 이 계측기에만 해당됩니다. 사인파는 오실로스코프의 채널 2에 대한 입력입니다. 목표는 입력 신호의 피크 간(peak-to-peak) 전압을 측정하는 것입니다.
텍스트를 읽고 쓸 때 다음 함수와 속성이 사용됩니다.
함수 | 용도 |
---|---|
readline | 계측기에서 텍스트 데이터를 읽어옵니다. |
writeline | 텍스트 데이터를 계측기에 씁니다. |
Terminator | 계측기에 전송된 명령을 종료하는 데 사용되는 문자입니다. |
참고
이 예제는 Windows®에 한합니다.
직렬 포트 객체 만들기 — 직렬 포트 COM1에 연결된 직렬 포트 객체
s
를 만듭니다.s = serialport("COM1",9600);
데이터 쓰기 및 읽기 —
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"
연결 끊기 및 정리하기 — 직렬 포트 객체
s
를 사용하는 작업이 다 끝났으면 MATLAB® 작업 공간에서 이 객체를 지웁니다.clear s
이진 데이터 쓰기 및 읽기
이 예제에서는 직렬 포트 객체를 사용한 이진 읽기 및 쓰기 작업에 대해 살펴봅니다. 사용된 계측기는 Tektronix® TDS 210 오실로스코프입니다.
함수 및 속성
이진 데이터를 읽고 쓸 때 다음 함수가 사용됩니다.
직렬 객체를 구성하고 이에 연결하기
직렬 객체를 만들어야 합니다. 이 예제에서는 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