NMEA協議 上位機 c

2022-07-04 02:03:13 字數 3320 閱讀 8273

前些時間寫做了兩款用nmea協議的上位機,在這裡做乙個總結和記錄。和大家分享,也為了以後不會忘記。

nmea協議總體來說,相對簡單,是氣象上比較成熟的協議。

主要有以下幾個引數及其格式:

風速和風向;

空氣溫度;

土壤溫度;

濕度;

大氣壓;

注:其中效驗部分主要採用的 異或效驗:即從$後第乙個字元到』*』前乙個字元進行異或。所得到的資料高4位,低4位的ascii碼。

: 『\r』

: 『\n』

波特率:4800

重新整理頻率:1hz

在上位機的設計中,所有的接收方式都是被動的。所以處理上非常好做,只需要讀取特定的資料位就可以,將其轉為資料即可。

由於每一段資料都是以』\n』結尾,所以串列埠中斷serialportx_datareceived()中直接採用serialportx.readline()讀取資料就可以了。讀取後根據協議分析其資料就可以了。以下是我的**:

1

using 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...