小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

自控系統(tǒng)的Modbus協(xié)議詳細講解,帶你走進工業(yè)通訊里的精彩世界

 龍之吻6iinxl8c 2019-07-19

一、基礎(chǔ)知識:

1、什么是Modbus

Modbus是由Modicon(現(xiàn)為施耐德電氣公司的一個品牌)在1979年發(fā)明的,是全球第一個真正用于工業(yè)現(xiàn)場的總線協(xié)議。

Modbus通訊協(xié)議常見于第三方設(shè)備的通訊,如DCS讀取PLC的數(shù)據(jù)、智能儀表(流量計、分析儀等設(shè)備)的數(shù)據(jù),需要用到Modbus協(xié)議,通常分為3類,Modbus RTU 和Modbus TCP/IP、Modbus ASCII;

2、主--從結(jié)構(gòu):

主設(shè)備查詢

查詢消息中的功能代碼告之被選中的從設(shè)備要執(zhí)行何種功能。數(shù)據(jù)段包含了從設(shè)備要執(zhí)行功能的任何附加信息。例如功能代碼03是要求從設(shè)備讀保持寄存器并返回它們的內(nèi)容。數(shù)據(jù)段必須包含要告之從設(shè)備的信息:從何寄存器開始讀及要讀的寄存器數(shù)量。錯誤檢測域為從設(shè)備提供了一種驗證消息內(nèi)容是否正確的方法。

從設(shè)備回應(yīng)

如果從設(shè)備產(chǎn)生正常的回應(yīng),在回應(yīng)消息中的功能代碼是在查詢消息中的功能代碼的回應(yīng)。數(shù)據(jù)段包括了從設(shè)備收集的數(shù)據(jù):像寄存器值或狀態(tài)。如果有錯誤發(fā)生,功能代碼將被修改以用于指出回應(yīng)消息是錯誤的,同時數(shù)據(jù)段包含了描述此錯誤信息的代碼。錯誤檢測域允許主設(shè)備確認消息內(nèi)容是否可用。

每個MODBUS幀都包括地址域 功能域 數(shù)據(jù)域 錯誤檢測域

3、Modbus的三種通信協(xié)議:

Modbus協(xié)議分為三種通信方式:Modbus RTU、Modbus ASCII以及Modbus TCP。

首先,Modbus TCP的通信格式和Modbus RTU非常相似,唯一的差別只是Modbus RTU最后帶兩個字節(jié)的CRC校驗,而Modbus TCP沒有。

其次,Modbus ASCII的通信格式與Modbus RTU其實“神合貌離”,就是把Modbus RTU的每一個字節(jié)(例如:27H)高四位(2)和低四位(7)拆分為兩個字節(jié),并以ASCII碼的方式表現(xiàn)出來(32 37),再給命令幀分別加上起始符和結(jié)束符便可以,當(dāng)然Modbus RTU和Modbus ASCII的校驗的方式不同,這里暫不詳述,所以同一條命令用Modbus RTU方式和Modbus ASCII方式表現(xiàn)出來,雖然在命令長度的上有很大的區(qū)別,但其實際表達的意思卻是一樣。

4、RTU方式:

幀定界:MODBUS RTU方式下,每兩個字符之間發(fā)送或者接收的時間間隔不能超過1.5倍 字符傳輸時間。如果兩個字符時間間隔超過了3.5倍的字符傳輸時間,規(guī)約就認為一幀數(shù)據(jù)已經(jīng)接收,新的一幀數(shù)據(jù)傳輸開始。

備注:NPort與MGate產(chǎn)品的區(qū)別就在于,MGate在每幀報文的之后,增加了3.5倍的字符傳輸時間,而NPort則沒有。

5、ASCII方式:

幀定界:

“:”幀起始 “CR LF” 幀結(jié)束

ASCII方式用兩個ASCII字符表示一個8位數(shù)據(jù),比如16進制的3A用字符“3”和字符“A”表示。

6、Modbus TCP

Modbus TCP數(shù)據(jù)幀包含報文頭、功能代碼和數(shù)據(jù)3個部分:

MBAP報文頭(MBAP:Modbus Application Protocol,Modbus應(yīng)用協(xié)議)分4個域,共7個字節(jié):

自注:這里的客戶端、服務(wù)器端是指TCP的Client、Server端。

二、MGate說明:

1、通信模式

1)MGate配置文件中:

Modbus采用主從結(jié)構(gòu),只有兩種模式:Master和Slave

RTU/ASCII Slave:PC作為Master主,裝置作為Slave從;

RTU/ASCII Master:PC作為Slave從,裝置作為Master主;

RTU與ASCII的區(qū)別:

a)校驗:

RTU:CRC(循環(huán)冗長校驗);

ASCII:LRC(縱向冗長校驗);

校驗碼用于檢查信息的完整性;

b)消息格式不同:

RTU:消息中每個字節(jié)(8Bit)包含2個4Bit的十六進制字符,優(yōu)點:同樣波特率下,比ASCII傳送更多的數(shù)據(jù);

ASCII:消息中每個字節(jié)(8Bit)都作為一個ASCII碼(2個十六進制字符)發(fā)生,優(yōu)點:字符發(fā)送的時間間隔可達到1秒而不產(chǎn)生錯誤;

2)說明手冊中:

兩種通信模式:

A)以太網(wǎng)Master串口Slave:

Modbus TCP可支持同時16個連接,串口支持RS-232和RS-422/485,其中RS-232和RS-422僅能連一個設(shè)備,RS-485可連接31個設(shè)備;

B)串口Master以太網(wǎng)Slave:

可支持32個Modbus TCP slave設(shè)備;

三、實測:

1、結(jié)構(gòu):

筆記本電腦網(wǎng)口→MB3480-筆記本→UPort 1150;

2、UPort 1150設(shè)置:

默認為RS-232方式,注意設(shè)置為RS-485(也可為RS-232),方法:

“控制面板”→“設(shè)備管理器”→

3、MB3480的設(shè)置:

1)主從模式的設(shè)定:以PC端作為Master、裝置作為Slave為例;

2)設(shè)置串口狀態(tài):

3)ID映射:

說明:

a)Modbus TCP通信標(biāo)準(zhǔn)端口號為502,所有的端口號都是502,串口通過ID好識別;

b)ID表中設(shè)置情況:

1~5:Port1;

6~10:Port2;

c)從站偏移量:可不設(shè),以下為例子,假定偏移量為3;

4、使用的軟件:

前提說明:

兩套軟件:

軟件一:自己在網(wǎng)上找的Modbus Poll和Modbus Slave,注意:

Modbus Poll:只作為Master(主端)(TCP Master和RTU Master都用它);

Modbus Slave:只作為Slave(從端)(TCP Slave和RTU Slave都用它);

軟件二:使用的ModScan32和ModSim32,注意:

ModScan32:只作為Master(主端)(TCP Master和RTU Master都用它);

ModSim32:只作為Slave(從端)(TCP Slave和RTU Slave都用它);

軟件一:

Modbus Poll(用于TCP Master)

Modbus Slave(用于串口的Slave)

1)打開Modbus Slave:

選擇“Connectiong”

注意:UPort 1150映射為主機的COM2口,使用這里選擇Port2;

ID號:1;功能碼:3

2)打開Modbus Poll:

選擇“Connection”,端口號為502;

ID號:1;功能碼:3;

3)注意事項:

a)Modbus Poll和Modbus Slave設(shè)置的ID號、功能碼必須一致;

b)通信成功的判斷:

可從Modbus Poll軟件本身、MGate Manager的“監(jiān)控”來觀察;

注意:Mdobus Slave軟件無法判斷連接是否成功;

通信成功的界面:

Modbus Poll:Tx值不斷增加,Err值為0(Err指響應(yīng)的返回值);

MGate Manager→“監(jiān)控”:

通信不成功的界面:

比如:將Modbus Slave的連接斷開,則Modbus Poll會報錯:

正確的連接,則Err=0;

MGate Manager→“監(jiān)控”:

圖中:TCP Req、RTU Req(通過MB3480轉(zhuǎn)發(fā)到RTU串口的),沒有Resp。

c)其他功能鍵的使用:

Modbus Poll:

Read/Write Definition:可設(shè)置ID號、功能碼、地址;

Reset Counters:充值計數(shù)器;

其中:地址可自定義,但是Modbus Poll和Modbus Slave的地址設(shè)置都要一致;

Modbus Slave:

Slave Definition:可設(shè)置ID號、功能碼、地址;

軟件二:

ModScan32:用于TCP Master;

ModSim32:用于RTU Slave;

1)打開ModSim32軟件:網(wǎng)上有下載,或留下聯(lián)系郵箱,看都后發(fā)給各位;

打開“ModSim32.exe”即可;

“File”→“New”:

“Connection”→“Port2”→UPort 1150在筆記本上映射的端口號為COM;

2)打開ModScan32軟件:

直接打開目錄,點擊“ModScan32.exe”即可;

“Connection”→“Remote TCP/IP Server”:

3)注意事項:

a)ModScan32和ModSim32的Address(地址)、Device Id(ID號)、MODBUS Point Type(功能碼,為3)設(shè)置必須一致,其中:

ID號:Port1為1~5;

功能碼:為3;

Address:可自己設(shè)定,只要ModScan32和ModSim32的一致就可以了;

b) 連接不成功的界面:

比如:將Address一個設(shè)置為“0001”,另一個設(shè)置為“0100”,則會連接不成功,如下界面:

而ModSim32則不會有報錯信息;

錯誤一:出現(xiàn)“**MODBUS Message TIME-OUT**”,如果正確的連接,則沒有這行報錯;

錯誤二:Number of Polls的值一直在增加,而Valid Slave Responses的值不變,這說明TCP Master一直發(fā)送請求,卻一直沒有得到回應(yīng);

當(dāng)正確連接后,點擊“Reset Ctrs”后,這個計數(shù)值就會清零,重新累計,出現(xiàn)的數(shù)據(jù)應(yīng)該是Number of Polls與Valid Slave Responses一致;

c)當(dāng)修改設(shè)置后,參數(shù)會自動執(zhí)行,不要重啟軟件或按鍵;

d)如果所有設(shè)置都正確,但是連接卻還是報錯,這種情況下,只要將ModScan32和ModSim32軟件重新開啟就可以了,因為這個軟件是沒有經(jīng)過注冊的;

5、監(jiān)控和數(shù)據(jù)報文:

1)一個完整的輪詢過程:

TCP Req(TCP請求)→轉(zhuǎn)為RTU Req(RTU請求)→RTU Resp(RTU回應(yīng))→TCP Resp(TCP回應(yīng));

2)報文內(nèi)容:

MBAP報頭格式:

MBAP包含7個字節(jié):

01 00:處理標(biāo)識ID,取決于設(shè)備的類型,取值一般為0000到FFFF;

00 00:協(xié)議ID,0=Modbus協(xié)議;

00 06:后面跟隨的字節(jié)個數(shù)(包含從設(shè)備ID號),此例:后面跟隨了6個字節(jié);

01:從設(shè)備的ID號;

MBAP:

00 0D:13---后面跟隨13個字節(jié);

6、較深入的報文內(nèi)容:

1)Modbus Poll向多個寄存器發(fā)送數(shù)據(jù)的報文分析:

a)Modbus Poll中的設(shè)置:

雙擊紅框部分,界面:

Value中填入要發(fā)送的數(shù)據(jù),注意:這是十進制,對于“監(jiān)控”中是十六進制;

Slave ID:Port所接從設(shè)備的ID;

Address:這是寄存器地址,第1個是0,第2個是1……;

b)多寄存器報文分析:

監(jiān)控中看到的數(shù)據(jù):

分析:

第一組:

i)TCP Req:TCP發(fā)送請求;

時間 數(shù)據(jù)

0.000 03 36 00 00 00 06 01 03 00 00 00 0A

MBAP解析:

03 36:處理標(biāo)識ID;

00 00:協(xié)議ID,0=Mdobus;

00 06:后面跟隨的字節(jié)個數(shù);

01:從設(shè)備ID;

ii)RTU Req:通過MB3480轉(zhuǎn)換到串口的請求;

時間 數(shù)據(jù)

0.000 01 03 00 00 00 0A C5 CD

01 03是從設(shè)備的站號和設(shè)備ID;

00 00是Modbus起始地址;

00 0A是Modbus寄存器個數(shù) ;

C5 CD是CRC校驗碼;

注意:i)與ii)的起始地址、寄存器個數(shù)是一樣的;ii)在i)的基礎(chǔ)上,去掉了MBAP報頭,并且增加了CRC校驗碼;

iii)RTU Resp:從串口RTU回應(yīng)的數(shù)據(jù);

時間 數(shù)據(jù)

0.090 01 03 14 00 0F 00 10 00 11 00 12 00 00 00 00 00 00 00 00 00 00

一共10個寄存器:

00 0F:表示15;

00 10:表示16;

00 11:表示17;

00 12:表示18;

其余寄存器為00,沒有發(fā)送數(shù)據(jù);

注意:第i)、ii)是請求,沒有具體數(shù)據(jù),只有寄存器起始地址和寄存器個數(shù);

第iii)、iv)開始回應(yīng)數(shù)據(jù);

iv)TCP Resp:通過MB3480轉(zhuǎn)到TCP的回應(yīng)數(shù)據(jù);

時間 數(shù)據(jù)

0.090 03 36 00 00 00 17 01 03 14 00 0F 00 10 00 11 00 12 00 00 00

注意:第iv)的MBAP報頭與i)的報頭是一樣的;

第二組:

與第一組一樣,需要注意的:

MBAP報頭不同;起始地址、寄存器個數(shù),甚至校驗碼都是一樣的;

2)ModScan32向多個寄存器發(fā)送數(shù)據(jù)的報文:

4001:<00000> 第一個寄存器,發(fā)送的數(shù)據(jù)是0;

4001:<00000> 第二個寄存器,發(fā)送的數(shù)據(jù)是0;

……

點擊<00000>,出現(xiàn)界面:

4001寄存器的地址是:1;

4002寄存器的地址是:2;

Value:要發(fā)送的數(shù)據(jù);

3)使用Modbos Poll和Modbus Slave模擬RTU Master:

a)通信結(jié)構(gòu):

RUT串口 → MB3480(192.168.127.254)→ PC(192.168.127.108)

b)MGate Manager:

操作模式:設(shè)置為“RTU主站模式”(RTU Master);

串口狀態(tài)設(shè)置:

從站ID映射的設(shè)置:

注意:當(dāng)Port 1的操作模式設(shè)置為“RTU主站模式”時,從站ID映射列表中就沒有了Port1的從站設(shè)備ID號,為什么?因為這時的Port1是作為Master(發(fā)起端),TCP端是作為響應(yīng)端,這就是Modbus的主從結(jié)構(gòu)。界面如下:

設(shè)置遠程TCP從站IP:“新增”即可。

b)Modbus Poll:

注意:此時連接的是串口端,作為Master(主);

c)Modbus Slave:

注意:此時連接的是TCP端,作為Slave(從);

d)通信成功:

報文分析:

第一組:

0.000 RTU Req ---RTU主動發(fā)起請求;

0.000 TCP Req ---通過MB3480,轉(zhuǎn)發(fā)Req請求;

0.010 TCP Resp ---TCP返回響應(yīng) ;

0.010 RTU Resp ---通過MB3480,轉(zhuǎn)發(fā)RTU響應(yīng);


下篇文章我們將對報文的數(shù)據(jù)解析,感謝你的觀看!

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多