论文部分内容阅读
摘要:边界漫游是移动通信运营商经常遇到的问题。由于通信基站之间的信号边界无法正好和行政区划的边界重合,导致处于边界地带的用户经常会在没有漫游的情况下产生漫游、长途计费。本文阐述使用Delphi + SQL Server进行边界漫游情况查询,找出临近城市新增的边界基站小区,从而为返还“边界漫游”所产生话费提供依据。
关键词:边界漫游;查询
中图分类号:TP311文献标识码:A 文章编号:1009-3044(2007)17-31207-02
The Design and Implementation of Border Roaming Query System Based on Delphi
WANG Lei
(Suqian College, Suqian 223800, China)
Abstract: Mobile Telecommunications operators often commit Border Roaming. It leads to mobile users in the border strip produce roaming, Long-distance billing, where should not. This paper details querying border roaming based on Delphi and SQL Server by finding new Communication Station of adjacent cities, which provide basis of border roaming bills.
Key words: Border Roaming; Query
1 引言
众所周知手机在漫游状态下通话需加收漫游费用。由于不同区域的基站信号在边界区域交叉覆盖,导致用户的手机可能在未漫游的情况下而经由外地区的基站信号构成链路进行通信从而产生了漫游话单。若要消除边界漫游的情况就需要进行网络优化一般要从无线网络优化与计费优化两方面着手。优化网络方面可以从错开频率防止干扰、保证基站与边界距离、使用定向天线,控制基站天线角度、放射功率等方面着手。
然而基站的调整并不能彻底地解决边界漫游问题,在边界地段仍然还存在个别漫游现象 。这是因为为例保证信号的无缝覆盖就不可能完全没有信号覆盖,当边界的本地一侧基站繁忙或者信号减弱时,手机便会自动切换到临近的外埠的基站。从而出现在没有漫游的情况下产生漫游话单,反之亦然。
实践证明,随着网络的优化,网络越健全,覆盖越完整,就越容易出现边界漫游问题。我们善意假定,在边界地区(无论所处本埠还是外埠)经由外埠边界基站产生的话单均给予漫游费减免,那么我们要知道外埠处于边界的基站有多少个小区(CELL_CI),我们可能从其它途径已经获知一部分小区号,而由于网路经常会有维护,从而增减或调整设备,这样一个问题出现了:如何才能及时获知新的小区号,从而提前做好相关漫游费的减免,有效避免边界漫游产生的话费纠纷,减少客户投诉,提升客户满意度。
移动设备已经对可能涉及的切换情况进行记录,根据设备号和当前日期生成文本文件保存在服务器的指定目录中。由于该文件中保存的切换记录数据量大,比如一个区域中心有20套设备每天产生的数据量大约为11万行,每天新出现的小区号可能只有一、两个甚至没有。如果用人工方式从这么多行记录文本中找到新出现的小区号无异于大海捞针。基于上述理由,使用数据库技术来管理和查询漫游切换记录是当务之急。
2 查询系统的功能构成
主窗体(含定时运行模块) 主要功能是提供程序主界面,提供软件最小化到托盘、开机自动运行、定时器功能,每间隔一段时间检查是否到达预定执行时间,到达时间则启动该程序相关功能模块。
参数配置模块该模块是系统的底层模块,被其它模块所调用。系统使用.inf文件保存程序所需要的各种配置参数,如数据文件所在FTP服务器的地址、端口号、账号、密码等信息,服务器端数据文件夹、数据文件通配格式,各功能模块的定时运行时间,SQL Server数据库服务器的地址、用户名等参数信息。模块包含参数的读取、界面显示、修改等功能。
文件下载模块。用于通过FTP方式从服务器端读取移动通信设备所产生的文本数据文件,按照给定的方式重命名保存到本机。
数据插入模块。根据配置信息中给定的数据文件格式和路径,找到文本数据文件,逐行读取并分解内容,将其插入到指定的SQL Server数据库中。
边界查询模块。将已插入数据库中的切换记录,与已知的边界小区号进行比对,从中找出新出现的小区号。根据用户的选择,可以自动或手动将新小区号插入到已知边界小区表中。
单向切换查询模块。将已插入数据库中的切换记录中查询只有从一个小区切换到另一个小区而没有对应的反向切换的情况。
3 后台数据库选择与设计
在边界小区查询系统中有大量的数据需要保存,考虑性能因素常用的桌面数据库系统(如MSAccess)难以担负重任,只能依赖大型关系型数据库系统来完成。因此,选择一种数据库管理系统也是需要考虑的一个方面。目前大型数据库的选择有多种,如IBM公司的DB2,Sybase(赛贝斯),ORACLE, MS SQL Server等。最终依据简单好用的原则,选择了员工较为熟悉的MS SQL Server。
起关键作用的数据表主要有三张:
Old_Cell:保存已知的小区边界,主要字段Cell_Lac_Ci_Adj是原始文本数据文件中CELL_LAC_ADJ与CELL_CI_ADJ内容的组合,用于唯一确定一个小区。
Exception:例外情况表,主要字段Cell_Lac_Adj,用于记录已知的本地Cell_Lac_Adj。
Org_Data:原始数据表,用于保存从文本数据文件中读取插入的切换信息。
4 系统实现的关键
本系统选用Delphi设计的根本原因,就是Delphi提供了比较完善的控件,相对于C++使用类来编程FTP以及数据访问控件、操作Excel等操作只需设置相关属性即可实现,省去冗长的代码编写过程。使得编程者可以将精力集中在程序整体布置和其它流程安排过程。
原始文本数据文件的下载
在Delphi中使用IdFTP控件来实现与数据下载,本系统主要目的是实现数据的查询,下载只是系统功能的一个子部分,要求下载部分越简明越好,因此没有直接使用WinSock接口编程。使用IdFTP控件与FTP服务器进行联系,要为IdFTP控件指明Host、Port、UserName和Password属性。再执行Connect命令即可打开FTP连接。
由于服务器端的数据文件文件夹以及数据文件格式可能会随着设备升级而发生改变,这里使用配置文件保存服务器端的路径信息和文件通配格式,设备起至编号,以便提高系统通用性。
为防止数据文件不存在而导致下载出错,使用Size函数判断服务器端路径是否存在:
if size(目标文件)>-1then
Get(目标文件,本地文件,True);
经反复测试比较,此方法效率和可靠性都较高,可有效避免下载程序出错。
文本数据读取与插入数据库
Delphi中,使用AdoCommand控件,配置好CommandText和ConnectionString即可实现数据插入。在每行数据插入之前要对CommandText中的参数进行填值,方法如下:
ADOCommand1.Parameters[0].Value := 参数的值;
填值完毕以后,执行AdoCommand1.Execute;
这一步骤是查询系统能否实施的关键。问题难点在于初期程序的执行速度一直不尽如人意。按照每天实施一次数据插入,每天的数据文件约为120个,按每个1000行文本计算,产生的记录行数应该在10万行以上,经过反复测试耗时在2-3分钟。在此期间数据库服务器在执行插入数据期间处于高负荷状态(CPU使用率和内存占用)。
为防止插入期间影响其它程序运行,数据插入改为分时段进行。即每间隔四个小时,下载一次最新的文本数据文件,然后执行数据库插入操作,这样将每次任务量较少为原先的1/6,从而有效避免了上述问题。
边界小区查询的实现
我们把产生边界切换的位置信息(CELL_LAC)和小区号(CELL_CI)组合成一个字段(CELL_LAC_CI),把切换的外埠方位置信息(CELL_LAC_ADJ)和小区号(CELL_CI_ADJ)组合成一个字段(CELL_LAC_CI_ADJ)。而我们已知本埠的小区的位置信息保存在Exception表中,已经获知的外埠小区位置信息和小区号组合保存在old_cell表中,实现边界查询的SQL语句如下:
select a.cell_lac_ci_Adj from
(selectdistinct cell_lac_ci_adj from org_data)a
where left(a.cell_lac_ci_adj,5) not in (select cell_lac_adj from Exception)
and a.cell_lac_ci_Adj not in (select cell_lac_ci_adj from old_cell)
单向切换查询的实现
表中,第一条记录和第三条记录,形成一个切换回路,视为正常。第二条记录没有与之对应的反向切换记录,可以视为异常。程序目的是找到这样的记录,并统计单向切换次数。
本程序求解思路是,将两个字段合并形成一个字段形成表a,然后将两个字段顺序对调后合并形成一个字段形成表b,如果一条记录同时出现在表a和表b中,则表明出现切换回路。本题使用not in排除回路情况,得到单向切换的记录并统计次数。相关SQL语句如下:
Select a.c as 切换信息,Count(*) as 切换次数From
( SELECT [Cell_LAC_CI] + [Cell_LAC_CI_ADJ] AS C
FROM [Mobile].[dbo].[Org_Data]
where LEFT([Cell_LAC_CI_ADJ],5) IN (select [CELL_LAC_ADJ] FROM [Mobile].[dbo].[Exception]) )a
where a.c not in
( SELECT Distinct [Cell_LAC_CI_ADJ] + [Cell_LAC_CI] AS C FROM [Mobile].[dbo].[Org_Data]
where LEFT([Cell_LAC_CI_ADJ],5) IN (select [CELL_LAC_ADJ] FROM [Mobile].[dbo].[Exception]) )b
Group by a.c
order by 1
5 总结
系统在系统WinXP以及Server 2003上调试通过,数据库版本为MS SQL Server2000,Delphi版本为7.0,完成后交由相关公司以来运行正常,能够达到预期目的。边界漫游问题是移动运营商普遍会遇到的问题,网络越健全、覆盖越完整就越容易出现边界漫游问题。以上的解决方案也适合于省际边界漫游问题。
参考文献:
[1]陈保林.边界区域GSM手机漫游问题解决思路和措施[J].Telecommunications Technology,2004,(4).
[2]郑澜.边界漫游问题的计费优化方案[J].移动通信,2003.7.
注:本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文。
关键词:边界漫游;查询
中图分类号:TP311文献标识码:A 文章编号:1009-3044(2007)17-31207-02
The Design and Implementation of Border Roaming Query System Based on Delphi
WANG Lei
(Suqian College, Suqian 223800, China)
Abstract: Mobile Telecommunications operators often commit Border Roaming. It leads to mobile users in the border strip produce roaming, Long-distance billing, where should not. This paper details querying border roaming based on Delphi and SQL Server by finding new Communication Station of adjacent cities, which provide basis of border roaming bills.
Key words: Border Roaming; Query
1 引言
众所周知手机在漫游状态下通话需加收漫游费用。由于不同区域的基站信号在边界区域交叉覆盖,导致用户的手机可能在未漫游的情况下而经由外地区的基站信号构成链路进行通信从而产生了漫游话单。若要消除边界漫游的情况就需要进行网络优化一般要从无线网络优化与计费优化两方面着手。优化网络方面可以从错开频率防止干扰、保证基站与边界距离、使用定向天线,控制基站天线角度、放射功率等方面着手。
然而基站的调整并不能彻底地解决边界漫游问题,在边界地段仍然还存在个别漫游现象 。这是因为为例保证信号的无缝覆盖就不可能完全没有信号覆盖,当边界的本地一侧基站繁忙或者信号减弱时,手机便会自动切换到临近的外埠的基站。从而出现在没有漫游的情况下产生漫游话单,反之亦然。
实践证明,随着网络的优化,网络越健全,覆盖越完整,就越容易出现边界漫游问题。我们善意假定,在边界地区(无论所处本埠还是外埠)经由外埠边界基站产生的话单均给予漫游费减免,那么我们要知道外埠处于边界的基站有多少个小区(CELL_CI),我们可能从其它途径已经获知一部分小区号,而由于网路经常会有维护,从而增减或调整设备,这样一个问题出现了:如何才能及时获知新的小区号,从而提前做好相关漫游费的减免,有效避免边界漫游产生的话费纠纷,减少客户投诉,提升客户满意度。
移动设备已经对可能涉及的切换情况进行记录,根据设备号和当前日期生成文本文件保存在服务器的指定目录中。由于该文件中保存的切换记录数据量大,比如一个区域中心有20套设备每天产生的数据量大约为11万行,每天新出现的小区号可能只有一、两个甚至没有。如果用人工方式从这么多行记录文本中找到新出现的小区号无异于大海捞针。基于上述理由,使用数据库技术来管理和查询漫游切换记录是当务之急。
2 查询系统的功能构成
主窗体(含定时运行模块) 主要功能是提供程序主界面,提供软件最小化到托盘、开机自动运行、定时器功能,每间隔一段时间检查是否到达预定执行时间,到达时间则启动该程序相关功能模块。
参数配置模块该模块是系统的底层模块,被其它模块所调用。系统使用.inf文件保存程序所需要的各种配置参数,如数据文件所在FTP服务器的地址、端口号、账号、密码等信息,服务器端数据文件夹、数据文件通配格式,各功能模块的定时运行时间,SQL Server数据库服务器的地址、用户名等参数信息。模块包含参数的读取、界面显示、修改等功能。
文件下载模块。用于通过FTP方式从服务器端读取移动通信设备所产生的文本数据文件,按照给定的方式重命名保存到本机。
数据插入模块。根据配置信息中给定的数据文件格式和路径,找到文本数据文件,逐行读取并分解内容,将其插入到指定的SQL Server数据库中。
边界查询模块。将已插入数据库中的切换记录,与已知的边界小区号进行比对,从中找出新出现的小区号。根据用户的选择,可以自动或手动将新小区号插入到已知边界小区表中。
单向切换查询模块。将已插入数据库中的切换记录中查询只有从一个小区切换到另一个小区而没有对应的反向切换的情况。
3 后台数据库选择与设计
在边界小区查询系统中有大量的数据需要保存,考虑性能因素常用的桌面数据库系统(如MSAccess)难以担负重任,只能依赖大型关系型数据库系统来完成。因此,选择一种数据库管理系统也是需要考虑的一个方面。目前大型数据库的选择有多种,如IBM公司的DB2,Sybase(赛贝斯),ORACLE, MS SQL Server等。最终依据简单好用的原则,选择了员工较为熟悉的MS SQL Server。
起关键作用的数据表主要有三张:
Old_Cell:保存已知的小区边界,主要字段Cell_Lac_Ci_Adj是原始文本数据文件中CELL_LAC_ADJ与CELL_CI_ADJ内容的组合,用于唯一确定一个小区。
Exception:例外情况表,主要字段Cell_Lac_Adj,用于记录已知的本地Cell_Lac_Adj。
Org_Data:原始数据表,用于保存从文本数据文件中读取插入的切换信息。
4 系统实现的关键
本系统选用Delphi设计的根本原因,就是Delphi提供了比较完善的控件,相对于C++使用类来编程FTP以及数据访问控件、操作Excel等操作只需设置相关属性即可实现,省去冗长的代码编写过程。使得编程者可以将精力集中在程序整体布置和其它流程安排过程。
原始文本数据文件的下载
在Delphi中使用IdFTP控件来实现与数据下载,本系统主要目的是实现数据的查询,下载只是系统功能的一个子部分,要求下载部分越简明越好,因此没有直接使用WinSock接口编程。使用IdFTP控件与FTP服务器进行联系,要为IdFTP控件指明Host、Port、UserName和Password属性。再执行Connect命令即可打开FTP连接。
由于服务器端的数据文件文件夹以及数据文件格式可能会随着设备升级而发生改变,这里使用配置文件保存服务器端的路径信息和文件通配格式,设备起至编号,以便提高系统通用性。
为防止数据文件不存在而导致下载出错,使用Size函数判断服务器端路径是否存在:
if size(目标文件)>-1then
Get(目标文件,本地文件,True);
经反复测试比较,此方法效率和可靠性都较高,可有效避免下载程序出错。
文本数据读取与插入数据库
Delphi中,使用AdoCommand控件,配置好CommandText和ConnectionString即可实现数据插入。在每行数据插入之前要对CommandText中的参数进行填值,方法如下:
ADOCommand1.Parameters[0].Value := 参数的值;
填值完毕以后,执行AdoCommand1.Execute;
这一步骤是查询系统能否实施的关键。问题难点在于初期程序的执行速度一直不尽如人意。按照每天实施一次数据插入,每天的数据文件约为120个,按每个1000行文本计算,产生的记录行数应该在10万行以上,经过反复测试耗时在2-3分钟。在此期间数据库服务器在执行插入数据期间处于高负荷状态(CPU使用率和内存占用)。
为防止插入期间影响其它程序运行,数据插入改为分时段进行。即每间隔四个小时,下载一次最新的文本数据文件,然后执行数据库插入操作,这样将每次任务量较少为原先的1/6,从而有效避免了上述问题。
边界小区查询的实现
我们把产生边界切换的位置信息(CELL_LAC)和小区号(CELL_CI)组合成一个字段(CELL_LAC_CI),把切换的外埠方位置信息(CELL_LAC_ADJ)和小区号(CELL_CI_ADJ)组合成一个字段(CELL_LAC_CI_ADJ)。而我们已知本埠的小区的位置信息保存在Exception表中,已经获知的外埠小区位置信息和小区号组合保存在old_cell表中,实现边界查询的SQL语句如下:
select a.cell_lac_ci_Adj from
(selectdistinct cell_lac_ci_adj from org_data)a
where left(a.cell_lac_ci_adj,5) not in (select cell_lac_adj from Exception)
and a.cell_lac_ci_Adj not in (select cell_lac_ci_adj from old_cell)
单向切换查询的实现
表中,第一条记录和第三条记录,形成一个切换回路,视为正常。第二条记录没有与之对应的反向切换记录,可以视为异常。程序目的是找到这样的记录,并统计单向切换次数。
本程序求解思路是,将两个字段合并形成一个字段形成表a,然后将两个字段顺序对调后合并形成一个字段形成表b,如果一条记录同时出现在表a和表b中,则表明出现切换回路。本题使用not in排除回路情况,得到单向切换的记录并统计次数。相关SQL语句如下:
Select a.c as 切换信息,Count(*) as 切换次数From
( SELECT [Cell_LAC_CI] + [Cell_LAC_CI_ADJ] AS C
FROM [Mobile].[dbo].[Org_Data]
where LEFT([Cell_LAC_CI_ADJ],5) IN (select [CELL_LAC_ADJ] FROM [Mobile].[dbo].[Exception]) )a
where a.c not in
( SELECT Distinct [Cell_LAC_CI_ADJ] + [Cell_LAC_CI] AS C FROM [Mobile].[dbo].[Org_Data]
where LEFT([Cell_LAC_CI_ADJ],5) IN (select [CELL_LAC_ADJ] FROM [Mobile].[dbo].[Exception]) )b
Group by a.c
order by 1
5 总结
系统在系统WinXP以及Server 2003上调试通过,数据库版本为MS SQL Server2000,Delphi版本为7.0,完成后交由相关公司以来运行正常,能够达到预期目的。边界漫游问题是移动运营商普遍会遇到的问题,网络越健全、覆盖越完整就越容易出现边界漫游问题。以上的解决方案也适合于省际边界漫游问题。
参考文献:
[1]陈保林.边界区域GSM手机漫游问题解决思路和措施[J].Telecommunications Technology,2004,(4).
[2]郑澜.边界漫游问题的计费优化方案[J].移动通信,2003.7.
注:本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文。