31
해해해해해해해 https://www.facebook.com/mislecture 강강 : 강강강 / IT 강강강 Chapter 4. 강강강 강강강 강강강강 (Serial 강강 /NMEA0183)

제4장 선박용 장비의 통신규약 / 시리얼통신 / NMEA0183

Embed Size (px)

DESCRIPTION

한국해양대학교 해양정보시스템 강의 노트 제4장 선박용 장비의 통신규약/시리얼통신/NMEA0183

Citation preview

Page 1: 제4장 선박용 장비의 통신규약 / 시리얼통신 / NMEA0183

해양정보시스템

https://www.facebook.com/mislecture

강의 : 정창용 / IT 공학부

Chapter 4. 선박용 장비의 통신규약 (Serial 통신 /NMEA0183)

Page 2: 제4장 선박용 장비의 통신규약 / 시리얼통신 / NMEA0183

2

직렬 (serial) 통신

직렬 (serial) 통신 한번에 1 비트씩 송수신 전송 속도 느림 구현하기 쉬움

full duplex 통신 시에 Rx, Tx, Gnd 3 가닥만 있으면 됨 원거리 통신 가능 기존의 통신선로 ( 전화선 등 ) 를 쉽게 활용 비용이 저렴 모뎀 , LAN, RS232, X.25 에 사용

Page 3: 제4장 선박용 장비의 통신규약 / 시리얼통신 / NMEA0183

3

병렬 (Parallel) 통신

병렬 (parallel) 통신 한번에 8 비트씩 송수신 통신 거리에 제한 구현상 기술적인 어려움 있음 비용이 비쌈 주로 프린터와의 접속에 사용

Page 4: 제4장 선박용 장비의 통신규약 / 시리얼통신 / NMEA0183

4

직렬통신 vs. 병렬통신

Page 5: 제4장 선박용 장비의 통신규약 / 시리얼통신 / NMEA0183

5

시리얼통신의 기초

Baud rate 전송속도 일반적으로 PC에서는 baud와 BPS는 같음 예 ) 1200, 2400, 4800, 9600, 14400, 19200, 38400, 57600,

115200 등 Parity Bit

데이터의 송신 중에 데이터에 어떠한 누락이 생기는지 체크 하는 비트 전송하는 데이터의 바이트 중에 1의 개수가 짝수 , 혹은 홀수가 되도록

패리티 비트를 설정함 짝수 패리티 (even parity) 비트

▪ 전송할 데이터 중 비트 1의 개수가 짝수이면 parity bit 0, 홀수이면 1로 설정함

홀수 패리티 (odd parity) 비트▪ 짝수 패리티와 반대로 사용함

Page 6: 제4장 선박용 장비의 통신규약 / 시리얼통신 / NMEA0183

6

RS-232C

Recommended Standard number 232 의 약어 ‘C’ 는 표준 규격의 최신판을 나타냄 거의 대부분의 PC 시리얼 포트는 RS-232C 의

서브세트 (9 pin) 가 표준 장비로 선택 완전한 규격은 25-pin 의 ‘ D’ 형태 커넥터

왼쪽 그림은 RS 232C 신호 레벨을 나타낸 것으로 3V 이상의 신호 논리적으로 0 을 나타내며 – 3V 이하의 전기적 신호가 들어오면 논리적으로 1 을 나타내게 됩니다 . 이를 이용하여 데이터를 전송 할 수 있습니다 .

Page 7: 제4장 선박용 장비의 통신규약 / 시리얼통신 / NMEA0183

7

RS-232C

3 wire cable 7 wire cable

Page 8: 제4장 선박용 장비의 통신규약 / 시리얼통신 / NMEA0183

8

RS-232C 포트

TXD – Transmit Data 비동기식 직렬통신 장치가 외부 장치로

정보를 보낼 때 직렬통신 데이터가 나오는 신호선

RXD – Receive Data 외부 장치에서 들어오는 직렬통신 데이터를

입력 받는 신호선 RTS – Ready To Send

컴퓨터와 같은 DTE장치가 모뎀 또는 프린터와 같은 DCE장치에게 데이터를 받을 준비가 됐음을 나타내는 신호선

CTS – Clear To Send 모뎀 또는 프린터와 같은 DCE장치가

컴퓨터와 같은 DTE장치에게 데이터를 받을 준비가 됐음을 나타내는 신호선

Page 9: 제4장 선박용 장비의 통신규약 / 시리얼통신 / NMEA0183

9

RS-232C 포트

DTR - Data Terminal Ready 컴퓨터 또는 터미널이 모뎀에게 자신이 송수신 가능한 상태임을 알리는 신호선 일반적으로 컴퓨터 등이 전원 인가 후 통신 포트를 초기화한 후 이 신호를 출력

DSR - Data Set Ready 모뎀이 컴퓨터 또는 터미널에게 자신이 송수신 가능한 상태임을 알려주는 신호선 일반적으로 모뎀에 전원 인가 후 모뎀이 자신의 상태를 파악 한 후 이상이 없을 때 이

신호를 출력 DCD - Data Carrier Detect

모뎀이 상대편 모뎀과 전화선 등을 통해서 접속이 완료되었을 때 상대편 모뎀이 캐리어 신호를 보내오며 이 신호를 검출하였음을 컴퓨터 또는 터미널에 알려주는 신호선

RI - Ring Indicator 상대편 모뎀이 통신을 하기 위해서 먼저 전화를 걸어오면 전화 벨이 울리게 된다 . 이때

이 신호를 모뎀이 인식하여 컴퓨터 또는 터미널에 알려주는 신호선 일반적으로 컴퓨터가 이 신호를 받게 되면 전화벨 신호에 응답하는 프로그램을

인터럽터 등을 통해서 호출하게 됨

Page 10: 제4장 선박용 장비의 통신규약 / 시리얼통신 / NMEA0183

10

시리얼통신 – RS-232C 커넥터

Page 11: 제4장 선박용 장비의 통신규약 / 시리얼통신 / NMEA0183

11

GPS 데이터 샘플 – Hyper ter-minal

Page 12: 제4장 선박용 장비의 통신규약 / 시리얼통신 / NMEA0183

12

GPS (Global Positioning Sys-tem)

Global Positioning System (범지구위치결정시스템) 현재 완전하게 운용되고 있는 범지구위치항법시스템 미국 국방부에서 개발 공식명칭은 NAVSTAR GPS 무기 유도 , 항법 , 측량 , 지도제작 , 측지 , 시각동기 등의

군용 및 민간용 목적으로 사용 중궤도를 도는 24개 (실제는 그 이상 )의 인공위성에서 발신하는 마이크로파를 GPS

수신기에서 수신하여 수신기의 위치벡터를 결정 GPS 수신기는 세 개 이상의 GPS 위성으로부터 송신된 신호를 수신하여 위성과

수신기의 위치를 결정 위성에서 송신된 신호와 수신기에서 수신된 신호의 시간차를 측정하여 위성과 수신기 사이의

거리를 구함 송신된 신호에는 위성의 위치에 대한 정보가 들어 있음 최소한 세 개의 위성과의 거리와 각 위성의 위치를 알게 되면 삼변측량에서와 같은 방법을

이용해 수신기의 위치를 계산 시계가 완전히 정확하지 않기 때문에 오차를 보정하고자 보통 네 개 이상의 위성을 이용해

위치를 결정

Page 13: 제4장 선박용 장비의 통신규약 / 시리얼통신 / NMEA0183

13

GPS 체계 – 시스템 구성

우주 부분 (SS, space segment) 궤도를 도는 GPS 위성을 의미 24 개의 인공위성이 여섯 개의 궤도면 상에 분포하도록 설계 GPS 위성의 평균 수명은 약 8 년 정도 GPS 위성의 고도는 약 20,183 km 2007 년 4 월 현재 총 30 개의 GPS 위성이 운용중

제어 부분 (CS, control segment) GPS 위성의 궤도를 추적하고 위성을 관리하는 제어 부분 (CS) 은

지상의 제어국으로 이루어져 있음 하와이 , 콰절런 , 어센션 섬 , 디에고 가르시아 섬과 콜로라도

스프링스의 다섯 군데의 제어국에서 미국 지리정보국의 운영 하에 위성을 추적

Page 14: 제4장 선박용 장비의 통신규약 / 시리얼통신 / NMEA0183

14

GPS 체계 – 시스템 구성 (cont’) 사용자 부분 (US, user segment)

GPS 수신기를 의미함 구성▪ 안테나 : GPS 위성에서 송신하는 주파수에 동조▪ 시계 : 수정발진기 등을 이용한 정밀한 시계▪ 처리장치 : 수신된 신호를 처리하고 수신기 위치의 좌표와 속도 벡터

등을 계산▪ 출력장치 : 계산된 결과를 출력

Page 15: 제4장 선박용 장비의 통신규약 / 시리얼통신 / NMEA0183

15

NMEA 0183 개요

NMEA라고 주로 불리는 NMEA 0183은 시간 , 위치 , 방위 등의 정보를 전송하기 위한 규격

1980년대 미국의 The National Marine Electronics Association 에서 정의 선박 전자 장비의 인터페이스 표준 (Standard for Interfacing Marine Elec-

tronic Device) IEC(International Electrotehnical Commission; 국제전기기술 위원회 )에

의해 IEC61162-1 표준으로 채택 대부분의 선박 장비들이 사용하고 있으며 , 육상에서 사용되고 있는 대부분의

GPS 수신기들도 NMEA 0183 표준 포맷을 사용 ASCII 코드와 직렬 (serial) 방식의 통신을 사용 구성 (Layer)

물리 계층 : RS-232 / RS-422 등의 전기적인 전송 규격 정의 데이터링크 계층 : Baud rate, Data bit, Parity bit 등 정의 응용 계층 : 데이터를 전송하는 sentence에 대한 규약

Page 16: 제4장 선박용 장비의 통신규약 / 시리얼통신 / NMEA0183

16

NMEA 0183 – 프로토콜 구조

Sentence 의 정의 '$‘ 혹은 ‘ !’ 로 시작한다 .필드 중 인코딩된 데이터가 있을 경우 ‘ !’ 로 시작한다 .

첫 두 자리는 제품의 종류를 나타낸다 . GPS 제품일 경우 GP, 수심 측정 장비인 Depth Sounder 제품일 경우 SD 등을 사용한다 .

다음 세 자리는 해당 프로토콜이 가지고 있는 데이터의 종류를 나타낸다 .

데이터의 구분은 ',' 로 한다 . '*' 로 끝난다 . '$' 와 '*' 사이의 모든 데이터를 exclusive or 연산을 하여 Check-

sum 을 만들어 추가한다 . <CR><LF> 를 붙인다 .

Page 17: 제4장 선박용 장비의 통신규약 / 시리얼통신 / NMEA0183

17

NMEA 0183 – 프로토콜 구조

$GPDTS,Inf_1,Inf_2,Inf_3,…,Inf_n*CS<CR><LF>

필드 내용

$ 데이터 셋의 시작을 나타낸다 .

GP  GPS 정보를 나타낸다 .

DTS 데이터 셋의 식별자 .

Inf_1,…,Inf_n  1 ... n 정보 ( 예 , course data 를 위한 175.4)

, 서로 다른 정보를 나타내는 아이템간의 구분문자

*  checksum 을 위한 구분 문자

CS 전체 데이터 셋을 검사하기 위한 체크섬 (Control Word)

<CR><LF> 데이터 셋의 끝 .

Page 18: 제4장 선박용 장비의 통신규약 / 시리얼통신 / NMEA0183

18

NMEA 0183 – 예

NMEA 프로토콜로 기록한 GPS 데이타 예제 (SONY GPS 수신기 )

$GPGGA,004952,3723.8259,N,12655.3071,E,1,04,04.7,00046.9,M,018.1,M,,*4F$GPGSA,A,3,13,16,19,23,,,,,,,,,19.3,04.7,18.7*08$GPGSV,2,1,05,13,33,295,40,16,57,043,41,19,42,212,41,23,40,249,38*7B$GPGSV,2,2,05,31,,,28,,,,,,,,,,,,*74$GPRMC,004952,A,3723.8259,N,12655.3071,E,000.0,088.7,291107,,,A*72$GPVTG,088.7,T,,M,000.0,N,000.0,K,A*0A

Page 19: 제4장 선박용 장비의 통신규약 / 시리얼통신 / NMEA0183

19

NMEA 0183 – GPS 관련 데이터 셋 GNSS 를 위한 7 가지 데이터 셋

GGA: GPS Fix Data, GLL: Geographic Position - Latitude/Longitude GSA: GNSS DOP 와 Active Satellites GSV: GNSS Satellites in View RMC: Recommended Minimum Specific GNSS

Data VTG: Course over Ground ZDA: Time and Date

Page 20: 제4장 선박용 장비의 통신규약 / 시리얼통신 / NMEA0183

20

NMEA 0183 – GGA

Global Positioning System Fix Data 시간 , longitude, latitude, 시스템의 품질 , 사용중인 위성의 수 ,

Height 에 대한 정보 $GPGGA,004952,3723.8259,N,12655.3071,E,1,04,04.7,

00046.9,M,018.1,M,,*4F필드 내용 필드 내용

$ 데이터의 시작 04.7 HDOP(Horizontal Dilution of Precision)

GP GPS 어플라이언스로부터 만들어진 정보 00046.9 안테나 높이 (Geoid Height)

GGA GGA 데이터 식별자 M 높이 단위 (M=meter)

004952 UTC Positional Time: 00 시 49 분 52 초 018.1 Ellipsoid 와 Geoid 간의 높이 차이

3723.8259 Latitude: 37 도 23.8259 분 M 높이 차이의 단위 (M=meter)

N 북위 (N=north, S=South) DPGS 데이터의 Age (No DGPS)

12655.3071

Longitude: 126 도 55.3071 분 * 체크섬 구분자

E 동경 (E=East, W=West) 4F 전체 데이터 검증을 위한 체크섬 값

1 GPS (0= no GPS, 1=GPS, 2=DGPS) <CR><LF> 데이터 종료

04 계산을 위해 사용한 위성의 개수

Page 21: 제4장 선박용 장비의 통신규약 / 시리얼통신 / NMEA0183

21

NMEA 0183 – GLL

Geographic Position, Latitude / Longitude and time Latitude, Longitude, time, health 정보 $GPGLL,4717.115,N,00833.912,E,130305.0,A,*32

필드 내용 필드 내용

$ 데이터의 시작 E 동경 (E=East, W=West)

GP GLL GLL 데이터 식별자 130305.0 UTC 시간 : 13 시 3 분 5.0 초

4717.115 Latitude: 47 도 11.115 분 A 데이터 품질 : A(Valid), V(Invalid)

N 북위 (N=north, S=south) * Checksum 구분자

00833.912 Longitude: 8 도 33.912 분 32 Checksum

<CR><LF> 데이터 종료

Page 22: 제4장 선박용 장비의 통신규약 / 시리얼통신 / NMEA0183

22

NMEA 0183 – GSA

GNSS DOP and active satellites 측정 모드 (2D, 3D) 에 대한 정보 , 위치 결정에 사용된 위성의 수 ,

DOP 등의 정보 $GPGSA,A,3,13,16,19,23,,,,,,,,,19.3,04.7,18.7*08

필드 내용 필드 내용

$ 데이터의 시작 계산에 사용된 위성의 번호

GP GPS 어플라이언스로부터 만들어진 정보 계산에 사용된 위성의 번호

GSA GSA 데이터 식별자 계산에 사용된 위성의 번호

A계산 모드 (A = 2D/3D 모두간의 자동선택 , M= 수동 선택 )

계산에 사용된 위성의 번호

3 3 차원 계산 모드 (1=none, 2=2D, 3=3D) 19.3 PDOP (Position DOP)

13 계산에 사용된 위성의 번호 (13 번 위성 ) 04.7 HDOP (Horizontal DOP)

16 계산에 사용된 위성의 번호 (16 번 위성 ) 18.7 VDOP (Vertical DOP)

19 계산에 사용된 위성의 번호 (19 번 위성 ) * Checksum 구분자

23 계산에 사용된 위성의 번호 (23 번 위성 ) 08 Checksum

계산에 사용된 위성의 번호 <CR><LF> 데이터 종료

계산에 사용된 위성의 번호

Page 23: 제4장 선박용 장비의 통신규약 / 시리얼통신 / NMEA0183

23

NMEA 0183 – GSA (cont’)

GPS 작동모드 2D 모드란 높이의 변화가 없이 경위도만 변한다고 가정하고 위치를

계산하는 모드 3D 모드는 경위도와 높이가 다 변하는 경우

VDOP (Vertical Dilution of Precision): 수직오차 HDOP (Horizontal Dilution of Precision): 수평오차 PDOP =

최적값은 1.0 으로 대개 6 이하면 쓸만함

Page 24: 제4장 선박용 장비의 통신규약 / 시리얼통신 / NMEA0183

24

NMEA 0183 – GSV

GNSS Satellite in View ; 위성의 상태 정보 $GPGSV,2,1,05,13,33,295,40,16,57,043,41,19,42,212

,41,23,40,249,38*7B필드 내용 필드 내용

$ 데이터의 시작 41 위성의 Signal-to-noise 비율 41(db-Hz)

GP GPS 어플라이언스로부터 만들어진 정보 19 세번째 위성의 식별 번호 19 번

GSV GSV 데이터 식별자 42 위성의 고도 42 도

2 전송된 GVS 데이타 셋의 전체 수 ( 1..9) 212 위성의 방위각 212 도

1 현재 GVS 데이타 셋 번호 (1..9) 41 위성의 Signal-to-noise 비율 41(db-Hz)

05 관측되는 전체 위성의 수 23 네번째 위성의 식별 번호 23 번

13 첫번째 위성의 식별 번호 13 번 40 위성의 고도 40 도

33 위성의 고도 33 도 (0 ...90 도 ) 49 위성의 방위각 249 도

295 위성의 방위각 295 도 (0..360 도 ) 38 위성의 Signal-to-noise 비율 38(db-Hz)

40 위성의 Signal-to-noise 비율 40(db-Hz) (1..99,  추적되지 않을 때 NULL)

* Checksum 구분자

16 두번째 위성의 식별 번호 16 번 08 Checksum

57 위성의 고도 57 도 <CR><LF> 데이터 종료

043 위성의 방위각 43 도

Page 25: 제4장 선박용 장비의 통신규약 / 시리얼통신 / NMEA0183

25

NMEA 0183 – GSV (cont’)

'3' 은 앞으로 나올 GPGSV 가 총 몇 개의 Sentence 일지 알려준다 . 여기에서는 총 3 개의 Sentence 이다 .

'1' 은 GPGSV Sentence 중 몇 번째의 Sentence 인지 알려준다 . 여기에서는 1 번째 Sentence 이다 .

'10' 은 현재 수신할 수 있는 모든 위성의 개수를 나타낸다 . '03,86,244,00' 는

3 번 위성이고 , 현재 자신의 위치에서 86 도 (degree) elevation 244 도 (degree) 의 Azimuth 신호대잡음비 (SNR) 은 0 이다 .

'77' 은 Checksum 이다 .

$GPGSV,3,1,10,03,86,244,00,19,51,218,38,16,51,057,00,07,40,048,00*77$GPGSV,3,2,10,13,34,279,00,23,33,236,00,15,29,076,40,25,25,143,38*71$GPGSV,3,3,10,21,18,051,,27,12,315,*77

Page 26: 제4장 선박용 장비의 통신규약 / 시리얼통신 / NMEA0183

26

NMEA 0183 – RMC

Recommended Minimum Specific GNSS 시간 , latitude, longitude, height, system status, speed,

course, date 등의 정보 $GPRMC,004952,A,3723.8259,N,12655.3071,E,000.0,08

8.7,291107,,,A*72필드 내용 필드 내용

$ 데이터의 시작 000.0 속도 : 0 Knots

GP GPS 어플라이언스로부터 만들어진 정보 088.7 경로 : 88.7 도

RMC RMC 데이터 식별자 291107 날짜 : 2007 년 11 월 29 일 (DDMMYY)

004952 수신 시간 (UTC), 00 시 49 분 52 초 보정 편차

A 데이터 품질 (A=Valid, V=Invalid) 보정 편차 방향 (W=West, E=East)

3723.8259 Latitude: 37 도 23.8259 분 AMode, A=Autonomous, D=DGPS, E= DR(missing in NMEA v2.0)

N 북위 * Checksum 구분자

12655.3071

Longitude: 126 도 55.3071 분 08 Checksum

E 동경 <CR><LF> 데이터 종료

Page 27: 제4장 선박용 장비의 통신규약 / 시리얼통신 / NMEA0183

27

NMEA 0183 – VTG

경로와 속도에 기반한 지상 경로와 속도 정보 $GPVTG,088.7,T,,M,000.0,N,000.0,K,A*0A

필드 내용 필드 내용

$ 데이터의 시작 000.0 Speed, knots

GP GPS 어플라이언스로부터 만들어진 정보 N 속도 단위 (knots)

VTG VTG 데이터 식별자 000.0 Speed, km/h

088.7 Track, degree True (88.7 도 ) K 속도 단위 (km/h)

T degree True A 데이터 품질 (A=Valid, V=Invalid)

Track, degree Magnetic, not used * Checksum 구분자

M degree Magnetic 08 Checksum

<CR><LF> 데이터 종료

Page 28: 제4장 선박용 장비의 통신규약 / 시리얼통신 / NMEA0183

28

NMEA 0183 – ZDA

시간 정보 $GPZDA,130305.2,20,06,2001,,,*57

필드 내용 필드 내용

$ 데이터의 시작 2001 Year

GP GPS 어플라이언스로부터 만들어진 정보 Local Time 일자 예약 (HH)

ZDA ZDA 데이터 식별자 Local Time 일자 예약 (MM)

130305.2 UTC 시간 : 13 시 3 분 5.2 초 * Checksum 구분자

20 Day (00.31) 08 Checksum

06 Month (01..12) <CR><LF> 데이터 종료

Page 29: 제4장 선박용 장비의 통신규약 / 시리얼통신 / NMEA0183

29

NMEA 0183 – checksum

데이타의 시작 (‘$’ or ‘!’) 과 끝 (<CR><LF>) 을 나타내는 문자를 제외한 모든 문자를 8 비트 문자로 XOR 조합을 한 결과값의 16진수 표현

예 ) $GPVTG,088.7,T,,M,000.0,N,000.0,K,A*0A

int CNMEASentence::CalcChecksum(const char *pPtr){

if (*pPtr == '!' || *pPtr == '$')++pPtr;

int cs = 0;while (*pPtr && *pPtr != '*'){

cs ^= *pPtr;++pPtr;

}

return cs;}

Page 30: 제4장 선박용 장비의 통신규약 / 시리얼통신 / NMEA0183

30

NMEA 0183 – checksum 계산

문자 아스키 (8 비트 값 )

0x30 0 0 1 1 0 0 0 0

0x2E 0 0 1 0 1 1 1 0

0x30 0 0 1 1 0 0 0 0

0x2C 0 0 1 0 1 1 0 0

0x4E 0 1 0 0 1 1 1 0

0x2C 0 0 1 0 1 1 0 0

0x30 0 0 1 1 0 0 0 0

0x30 0 0 1 1 0 0 0 0

0x30 0 0 1 1 0 0 0 0

0x2E 0 0 1 0 1 1 1 0

0x30 0 0 1 1 0 0 0 0

0x2C 0 0 1 0 1 1 0 0

0x4B 0 1 0 0 1 1 0 1

0x2C 0 0 1 0 1 1 0 0

0x41 0 1 0 0 0 0 0 1

XOR 합

  0x0A

0 0 0 0 1 0 0 0

Hex 값 0x00 0x0A

ASCII 0 A

문자 아스키 (8 비트 값 )

0x470 1 0 0 0 1 1 1

0x50 0 1 0 1 0 0 0 0

0x56 0 1 0 1 0 1 1 0

0x54 0 1 0 1 0 1 0 0

0x470 1 0 0 0 1 1 1

0x2C 0 0 1 0 1 1 0 0

0x30 0 0 1 1 0 0 0 0

0x38 0 0 1 1 1 0 0 0

0x38 0 0 1 1 1 0 0 0

0x2E 0 0 1 0 1 1 1 0

0x37 0 0 1 1 0 1 1 1

0x2C 0 0 1 0 1 1 0 0

0x54 0 1 0 1 0 1 0 0

0x2C 0 0 1 0 1 1 0 0

0x2C 0 0 1 0 1 1 0 0

0x4D 0 1 0 0 1 1 0 1

0x2C 0 0 1 0 1 1 0 0

0x30 0 0 1 1 0 0 0 0

0x30 0 0 1 1 0 0 0 0