淺談RS-485通訊協(xié)議
RS-485標準只對接口的電氣特性做出規(guī)定,而不涉及接插件、電纜或協(xié)議;因此,用戶需要在RS-485應(yīng)用網(wǎng)絡(luò)的基礎(chǔ)上建立自己的應(yīng)用層通信協(xié)議。
由于RS-485 標準是基于PC 的UART 芯片上的處理方式,因此,其通訊協(xié)議也規(guī)定了串行數(shù)據(jù)單元的格式(8-N-1 格式):1 位邏輯0 的起始位,6/7/8 位數(shù)據(jù)位,1 位可選擇的奇(ODD)/偶(EVEN)校驗位,1/2 位邏輯1 的停止位。
目前,RS-485在國內(nèi)有著非常廣泛的應(yīng)用,許多領(lǐng)域,比如工業(yè)控制、電力通訊、智能樓宇等都經(jīng)??梢砸姷骄哂蠷S-485 接口電路的設(shè)備。但是,這些設(shè)備采用的用戶層協(xié)議(術(shù)語參考自O(shè)SI 的7 層結(jié)構(gòu))都不相同;這些設(shè)備之間并不可以直接連接通訊。比如,很多具有RS-485 接口電路的用戶設(shè)備采用自己制定的簡單通訊協(xié)議,或是直接取自ModBus 協(xié)議(AscII/RTU 模式)中的一部分功能;在電力通訊領(lǐng)域,當前國家現(xiàn)在執(zhí)行的行業(yè)標準中,頒布有按設(shè)備分類的各種通訊規(guī)約,如CDT、SC-1801、u4F、DNP3.0 規(guī)約和1995 年的IEC60870-5-101 傳輸規(guī)約、1997 年的國際101 規(guī)約的國內(nèi)版本DL/T634-1997規(guī)約;在電表應(yīng)用中,國內(nèi)大多數(shù)地區(qū)的廠商采用多功能電能表通訊規(guī)約(DL/T645-1997)。
下面將分別對ModBus 協(xié)議(RTU 模式)、多功能電能表通訊規(guī)約(DL/T645-1997)進行簡單介紹,便于大家對應(yīng)用層通信協(xié)議有一個基本的概念與理解。
一、ModBus 協(xié)議(RTU 模式)
以下介紹了Modbus RTU 協(xié)議的基本構(gòu)成、主要特點、參數(shù)規(guī)定;便于我們理解一個通訊協(xié)議的基本模式與要求。關(guān)于詳細的ModBus 協(xié)議,用戶可以從ModBus-IDA 協(xié)會 (www.modbus.org) 網(wǎng)站下載具體的內(nèi)容。
1.查詢—響應(yīng)周期
ModBus 協(xié)議遵循“查詢—響應(yīng)”模式,如圖 1-23 所示。
(1)查詢:
查詢消息中的功能代碼告之被選中的從設(shè)備要執(zhí)行何種功能。數(shù)據(jù)段包含了從設(shè)備要執(zhí)行功能的任何附加信息。例如功能代碼03 是要求從設(shè)備讀保持寄存器并返回它們的內(nèi)容。數(shù)據(jù)段必須包含要告之從設(shè)備的信息:從何寄存器開始讀及要讀的寄存器數(shù)量。錯誤檢測域為從設(shè)備提供了一種驗證消息內(nèi)容是否正確的方法。
(2)響應(yīng)
如果從設(shè)備產(chǎn)生一正常的響應(yīng),在響應(yīng)消息中的功能代碼是在查詢消息中的功能代碼的響應(yīng)。數(shù)據(jù)段包括了從設(shè)備收集的資料:象寄存器值或狀態(tài)。如果有錯誤發(fā)生,功能代碼將被修改以用于指出響應(yīng)消息是錯誤的,同時數(shù)據(jù)段包含了描述此錯誤信息的代碼。錯誤檢測域允許主設(shè)備確認消息內(nèi)容是否可用。
圖1:ModBus 協(xié)議的“查詢—響應(yīng)”模式
2.RTU 模式
RTU模式的格式:
地址 | 功能代碼 | 數(shù)據(jù)數(shù)量 | 數(shù)據(jù)1 | ... | 數(shù)據(jù)n | CRC高字節(jié) | CRC低字節(jié) |
當控制器設(shè)為在Modbus網(wǎng)絡(luò)上以RTU(遠程終端單元)模式通信,在消息中的每個8Bit字節(jié)包含兩個4Bit的十六進制字符。這種方式的主要優(yōu)點是:在同樣的波特率下,可比ASCII 方式傳送更多的數(shù)據(jù)。
代碼系統(tǒng):
(1)8 位二進制,十六進制數(shù)0...9,A...F
(2)消息中的每個8 位域都是一個兩個十六進制字符組成每個字節(jié)的位:
a. 1 個起始位;
b. 8 個數(shù)據(jù)位,最小的有效位先發(fā)送;
c. 1 個奇偶校驗位,無校驗則無;
d. 1 個停止位(有校驗時),2 個Bit(無校驗時);
(3)錯誤檢測域:CRC(循環(huán)冗長檢測)。
3. RTU 幀
使用RTU 模式,消息發(fā)送至少要以3.5 個字符時間的停頓間隔開始。在網(wǎng)絡(luò)波特率下多樣的字符時間,這是最容易實現(xiàn)的(如圖 1-24 的T1-T2-T3-T4 所示)。傳輸?shù)牡谝粋€域是設(shè)備地址??梢允褂玫膫鬏斪址鞘M制的0...9,A...F。網(wǎng)絡(luò)設(shè)備不斷偵測網(wǎng)絡(luò)總線,包括停頓間隔時間。當?shù)谝粋€域(地址域)接收到,每個設(shè)備都進行譯碼以判斷是否發(fā)往自己的。
在最后一個傳輸字符之后,一個至少3.5 個字符時間的停頓標定了消息的結(jié)束。一個新的消息可在此停頓后開始。
整個消息幀必須作為一連續(xù)的流轉(zhuǎn)輸。如果在幀完成之前有超過1.5 個字符時間的停頓,接收設(shè)備將刷新不完整的消息并假定下一字節(jié)是一個新消息的地址域。同樣地,如果一個新消息在小于3.5 個字符時間內(nèi)開始,接收的設(shè)備將認為它是前一消息的延續(xù)。這將導(dǎo)致一個錯誤,因為在最后的CRC 域的值不可能是正確的。一典型的RTU消息幀如下所示:
起始位 | 設(shè)備地址 | 功能代碼 | 數(shù)據(jù) | CRC校驗 | 結(jié)束符 |
T1-T2-T3-T4 | 8Bit | 8Bit | n個8Bit | 16Bit | T1-T2-T3-T4 |
4. 地址
地址0是用作廣播地址,以使所有的從設(shè)備都能認識。當Modbus協(xié)議用于更高水平的網(wǎng)絡(luò),廣播可能不允許或以其它方式代替。
5. 響應(yīng)
當從設(shè)備響應(yīng)時,它使用功能代碼域來指示是正常響應(yīng)(無誤)還是有某種錯誤發(fā)生(稱作異議響應(yīng))。對正常響應(yīng),從設(shè)備僅響應(yīng)相應(yīng)的功能代碼。對異議響應(yīng),從設(shè)備返回一等同于正常代碼的代碼,但最重要的位置為邏輯1。例如:從一個主設(shè)備發(fā)往從設(shè)備的消息要求讀一組保持寄存器,將產(chǎn)生如下功能代碼:
0 0 0 0 0 0 1 1 (十六進制03H)
對正常響應(yīng),從設(shè)備僅響應(yīng)同樣的功能代碼。對異議響應(yīng),它返回:
1 0 0 0 0 0 1 1 (十六進制83H)
除功能代碼因異議錯誤作了修改外,從設(shè)備將一獨特的代碼放到響應(yīng)消息的數(shù)據(jù)域中,這能告訴主設(shè)備發(fā)生了什么錯誤。
主設(shè)備應(yīng)用程序得到異議響應(yīng)后,典型的處理過程是重發(fā)消息,或者診斷發(fā)自從設(shè)備的消息并報告給操作員。
從主設(shè)備發(fā)給從設(shè)備消息的數(shù)據(jù)域包含附加的信息:從設(shè)備必須用于進行執(zhí)行由功能代碼所定義的行為。這包括了象不連續(xù)的寄存器地址,要處理項的數(shù)目,域中實際數(shù)據(jù)字節(jié)數(shù)。例如,如果主設(shè)備需要從設(shè)備讀取一組保持寄存器(功能代碼03),數(shù)據(jù)域指定了起始寄存器以及要讀的寄存器數(shù)量。如果主設(shè)備寫一組從設(shè)備的寄存器(功能代碼10十六進制),數(shù)據(jù)域則指明了要寫的起始寄存器以及要寫的寄存器數(shù)量,數(shù)據(jù)域的數(shù)據(jù)字節(jié)數(shù),要寫入寄存器的數(shù)據(jù)。
關(guān)于詳細的ModBus 協(xié)議,用戶可以從ModBus-IDA 協(xié)會網(wǎng)站下載具體的協(xié)議內(nèi)容。
二、多功能電能表通訊規(guī)約(DL/T645-1997)
國內(nèi)江蘇、浙江、上海地區(qū)的電表廠商采用多功能電能表通訊規(guī)約(DL/T645-1997)作為電表的遠程控制通訊協(xié)議;這是一個在RS-485 網(wǎng)絡(luò)中實現(xiàn)應(yīng)用的行業(yè)標準。
1.通訊字節(jié)格式
0 | D0 | D1 | D2 | D3 | D4 | D5 | D6 | D7 | P? | 1? |
起始位 0 |
8位數(shù)據(jù)D0~D7 | 偶校驗位 | 停止位1 |
傳送方向從低到高位,一個起始位、一個停止位、一個偶校驗位、8 位數(shù)據(jù)位,總共11位。
2.通訊幀格式
幀起 始符 |
地址域 |
幀起 始符 |
命令碼 |
數(shù)據(jù) 長度 |
數(shù)據(jù)域 | 校驗碼 | 結(jié)束符 |
68H | A0~A5 | 68H | C | L | DATA | CS | 16H |
地址域A0~A5:當?shù)刂肺?99999999999H 時,為廣播地址,同時當從控制器接收到一幀數(shù)據(jù)時,地址域相同時應(yīng)響應(yīng)命令,取得總線控制權(quán),當響應(yīng)命令之后,應(yīng)把總線控制權(quán)歸還給主控器。
命令碼:執(zhí)行操作的依據(jù)。
校驗碼:幀開始各個字節(jié)二進制算術(shù)和,不計溢出值。
前導(dǎo)字節(jié):在發(fā)送信息之前,發(fā)送1 個或多個字節(jié)FEH,以喚醒接收方。
數(shù)據(jù)域:發(fā)送時數(shù)據(jù)加33H,接收時數(shù)據(jù)減33H。
用戶可以在國家標準計量局,或技術(shù)監(jiān)督部門查詢關(guān)于多功能電能表通訊規(guī)約(DL/T645-1997)獲取更多在RS-485 網(wǎng)絡(luò)中實現(xiàn)的通訊規(guī)約的具體內(nèi)容。
來源:雨飛工作室
審核編輯:湯梓紅
評論
查看更多