一種在rs—485上使用modbus通訊協(xié)議自動(dòng)識(shí)別地址的方法
【專利說(shuō)明】—種在RS—485上使用MODBUS通訊協(xié)議自動(dòng)識(shí)別地址的方法
[0001]
技術(shù)領(lǐng)域
[0002]本發(fā)明屬于總線通訊技術(shù),特別是涉及到一種在RS—485上使用MODBUS通訊協(xié)議自動(dòng)識(shí)別地址的方法。
【背景技術(shù)】
[0003]在RS—485上使用MODBUS通訊協(xié)議時(shí),一個(gè)前提是掛接在RS—485上的設(shè)備的地址(此地址以下統(tǒng)稱為MODBUS地址)為一字節(jié),此地址一定是唯一的,這樣在RS — 485總線上的設(shè)備,才能通過(guò)唯一的MODBUS地址進(jìn)行識(shí)別,實(shí)現(xiàn)正常通訊。但在實(shí)際操作時(shí),因各種各樣的原因,造成掛接在RS — 485總線上的設(shè)備有可能會(huì)出現(xiàn)MODBUS地址相同的情況,這樣會(huì)導(dǎo)致整個(gè)總線通訊不正常,影響總線上器件的正常工作。本發(fā)明專利“一種在RS — 485上使用MODBUS通訊協(xié)議自動(dòng)識(shí)別地址的方法”正是為了解決RS — 485上存在相同MODBUS地址時(shí),自動(dòng)設(shè)置不同MODBUS地址問(wèn)題,保證總線上的通訊正常。
【發(fā)明內(nèi)容】
[0004]本發(fā)明專利的目的是設(shè)計(jì)一種在RS — 485上使用MODBUS通訊協(xié)議自動(dòng)識(shí)別地址的方法,以便當(dāng)掛接在RS—485上的設(shè)備MODBUS地址有相同時(shí),可以識(shí)別出來(lái),并能設(shè)置為不同,這樣在總線上的器件,可以通過(guò)唯一的MODBUS地址進(jìn)行識(shí)別,實(shí)現(xiàn)正常通訊。
[0005]本發(fā)明的目的是這樣實(shí)現(xiàn)的:一種在RS—485上使用MODBUS通訊協(xié)議自動(dòng)識(shí)別地址的方法,其特征為:在掛接在RS — 485總線上產(chǎn)品的MODBUS通訊命令中,設(shè)置用于讀設(shè)備的總ID的廣播寄存器命令FX,所述的總ID為器件ID+M0DBUS地址;總線上的控制器作主器件,用MODBUS協(xié)議規(guī)定的查詢類命令發(fā)送FX到RS—485總線上,接收全部掛接在總線上的器件的總ID ;總線上的其它器件作從控制器,接收到FX后,根據(jù)器件ID地址的大小,延時(shí)相應(yīng)一段時(shí)間,再將器件上總ID,發(fā)送到RS—485總線上;總線上的控制器接收到總線上全部器件的總ID后,檢測(cè)如沒有相同的MODBUS地址,則不用響應(yīng),有相同值,則按器件ID值大小排序,并取不相同值器件最高M(jìn)ODBUS地址+1為最小設(shè)置MODBUS地址初始值,用MODBUS協(xié)議規(guī)定的設(shè)置類命令發(fā)送全部MODBUS地址相同器件的FX命令;總線上的器件接收FX后,如器件ID值相同,則響應(yīng),根據(jù)接收到的MODBUS地址,將原MODBUS地址改為主控制器設(shè)置的MODBUS地址并保存,如器件ID值不同,則不響應(yīng)。
[0006]用于讀設(shè)備的總ID為器件ID+M0DBUS地址,最長(zhǎng)為5個(gè)字節(jié),其中4個(gè)字節(jié)為器件ID,器件自帶,為唯一值,即所有器件只有唯——個(gè),另外一個(gè)字節(jié)為MODBUS地址,即掛接在RS — 485總線上器件的通訊地址,器件依靠此地址進(jìn)行通訊。
[0007]總線上的控制器作主器件,用MODBUS協(xié)議規(guī)定的03類命令發(fā)送FX到RS — 485總線上,接收全部掛接在總線上的器件的總ID。
[0008]總線上的其它器件作從控制器,接收到FX后,根據(jù)器件ID地址的大小,延時(shí)相應(yīng)一段時(shí)間,再將器件上總ID,發(fā)送到RS — 485總線上,因器件ID地址不同,因此延時(shí)也不同,這樣,可保證在同一時(shí)間,RS-485上只有一個(gè)發(fā)送設(shè)備,不會(huì)造成總線沖突。
[0009]總線上的控制器接收到總線上全部器件的總ID后,若有相同值,則按器件ID值大小排序,并取不相同值器件最高M(jìn)ODBUS地址+1為最小設(shè)置MODBUS地址初始值,用MODBUS協(xié)議規(guī)定的06類命令發(fā)送全部MODBUS地址相同器件的FX命令。
[0010]本發(fā)明的軟件流程為:
(1)“控制器發(fā)送廣播寄存器命令FX到485總線上”,啟動(dòng)檢測(cè)MODBUS地址是否相同功能;
(2)“器件接收到FX命令后,延時(shí)一指定值的毫秒值(其值=本器件ID地址值乘一固定值)后,將器件上總ID,發(fā)送到RS — 485總線”,按不同的器件ID,延時(shí)不同的時(shí)間,以保證在同一時(shí)間內(nèi),總線上只能有一設(shè)備在發(fā)送,保證總線的通訊正常。器件總ID=器件ID+M0DBUS 地址;
(3)“控制器接收總線上全部器件的總ID地址”;
(4)進(jìn)入“有相同的MODBUS地址?”,沒有則結(jié)束,否則直接進(jìn)入下一步;
(5)進(jìn)入“相同MODBUS地址按器件ID次序按從小到大排序”;
(6)進(jìn)入“不相同值器件最高M(jìn)ODBUS地址+1為最小設(shè)置MODBUS地址初始值FMINADDRo”;
(7)進(jìn)入“控制器將未發(fā)送過(guò)最低器件ID地址+FMINADDR組成對(duì)應(yīng)總ID發(fā)送到485總線上”;
(8)進(jìn)入“器件接收FX命令”;
(9 )如器件ID地址相同,則按命令設(shè)置,如不同,則退出”;
(10)進(jìn)入“MODBUS地址相同值發(fā)送完否? ”如發(fā)送完,則結(jié)束,否則進(jìn)入下一步糾正,繼續(xù)發(fā)送;
(12)進(jìn)入“FMINADDR加1”,繼續(xù)發(fā)送,至結(jié)束。
[0011]采取以上措施的本發(fā)明,簡(jiǎn)單可靠,容易實(shí)施,解決了目前RS — 485上存在相同的MODBUS地址時(shí),不能工作的問(wèn)題。本發(fā)明能自動(dòng)設(shè)置不同MODBUS地址,保證了總線上的通訊正常。
[0012]下面再結(jié)合附圖和實(shí)施例對(duì)本發(fā)明作進(jìn)一步的詳述。
【附圖說(shuō)明】
[0013]附圖1是掛接在RS — 485總線上全部器件上的總線接線圖,其中一個(gè)為控制器作主控設(shè)備,主要由單片機(jī)或DSP組成,通過(guò)MODBUS協(xié)議控制除本控制器外的其它器件工作。
[0014]附圖2是本發(fā)明的軟件流程圖,說(shuō)明控制器及其它器件實(shí)現(xiàn)本發(fā)明功能的軟件的流程,按此流程,在不同的單片機(jī)或DSP上,可編寫出相應(yīng)實(shí)現(xiàn)本發(fā)明的程序;
附圖3是本發(fā)明專利實(shí)施例的控制器電路圖,控制器作為主設(shè)備,主要由Microchip公司的單片機(jī)PIC16F886組成,通過(guò)MODBUS協(xié)議控制其它器件正常工作。
[0015]附圖4是本發(fā)明專利實(shí)施例的器件電路圖,器件作為從設(shè)備,主要由Microchip公司的單片機(jī)PIC16F886組成,通過(guò)MODBUS協(xié)議被控制器控制工作。
[0016]下面再結(jié)合附圖和實(shí)施例對(duì)本發(fā)明作進(jìn)一步詳述。
【具體實(shí)施方式】
[0017]本發(fā)明是為了解決RS — 485上存在相同MODBUS地址時(shí),自動(dòng)設(shè)置不同MODBUS地址問(wèn)題,保證總線上的通訊正常。在RS — 485總線上使用MODBUS通訊協(xié)議通訊的任一個(gè)器件,均存在二個(gè)地址,一個(gè)是器件的ID地址,此ID地址,可以是器件自帶,如承擔(dān)通訊功能器件中的單片機(jī),有些型號(hào)(如ARM單片機(jī))出廠時(shí)就帶有一個(gè)唯一 4字節(jié)16進(jìn)制ID地址,有些則可以在寫程序時(shí),直接寫入唯一的ID地址,如PIC系列的單片機(jī),在寫程序時(shí),可以直接寫入一個(gè)唯一 4字節(jié)16進(jìn)制ID地址,在單片機(jī)中,ID地址一旦寫入,則一般不會(huì)變動(dòng)。另一個(gè)地址是MODBUS通訊協(xié)議規(guī)定的器件地址,即MODBUS地址,只有一個(gè)字節(jié),是可以通過(guò)設(shè)備上的按鍵或其它方法修改的。本發(fā)明中所說(shuō)的MODBUS通訊協(xié)議地址,就是此地址。因掛接在RS — 485總線上的設(shè)備,只有1個(gè)字節(jié)MODBUS地址,而在生產(chǎn)時(shí),為了檢測(cè)的方便或其它原因,出廠時(shí)的設(shè)備,可能地址都是相同的,因此當(dāng)用戶接收到設(shè)備時(shí),MODBUS地址相同的現(xiàn)象很難避免。而在安裝時(shí),因MODBUS地址只有一個(gè)字節(jié),最多可以有256個(gè)地址,要求用戶一個(gè)地址一個(gè)地址檢查且不能出錯(cuò),是有一定難度的。因此,設(shè)置一種方法,能自動(dòng)檢測(cè)出MODBUS地址相同的器件,并自動(dòng)設(shè)為不同,則為用戶提供了方便且保證了通訊的正常。
[0018]附圖1給出了掛接在RS — 485總線上全部器件上的總線接線圖。參見附圖1。
[0019]本發(fā)明用一個(gè)控制器作主控制器,主要由單片機(jī)或DSP組成,檢測(cè)總線上的器件是否有相同的MODBUS地址,如有相同,則按程序運(yùn)行,設(shè)置器件的不同MODBUS地址??偩€上的控制器、總線上的器件1、總線上的器件2、總線上的器件N,形成本發(fā)明RS — 485接線總圖。所述的智能控制器作總線主控制控制器,其它器件1至器件N作從控制器,由主控制器通過(guò)485總線按MODBUS協(xié)議控制器件工作。
[0020]附圖2給出了本發(fā)明的軟件功能流程圖。參考附圖2。軟件實(shí)現(xiàn)流程為:1.“控制器發(fā)送廣播寄存器命令FX到485總線上”,啟動(dòng)檢測(cè)MODBUS地址是否相同功能。2.“器件接收到FX命令后,延時(shí)一指定值的毫秒