您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 现代交换技术实验报告(全)
1基础实验一时间表调度实验1.实验内容链接:实验目的链接:实验原理及设计链接:实验主要数据结构链接:实验效果检验一.实验目的:驱动交换网络实验用来考查学生对时间表调度原理的掌握情况。二.实验原理及设计:在程控数字交换的体系结构中,周期级程序(例如摘挂机检测程序、脉冲识别程序、位间隔识别程序)是由时间表调度实现的。所谓时间表调度,是指每经过交换系统的最短有效时间(这通常是指各周期性程序周期的最大公约数),都会检查调度表的调度要求,如果某个程序在这时需要执行,则调度程序开始执行它。在我们设计的时间表调度实验中,这个调度表的调度是静态的。所谓静态,是指我们的调度表是在系统初始化的时候就建立起来的,在系统运行的情况下不再改动。实验要求的就是这个调度表的初始化。这个调度表如下:时间(10ms)\任务0:摘挂机检测任务1:脉冲检测任务2:位间隔检测任务00/10/10/110/10/10/1..............180/10/10/1190/10/10/1我们这个交换系统提供了三个周期性调度程度(摘挂机检测程序、脉冲识别程序和位间隔识别程序),它们的调用周期分别为200ms、10ms和100ms,所以我们系统的最小调度时间为10ms。如图所示,每隔10ms,我们就会检查这个表的一2行,如果该行上某一列为1,我们就执列所对应的任务,如果为0,就什么都不做。每当执行到这个表的最后一行,调度任务会返回第一行循环执行。而你所要做的就是按照你的理解来填写这个调度表。三.实验主要数据结构:函数功能:完成调度表的初始化;函数原型:initSchTable(intScheduleTable[SchTabLen][SchTabWdh]);其中SchTalLen和SchTabWdh为在bconstant.h中的宏定义:#defineSchTabLen20//代表这个调度表为20行(相邻行之间的时间间隔为10ms);#defineSchTabWdh3//代表三个周期性调度任务——0:摘挂机检测任务;1:脉冲检测任务;2:位间隔检测任务;四.实验效果检验:当调度表初始化正确时,能够进行正常的通话;如果初始化不正确,可能会造成周期性程序的不正常调用,例如位间隔调度的延迟会造成识别位间隔的延误甚至丢失。注:由于为循环程序,所以调度表的初始化方案不唯一。2.源代码#includebconstant.hexternC_declspec(dllexport)voidinitSchTable(intScheduleTable[SchTabLen][SchTabWdh]){inti;for(i=0;i=19;i++){ScheduleTable[i][0]=0;}3ScheduleTable[0][0]=1;for(i=0;i=19;i++){ScheduleTable[i][1]=1;}for(i=0;i=19;i++){ScheduleTable[i][2]=0;}ScheduleTable[0][2]=1;ScheduleTable[10][2]=1;return;}基础实验二摘挂机检测实验1.实验内容链接:实验目的链接:实验原理及设计链接:实验主要数据结构链接:实验主体流程图一.实验目的摘挂机检测实验用来考查学生对摘挂机检测原理的掌握情况。二.实验原理及设计4设用户在挂机状态时扫描输出为“0”,用户在摘机状态时扫描输出为“1”,摘挂机扫描程序的执行周期为200ms,那么摘机识别,就是在200ms的周期性扫描中找到从“0”到“1”的变化点,挂机识别就是在200ms的周期性扫描中找到从“1”到“0”的变化点,该原理的示意图如下所示:在我们的实验中,我们把前200ms的线路状态保存以备这次可以读取,同时读出这次的线路状态,把前200ms的线路状态取反与这次的线路状态相与,如果为1,就说明检测到摘机消息了。同理,我们把这次的线路状态取反再与前200ms的线路状态相与,如果为1就说明检测到挂机消息了,然后把摘挂机信号作为事件放入摘挂机队列中。三.实验主要数据结构函数功能为:检测到摘、挂机事件,并把该事件放入到摘挂机事件队列中。函数原型:voidscanfor200(intlinestate200[LINEMAX],intlinestate[LINEMAX],UpOnnode*head1,UpOnnode*end1);其中LINEMAX为线路总数,是定义在bconstant.h中的一个宏,linestate200[LINEMAX]为已保存的200ms前线路状态,linestate[LINEMAX]为当前的线路状态,head1,end1为摘挂机队列的首尾指针,该队列已经在主程序中进行了初始化。我们所要做的就是把检测到的摘挂机事件以摘挂机队列节点的形式插入到摘挂机事件队列中。数据结构说明:头文件:bconstant.h;(以下的数据结构都已在该文件中定义)LINEMAX:最大线路数;intlinestate200[LINEMAX],linestate[LINEMAX]:线路从0开始编号;状态:1:有电流,0无电流;enumUporOn{ehandup,ehandon}:为摘挂机区别符:ehandup表示摘机,ehandon表示挂机;5structUpOnnode//摘挂机队列节点结构{UporOnphonestate;//摘挂机区别符;intlinenum;//线路号(从0开始);structUpOnnode*next;//指向下一节点的指针;};注意事项:1.我们编写的模块是基础实验部分预加载的本局交换系统的一个模块而已,在系统中head1头指针和end1尾指针已经完成初始化。为方便起见,我们的摘挂机事件队列是一个包含头节点的单向链表,并且头指针指向该头节点,尾指针在初始化时也指向了该节点。所以在我们的函数编写中应保证头指针始终指向该头节点上、尾指针指向摘挂机事件队列的最末一个节点。2.注意把这次扫描的线路状态值保存在前200ms扫描线路状态数组中,以便主程周期调用。四.实验主体流程图2.源代码6externC_declspec(dllexport)voidscanfor200(intlinestate200[LINEMAX],intlinestate[LINEMAX],UpOnnode*head1,UpOnnode*end1){inti;UpOnnode*p;for(i=0;iLINEMAX;i++){if(linestate[i]&~linestate200[i]){p=newUpOnnode;p-phonestate=ehandup;p-linenum=i;p-next=0;end1-next=p;end1=p;}if(linestate200[i]&~linestate[i]){p=newUpOnnode;p-phonestate=ehandon;p-linenum=i;p-next=0;end1-next=p;end1=p;}}if(i==LINEMAX)for(i=0;iLINEMAX;i++)linestate200[i]=linestate[i];return;}7基础实验三脉冲计数实验1.实验内容链接:实验目的链接:实验原理以及实验设计链接:实验主要数据结构链接:实验主体流程图一.实验目的脉冲计数实验用来考察查学生对脉冲识别原理的掌握情况。二.实验原理以及实验设计拨号盘所发出的拨号脉冲有规定的参数。我国规定的号盘脉冲的参数有:脉冲速度:即每秒钟送出的脉冲个数,规定的脉冲速度为每秒钟8-16个脉冲;脉冲断续比:即脉冲宽度(断)和间隔宽度(续)之比,规定的脉冲断续比为1:1-3:1。1)脉冲识别程序扫描周期的确定:为确定脉冲识别扫描的周期,需要计算出最短的变化间隔(脉冲或间隔宽度),这样才能保证每个脉冲都能够识别而不至于丢失脉冲。由于号盘每秒发出的最快脉冲个数为16个,脉冲周期T=1000/16=62.5ms,在这种情况下断续时间比为3:1时续的时间最短,为1/4*T,所以最短变化周期为1/4*(1000/16)=15.625ms,脉冲识别扫描程序的周期15.625ms。2)拨号脉冲识别原理:在下图中,采用了10ms的扫描周期,其中的变化识别标志了状态的变化。对于一个脉冲来说,是前沿和后沿各识别一次,我们可以任取一个来识别脉冲,下图中采用了前沿识别。从逻辑上讲,也就是说(这⊕前)∧前=!这∧前相当于前面所说的挂机识别,同样(这⊕前)∧!前=这∧!前相当于摘机识别。在这里采用比较8麻烦的逻辑运算的原因是需要“变化识别”这个结果。这在位间隔识别中要用到,下面是脉冲识别原理原理示意图:在我们设计的实验中,用一个数组保留各线路10ms前的状态,用另一个数组保留各线路当前的状态,并且提供了保存“变化识别”的数组(以供后面的位间隔识别使用),另外提供给学生使用的是保存已检测的脉冲值的数组,学生编程检测到一个脉冲以后,就将该线路对应的脉冲值加一。三.实验主要数据结构函数功能:识别出一个脉冲,然后把该线路对应的脉冲数加一。函数原型:voidscanpulse(intlinestate[LINEMAX],intlinestate10[LINEMAX],intchange[LINEMAX],intfchange[LINEMAX],intpulsenum[LINEMAX])其中LINEMAX为最大线路数,linestate为当前线路状态,linestate10为10ms前的线路状态,change为状态改变,fchange为首次变化,pulsenum为脉冲计数数组。主要的数据结构:头文件:bconstant.h;(以下的数据结构都已在该文件中定义)LINEMAX:最大线路数;intlinestate[LINEMAX],linestate10[LINEMAX]:线路从0开始编号;状态:1:有电流,0无电流;intchange[LINEMAX]:线路状态变化数组,0表示无变化,1表示有变化;9intfchange[LINEMAX]:线路首次变化数组,1表示已发生首次变化,0表示没有;intpulsenum[LINEMAX]:线路当前的脉冲值;为方面大家操作,我们提供了两个预定义的函数:intnor_op(inta,intb);intor_op(inta,intb);分别用于异或操作和或操作。注意事项:把这次的线路状态值保存到10ms前的线路状态数组中,以便主程序周期调用。四.实验主体流程图102.源代码voidscanpulse(intlinestate[LINEMAX],intlinestate10[LINEMAX],intchange[LINEMAX],intfchange[LINEMAX],intpulsenum[LINEMAX]){inti;for(i=0;iLINEMAX;i++){change[i]=nor_op(linestate[i],linestate10[i]);fchange[i]=or_op(fchange[i],change[i]);if(change[i]&&(!linestate10[i]))pulsenum[i]=pulsenum[i]+1;}for(i=0;iLINEMAX;i++)linestate10[i]=linestate[i];return;}基础实验四位间隔识别实验1.实验内容链接:实验目的链接:实验原理及设计链接:实验主要数据结构链接:实验主体流程图一.实验目的位间隔识别实验用来考察学生对位间隔识别原理的掌握情况。二.实验原理及设计位间隔识别的目的是要识别两位号码之间的间隔,从而区分各位号码。首先来确定一下位间隔识别的扫描周期,一方面拨号盘的位间隔≥250ms,另一方面需要确定一下最长的脉冲或者间隔为多少毫秒。由于最慢的脉冲速度为每秒8个脉冲,这就是说脉冲周期T=1000/8=125ms,当断续比为3:1时,脉冲(断)时间应为11125ms*3/4=93.75ms,所以位间隔识别程序要能鉴别9
本文标题:现代交换技术实验报告(全)
链接地址:https://www.777doc.com/doc-5744504 .html