日本欧美一区-日本欧美一区二区三区片-日本强好片久久久久久AAA-日本-区一区二区三区A片-日本人伦一区二区三区-日本人妻A片成人免费看

電子開發(fā)網(wǎng)

電子開發(fā)網(wǎng)電子設(shè)計 | 電子開發(fā)網(wǎng)Rss 2.0 會員中心 會員注冊
搜索: 您現(xiàn)在的位置: 電子開發(fā)網(wǎng) >> 電子開發(fā) >> PLC基礎(chǔ)及應(yīng)用 >> 正文

電力儀表怎么設(shè)置modbus ,電力-MODBUS_RTU通訊規(guī)約

作者:佚名    文章來源:本站原創(chuàng)    點擊數(shù):    更新時間:2022-04-09
電力-MODBUS_RTU通訊規(guī)約1
目錄:
一、簡介
1、簡介
2、簡單理解MODBUS通信協(xié)議
3、表1與表2名詞解釋
二、通訊信息傳輸過程
1.1 地址碼
1.2 功能碼
1.3 數(shù)據(jù)區(qū)
三、MODBUS功能碼
3.1 功能碼“02”:讀1路或多路開關(guān)量輸入狀態(tài)
3.2 功能碼“01”:讀1路或多路開關(guān)量輸出狀態(tài)
3.3 功能碼“03”:讀多路寄存器輸入
3.4 功能碼“05”:寫1路開關(guān)量輸出(遙控)
3.5 功能碼“06”:寫單路寄存器
3.6 功能碼“10”:寫多路寄存器
3.7 功能碼“03”:讀事件記錄
四、錯誤校驗碼(CRC校驗)
五、通訊錯誤信息及數(shù)據(jù)的處理
-------------------------------------------------------
相關(guān)參考搜索我的百度網(wǎng)盤“Modbus-國家標(biāo)準(zhǔn)-完整版、ModBus_RTU通訊自定義范例和Modbus TCP_IP協(xié)議規(guī)范”。
--------------------------------------------------------------------------------------------------------------
一、簡介
1、簡介
ModBus通訊規(guī)約允許PDM系列儀表/變送器與施耐德、西門子、AB、GE等多個國際著名品牌的可編程順序控制器(PLC)、RTU、SCADA系統(tǒng)、DCS或與第三方具有ModBus兼容的監(jiān)控系統(tǒng)之間進(jìn)行信息交換和數(shù)據(jù)傳送。
PDM系列儀表/變送器只要簡單地增加一套基于計算機(或工控機)的監(jiān)控軟件(如:組態(tài)王、Intouch、FIX、synall等)就可以構(gòu)成一套電力監(jiān)控系統(tǒng)。
①ModBus通訊規(guī)約有兩種數(shù)據(jù)傳送方式:HEX碼和ASCII碼,分別稱為ModBus-RTU和ModBus-ASCII,前者為數(shù)據(jù)傳送,而后者需將數(shù)據(jù)變換為ASCII碼后傳送,因此ModBus-RTU協(xié)議的通訊效率較高,處理簡單,使用得更多。
②ModBus TCP/IP是RTU模式的延伸:基于ModBus以太網(wǎng)
----------------------------
廣泛的系統(tǒng)集成:
PDM系列儀表/變送器提供了標(biāo)準(zhǔn)的RS-485/422通訊接口及ModBus通訊協(xié)議,這個通訊協(xié)議已廣泛被國內(nèi)外電力行業(yè)及工控行業(yè)作為系統(tǒng)集成的標(biāo)準(zhǔn)。
----------------------------
通訊數(shù)據(jù)的類型及格式:
信息傳輸為異步方式,并以字節(jié)為單位。在主站和從站之間傳遞的通訊信息是11位的字格式:
字格式(串行數(shù)據(jù))
11位二進(jìn)制
起始位
1位
數(shù)據(jù)位
8位
奇偶校驗位
1位:有奇偶校驗位/無:無奇偶校驗位
停止位
1位:有奇偶校驗位/2位:無奇偶校驗位
● 通訊數(shù)據(jù)(信息幀)格式
數(shù)據(jù)格式:
地址碼
功能碼
數(shù)據(jù)區(qū)
錯誤校檢
數(shù)據(jù)長度:
1字節(jié)
1字節(jié)
N字節(jié)
16位CRC碼(冗余循環(huán)碼)
★ 注:1)1個字節(jié)由8位二進(jìn)制數(shù)組成(既8 bit)
2)ModBus是Modicon公司的注冊商標(biāo)
3)“從機”在本文件中既為PDM
----------------------------
判斷Modbus一幀數(shù)據(jù)結(jié)束的方法:在RTU方式下,ModBus協(xié)議是根據(jù)3.5個字符時間內(nèi)有沒有接收數(shù)據(jù)來判斷是否接受完成。
串行數(shù)據(jù)一般采用11位的字格式,那么3.5個字符就是3.5*11=38.5位。如果沒有校驗位,采用10位的字格式,那么3.5個字符就是
3.5*10=35位。
波特率是每秒傳輸?shù)亩M(jìn)制位的個數(shù),比如9600bps,即每1秒傳輸9600位,那么傳輸38.5個二進(jìn)制位需要的時間:
38.5/9.6=4.0104167mS,Modbus_RTU要求一幀數(shù)據(jù)起始到結(jié)束至少要不小于3.5個字符時間。
先給定時器定時大概3.5個字符(更大點也可以),然后在串口的接收中斷服務(wù)程序中,先將定時器的計數(shù)寄存器清零,然后重新開
始定時,如果接收的不是最后一個字節(jié),那么在下個字節(jié)來的時候定時器就會又從零開始計數(shù),如果后面再沒有數(shù)據(jù)進(jìn)來的話,定
時器就會因為定時時間到而進(jìn)入定時器中斷,就表示數(shù)據(jù)接收結(jié)束了。
-------------------------------------------------------
2、簡單理解MODBUS通信協(xié)議
對于01 16 1000 1234 ABCD這段代碼的含義說明如下:
向地址 01的控制器1000地址處寫入1234 。
地址域:就是指 從站的地址,比如一個儀表,這個地址就是它的通訊地址;
功能碼:就是你要做的事情,通訊的目的 就是讀寫數(shù)據(jù),所以 ModBus 功能碼雖然很多,但是只有兩個是我們常用的,就是讀和
寫。讀的功能碼是03,寫的功能碼是16。注意,這里的讀寫都是一次性寫16個位,也就是一個WORD(包含數(shù)據(jù)地址與數(shù)據(jù))
功能碼如表2。
----------------------------
表1、ModBus功能碼
功能碼 名稱 作用
1 0x01 讀取線圈狀態(tài) 取得一組邏輯線圈的當(dāng)前狀態(tài)(ON/OFF)
2 0x02 讀取輸入狀態(tài) 取得一組開關(guān)輸入的當(dāng)前狀態(tài)(ON/OFF)
3 0x03 讀取保持寄存器 在一個或多個保持寄存器中取得當(dāng)前的二進(jìn)制值
4 0x04 讀取輸入寄存器 在一個或多個輸入寄存器中取得當(dāng)前的二進(jìn)制值
5 0x05 強置單線圈 強置一個邏輯線圈的通斷狀態(tài)
6 0x06 預(yù)置單寄存器 把具體二進(jìn)值裝入一個保持寄存器
7 0x07 讀取異常狀態(tài) 取得8個內(nèi)部線圈的通斷狀態(tài),這8個線圈的地址由控制器決定,用戶邏輯可以將這些線圈定義,以說明從機狀態(tài),短報文適宜于迅速讀取狀態(tài)。
8 0x08 回送診斷校驗 把診斷校驗報文送從機,以對通信處理進(jìn)行評鑒。
9 0x09 編程(只用于484) 使主機模擬編程器作用,修改PC從機邏輯。
10 0x0A 控詢(只用于484) 可使主機與一臺正在執(zhí)行長程序任務(wù)從機通信,探詢該從機是否已完成其操作任務(wù),僅在含有功能碼9的報文發(fā)送后,本功能碼才發(fā)送。
11 0x0B 讀取事件計數(shù) 可使主機發(fā)出單詢問,并隨即判定操作是否成功,尤其是該命令或其他應(yīng)答產(chǎn)生通信錯誤時。
12 0x0C 讀取通信事件記錄 可是主機檢索每臺從機的ModBus事務(wù)處理通信事件記錄(比如傳送53條報文)。如果某項事務(wù)處理完成,記錄會給出有關(guān)錯誤。
13 0x0D 編程(184/384 484 584) 可使主機模擬編程器功能修改PC從機邏輯
14 0x0E 探詢(184/384 484 584) 可使主機與正在執(zhí)行任務(wù)的從機通信,定期控詢該從機是否已完成其程序操作,僅在含有功能13的報文發(fā)送后,本功能碼才得發(fā)送。
15 0x0F 強置多線圈 強置一串連續(xù)邏輯線圈的通斷。
16 0x10 預(yù)置多寄存器 把具體的二進(jìn)制值裝入一串連續(xù)的保持寄存器。
17 0x11 報告從機標(biāo)識 可使主機判斷編址從機的類型及該從機運行指示燈的狀態(tài)。
18 0x12 (884和MICRO 84) 可使主機模擬編程功能,修改PC狀態(tài)邏輯。
19 0x13 重置通信鏈路 發(fā)生非可修改錯誤后,是從機復(fù)位于已知狀態(tài),可重置順序字節(jié)。
20 0x14 讀取通用參數(shù)(584L) 顯示擴展存儲器文件中的數(shù)據(jù)信息。
21 0x15 寫入通用參數(shù)(584L) 把通用參數(shù)寫入擴展存儲文件,或修改之。
22~64 保留作擴展功能備用
65~72 保留以備用戶功能所用 留作用戶功能的擴展編碼
73~119 非法功能
120~127 保留 留作內(nèi)部作用
128~255 保留 用于異常應(yīng)答
----------------------------
表2、ModBus功能碼與數(shù)據(jù)類型對應(yīng)表
代碼 功能 數(shù)據(jù)類型
1
2
3 整型、字符型狀態(tài)字浮點型
4 整型、狀態(tài)字、浮點型
5
6 整型、字符型、狀態(tài)字、浮點型
8 N/A 重復(fù)“回路反饋”信息
15
16 整型、字符型、狀態(tài)字、浮點型
----------------------------
表3、Modbus寄存器
寄存器種類 說明 PLC類比 舉例說明
離散輸入
狀態(tài)DI
輸入端口。通過外部設(shè)定改變輸入狀態(tài),可讀但不可寫 DI數(shù)字量輸入 面板上的按鍵、開關(guān)狀態(tài),電機的故障狀態(tài)
線圈狀態(tài)DO 輸出端口。可設(shè)定端口的輸出狀態(tài),也可以讀取該位的輸出狀態(tài),可分為兩種不同的執(zhí)行狀態(tài),例如保持型或邊沿觸發(fā)型 DO數(shù)字量
輸出
電磁閥輸出、電機的啟停控制信號、
LED顯示等
保持
寄存器AO
輸出參數(shù)或保持參數(shù),控制器運行時被設(shè)定的某些參數(shù)。
可讀可寫
AO模擬量 模擬量輸出設(shè)定值,PID運行參數(shù)
輸入
寄存器AI
輸入?yún)?shù)。控制器運行時從外部設(shè)備獲得的參數(shù)。
可讀但不可寫
AI模擬量輸入 模擬量輸入
Modbus協(xié)議定義了4種基本數(shù)據(jù)類型:只讀位數(shù)據(jù)DI可讀寫位數(shù)據(jù)DO只讀16位數(shù)據(jù)AI可讀寫16位數(shù)據(jù)AO這些數(shù)據(jù)分別被稱為輸入狀態(tài)線圈狀態(tài)輸入寄存器保持寄存器
DI 數(shù)字輸入,離散輸入,一個地址一個數(shù)據(jù)位,用戶只能讀取它的狀態(tài),不能修改。
比如面板上的按鍵、開關(guān)狀態(tài),電機的故障狀態(tài)
DO 數(shù)字輸出,線圈輸出,一個地址一個數(shù)據(jù)位,用戶可以置位、復(fù)位,可以回讀狀態(tài)。
比如電磁閥輸出,電機的啟停控制信號、LED顯示等
AI 模擬輸入,輸入寄存器,一個地址16位數(shù)據(jù),用戶只能讀,不能修改,比如一個電壓值的讀數(shù)
AO 模擬輸出,保持寄存器,一個地址16位數(shù)據(jù),用戶可以寫,也可以回讀,比如一個控制變頻器的電流值
無論這些東西被叫做什么名字,其內(nèi)容不外乎這幾種,輸入的信號用戶只能看不能改,輸出的信號用戶控制,并可以回讀。離散的
數(shù)據(jù)只有一位,模擬的數(shù)據(jù)有16位。
----------------------------
數(shù)據(jù) 就是我們傳遞的消息,這個對于我們來說才是最終目的。 1000 1234 就是我們傳遞的消息,是我們要告訴從站的內(nèi)容,它又
分兩部分:地址和內(nèi)容。如果把從站比喻成一個大樓地址域就是大樓的門牌號,而數(shù)據(jù)里的地址就是大樓的房間號,換成變頻器也
就是變頻器的參數(shù)地址。所以這段幀 就是這樣理解:告訴01大樓的1000房間,1234 往01變頻器的1000參數(shù)寫1234。差錯校驗:
是為了防止出錯而做的保護(hù),就是雙方約定的各種計算方法,也就是我們在實際應(yīng)用中的偶校驗、奇校驗、停止位等等。 這里的
ABCD 是隨便寫的,沒任何意義。
-------------------------------------------------------
3、表1與表2名詞解釋
1)功能碼含義
讀:
01_DI: 讀內(nèi)部比特量輸出狀態(tài),如告警、變位、故障、異常等。
02_DO:讀外部開關(guān)量輸入狀態(tài),如光耦輸入、繼電器輸入等。
03_AO:讀內(nèi)部輸出量的寄存器,如一些配置參數(shù)、定值的讀取等。
04_AI: 讀外部輸入量的寄存器,如外部電壓電流模擬量,溫濕度等。
功能碼01、02讀到的位滿8個組合成一個字節(jié),可以用功能碼04讀取;線圈可以直接定義成一個位變量或者直接置某變量的某一位
寫:
功能碼05:寫內(nèi)部單個開關(guān)量狀態(tài);如光耦輸出、繼電器輸出等。
功能碼06:寫內(nèi)部單個寄存器的值;如更改配置參數(shù)、定值等。
功能碼15:寫內(nèi)部多個開關(guān)量狀態(tài);如同05。
功能碼16:寫內(nèi)部多個寄存器的值;如同06;對時是寫多個寄存器,用此功能碼。
11:通信超時或錯誤時詢問用
12:詢問從機檢測到的各種故障、異常事件
----------------------------
2)關(guān)于實現(xiàn)
先定義一個變量區(qū)如: uint modbus_data [50],再定義那些保持寄存器和輸入寄存器,如下:
保持寄存器:M30001-M300022 // 存放設(shè)置的參數(shù),用 03讀,16寫
輸入寄存器:M40001-M40028 // 存放實時數(shù)據(jù),如啟動、運行、停止、待機以及錯誤代碼 ,用04讀

#define M30001 modbus_data[0]
#define M30002 modbus_data[1]

…………

#define M30021 modbus_data[20]

#define M30022 modbus_data[21]

#define M40001 modbus_data[22]

#define M40002 modbus_data[23]

…………

#define M400021 modbus_data[48]
#define M400028 modbus_data[49]
參考:www.amobbs.com/thread-3339982-2-1.html
--------------------------------------------------------------------------------------------------------------
二、通訊信息傳輸過程
當(dāng)通訊命令由發(fā)送設(shè)備(主機)發(fā)送至接收設(shè)備(從機)時,符合相應(yīng)地址碼的從機接收通訊命令,并根據(jù)功能碼及相關(guān)要求讀取信息,如果CRC校驗無誤,則執(zhí)行相應(yīng)的任務(wù),然后把執(zhí)行結(jié)果(數(shù)據(jù))返送給主機。返回的信息中包括地址碼、功能碼、執(zhí)行后的數(shù)據(jù)以及CRC校驗碼,如果CRC校驗出錯就不返回任何信息。
1.1 地址碼
地址碼是每次通訊信息幀的第一字節(jié)(8位),從0到255。這個字節(jié)表明由用戶設(shè)置地址的從機將接收由主機發(fā)送來的信息。每個從機都必須有唯一的地址碼,并且只有符合地址碼的從機才能響應(yīng)回送信息。當(dāng)從機回送信息時,回送數(shù)據(jù)均以各自的地址碼開始。主機發(fā)送的地址碼表明將發(fā)送到的從機地址,而從機返回的地址碼表明回送的從機地址。相應(yīng)的地址碼表明該信息來自于何處。
-------------------------------------------------------
1.2 功能碼
功能碼是每次通訊信息幀傳送的第二個字節(jié)。ModBus通訊規(guī)約可定義的功能碼為1到127。PDM系列儀表/變送器僅用到其中的一部分功能碼。作為主機請求發(fā)送,通過功能碼告訴從機應(yīng)執(zhí)行什么動作。作為從機響應(yīng),從機返回的功能碼與從主機發(fā)送來的功能碼一樣,并表明從機已響應(yīng)主機并且已進(jìn)行相關(guān)的操作。
表1 Modbus部分功能碼
功能碼
定 義
操 作(二進(jìn)制)
0x02
讀開關(guān)量輸入
讀取一路或多路開關(guān)量狀態(tài)輸入數(shù)據(jù)
0x01
讀開關(guān)量輸出
讀取一路或多路開關(guān)量輸出狀態(tài)數(shù)據(jù)
0x03
讀寄存器數(shù)據(jù)
讀取一個或多個寄存器的數(shù)據(jù)
0x05
寫開關(guān)量輸出
控制一路繼電器“合/分”輸出
0x06
寫單路寄存器
把一組二進(jìn)制數(shù)據(jù)寫入單個寄存器
0x10
寫多路寄存器
把多組二進(jìn)制數(shù)據(jù)寫入多個寄存器
-------------------------------------------------------
1.3 數(shù)據(jù)區(qū)
數(shù)據(jù)區(qū)包括需要由從機返送何種信息或執(zhí)行什么動作。這些信息可以是數(shù)據(jù)(如:開關(guān)量輸入/輸出、模擬量輸入/輸出、寄存器等等)、參考地址等。例如,主機通過功能碼03告訴從機返回寄存器的值(包含要讀取寄存器的起始地址及讀取寄存器的長度),則返回的數(shù)據(jù)包括寄存器的數(shù)據(jù)長度及數(shù)據(jù)內(nèi)容。對于不同的從機,地址和數(shù)據(jù)信息都不相同(應(yīng)給出通訊信息表)。
PDM 系列儀表/變送器采用Modbus通訊規(guī)約,主機(PLC、RTU、PC機、DCS等)利用通訊命令(功能碼03),可以任意讀取其數(shù)據(jù)寄存器(其數(shù)據(jù)信息表詳見附錄)。PDM系列儀表/變送器的數(shù)據(jù)寄存器存儲的電量多達(dá)幾百個(如:電流、電壓、功率、0~31次諧波分量等),并且都是16位(2字節(jié))的二進(jìn)制數(shù)據(jù),并且高位在前;一次最多可讀取寄存器數(shù)(既各種電量的數(shù)量)是50個。
PDM響應(yīng)的命令格式是從機地址、功能碼、數(shù)據(jù)區(qū)及CRC碼。數(shù)據(jù)區(qū)的數(shù)據(jù)都是兩個字節(jié),并且高位在前(電能量除外)。
注:1PDM-820AC/ACM/ACRPDM-800AC/ACM具有“03”、“06”、“10”功能碼;
2、如果PDM采用MODBUS ASCII通訊協(xié)議,其通訊數(shù)據(jù)格式為;7個數(shù)據(jù)位,1停止位,偶校驗。
--------------------------------------------------------------------------------------------------------------
三、MODBUS功能碼
3.1 功能碼“02:讀1路或多路開關(guān)量輸入狀態(tài)
例如:主機要讀取地址為01,開關(guān)量DI1—DI4的輸入狀態(tài)。讀取告警、變位、故障、異常等。
從機(PDM)數(shù)據(jù)寄存器的地址和數(shù)據(jù)為:
起始位地址
DI寄存器數(shù)據(jù)(16進(jìn)制)
備 注
0000
0B
DI1/DI2/DI4狀態(tài)為“1”,DI3狀態(tài)為
“0”
主機發(fā)送的報文格式為:
主機發(fā)送
字節(jié)數(shù)
發(fā)送的信息
備 注
從機地址
1
01
發(fā)送至地址為01的從機
功能碼
1
02
讀開關(guān)量輸入狀態(tài)
起始BIT位
2
0000
起始BIT位地址為0000
讀數(shù)據(jù)長度
2
0004
讀取4路開關(guān)量輸入狀態(tài)位
CRC碼
2
79C9
由主機計算得到CRC碼
從機(PDM)響應(yīng)返回的報文格式:
從機響應(yīng)
字節(jié)數(shù)
返回的信息
備 注
從機地址
1
01
來自從機01
功能碼
1
02
讀開關(guān)量輸入狀態(tài)
數(shù)據(jù)長度
1
01
1個字節(jié)(8個BIT位)
DI狀態(tài)數(shù)據(jù)
1
0B
DI寄存器內(nèi)容
CRC碼
2
E04F
由從機計算得到CRC碼
-------------------------------------------------------
3.2 功能碼“01:讀1路或多路開關(guān)量輸出狀態(tài)
例如:主機要讀取地址為01,開關(guān)量DO1,DO2的輸出狀態(tài)。讀取電磁閥輸出、電機的啟停控制信LED顯示等
從機(PDM)數(shù)據(jù)寄存器的地址和數(shù)據(jù)為:
起始位地址
DO寄存器數(shù)據(jù)(16進(jìn)制)
備 注
0000
02
DO2輸出狀態(tài)為“1”,DO1輸出狀態(tài)為“0”
主機發(fā)送的報文格式:
主機發(fā)送
字節(jié)數(shù)
發(fā)送的信息
備 注
從機地址
1
01
發(fā)送至地址為01的從機
功能碼
1
01
讀開關(guān)量輸出狀態(tài)
起始BIT位
2
0000
起始BIT位地址為0000
讀數(shù)據(jù)長度
2
0002
讀取2路繼電器輸出狀態(tài)位
CRC碼
2
BDCB
由主機計算得到CRC碼
從機(PDM)響應(yīng)返回的報文格式:
從機響應(yīng)
字節(jié)數(shù)
返回的信息
備 注
從機地址
1
01
來自從機01
功能碼
1
01
讀開關(guān)量輸出狀態(tài)
數(shù)據(jù)長度
1
01
1個字節(jié)(8個BIT位)
DO狀態(tài)數(shù)據(jù)
1
02
DO寄存器內(nèi)容
CRC碼
2
D049
由從機計算得到CRC碼
-------------------------------------------------------
3.3 功能碼“03:讀多路寄存器輸入
例如:主機要讀取地址為01,起始地址為0116的3個從機寄存器數(shù)據(jù)。讀取多路定值,比如模擬量輸出設(shè)定值,PID運行參數(shù)
從機(PDM)數(shù)據(jù)寄存器的地址和數(shù)據(jù)為:
寄存器地址
寄存器數(shù)據(jù)(16進(jìn)制)
對應(yīng)PDM電量
0116
1784
UA
0117
1780
UB
0118
178A
UC
主機發(fā)送的報文格式:
主機發(fā)送
字節(jié)數(shù)
發(fā)送的信息
備 注
從機地址
1
01
發(fā)送至地址為01的從機
功能碼
1
03
讀取寄存器
起始地址
2
0116
起始地址為0116
數(shù)據(jù)長度
3
0003
讀取3個寄存器(共6個字節(jié))
CRC碼
2
E5F3
由主機計算得到CRC碼
從機(PDM)響應(yīng)返回的報文格式:
從機響應(yīng)
字節(jié)數(shù)
返回的信息
備 注
從機地址
1
01
來自從機01
功能碼
1
03
讀取寄存器
讀取字
1
06
3個寄存器共6個字節(jié)
寄存器數(shù)據(jù)1
2
1784
地址為0116內(nèi)存的內(nèi)容
寄存器數(shù)據(jù)2
2
1780
地址為0117內(nèi)存的內(nèi)容
寄存器數(shù)據(jù)3
2
178A
地址為0118內(nèi)存的內(nèi)容
CRC碼
2
5847
由從機計算得到CRC碼
-------------------------------------------------------
3.4 功能碼“05:寫1路開關(guān)量輸出(遙控)
例1:開關(guān)量輸出點DO1,其當(dāng)前狀態(tài)為“分”,主機要控制該路繼電器“合”。強置一個邏輯線圈的通斷狀態(tài)
控制命令為:
“FF00”為控制繼電器“合”;“0000”為控制繼電器“分”;
主機發(fā)送的報文格式:
主機發(fā)送
字節(jié)數(shù)
發(fā)送的信息
備 注
從機地址
1
01
發(fā)送至地址為01的從機
功能碼
1
05
寫開關(guān)量輸出狀態(tài)
輸出BIT位
2
0000
對應(yīng)輸出繼電器BIT位(DO1)
控制命令
2
FF00
控制該路繼電器輸出為“合”狀態(tài)位
CRC碼
2
8C3A
由主機計算得到CRC碼
從機(PDM)響應(yīng)返回的報文格式:
與主機發(fā)送的報文格式及數(shù)據(jù)內(nèi)容完全相同。
例2:開關(guān)量輸出點DO2,其當(dāng)前狀態(tài)為“合”,主機要控制該路繼電器“分”。
主機發(fā)送的報文格式:
主機發(fā)送
字節(jié)數(shù)
發(fā)送的信息
備 注
從機地址
1
01
發(fā)送至地址為01的從機
功能碼
1
05
寫開關(guān)量輸出狀態(tài)
輸出BIT位
2
0001
對應(yīng)輸出繼電器BIT位(DO2)
控制命令
2
0000
控制該路繼電器輸出為“合”狀態(tài)位
CRC碼
2
9C0A
由主機計算得到CRC碼
從機(PDM)響應(yīng)返回的報文格式:與主機發(fā)送的報文格式及數(shù)據(jù)內(nèi)容完全相同。
-------------------------------------------------------
3.5 功能碼“06:寫單路寄存器
例如:主機要把數(shù)據(jù)07D0,保存到地址為002C的從機寄存器中去(從機地址碼為01)。通訊數(shù)據(jù)保存結(jié)束后,地址為002C的PDM表原存儲信息為:
地址
原來存儲數(shù)據(jù)(16進(jìn)制)
002C
04B0
主機發(fā)送的報文格式:
主機發(fā)送
字節(jié)數(shù)
發(fā)送的信息
舉 例
從機地址
1
01
發(fā)送至地址為01的從機
功能碼
1
06
寫單路寄存器
起始地址
2
002C
要寫入的寄存器地址
寫入數(shù)據(jù)
2
07D0
對應(yīng)的新數(shù)據(jù)
CRC碼
2
4BAF
由主機計算得到的CRC碼
從機(PDM)響應(yīng)返回的報文格式: 與主機發(fā)送的報文格式及數(shù)據(jù)內(nèi)容完全相同。
-------------------------------------------------------
3.6 功能碼“10:寫多路寄存器
主機利用這個功能碼把多個數(shù)據(jù)保存到PDM表的數(shù)據(jù)存儲器中去。Modbus通訊規(guī)約中的寄存器指的是16位(即2字節(jié)),并且高位在前。這樣PDM的存儲器都是二個字節(jié)。由于Modbus通訊規(guī)約允許每次最多保存60個寄存器,因此PDM一次也最多允許保存60個數(shù)據(jù)寄存器。比如對時
例如:主機要把0064,0010保存到地址為002C,002D的從機寄存器中去(從機地址碼為01)。通訊數(shù)據(jù)保存結(jié)束后,地址為002C/002D的PDM表內(nèi)存儲信息為:
地址
原來存儲數(shù)據(jù)(16進(jìn)制)
002C
04B0
002D
1388
主機發(fā)送的報文格式:
主機發(fā)送
字節(jié)數(shù)
發(fā)送信息
舉 例
從機地址
1
01
發(fā)送至從機01
功能碼
1
10
寫多路寄存器
起始地址
2
002C
要寫入的寄存器的起始地址
保存數(shù)據(jù)字長度
2
0002
保存數(shù)據(jù)的字長度(共2字)
保存數(shù)據(jù)字節(jié)長
1
04
保存數(shù)據(jù)的字節(jié)長度(共4字節(jié))
保存數(shù)據(jù)1
2
04B0
數(shù)據(jù)地址002C
保存數(shù)據(jù)2
2
1388
數(shù)據(jù)地址002D
CRC碼
2
FC63
由主機計算得到的CRC碼
從機(PDM)響應(yīng)返回的報文格式:
從機響應(yīng)
字節(jié)數(shù)
字節(jié)數(shù)
舉 例
從機地址
1
01
來自從機01
功能碼
1
10
寫多路寄存器
起始地址
2
002C
起始地址為002C
保存數(shù)據(jù)字長度
2
0002
保存2個字長度的數(shù)據(jù)
CRC碼
2
8001
由從機計算得到的CRC碼
-------------------------------------------------------
3.7 功能碼“03”:讀事件記錄
采用功能碼03H向保持寄存器地址0x0001,讀一個字,產(chǎn)生讀一個事件記錄的作用。
主站發(fā)送: 從機地址 功能碼 事件記錄地址H 事件記錄地址L 事件記錄個數(shù)H 事件記錄個數(shù)L CRC碼H CRC碼L 01 03 00 01 00 01 D5 CA 子站響應(yīng): 從機地址 功能碼 字節(jié)數(shù) 事件條目數(shù)H 事件條目數(shù)L 事件代碼H
(事件組號) 事件代碼L
(事件代碼) 動作值
02:合; 01:分 01 03 0C 00 01 04 09 02 毫秒L 毫秒H 分鐘 小時 日 月份 年份 CRC碼H CRC碼L A5 4D 19 12 17 01 07 2F EB

--------------------------------------------------------------------------------------------------------------
四、錯誤校驗碼(CRC校驗)
主機或從機可用校驗碼進(jìn)行判別接收信息是否正確。由于電子噪聲或一些其它干擾,信息在傳輸過程中有時會發(fā)生錯誤,錯誤校驗碼(CRC)可以檢驗主機或從機在通訊數(shù)據(jù)傳送過程中的信息是否有誤,錯誤的數(shù)據(jù)可以放棄(無論是發(fā)送還是接收),這樣增加了系統(tǒng)的安全和效率。
MODBUS通訊協(xié)議的CRC(冗余循環(huán)碼)包含2個字節(jié),即16位二進(jìn)制數(shù)。CRC碼由發(fā)送設(shè)備(主機)計算,放置于發(fā)送信息幀的尾部。接收信息的設(shè)備(從機)再重新計算接收到信息的CRC,比較計算得到的CRC是否與接收到的相符,如果兩者不相符,則表明出錯。
在進(jìn)行CRC計算時只用8個數(shù)據(jù)位,起始位及停止位,如有奇偶校驗位也包括奇偶校驗位,都不參與CRC計算。
● CRC碼的計算方法是:
1.預(yù)置1個16位的寄存器為十六進(jìn)制FFFF(即全為1);稱此寄存器為CRC寄存器;
2.把第一個8位二進(jìn)制數(shù)據(jù)(既通訊信息幀的第一個字節(jié))與16位的CRC寄存器的低8位相異或,把結(jié)果放于CRC寄存器;
3.把CRC寄存器的內(nèi)容右移一位(朝低位)用0填補最高位,并檢查右移后的移出位;
4.如果移出位為0:重復(fù)第3步(再次右移一位);
如果移出位為1:CRC寄存器與多項式A001(1010 0000 0000 0001)進(jìn)行異或;
5.重復(fù)步驟3和4,直到右移8次,這樣整個8位數(shù)據(jù)全部進(jìn)行了處理;
6.重復(fù)步驟2到步驟5,進(jìn)行通訊信息幀下一個字節(jié)的處理;
7.將該通訊信息幀所有字節(jié)按上述步驟計算完成后,得到的16位CRC寄存器的高、低字節(jié)進(jìn)行交換;
8.最后得到的CRC寄存器內(nèi)容即為:CRC碼。
--------------------------------------------------------------------------------------------------------------
五、通訊錯誤信息及數(shù)據(jù)的處理
當(dāng)PDM表檢測到除了CRC碼出錯以外的錯誤時,必須向主機回送信息,功能碼的最高位置為1,即從機返送給主機的功能碼是在主機發(fā)送的功能碼的基礎(chǔ)上加128 。以下的這些代碼表明有意外的錯誤發(fā)生。PDM從主機接收到的信息如有CRC錯誤,則將被PDM表忽略。
PDM返送的錯誤碼的格式如下(CRC碼除外):
地址碼: 1字節(jié)
功能碼: 1字節(jié)(最高位為1)
錯誤碼: 1字節(jié)
CRC碼: 2字節(jié)
PDM響應(yīng)回送如下錯誤碼:
81.非法的功能碼。
接收到的功能碼PDM表不支持。
82.非法的數(shù)據(jù)位置。
指定的數(shù)據(jù)位置超出PDM表的范圍。
83.非法的數(shù)據(jù)值。
接收到主機發(fā)送的數(shù)據(jù)值超出PDM相應(yīng)地址的數(shù)據(jù)范圍。
--------------------------------------------------------------------------------------------------------------
Tags:電力儀表,modbus,設(shè)置  
責(zé)任編輯:admin
  • 上一篇文章:
  • 下一篇文章:
  • 請文明參與討論,禁止漫罵攻擊,不要惡意評論、違禁詞語。 昵稱:
    1分 2分 3分 4分 5分

    還可以輸入 200 個字
    [ 查看全部 ] 網(wǎng)友評論
    推薦文章
    最新推薦
    關(guān)于我們 - 聯(lián)系我們 - 廣告服務(wù) - 友情鏈接 - 網(wǎng)站地圖 - 版權(quán)聲明 - 在線幫助 - 文章列表
    返回頂部
    刷新頁面
    下到頁底
    晶體管查詢