电力载波及自组网射频系统中的智能家居数据传输方法_2

文档序号:9326217阅读:来源:国知局
各种设备的指令归类,进行功能说明,并进行16进制编码,指令数量不能超过64个,但是也 不要少于32个。其中,包括的协议类型为:C遥测,T遥调,K遥控,X遥信,具体功能如下所 不。





[0070] 本发明中传输协议中指令帧格式定义如表1所示
[0071] 表1.指令帧格式定义
[0073] 帧结构解析为:
[0074] Header :帧头,4Byte,下行定义为:A5A5A5A5 ;上行定义为:F0F0F0F0 ;
[0075] Length :帧长度,lByte,表示从Data_l到Data_N的字节总数。
[0076] Dev_ID :设备唯一识别码,4Byte,从 0X00000002 ~0XFFFFFFFE
[0077] In_Code :命令编码,IByte
[0078] SubDev_ID :子设备类型编码,IByte
[0079] REST :用于压缩后的剩余字节位数,取值{0,1,2},IByte.
[0080] Data_l_Data_N :指令数据,1 ~20Byte
[0081] XOR :校验和,lByte,对 Dev_ID、In_Code、SubDev_ID、REST、Data_l、Data_2、· · ·、 Data_N的逐字节异或值。
[0082] 本发明中的传输协议的压缩编码过程为:
[0083] 在电力载波与自组网射频通信传输条件下,部分传输数据进行封装后,总数据包 可能超过XX字节,需要进行分包处理。然而,一且进行分包,会导致丢包,影响对智能 家居产品的控制和用户体验。为了处理以上情况,需要对指令帧中的数据区域Data_l、 Data_2.....Data_N中的传输数据进行压缩编码处理。原有的传输数据是采用的是16进 制编码,如果采用64位编码将能降低传输数据的整体长度。因此,我们构造了如下16进制 到64进制的转换编码表(如表2所示)。
[0084] 表2. 16进制转64进制编码表

[0087] 具体可通过下述算法I :电力载波与自组网射频通信传输条件下智能家居指令的 不定长编码压缩算法给予实现。
[0088] 输入:1条指令Instruction (指令格式参见表1)
[0089] 输出:压缩后的指令New_Instruction
[0090] 步骤 1 :初始化:New_Length = 0 ;REST = 0 ;
[0091] 步骤2 :读入指令Instruction,得到Instruction中的长度Length、N个指令数据 Data_1-Data_N〇
[0092] 2. 1更新压缩后的编码长度:
[0093] 令 Int Xl = Length*2 ;
[0094] IF Xl == 0 THEN 转步骤 6 ;
[0095] ELSE New_Length = (XI MOD 3) + (Χ1/3)*2;
[0096] END IF
[0097] 2. 2将N个指令数据保存:
[0098] 定义数组Instr_Data,将N个指令数据Data_l、Data_2、· · .、Data_N依次保存在 数组 Instr_Data 中。
[0099] 定义数组New_Instr_Data,用于存储压缩后的数据。
[0100] 步骤3 :将New_Instr_Data中的数据进行压缩:16进制转换为64进制。
[0101] 3. 1依次处理,每3位16进制编码压缩为2位64进制编码。
[0102] FOR k = I TO Length/3 DO
[0103] 从Instr_Data中依次读入3个字符,假设三个字符依次为al、a2、a3,则
[0104] 令 Sum = al*16*16+a2*16+a3* ;
[0105] 令 bl = Sum/64 ;b2 = Sum MOD 64 ;
[0106] 根据表2,在编号列中查找bl,并找到bl所对应的64进制编码值cl ;
[0107] 根据表2,在编号列中查找b2,并找到b2所对应的64进制编码值c2 ;
[0108] 将cl和c2依次写入数组New_Instr_Data中。
[0109] END FOR
[0110] 3. 2还有未处理的16进制编码。
[0111] IF Length MOD 3 = = ITHEN
[0112] REST=I;
[0113] 假设读入的字符为dl,
[0114] 根据表2,在编号列中查找dl,并找到al所对应的64进制编码值c3 ;
[0115] 将 c3 写入数组 New_Instr_Data 中。
[0116] END IF
[0117] IF Length MOD 3 = = 2THEN
[0118] REST = 2 ;
[0119] 取出Instruction的最后两位字符el、e2 ;
[0120] 令 Sum I = el*16+e2* ;
[0121] 令 f I = Sum 1/64 ;f2 = SumlMOD 64 ;
[0122] 根据表2,在编号列中查找fl,并找到fl所对应的64进制编码值c4 ;
[0123] 根据表2,在编号列中查找f2,并找到f2所对应的64进制编码值c5 ;
[0124] 将c4和c5依次写入数组New_Instr_Data中D
[0125] END IF
[0126] 步骤 4 :对 Dev_ID、In_Code、SubDev_ID、REST、New_Instr_Data 中的数据依次进 行异或运算,并记录为X〇R。
[0127] 步骤5 :结合表2,将New_Length表示成1位的64进制编码数据New_Lengthl。
[0128] 步骤 6 :将 New_Lengthl、New_Instr_Data、REST、XOR 以及 Instruction 中的其它 数据,组合成一条新的指令New_Instruction。
[0129] 步骤 7 :输出 New_Instruction〇
[0130] 实例 1 :
[0131] 假设输入一条16进制指令Jnstruction = {
[0132] Header = A5A5A5A5 ;
[0133] Length = 000A ;
[0134] Dev-ID = 00000004 ;
[0135] In-Code = 2B ;
[0136] SubDev-ID = 33 ;
[0137] REST = 0 ;
[0138] Data-I-Data-N = {56,03,23,a3,31,4c,30,48,10,53};
[0139] XOR = 0 ;}
[0140] 将 Instruction 输入到算法 1,
[0141] New-Length = 20, New-Length = 14 ;REST = 2 ;
[0142] 可以将 Data_l -Data_N 存储为:
[0143] Re-Data[20] = {5,6,0, 3, 2, 3, a,3, 3,1,4, c,3,0,4,8,1,0, 5, 3};
[0144] 5,6,0 - 21,32 - xO ;3, 2, 3 - 12, 35 - cz ;a,3, 3 - 40, 51 - EP ; 1,4,c - 5, i2 m
[0145] 3,0,4 - 12,4 - c4 ;8,1,0 - 32,1 - wl ;5,3 - Ij ;
[0146] New-Instr-Data[14] = {x0, cz,EP,5i,c4, wl,I j};
[0147] 最终得到指令Instruction的压缩结果为:New_Instruction = {
[0148] Header = A5A5A5A5 ;
[0149] Length = e ;
[0150] Dev-ID = 00000004 ;
[0151] In-Code = 2B ;
[0152] SubDev-ID = 33 ;
[0153] REST = 2 ;
[0154] Data_l-Data_N = {x0, cz,EP,5i,c4, wl,I j};
[0155] XOR = I ;}
[0156] 在表1中,有一个标识字节REST,用于记录解压时最后需要保留的字符位数。结合 表1的指令定义,可以设计一个传输协议的压缩编码算法。该算法可以对不定长的16进制 编码进行压缩,每3位16进制数可以压缩成2位64进制数。压缩率达到2/3 = 66%。
[0157] 可通过下述算法2电力载波与自组网射频通信传输条件下智能家居指令的不定 长压缩解码算法
当前第2页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1