现代交换实验报告(华电) - 图文(7)

2019-03-29 11:24

最大线路数,linestate为当前线路状态,linestate10为10ms前的线路状态,change为状态改变,fchange为首次变化,pulsenum为脉冲计数数组。 3.4.3主要的数据结构: 头文件:\以下的数据结构都已在该文件中定义) LINEMAX :最大线路数;

int linestate[LINEMAX],linestate10[LINEMAX]:线路从0开始编号;状态:1:有电流,0无电流;

int change[LINEMAX]:线路状态变化数组,0表示无变化,1表示有变化;

int fchange[LINEMAX]:线路首次变化数组,1表示已发生首次变化,0表示没有; int pulsenum[LINEMAX]:线路当前的脉冲值; 为方便操作,实验提供了两个预定义的函数:

int nor_op(int a,int b);int or_op(int a,int b);分别用于异或操作和或操作。 2.5实验流程及代码:

图三 脉冲检测流程图 实验代码:

#include \

31

int nor_op(int a,int b); int or_op(int a,int b);

extern \ _declspec(dllexport) void scanpulse(int linestate10[LINEMAX],int change[LINEMAX],int pulsenum[LINEMAX]) { int i; for(i=0;i

2.6 结论或总结

linestate[LINEMAX],int fchange[LINEMAX],int

1、连接运行上述程序,拨打电话时能够正常打通,说明所编的脉冲计数程序正确。 2、在程控交换系统中,脉冲计数是很重要是部分,号码的获取和脉冲计数直接相关,如果脉冲计数错误,将直接导致电话通信的失败。

3、脉冲计数实验实现的是一个8ms脉冲检测的周期级扫描,如果该函数的实现为空的话,即使位间隔识别的函数编写正确,在拨号音的情况下点击号码产生的脉冲也不能识别,从而使主叫进程得不到一个“送”上来的号码而导致拨号音超时,导致听到忙音。

4、在实验过程中,要把这次的线路状态值保存到10ms前的线路状态数组中,以便主程序周期调用。

5、我仍然遇到了上个实验的情况,并不是每次都能打通电话,更加增加了软件本身问题的可能性。

3.位间隔识别实验

3.1实验的目的与要求

增强对为间隔识别原理的掌握。 3.2实验原理

位间隔识别的目的是要识别两位号码之间的间隔,从而区分各位号码。首先来确定一下位间隔识别的扫描周期,一方面拨号盘的位间隔 ≥ 250ms,另一方面需要确定一下最长的脉冲或者间隔为多少毫秒。由于最慢的脉冲速度为每秒8个脉冲,这就是说脉冲周期T=1000/8=125ms,当断续比为3:1时,脉冲(断)时间应为125ms*3/4=93.75ms,所以位间

32

隔识别程序要能鉴别93.75ms和250ms间的间隔。一般采用96ms扫描程序来识别,位间隔识别的原理图:

图四 位间隔识别原理图

1)识别在前96ms周期内没有发生过变化。这就排除了脉冲变化的因素。因为脉冲最长间隔如前面所计算的那样为93.75ms〈 96ms;

2)识别出在此以前的最后一次变化是在96ms以前的那个周期内,这一条件可以保证在位间隔开始96ms后的第一个周期就能识别到,而且保证以后各次扫描不识别。

为此引入了“首次变化”这个变量,它标志首次遇到了“变化”。平时它为“0”,当在一个扫描周期内遇到变化后就变为“1”,在这个周期的后续时间里它都保持“1”不变。这个条件可由下面的逻辑关系来实现: 首次变化=首次变化∨变化识别。当首次变化为“0”时,只要8ms脉冲扫描的变化识别为“0”,则首次变化永远为“0”,一旦变化识别为“1”,则首次变化就变为“1”,而且以后无论变化识别如何改变都不能改变首次变化的“1”值。为确保以上“首次变化”平时为“0”,令每次96ms程序都把它清“0”,这样就写出下面的计算公式:首次变化=(首次变化∨变化识别)∧ /96

在每次96ms程序执行期间来检查“首次变化”这个变量,若为“0”,说明在前96周期内没有发生过变化;若为“1”,说明已发生变化,但这时还不能确定为何种变化,既可能为脉冲变化,也可能为位间隔变化。这就需要看下一个96ms周期,若仍有变化,则属于“脉冲变化”;若无变化,即属于“位间隔”变化(>96ms无变化)。这时在再下一个周期内仍能识别出“无变化”,但已经识别出一次了,不能再作重复识别。

33

对上面的讨论加以概括,只要识别两个变量就可以了:(1)上一个96ms周期内无变化;(2)再上一个周期内有变化就可确定为“位间隔”了。在上面的图中的“首次变化”是识别变量(1)的,首次变化=1是说明上一周期内无变化,否则有变化。上图中前次“首次变化”是识别后一个变量(2)的,前次“首次变化”是读取“首次变化”的存储内容,不过96ms读一次,读的正是再上一个周期的最后结果。前次“首次变化”=1,说明再上一个周期有过变化,否则无变化。将“首次变化”取反后与前次“首次变化”相与,结果为“1”,表示有位间隔。

值得注意的是,仅上面识别出的“位间隔”还是不够的,因为它只能说明前一次变化在96ms以前,那么用户中途挂机也可以达到这个条件,因此必须区别是“位间隔”还是“中途挂机”。区别这个很容易,只要区别一下现在用户处于挂机还是摘机状态就可以了。前者是中途挂机,后者是位间隔。方法可以是查一下当前的用户线状态,如果为“1”,说明用户已经挂机,那么识别的是“中途挂机”,否则为“位间隔”。 实验主体流程图:

图五 位间隔识别实验流程图

2.实验程序代码

34

##include \#include \#include \

extern \linestate100[LINEMAX],int pulsenum[LINEMAX],int fchange[LINEMAX],int lfchange[LINEMAX],Digitnode*head2,Digitnode* end2) { int i,j;

Digitnode *p;//号码接收队列节点指针 for(i=0;i

if( lfchange[i]&& !fchange[i] &&linestate100[i] )//判断是否为位间隔识别将其入队列 {

p=(Digitnode *)malloc(sizeof(Digitnode));//为指针申请空间 p->num=pulsenum[i];//将号码值放入队列 p->linenum=i;//将线路号放入队列 p->next=NULL;

//单链表生成及节点插入 if (head2== NULL) head2= p; else

end2 -> next = p; end2 = p;

pulsenum[i]=0;//将该线路脉冲值清0 } }

for(j=0;j

lfchange[j]=fchange[j];//将线路的首次变化存入前次首次变化 fchange[j]=0;//首次变化清0

linestate100[j] =linestate2[j]; //保存当前各扫描结果到100ms前的结果 }

return; }

//此函数不需要修改

extern \{

delete b; }

3.3结论或总结

1、连接运行上述程序,拨打电话时能够正常打通,说明所编的位间隔程序正确。

35


现代交换实验报告(华电) - 图文(7).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:九年级上学期数学备课组工作计划

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: