程控交换实验报告

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基础实验三脉冲计数实验
一综合实验目的与要求
1.实验目的
驱动交换网络实验用来考查学生对脉冲计数原理的掌握情况。
2.实验要求
通过编写脉冲计数程序在交换仿真实验平台上运行,观察实验结果,进一步了解脉冲计数的工作原理。
二正文
1.实验设备
PC机一台,交换仿真实验平台
2.实验原理
拨号盘所发出的拨号脉冲有规定的参数。我国规定的号盘脉冲的参数有:
}
linestate200[i]=linestate[i];
}
return;
}
extern "C" _declspec(dllexport) void freenode(UpOnnode * node)
{
delete node;
}
(4)点击“编译”菜单命令或者“编译”工具按钮编译源代码,如果在结果视图中看到形成对象文件的提示(即产生***.obj),表示编译成功,,若有错误,则根据结果视图的错误信息修改源程序,知道修改完全正确
(5)点击“演示”菜单命令或者“演示”工具按钮,进入演示运行界面,进行相应的控制操作,观看正确的运行结果。
(6)点击“运行”菜单命令或者“运行”工具按钮,进入演示运行界面,进行相应的控制操作,检验完成的目标模块的逻辑正确性。如果正确的话,点击“编辑源文件”下的“保存”子菜单项保存该源文件。若出现错误,比若不能正常连接话路,则返回继续修改源代码
0/1
……
18
0/1
0/1
0/1
19
0/1
0/1
0/1
我们这个交换系统提供了三个周期性调度程度(摘挂机检测程序、脉冲识别程序和位间隔识别程序),它们的调用周期分别为200ms、10ms和100ms,所以我们系统的最小调度时间为10ms。如图所示,每隔10ms,我们就会检查这个表的一行,如果该行上某一列为1,我们就执列所对应的任务,如果为0,就什么都不做。每当执行到这个表的最后一行,调度任务会返回第一行循环执行。而你所要做的就是按照你的理解来填写这个调度表。
基础实验一时间表调度实验
一综合实验目的与要求
1.实验目的
驱动交换网络实验用来考查学生对时间表调度原理的掌握情况。
2.实验要求
通过编写时间调度表程序在交换仿真实验平台上运行,观察实验结果,进一步了解时间调度表的工作原理。
二正文
1.实验设备
PC机一台,交换仿真实验平台
2.实验原理
在程控数字交换的体系结构中,周期级程序(例如摘挂机检测程序、脉冲识别程序、位间隔识别程序)是由时间表调度实现的。所谓时间表调度,是指每经过交换系统的最短有效时间(这通常是指各周期性程序周期的最大公约数),都会检查调度表的调度要求,如果某个程序在这时需要执行,则调度程序开始执行它。
在我们的实验中,我们把前200ms的线路状态保存以备这次可以读取,同时读出这次的线路状态,把前200ms的线路状态取反与这次的线路状态相与,如果为1,就说明检测到摘机消息了。同理,我们把这次的线路状态取反再与前200ms的线路状态相与,如果为1就说明检测到挂机消息了,然后把摘挂机信号作为事件放入摘挂机队列中。
int nor_op(int a,int b)
{
if(a==b)
return 0;
else
return 1;
}
int or_op(int a,int b)
{
if((a==0)&&(b==0))
return 0;
else
return 1;
}
(4)点击“编译”菜单命令或者“编译”工具按钮编译源代码,如果在结果视图中看到形成对象文件的提示(即产生***.obj),表示编译成功,,若有错误,则根据结果视图的错误信息修改源程序,知道修改完全正确
extern "C" _declspec(dllexport) void scanfor200(int linestate200[LINEMAX], int linestate[LINEMAX],UpOnnode * head1,UpOnnode * end1)
{
int i;
UpOnnode*p;
for(i=0;i<LINEMAX;i++)
基础实验二摘挂机检测实验
一综合实验目的与要求
1.实验目的
驱动交换网络实验用来考查学生对摘挂机原理的掌握情况。
2.实验要求
通过编写摘挂机检测程序在交换仿真实验平台上运行,观察实验结果,进一步了解摘挂机的工作原理。
二正文
1.实验设备
PC机一台,交换仿真实验平台
2.实验原理
设用户在挂机状态时扫描输出为“0”,用户在摘机状态时扫描输出为“1”,摘挂机扫描程序的执行周期为200ms,那么摘机识别,就是在200ms的周期性扫描中找到从“0”到“1”的变化点,挂机识别就是在200ms的周期性扫描中找到从“1”到“0”的变化点,该原理的示意图如下所示:
3.实验内容
(1)点击“现代交换原理仿真实验系统.exe”进入实验系统
(2)点击主界面的“选择实验”菜单下的某个实验,进入该实验部分
(3)在主界面的编辑视图内完成源代码部分的编写工作,代码如下:
#include "bconstant.h"
extern "C" _declspec(dllexport) void initSchTable(int ScheduleTable[SchTabLen][SchTabWdh])
三实验总结:
这次实验组要是在仿真平台上编写程序进行仿真,要求程序具有摘挂机信号识别功能。通过四个一维数组分别存储“这次扫描”,“前一次扫描”,“这次^~前次”,“~这次^前次”,用一个单链表存储摘挂机发生事件。通过一个循环遍历所有状态,若检测到摘挂机事件的发生(“这次^~前次”为1表示摘机,“~这次^前次”为1表示挂机),则创建一个新摘挂机队列节点,赋值给该结点并将该结点链接到摘挂机队列上。
3.实验内容
(1)点击“现代交换原理仿真实验系统.exe”进入实验系统
(2)点击主界面的“选择实验”菜单下的某个实验,进入该实验部分
(3)在主界面的编辑视图内完成源代码部分的编写工作,代码如下:
#include "bconstant.h"
#include "stdio.h"
#include "malloc.h"
else if(linestate[i]==1&&linestate200[i]==0)
{ p=(UpOnnode*)malloc(sizeof(UpOnnode));
p->phonestate=ehandup;
p->linenum=i;
p->next=NULL;
end1->next=p;
end1=p;
2)拨号脉冲识别原理:
在下图中,采用了10ms的扫描周期,其中的变化识别标志了状态的变化。对于一个脉冲来说,是前沿和后沿各识别一次,我们可以任取一个来识别脉冲,下图中采用了前沿识别。从逻辑上讲,也就是说(这⊕前)∧前=!这∧前相当于前面所说的挂机识别,同样(这⊕前)∧!前=这∧!前相当于摘机识别。在这里采用比较麻烦的逻辑运算的原因是需要“变化识别”这个结果。这在位间隔识别中要用到,下面是脉冲识别原理原理示意图
{
int temp;
for (int i=0;i<LINEMAX;i++) //遍例线路
{
change[i]=nor_op(linestate[i],linestate10[i]);//当前变化识别
fchange[i]=or_op(fchange[i],change[i]); //首次变化识别
if (change[i]&&linestate[i]) //判断变化识别与前次状态是否为1
(2)点击主界面的“选择实验”菜单下的某个实验,进入该实验部分
(3)在主界面的编辑视图内完成源代码部分的编写工作,代码如下:
#include "bconstant.h"
int nor_op(int a,int b);
int or_op(int a,int b);
extern "C" _declspec(dllexport) void scanpulse(int linestate[LINEMAX],int linestate10[LINEMAX],int change[LINEMAX],int fchange[LINEMAX],int pulsenum[LINEMAX])
(6)点击“运行”菜单命令或者“运行”工具按钮,进入演示运行界面,进行相应的控制操作,检验完成的目标模块的逻辑正确性。如果正确的话,点击“编辑源文件”下的“保存”子菜单项保存该源文件。若出现错误,比若不能正常连接话路,则返回继续修改源代码
三实验总结:
这次实验组要是在仿真平台上编写程序进行仿真,要求程序具有时间表的初始化。通过一个二维数组存储时间调度表,对这个二维数组进行赋值就是初始化调度表。主要是掌握好三个周期性调度程序的周期分别是200ms、10ms和100ms所以最小调度时间是10ms,那么在摘挂机检测时数组的20行中只能有一个是1,才能保证周期是200ms,同理第二列有两个是1并且这两个相隔10。
return;
}
(4)点击“编译”菜单命令或者“编译”工具按钮编译源代码,如果在结果视图中看到形成对象文件的提示(即产生***.obj),表示编译成功,,若有错误,则根据结果视图的错误信息修改源程序,知道修改完全正确
(5)点击“演示”菜单命令或者“演示”工具按钮,进入演示运行界面,进行相应的控制操作,观看正确的运行结果。
三实验总结:
这次实验组要是在仿真平台上编写程序进行仿真,要求程序具有脉冲计数功能。主要是识别脉冲,而脉冲识别有两种方式,一种是下降沿识别,一种是上升沿识别,本次实验用的是下降沿识别脉冲。通过四个一维数组分别存储“这次扫描”,“前一次扫描”,从而计算出“变化识别(这次⊕前次)”,又与前次相与判断脉冲的下降沿,用一个int型变量存储脉冲数,每识别一个脉冲此变量加一。通过一个循环遍历所有状态,若检测到有脉冲到来(“(这次⊕前次)^前次”为1),则计数器加一,最后函数的返回值为脉冲的计数。
脉冲速度:即每秒钟送出Fra Baidu bibliotek脉冲个数,规定的脉冲速度为每秒钟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。
{
int i,j;
for(i=0;i<SchTabLen;i++)
{
ScheduleTable[i][0]=0;
ScheduleTable[i][1]=1;
ScheduleTable[i][2]=0;
}
ScheduleTable[0][0]=1;
ScheduleTable[0][2]=1;
ScheduleTable[10][2]=1;
在我们设计的实验中,用一个数组保留各线路10ms前的状态,用另一个数组保留各线路当前的状态,并且提供了保存“变化识别”的数组(以供后面的位间隔识别使用),另外提供给学生使用的是保存已检测的脉冲值的数组,学生编程检测到一个脉冲以后,就将该线路对应的脉冲值加一。
3.实验内容
(1)点击“现代交换原理仿真实验系统.exe”进入实验系统
在我们设计的时间表调度实验中,这个调度表的调度是静态的。所谓静态,是指我们的调度表是在系统初始化的时候就建立起来的,在系统运行的情况下不再改动。实验要求的就是这个调度表的初始化。这个调度表如下:
时间(10ms)/任务
0:摘挂机检测任务
1:脉冲检测任务
2:位间隔检测任务
0
0/1
0/1
0/1
1
0/1
0/1
{ if(linestate[i]==0&&linestate200[i]==1)
{ p=(UpOnnode*)malloc(sizeof(UpOnnode));
p->phonestate=ehandon;
p->linenum=i;
p->next=NULL;
end1->next=p;
end1=p;
}
pulsenum[i]=pulsenum[i]+1; //脉冲计数器加1
linestate10[i]=linestate[i];//保存当前的扫描结果到10ms前扫描结果
}
return;
}
//int nor_op(int a,int b);int or_op(int a,int b);分别用于异或操作和或操作。
(5)点击“演示”菜单命令或者“演示”工具按钮,进入演示运行界面,进行相应的控制操作,观看正确的运行结果。
(6)点击“运行”菜单命令或者“运行”工具按钮,进入演示运行界面,进行相应的控制操作,检验完成的目标模块的逻辑正确性。如果正确的话,点击“编辑源文件”下的“保存”子菜单项保存该源文件。若出现错误,比若不能正常连接话路,则返回继续修改源代码
相关文档
最新文档