基于MODBUS總線高壓軟起動(dòng)裝置液晶顯示界面的設(shè)計(jì)
2:對(duì)以上測(cè)試碼分別進(jìn)行說明:
(1):召喚發(fā)送,參數(shù)設(shè)置功能:即控制器(DSP)與液晶屏(430)之間的通訊,是雙向的。
00 06
00 00 00 0C 1E 88
以上這段代碼是DSP傳給430的召喚代碼,含義(代碼從左到右)是:00:設(shè)備代碼。本系統(tǒng)中從設(shè)備只有高壓軟起動(dòng)裝置液晶操控板一個(gè)設(shè)備,故設(shè)備代碼設(shè)置為00。06:功能碼,實(shí)現(xiàn)何種功能(本例中,06是雙向召喚發(fā)送功能,實(shí)現(xiàn)參數(shù)設(shè)置;03功能碼實(shí)現(xiàn)電壓、電流監(jiān)測(cè)功能;02功能碼實(shí)現(xiàn)故障顯示功能)。00 00:是起始地址的高八位、低八位。00 0C:是DSP要求430回傳字節(jié)的個(gè)數(shù)(不包括設(shè)備代碼、功能碼、數(shù)據(jù)個(gè)數(shù)代碼、和校驗(yàn)代碼),00是個(gè)數(shù)的高八位、0C是個(gè)數(shù)的低八位,0C是十六進(jìn)制(轉(zhuǎn)換成十進(jìn)制是12,12是從“起動(dòng)時(shí)間、額定電流——備用 3”的個(gè)數(shù)),1E 88:是CRC校驗(yàn)碼。當(dāng)DSP給430傳
整個(gè)消息幀必須作為一連續(xù)的流轉(zhuǎn)輸。如果在幀完成之前有超過1.5個(gè)字符時(shí)間的停頓時(shí)間,接收設(shè)備將刷新不完整的消息并假定下一字節(jié)是一個(gè)新消息的地址域。同樣地,如果一個(gè)新消息在小于3.5個(gè)字符時(shí)間內(nèi)接著前個(gè)消息開始,接收的設(shè)備將認(rèn)為它是前一消息的延續(xù)。這將導(dǎo)致一個(gè)錯(cuò)誤,因?yàn)樵谧詈蟮腃RC域的值不可能是正確的。所以在通訊端口初始化時(shí),Timer1定時(shí)間隔設(shè)置為500ms。
2.4 MODBUS的CRC校驗(yàn)原理
CRC校驗(yàn)實(shí)現(xiàn) MODBUS通信的RTU模式中,規(guī)定信息幀的最后兩個(gè)字節(jié)用于傳遞CRC(Cyclic Redundancy Check,循環(huán)冗余校驗(yàn))碼。發(fā)送方將信息幀中地址域、功能碼、數(shù)據(jù)域的所有字節(jié)按規(guī)定的方式進(jìn)行位移并進(jìn)行XOR(異或)計(jì)算,即可得到2字節(jié)的CRC碼,并把包含CRC校驗(yàn)碼的信息幀作為一連續(xù)的流進(jìn)行傳輸。接收方在收到該信息幀時(shí)按同樣的方式進(jìn)行計(jì)算,并將結(jié)果同收到的CRC碼的雙字節(jié)比較,如果一致就認(rèn)為通信正確,否則認(rèn)為通信有誤,從站將發(fā)送CRC錯(cuò)誤應(yīng)答。 RTU模式一般采用CRC-16冗余校驗(yàn)方法,CRC-16的校驗(yàn)碼為16位(2字節(jié)),其中低字節(jié)在前,高字節(jié)在后。實(shí)現(xiàn)CRC校驗(yàn)有兩種方法:根據(jù)CRC校驗(yàn)的定義公式進(jìn)行計(jì)算,或者在程序中建立CRC校驗(yàn)值表。在程序中使用前者更容易實(shí)現(xiàn),這里需要使用CRC生成多項(xiàng)式X16+X15+X2+1。該多項(xiàng)式對(duì)應(yīng)的碼組系數(shù)為18005H(16進(jìn)制),去除最高位,對(duì)應(yīng)的16位余數(shù)為8005H,即為CRC-16常數(shù)。CRC-16校驗(yàn)過程如下:將CRC寄存器的每一位預(yù)置為1;把該寄存器值與8bit的信息幀數(shù)據(jù)進(jìn)行異或,結(jié)果存于該寄存器;對(duì)CRC寄存器從高到低進(jìn)行移位,在最高位(MSB)的位置補(bǔ)零,而最低位(LSB,移位后已經(jīng)被移出CRC寄存器)如果為1,則把寄存器與CRC-16常數(shù)進(jìn)行異或,否則如果LSB為零,則無需進(jìn)行異或。重復(fù)上述的由高至低的移位8次,第一個(gè)8bit數(shù)據(jù)處理完畢,用此時(shí)寄存器的值與下一個(gè)8bit數(shù)據(jù)異或并進(jìn)行如前一樣的8次移位。所有的字符處理完成后CRC寄存器內(nèi)的值即為最終的CRC值。CRC添加到消息中時(shí),先加入低字節(jié),然后高字節(jié)。RTU模式的傳輸格式是1個(gè)數(shù)據(jù)位,2個(gè)停止位,沒有奇偶校驗(yàn)位。通信數(shù)據(jù)安全由控制參數(shù)CRC-16碼保證。RTU接收設(shè)備依靠接收字符間經(jīng)過的時(shí)間判斷一幀的開始,如果經(jīng)過3個(gè)半的字符時(shí)間后仍然沒有新的字符或者沒有完成幀,接收設(shè)備就會(huì)放棄該幀,并設(shè)下一個(gè)字符為新一幀的開始,應(yīng)用程序中,MODBUS協(xié)議通信由通訊子模塊實(shí)現(xiàn),包含CRC-16計(jì)算與驗(yàn)證、信息幀的編制和分解。
3 MODBUS通訊應(yīng)用
下面是基于單片機(jī)MSP430F149為主芯片的高壓軟起動(dòng)裝置液晶操控板,以此為例來說明MODBUS通訊的應(yīng)用。MODBUS通訊主設(shè)備是DSP控制器,從設(shè)備是高壓軟起動(dòng)裝置液晶操控板。
3.1 液晶操控板MODBUS通訊測(cè)試碼
/*****************************MODBUS通訊測(cè)試碼*****************************
召喚發(fā)送:
00 06
00 00 00 0C 1E 88
電壓、電流監(jiān)測(cè)功能:
00 03
1C 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0D 8D
故障顯示功能:
00 02
18 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 20 34
*****************************MODBUS通訊測(cè)試碼*****************************/
2:對(duì)以上測(cè)試碼分別進(jìn)行說明:
(1):召喚發(fā)送,參數(shù)設(shè)置功能:即控制器(DSP)與液晶屏(430)之間的通訊,是雙向的。
00 06
00 00 00 0C 1E 88
以上這段代碼是DSP傳給430的召喚代碼,含義(代碼從左到右)是:00:設(shè)備代碼。本系統(tǒng)中從設(shè)備只有高壓軟起動(dòng)裝置液晶操控板一個(gè)設(shè)備,故設(shè)備代碼設(shè)置為00。06:功能碼,實(shí)現(xiàn)何種功能(本例中,06是雙向召喚發(fā)送功能,實(shí)現(xiàn)參數(shù)設(shè)置;03功能碼實(shí)現(xiàn)電壓、電流監(jiān)測(cè)功能;02功能碼實(shí)現(xiàn)故障顯示功能)。00 00:是起始地址的高八位、低八位。00 0C:是DSP要求430回傳字節(jié)的個(gè)數(shù)(不包括設(shè)備代碼、功能碼、數(shù)據(jù)個(gè)數(shù)代碼、和校驗(yàn)代碼),00是個(gè)數(shù)的高八位、0C是個(gè)數(shù)的低八位,0C是十六進(jìn)制(轉(zhuǎn)換成十進(jìn)制是12,12是從“起動(dòng)時(shí)間、額定電流——備用 3”的個(gè)數(shù)),1E 88:是CRC校驗(yàn)碼。當(dāng)DSP給430傳
00 06
00 00 00 0C 1E 88
代碼時(shí),430先將這8個(gè)字節(jié)保存到一個(gè)臨時(shí)數(shù)組RX[]中,然后分別對(duì)這8個(gè)字節(jié)進(jìn)行判斷(1E 88是校驗(yàn)查表得出來的代碼),如果檢驗(yàn)正確,就會(huì)把要回傳給DSP的字節(jié)放到can_s[]數(shù)組中發(fā)出去,發(fā)送到DSP。以下代碼就是430接到
00 06
00 00 00 0C 1E 88
判斷正確后,回傳給DSP的代碼。00 06:是設(shè)備代碼、功能碼。18:回傳的字節(jié)個(gè)數(shù)(十六進(jìn)制18就是十進(jìn)制24)。B6 8F是回傳的校驗(yàn)代碼。中間的24個(gè)字節(jié)(00),每?jī)蓚€(gè)字節(jié)(00)分別對(duì)應(yīng)“起動(dòng)時(shí)間、額定電流——備用 3”,之所以全是00 ,是因?yàn)闆]有設(shè)置參數(shù),在液晶屏上設(shè)置參數(shù),相應(yīng)的高低位也跟著變化。
00 06
18 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 B6 8F
(2):電壓、電流監(jiān)測(cè)功能:
00 03
1C 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 0D 8D
同理00 03 1C是設(shè)備地址、功能碼、DSP傳給430的數(shù)據(jù)個(gè)數(shù)(1C是十六進(jìn)制,轉(zhuǎn)為十進(jìn)制是28,包括1C在內(nèi),不包括00 03 0D 8D)。當(dāng)430接收到
00 03
1C 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0D 8D
時(shí),會(huì)將接收到的字節(jié)分別存到可用數(shù)組里,在利用可用數(shù)組進(jìn)行顯示。
DSP下傳:
00(設(shè)備代碼)03(功能碼)1C(個(gè)數(shù)14*2) 00H(電壓高位)00L(電壓低位)
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
00H(備用12高位)00L(備用12低位)CRCH(高位)CRCL(低位)
(3):故障顯示功能:
00 02
18 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01
01 01 01 20 34
同理00 02 18是設(shè)備地址、功能碼、DSP傳給430的數(shù)據(jù)個(gè)數(shù)(18是十六進(jìn)制,轉(zhuǎn)為十進(jìn)制是24,包括18算內(nèi),不包括00 02 20 34)。當(dāng)430接收到
00 02
18 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 20 34
時(shí),會(huì)將接收到的字節(jié)分別存到可用數(shù)組里,在利用可用數(shù)組進(jìn)行顯示。
DSP下傳:
00(設(shè)備代碼)02(功能碼)18(個(gè)數(shù)) 00(啟動(dòng)中)。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。00(三相不平衡)CRCH(高位)CRCL(低位)
高壓軟起動(dòng)裝置液晶操控板
高壓軟起動(dòng)裝置液晶操控板
結(jié)語(yǔ)
由于MODBUS串行通訊技術(shù)有著實(shí)現(xiàn)簡(jiǎn)便、系統(tǒng)集成費(fèi)用低以及通訊距離遠(yuǎn)(RS485/422)等特點(diǎn),所以,在各個(gè)行業(yè)的應(yīng)用也都很廣泛。MODBUS通訊在現(xiàn)場(chǎng)給調(diào)試人員及編程人員也帶來很大方便。因此,伴隨著多種通訊方式可以融合并存的發(fā)展趨勢(shì),MODBUS串行通訊技術(shù)仍會(huì)保持廣泛的應(yīng)用前景。
評(píng)論