一、簡(jiǎn)介
Modbus是一種串行通信協(xié)議,是Modicon公司于1979年為使用可編程邏輯控制器PLC通信而發(fā)表。Modbus是工業(yè)領(lǐng)域通信協(xié)議的業(yè)界標(biāo)準(zhǔn),是工業(yè)電子設(shè)備之間常用的連接方式。Modbus在工業(yè)控制領(lǐng)域通信協(xié)議中被廣泛使用基于以下幾個(gè)特點(diǎn):
- 公開發(fā)表并且無版權(quán)要求;
- 易于部署和維護(hù);
- 對(duì)供應(yīng)商來說,修改移動(dòng)本地的比特或字節(jié)沒有很多限制。
二、Modbus通訊方式
- 以太網(wǎng)上的 TCP/IP ;
- 各種媒體(有線:EIA/TIA-232-E、EIA-422、EIA/TIA-485-A ;光纖、無線等)上的異步串行傳輸;Modbus RTU和Modbus ASCII通訊既是采用該方式;
- Modbus Plus,一種高速令牌傳遞網(wǎng)絡(luò)。
三、協(xié)議描述
Modbus協(xié)議定義了一個(gè)控制器能認(rèn)識(shí)使用的消息結(jié)構(gòu),而不管它們是經(jīng)過何種網(wǎng)絡(luò)進(jìn)行通信的。它描述了一控制器請(qǐng)求訪問其它設(shè)備的過程,如果回應(yīng)來自其它設(shè)備的請(qǐng)求,以及怎樣偵測(cè)錯(cuò)誤并記錄。它制定了消息域格局和內(nèi)容的公共格式。
通過此協(xié)議,控制器相互之間、或控制器經(jīng)由網(wǎng)絡(luò)(如以太網(wǎng))可以和其它設(shè)備之間進(jìn)行通信。Modbus協(xié)議使用的是主從通訊技術(shù),即由主設(shè)備主動(dòng)查詢和操作從設(shè)備。一般將主控設(shè)備方所使用的協(xié)議稱為Modbus Master,從設(shè)備方使用的協(xié)議稱為Modbus Slave。典型的主設(shè)備包括工控機(jī)和工業(yè)控制器等;典型的從設(shè)備如PLC可編程控制器等。Modbus通訊物理接口可以選用串口(包括RS232、RS485和RS422),也可以選擇以太網(wǎng)口。其通信遵循以下的過程:
- 主設(shè)備(客戶機(jī))向從設(shè)備(服務(wù)器)發(fā)送請(qǐng)求;
- 從設(shè)備(服務(wù)器)分析并處理主設(shè)備(客戶機(jī))的請(qǐng)求,然后向主設(shè)備(客戶機(jī))發(fā)送結(jié)果;
- 如果出現(xiàn)任何差錯(cuò),從設(shè)備(服務(wù)器)將返回一個(gè)異常功能碼 。
當(dāng)在一Modbus網(wǎng)絡(luò)上通信時(shí),此協(xié)議決定了每個(gè)控制器須要知道它們的設(shè)備地址,識(shí)別按地址發(fā)來的消息,決定要產(chǎn)生何種行動(dòng)。如果需要回應(yīng),控制器將生成反饋信息并用Modbus協(xié)議發(fā)出。在其它網(wǎng)絡(luò)上,包含了Modbus協(xié)議的消息轉(zhuǎn)換為在此網(wǎng)絡(luò)上使用的幀或包結(jié)構(gòu)。這種轉(zhuǎn)換也擴(kuò)展了根據(jù)具體的網(wǎng)絡(luò)解決節(jié)地址、路由路徑及錯(cuò)誤檢測(cè)的方法。
Modbus的工作方式是請(qǐng)求/應(yīng)答,每次通訊都是主站先發(fā)送指令,可以是廣播,或是向特定從站單播,從站響應(yīng)指令,并按要求應(yīng)答,或者報(bào)告異常;當(dāng)主站不發(fā)送請(qǐng)求時(shí),從站不會(huì)自己發(fā)出數(shù)據(jù),從站和從站之間不能直接通訊。
Modbus協(xié)議能夠應(yīng)用在不同類型的總線或者網(wǎng)絡(luò)。對(duì)應(yīng)不同的總線或網(wǎng)絡(luò),Modbus協(xié)議引入一些附加域映射成應(yīng)用數(shù)據(jù)單元(ADU),即ADU = 附加域 + PDU。例如:
- RS232 / RS485 ADU = 253 字節(jié)+服務(wù)器地址(1 byte) + CRC (2 字節(jié)) = 256 字節(jié) ;
- TCP MODBUS ADU = 249 字節(jié)+ MBAP (7 字節(jié)) = 256 字節(jié) 。
四、數(shù)據(jù)編碼
MODBUS 使用一個(gè)‘big-Endian’ 表示地址和數(shù)據(jù)項(xiàng)。這意味著當(dāng)發(fā)射多個(gè)字節(jié)時(shí),首先發(fā)送最高有效位。 例如:
Register size : 16 - bits |
value: 0x1234 |
the first byte sent is : 0x12 |
then: 0x34 |
五、數(shù)據(jù)模型
MODBUS 以一系列具有不同特征表格上的數(shù)據(jù)模型為基礎(chǔ)。四個(gè)基本表格為:
六、功能碼
有三類Modbus功能碼。分別是:
1.公共功能碼:
- 是較好地被定義的功能碼 ;
- 保證是唯一的;
- MODBUS 組織可改變的 ;
- 公開證明的 ;
- 具有可用的一致性測(cè)試 ;
- MB IETF RFC 中證明的 ;
- 包含已被定義的公共指配功能碼和未來使用的未指配保留供功能碼 。
2.用戶定義功能碼:
- 有兩個(gè)用戶定義功能碼的定義范圍,即 65 至 72 和十進(jìn)制 100 至 110 ;
- 用戶沒有 MODBUS 組織的任何批準(zhǔn)就可以選擇和實(shí)現(xiàn)一個(gè)功能碼 ;
- 不能保證被選功能碼的使用是唯一的 ;
- 如果用戶要重新設(shè)置功能作為一個(gè)公共功能碼,那么用戶必須啟動(dòng) RFC,以便將改變引入公共分類中,并且指配一個(gè)新的公共功能碼 。
3.保留功能碼:
- 一些公司對(duì)傳統(tǒng)產(chǎn)品通常使用的功能碼,并且對(duì)公共使用是無效的功能碼 。
4.公共功能碼定義如下表所示: