程控交换实验报告
基础实验一 时间表调度实验
一 综合实验目的与要求
1. 实验目的 驱动交换网络实验用来考查学生对时间表调度原理的掌握情况。 2. 实验要求 通过编写时间调度表程序在交换仿真实验平台上运行,观察实验结果,进一步了解时间调度表的工作原理。
二 正文
1. 实验设备
PC 机一台,交换仿真实验平台 2.实验原理
在程控数字交换的体系结构中,周期级程序(例如摘挂机检测程序、脉冲识别程序、位间隔识别程序)是由时间表调度实现的。所谓时间表调度,是指每经过交换系统的最短有效时间(这通常是指各周期性程序周期的最大公约数),都会检查调度表的调度要求,如果某个程序在这时需要执行,则调度程序开始执行它。
在我们设计的时间表调度实验中,这个调度表的调度是静态的。所谓静态,是指我们的调度表是在系统初始化的时候就建立起来的,在系统运行的情况下不再改动。 实验要求的就是这个调度表的初始化。这个调度表如下:
我们这个交换系统提供了三个周期性调度程度(摘挂机检测程序、脉冲识别程序和位间隔识别程序),它们的调用周期分别为200ms 、10ms 和100ms ,所以我们系统的最小调度时间为10ms 。如图所示,每隔10ms, 我们就会检查这个表的一行,如果该行上某一列为1,我们就执列所对应的任务,如果为0,就什么都不做。每当执行到这个表的最后一行,调度任务会返回第一行循环执行。而你所要做的就是按照你的理解来填写这个调度表。 3. 实验内容
(1)点击“现代交换原理仿真实验系统.exe”进入实验系统
(2)点击主界面的“选择实验”菜单下的某个实验,进入该实验部分 (3)在主界面的编辑视图内完成源代码部分的编写工作,代码如下: #include "bconstant.h" extern "C" _declspec(dllexport) void initSchTable(int ScheduleTable[SchTabLen][SchTabWdh])
{
int i,j;
for(i=0;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; return; }
(4)点击“编译”菜单命令或者“编译”工具按钮编译源代码,如果在结果视图中看到形成对象文件的提示(即产生***.obj),表示编译成功,, 若有错误,则根据结果视图的错误信息修改源程序,知道修改完全正确
(5)点击“演示”菜单命令或者“演示”工具按钮,进入演示运行界面,进行相应的控
制操作,观看正确的运行结果。
(6)点击“运行”菜单命令或者“运行”工具按钮,进入演示运行界面,进行相应的控
制操作,检验完成的目标模块的逻辑正确性。如果正确的话,点击“编辑源文件”下的“保存”子菜单项保存该源文件。若出现错误,比若不能正常连接话路,则返回继续修改源代码
三 实验总结:
这次实验组要是在仿真平台上编写程序进行仿真,要求程序具有时间表的初始化。通过一个二维数组存储时间调度表,对这个二维数组进行赋值就是初始化调度表。主要是掌握好三个周期性调度程序的周期分别是200ms 、10ms 和100ms 所以最小调度时间是10ms ,那么在摘挂机检测时数组的20行中只能有一个是1,才能保证周期是200ms ,同理第二列有两个是1并且这两个相隔10。
基础实验二 摘挂机检测实验
一 综合实验目的与要求
1. 实验目的 驱动交换网络实验用来考查学生对摘挂机原理的掌握情况。 2. 实验要求 通过编写摘挂机检测程序在交换仿真实验平台上运行,观察实验结果,进一步了解摘挂机的工作原理。
二 正文
1. 实验设备
PC 机一台,交换仿真实验平台 2.实验原理
设用户在挂机状态时扫描输出为“0”,用户在摘机状态时扫描输出为“1”,摘挂机扫描程序的执行周期为200ms ,那么摘机识别,就是在200ms 的周期性扫描中找到从“0”到“1”的变化点,挂机识别就是在200ms 的周期性扫描中找到从“1”到“0”的变化点,该原理的示意图如下所示:
在我们的实验中,我们把前200ms 的线路状态保存以备这次可以读取,同时读出这次的线路状态,把前200ms 的线路状态取反与这次的线路状态相与,如果为1,就说明检测到摘机消息了。同理,我们把这次的线路状态取反再与前200ms 的线路状态相与,如果为1就说明检测到挂机消息了,然后把摘挂机信号作为事件放入摘挂机队列中。
3. 实验内容
(1)点击“现代交换原理仿真实验系统.exe”进入实验系统
(2)点击主界面的“选择实验”菜单下的某个实验,进入该实验部分 (3)在主界面的编辑视图内完成源代码部分的编写工作,代码如下: #include "bconstant.h" #include "stdio.h" #include "malloc.h"
extern "C" _declspec(dllexport) void scanfor200(int linestate200[LINEMAX], int
linestate[LINEMAX],UpOnnode * head1,UpOnnode * end1) {
int i; UpOnnode*p;
for(i=0;i
{ 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; }
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; } linestate200[i]=linestate[i]; }
return; }
extern "C" _declspec(dllexport) void freenode(UpOnnode * node) { delete node; }
(4)点击“编译”菜单命令或者“编译”工具按钮编译源代码,如果在结果视图中看到
形成对象文件的提示(即产生***.obj),表示编译成功,, 若有错误,则根据结果视图的错误信息修改源程序,知道修改完全正确
(5)点击“演示”菜单命令或者“演示”工具按钮,进入演示运行界面,进行相应的控
制操作,观看正确的运行结果。
(6)点击“运行”菜单命令或者“运行”工具按钮,进入演示运行界面,进行相应的控
制操作,检验完成的目标模块的逻辑正确性。如果正确的话,点击“编辑源文件”下的“保存”子菜单项保存该源文件。若出现错误,比若不能正常连接话路,则返回继续修改源代码
三 实验总结:
这次实验组要是在仿真平台上编写程序进行仿真,要求程序具有摘挂机信号识别功能。通过四个一维数组分别存储“这次扫描”,“前一次扫描”,“这次^~前次”,“~这次^前次”,用一个单链表存储摘挂机发生事件。通过一个循环遍历所有状态,若检测到摘挂机事件的发生(“这次^~前次”为1表示摘机,“~这次^前次”为1表示挂机),则创建一个新摘挂机队列节点,赋值给该结点并将该结点链接到摘挂机队列上。
基础实验三脉冲计数实验
一 综合实验目的与要求
1. 实验目的 驱动交换网络实验用来考查学生对脉冲计数原理的掌握情况。 2. 实验要求 通过编写脉冲计数程序在交换仿真实验平台上运行,观察实验结果,进一步了解脉冲计数的工作原理。
二 正文
1. 实验设备
PC 机一台,交换仿真实验平台 2.实验原理
拨号盘所发出的拨号脉冲有规定的参数。我国规定的号盘脉冲的参数有:
脉冲速度:即每秒钟送出的脉冲个数,规定的脉冲速度为每秒钟8-16个脉冲; 脉冲断续比:即脉冲宽度(断)和间隔宽度(续)之比,规定的脉冲断续比为1:1-3:1。
1)脉冲识别程序扫描周期的确定:
为确定脉冲识别扫描的周期,需要计算出最短的变化间隔(脉冲或间隔宽度),这样才能保证每个脉冲都能够识别而不至于丢失脉冲。由于号盘每秒发出的最快脉冲个数为16个,脉冲周期T=1000/16=62.5ms,在这种情况下断续时间比为3:1时续的时间最短,为1/4*T,所以最短变化周期为1/4*(1000/16)=15.625ms,脉冲识别扫描程序的周期
在下图中,采用了10ms 的扫描周期,其中的变化识别标志了状态的变化。对于一个脉冲来说,是前沿和后沿各识别一次,我们可以任取一个来识别脉冲,下图中采用了前沿识别。从逻辑上讲,也就是说(这⊕前)∧前=!这∧前相当于前面所说的挂机识别,同样(这⊕前)∧!前=这∧!前相当于摘机识别。在这里采用比较麻烦的逻辑运算的原因是需要“变化识别”这个结果。这在位间隔识别中要用到,下面是脉冲识别原理原理示意图
在我们设计的实验中,用一个数组保留各线路10ms 前的状态,用另一个数组保留各线路当前的状态,并且提供了保存“变化识别”的数组(以供后面的位间隔识别使用),另外提供给学生使用的是保存已检测的脉冲值的数组,学生编程检测到一个脉冲以后,就将该线路对应的脉冲值加一。
3. 实验内容 (1)点击“现代交换原理仿真实验系统.exe”进入实验系统 (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]) {
int temp;
for (int i=0;i
change[i]=nor_op(linestate[i],linestate10[i]);// 当前变化识别 fchange[i]=or_op(fchange[i],change[i]); //首次变化识别
if (change[i]&&linestate[i]) //判断变化识别与前次状态是否为1 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);分别用于异或操作和或操作。 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),表示编译成功,, 若有错误,则根据结果视图的错误信息修改源程序,知道修改完全正确
(5)点击“演示”菜单命令或者“演示”工具按钮,进入演示运行界面,进行相应的控
制操作,观看正确的运行结果。
(6)点击“运行”菜单命令或者“运行”工具按钮,进入演示运行界面,进行相应的控
制操作,检验完成的目标模块的逻辑正确性。如果正确的话,点击“编辑源文件”下的“保存”子菜单项保存该源文件。若出现错误,比若不能正常连接话路,则返回继续修改源代码
三 实验总结:
这次实验组要是在仿真平台上编写程序进行仿真,要求程序具有脉冲计数功能。主要是识别脉冲,而脉冲识别有两种方式,一种是下降沿识别,一种是上升沿识别,本次实验用的是下降沿识别脉冲。通过四个一维数组分别存储“这次扫描”,“前一次扫描”,从而计算出“变化识别(这次⊕前次)”,又与前次相与判断脉冲的下降沿,用一个int 型变量存储脉冲数,每识别一个脉冲此变量加一。通过一个循环遍历所有状态,若检测到有脉冲到来(“(这次⊕前次)^前次”为1),则计数器加一,最后函数的返回值为脉冲的计数。
基础实验四 位间隔识别实验
一 综合实验目的与要求
1. 实验目的 驱动交换网络实验用来考查学生对位间隔识别原理的掌握情况。 2. 实验要求 通过编写位间隔识别程序在交换仿真实验平台上运行,观察实验结果,进一步了解位间隔的工作原理。
二 正文
1. 实验设备
PC 机一台,交换仿真实验平台 2.实验原理
位间隔识别的目的是要识别两位号码之间的间隔,从而区分各位号码。首先来确定一下位间隔识别的扫描周期,一方面拨号盘的位间隔 ≥ 250ms ,另一方面需要确定一下最长的脉冲或者间隔为多少毫秒。由于最慢的脉冲速度为每秒8个脉冲,这就是说脉冲周期T=1000/8=125ms,当断续比为3:1时,脉冲(断)时间应为125ms*3/4=93.75ms,所以位间隔识别程序要能鉴别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无变化)。这时在再下一个周期内仍能识别出“无变化”,但已经识别出一次了,不能再作重复识别。
对上面的讨论加以概括,只要识别两个变量就可以了:(1)上一个96ms 周期内无变化;(2)再上一个周期内有变化就可确定为“位间隔”了。在上面的图中的“首次变化”是识别变量(1)的,首次变化=1是说明上一周期内无变化,否则有变化。上图中前次“首次变化”是识别后一个变量(2)的,前次“首次变化”是读取“首次变化”的存储内容,不过96ms 读一次,读的正是再上一个周期的最后结果。前次“首次变化”=1,说明再上一个周期有过变化,否则无变化。将“首次变化”取反后与前次“首次变化”相与,结果为“1”,表示有位间隔。
值得注意的是,仅上面识别出的“位间隔”还是不够的,因为它只能说明前一次变化在96ms 以前,那么用户中途挂机也可以达到这个条件,因此必须区别是“位间隔”还是“中途挂机”。区别这个很容易,只要区别一下现在用户处于挂机还是摘机状态就可以了。前者是中途挂机,后者是位间隔。方法可以是查一下当前的用户线状态,如果为“1”,说明用户已经挂机,那么识别的是“中途挂机”,否则为“位间隔”。 3. 实验内容 (1)点击“现代交换原理仿真实验系统.exe”进入实验系统
(2)点击主界面的“选择实验”菜单下的某个实验,进入该实验部分 (3)在主界面的编辑视图内完成源代码部分的编写工作,代码如下: #include "stdio.h" #include "bconstant.h" #include "malloc.h" extern "C" _declspec(dllexport) void scandigit(int linestate2[LINEMAX],int 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;
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 "C" _declspec(dllexport) void freedigitnode(Digitnode * b)
{
delete b;
}
(4)点击“编译”菜单命令或者“编译”工具按钮编译源代码,如果在结果视图中看到
形成对象文件的提示(即产生***.obj),表示编译成功,, 若有错误,则根据结
果视图的错误信息修改源程序,知道修改完全正确
(5)点击“演示”菜单命令或者“演示”工具按钮,进入演示运行界面,进行相应的控
制操作,观看正确的运行结果。
(6)点击“运行”菜单命令或者“运行”工具按钮,进入演示运行界面,进行相应的控
制操作,检验完成的目标模块的逻辑正确性。如果正确的话,点击“编辑源文
件”下的“保存”子菜单项保存该源文件。若出现错误,比若不能正常连接话路,
则返回继续修改源代码
三 总结
这次实验组要是在仿真平台上编写程序进行仿真,要求程序具有位间隔识别功
能。其中应该注意的主要是弄清楚什么是位间隔和如何判断出位间隔。
位间隔是指两位号码之间的间隔,识别出位间隔便能分辨出各位号码,为间隔
的识别条件是首次变化为零,以及首次前次变化为一,而这样有两种情况,一种是
真的位间隔,另一种是用户中途挂机,要判断出不是中途挂机还得加条件:当前的
用户线状态,如果为“1”,说明用户已经挂机,那么识别的是“中途挂机”,否则为“位
间隔”。
基础实验五 软件送音实验
一 综合实验目的与要求
1. 实验目的 驱动交换网络实验用来考查学生对软件送音原理的掌握情况。 2. 实验要求
通过编写软件送音程序在交换仿真实验平台上运行,观察实验结果,进一步了
解位间隔的工作原理。
二 正文
1. 实验设备 PC 机一台,交换仿真实验平台 2.实验原理
交换机需要向用户发送各种信号音,如拨号音、忙音和回铃音等,也需要向其
他交换机发送和接收各种局间信令,如多频信号。这些信号都是音频模拟信号,而
信号设备是接在数字交换网络上的,它通过数字交换网络所提供的路由来传送。因
此这些模拟信号必须是“数字化了的”,信号音的产生不外乎单频音和双频音两种。
对于单频信号音的产生,是按照一定的时间间隔抽样、量化和编码运算,得到各抽
样点的pcm 信号,然后保存在ROM 中,在需要发送时按序发送。对于双频信号音
的产生,是取得两种信号音周期的最小公倍数,作为pcm 的抽样周期,然后保存在
ROM 中,在需要时按序取出发送。
(1)点击“现代交换原理仿真实验系统.exe”进入实验系统
(2)点击主界面的“选择实验”菜单下的某个实验,进入该实验部分
(3)在主界面的编辑视图内完成源代码部分的编写工作,代码如下:
#include "bconstant.h"
extern "C" _declspec(dllexport) int decide_ringtype(Userstate state)
{
switch(state)//选择状态
{
case caller_ehandup:// 主叫摘机
return 1;break;
case caller_calledbusy: //被叫忙
return 4;break;
case theother_firstehandon: //通话中对方先挂机
return 4;break;
case dial_timer_timeout: //拨号音超时
return 4;break;
case recvnum_timer_timeout: //收号定时器超时
return 4;break;
case connect_timer_timeout: //连接定时器超时
return 4;break;
case nulltone_timer_timeout: //空号音超时
return 4;break;
case ringback_timer_timeout: //回铃音定时器超时
return 4;break;
case busytone_timer_timeout: //忙音超时
return 5;break;
case caller_callednull: //被叫空号
return 6;break;
case called_onecallin: //(被叫)呼叫进入
return 2;break;
case caller_callconnected: //(主叫)被叫接通
return 3 ;break;
default:// 其他情况
return 0;break;
}
}
(4)点击“编译”菜单命令或者“编译”工具按钮编译源代码,如果在结果视图中看到
形成对象文件的提示(即产生***.obj),表示编译成功,, 若有错误,则根据结
果视图的错误信息修改源程序,知道修改完全正确
(5)点击“演示”菜单命令或者“演示”工具按钮,进入演示运行界面,进行相应的控
制操作,观看正确的运行结果。
(6)点击“运行”菜单命令或者“运行”工具按钮,进入演示运行界面,进行相应的控
制操作,检验完成的目标模块的逻辑正确性。如果正确的话,点击“编辑源文
件”下的“保存”子菜单项保存该源文件。若出现错误,比若不能正常连接话路,
则返回继续修改源代码
三 实验总结:
这次实验组要是在仿真平台上编写程序进行仿真,要求程序具有软件送音功能。
这个功能主要通过一个Swtich 选择语句实现,根据不同的判断条件返回不同的值,
判断条件为输入的状态类型,类型有主叫摘机,被叫忙通话中,对方先挂机等,返
回的值为int 类型的数值,软件送音程序通过这个数值调用驱动程序驱动硬件发送不
同的话音。
本次实验的编程很简单,主要难点是搞清楚那种情况该送什么音。音主要有5种:
拨号音、振铃音、空号音、回铃音、忙音、空鸣音。当主叫摘机送拨号音;被叫忙、
通话中对方先挂机、拨号音超时、收号定时器超时、连接定时器超时、空号音超时、
回铃音定时器超时都送忙音;忙音超时送空鸣音、被叫空号送空号音、(被叫)呼叫
进入送振铃音、(主叫)被叫接通送回铃音。
基础实验六 驱动交换网络实验
一. 实验目的:
驱动交换网络实验用来考查学生对T 接线器时隙交换原理的掌握情况。
二. 实验原理及设计:
在数字交换机中采用的是数字交换网络,数字交换网络的主要特点是它能够将从数字
传输设备进来的数字信号直接进行交换,而不需要数/模和模/数转换。在数字交换中,常
见的是T 接线器和S 接线器。由于基础实验中模拟的交换网络为T 接线器,所以这里将
只对T 接线器进行简单的介绍。
T接线器有输出控制方式和输入控制方式两种,不管是哪一种方式,都由话音存储器
和控制存储器两部分组成。在这里介绍一下输出控制方式,如果需要了解输入控制方式,
请参阅有关书籍。
设输入话音信号在TS50上,要求经T 接线器以后交换至TS450上去,然后输出到下
一级。CPU 根据这一要求,通过软件在控制存储器的450号单元写入“50”。这个写入是
由C PU控制进行的,因此把它叫做“控制写入”。控制存储器的读出由定时脉冲控制,
按照时隙号读出相应单元内容。话音存储器的工作方式正好和控制存储器的方式相反,
即“顺序写入,控制读出”。也就是说,由定时脉冲控制,按顺序将不同的话音信号写入
相应的单元中去。写入的单元号和时隙号一一对应。而读出时则要根据控制存储器的控
制信息而进行。由于向话音存储器输入话音信号不受CPU 控制,而输出话音信号受到由
CPU 控制的控制器的控制,因此称为“输出控制”方式。在我们的例子中,话音的输入
时隙号为50,在定时脉冲控制下就可写入到50号单元中。如前所述,CPU 在控制存储
器中的450号单元已写入了内容“50”。在定时脉冲控制下,在TS450这一时间,从控制
存储器的地址450中读出内容为“50”,把它作为话音存储器读出地址,立即读出话音存
储器的50号单元。这正好是原来在50号时隙写入的话音信号内容。因此在话音信号50
号单元读出时已经是TS450了,即已把话音信号从TS50交换到TS450,实现了时隙交
换。
在我们的驱动交换网络实验中,采用的是单T 接线器。因为在这个模拟实验中,并没
有任何的数据进行通信,所以在设计中并不存在话音存储器而只存在控制存储器。在建
立交换网络时,要求学生在通信的两个时隙对应的控制存储器相应位置写入对方的时隙
号,在拆除交换网络时,要求学生在通信的两个时隙对应的控制存储器相应位置清“0”。
在显示交换网络建立或者拆除时,外部程序将会去查这个控制存储器来“建立”连接或
者“拆除”连接,用这种方法就可以检测学生编码的正确性。
三. 实验主要数据结构:
函数功能:完成通信双方通信时隙的确定和修改。
函数原型:void connect_network(int timeslice_tnet[TIMESLICEMAX],inttimeslice1,int
timeslice2 ,int tag);
其中 TIMESLICEMAX 为一个宏定义,定义在"bconstant.h" 头文件中,表示系统可用
的最大时隙数,timeslice_tnet为一个数组,代表了交换机内的一个控存(控制存储器),
下标值(从0开始)相当于一个时隙索引,与下标值对应的数组值为与该时隙通话的时
隙,timeslice1和timeslice2为欲建立或者拆除连接的两个时隙。tag 为一个标志位,1表
示建立网络,0表示拆除网络。
(1)点击“现代交换原理仿真实验系统.exe”进入实验系统
(2)点击主界面的“选择实验”菜单下的某个实验,进入该实验部分
(3)在主界面的编辑视图内完成源代码部分的编写工作,代码如下:
#include "bconstant.h"
extern "C" _declspec(dllexport) void connect_network(int
timeslice_tnet[TIMESLICEMAX],int timeslice1,int timeslice2,int tag)
{
if(tag==0)
{ timeslice_tnet[timeslice1]=0;
timeslice_tnet[timeslice2]=0;
}
if(tag==1)
{ timeslice_tnet[timeslice1]= timeslice2;
timeslice_tnet[timeslice2]= timeslice1;
} return;
}
五.实验总结:
此次实验要求程序具有驱动交换的功能。在建立交换网络时,要求学生在通信的两
个时隙对应的控制存储器相应位置写入对方的时隙号,在拆除交换网络时,在通信的两
个时隙对应的控制存储器相应位置清“0”。tag 为标志位,当它为1时,表示建立网络,
即将timeslice1和timeslice2的通信方分别设为对方,为0时,表示拆除网络,将其通信
方都置为零。