呵呵。我有个现成的程序,不过是用Pascal写的,用在DOS环境下。该程序也有个Delphi1的
版本,因为需要在一个386/486档次的机器上运行在Windows 3.2环境下,一般人都不愿意用
太好的机器,感觉不是太合算,用户的这种考虑也不是没有道理的,应该尊重。我来谈一下。
一、关于程控交换机计费系统
一般讲,交换机分为局用机和用户机两种,前者多为离线式计费,例如贝尔机实时话单都记录
在磁带上,每两三天下一次磁带,读入到计费用的主机上,Unix环境或Windows环境下的都有。
后者一般都是实时记费,即每个话单都实时地传到计费终端上。例如加拿大北方电讯公司、原邮电部
洛阳交换机厂、珠海电讯设备厂等生产厂家所生产的设备。可笑的是:有些小的电信局如县级局
仍然用一些用户机。
用户交换机一般用于大型集团和宾馆酒店使用,更小型的系统可用于一般单位内部交换使用。如
医院、厂矿、学校和一些小的企事业单位。除酒店使用外,一般的用户交换机对计费的要求不是
太严格,而一般的用户交换机在购买时计费系统作为选购件已经提供给用户,绝大部分情况下是
可以满足用户需求的。唯有酒店使用的交换机意义不太一样,往往厂家提供的系统不能满足用户
的需求。因为酒店对交换机的要求有一些特别的地方,例如旅客可以通过拨交换机设定的一些特
服号向酒店发出一些服务请求,例如,9099表示送一杯酒到房间,9084表示请打扫房间,等等。。
这些信息通过总机接收并送达到酒店的执行部门。
单就计费系统而言,只是对中继路由的呼叫记录提供一些记载和处理,这些系统一般通过RS-232C
实现。每种交换机是不一样的,原始的记录方式是采用一个串口打印机打印,手工进行汇总计算。
有些交换机有一台控制终端,可以设定通信参数,有些是设定好了不能变更的。
需要说明的是,有些小型交换机的BIOS中不包括话单输出模块,如果没有这些模块交换机不能输出
话单。例如珠海产的HJ系列。这种情况下需要与厂家联系,并更新Bios系统。一般说明书上提供有
详细说明,说明Bios版本号,并提示是否有输出话单的功能。
最后一点是需要向提供中继线的电信部门咨询是否提供中继线的反极信号用于向交换机指示此话务
已提交或结束,否则一个占线的呼叫也会计费。
二、关于硬件连接
当然几乎所有的计费终端都是通过RS-232C连接的,而且速率一般很低,我接触到的十多种交换机最
高的通讯速率才2400bps,在这种连接下100M的距离通讯没有任何问题。如果达到300M以上则需要接
驳光隔离长线收发器了。这种设备很廉价,一般200-700元一对不等,只提供长距离时的阻抗匹配,
最长可将RS-232C连接延长到9KM之遥。连接这种设备时都有详细的使用说明,连接没有什么困难。但
在订购时需向供货方说明用途,用于终端的收发器和用于处长串口的收发器是不一样的。
至于9-9针、25-25针、9-25针的连接应该都不是什么问题,有很多资料上有说明。我就有一篇论文对
此有极为详尽的解释。
三、关于交换机对软件的要求
大多数情况下,计费终端的传输是单向的,即交换机向计费终端提供详话单。但有些大的酒店使用的
交换机比较高档,能够通过计费终端向交换机提供关闭或打开某些话务的功能。例如,酒店前台可以
根据情况打开或关闭某个房间的国际或国内长话功能。这种情况下是双向的。所传输的命令格式可参
阅交换机随机说明书。如果说明书已遗失的话可向厂家或有同型号交换机的用户协商。
四、关于计费软件的编制
在不同的使用环境下对串口的编程是不同的。在DOS下较为简单,一般处理思路是截获硬中断Int 0BH(Com2)
或Int 0CH(Com1)。在中断处理程序中向某个缓冲区队列填充接收到的内容,主程序从该队列中取数据。
读数据的驱动则是从Int 16H产生的,也就是说在等待键盘输入的时候才去读缓冲区。
Windows环境下相对要简单得多,16位环境下使用Com16控件,32位环境下使用Com32控件,有数据传输
时会触发相应的事件。还有一个控件根本是由Microsoft提供的,就是MSCom,在VB中使用非常方便。
如何改善程序的性能有几点提示:
1.尽可能在使话单具有由用户设定解析的功能,不要每遇到一种新的交换机、一种新的话单格式都要
修改程序。一般只关心:主叫、被叫、开始通话时间、话务长度四个字段,由用户指定一个话单中每
个字段的开始位置和结束位置。
2,呼叫开始通话时间是由交换机时间决定的。有些交换机停电后重启动时时间复零,有些交换机报告
的时间年份只有两位。这样可以使用计费终端上的时间。
3,每一个话单的处理要求的效率较高,应该对算法进行优化。例如,交换机是不能对被叫地进行说别
的。而国际、国内长话的区号又不等长,如何将一个呼叫分解为被叫地和被叫号需要高效率的算法。
这方面我有一个很高效率的算法。大概意思是取呼叫号(有些交换机要赐除出线路由号)取前6位,前加
1娈成一个长整数,与区号库中前面也加过1的索引号进行查找(用二分法)确定区号表中是还存在这个
区号,如何没有的话,也可以定下来这个区号长多少位。这样不仅可以区分国际长话、国内长话、市
话和本地网话。
4,计费方式变动是很大的。今年二月份中国电信的计费方式改了,估计下半年还得改。这样很多以前
由厂家提供的计费系统大多需要进行修改。可以设定一个通用的方式来适应各种变化。第一是每个话
务分成两部分,每个部分可以由用户来设定秒数(如市话可设为180秒和60秒,长话为0秒和6秒)。然后
两部分有不同的价格(如市话为0.2和0.1元,国内长话为0和0.07元)。
5,费率库与区号库其实是分开的,有两个费率指向:一个是标准价格,另一个是折扣价格。每个折扣
都有时段范围。除每天的折扣时段外,还有节假日折扣说明(现在中国电信已经取消了节假日优惠,我
想总有一天会恢复的),这些节假日如周六、周日还好判断,元旦、五一、国庆也好判断,只有农历春
节和伊斯兰传统节日不好判断。农历春节还稍简单一点,大不了提供一个50年的表格来查询。困难的伊
斯兰的古尔邦节和肉孜节。为找到这个算法我访问了近千个网站,最后也是用查表法搞定。
6.话单库和话费库也是分开的。若干个详话单(talk)组成一个话费单(bill)。
这个回答满意吗?