国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于RS-485總線的MODBUS 通信協(xié)議在單片機(jī)上的實(shí)現(xiàn)

2019-08-23 09:23馬亞玲
通信電源技術(shù) 2019年7期
關(guān)鍵詞:通信協(xié)議校驗(yàn)上位

馬亞玲

(云南省玉溪技師學(xué)院 玉溪工業(yè)財(cái)貿(mào)學(xué)校,云南 玉溪 653100)

0 引 言

倉庫進(jìn)行智能化改造時(shí),要求可以在值班室顯示倉庫當(dāng)前溫濕度參數(shù),并能夠在值班室對(duì)倉庫現(xiàn)場(chǎng)的除濕和通風(fēng)設(shè)備進(jìn)行遠(yuǎn)程控制。由于產(chǎn)品成本控制非常嚴(yán)格,所以在值班室計(jì)算機(jī)上安裝組態(tài)軟件作為上位機(jī),倉儲(chǔ)現(xiàn)場(chǎng)采用單片機(jī)控制裝置與除濕通風(fēng)設(shè)備相連,并將溫濕度傳感器參數(shù)接入到單片機(jī)中,上位機(jī)和單片機(jī)采用串行通信進(jìn)行信息的交換。需要搭建通信網(wǎng)絡(luò),并進(jìn)行上位機(jī)和單片機(jī)之間通信程序的開發(fā)。本文主要介紹上位機(jī)和單片機(jī)之間通信網(wǎng)絡(luò)及通信協(xié)議的選擇,重點(diǎn)論述單片機(jī)和上位機(jī)之間串行通信通信程序的開發(fā)實(shí)現(xiàn)。

1 通信網(wǎng)絡(luò)和通信協(xié)議的選擇

隨著工業(yè)現(xiàn)代化及信息化的迅猛發(fā)展,單片機(jī)控制已經(jīng)從傳統(tǒng)的本地控制向遠(yuǎn)程控制、網(wǎng)絡(luò)控制發(fā)展,設(shè)備信息的采集和顯示也由本地處理、分散顯示向遠(yuǎn)程采集、集中顯示發(fā)展。單片機(jī)控制功能的改變對(duì)其應(yīng)用開發(fā)提出了新的要求。單片機(jī)開發(fā)應(yīng)用人員需要掌握與單片機(jī)相關(guān)的通信網(wǎng)絡(luò)和通信協(xié)議。

但在目前的單片機(jī)應(yīng)用中,主要還是以本地?cái)?shù)字量的采集和控制為主,很少涉及通信,即便是涉及通信部分,也只是采用RS-232串行接口,利用單片機(jī)自帶的UART進(jìn)行短距離的簡(jiǎn)單數(shù)據(jù)收發(fā)控制,也不涉及通信的協(xié)議規(guī)范。但是在工業(yè)控制中,基于RS-485總線的設(shè)備已經(jīng)得到了廣泛應(yīng)用,設(shè)備的網(wǎng)絡(luò)化、模塊化應(yīng)用需求日益明顯。相較于RS-232,RS-485在信號(hào)傳輸距離、傳輸速率、抗干擾性及支持多點(diǎn)通信等方面具有很強(qiáng)的優(yōu)勢(shì),能夠滿足工業(yè)現(xiàn)場(chǎng)通信的要求,因此在通信網(wǎng)絡(luò)搭建采用RS-485總線形式相連接。

確定通信網(wǎng)絡(luò)后,為了保證數(shù)據(jù)傳輸?shù)目煽啃?、?shí)時(shí)性以及協(xié)議的通用性,經(jīng)過對(duì)比研究,選擇MODBUS通信協(xié)議。MODBUS有兩種串行傳輸模式,包括RTU、ASCII[1]。兩種傳輸方式不同之處在于數(shù)據(jù)命令的編碼、解碼方式不同,多數(shù)支持MODBUS協(xié)議的設(shè)備都支持RTU模式,并且RTU模式在單片機(jī)上實(shí)現(xiàn)相對(duì)簡(jiǎn)單,因此采用MODBUS RTU進(jìn)行通信程序的開發(fā)。

2 MODBUS RTU協(xié)議規(guī)則

采用MODBUS通信協(xié)議的設(shè)備連接在一起就構(gòu)成了通信網(wǎng)絡(luò),以RS-485方式為例進(jìn)行連接。一個(gè)通信網(wǎng)絡(luò)中只有一個(gè)設(shè)備可以作為主機(jī),其余設(shè)備均為從機(jī),每一個(gè)從機(jī)都會(huì)分配一個(gè)地址,從機(jī)地址的范圍為1~247。MODBUS通信協(xié)議中,主機(jī)發(fā)送數(shù)據(jù)和指令中包含指定的從機(jī)地址,通信網(wǎng)絡(luò)中的每個(gè)從機(jī)都會(huì)收到數(shù)據(jù)和指令,從機(jī)判斷協(xié)議命令中的地址和本機(jī)地址不一致時(shí),就不會(huì)進(jìn)行處理,只有讀取到協(xié)議命令中的地址和本機(jī)地址一致時(shí),才進(jìn)行數(shù)據(jù)命令的解析處理。MODBUS RTU方式主機(jī)發(fā)送時(shí)的數(shù)據(jù)格式如表1所示。

當(dāng)從機(jī)收到主機(jī)的指令時(shí),根據(jù)主機(jī)的功能代碼的命令要求,執(zhí)行從寄存器讀取數(shù)值或者寫入數(shù)值到寄存器中,并在執(zhí)行指令后向主機(jī)發(fā)送返回?cái)?shù)據(jù),響應(yīng)主機(jī)操作。功能碼是在標(biāo)準(zhǔn)MODBUS RTU協(xié)議中已經(jīng)定義了常用指令代碼的功能,在單片機(jī)通信應(yīng)用中常用功能碼及功能如表2所示。

表1 MODBUS通信數(shù)據(jù)格式

表2 常用MODBUS功能碼及功能

3 基于單片機(jī)的MODBUS協(xié)議的實(shí)現(xiàn)

3.1 MODBUS協(xié)議處理函數(shù)流程圖

MODBUS協(xié)議是主/從通信協(xié)議,以單片機(jī)作為從機(jī),編寫接收主機(jī)命令,執(zhí)行命令,并發(fā)送響應(yīng)指令給主機(jī)的通信程序。MODBUS協(xié)議處理函數(shù)的流程如圖1所示。單片機(jī)循環(huán)掃描時(shí)間到時(shí),判斷是否接收到主機(jī)數(shù)據(jù)命令,當(dāng)接收到數(shù)據(jù)命令時(shí),首先解析地址是否為本機(jī)地址,然后判斷CRC校驗(yàn)是否正確,對(duì)CRC校驗(yàn)后正確的數(shù)據(jù)命令,按照功能碼指令以及數(shù)據(jù)地址和數(shù)據(jù)進(jìn)行處理,并在處理后返回給主機(jī)響應(yīng)數(shù)據(jù),對(duì)于不是本機(jī)地址,或者是本機(jī)地址但是CRC校驗(yàn)不正確的數(shù)據(jù),不進(jìn)行處理[2]。

圖1 MODBUS協(xié)議處理函數(shù)流程圖

3.2 01功能碼的功能實(shí)現(xiàn)

01功能碼是主機(jī)讀取單片機(jī)一個(gè)數(shù)據(jù)位數(shù)據(jù)的指令。當(dāng)從機(jī)接收到01功能碼指令時(shí),首先解析要獲取的數(shù)據(jù)位的地址,然后讀取該地址中的數(shù)據(jù),將數(shù)據(jù)通過響應(yīng)指令發(fā)送給上位機(jī),即可實(shí)現(xiàn)01功能碼讀取一位數(shù)據(jù)的功能。01功能碼實(shí)現(xiàn)流程如圖2所示。

3.3 05功能碼的功能實(shí)現(xiàn)

05功能碼是主機(jī)向單片機(jī)的一個(gè)數(shù)據(jù)位地址寫入數(shù)據(jù)的指令。當(dāng)從機(jī)接收到05功能碼指令時(shí),首先解析要寫入數(shù)據(jù)位的目標(biāo)地址,然后將指令中的數(shù)據(jù)寫入到目標(biāo)地址,最后向主機(jī)發(fā)送響應(yīng),即可實(shí)現(xiàn)05功能碼寫入一位數(shù)據(jù)的功能。

圖2 01功能碼實(shí)現(xiàn)流程圖

4 51單片機(jī)利用MODBUS協(xié)議實(shí)現(xiàn)對(duì)設(shè)備的控制

單片機(jī)控制裝置的通信網(wǎng)絡(luò)采用RS-485總線形式相連接。將計(jì)算機(jī)作為通信的主機(jī)、單片機(jī)作為通信的從機(jī),通過在51單片機(jī)中運(yùn)行MODBUS通信協(xié)議,實(shí)現(xiàn)在上位機(jī)對(duì)設(shè)備的控制。

4.1 單片機(jī)MODBUS協(xié)議控制設(shè)備處理函數(shù)

在單片機(jī)的數(shù)據(jù)存儲(chǔ)空間中定義數(shù)據(jù)的接收和發(fā)送緩沖區(qū),單片機(jī)發(fā)送的數(shù)據(jù)首先送入發(fā)送緩沖區(qū)中,接收的數(shù)據(jù)放入到接收緩沖區(qū)中。對(duì)于單片機(jī)和主機(jī),數(shù)據(jù)緩沖區(qū)是一個(gè)公用的區(qū)域。本文定義兩個(gè)緩沖區(qū):

unsigned char TxBuff[20];//數(shù)據(jù)發(fā)送緩沖區(qū)

unsigned char RxBuff[20];//數(shù)據(jù)接收緩沖區(qū)

定義單片機(jī)中LED的地址為0,當(dāng)?shù)刂分袛?shù)據(jù)為0時(shí),設(shè)備打開,非0時(shí),設(shè)備關(guān)閉。當(dāng)單片機(jī)接收到主機(jī)打開和關(guān)閉設(shè)備的指令時(shí),處理函數(shù)如下:

CRC=CRC16MODBUS(RxBuff,6);//CRC校驗(yàn)

CRCH =CRC>>8; //獲取CRC校驗(yàn)高位

CRCL =CRC&0xff; //獲取CRC校驗(yàn)低位

if(RxBuff[6]==CRCH&&RxBuff[7]==CRCL)//判斷CRC校驗(yàn)是否正確

{

if(RxBuff[0]==Add)//判斷地址是否是本機(jī)地址

{

if(RxBuff[0]==0x05)//判斷是否是05功能碼

{

Regadd=RxBuff[2]*256+RxBuff[3];//獲取寄存器地址

if(Regadd==0)

{

if(RxBuff[4]==0x00) //判斷打開還是關(guān)閉

LED=0; //打開設(shè)備

else

LED=1; //關(guān)閉設(shè)備

TxBuff[0]=RxBuff[0]; //設(shè)備地址

TxBuff[1]=RxBuff[1]; //功能碼

TxBuff[2]=RxBuff[2]; //地址高位

TxBuff[3]=RxBuff[3]; //地址低位

TxBuff[4]=RxBuff[4]; //數(shù)據(jù)位

TxBuff[5]=RxBuff[5]; //數(shù)據(jù)位

CRC=CRC16MODBUS(TxBuff,6);//CRC 校驗(yàn)

TxBuff[6]=CRC>>8; //CRC校驗(yàn)高位

TxBuff[7]=CRC&0XFF; //CRC校驗(yàn)低位

TxDell();//向主機(jī)發(fā)送響數(shù)據(jù)

}

}

}

}

4.2 上位機(jī)發(fā)送指令實(shí)現(xiàn)對(duì)設(shè)備的控制和信息的采集

上位機(jī)發(fā)送協(xié)議指令:0105 00 00 00 00 CD CA,單片收到指令打開設(shè)備,并返回響應(yīng)指令。上位機(jī)發(fā)送協(xié)議指令:0105 00 00 FF 00 8C 3A,單片收到指令關(guān)閉設(shè)備,并返回響應(yīng)指令。對(duì)于現(xiàn)場(chǎng)溫濕度信息的采集,主機(jī)采用03功能碼數(shù)據(jù)指令進(jìn)行溫濕度數(shù)據(jù)的采集,單片機(jī)執(zhí)行指令將數(shù)據(jù)傳輸?shù)缴衔粰C(jī)的組態(tài)軟件中進(jìn)行顯示。

5 結(jié) 論

本文通過在單片機(jī)上運(yùn)行MODBUS從機(jī)通信協(xié)議程序,以計(jì)算機(jī)作為上位機(jī),通過上位機(jī)發(fā)送指令對(duì)單片機(jī)進(jìn)行遠(yuǎn)程控制和現(xiàn)場(chǎng)信息的采集。經(jīng)過產(chǎn)品開發(fā)研究,驗(yàn)證了基于RS-485通信網(wǎng)絡(luò)和MODBUS通信協(xié)議實(shí)現(xiàn)上位機(jī)和單片機(jī)通信的可行性,達(dá)到了預(yù)期的效果。

猜你喜歡
通信協(xié)議校驗(yàn)上位
使用Excel朗讀功能校驗(yàn)工作表中的數(shù)據(jù)
基于Wireshark的列控中心以太網(wǎng)通信協(xié)議解析器的研究與實(shí)現(xiàn)
特斯拉 風(fēng)云之老阿姨上位
智能電能表的現(xiàn)場(chǎng)快速校驗(yàn)方法探討
車載網(wǎng)絡(luò)通信協(xié)議標(biāo)準(zhǔn)化問題研究
電子式互感器校驗(yàn)方式研究
電動(dòng)汽車充電接口及通信協(xié)議新國標(biāo)發(fā)布
基于ZigBee和VC上位機(jī)的教室智能監(jiān)測(cè)管理系統(tǒng)
淺談微電子故障校驗(yàn)
SIP協(xié)議系統(tǒng)模型的形式化研究
敖汉旗| 苍梧县| 涟水县| 凌云县| 武隆县| 陆川县| 阳江市| 抚顺市| 张家界市| 涿州市| 绍兴市| 沂水县| 仁布县| 关岭| 宕昌县| 肃南| 连南| 荥经县| 榆林市| 工布江达县| 武乡县| 廊坊市| 区。| 格尔木市| 田阳县| 福鼎市| 泽普县| 万州区| 泰顺县| 武胜县| 峨边| 定陶县| 乐都县| 建昌县| 鲁山县| 府谷县| 家居| 旅游| 澜沧| 特克斯县| 申扎县|