Skip to content

Prajuab Riabroy's Blog

Survey Application – GNSS – UAV – Programing – Python – Dart&Flutter – Rust

Menu
  • Home
  • About Us
  • Survey Application
    • Surveyor Pocket Tools
    • Traverse Pro
    • XSection Plot
    • Geoid Height Pro
    • Spot Fire
    • โปรแกรมงานสำรวจสำหรับเครื่องคิดเลข Casio fx-5800P
    • โปรแกรมงานสำรวจสำหรับเครื่องคิดเลข Casio fx-9860G II SD
  • Download
  • Privacy Policy
Menu

การเขียนโปรแกรมต่อ GPS ด้วยคอมโพเน็นต์ OpenGPSX (ภาค 3)

Posted on 26/09/2010

ทำความเข้าใจเรื่อง Baud rate

  • Blog ที่ผมเขียนเรื่องนี้คงจะมีหลายภาค ตอนนี้ภาค 3 จะมาเริ่มโปรแกรมมิ่งกัน เพื่อนำคอมโพเน็นต์ OpenGPSX มาใช้งาน ก่อนจะไปต่อผมขอพูดเกร็ดเล็กเกร็ดน้อย เกี่ยวกับเรื่อง Baud rate กับ NMEA บางประโยคเช่น $GPGSV การต่อเครื่อง GPS เข้ากับเครื่องคอมพิวเตอร์ผ่านทาง serial port คงจะคุ้นๆเรื่อง Baud rate เดิมทีก่อนหน้านี้ใช้ Baud rate 4800 b/s ก็น่าจะพอ ตัวเลข 4800 หน่วยเป็น bit ถ้าแปลงเป็น byte (เท่ากับ 1 ตัวอักษร) ก็หารด้วย 8 จะได้ 600 ตัวอักษรต่อวินาที
  • สมมติว่าเครื่อง GPS ของเราส่งประโยคของ NMEA มาให้ดังนี้คือ $GPRMC, $GPGSA, $GPGGA, $GPGLL, $GPVTG เท่ากับ 5 ประโยค (ยกเว้นประโยค $GPGSV) จะมีขนาดค่อนข้างคงที่เฉลี่ยแล้วประมาณ 80 ตัวอักษรต่อประโยคซึ่งจะประมาณ 5 x 80 = 400 ตัวอักษร ที่นี้จะเหลือประมาณ 200 ตัวอักษรที่จะเหลือให้ประโยค $GPGSV ซึ่งประโยค GSV จะส่งมาเป็นชุดอาจจะเป็น 2 บรรทัด ถ้าในขณะนั้นเครื่อง GPS รับสัญญาณได้ไม่เกิน 8 ดวง (4 ดวงต่อบรรทัด) แต่ถ้ารับได้มากกว่า 8 ดวงไม่เกิน 12 ดวง จะได้ประโยคนี้ 3 บรรทัด หาขนาดได้คร่าวๆเท่ากับ 3 x 80 = 240 ตัวอักษร
  • ดังนั้นประโยค $GPRMC, $GPGSA, $GPGGA, $GPGLL, $GPVTG ที่รับจากเครื่อง GPS ประมาณ 400 ตัวอักษรรวมกับประโยค $GPGSV 3 บรรทัดเท่ากับ = 400 + 240 = 640 ซึ่งจะเกิน 600 ตัวอักษรต่อวินาที (Baud rate 4800 b/s) ทำให้ข้อมูลจะเกิดการสูญหาย ผมสังเกตว่าประโยค $GPGSV เครื่อง GPS จะส่งมาให้ทุกๆวินาทีไม่เหมือนกับประโยคบางประโยคเช่น $GPBOD, $GPWPL หรือ $GPRTE นานๆจะส่งมาสักครั้ง
  • ดังนั้น Baud rate 4800 b/s ไม่พอเสียแล้วครับ

ปรับ Baud rate เป็น 9800 b/s

  • 9800 b/s หารด้วย 8 จะได้ 1225 ตัวอักษรต่อวินาที
  • เครื่อง GPS มือถือแบบที่เราใช้กันปัจจุบันจะระบุว่ารับได้ 12 channels ก็คือรับดาวเทียม GPS บนท้องฟ้าได้เต็มที่ 12 ดวง แต่ในอนาคตจะมีเครื่องที่สามารถรับได้มากกว่า 12 ดวงให้เห็นกันทั่วไป ผมค้นดูใน internet เห็นยี่ห้อ UBlox ที่รับได้ถึง 16 channels ซึ่งจะมีประโยค GSV เป็นชุดทั้งหมด 4 ประโยคดังนี้

$GPGSV,4,1,14,25,15,175,30,14,80,041,,19,38,259,14,01,52,223,18*76
$GPGSV,4,2,14,18,16,079,,11,19,312,,14,80,041,,21,04,135,25*7D
$GPGSV,4,3,14,15,27,134,18,03,25,222,,22,51,057,16,09,07,036,*79
$GPGSV,4,4,14,07,01,181,,15,25,135,*76

  • ถ้าในอนาคตเป็นเครื่องรับ 24 channels สมมติว่ารับสัญญาณของ GPS บนท้องฟ้าได้เต็มที่ 24 ดวง จะต้องใช้ประโยค $GPGSV ทั้งหมดเท่ากับ 24 = 4 ดวง x 6 บรรทัด  ประมาณขนาดได้ 6 x 80 = 480 ตัวอักษร รวมกับประโยคอื่นๆที่ผมกล่าวไปแล้ว 400 ตัวอักษรเท่ากับ 480 + 400 = 880 ตัวอักษร ดังนั้น baud rate 9800 b/s (1225 ตัวอักษร) ก็น่าจะพอ แต่ถ้าในขณะนั้นประโยคอื่นๆถูกส่งมาด้วยเช่น $GPZDA, $GPBOD, $GPWPL, $GPRTE, $GPGGK อะไรประมาณนี้ขนาด baud rate 9800 b/s ก็ฉิวเฉียดจะเต็ม ดังนั้นในอนาคต baud rate ของ GPS ควรจะอยู่ที่ 19200 b/s

ดาวน์โหลด

  • เฉพาะคอมโพเน็นต์ OpenGPSX ดาวน์โหลดได้ตามลิงค์นี้ OpenGPSX0.3.21.zip
  • โปรแกรมที่จะใช้ทดสอบที่จะเขียนในตอนนี้ ดาวน์โหลดได้ตามลิงค์นี้ OpenGPSProject.zip

ติดตั้งคอมโพเน็นต์ OpenGPSX

  • เมื่อดาวน์โหลด component มาแล้วจำทำการติดตั้งบน Lazarus ถ้าเป็นเครื่องที่ไม่เคยติดตั้ง component “OpenGPSX” มาก่อนหน้าตาจะเป็นดังรูปด้านล่าง
Lazarus ที่ยังไม่ได้ติดตั้ง OpenGPSX
  • unzip โฟลเดอร์คอมโพเน็นต์ที่ดาวน์โหลดมาแล้ว copy ไปไว้ที่โฟลเดอร์ของ Lazarus ตัวอย่างเช่นเครื่องผมอยู่ที่ “c:\lazarus\components\opengpsx”
โฟลเดอร์ของคอมโพเน็นต์ OpenGPSX

Compile & Rebuild

  • คลิกที่เมนู Package > Open package file (.lpk)… เปิดไฟล์ opengpsx.lpk ที่อยู่ในโฟลเดอร์ c:\lazarus\components\opengpsx
เปิดไฟล์ package ของคอมโพเน็นต์ OpenGPSX
  • เปิดไฟล์ opengpsx.lpk
เปิดไฟล์ opengpsx.lpk
  • ทำการ compile และ ติดตั้งคอมโพเน็นต์
ติดตั้งคอมโพเน็นต์
  • เมื่่อติดตั้ง component เสร็จก็พร้อมจะนำมาใช้งาน
Class ต่างๆของ component

ทดสอบคอมโพเน็นต์แบบง่าย

  • จะลอง component อย่างเร็วก่อน ด้วยการคลิกที่ OpenGPSX palette แต่ละ class แล้วมาแปะที่ฟอร์มดังรูปด้านล่าง
ทดสอบอย่างเร็ว
  • จะเห็นหน้าตาของ object แต่ละตัว ซึ่ง TGPSSkyplot, TGPSTarget และ TGPSSignalplot เป็น Visual component ส่วนอีกสองตัวได้แก่ TNMEADecode และ TGPSPortConnected เป็น Non visual component มาลองดูโค้ดที่ Lazarus สร้างขึ้นมาให้จะเห็น unit ที่ถูกเรียกใช้เช่น gpsskyplot, gpstarget, gpssignalplot, nmeadecode และ gpsportconnected
      [sourcecode language=”delphi”]

 

      unit Unit1;

{$mode objfpc}{$H+}

interface

uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, gpsskyplot,
gpstarget, gpssignalplot, nmeadecode, gpsportconnected;

type

{ TForm1 }

TForm1 = class(TForm)
GPSPortConnected1: TGPSPortConnected;
GPSSignalPlot1: TGPSSignalPlot;
GPSSkyPlot1: TGPSSkyPlot;
GPSTarget1: TGPSTarget;
NMEADecode1: TNMEADecode;
private
{ private declarations }
public
{ public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.lfm}

end.

[/sourcecode]

  • ก็ขอจบตอนนี้ก่อนครับ ตอนหน้ามาดูโปรแกรมที่ผมเขียนขึ้นมาเพื่อทดสอบและเรียกใช้ OpenGPSX component กันเป็นเรื่องเป็นราวครับ

Related

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

October 2026
M T W T F S S
 1234
567891011
12131415161718
19202122232425
262728293031  
« Sep    

Blog Stats

There was an issue retrieving stats. Please try again later.

Recent Posts

  • เร็วแรงทะลุนรกกับ POCUT (POint Cloud UTils)
  • อัพเดทแอพ “SurveyStar LDP Thailand” เพื่อรับกับยกร่างมาตรฐาน “TH-LDP”
  • ออกแอพใหม่ SurveyStar Traverse Pro สืบสานงานคำนวณวงรอบ ตอนที่ 2
  • ออกแอพใหม่ SurveyStar Traverse Pro สืบสานงานคำนวณวงรอบ ตอนที่ 1
  • โปรแกรมอรรถประโยชน์ Pocut (POint Cloud Utils)
  • โปรแกรมแปลงไฟล์แคดข้ามระบบพิกัด (Drawing Transformer)
  • มาตรฐานระบบพิกัดแผนที่แบบแอลดีพีของประเทศไทยสำหรับงานวิศวกรรมและการก่อสร้าง (Thailand Low Distortion Map Coordinate System for Engineering and Construction)
  • ประสบการณ์ใช้งาน Kimi K3 Code เขมือบแบบสยอง
  • สร้างแพลตฟอร์มดู Point Cloud บนเว็บด้วย Potree + CesiumJS — เรื่องเล่าจากสนามบินอู่ตะเภา
  • เมื่อวิศวกรสำรวจคำนวณเรื่องน้ำ – วิเคราะห์ระบบระบายน้ำบริเวณ RESA
  • แนะนำหนังสือ “จีออเดซี” ที่ยอดเยี่ยมของดร.พุทธิพล
  • ESPrtk ทำให้ ESP32 ใช้ไม่ได้? วิธีกู้คืน
  • กรณีศึกษา – คืนชีพ SDL30 ปี 2000 ด้วย ESP32 และแอพทำเอง SDL30 Collector
  • DIY RTK Base Station (survey-grade) รุ่น V3.21 ด้วย Raspberry Pi 2B + UM980 เมื่อคุณปู่กลับมาเป็นฮีโร่ ตอนที่ 4
  • รีวิวกูปรี (CoPre2) โปรแกรมประมวลผลไลดาร์จากค่าย CHCNav
  • DIY RTK Base Station (survey-grade) รุ่น V3.2 ด้วย Orange Pi 3 Zero + UM980 ตอนที่ 3
  • DIY RTK Base Station (survey-grade) รุ่น V3 ด้วย Orange Pi 3 Zero + UM980 ตอนที่ 2
  • เส้นทางและไทม์ไลน์ของใบรับรองความรู้ความชำนาญในการประกอบอาชีพวิศวกรรม(สำรวจ)ระดับวิศวกรวิชาชีพ
  • มัดแหนมรวมสามโปรแกรมไปใช้บนสโตร์ Snap ฝั่งลีนุกซ์
  • ปัดฝุ่น Traverse Pro เพิ่มรายละเอียดรายการคำนวณใหม่แบบแนวนอน (Landscape) และธีมมืด
  • DIY RTK Base Station (Survey-Grade) ด้วยชิป UM980 และบอร์ด ESP32 ตอนที่ 1
  • สร้าง NTRIP Caster ด้วย BNC บนคลาวด์แบบ DIY สำหรับ RTK Base Station ใช้ CHCNav P5
  • จับ AI มาไตรกรีฬา สร้างตัวติดตั้ง Snap สำหรับ Surveyor Pocket Tools กับประเด็นแฝงเร้นความเป็นส่วนตัวของผู้ใช้
  • ทดสอบรีด QGIS แบบโหดสัสด้วยชุดข้อมูล Open Building V3 โพลีกอน 74 ล้านหลัง
  • เมื่อ AI เป็นพิษชักจูงผู้ใช้ด้วยข้อมูลผิดๆ

Subscribe to Blog via Email

Enter your email address to subscribe to this blog and receive notifications of new posts by email.

Join 122 other subscribers

Archives

  • October 2026
  • September 2026
  • August 2026
  • July 2026
  • May 2026
  • April 2026
  • March 2026
  • January 2026
  • December 2025
  • November 2025
  • September 2025
  • August 2025
  • July 2025
  • June 2025
  • May 2025
  • January 2025
  • December 2024
  • November 2024
  • October 2024
  • September 2024
  • July 2024
  • May 2024
  • April 2024
  • January 2024
  • November 2023
  • October 2023
  • September 2023
  • July 2023
  • June 2023
  • May 2023
  • March 2023
  • February 2023
  • January 2023
  • November 2022
  • October 2022
  • September 2022
  • July 2022
  • May 2022
  • December 2021
  • October 2021
  • September 2021
  • August 2021
  • May 2021
  • February 2021
  • January 2021
  • December 2020
  • November 2020
  • October 2020
  • September 2020
  • July 2020
  • June 2020
  • May 2020
  • April 2020
  • March 2020
  • February 2020
  • January 2020
  • December 2019
  • November 2019
  • September 2019
  • August 2019
  • July 2019
  • May 2019
  • April 2019
  • March 2019
  • February 2019
  • January 2019
  • November 2018
  • October 2018
  • September 2018
  • August 2018
  • July 2018
  • June 2018
  • May 2018
  • April 2018
  • March 2018
  • January 2018
  • November 2017
  • July 2017
  • June 2017
  • May 2017
  • April 2017
  • March 2017
  • February 2017
  • January 2017
  • December 2016
  • November 2016
  • October 2016
  • August 2016
  • November 2015
  • March 2015
  • August 2014
  • March 2014
  • January 2014
  • December 2013
  • February 2012
  • January 2012
  • November 2011
  • October 2011
  • August 2011
  • April 2011
  • February 2011
  • December 2010
  • November 2010
  • October 2010
  • September 2010
  • June 2010
  • April 2010
  • March 2010
  • January 2010
  • December 2009
  • November 2009
  • October 2009
  • September 2009
  • August 2009

Recent Comments

  • priabroy on ออกแอพใหม่ SurveyStar Traverse Pro สืบสานงานคำนวณวงรอบ ตอนที่ 1
  • Konexana Yomleuangsa on ออกแอพใหม่ SurveyStar Traverse Pro สืบสานงานคำนวณวงรอบ ตอนที่ 1
  • เฟือง เถา on DIY RTK Base Station (survey-grade) รุ่น V3.21 ด้วย Raspberry Pi 2B + UM980 เมื่อคุณปู่กลับมาเป็นฮีโร่ ตอนที่ 4
  • priabroy on DIY RTK Base Station (survey-grade) รุ่น V3.21 ด้วย Raspberry Pi 2B + UM980 เมื่อคุณปู่กลับมาเป็นฮีโร่ ตอนที่ 4
  • ตรันฟองนาม on DIY RTK Base Station (survey-grade) รุ่น V3.21 ด้วย Raspberry Pi 2B + UM980 เมื่อคุณปู่กลับมาเป็นฮีโร่ ตอนที่ 4
©2026 Prajuab Riabroy's Blog | Design: Newspaperly WordPress Theme