一種基于優(yōu)先級和分段的數(shù)據(jù)采集方法
【專利摘要】本發(fā)明公開了一種基于優(yōu)先級和分段的數(shù)據(jù)采集方法,屬于數(shù)據(jù)采集、網(wǎng)絡(luò)通信【技術(shù)領(lǐng)域】。本方法利用Vxworks實時操作系統(tǒng)的終端機作為主站,采集對象是Modbus設(shè)備或子系統(tǒng)的從站。對一個從站,主站的一個采集器的具體采集步驟包括:步驟一:讀取配置文件;步驟二:將采集數(shù)據(jù)范圍分解為采集數(shù)據(jù)分段組;步驟三:根據(jù)數(shù)據(jù)分段組優(yōu)先級生成采集任務(wù)循環(huán)隊列;步驟四:根據(jù)采集任務(wù)循環(huán)隊列向從站發(fā)送Modubus請求報文;步驟五:判斷響應(yīng)報文是否錯誤,是則執(zhí)行步驟六,否則執(zhí)行步驟七;步驟六:重新連接從站;步驟七:將采集的數(shù)據(jù)更新到內(nèi)存;步驟八:轉(zhuǎn)到步驟四并執(zhí)行下一個任務(wù)。本發(fā)明支持同時采集多個從站數(shù)據(jù),可靠性強、兼容性好、實時性高及錯誤開銷小。
【專利說明】一種基于優(yōu)先級和分段的數(shù)據(jù)采集方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及一種數(shù)據(jù)采集方法,特別是涉及一種基于標準Modbus協(xié)議的通訊系 統(tǒng)、方法和裝置,具體是一種基于優(yōu)先級和分段的數(shù)據(jù)采集方法的設(shè)計。
【背景技術(shù)】
[0002] 在工業(yè)通信領(lǐng)域,Modbus協(xié)議由于其協(xié)議開放、實施簡單、可靠性高的特點,已經(jīng) 成為事實上的工業(yè)標準,得到了眾多產(chǎn)商的產(chǎn)品支持。
[0003] 隨著信息技術(shù)的不斷發(fā)展,許多應(yīng)用場合要求使用現(xiàn)有的Modbus設(shè)備進行數(shù)據(jù) 通信,對數(shù)據(jù)的實時性要求也越來越高,如地鐵綜合監(jiān)控領(lǐng)域,從站數(shù)據(jù)量不斷增加、主站 對從站的數(shù)據(jù)采集量遠大于標準Modbus協(xié)議支持的單次最大數(shù)據(jù)采集量、數(shù)據(jù)采集的實 時性要求越來越高,為了兼容標準Modbus報文最大長度為256字節(jié)的限制,同時滿足大數(shù) 據(jù)量和高實時性的要求,加上網(wǎng)絡(luò)原因或者設(shè)備故障,傳統(tǒng)的數(shù)據(jù)采集方法經(jīng)常會出現(xiàn)數(shù) 據(jù)上報延時長,而影響了整個綜合監(jiān)控系統(tǒng)的可擴展性和實時性。
【發(fā)明內(nèi)容】
[0004] 本發(fā)明所要解決的技術(shù)問題是提供一種基于優(yōu)先級和分段的數(shù)據(jù)采集方法,在兼 容標準Modbus協(xié)議提前下,以解決因更多從站接入和大數(shù)據(jù)范圍的采集帶來的數(shù)據(jù)實時 性問題。采集分優(yōu)先級,并根據(jù)采集器與從站數(shù)據(jù)交換狀況自動調(diào)整采集頻率,有效保障了 高優(yōu)先級數(shù)據(jù)的實時性,減少了從站負擔,該方法不僅增加數(shù)據(jù)的實時性而且減少了通信 錯誤開銷和網(wǎng)絡(luò)帶寬的占用。
[0005] 為實現(xiàn)上述發(fā)明目的,本發(fā)明提供基于優(yōu)先級和分段的數(shù)據(jù)采集方法,包括多采 集器并發(fā)采集、按照優(yōu)先級對大范圍數(shù)據(jù)分段采集和根據(jù)采集器與從站數(shù)據(jù)交換狀況自動 調(diào)整采集頻率。
[0006] 所述多采集器并發(fā)采集,采用是的多線程并發(fā)采集技術(shù),一個采集器就是一個線 程,一個采集器與一個從站通訊,不同的采集器互不干擾并將采集的數(shù)據(jù)更新于不同的內(nèi) 存塊,以備上層應(yīng)用使用。針對每個從站,主站分配一個固定的內(nèi)存塊用于存儲該從站的數(shù) 據(jù),采集器對該固定的內(nèi)存塊只有寫權(quán)限。
[0007] 所述按照優(yōu)先級對大范圍數(shù)據(jù)分段采集,采集器初使化時將生成一個采集任務(wù)循 環(huán)隊列,該隊列是根據(jù)每個數(shù)據(jù)范圍優(yōu)先級的不同生成的,采集器將依據(jù)該任務(wù)隊列進行 采集工作。采集任務(wù)循環(huán)隊列的生成包括以下步驟:
[0008] 步驟一:采集器讀取配置文件,包括數(shù)據(jù)類型、優(yōu)先級、功能碼、單次最大數(shù)據(jù)采集 量、采集范圍、映射范圍;
[0009] 步驟二:根據(jù)配置參數(shù),將超過單次最大數(shù)據(jù)采集量的每個待采集數(shù)據(jù)范圍分段, 將其轉(zhuǎn)化為待采集數(shù)據(jù)分段組,使每個分段組的各分段范圍之和等于原數(shù)據(jù)范圍;
[0010] 步驟三:根據(jù)每個分段組優(yōu)先級的不同生成采集任務(wù)循環(huán)隊列,使不同優(yōu)先級的 分段按照它們的采集頻率比例分散地分布于采集任務(wù)循環(huán)隊列中。
[0011] 生成的循環(huán)隊列可以表示為
【權(quán)利要求】
1. 一種基于優(yōu)先級和分段的數(shù)據(jù)采集方法,其特征在于,包括以下步驟: 步驟一:采集器讀取配置文件,包括數(shù)據(jù)類型(Type e [1,512])、優(yōu)先級 (Priority e [60, 232])、功能碼(Code e [1,255])、單次最大數(shù)據(jù)采集量(Max e [1,2161])、 采集范圍([Read e [〇,216-1])、映射范圍(Write e [〇, 264-1]); 步驟二:根據(jù)配置參數(shù),將超過單次最大數(shù)據(jù)采集量的每個待采集數(shù)據(jù)范圍分段,將其 轉(zhuǎn)化為待采集數(shù)據(jù)分段組,使每個分段組的各分段范圍之和等于原數(shù)據(jù)范圍; 步驟三:根據(jù)每個分段組優(yōu)先級的不同生成采集任務(wù)循環(huán)隊列,使不同優(yōu)先級的分段 按照它們的采集頻率比例分散地分布于采集任務(wù)循環(huán)隊列中; 步驟四:主站采用標準的Modbus/TCPIP或者Modbus/RTU協(xié)議,根據(jù)采集任務(wù)循環(huán)隊 列,發(fā)送當前任務(wù)分段范圍的Modubus請求報文; 步驟五:主站收到該分段響應(yīng)報文判斷其是否錯誤,或者是否超時,如果是則執(zhí)行步驟 六,否則執(zhí)行步驟七; 步驟六:主站有限次數(shù)地重新發(fā)送對該分段的Modbus請求報文或者重新連接從站; 步驟七:主站取出分段響應(yīng)報文中的有效數(shù)據(jù)并更新到指定內(nèi)存塊; 步驟八:重復(fù)步驟四,從采集任務(wù)循環(huán)隊列取出下一個任務(wù)并執(zhí)行。
2. 根據(jù)權(quán)利要求1所述的方法,其特征在于,主站可以同時接入N(1 <=N<= 100) 個從站并發(fā)地數(shù)據(jù)采集,主站將從各從站采集的數(shù)據(jù)更新到不同內(nèi)存塊,無需關(guān)心各從站 地址范圍是否重疊的問題。
3. 根據(jù)權(quán)利要求1所述的方法,其特征在于,主站采集器根據(jù)每個分段組優(yōu)先級生 成采集任務(wù)循環(huán)隊列,采集器將依據(jù)這個采集任務(wù)循環(huán)隊列進行數(shù)據(jù)采集工作,每次只讀 取隊列的任務(wù),并沒有出隊列,每個任務(wù)組成一個4維的向量T = [Code, Start, Count, NextTask],其中Code是分段查詢的功能碼,Start是分段查詢的開始地址,Count是分段查 詢的字數(shù),NextTask是下一個分段查詢?nèi)蝿?wù)執(zhí)行的時間。
4. 根據(jù)權(quán)利要求3所述的方法,其特征在于,還包括:采集任務(wù)循環(huán)隊列是根據(jù)每個分 段組優(yōu)先級生成的,可以用以下的表達式表示:
其中Q表示采集任務(wù)循環(huán)隊列,Qn表示該采集器采集了 η個不同優(yōu)先級的數(shù)據(jù)范圍,U 是一種運算符,將其后面元素的下標按照U運算符的上標到下標以遞增方式從左到右連接 起來,?\表示當前優(yōu)先級數(shù)據(jù)范圍的第i個分段或任務(wù),nSplitCount是指第η個數(shù)據(jù)范圍 分段數(shù)目,F(xiàn)n指第η個數(shù)據(jù)范圍的查詢頻率,將表達式展開如下:
只有一個數(shù)據(jù)范圍;
,兩個數(shù)據(jù)范圍;
,三個數(shù)據(jù)范圍;
個數(shù)據(jù)范圍。
5. 根據(jù)權(quán)利要求1所述的方法,其特征在于,采集器定時從采集任務(wù)循環(huán)隊列中取 出當前任務(wù),根據(jù)任務(wù)所屬性:[Code, Start, Count, NextTask]中的Code (功能碼)、 Start (開始地址)和Count (請求字數(shù))組成標準的Modbus報文與從站數(shù)據(jù)交換,并將在 NestTask(毫秒)時間后啟動下次任務(wù)。
6. 根據(jù)權(quán)利要求5所述的方法,其特征在于,還包括:主站如果在NestTask時間內(nèi)收 到從站的正確響應(yīng),則會在下一次任務(wù)啟動事件到來時執(zhí)行下一個任務(wù),否則,將重新執(zhí)行 當前任務(wù),重新執(zhí)行次數(shù)通過配置文件確定,如果重新執(zhí)行數(shù)據(jù)超過設(shè)定的值,采集器將重 新連接從站。
7. 根據(jù)權(quán)利要求5所述的方法,其特征在于,還包括:在收到從站的正確響應(yīng)后,采集 器將數(shù)據(jù)更新至內(nèi)存數(shù)據(jù)庫,同時累計正常數(shù)據(jù)交換計數(shù),如果計數(shù)達到預(yù)設(shè)的閥值,采集 器將認為與該從站的通訊良好,可以加速與其數(shù)據(jù)交換,從而采集器將提前一個預(yù)設(shè)的單 位時間去執(zhí)行下一個任務(wù);如果在采集過程中出現(xiàn)響應(yīng)超時、數(shù)據(jù)錯誤或者網(wǎng)絡(luò)故障,下一 個任務(wù)的執(zhí)行時間將會還原為初始值。
【文檔編號】H04L12/26GK104158699SQ201410396966
【公開日】2014年11月19日 申請日期:2014年8月8日 優(yōu)先權(quán)日:2014年8月8日
【發(fā)明者】肖奇峰, 陳朝暉, 張少文 申請人:廣州新科佳都科技有限公司