本設(shè)計(jì)限制可使用的地址為1。247,其它地址保留。智能開(kāi)關(guān)柜操控裝置(從機(jī))可以利用按鍵修改儀表地址,也可以通過(guò)主機(jī)修改特定從機(jī)的儀表地址。
1.3.2功能碼
功能碼表示主機(jī)本次通訊要求從機(jī)執(zhí)行的動(dòng)作,功能碼占1個(gè)字節(jié),表2列出了儀表支持的Modbus協(xié)議規(guī)定的標(biāo)準(zhǔn)功能碼及其定義和具體操作。
一般Modbus協(xié)議規(guī)定讀取內(nèi)部數(shù)字量保持寄存器和外部輸入數(shù)字量寄存器采用不同的功能碼,分別為01H和02H,讀取內(nèi)部模擬量保持寄存器和外部模擬量寄存器亦采用不同的功能碼,分別為03H和04H14j。對(duì)于相關(guān)系統(tǒng)和設(shè)備的調(diào)研表明,傳統(tǒng)協(xié)議區(qū)分內(nèi)部量和外部量的做法完傘不適合于智能配電系統(tǒng)。因此本儀表采用兼容設(shè)計(jì)方案,不區(qū)分內(nèi)部模擬量和外部模擬量,功能碼03H和04H通用。同時(shí),為了提高數(shù)據(jù)傳輸效率,本協(xié)議把每16位二進(jìn)制開(kāi)關(guān)輸入量組織成為一個(gè)字寄存器,并使之與模擬量或系統(tǒng)參數(shù)的讀取采用相同的功能碼。
即功能碼03H或04H為讀寄存器,此功能允許主機(jī)獲得儀表采集的模擬量數(shù)據(jù)、開(kāi)關(guān)量數(shù)據(jù)以及系統(tǒng)參數(shù)。讀寄存器個(gè)數(shù)不能超出允許地址范圍。Modbus通訊規(guī)約允許主機(jī)一次請(qǐng)求的最大寄存器個(gè)數(shù)為60個(gè)。
功能碼10H為寫(xiě)寄存器,主機(jī)利用此功能將數(shù)據(jù)(或系統(tǒng)參數(shù))保存到儀表的寄存器。要求寫(xiě)入的寄存器必須可寫(xiě),個(gè)數(shù)不能超出允許地址范圍。Modbus通訊規(guī)約允許一次最多保存60+寄存器。同樣,開(kāi)關(guān)量輸出、模擬量輸出和系統(tǒng)參數(shù)的保存均采用相同的功能碼,但每個(gè)開(kāi)關(guān)量寄存器只控制一個(gè)開(kāi)關(guān)設(shè)備以提高遙控可靠性。
1.3.3數(shù)據(jù)區(qū).
數(shù)據(jù)區(qū)隨功能碼不同而不同。功能碼03H/04H(讀寄存器)的主機(jī)命令數(shù)據(jù)區(qū)包含要讀取寄存器的起始地址(2個(gè)字節(jié))及讀取長(zhǎng)度(2個(gè)字節(jié)),從機(jī)應(yīng)答數(shù)據(jù)區(qū)包含數(shù)據(jù)字節(jié)量(1個(gè)字
節(jié))以及數(shù)據(jù)列表。
功能碼10H(寫(xiě)寄存器)的主機(jī)命令數(shù)據(jù)區(qū)包含要寫(xiě)入寄存器的起始地址(2個(gè)字節(jié))、寫(xiě)入長(zhǎng)度(2個(gè)字節(jié))以及寫(xiě)入數(shù)據(jù)列表,從機(jī)應(yīng)答數(shù)據(jù)區(qū)包含寫(xiě)入寄存器的起始地址以及寫(xiě)入長(zhǎng)度。
1.3.4校驗(yàn)碼
校驗(yàn)碼用于主機(jī)或從機(jī)判斷接收到的數(shù)據(jù)是否出錯(cuò),使系統(tǒng)通訊更可靠。Modbus—RTU協(xié)議采用CRC一16(16位循環(huán)冗余校驗(yàn)碼)校驗(yàn)方法,包含16位二進(jìn)制。CRC校驗(yàn)碼由發(fā)送端計(jì)算,放置于發(fā)送信息的尾部。接收端重新計(jì)算接收到的信息的校驗(yàn)碼,并與接收到的校驗(yàn)碼相比較,如果二者不相符,則表明通訊出錯(cuò)。
CRC一16校驗(yàn)碼的計(jì)算方法:
(1)預(yù)置16位寄存器全為1,即寄存器CRC=0FFFFH;
(2)把8位數(shù)據(jù)信息與CRC碼的低8位數(shù)據(jù)進(jìn)行異或,送回CRC寄存器;
(3)計(jì)算結(jié)果向右移一位,用0填補(bǔ)最高位;
(4)如果移出位為l,把CRC寄存器的內(nèi)容與預(yù)置數(shù)(OA001H)相異或,如果移出位為0,不進(jìn)行異或運(yùn)算;
(5)重復(fù)第三步和第四步直到移位8次,處理完成一個(gè)字節(jié);
(6)重復(fù)第二步至第五步直到所有字節(jié)處理結(jié)束。
2 寄存器地址分配及出錯(cuò)處理
2.1寄存器地址分配
功能碼采取簡(jiǎn)化兼容設(shè)計(jì)方案以后,寄存器的地址分配非常重要。根據(jù)開(kāi)關(guān)柜運(yùn)行和操作實(shí)際,把寄存器地址分為以下四類,其中每個(gè)寄存器存儲(chǔ)16位二進(jìn)制數(shù)。
地址0000H~00FFH為系統(tǒng)參數(shù)區(qū),寄存器可讀可寫(xiě)。內(nèi)容主要包括儀表參數(shù)設(shè)置密碼、加熱控制上限、加熱控制下限、濕度控制上限、濕度控制下限、排風(fēng)控制上限、排風(fēng)控制下限、儀表Modbus通訊地址和RS485通訊波特率選擇等。
如果主機(jī)把數(shù)據(jù)(1-247)寫(xiě)入從機(jī)儀表通訊地址寄存器,從機(jī)正確執(zhí)行該指令以后將以新的從機(jī)地址進(jìn)行應(yīng)答;如果主機(jī)把數(shù)據(jù)(0~4)寫(xiě)人從機(jī)波特率選擇寄存器(o代表1200波特、1代表2400波特、2代表4800波特、3代表9600波特、4代表1 9200波特),從機(jī)正確執(zhí)行該指令以后將以新的波特率進(jìn)行應(yīng)答。
地址0100H~01FFH為運(yùn)行參數(shù)區(qū),寄存器只可讀取,不能寫(xiě)入。內(nèi)容主要包括三相電壓有效值及平均值、i相電流有效值及平均值、三相有功功率及總和、三相無(wú)功功率及總和、三相視在功率及總和、三相功率因數(shù)及總功率因數(shù)(定義為總有功功率與總視在功率之比)、頻率、電能數(shù)據(jù)等電氣參數(shù),l#和2#溫濕度傳感器的溫度和濕度測(cè)量值等非電氣參數(shù),以及開(kāi)關(guān)量狀態(tài)指示、高壓帶電指示、面板按鍵指示和加熱狀態(tài)指示等開(kāi)關(guān)量參數(shù)。
地址0200H~02FFH為控制信息區(qū),寄存器只可寫(xiě)入。內(nèi)容包括斷路器遠(yuǎn)方操控、遠(yuǎn)方強(qiáng)制排風(fēng)降溫、遠(yuǎn)方強(qiáng)制加熱/風(fēng)除濕等控制功能。
地址0500H一05FFH為廠家保留區(qū),用于標(biāo)識(shí)儀表類別、型號(hào)以及儀表測(cè)試。
2.2出錯(cuò)處理
當(dāng)儀表檢測(cè)到了校驗(yàn)碼出錯(cuò)以外的錯(cuò)誤時(shí),將向主機(jī)回送信息,功能碼的最高位置為1.即從機(jī)返送給主機(jī)的功能碼是在主機(jī)發(fā)送的功能碼的基礎(chǔ)上加128。從機(jī)返回的錯(cuò)誤信息幀格式如表3所示。
其中錯(cuò)誤碼定義如下:
01H一非法的功能碼,表示接收到的功能碼儀表不支持;
02n--t乍法的寄存器地址,表示接收到的寄存器地址超出儀表的范圍;
03H一非法的數(shù)據(jù)值,表示接收到的數(shù)據(jù)值超出儀表允許的數(shù)值范圍。
3 通訊協(xié)議的上位機(jī)程序設(shè)計(jì)
Vc++6.0程序設(shè)計(jì)語(yǔ)言有專門(mén)基于串口程序設(shè)計(jì)的MSeomm控件。使用MScomm的查詢法實(shí)現(xiàn)串口通信,具體設(shè)計(jì)步驟如下:
(1)初始化串口:用Settings設(shè)置串口參數(shù),包括串口選擇,波特率、數(shù)據(jù)位、奇偶校驗(yàn)位和停止位;
(2)讀取運(yùn)行參數(shù):用SetCommPort打開(kāi)串口,產(chǎn)生OnComm事件,定時(shí)器,Se,tTimer每隔1秒產(chǎn)生OnTimer事件,發(fā)出一系列讀取命令讀取全部運(yùn)行參數(shù)。發(fā)送每條命令時(shí)上位機(jī)計(jì)算CRC校驗(yàn)碼一并發(fā)送,從機(jī)響應(yīng)命令后發(fā)出應(yīng)答數(shù)據(jù)。MScomm控件根據(jù)GetCommEvent獲得CommEvent判斷屬性。如果CommEvent=2,則接收下位機(jī)發(fā)送的應(yīng)答數(shù)據(jù)和校驗(yàn)碼并重新計(jì)算接收數(shù)據(jù)的校驗(yàn)碼,若校驗(yàn)碼正確則存儲(chǔ)并顯示相應(yīng)的數(shù)據(jù);
(3)修改系統(tǒng)參數(shù)/遠(yuǎn)方操控:根據(jù)應(yīng)用程序界面的菜單命令或按鈕命令向下位機(jī)發(fā)出數(shù)據(jù)讀取或?qū)懭胫噶,讀取或修改系統(tǒng)參數(shù),或者向下位機(jī)發(fā)送遠(yuǎn)方操控指令。同樣,MSeomm控件根據(jù)GetCommEvent獲得CommEvent半1]斷屬性,如果CommEvent'-I,則向下位機(jī)發(fā)送系統(tǒng)參數(shù)修改命令或開(kāi)關(guān)柜遠(yuǎn)方操控指令。
4 結(jié)束語(yǔ)
智能開(kāi)關(guān)柜是智能配電網(wǎng)的基本操作單元,采用現(xiàn)場(chǎng)總線可以組成靈活的配電網(wǎng)信息采集與監(jiān)控系統(tǒng)。
基于Modbus—RTU通信規(guī)約設(shè)計(jì)的智能開(kāi)關(guān)柜操控裝置Modbus—RTU通訊協(xié)議簡(jiǎn)化了傳統(tǒng)協(xié)議的功能碼,既符合開(kāi)關(guān)柜采集信息的種類和特點(diǎn),又提高了上位機(jī)監(jiān)控軟件的兼容性。
據(jù)此協(xié)議設(shè)計(jì)的上位機(jī)軟件能夠在主控計(jì)算機(jī)和智能開(kāi)關(guān)柜操控裝置之間有效地進(jìn)行數(shù)據(jù)傳輸和操控命令下發(fā)。采用CRCl6位冗余校驗(yàn)可以保證數(shù)據(jù)傳輸?shù)目煽啃院筒倏孛钕逻_(dá)的準(zhǔn)確性。