前些時間寫做了兩款用nmea協議的上位機,在這裡做乙個總結和記錄。和大家分享,也為了以後不會忘記。
nmea協議總體來說,相對簡單,是氣象上比較成熟的協議。
主要有以下幾個引數及其格式:
風速和風向;
空氣溫度;
土壤溫度;
濕度;
大氣壓;
注:其中效驗部分主要採用的 異或效驗:即從$後第乙個字元到』*』前乙個字元進行異或。所得到的資料高4位,低4位的ascii碼。
: 『\r』
: 『\n』
波特率:4800
重新整理頻率:1hz
在上位機的設計中,所有的接收方式都是被動的。所以處理上非常好做,只需要讀取特定的資料位就可以,將其轉為資料即可。
由於每一段資料都是以』\n』結尾,所以串列埠中斷serialportx_datareceived()中直接採用serialportx.readline()讀取資料就可以了。讀取後根據協議分析其資料就可以了。以下是我的**:
1using system;
2using system.collections.generic;
3using system.linq;
4using system.text;56
namespace 氣象監控_nmea
7 33
set34
37 }
3839
public
float getdirection
40
45set
46
49 }
5051
public
bool getstatus
52
57set
58
61 }
6263
public
float getairtemp
64
69set
70
73 }
7475
public
float getsoiltemp
76
81set
82
85 }
8687
public
float gethumidity
88
93set
94
97 }
9899
public
float getbarometer
100
105set
106
109 }
110#endregion
111112
#region 子函式
113///
114///
數字轉ascii
115///
116///
單個位整數
117///
ascii
118public
byte integer2char(int integer)
119
125else
if ((integer >= 0x0a) && (integer <= 0x0f))
126
129return lcv_ch;
130 }
131132
#endregion
133134
///135
///sum效驗
136///
137///
效驗陣列
138///
效驗值,字元被拆分為兩個ascii碼整和為乙個int,高位在int高8位,低後
139public
int checksum(byte array)
140
148149
if (i != max_length)
150 res = (integer2char((sum >> 4)) << 8) | integer2char(sum & 0xf);
151return res;
152 }
153154
///155
///從接收到的字串中,取出有用資料
156///
157///
接收到的字串
158public
void dataprocess(string str)
159 ;
161string strarray = str.split(chsplit);
162switch (strarray[0])
163
189 }
190191
///192
///接收到的資料正確性判斷
193///
194///
接收到的字串
195///
效驗正常返回true
196public
bool receivecheck(string str)
197 ;
200string strarray = str.split(chsplit);
201if (strarray.length == 2)
202
213 }
214 }
215 }
216return res;
217 }
218 }
219 }
標準NMEA協議
致物模組支援標準協議nmea 0183,下表是對nmea 0183協議結構的說明。表 1 nema結構表 名稱長度 描述 1 語句開始標誌 talker id 1 2gps nmea標示 nmea message id 3 語句標示 data field 依據實際資料 報文內容 1報文內容的結束標誌...
c 上位機開發3
從.net framework 2.0開始,c 提供了serialport類用於實現串列埠控制。命名空間 system.io.ports。其中詳細成員介紹參看msdn文件。下面介紹其常用的字段 方法和事件。1.常用字段 名稱說明 portname 獲取或設定通訊埠 baudrate 獲取或設定序列波...
C 上位機簡單使用
寫的比較簡單 破解時間限制的補丁 提取碼1123 如下 示例 opcserver objserver opcgroups objgroups opcgroup objgroup opcitems objitems array stritemids array lclienthandles array...