電能表多通信協(xié)議的自適應方法
【專利摘要】本發(fā)明公開了一種電能表多通信協(xié)議的自適應方法,首先按照先進先出循環(huán)的方式接收數(shù)據(jù),放至緩沖區(qū);再對接收數(shù)據(jù)進行通信協(xié)議類型判斷;根據(jù)判定的協(xié)議類型進行與之對應的功能解析;最后發(fā)送返回數(shù)據(jù)。本發(fā)明能在不另外燒錄程序或不配備相關硬件等方式干預的情況下,進行各種通信協(xié)議的自適應通訊;所提供幾種協(xié)議的辨別方法快速高效;同一個物理通道只有一個緩沖區(qū),各通信協(xié)議的發(fā)送和接收都共用此緩沖區(qū),節(jié)省了RAM資源;本發(fā)明的通訊中斷僅用于數(shù)據(jù)的接收和發(fā)送,各通信協(xié)議類型的甄別、其具體功能的解析和處理都在主循環(huán)中完成,中斷占用時間少。
【專利說明】電能表多通信協(xié)議的自適應方法
【技術領域】
[0001] 本發(fā)明涉及一種電能表多通信協(xié)議的自適應方法。
【背景技術】
[0002] 隨著電能表行業(yè)的發(fā)展,對通信協(xié)議的需求也越來越多樣性,目前主要有DL/ T645-2007、DL/T645-1997、Modbus等多種協(xié)議,都為半雙工的方式。由于歷史原因,有些地 方需要DL/T645-1997協(xié)議,另外一些地方需要DL/T645-2007協(xié)議,還有些地方需要Modbus 協(xié)議或者多種協(xié)議都需要,如何應對這些多樣化需求呢?當前電能表廠家主要采用以下方 式:1、一種通信協(xié)議定制一款軟件,根據(jù)客戶需求出廠前燒錄特定的軟件。此方式需較多的 軟件版本,需求不同時需更換軟件,且出廠后不能更改,維護成本高。2、一種軟件里封裝幾 種通信協(xié)議,通過硬件來選擇某種協(xié)議,軟件對通信協(xié)議不能自適應。這種在廠外狀態(tài)下通 過外露外露的硬件進行協(xié)議選擇的做法不符合電能表的安全要求,成本也增加了;并且各 協(xié)議是平行運行,占用資源大,不利于資源有限的單片機系統(tǒng)。此外,目前的電能表還存在 一個缺陷:通信處理都是放在中斷中進行的,占用時間長,不利于其它緊急事件的處理。
【發(fā)明內容】
[0003] 本發(fā)明的目的是提供一種自動識別常用半雙工的電能表通信協(xié)議,能在資源較少 的單片機系統(tǒng)上運行,且占用中斷時間較少的的電能表多通信協(xié)議的自適應方法。
[0004] 本發(fā)明提供的這種電能表多通信協(xié)議的自適應方法,該方法包括如下步驟: 步驟1,按照先進先出循環(huán)的方式接收數(shù)據(jù),放至緩沖區(qū); 步驟2,對接收數(shù)據(jù)進行通信協(xié)議類型判斷; 步驟3,根據(jù)判定的協(xié)議類型進行與之對應的功能解析,并備好返回數(shù)據(jù); 步驟4,發(fā)送返回數(shù)據(jù)。
[0005] 所述通信協(xié)議類型包括Modbus-RTU協(xié)議、DL/T645-2007協(xié)議、DL/T645-1997協(xié)議 和校表協(xié)議的一種或一種以上。
[0006] 所述步驟2對每個所述的協(xié)議類型都有一個指向緩沖區(qū)的數(shù)據(jù)指針,所述指針采 用先進先出循環(huán)的方式不停的向后查找符合要求的協(xié)議幀,按協(xié)議類型的重要程度順序的 進行Modbus-RTU協(xié)議、DL/T645-2007協(xié)議、DL/T645-1997協(xié)議、校表協(xié)議等通信協(xié)議類型 的判斷。
[0007] 所述Modbus-RTU協(xié)議的協(xié)議類型判斷按照表地址正確、未接收超時、讀寫功 能碼正確、幀長度正確、校驗正確的順序,依次進行辨認;有任一條件不滿足,則不為 Modbus-RTU協(xié)議類型。
[0008] 所述DL/T645-2007協(xié)議和所述DL/T645-1997協(xié)議的協(xié)議類型判斷按照幀頭為 68H、未接收超時、表地址正確、第八個字節(jié)為68H、幀長度正確、幀尾為16H、校驗和正確、符 合功能碼長度要求的順序,依次進行辨認;有任一條件不滿足,則不為DL/T645-2007協(xié)議 類型或DL/T645-1997協(xié)議類型。
[0009] 所述功能碼長度要求在為DL/T645-2007協(xié)議類型時設置須為4字節(jié);其在DL/ T645-1997協(xié)議類型時設置須為2字節(jié)。所述接收數(shù)據(jù)和所述發(fā)送返回數(shù)據(jù)均采用中斷方 式完成;二者共用一個所述緩沖區(qū);接收數(shù)據(jù)采用先進先出循環(huán)的方式進行存儲。所述通 信協(xié)議類型判斷和所述功能解析均在主循環(huán)中完成。所述通信協(xié)議在同一個物理通道下共 用一個所述緩沖區(qū)。
[0010] 與現(xiàn)有技術相比,本發(fā)明具有如下優(yōu)點: 1、 能在不另外燒錄程序或不配備相關硬件等方式干預的情況下,進行各種通信協(xié)議的 自適應通訊; 2、 提供的Modbus-RTU協(xié)議、DL/T645-2007協(xié)議、DL/T645-1997協(xié)議等協(xié)議的辨別方法 快速高效,成功率高; 3、 同一個物理通道只有一個緩沖區(qū),各通信協(xié)議的發(fā)送和接收都共用此緩沖區(qū),節(jié)省 了 RAM資源; 4、 本發(fā)明的通訊中斷僅用于數(shù)據(jù)的接收和發(fā)送,各通信協(xié)議類型的甄別、其具體功能 的解析和處理都在主循環(huán)中完成,中斷占用時間少。
【專利附圖】
【附圖說明】
[0011] 圖1是本發(fā)明的實施方式模塊示意圖。
[0012] 圖2是本發(fā)明的主流程圖。
[0013] 圖3是本發(fā)明的中斷流程圖。
[0014] 圖4是本發(fā)明的Modbus-RTU幀判斷流程框圖。
[0015] 圖5是本發(fā)明的Modbus-RTU幀判斷數(shù)據(jù)流圖。
[0016] 圖6是本發(fā)明的DL/T645幀判斷流程框圖。
[0017] 圖7是本發(fā)明的DL/T645幀判斷數(shù)據(jù)流圖。
【具體實施方式】
[0018] 如圖1所示,本發(fā)明包括物理層、數(shù)據(jù)鏈路層、協(xié)議幀解析/轉發(fā)層、協(xié)議應用層和 主數(shù)據(jù)庫。
[0019] 物理層是各個通訊物理通道和底層接口的集合和抽象,數(shù)據(jù)鏈路層接收到物理層 的數(shù)據(jù)后送給協(xié)議幀解析/轉發(fā)層進行通信協(xié)議類型辨別,然后協(xié)議應用層按協(xié)議類型進 行具體的功能解析并發(fā)送返回數(shù)據(jù);協(xié)議應用層與主數(shù)據(jù)庫進行數(shù)據(jù)交互。
[0020] 物理層包括底層接口和通訊物理層。底層接口包括EEPR0M、FLASH以及其他接口。 通訊物理層包括485通訊模塊、電力載波通訊模塊、小無線通訊模塊等。
[0021] 數(shù)據(jù)鏈路層包括各協(xié)議數(shù)據(jù)發(fā)送處理模塊、各協(xié)議數(shù)據(jù)接收處理模塊等相關處理 模塊。數(shù)據(jù)鏈路層工作于中斷模式,主要用于對物理層的數(shù)據(jù)進行接收和發(fā)送,接收數(shù)據(jù)采 用先進先出循環(huán)的方式,同一個物理通道只有一個緩沖區(qū),各通信協(xié)議的發(fā)送和接收都共 用此緩沖區(qū)。
[0022] 協(xié)議幀解析/轉發(fā)層包括Modbus-RTU協(xié)議幀解析模塊、DL/T645-2007協(xié)議幀解析 模塊、DL/T645-1997協(xié)議幀解析模塊、校表協(xié)議幀解析模塊等。協(xié)議幀解析/轉發(fā)層主用 于對數(shù)據(jù)鏈路層的數(shù)據(jù)進行初步解析、辨別協(xié)議類型,不進行具體的功能解析。本層工作于 main主循環(huán)中,每個協(xié)議類型都有一個指向接收緩沖的數(shù)據(jù)指針,指針也采用先進先出循 環(huán)的方式不停的向后查找符合的協(xié)議幀,按協(xié)議的重要程度順序的進行Modbus-RTU協(xié)議、 DL/T645-2007協(xié)議、DL/T645-1997協(xié)議、校表協(xié)議等協(xié)議的解析。
[0023] 協(xié)議應用層包括Modbus-RTU協(xié)議、DL/T645-2007協(xié)議、DL/T645-1997協(xié)議、校表 協(xié)議等。
[0024] 485、電力載波、小無線等通訊物理層的數(shù)據(jù)經數(shù)據(jù)鏈路層接收后,傳給協(xié)議幀解 析/轉發(fā)層用于Modbus-RTU協(xié)議、DL/T645-2007協(xié)議、DL/T645-1997協(xié)議、校表協(xié)議等通 信協(xié)議類別的甄別,然后協(xié)議應用層按協(xié)議類型進行具體的功能解析,并與電能表的主數(shù) 據(jù)庫進行互動以獲取數(shù)據(jù)源,與底層接口進行EEPROM、FLASH等物理操作,協(xié)議應用層完成 具體功能解析后再返回數(shù)據(jù)鏈路層及通訊物理層進行數(shù)據(jù)回復。
[0025] 如圖2所示,本發(fā)明按先進先出循環(huán)的方式接收數(shù)據(jù),然后對接收到的數(shù)據(jù)進行 通信協(xié)議類型辨別,再按協(xié)議類型進行具體的功能解析,最后發(fā)送返回數(shù)據(jù)。具體步驟如 下: 步驟1,main主循環(huán)開始。
[0026] 步驟2,判斷數(shù)據(jù)是否為接收狀態(tài),并且判斷公共緩沖區(qū)(BUFF)中是否有數(shù)據(jù);若 該數(shù)據(jù)是接收狀態(tài)且緩沖區(qū)中有數(shù)據(jù),則進入下一步;否則轉至步驟1。
[0027] 步驟3,判斷是否為Modbus-RTU幀;若是,則置協(xié)議號標志位,判得當前協(xié)議類型 為Modbus-RTU協(xié)議;置為發(fā)送狀態(tài),將無效緩沖清空,轉至下一步。
[0028] 否則判斷是否為DL/T645-2007幀;若是,則置協(xié)議號標志位,判得當前協(xié)議類型 為DL/T645-2007協(xié)議;置為發(fā)送狀態(tài),將無效緩沖清空,轉至下一步。
[0029] 否則判斷是否為DL/T645-1997幀;若是,則置協(xié)議號標志位,判得當前協(xié)議類型 為DL/T645-1997協(xié)議;置為發(fā)送狀態(tài),將無效緩沖清空,轉至下一步。
[0030] 否則判斷是否為校表幀;若是,則置協(xié)議號標志位,判得當前協(xié)議類型為校表協(xié) 議;置為發(fā)送狀態(tài),將無效緩沖清空,轉至下一步;否則轉至步驟1。
[0031] 步驟4,根據(jù)協(xié)議號進行具體功能解析,并準備好發(fā)送數(shù)據(jù)到上述緩沖區(qū)中。
[0032] 步驟5,發(fā)送延時倒計時開始。延時時間可設置。
[0033] 步驟6,延時時間到,啟動發(fā)送。
[0034] 步驟7,按照協(xié)議號對應的協(xié)議流程發(fā)送數(shù)據(jù),進入發(fā)送循環(huán)中斷 協(xié)議幀解析/轉發(fā)層完成步驟1和步驟2的操作,協(xié)議應用層執(zhí)行步驟3至步驟7的 操作。
[0035] 本發(fā)明的協(xié)議幀解析/轉發(fā)層主要用于對數(shù)據(jù)鏈路層的數(shù)據(jù)進行初步解析、辨別 協(xié)議類型,不進行具體的功能解析。本層工作于main主循環(huán)中,每個協(xié)議類型都有一個指 向接收緩沖的數(shù)據(jù)指針,指針采用先進先出循環(huán)的方式不停的向后查找符合的協(xié)議幀,按 協(xié)議類型的重要程度順序的進行Modbus-RTU協(xié)議、DL/T645-2007協(xié)議、DL/T645-1997協(xié) 議、校表協(xié)議等協(xié)議的解析,解析到正確的協(xié)議幀后關閉接收并置協(xié)議號。
[0036] 本發(fā)明的協(xié)議應用層也工作于main主循環(huán)中,協(xié)議幀解析/轉發(fā)層完成協(xié)議類型 甄別后,協(xié)議應用層按協(xié)議號進行具體的功能解析,并與電能表的主數(shù)據(jù)庫進行互動以獲 取數(shù)據(jù)源,然后準備好發(fā)送數(shù)據(jù),接著等待接收/發(fā)送間延時,時間到后進行數(shù)據(jù)發(fā)送,所 有數(shù)據(jù)發(fā)送完成后復位各標志,重新進入接收狀態(tài)。
[0037] 如圖3所示,本發(fā)明的數(shù)據(jù)鏈路層工作于中斷模式,主要用于對物理層的數(shù)據(jù)進 行接收和發(fā)送,接收采用先進先出循環(huán)的方式,同一個物理通道只有一個緩沖區(qū),各通信協(xié) 議的發(fā)送和接收都共用此緩沖區(qū)。
[0038] 具體步驟如下: 步驟1,各通信通道接收、發(fā)送中斷申請。
[0039] 步驟2,判斷是接收狀態(tài)還是發(fā)送狀態(tài)。
[0040] 步驟3,若是接收狀態(tài),則接收指針m自增1,指向數(shù)據(jù)待存的緩沖區(qū)。若該指針m 到了最大值LM,則接收指針m從0開始重新計數(shù)。接收數(shù)據(jù)放入到公共緩沖區(qū)的指針所指 位置BUFF[m]中。退出中斷模式。
[0041] 若是發(fā)送狀態(tài),則發(fā)送公共緩沖區(qū)BUFF中的數(shù)據(jù),發(fā)送個數(shù)減一。當發(fā)送個數(shù)為 零時,置位發(fā)送成功標志。退出中斷模式。
[0042] 如圖4所示,Modbus-RTU協(xié)議類型判斷按照以下順序進行檢測判斷。
[0043] (1) Modbus-RTU 巾貞解析開始。
[0044] (2)判斷表地址是否正確;若是,則轉至下一步;否則轉至步驟1。
[0045] (3)判斷是否接收超時;若是,則轉至步驟1 ;否則轉至下一步。
[0046] (4)判斷讀寫功能碼是否正確;若是,則轉至下一步;否則轉至步驟1。
[0047] (5)判斷幀長度是否正確;若是,則轉至下一步;否則轉至步驟1。
[0048] (6)判斷校驗和是否正確;若是,則轉至下一步;否則轉至步驟1。
[0049] (7)置協(xié)議號標志,置巾貞接收成功標志。
[0050] (8 )結束,返回主流程。
[0051] 本流程中不判斷寄存器地址,不進行具體的功能解析和操作。
[0052] 如圖5所示,本發(fā)明的Modbus-RTU幀判斷工作流程的具體過程是:首先統(tǒng)計有效 長度L (從Modbus-RTU的當前指針p到公共緩沖區(qū)BUFF的接收指針m的長度);如果該長 度L小于1,則繼續(xù)接收數(shù)據(jù);否則判斷BUFF[p]的內容是否等于表地址,如不是表地址,則 當前指針P加一并繼續(xù)向后查找;如是表地址,則記下位置q為等于表地址的指針q,并進 行接收超時判斷;如超時,則當前指針P移到當前位置并繼續(xù)向后查找等于表地址的指針 q ;否則判斷從該指針q開始是否收到至少2個字節(jié),如沒有2個字節(jié)則繼續(xù)接收數(shù)據(jù);否則 判斷BUFF[q+l]的內容是否為正確的讀寫功能碼;如不正確則當前指針p加一繼續(xù)向后查 找等于表地址的指針q ;否則判斷后續(xù)數(shù)據(jù)長度是否合理;如長度不夠則繼續(xù)接收數(shù)據(jù),如 長度數(shù)據(jù)值超出緩沖區(qū)的大小則當前指針P加一并繼續(xù)向后查找等于表地址的指針q,如 長度正確則進入校驗和計算,校驗和不正確則P加一繼續(xù)向后查找q,如校驗和正確則初始 化公共緩沖區(qū),并置位協(xié)議號標志及幀判斷成功標志,最后退出。
[0053] 如圖6所示,DL/T645-2007、DL/T645-1997協(xié)議類型判斷按照以下順序進行檢測 判斷。
[0054] (1) DL/T645 幀解析開始。
[0055] (2)判斷DL/T645幀的幀頭是否為68H,即判斷該DL/T645幀的第一字節(jié)是否為 68H ;若是,則轉至下一步;否則轉至步驟1。
[0056] (3)判斷是否接收超時;若是,則轉至步驟1 ;否則轉至下一步。
[0057] (4)判斷表地址是否正確;若是,則轉至下一步;否則轉至步驟1。
[0058] (5)判斷DL/T645幀的第八字節(jié)是否為68H ;若是,則轉至下一步;否則轉至步驟 1〇
[0059] (6)判斷幀長度是否正確;若是,則轉至下一步;否則轉至步驟1。
[0060] (7)結合長度判斷該DL/T645幀的最后一個字節(jié)是否為16H。若是,則轉至下一步; 否則轉至步驟1。
[0061] (8)判斷校驗和是否正確;若是,則轉至下一步;否則轉至步驟1。
[0062] (9)判斷功能碼長度; 若該功能碼長度為4字節(jié),則置協(xié)議號標志為DL/T645-2007協(xié)議號標志,置幀接收成 功標志。結束,返回主流程。
[0063] 否則判斷該功能碼長度是否為2字節(jié),若是,則置協(xié)議號標志為DL/T645-1997協(xié) 議號標志,置幀接收成功標志。結束,返回主流程。
[0064] 否則轉至步驟1。
[0065] 如圖7所示,本發(fā)明的DL/T645幀判斷工作流程的具體過程是:首先統(tǒng)計有效長 度L (從DL/T645的當前指針p到公共緩沖區(qū)BUFF的接收指針m的長度);如果該長度L 小于1,則繼續(xù)接收數(shù)據(jù);否則判斷BUFF[p]的內容是否等于幀頭68H;如不是68H,則當前 指針p加一并繼續(xù)向后查找;如是幀頭68H,則記下位置q為等于68H的指針q,并進行接 收超時判斷;如超時則當前指針P移到當前位置并繼續(xù)向后查找等于68H的指針q,否則 判斷從該指針q開始是否收到至少7個字節(jié);如不足7個字節(jié),則繼續(xù)接收數(shù)據(jù);否則判斷 BUFF[q+irBUFF[q+6]的內容是否為正確的表地址;如不是,則當前指針p加一并繼續(xù)向后 查找等于68H的指針q ;否則判斷從等于68H的指針q開始是否收到至少8個字節(jié);如不足 8個字節(jié),則繼續(xù)接收數(shù)據(jù);否則判斷BUFF[q+7]的內容是否為68H,如不是68H,則當前指 針P加一繼續(xù)向后查找等于68H的指針q ;如是68H,則判斷后續(xù)數(shù)據(jù)長度是否合理;如長 度數(shù)據(jù)值不夠,則繼續(xù)接收數(shù)據(jù),如長度數(shù)據(jù)值超出緩沖區(qū)的大小,則當前指針P加一,并 繼續(xù)向后查找等于68H的指針q ;如后續(xù)數(shù)據(jù)長度為正確長度,則判斷幀尾字節(jié)是否為16H ; 如不是16H,則當前指針p加一,并繼續(xù)向后查找等于68H的指針q ;否則進行校驗和計算, 如校驗和正確,則進入功能碼長度的判斷;功能碼長度為4字節(jié)則為DL/T645-2007協(xié)議,功 能碼長度如為2字節(jié)則為DL/T645-1997協(xié)議,如該功能碼長度既不為4又不2,則當前指針 P加一,并繼續(xù)向后查找等于68H的指針q。協(xié)議類型判斷完成,初始化緩沖區(qū)并置協(xié)議號 標志及巾貞判斷成功標志,最后退出。
[0066] 本發(fā)明能自動識別Modbus-RTU協(xié)議、DL/T645-2007協(xié)議、DL/T645-1997協(xié)議、校 表協(xié)議等各種半雙工的電能表通信協(xié)議,能在資源較少的單片機系統(tǒng)上運行。本發(fā)明的通 訊中斷僅用于數(shù)據(jù)的接收和發(fā)送,通信協(xié)議類型的甄別、具體功能的解析和處理都在主循 環(huán)中完成,中斷占用時間少。
【權利要求】
1. 一種電能表多通信協(xié)議的自適應方法,該方法包括如下步驟: 步驟1,按照先進先出循環(huán)的方式接收數(shù)據(jù),放至緩沖區(qū); 步驟2,對接收數(shù)據(jù)進行通信協(xié)議類型判斷; 步驟3,根據(jù)判定的協(xié)議類型進行與之對應的功能解析,并備好返回數(shù)據(jù); 步驟4,發(fā)送返回數(shù)據(jù)。
2. 根據(jù)權利要求1所述的電能表多通信協(xié)議的自適應方法,其特征在于,所述通信協(xié) 議類型包括Modbus-RTU協(xié)議、DL/T645-2007協(xié)議、DL/T645-1997協(xié)議和校表協(xié)議的一種或 一種以上。
3. 根據(jù)權利要求2所述的電能表多通信協(xié)議的自適應方法,其特征在于,所述步驟2對 每個所述的協(xié)議類型都有一個指向緩沖區(qū)的數(shù)據(jù)指針,所述指針采用先進先出循環(huán)的方式 不停的向后查找符合要求的協(xié)議幀,按協(xié)議類型的重要程度順序的進行Modbus-RTU協(xié)議、 DL/T645-2007協(xié)議、DL/T645-1997協(xié)議、校表協(xié)議等通信協(xié)議類型的判斷。
4. 根據(jù)權利要求2所述的電能表多通信協(xié)議的自適應方法,其特征在于,所述 Modbus-RTU協(xié)議的協(xié)議類型判斷按照表地址正確、未接收超時、讀寫功能碼正確、幀長度正 確、校驗正確的順序,依次進行辨認;有任一條件不滿足,則不為Modbus-RTU協(xié)議類型。
5. 根據(jù)權利要求2所述的電能表多通信協(xié)議的自適應方法,其特征在于,所述DL/ T645-2007協(xié)議和所述DL/T645-1997協(xié)議的協(xié)議類型判斷按照幀頭為68H、未接收超時、 表地址正確、第八個字節(jié)為68H、幀長度正確、幀尾為16H、校驗和正確、符合功能碼長度 要求的順序,依次進行辨認;有任一條件不滿足,則不為DL/T645-2007協(xié)議類型或DL/ T645-1997協(xié)議類型。
6. 根據(jù)權利要求5所述的電能表多通信協(xié)議的自適應方法,其特征在于,所述功能碼 長度要求在為DL/T645-2007協(xié)議類型時設置須為4字節(jié);其在DL/T645-1997協(xié)議類型時 設置須為2字節(jié)。
7. 根據(jù)權利要求1所述的電能表多通信協(xié)議的自適應方法,其特征在于,所述接收數(shù) 據(jù)和所述發(fā)送返回數(shù)據(jù)均采用中斷方式完成;二者共用一個所述緩沖區(qū);接收數(shù)據(jù)采用先 進先出循環(huán)的方式進行存儲。
8. 根據(jù)權利要求1所述的電能表多通信協(xié)議的自適應方法,其特征在于,所述通信協(xié) 議類型判斷和所述功能解析均在主循環(huán)中完成。
9. 根據(jù)權利要求1所述的電能表多通信協(xié)議的自適應方法,其特征在于,所述通信協(xié) 議在同一個物理通道下共用一個所述緩沖區(qū)。
【文檔編號】G06F9/44GK104052758SQ201410333063
【公開日】2014年9月17日 申請日期:2014年7月14日 優(yōu)先權日:2014年7月14日
【發(fā)明者】劉建福, 馬亮 申請人:威勝集團有限公司