본 내용은 http://blog.empas.com/joungyup/15397469 에서 발췌하였음을 밝힙니다.
역시 source는 게시판에 올려 놀 것이고 중요한 부분만 설명을 하겠다. 내용은 별게 없으며 GPS와 같은 방식으로 port만 설정을 해주면 된다. 시리얼 통신에 대해서는 독자들이 이미 경험이 있다고 생각하고 설명을 생략한다.
GPS에서는 통신속도 4800으로 port를 개방한다.
BOOL OpenConnection(int nPort, DWORD dwBaudRate = CBR_4800);
나머지는 serial 통신 예제등에 나와 있는 것을 그냥 사용하면 된다.
통신을 위한 thread를 하나 띄운다.
AfxBeginThread((AFX_THREADPROC)SendGpsData,(LPVOID)(this));
다음은 SendGpsData의 내용이다.
다음은 ReceiveGpsData()의 내용이다.
필요한 것은 문장단위로 끊어서 parsing하는 것이다.
NMEA를 잘 정라하셨던 www.navtech.co.kr에 근무하시던? 분의 자료입니다.
아래의 NMEA-0183글의 내용을 바탕으로 PDA에서 GPS상태를 확인 할 수 있는 Application을 작성해보도록 하자.
먼 저 할 일은 GPS를 Emulating 할 수 있는 프로그램을 작성하는 것이다. GPS는 일단 실외가 아니면 올바른 신호가 들어오지 않으므로 실내에서 작업 하려면 시리얼로 GPS신호를 보내야 한다. NMEA 원 data를 구해야 하는데 프로그램세계의 게시판과 필자의 회사홈페이지(www.navtech.co.kr)의 자료실에 올려 놓도록 하겠으니 참조하시기 바란다.
직접 구하려는 분들은 NoteBook에 GPS수신기를 설치한 후 하이퍼터미날로 연결해보면 위에서 예로든 문장들이 text로 계속 나올 것이다. 그것을 저장하여 사용하는 것이 제일 간단하다. 가령 PDA로 원시데이타를 얻으려면(PDA용 GPS수신기가 있을 경우) 간단한 시리얼 통신프로그램을 작성해야 할 것이다.
Embedded System은 이런저런 면에서 PC쪽보다 까다로운데 별 방법이 없다.
독 자분 들은 일단 null modem이 있어야 하며 한대의 PC로 GPS신호를 보내고 나머지 한대에서 작업을 해야 한다. 만약 PDA만 있을 경우는 앞으로 작성할 GPS-Emulator를 PDA로 포팅하여 GPS 신호를 PDA에서 보내고 PC에서 코딩을 하면 된다.
실제 win ce환경에서 debugging 해 보신 분은 잘 알겠지만 작업이 만만치 않다. 최대한 PC에서 PPC Emulator로 디버깅한 후 PDA로 옮겨 가는 게 낫다. 참고로 PPC Emulator에서도 COM Port등은 PDA와 동일한 방식으로 사용이 가능하다.
먼 저 할 일은 GPS를 Emulating 할 수 있는 프로그램을 작성하는 것이다. GPS는 일단 실외가 아니면 올바른 신호가 들어오지 않으므로 실내에서 작업 하려면 시리얼로 GPS신호를 보내야 한다. NMEA 원 data를 구해야 하는데 프로그램세계의 게시판과 필자의 회사홈페이지(www.navtech.co.kr)의 자료실에 올려 놓도록 하겠으니 참조하시기 바란다.
직접 구하려는 분들은 NoteBook에 GPS수신기를 설치한 후 하이퍼터미날로 연결해보면 위에서 예로든 문장들이 text로 계속 나올 것이다. 그것을 저장하여 사용하는 것이 제일 간단하다. 가령 PDA로 원시데이타를 얻으려면(PDA용 GPS수신기가 있을 경우) 간단한 시리얼 통신프로그램을 작성해야 할 것이다.
Embedded System은 이런저런 면에서 PC쪽보다 까다로운데 별 방법이 없다.
독 자분 들은 일단 null modem이 있어야 하며 한대의 PC로 GPS신호를 보내고 나머지 한대에서 작업을 해야 한다. 만약 PDA만 있을 경우는 앞으로 작성할 GPS-Emulator를 PDA로 포팅하여 GPS 신호를 PDA에서 보내고 PC에서 코딩을 하면 된다.
실제 win ce환경에서 debugging 해 보신 분은 잘 알겠지만 작업이 만만치 않다. 최대한 PC에서 PPC Emulator로 디버깅한 후 PDA로 옮겨 가는 게 낫다. 참고로 PPC Emulator에서도 COM Port등은 PDA와 동일한 방식으로 사용이 가능하다.
* GPS Emulator – for PC
다음은 PC용 GPS-Emulator 프로그램이다.
다음은 PC용 GPS-Emulator 프로그램이다.
역시 source는 게시판에 올려 놀 것이고 중요한 부분만 설명을 하겠다. 내용은 별게 없으며 GPS와 같은 방식으로 port만 설정을 해주면 된다. 시리얼 통신에 대해서는 독자들이 이미 경험이 있다고 생각하고 설명을 생략한다.
GPS에서는 통신속도 4800으로 port를 개방한다.
BOOL OpenConnection(int nPort, DWORD dwBaudRate = CBR_4800);
나머지는 serial 통신 예제등에 나와 있는 것을 그냥 사용하면 된다.
통신을 위한 thread를 하나 띄운다.
AfxBeginThread((AFX_THREADPROC)SendGpsData,(LPVOID)(this));
다음은 SendGpsData의 내용이다.
먼저 위의 프로그램을 실행시킨 후 제대로 동작을 하는지 하이퍼터미날로 확인을 해보길 바란다.
* NMEA Library
앞 에서 NMEA의 많은 문장에 대해 설명을 했다. 원래는 각각의 문장을 직접 parsing하는 내용을 넣으려 했으나 독자분들이 여러가지 test를 쉽게 해볼 수 있도록 공개된 library를 사용하였다. 실제 모든 경우에 대해 예외 처리를 하며 NMEA문장을 parsing하는 것도 만만한 일은 아니다.
이 library는 Samuel R. Blackburn 라는 사람이 제작한 것으로 상업적 목적이 아니라면 제한 없이 사용이 가능하다. Source level에서 제공되므로 원하는 데로 수정하여 test해 보길 바란다. NMEA0183에서 지원되는 대다수의 sentence에 대해 지원하므로 여러 GPS test에도 용이할 것이다. 실제 PDA에서는 꼭 필요한 내용만을 정리하면 될 것이다. 역시 source는 게시판에 올려 놓을 것이다.
필자는 이 library를 일단 CE용으로 수정하였고 이 글의 성격에 맞추어 몇 가지를 수정하였다. 수정한 부분은 “#if 1 // minus” 로 표시가 되어 있으니 참조하기 바란다.
앞 에서 NMEA의 많은 문장에 대해 설명을 했다. 원래는 각각의 문장을 직접 parsing하는 내용을 넣으려 했으나 독자분들이 여러가지 test를 쉽게 해볼 수 있도록 공개된 library를 사용하였다. 실제 모든 경우에 대해 예외 처리를 하며 NMEA문장을 parsing하는 것도 만만한 일은 아니다.
이 library는 Samuel R. Blackburn 라는 사람이 제작한 것으로 상업적 목적이 아니라면 제한 없이 사용이 가능하다. Source level에서 제공되므로 원하는 데로 수정하여 test해 보길 바란다. NMEA0183에서 지원되는 대다수의 sentence에 대해 지원하므로 여러 GPS test에도 용이할 것이다. 실제 PDA에서는 꼭 필요한 내용만을 정리하면 될 것이다. 역시 source는 게시판에 올려 놓을 것이다.
필자는 이 library를 일단 CE용으로 수정하였고 이 글의 성격에 맞추어 몇 가지를 수정하였다. 수정한 부분은 “#if 1 // minus” 로 표시가 되어 있으니 참조하기 바란다.
위의 내용은 필요한 문장을 등록하는 과정이다. 일단 위에 설명한 4개만을 사용한다.
위의 경우는 RMC에서 Parsing을 하는 부분이다. 우리는 RMC에서 시간과 날짜까지 가져오려 하므로
다음 문장으로는 불충분하다.
Time = sentence.Time( 1 );
sentence.Time() 은 시스템 시간에서 날짜를 가져와 Ctime Class 를 생성하게 되어 있으므로 9시간을 더한다든가 하게 되면 문제가 생긴다. 날짜를 모른다면 어쩔 수 없지만 RMC에서는 날짜가 지원되므로 그것을 이용하여 수정하였다.
CE의 가장 큰 특징은 UNICODE라는 것일 것이다. 그래서 문자열에 관하여 특별히 신경을 써야 한다. 문자열 상수에 대해서는 _T()나 L을 붙여주면 된다. 몇 가지 문자열에 관련된 function들의 경우에도 unicode용 function으로 바꾸어 주면 된다.
그러나 아예 지원이 안 되는 경우도 있는데 atof() 가 그런 경우이다. 아래에 간단히 구현을 하였으니 참조하기 바란다.
Time = sentence.Time( 1 );
sentence.Time() 은 시스템 시간에서 날짜를 가져와 Ctime Class 를 생성하게 되어 있으므로 9시간을 더한다든가 하게 되면 문제가 생긴다. 날짜를 모른다면 어쩔 수 없지만 RMC에서는 날짜가 지원되므로 그것을 이용하여 수정하였다.
CE의 가장 큰 특징은 UNICODE라는 것일 것이다. 그래서 문자열에 관하여 특별히 신경을 써야 한다. 문자열 상수에 대해서는 _T()나 L을 붙여주면 된다. 몇 가지 문자열에 관련된 function들의 경우에도 unicode용 function으로 바꾸어 주면 된다.
그러나 아예 지원이 안 되는 경우도 있는데 atof() 가 그런 경우이다. 아래에 간단히 구현을 하였으니 참조하기 바란다.
실제 atof()는 10의 계승형태의 실수도 처리하나 NMEA에서는 그런 형태의 실수가 사용되지 않으므로 생략하였다.
필요한 분은 구현하시길 바란다.
* GPS View – for PDA
이제 본격적인 GPS View에 들어가겠다. 다음은 PPC Emulation에서 실행시킨 화면이다.
이제 본격적인 GPS View에 들어가겠다. 다음은 PPC Emulation에서 실행시킨 화면이다.
COM
Port, NMEA Sentence Viewer, Date & Time, Speed, 진행방향 등이 표시되며 맨 밑의
화면은 천공도이다. 왼쪽의 동심원에는 머리 위에 떠있는 위성의 배치도이며 그 다음 숫자는 위성 번호이다. 그 다음 bar의 색은
천공도의 위성과 일치하며 그 안의 검은 막대는 위성신호의 수신 상태를 나타낸다.
화면이 작아 표시항목을 제한하였다. 독자 분들이 원하는 항목은 다시 수정하기 바란다. 그리고 PPC Emulator와 PDA와는 화면 구성이 맞지 않는다. 위의 예제는 Emulator에 맞게 구성한 것이므로 독자들의 PDA에서 좋게 나오려면 화면 구조를 다시 바꾸어야 할 것이다.
화면이 작아 표시항목을 제한하였다. 독자 분들이 원하는 항목은 다시 수정하기 바란다. 그리고 PPC Emulator와 PDA와는 화면 구성이 맞지 않는다. 위의 예제는 Emulator에 맞게 구성한 것이므로 독자들의 PDA에서 좋게 나오려면 화면 구조를 다시 바꾸어야 할 것이다.
serial 통신부분은 GPS-Emulator에서 사용한 class를 그대로 사용하였다.
다음은 OnInitDialog()의 일부이다.
다음은 OnInitDialog()의 일부이다.
필요한 것은 문장단위로 끊어서 parsing하는 것이다.

CE에서는 unicode를 사용하지만 COM에서 읽어오는 data는 1byte짜리 문자열이다. 그래서 문자열 단위로 직접처리 하였다.
NMEA Library안에도 Cstring 을 많이 쓰고 있는데 이는 PC용을 그냥 사용하기 때문이지만 별로 바람직하지는 않다. 필자의 견해로는 Cstring을 너무 많이 쓰거나 memory를 dynamic하게 많이 쓰는 것은 Memory가 제한된 Embedded System 에서 안정성에 영향을 줄 가능성이 있다. 실제 PDA의 경우도 사용하다 보면 Memory가 항상 부족하기 마련인데 한 Application에서 memory allocation을 자주하면 다른 프로그램은 남은 양에 비해 메모리를 사용할 수가 없게 된다. 원래는 OS에서 처리해서 Memory를 재배치 해야 하지만 아직 CE가 그 정도까지 안정적으로 운영되는 OS는 아닌 것 같다. 상업용 프로그램을 작성할 때는 상당히 신경을 써야 하는 부분이다.
NMEA Library안에도 Cstring 을 많이 쓰고 있는데 이는 PC용을 그냥 사용하기 때문이지만 별로 바람직하지는 않다. 필자의 견해로는 Cstring을 너무 많이 쓰거나 memory를 dynamic하게 많이 쓰는 것은 Memory가 제한된 Embedded System 에서 안정성에 영향을 줄 가능성이 있다. 실제 PDA의 경우도 사용하다 보면 Memory가 항상 부족하기 마련인데 한 Application에서 memory allocation을 자주하면 다른 프로그램은 남은 양에 비해 메모리를 사용할 수가 없게 된다. 원래는 OS에서 처리해서 Memory를 재배치 해야 하지만 아직 CE가 그 정도까지 안정적으로 운영되는 OS는 아닌 것 같다. 상업용 프로그램을 작성할 때는 상당히 신경을 써야 하는 부분이다.
다음은 ProcNMEA()의 내용이다.
이 부분을 수정하면 독자들이 원하는 형태의 GPS View를 만들 수 있을 것이다.




댓글을 달아 주세요