通訊協(xié)議
設(shè)備所有操作或回復(fù)命令都為16進(jìn)制數(shù)據(jù)。默認(rèn)通訊波特率:9600,8,n,1。
基本命令格式:
[設(shè)備地址][功能碼][起始地址:2字節(jié)][數(shù)據(jù)長(zhǎng)度:2字節(jié)][CRC16校驗(yàn)]
意義如下:
A、設(shè)備地址:設(shè)備地址范圍為1-35,其中250即0xFA為通用查詢地址,當(dāng)不知道設(shè)備地址時(shí),可用此通用查詢地址進(jìn)行查詢。
B、功能碼:不同的應(yīng)用需求功能碼不同,比如3為查詢輸入寄存器數(shù)據(jù)。
C、起始地址:查詢或操作寄存器起始地址。
D、數(shù)據(jù)長(zhǎng)度:讀取的長(zhǎng)度,比如讀取10個(gè)傳感器的溫度,此值為0x00 0A。
E、CRC校驗(yàn):CRC16校驗(yàn),高位在前,低位在后。
1)讀取數(shù)據(jù)(功能碼為0x03 )
[設(shè)備地址][03][起始地址:2字節(jié)][數(shù)據(jù)長(zhǎng)度:2字節(jié)][CRC16校驗(yàn)]
設(shè)備響應(yīng):
[設(shè)備地址][命令號(hào)][返回的字節(jié)個(gè)數(shù)][數(shù)據(jù)1][數(shù)據(jù)2]...[數(shù)據(jù)n][CRC16校驗(yàn)]
響應(yīng)數(shù)據(jù)意義如下:
A、返回的字節(jié)個(gè)數(shù):表示數(shù)據(jù)的字節(jié)個(gè)數(shù),也就是數(shù)據(jù)1,2...n中的n的值。
B、數(shù)據(jù)1…N:各個(gè)傳感器的測(cè)量值,每個(gè)數(shù)據(jù)占用兩個(gè)字節(jié)。為整型數(shù)據(jù),真實(shí)值為此值除以100。
例如:查詢1號(hào)設(shè)備上6個(gè)傳感器數(shù)據(jù):
發(fā)送:01 03 00 00 00 06 C5 C8
回應(yīng): 01 03 0C 05 46 04 C9 04 D5 04 C2 05 0D 04 C9 01 47
上例回復(fù)數(shù)據(jù)中:01表地址1,0C表數(shù)據(jù)長(zhǎng)度為12個(gè)字節(jié),由于測(cè)點(diǎn)數(shù)據(jù)長(zhǎng)度占兩個(gè)字節(jié),比如第一個(gè)數(shù)據(jù)為05 46, 折成10進(jìn)制即為:1350,因模塊分辨率為0.01,該值需除以100,即實(shí)際值為13.50,同理:04 C9為第2路值,十進(jìn)制數(shù)據(jù)為:1225,濕度值為12.25.
2) 傳感器序列號(hào)識(shí)別操作
對(duì)于傳感器,設(shè)備存儲(chǔ)其序列號(hào)才能識(shí)別和正常檢測(cè)。每個(gè)DS18B20都有唯一的64位識(shí)別序列號(hào),我們提供了3種方法可以快速將一個(gè)或多個(gè)傳感器的序列號(hào)存入到設(shè)備中。
1. 自動(dòng)寫(xiě)入(功能號(hào):0x22,輔助命令號(hào):0x01 )。
當(dāng)未知傳感器序列號(hào)時(shí),可通過(guò)此方法可以自動(dòng)寫(xiě)入序列號(hào)到設(shè)備中。本方法適用于單個(gè)傳感器的序列號(hào)識(shí)別操作。
發(fā)送命令格式:
[設(shè)備地址][命令號(hào):0x02][輔助命令號(hào):0x01][傳感器編號(hào)][00] [04] [CRC16]
意義如下:
A、傳感器編號(hào):值范圍為1-24。
B、00 04 為十六進(jìn)制數(shù)。
如果設(shè)備需要能夠識(shí)別一個(gè)新傳感器,識(shí)別并將其序列號(hào)保存于設(shè)備第1號(hào)位置,則首先確保設(shè)備上只接了這一個(gè)傳感器,然后進(jìn)行如下操作。
上位機(jī)發(fā)送命令:01 22 01 01 00 04 A8 32
設(shè)備回復(fù): 01 22 08 28 F8 4C 87 01 00 00 F1 04 70
其中01 表設(shè)備地址,22表命令功能號(hào),08 表返回的數(shù)據(jù)長(zhǎng)度,"28 F8 4C 87 01 00 00 F1"為該傳感器的序列號(hào),回復(fù)正確的序列號(hào),表明操作成功,若回復(fù)的序列號(hào)為00或FF開(kāi)始,則不成功。
2.手動(dòng)寫(xiě)入(功能號(hào):0x22,輔助命令號(hào):0x0C )
直接遠(yuǎn)程寫(xiě)入64位序列號(hào)即8個(gè)字節(jié)到指定設(shè)備指定編號(hào)位置,本方法適用于已知傳感器序列號(hào)的條件下。
發(fā)送命令格式:
[設(shè)備地址][命令號(hào): 0x22][輔助命令號(hào): 0x0C][傳感器編號(hào)][8字節(jié)序列號(hào)][CRC16]
意義如下:
A、傳感器編號(hào):值范圍為1-24。
B、8字節(jié)序列號(hào),如DS18B20序列號(hào): 28 65 A2 E2 01 00 00 63。
例如需將序列號(hào)28 65 A2 E2 01 00 00 63寫(xiě)入到1號(hào)設(shè)備第1號(hào)位置,則
命令為:01 22 0C 01 28 65 A2 E2 01 00 00 63 62 2F
設(shè)備回復(fù)為:01 22 08 28 65 A2 E2 01 00 00 63 53 41
設(shè)備響應(yīng)格式:
[設(shè)備地址][命令號(hào)][返回的字節(jié)個(gè)數(shù)][ 8字節(jié)序列號(hào)][CRC低8位][CRC高8位]
A、返回的字節(jié)個(gè)數(shù):一般為8,因?yàn)镈S18B20 的64位序列號(hào)為8個(gè)字節(jié)。
B、數(shù)據(jù):8個(gè)字節(jié)的ID號(hào)。
3.自動(dòng)搜索(功能號(hào):0x25,輔助命令號(hào):0x01 )
本方法適用于已接好一個(gè)或多個(gè)傳感器時(shí),將所有傳感器序列號(hào)保存到設(shè)備中。
發(fā)送命令格式:
[設(shè)備地址][命令號(hào): 0x25][輔助命令號(hào): 0x05][01 00 02][CRC16]
說(shuō)明: 01 00 02 為十六進(jìn)制數(shù),為固定值。
比如發(fā)送命令:FA 25 05 01 00 02 89 4B
設(shè)備回復(fù):01 25 01 01 D0 43
設(shè)備響應(yīng)格式:
[設(shè)備地址][命令號(hào)][返回的字節(jié)個(gè)數(shù)][搜索到的傳感器數(shù)][CRC低8位][CRC高8位]
上例中01 01的第2個(gè)01表示設(shè)備搜索到1個(gè)傳感器。此時(shí)通過(guò)查詢命令,可以讀出第一個(gè)傳感器測(cè)量數(shù)據(jù)。
3)讀取傳感器序列號(hào)(功能號(hào):0x23)
發(fā)送命令格式:
[設(shè)備地址][命令號(hào):0x23][通道號(hào)][傳感器編號(hào)][00 08][CRC16]
說(shuō)明:
A、傳感器編號(hào):指定傳感器編號(hào)(值范圍為1-24)
B、00 08 為十六進(jìn)制數(shù),為固定值,因?yàn)閭鞲衅餍蛄刑?hào)為8字節(jié)。
例如發(fā)送命令:01 23 01 01 00 08 95 F7
設(shè)備響應(yīng):01 23 08 28 A9 79 1F 03 00 00 0C
設(shè)備響應(yīng)格式:[設(shè)備地址][命令號(hào)][返回的字節(jié)個(gè)數(shù)][8字節(jié)序列號(hào)][CRC16]
4)更改設(shè)備地址(功能號(hào):0x06輔助命令號(hào):0x0B )
發(fā)送命令格式:
[設(shè)備地址][命令號(hào):0x06][ 輔助命令號(hào):0x0B] [00 00] [目標(biāo)地址:占1個(gè)字節(jié)] [CRC16]
說(shuō)明:
A、目標(biāo)地址:值范圍為1-35,目標(biāo)地址與當(dāng)前地址不能相同。
B、00 00為十六進(jìn)制數(shù),為固定值,不可更改。
比如將設(shè)備地址1,更改為2,則命令為:
01 06 B 00 00 02 A 2F
設(shè)備響應(yīng):02 06 0B 00 00 02 0A 1C
設(shè)備響應(yīng)格式:[設(shè)備地址][命令號(hào)][輔助命令號(hào)][ 00 00] [當(dāng)前地址] [CRC16]
4)查詢?cè)O(shè)備地址(功能號(hào):0x25輔助命令號(hào):0x02 )
若不知道當(dāng)前設(shè)備地址、且總線上只有一個(gè)設(shè)備時(shí),可以通過(guò)此命令查詢當(dāng)前設(shè)備地址。
發(fā)送命令格式:
[設(shè)備地址:0xFA][命令號(hào):0x25][ 輔助命令號(hào):0x02] [00 00 01] [CRC16]
說(shuō)明:
A、設(shè)備地址0xFA為通用設(shè)備查詢地址。
B、00 00 01為十六進(jìn)制數(shù),為固定值,不可更改。
比如查詢當(dāng)前設(shè)備地址,命令為 FA 25 02 00 00 01 99 FE
設(shè)備響應(yīng): 02 25 01 18 11 CD
設(shè)備響應(yīng)格式:[設(shè)備地址][命令號(hào)] [數(shù)據(jù)長(zhǎng)度:1字節(jié)] [隨機(jī)字節(jié):1字節(jié)] [CRC16]
比如:02 25 01 18 11 CD 表明設(shè)備地址為02 。
序號(hào) 名 稱(chēng) 型號(hào) 數(shù)量 備注
1 智能溫度數(shù)據(jù)采集模塊 SM1000B 1臺(tái)
2 單片電源 9V 1A 1只
3 傳感器總線測(cè)試線 1根
4 說(shuō)明書(shū) 及合格證 1份