本發(fā)明屬于無線信號傳輸技術領域,涉及一種數(shù)據(jù)處理解析的算法,具體涉及一種處理無線遠傳空中碼流的可靠性方法。
背景技術:
目前,國內大部分地區(qū)使用人工抄表方式,這種工作人員挨家挨戶的抄表方式導致了巨大的工作量,且不能保證數(shù)據(jù)的準確性和時效性,提高了抄表的成本,直接影響燃氣公司的效益。信息化的發(fā)展推動著自動抄表系統(tǒng)的產生,現(xiàn)有的自動抄表方案主要是通過鋪設有線電纜,但復雜的現(xiàn)實環(huán)境對鋪設電纜限制很大,且已經(jīng)存在的小區(qū)需要重新鋪設線纜也不現(xiàn)實。無線抄表方案可以有效的傳輸數(shù)據(jù),又可以避免鋪設電纜的麻煩,因此具有極強的實用性,極大地降低了安裝和運營的成本,具有安裝管理方便、維護成本低、網(wǎng)絡設置靈活等優(yōu)點,極具推廣的價值。
隨著RF無線遠傳技術的日漸成熟,國內也興起了許多致力于無線遠傳模塊研發(fā)的無線通信技術公司,也為客戶帶來了許多無線傳輸系統(tǒng)方案。但是各個公司采用的數(shù)據(jù)協(xié)議是不一樣的,各種模塊的之間的兼容性并不是很好。本發(fā)明就無線遠傳抄系統(tǒng)給出了一種處理無線遠傳空中碼流的可靠性算法,采用MCU控制接受模塊接收處理數(shù)據(jù)信號,可兼容許多無線發(fā)射模塊的數(shù)據(jù)格式,主要運用于數(shù)據(jù)碼流中的同步碼的識別與真實數(shù)據(jù)的接收處理及反饋。
技術實現(xiàn)要素:
本發(fā)明的目的是為了克服不同的無線遠傳發(fā)射端的不同數(shù)據(jù)格式與協(xié)議,提供一種處理無線遠傳空中碼流的可靠性方法。在接收端利用本發(fā)明方法能同步識別出一串數(shù)據(jù)碼流中的同步碼流,從而實現(xiàn)真實數(shù)據(jù)的接收、存儲與反饋。
本發(fā)明解決其技術問題所采用的技術方案包括如下步驟:
步驟1、發(fā)射端發(fā)送數(shù)據(jù);
步驟2、接收端接收數(shù)據(jù)后,對接收的數(shù)據(jù)進行如下處理:表具編號的同步識別、真實數(shù)據(jù)的提取分離以及反饋數(shù)據(jù)信號的發(fā)送;
2-1.表具編號的同步識別
接收端的接收模塊在接收到無線發(fā)射端的數(shù)據(jù)流信號后,產生一個同步時鐘用于接收數(shù)據(jù)流信號,并將該同步時鐘發(fā)送給單片機;數(shù)據(jù)流信號經(jīng)接收端的數(shù)據(jù)解析模塊解析后,通過數(shù)據(jù)解析模塊的一個IO口輸出至單片機,單片機將同步時鐘作為中斷來采集解析后的數(shù)據(jù)流信號,對數(shù)據(jù)流信號同步出表具編號,具體同步過程如下:
2-1-1.由于無線發(fā)射端的表號都帶校驗位,校驗位加上數(shù)據(jù)位為9位,而接收端接收機制為每8位數(shù)據(jù)組成一個字節(jié)存儲,因此接收的數(shù)據(jù)將永遠無法同步到表號,故先設置對比表號:該對比表號的格式設置為帶校驗位的表號,按照8位接收機制所接收到的格式;
2-1-2.設置數(shù)據(jù)接收端中的存儲模塊機制,由于表號總共的BIT位數(shù)為:5字節(jié)*9位=45位,因此數(shù)據(jù)接收端中的存儲模塊機制設置如下:
首先,定義一個45位的結構體空間BIT0-BIT44,將該結構體空間與6個字節(jié)的數(shù)組聯(lián)合,則結構體空間中BIT0-BIT7就等同于數(shù)組[0],結構體空間BIT8-BIT15就等同于數(shù)組[1],BIT16-BIT23就等同于數(shù)組[2],以此類推。
其次,單片機將同步時鐘作為中斷,每次同步時鐘上升沿觸發(fā)一次中斷,單片機接收數(shù)據(jù)流信號中的一位數(shù)據(jù),并將該數(shù)據(jù)存儲在結構體空間的BIT44中,然后將整個結構體空間的內容整體右移,也就是BTT1賦值給BIT0,BIT2賦值給BIT1,BIT3賦值給BIT2.....直到BIT44賦值給BIT43,從而完成一次整體右移。
最后,當接收完45個BIT位時,將接收到的這六個字節(jié)的數(shù)組與之前設定的表號標準的六個字節(jié)進行比較。若比較相同,則表示表號正確接收并已經(jīng)同步;若比較不通過,則繼續(xù)整體右移然后接收BIT數(shù)據(jù)位,接收一位后繼續(xù)比較,構成檢測同步表號的循環(huán),直到能比較同步到正確的表號;
2-2.真實數(shù)據(jù)的提取分離
根據(jù)上海無線遠傳協(xié)議的數(shù)據(jù)格式,表號之后為帶校驗位的兩個字節(jié)0x01與0xfe,那么當同步到每個表號時,將跳出同步表號的循環(huán),轉而接收兩個字節(jié)的數(shù)據(jù)。具體過程如下:
設定兩個標志位A與B;當同步到表號時,將標志位A、B置位;當單片機檢測到標志位B發(fā)生置位時,則開始接收表號之后的數(shù)據(jù),并通過標志位A屏蔽中斷里同步表號的循環(huán),防止對接收表號之后的數(shù)據(jù)造成影響。
所述的接收表號之后的數(shù)據(jù)的方法如下:
由于是校驗位先發(fā),那么在接收時,單片機對檢測到的第一個中斷數(shù)據(jù)進行丟棄,并連續(xù)接收接下來的8個中斷數(shù)據(jù),則該8位數(shù)據(jù)為正常數(shù)據(jù)。然后再次重復接收,從而得到兩個8位的正常數(shù)據(jù)。
在發(fā)送端發(fā)送的數(shù)據(jù)流信號中,真實數(shù)據(jù)在其中一串表號之后,那么要提取真實數(shù)據(jù),就只要判斷在表號之后接收的數(shù)據(jù)不是0x01與0xFE,則為真實數(shù)據(jù)。當判斷表號之后的數(shù)據(jù)為0x01與0xFE時,則將標志位A與B清零,主循環(huán)不再進入接收數(shù)據(jù),檢測同步表號的循環(huán)開始同步下一個表號。至此,構成了真實數(shù)據(jù)提取分離的循環(huán)。
2-3.反饋數(shù)據(jù)信號的發(fā)送
提取到真實數(shù)據(jù)之后,接收端對發(fā)送端反饋一個正確接收到真實數(shù)據(jù),具體的:將接收端中的接收模塊配置成發(fā)送模式,根據(jù)發(fā)送端的接收協(xié)議進行相應的數(shù)據(jù)發(fā)送。當接收模塊配置成發(fā)送模式時,其原來的同步時鐘會變成自發(fā)產生,將該同步時鐘作為觸發(fā)中斷發(fā)送數(shù)據(jù)。因為發(fā)送端的數(shù)據(jù)都是要帶校驗位的,所以發(fā)送模式下的接收模塊在每次發(fā)送數(shù)據(jù)時,要在前一個中斷發(fā)送一個BIT位為1的校驗位,然后才發(fā)送接收協(xié)議的數(shù)據(jù)。當反饋數(shù)據(jù)發(fā)送完之后,再返回檢測同步表號的循環(huán),等待下一次抄表信號。
本發(fā)明有益效果如下:
本發(fā)明方法在無線數(shù)據(jù)碼流傳輸時考慮了發(fā)送端不同數(shù)據(jù)格式與數(shù)據(jù)協(xié)議對接收端數(shù)據(jù)處理的影響。這種數(shù)據(jù)處理算法能夠更好的對數(shù)據(jù)碼流進行同步碼識別,提高真實數(shù)據(jù)解析的可靠性。
本發(fā)明方法充分考慮了數(shù)據(jù)碼流的實時性及連續(xù)性。利用對碼流中的單個BIT位的操作判斷,不同的數(shù)據(jù)碼流協(xié)議只要更改同步內容即可迅速識別。
附圖說明
圖1為碼流數(shù)據(jù)移位示意圖。
圖2為程序總體框圖。
具體實施方式
下面結合附圖和實施例對本發(fā)明作進一步說明。
如圖1和2所示,一種處理無線遠傳空中碼流的可靠性方法。在接收端利用本發(fā)明方法能同步識別出一串數(shù)據(jù)碼流中的同步碼流,從而實現(xiàn)真實數(shù)據(jù)的接收、存儲與反饋。
本發(fā)明在無線遠傳空中數(shù)據(jù)碼流的解析中,以接收端數(shù)據(jù)處理為核心。具體地說,本發(fā)明支持多種數(shù)據(jù)格式與協(xié)議,可在多種應用場景下,根據(jù)發(fā)送端的數(shù)據(jù)格式對該算法稍作修改即可解析出碼流中的數(shù)據(jù)。接收端數(shù)據(jù)處理主要是以BIT位為操作單元,對碼流中的同步碼進行同步識別,并對同步碼后的真實數(shù)據(jù)進行精確抓取。
本發(fā)明是以碼流中的每個BIT位作為碼流接收與數(shù)據(jù)處理的基本單元,能夠在空中數(shù)據(jù)流信號中同步出需要的數(shù)據(jù),并且同步碼可根據(jù)發(fā)射端協(xié)議自由設定。在無線模塊對空中信號接收解析產生數(shù)據(jù)流信號之后,根據(jù)無線遠傳發(fā)射端的數(shù)據(jù)協(xié)議,接收端將自行設定同步碼,并對數(shù)據(jù)流信號進行數(shù)據(jù)同步識別,一旦數(shù)據(jù)同步正確并且識別到同步碼后面的真實數(shù)據(jù),那么接收端將返回一個表示正確接收到真實數(shù)據(jù)的反饋信號;所述的同步碼實際開發(fā)時為表具編號,也可運用于不同場合的不同編號;
本發(fā)明基于“上海無線遠傳協(xié)議1.0”具體如下:
1.上海無線遠傳協(xié)議1.0
該協(xié)議是基于RF無線遠傳抄表功能而定制,抄表機制為點抄,每個表具都有一個特定的表具編號,作為抄表器抄寫表具數(shù)據(jù)時發(fā)送抄表信號中的同步碼,抄表信號的格式如下:
10101010...+表具編號+0x01+0xFE+10101010...+表具編號+0x01+0xFE+...........+10101010...+表具編號+真實數(shù)據(jù)以上表具編號、0x01、0xFE與真實數(shù)據(jù)都帶1位的校驗位,校驗位都為1。
本發(fā)明包括如下步驟:
步驟1、發(fā)射端發(fā)送數(shù)據(jù);
步驟2、接收端接收數(shù)據(jù)后,對接收的數(shù)據(jù)進行如下處理:表具編號的同步識別、真實數(shù)據(jù)的提取分離以及反饋數(shù)據(jù)信號的發(fā)送;
2-1.表具編號的同步識別
接收端的接收模塊在接收到無線發(fā)射端的數(shù)據(jù)流信號后,產生一個同步時鐘用于接收數(shù)據(jù)流信號,并將該同步時鐘發(fā)送給單片機;數(shù)據(jù)流信號經(jīng)接收端的數(shù)據(jù)解析模塊解析后,通過數(shù)據(jù)解析模塊的一個IO口輸出至單片機,單片機將同步時鐘作為中斷來采集解析后的數(shù)據(jù)流信號,對數(shù)據(jù)流信號同步出表具編號,具體同步過程如下:
2-1-1.由于無線發(fā)射端的表號都帶校驗位,校驗位加上數(shù)據(jù)位為9位,而接收端接收機制為每8位數(shù)據(jù)組成一個字節(jié)存儲,因此接收的數(shù)據(jù)將永遠無法同步到表號,故先設置對比表號:該對比表號的格式設置為帶校驗位的表號,按照8位接收機制所接收到的格式,例如:
5位表號發(fā)送的機制為,高字節(jié)先發(fā),低位先發(fā),校驗位為1。例如:
表號第一字節(jié)為0x20,那么數(shù)據(jù)流為1 0000 0100;
表號第二字節(jié)為0x16,那么數(shù)據(jù)流為1 0110 1000;
表號第三字節(jié)為0x08,那么數(shù)據(jù)流為1 0001 0000;
表號第四字節(jié)為0x26,那么數(shù)據(jù)流為1 0110 0100;
表號第五字節(jié)為0x14,那么數(shù)據(jù)流為1 0010 1000;
由于是低位先發(fā),那么要使接收到的數(shù)據(jù)位順序正確,則必須采用右移位存儲。按8位存儲則得到如下數(shù)據(jù):
第一個八位01000001那么第一個字節(jié)為0x41;
第二個八位01011010那么第二個字節(jié)為0x5a;
第三個八位01000100那么第三個字節(jié)為0x44;
第四個八位01101000那么第四個字節(jié)為0x68;
第五個八位10010010那么第五個字節(jié)為0x92;
第六個八位00000010那么第六個字節(jié)為0x02;
這六個字節(jié)將作為對比表號。
2-1-2.設置數(shù)據(jù)接收端中的存儲模塊機制,由于表號總共的BIT位數(shù)為:5字節(jié)*9位=45位,因此數(shù)據(jù)接收端中的存儲模塊機制設置如下:
首先,定義一個45位的結構體空間BIT0-BIT44,將該結構體空間與6個字節(jié)的數(shù)組聯(lián)合,則結構體空間中BIT0-BIT7就等同于數(shù)組[0],結構體空間BIT8-BIT15就等同于數(shù)組[1],BIT16-BIT23就等同于數(shù)組[2],以此類推。
其次,單片機將同步時鐘作為中斷,每次同步時鐘上升沿觸發(fā)一次中斷,單片機接收數(shù)據(jù)流信號中的一位數(shù)據(jù),并將該數(shù)據(jù)存儲在結構體空間的BIT44中,然后將整個結構體空間的內容整體右移,也就是BTT1賦值給BIT0,BIT2賦值給BIT1,BIT3賦值給BIT2.....直到BIT44賦值給BIT43,從而完成一次整體右移。
最后,當接收完45個BIT位時,將接收到的這六個字節(jié)的數(shù)組與之前設定的對比表號的六個字節(jié)進行比較。若比較相同,則表示表號正確接收并已經(jīng)同步;若比較不通過,則繼續(xù)整體右移然后接收BIT數(shù)據(jù)位,接收一位后繼續(xù)比較,構成檢測同步表號的循環(huán),直到能比較同步到正確的表號;
2-2.真實數(shù)據(jù)的提取分離
根據(jù)上海無線遠傳協(xié)議的數(shù)據(jù)格式,表號之后為帶校驗位的兩個字節(jié)0x01與0xfe,那么當同步到每個表號時,將跳出同步表號的循環(huán),轉而接收兩個字節(jié)的數(shù)據(jù)。具體過程如下:
設定兩個標志位A與B;當同步到表號時,將標志位A、B置位;當單片機檢測到標志位B發(fā)生置位時,則開始接收表號之后的數(shù)據(jù),并通過標志位A屏蔽中斷里同步表號的循環(huán),防止對接收表號之后的數(shù)據(jù)造成影響。
所述的接收表號之后的數(shù)據(jù)的方法如下:
由于是校驗位先發(fā),那么在接收時,單片機對檢測到的第一個中斷數(shù)據(jù)進行丟棄,并連續(xù)接收接下來的8個中斷數(shù)據(jù),則該8位數(shù)據(jù)為正常數(shù)據(jù)。然后再次重復接收,從而得到兩個8位的正常數(shù)據(jù)。
在發(fā)送端發(fā)送的數(shù)據(jù)流信號中,真實數(shù)據(jù)在其中一串表號之后,那么要提取真實數(shù)據(jù),就只要判斷在表號之后接收的數(shù)據(jù)不是0x01與0xFE,則為真實數(shù)據(jù)。當判斷表號之后的數(shù)據(jù)為0x01與0xFE時,則將標志位A與B清零,主循環(huán)不再進入接收數(shù)據(jù),檢測同步表號的循環(huán)開始同步下一個表號。至此,構成了真實數(shù)據(jù)提取分離的循環(huán)。
2-3.反饋數(shù)據(jù)信號的發(fā)送
提取到真實數(shù)據(jù)之后,接收端對發(fā)送端反饋一個正確接收到真實數(shù)據(jù),具體的:將接收端中的接收模塊配置成發(fā)送模式,根據(jù)發(fā)送端的接收協(xié)議進行相應的數(shù)據(jù)發(fā)送。當接收模塊配置成發(fā)送模式時,其原來的同步時鐘會變成自發(fā)產生,將該同步時鐘作為觸發(fā)中斷發(fā)送數(shù)據(jù)。因為發(fā)送端的數(shù)據(jù)都是要帶校驗位的,所以發(fā)送模式下的接收模塊在每次發(fā)送數(shù)據(jù)時,要在前一個中斷發(fā)送一個BIT位為1的校驗位,然后才發(fā)送接收協(xié)議的數(shù)據(jù)。當反饋數(shù)據(jù)發(fā)送完之后,再返回檢測同步表號的循環(huán),等待下一次抄表信號。
實施例1:
本實施例中由一個抄表工裝與一個被抄表的主控板構成無線遠傳信號的收發(fā)終端。設定抄表工裝所抄的表號為2016082614,發(fā)送抄表信號符合“上海無線遠傳協(xié)議1.0”格式,每五秒發(fā)送一次抄表信號。接收端要同步到表號,并且識別到抄表信號后面的真實數(shù)據(jù),并返回一個抄表成功的反饋信號,抄表工裝接收到這一反饋信號后表示本次抄表成功。
圖1為本發(fā)明方法的核心,要同步出表號,那就必須要有個與接收的碼流對比的對比表號,對比表號需要根據(jù)抄表信號的數(shù)據(jù)格式與數(shù)據(jù)協(xié)議而定。抄表信號的發(fā)送格式遵從“高字節(jié)先發(fā),低位先發(fā)”的規(guī)則,那么如果接收端采用左移存八位的數(shù)據(jù)存儲方式,那么接收到的數(shù)據(jù)將無法直觀的反映出表號,反而會讓接收到的數(shù)據(jù)毫無規(guī)律可言,所以采用了右移存儲的方式,低位發(fā)過來存儲在低位,高位后發(fā)存儲在高位。
圖2為本發(fā)明的基本程序框圖,同步表號的中斷與接收表號之后的數(shù)據(jù)的中斷為同一個觸發(fā)中斷,但是這兩個接收相互屏蔽,防止在各自接收時產生相互干擾。首先,單片機開啟接收中斷,開始數(shù)據(jù)碼流的接收,單片機每收一位,存儲空間整體右移一位。當單片機第一次存儲到45個BIT位時,開始與對比表號進行對比。若對比不成功,則單片機繼續(xù)移位接收;若對比成功,則表示正確收到完整表號,單片機將跳出接收表號的中斷觸發(fā),也就是將表號接收的觸發(fā)中斷用一個標志位屏蔽,使中斷不再進入。當表號正確接收到,單片機將開啟main循環(huán)中的接收,也就是直接接收表號之后的數(shù)據(jù)。根據(jù)數(shù)據(jù)協(xié)議內容,抄表信號中的表號數(shù)據(jù)流之后緊跟著的是0x01與0xFE(帶校驗位1),而真實數(shù)據(jù)也是緊跟在表號之后,這樣就可以很明確的檢測到同步到的表號之后是不是真實數(shù)據(jù)了,根據(jù)這一原理,判斷表號之后接收的數(shù)據(jù)是否為0x01與0xFE(帶校驗位1)。如果是,說明不是真實數(shù)據(jù),繼而再同步下一串表號;如果不是,則表明接收到真實數(shù)據(jù),將模塊切換到發(fā)送模式,發(fā)送反饋信號。