短信PDU的编码(代码)呵呵

源代码在线查看: 发送及接收短信方案.txt

软件大小: 24 K
上传用户: ahkid
关键词: PDU 短信 代码 编码
下载地址: 免注册下载 普通下载 VIP

相关代码

				现用神州大众卡:
				PUK码:54875841
				用户密码:32593207
				号码:13725323851
				
				短消息通道通讯协议
				一.编码方式要求:
				1.短消息编码方式:PDU模式。
				2.指令由ASCII字符组成,必须以7bit 方式编码。
				二.步聚
				短信操作步骤及相关命令:
				(1)设置短信格式——AT+CMGF
				(2)设置短信存储载体——AT+CPMS
				(3)设置短信接收提示方式——AT+CNMI
				(4)发送短信——AT+CMGS
				 (5) 显示短信——AT+CMGL
				1.用AT命令设置方式0(PDU模式)
				命令格式:AT+CMGF=0
				命令返回:OK
				          ERROR
				
				2.用AT命令设置短信存储载体
				命令格式:AT+CPMS=”SM”
				命令返回:+CPMS: 8,15,8,15,1,40
				           OK
				    设置成功,并显示状态:SM(SIM卡)存储器总容量为15,当前
				存储量8;ME(模块)存储器总容量为40,当前存储量1;mem1定义
				为SM;
				
				3.设置短信接收提示方式
				命令格式:AT+CNMI=[[,[,[,]]]]
				命令返回:OK
				          ERROR
				测试结果:AT+CNMI=3,2
				          OK
				如果有新的短消息来到,则gr47将自动返回下列提示: 
				+CMTI: “SM”,  
				此时读出,然后用“AT+CMGR”指令即可读出短消息内容。 
				
				4.发送短信
				命令格式:AT+CMGS=[,]
				          Text is entered
				命令返回:+CMGS:[,]
				          +CMS ERROR:
				          OK
				          ERROR
				(1).发送数据编码一般格式为:
				    [信息服务中心地址信息的长度(字节)] [服务中心地址(smsc)] [基本参数(TP-MTI/VFP)] [消息基准值(TP-MR)] [目标地址数字个数(十进制个数)] [目标地址格式(TON/NPI)] [目标地址(TP-DA)] [协议标识(TP-PID)] [用户信息编码方式(TP-DCS)]
				[有效期(TP-VP)] [用户信息长度(TP-UDL)] [用户信息(TP-UD)]
				
				 例:08 91 683108100005F0 31 00 0D 91 683125503956F9 00 08 C2 06 60A8597DFF01
				参照规范,具体分析各分段含义解释说明:(表一发送PDU 串的编制分析)
				
				08 SMSC 地址信息的长度共8 个八位字节(包括91)
				91 SMSC 地址格式(TON/NPI) 用国际格式号码(在前面加‘+’)
				   91—短信息中心号码类型。91是TON/NPI遵守International/E.164标准,指在
				   号码前需加‘+’号;此外还有其它数值,但91最常用。 
				   91—     1 0 0 1  0 0 0 1 
				   BIT No.  7 6 5 4  3 2 1 0 
				   Name 1   数值类型 号码鉴别 
				
				   数值类型(Type of Number):000—未知,001—国际,010—国内,111—留作扩展; 
				   号码鉴别(Numbering plan identification):0000—未知,0001—ISDN/电话号
				            码(E.164/E.163),1111—留作扩展;68 31 08 10 00 05 F0 SMSC 地址
				            8613800100500,补‘F’凑成偶数个
				31 基本参数(TP-MTI/VFP)---文件头字节
				   31 要求发送回复状态报告
				   11 不需
				   11&h=     0     0        0     1 0      0     0 1   &b 
				   BIT No.   7     6        5     4 3      2     1 0 
				   Name    TP-RP TP-UDHI TP-SPR  TP-VFP  TP-RD  TP-MTI 
				   Value     0     0        0     1 0      0     0 1 
				
				   应答路径—TP-RP(TP-Reply-Path):
				          0—不设置;
				          1—设置 
				   用户数据头标识—TP-UDHL(TP-User-Data-Header-Indicator):
				          0—不含任何头信息;
				          1—含头信息 
				   状态报告要求—TP-SPR(TP-Status-Report-Request): 
				          0—需要报告;
				          1—不需要报告 
				   有效期格式—TP-VPF(TP-Validity-Period-Format):
				          00—不提供(Not present);
				          10—整型(标准);
				          01—预留;
				          11—提供8位字节的一半(Semi-Octet Represented) 
				   拒绝复制—TP-RD(TP-Reject-Duplicates):
				          0—接受复制;
				          1—拒绝复制 
				   信息类型提示—TP-MTI(TP-Message-Type-Indicator):
				          00—读出(Deliver);
				          01—提交(Submit) 
				
				
				00 消息基准值(TP-MR) 0
				   永远为00 --- 分割符
				0D 目标地址数字个数共13 个十进制数
				91 目标地址格式(TON/NPI)
				   A1:国内格式(- 1ah)
				   91:国际格式(+ 19h)
				   81:未知,+86 可带可不带。
				68 31 25 50 39 56 F9 目标地址(TP-DA) 8613520593659,补‘F’凑成偶数个
				
				00 协议标识(TP-PID)(TP-Protocol-Identifier)
				   一般为00--- 普通GSM 类型,点到点方式
				   BIT No. 7 6 5 4 3 2 1 0 
				   Bit No.7与Bit No.6:00—如下面定义的分配Bit No.0—Bit No.5;
				                       01—参见GSM03.40协议标识完全定义;
				                       10—预留;
				                       11—为服务中心SC)特殊用途分配Bit No.0—Bit No.5。 
				           一般将这两位置为00。 
				   Bit No.5:0—不使用远程网络,只是短消息设备之间的协议;
				             1—使用远程网络。 
				   Bit No.4—Bits No.0:00000—隐含;
				                        00001—电传;
				                        00010—group 3 telefax;
				                        00100—语音;
				                        00101—欧洲无线信息系统(ERMES);
				                        00110—国内系统;
				                        10001—任何基于X.400的公用信息处理系统;
				                        10010—Email。 
				
				08 用户信息编码方式(TP-DCS)(TP-Data-Coding-Scheme) 
				   00:表示7-bit 编码,
				   08:表示UCS2 编码,
				   04:表示8-bit 编码。
				   BIT No. 7 6 5 4 3 2 1 0 
				   Bit No.7与Bit No.6 :一般设置为00;
				   Bit No.5:0—文本未压缩,
				             1—文本用GSM标准压缩算法压缩;
				   Bit No.4:0—表示Bit No.1、Bit No.0为保留位,不含信息类型信息,
				             1—表示Bit No.1、Bit No.0含有信息类型信息;
				   Bit No.3与Bit No.2:00—默认的字母表,
				                       01—8bit,
				                       10—USC2(16bit),
				                       11—预留;
				   Bit No.1与Bit No.0:00—Class 0,
				                       01—Class 1,
				                       10—Class 2(SIM卡特定信息),
				                       11—Class 3。 
				
				C2 有效期(TP-VP) 5 分钟
				   VP value(&h)  相应的有效期 
				   00 to 8F      (VP+1)*5 分钟 
				   90 to A7      12小时+(VP-143)*30分钟 
				   A8 to C4      (VP-166)*1天 
				   C5 to FF      (VP-192)*1 周 
				06 用户信息长度(TP-UDL)(TP-User-Data-Length) 实际长度6个字节
				60 A8 59 7D FF 01 用户信息(TP-UD)(TP-User-Data) “您好!”
				
				这里需要注意的几点:
				①.比较SMSC 地址分段:68 31 08 10 00 05 F0 与真实SMSC 地址8613800100500F(为
				   了凑足14 位,在末尾补F),不难发现只需将前者奇偶位对调即可得到后者。同样,目标地址分段68 31 25 50 39 56 F9 与实际目标地址13520593659F 之间的关系也是如此。
				②.若“SMSC 地址信息的长度”分段的值为00,则意味着SMSC 地址字符串的长度为零,
				   PDU 串的“SMSC 地址格式”段和“SMSC 地址”段将省去。且将使用SIM 卡设置的SMSC 地址。
				   上例中的PDU 串变为:
				   00 31 00 0D 91 683125503956F9 00 08 C2 06 60A8597DFF01
				③.对于用户信息长度,可通过VB 中的Len 函数求得,如“您好!”,用Len(“您好!”)
				   得到是3,那么3*2=6 即为用户信息长度06(这里要转换为16 进制,并且是两位)。
				④.用户信息(TP-UD)段最大容量是140 字节,所以在UCS2 编码方式下,可发送短消息
				   的最大字符数是70 个。
				   
				 [SCA]:服务中心地址, 广州为:91683108200005F0(每字节的高低半字节反转)
				 可以用AT指令先设置服务中心地址:AT+CSCA=”+8613800200500”
				
				(2).发送数据部分需用7Bit编码 
				例如发送"hellohello"包含了10个字符,他们必须一个个将用7-bits来代表。 
				 h(68h) e(65h)  l(6ch)  l(6ch)   o(6fh) h(68h)   e(65h) l(6ch)  l(6ch)  o(6fh) 
				104       101     108    108     111      104     101    108    108      111 
				1101000 1100101 1101100 1101100 1101111 1101000 1100101 1101100 1101100 1101111 
				
				    首先将字符转换为7位的二进制,然后,将后面字符的位调用到前面,补齐前面的差
				别。例如:h翻译成1101000,e翻译成1100101,显然h的二进制编码不足八位,那么就将
				e的最后一位(最低位)补足到h的前面(第7位)。那么就成了11101000(E8)。剩余地编码
				看下表: 
				
				1 1101000 
				00 110010 
				100 11011 
				1111 1101 
				01000 110
				100101 11 
				1101100 1 
				1 1101100 
				110111
				 
				E8 32 9B FD 46 97 D9 EC 37 
				
				那么这10个字符就变成了9个八进制数 E8 32 9B FD 46 97 D9 EC 37。 
				
				5.显示短信
				
				三.实际步聚
				1.短信操作步骤及相关命令:
				(1) 设置短信格式——AT+CMGF=0
				(2) 设置短信存储载体——AT+CPMS="sm","sm"
				(3) 设置短信接收提示方式——AT+CNMI=3,2
				(4) 发送短信——AT+CMGS=
				 (5)  显示短信——AT+CMGL
				    根据现在实标情况发送信息前段部分应为:
				  08 91 683108200005F0 11 00 0D 91 683125503956F9 00 00 60
				  08 SMSC 地址信息的长度共8 个八位字节(包括91)    
				  91 683108200005F0 服务中心地址(smsc) +8613800200500 
				  11 不要求发送回复状态报告
				  00 消息基准值(TP-MR) 永远为00 --- 分割符
				  0d 目标地址数字个数共13 个十进制数 
				  91 683125503956F9  目标地址(目的号码待定)
				  00 协议标识(TP-PID)一般为00--- 普通GSM 类型,点到点方式
				  00 用户信息编码方式(TP-DCS) 00:表示7-bit 编码,
				  60 有效期(TP-VP) 5 分钟 00 to 8F (VP+1)*5 分钟
				  把以上数据填入ff_buf[]
				  ff_buf[]={                 //共22字节
				  0x08,0x91,0x68,0x31,0x08,0x20,0x00,0x05,0xf0,0x11,0x00,0x0d,
				  0x68,0x31,0x25,0x50,0x39,0x56,0xf9,   //本部分目的号码待定
				  0x00,0x00,0x60
				  };
				2.对发送数据进行移位处理,并计算出其长度:
				(1) 按本系统短消息通道通讯协议要求,发送之数据为:
				  一般信息(ASCII字符,7bit 方式编码):
				 *XX,YYYYYYYYYY,V1,HHMMSS,S,latitude,D,longitude,G,speed,direction,DDMMYY,
				 vehicle_status#
				  确认信息:
				 *XX,YYYYYYYYYY,V4,CMD,hhmmss,HHMMSS,S,latitude,D,longitude,G,speed,direction,
				 DDMMYY,vehicle_status#
				其中:V1 一般信息
				      V4 确认信息
				      * 命令头
				      XX制造商名称,如:TH、DC、XY等。(暂定为:WL)
				      , 分隔符
				      YYYYYYYYYY车载机序列号(10位)。  (暂定为:an12345678)
				      CMD被确认的中心命令。
				      hhmmss被确认命令中的时间值
				      HHMMSS车载机时间,标准时间,与北京时间有8小时时差。
				      S:数据有效位(A/V),
				         A 表示GPS数据是有效定位数据,
				         V 表示GPS数据是无效定位数据。
				      latitude:纬度,格式DDFF.FFFF,
				                DD:纬度的度(00 ~ 90),
				                FF.FFFF:纬度的分(00.0000 ~ 59.9999),保留四位小数。
				      D:纬度标志(N:北纬,S:南纬)。
				      longitude:经度,格式DDDFF.FFFF,
				                 DDD:经度的度(000 ~ 180),
				                 FF.FFFF:经度的分(00.0000 ~ 59.9999),保留四位小数。
				      G:经度标志(E:东经,W:西经)。
				      speed:速度,范围000.00 ~ 999.99 节,保留两位小数。
				             该信息字段可能为空即longitude,G,,direction,,表示速度为0。
				      direction:方位角,正北为0度,分辨率1度,顺时针方向。
				             该信息字段可能为空如longitude,G,speed,, MMDDYY,,表示角度为0。
				      DDMMYY:日/月/年
				      vehicle_status:车辆状态,共四字节,表示车载机部件状态、车辆部件状态以及报警状态等。
				                      用ASCII字符表示16进制值,下面是该变量中各字节的每一位的具体含义,
				                      bit表示采用负逻辑,即bit=0有效。如下表所示:
				
				位序  保留	      车载机部件状态	        车辆部件状态	报警状态
				    第一字节	      第二字节	                第三字节	第四字节
				0   0 盗警	      0	GPS接收机故障	        0 车门开	0 盗警
				1   0 密码错误报警    0	保留	                0 车辆设防	0 劫警
				2   0 劫警(紧急按钮)0	保留	                0 ACC关  	0 超速报警
				3   1 保留	      0	主机掉电由后备电池供电	0 电池电压过低	0 非法点火报警
				4   0 电瓶拆除报警    1	保留	                0 电池坏	1 保留
				5   1 保留	      1	保留	                0 发动机	1 保留
				6   1 保留	      1	保留	                1 保留	        1 保留
				7   1 不用	      1	不用	                1 不用	        1 不用
				
				车载机返回GPS信息(包括HHMMSS、S、latitude、D、longitude、G、speed、direction、DDMMYY)模式:
				1、 有效信息模式:
				    该模式下车载机只返回最近的有效的GPS信息(数据有效位为“A”):若GPS定位数据有效位为“V”
				    则直接丢弃,车载机返回上次有效数据(GPS信息被冻结)。
				    软件版本号为2.20以下的安防型车载机不支持有效信息模式,物流调度型车载机不支持有效信息模式。
				2、 最新信息模式:
				    该模式下车载机始终返回最新的GPS信息而不论数据有效位为“A”或“V”,若车载机处于省电模式
				    则返回GPS断电前最后一次数据。
				    车载机第一次收到有效定位信息前(刚加电时)将自动工作于最新信息模式。
				    把要发送的信息(均为7bit ASCII字符)放入f_buf[],其结束符为"#",编程对其进行移位(依次用后字节
				之低位填入本字节之剩余高位),同时计算出其字节数n_len,存入ff_buf[22],移位之数据放入ff_buf[23]开
				始之存储单元.
				    用AT+CMGS=发送命令发送ff_buf[]内容(以0x0d,0x0f结束).(是否要加双引号?)
				
							

相关资源