<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 串口通信數據校驗問(wèn)題

串口通信數據校驗問(wèn)題

作者: 時(shí)間:2016-11-18 來(lái)源:網(wǎng)絡(luò ) 收藏
Modbus協(xié)議

Modbus協(xié)議最初由Modicon公司 開(kāi)發(fā)出來(lái),在1979年末該公司成為施耐德自動(dòng)化(Schneider Automation)部門(mén)的一部分,現在Modbus已經(jīng)是工業(yè)領(lǐng)域全球最流行的協(xié)議。此協(xié)議支持傳統的RS-232、RS-422、RS-485以太網(wǎng)設備。許多工業(yè)設備,包括PLC,DCS,智能儀表等都在使用Modbus協(xié)議作為他們之間的通訊標準。有了它,不同廠(chǎng)商生產(chǎn)的控制設備可以連成工業(yè)網(wǎng)絡(luò ),進(jìn)行集中監控。

本文引用地址:http://dyxdggzs.com/article/201611/315957.htm

當在網(wǎng)絡(luò )上通信時(shí),Modbus協(xié)議決定了每個(gè)控制器須要知道它們的設備地址,識別按地址發(fā)來(lái)的消 息,決定要產(chǎn)生何種行動(dòng)。如果需要回應,控制器將生成應答并使用Modbus協(xié)議發(fā)送給詢(xún)問(wèn)方。

Modbus協(xié)議包括ASCII、RTU、TCP等,并沒(méi)有規定物理層。此協(xié)議定義了控制器能夠認識 和使用的消息結構,而不管它們是經(jīng)過(guò)何種網(wǎng)絡(luò )進(jìn)行通信的。標準的Modicon控制器使用RS232C實(shí)現串行的Modbus。Modbus的ASCII、RTU協(xié)議規定了消息、數據的結構、命令和就答的方式,數據通訊采用Maser/Slave方式,Master端發(fā)出數據請求消息,Slave端接收到正確消息后就可以發(fā)送數據到Master端以響應請求;Master端也可以直接發(fā)消息修改Slave端的數據,實(shí)現雙向讀寫(xiě)。

Modbus協(xié)議需要對數據進(jìn)行校驗,串行協(xié)議中除有奇偶校驗外,ASCII模式采用LRC校驗,RTU模 式采用16位CRC校驗,但TCP模式?jīng)]有額外規定校驗,因為T(mén)CP協(xié)議是一個(gè)面向連接的可靠協(xié)議。另外,Modbus采用主從方式定時(shí)收發(fā)數據,在實(shí)際使用中如果 某Slave站點(diǎn)斷開(kāi)后(如故障 或關(guān)機),Master端可以診 斷出來(lái),而當故障修復后,網(wǎng)絡(luò )又可自動(dòng)接通。因此,Modbus協(xié)議的可靠性較好。

下面我來(lái)簡(jiǎn)單的給大家介紹一下,對于Modbus的ASCII、RTU和TCP協(xié)議來(lái)說(shuō),其中TCP和RTU協(xié)議非常類(lèi)似,我們只要把RTU協(xié)議的兩個(gè)字節的校驗碼去掉,然后在RTU協(xié)議的開(kāi)始加上5個(gè)0和一個(gè)6并通過(guò)TCP/IP網(wǎng)絡(luò )協(xié)議發(fā)送出去即可。所以在這里我僅介紹一下Modbus的ASCII和RTU協(xié)議。

下表是ASCII協(xié)議和RTU協(xié)議進(jìn)行的比較:

協(xié)議

開(kāi)始標記

結束標記

校驗

傳輸效率

程序處理

ASCII

:(冒號)

CR,LF

LRC

直觀(guān),簡(jiǎn)單,易調試

RTU

無(wú)

無(wú)

CRC

不直觀(guān),稍復雜

通過(guò)比較可以看到,ASCII協(xié)議和RTU協(xié)議相比擁有開(kāi)始和結束標記,因此在進(jìn)行程序處理時(shí)能更加方便,而且由于傳輸的都是可見(jiàn)的ASCII字符,所以進(jìn)行調試時(shí)就更加的直觀(guān),另外它的LRC校驗也比較容易。但是因為它傳輸的都是可見(jiàn)的ASCII字符,RTU傳輸的數據每一個(gè)字節ASCII都 要用兩個(gè)字節來(lái)傳輸,比如RTU傳輸一個(gè)十六進(jìn)制數0xF9,ASCII就需要傳輸’F’’9’的ASCII碼0x39和0x46兩個(gè)字節,這樣它的傳輸的效率就比較低。所以一般來(lái)說(shuō),如果所需要傳 輸的數據量較小可以考慮使用ASCII協(xié)議,如果所 需傳輸的數據量比較大,最好能使用RTU協(xié)議。

下面對兩種協(xié)議的校驗進(jìn)行一下介紹。

1、LRC校驗

LRC域是一個(gè)包含一個(gè)8位二進(jìn)制值的 字節。LRC值由傳輸設備來(lái)計算并放到消息幀中,接 收設備在接收消息的過(guò)程中計算LRC,并將它和接收 到消息中LRC域中的值比較,如果兩值不等,說(shuō)明有 錯誤。

LRC校驗比較簡(jiǎn)單,它在A(yíng)SCII協(xié)議中使 用,檢測了消息域中除開(kāi)始的冒號及結束的回車(chē)換行號外的內容。它僅僅是把每一個(gè)需要傳輸的數據按字節疊加后取反加1即可。下面是它的VC代碼:

BYTE GetCheckCode(const char * pSendBuf, int nEnd)//獲得校驗碼

{

BYTE byLrc = 0;

char pBuf[4];

int nData = 0;

for(i=1; i

{

// 每?jì)蓚€(gè)需要發(fā)送的ASCII碼轉化為一個(gè)十六進(jìn)制數

pBuf [0] = pSendBuf [i];

pBuf [1] = pSendBuf [i+1];

pBuf [2] = 国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放

<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>