August 20, 2018

디바이스마트 미디어:

초보자를 위한 NT-ARSv1 (Attitude Reference System) 보강

* Previously…

초보자를 위한 NT-ARSv1(Attitude Reference System)을 게시했었습니다.
이번에는 NT-ARSv1 (Attitude Reference System)을 좀 더
자유롭게 구동하기 위한 보강 Source를 만들어 보았습니다.
Radian 값과 Degree 값 모두 볼 수 있게 되어 있습니다.

 Form창 구성

위 그림과 같이 Form 창을 구성하였습니다.
비주얼 베이직에서 MSComm은 PC와 통신Port를 연결하기 위한
장치이며 툴 박스에서 마우스 오른쪽 버튼을
클릭한 후 추가 하시면 됩니다.

각도 출력

보시다시피 Form창을 실행시키면
NT-ARSv1의 값이 <CAH>값으로 나옵니다.
<CAH>는 RS232모드 데이터 출력 값입니다.

* NT-ARSv1 Source 

그럼 상세하게 NT-ARS의 <CAH>각도 값을 출력시키기 위한
비주얼 베이직 6.0 Source를 설명해 드리겠습니다.

Private Sub receive_Click()

receive.Enabled = True
Disconnect.Enabled = True

MSComm1.CommPort = 3
MSComm1.Settings = “115200,n,8,1″
MSComm1.PortOpen = True

MSComm1.Output = “<CAH>”
End Sub

‘받기 버튼을 Click할 경우 수행하게 되는 Source
NT – ARSv1의 Radian값을 MSComm1을 이용하여 PC로 받음
NT – ARSv1의 Radian값 : 정수로 구현하기 위하여 NT-ARSv1의 출력 값에 1000을 곱한 값

‘PC와 연결된 통신Port는 CommPort3이고 ARS의 각도 정보를
통신속도 115200bps , None Parity , 8 Data Bit , 1 정지비트로 받습니다. 

이렇게 되면 1바이트 문자가 전송될 때 실제 나가는 비트 수는 총 10비트입니다.
시작 1비트 + 데이터 8비트 + 종료 1비트 = 10비트
따라서, 10비트씩 전송되므로 115200bps의 경우 byte로 환산하면
115200/10 이므로 1초당 11520byte가 전송됩니다. 

이렇게 계산 해보면 1바이트 문자가 전송되는데는 약 1밀리초가 소요됩니다.

‘Port를 열고 NT – ARSv1의 <CAH> 값을 출력한다는 것입니다.
NT – ARSv1의 <CAH> 값은 <Roll, Pitch, Rated Roll, Rated Pitch>의 문자열 값입니다.


Private Sub MSComm1_OnComm()

Dim n As Integer
Dim n0 As Integer
Dim n1 As Integer
Dim n2 As String
Dim n3 As Integer
Dim n4 As String

Const pi = 3.141592
Const deg = 180/pi

If MSComm1.PortOpen = False Then
Exit Sub
End If

‘변수와 상수를 선언해주고 Port 연결이 활성화 되지 않았다면 프로젝트를 끝낸다는 것입니다.

Static BUF As String
Static tmpBuf As String

tmpBuf = MSComm1.Input
If tmpBuf = “<” Then
BUF = “”
End If

BUF = BUF & tmpBuf

‘Serial을 통해서 들어온 정보를 tmpBuf로 저장해 주고 들어온 정보가
“<”라면 BUF와 tmpBuf에 들어온 문자열을 결합하여 결합한 문자열을 BUF라는 변수로 다시 저장해준다는 것입니다.

If tmpBuf = “>” Then

Text6.Text = BUF

n0 = InStr(1,BUF, “,”)

‘BUF의 문자열에서(NT-ARSv1의 <CAH>값) 첫번째 “,”가 나오는 자리를 n0로 선언해준다는 것입니다. 여기서는 <Roll,←지금 나오는 ,의 자리 Number가 되겠네요.

If n0 > 0 Then

n1 = NumCheck(Mid(BUF, 2, n0 – 2))

Text2.Text = n1
Text3.Text = Format(n1 / 1000 * deg, “###.#”)
End If

‘문자열 BUF에 2번째 자리부터 n0에 선언해준 자리까지 출력해준다
<Roll,..에서 R과 마지막 l까지의 문자를 출력해 준다는 의미입니다.
Text2는 Radian , Text3은 Degree 값의 소수점 한자리 수 까지만 출력하게 나타낸 것입니다.

n = InStr(n0 + 1, BUF, “,”)

If n > 0 Then

n4 = Mid(BUF, 2, n – 2)

Text1.Text = Text1.Text & “<” & n4 & “>” & vbCrLf

‘BUF의 문자열에서(NT-ARSv1의 <CAH>값) n이라는 변수에 n0+1의 자리에서부터 “,” 가 나오는 자리를 저장한다는 것입니다.
여기서는 <Roll,P(←n0+1자리)itch,←지금 나오는 ,의 자리 Number가 되겠네요.

‘문자열 BUF에서 2번째 자리부터 n-2개의 문자만 출력해준다는 것입니다.
<Roll,Pitch..에서 R과 마지막 h까지의 문자를 출력해 준다는 의미입니다.

‘Text1은 Text1의 값을 연속해서 더해주어 Text1의 값이 연속해서 나온다는 것입니다.

If n > 0 Then
n2 = Mid(BUF, n0 + 1, n – n0)

Text4.Text = n2
n3 = NumCheck(Mid(BUF, n0 + 1, n – n0))
Text5.Text = Format(n3 / 1000 * deg, “###.#”)
End If
End If
End If

‘문자열 BUF에 n0+1번째 자리부터 n-2개의 문자만 출력해준다는 것입니다.

‘Text5은 Degree 소수점 한자리 수 까지만 출력하게 나타낸 것이다는 것입니다.

Text1.SelStart = Len(Text1.Text) + 1
End Sub

‘전체 Text1에 출력된 크기에 +1을 더하여 Text1의 화면에 출력해준다는 것입니다.
이 Source를 통하여 Text1의 화면에 연속적인 Roll,Pitch값이 나올 수 있는 것입니다.

 

 

*비주얼 베이직 6.0 NT-ARSv1 Source

 

Leave A Comment

*