Variable = Getstr (채널, Length)
Variable : 결과가 저장될 문자열 변수 |
채널 : 사용채널 (1,2,3중 하나) |
Length : 수신할 바이트수 |
수신 버퍼에 있는 데이터에서 지정된 바이트(Length) 수 만큼의 데이터를 읽어와 문자열 변수에 저장하는 명령입니다. 수신버퍼에 들어있는 데이터수가 length보다 적은경우에는 읽어올 수 있는 데이터까지 읽어온상태에서 명령수행을 종료합니다.
데이터를 다 읽어온 다음에는 문자열 데이터의 끝을 의미하는 NULL캐릭터를 가장끝에 자동적으로 저장합니다. 만약 읽어온 데이터중 NULL 문자 (ASCII코드 0)가 포함되어 있다면, 실제로 그 곳까지가 문자열 데이터로 인식됩니다. 하지만 Getstr명령어에서는 읽어오는 데이터중에 NULL문자가 포함되어 있어도 상관하지 않고, 정해진 숫자 (Length)만큼의 데이트를 무조건읽어온후, 맨뒤에 Null문자를 저장합니다.
따라서 Length를 정할 때, 저장할 곳의 “문자열변수”와 같은 사이즈를 선택하거나, 적은 사이즈로 선택되어야 합니다. CUBLOC 특성상 RUN TIMEERROR를 발생시킬수 없기 때문에, 사이즈의 오류가 발생한다면, 예상하지 않은 결과를 얻게 됩니다. 예를 들어 Length를 문자열변수의 크기보다크게 지정했을 경우,다른 변수의 영역까지 침범할 수 있습니다. Getstr명령을 사용할 때, 반드시 Length의 크기를 문자열 변수크기보다 같거나작게 지정해 주어야합니다.
Dim a2 as string * 10 A2 = getstr(1,20)
문자열변수의 크기는 10인데 수신바이트는 20으로 했다면, 예상치못한 에러가 발생됩니다. 이 명령수행뒤 SYS(1)에는 실제로 수신된 바이트수가 들어 있습니다.
'RX와 TX단자를 서로 쇼트시킨뒤 아래 프로그램을 실행시키면, Debug터미널에 Comfile이라고 표시됩니다. Const Device = CB210 Dim ST1 As String * 20 Opencom 1,19200,3,50,50 Wait 500 Putstr 1,"Comfile" ' 문자열 Comfile을 채널1으로 송신. Wait 20 ' 수신할 여유를 줍니다. ST1 = Getstr(1,7) ' 7바이트를 버퍼로부터 수신 Debug ST1 Debug Cr, Dec Sys(1),Cr '실제로 수신된 바이트수인 7을 표시합니다.