分组数据后取每组的前N条的几种方法

    面试java软件开发,今天第二天了,连着面试四家,都不太理想,今下午又栽到sql上了,好久没写sql了。呜呼,以记之。

    员工表:员工,部门,工资

    要求:查询出各部门工资最高的十个人。

    以前经常写这样的sql,时间久不写,完全不会了,忍着回忆到现在,只记得

    (1).有group by 的select 必须是聚合函数或是goup by的字段

    (2)应该先order by还是先group by,先order by 的话,想不起来了,脑子太混乱了,还有oracle的有个叫什么的专有名词,是用来分组查询的。

    既然想不起来,那就开始百度吧。先建起来数据库。点背,竟争很大啊,还是自己水平有重大问题。

首先创建库和表。

DROP DATABASE IF EXISTS company;
CREATE DATABASE company;
USE company;
CREATE TABLE `employee`(
`empno` INT(32) NOT NULL AUTO_INCREMENT,
`department` VARCHAR(64),
`salary` DOUBLE(10,2),
PRIMARY KEY(`empno`)
);
INSERT INTO EMPLOYEE(`department`,`salary`) VALUES
('B',16000.00),('B',19000.00),('A',10000.00),('A',11000.00),('A',12000.00),('B',13000.00),('B',14000.00),('D',24000.00),('D',25000.00),('B',18000.00),
('C',7000.00),('A',13000.00),('A',14000.00),('A',16000.00),('C',5000.00),('A',16000.00),('A',17000.00),('A',18000.00),('A',19000.00),('B',17000.00),
('B',10000.00),('B',11000.00),('B',12000.00),('B',15000.00),('D',26000.00),('D',26000.00),('D',27000.00),('B',15500.00),('B',16000.00),
('D',20000.00),('D',21000.00),('D',25500.00),('C',2000.00),('C',3000.00),('C',4000.00),('D',28000.00),('D',29000.00),('D',30000.00),('C',6000.00),
('C',1000.00),('C',1100.00),('D',22000.00),('D',23000.00),('C',5500.00),('C',6000.00),('C',8000.00),('C',9000.00),('A',15000.00),('A',15500.00);

下面先试验分组:我嘞个去,不会写,先回忆回忆这个逻缉是什么,第一步要干什么,第二步要干什么。

无非有三种可能的方法:

1. 先用group by 分组,分组条件不能只是 department,不然每个分组只会出现一条记录,今天就写错了,只用了department作为分组条件,自己已经知道错了,面试官还让我讲,讲一半就把我打发走了。悲剧。到现在才回忆起分组条件应加上empno,这样的话所有记录都会出来;然后对分组结果用order by salary desc排序,用limit 0,10.取每组的前十条数据。

2.先将整个表的数据按order by salary desc排序;然后用group by department,empno 分组。最后用limit 0,10取每组前10条数据。

3.有特定用法,让分组和排序同时进行,不过按道理,事情是一步一步做的,两个步骤同时进行计算机知道怎么做吗?不过隐约记得oracle有特定的用法来分组和排序的。以后再说。在MYSQL中先排除这种情况。

分析以上三种做法,先排除第三种;个人倾向于第二种。理由:感觉第一种打完组之后,再按salary排序,会把分组的结果又打乱了,得到的只是按salary排序的结果。故倾向于第二种做法。

然后优先假设第二种是正确的,开始写sql调试。

SELECT 
  et.`department` dep,
  et.`empno`,
  et.`salary` 
FROM
  (SELECT 
    e.`department`,
    e.`empno`,
    e.`salary` 
  FROM
    employee e 
  ORDER BY e.`salary` DESC) et 
GROUP BY et.`department`,
  et.`empno` ;

结果如下:

这结果说明现实和理想差距太大了,内层order by salary 排序在最终结果中完全没体现出来,可以说完全没用。怎么办,

先查看一下order by 和group by 同时在下个查询中的执行顺序吧。已经忘了。

插入一句,刚才的查询如果在严格模式下已经报错了,我的之所不报错,是在非严格模式下,现在要改成严格模式,

[mysqld]

character-set-server=utf8
default-storage-engine=INNODB
sql-mode="ONLY_FULL_GROUP_BY,NO_AUTO_VALUE_ON_ZERO,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,PIPES_AS_CONCAT,ANSI_QUOTES"
max_connections=100
explicit_defaults_for_timestamp=true

黑色字体就是设置严格模式,重启mysql后,运行上面的句子就报错了,要尽量在严格模式下运行sql。

当一个查询语句同时出现了where,group by,having,order by的时候,执行顺序和编写顺序 
使用count(列名)当某列出现null值的时候,count(*)仍然会计算,但是count(列名)不会。 
二、数据分组(group by ): 
select 列a,聚合函数(聚合函数规范) from 表名 where 过滤条件 group by 列a 
group by 字句也和where条件语句结合在一起使用。当结合在一起时,where在前,group by 在后。即先对select xx from xx的记录集合用where进行筛选,然后再使用group by 对筛选后的结果进行分组。 
三、使用having字句对分组后的结果进行筛选,语法和where差不多:having 条件表达式 
需要注意having和where的用法区别: 
1.having只能用在group by之后,对分组后的结果进行筛选(即使用having的前提条件是分组)。 
2.where肯定在group by 之前,即也在having之前。 
3.where后的条件表达式里不允许使用聚合函数,而having可以。 
四、当一个查询语句同时出现了where,group by,having,order by的时候,执行顺序和编写顺序是: 
1.执行where xx对全表数据做筛选,返回第1个结果集。 2.针对第1个结果集使用group by分组,返回第2个结果集。 
3.针对第2个结果集中的每1组数据执行select xx,有几组就执行几次,返回第3个结果集。 

4.针对第3个结集执行having xx进行筛选,返回第4个结果集。 5.针对第4个结果集排序。 

———————————————————————————————————————————————-

Group By 和 Having, Where ,Order by这些关键字是按照如下顺序进行执行的:Where, Group By, Having, Order by。

啊,实在不会,难道是第三种办法才是正确的,我真是笨极了,算了,百度去,不浪费时间了。

网上这样的例子真是一抓一大把。粗看来,一种是用相关子查询实现,另一种是连接(联表、联结、 多表联合 都是一个意思)查询(用join 和group by 实现)。

又牵连到相关子查询和非相关子查询了,上学的时候这一点都没搞通透,现在又栽在这上面了。

值得说明的是网上有多种说法,其实 相关子查询=关联子查询,说的是同一个东西

何为相关子查询?这里引用《Oracle Database 10g SQL开发指南》中的解释:

  1. 关联子查询会引用外部查询中的一列或多列。这种子查询之所以被称为关联子查询,是因为子查询的确与外部查询有关。当问题的答案需要依赖于外部查询中包含的每一行中的值时,通常就需要使用关联子查询。  


一位网友的理解:相关子查询的意思是子查询的结果集会受到主查询的影响.非相关子查询不受影响.
比如
相关子查询
select * from a where exists (select 1 from b where a.col1=b.col1)
非相关子查询 

select * from a where a.col1 in (select b.col1 from b)

另一网友:

不相关子查询是指子查询独立于外层语句(主查询),他不依赖于其外层语句的操作结果,他们执行时可分为两个独立的步骤,即先执行子查询,在执行外层查询。例如:
SELECT 姓名 FROM STUDENT WHERE入学成绩>(select avg(入学成绩) FROM STUDENT )
相关子查询时一种其子查询和外层相互交叉的数据检索方法.从概念上讲包含相关子查询的语句在执行时部能分为一先一后两个步骤.【我对这名话补充一下:相关子查询的执行依赖于外部查询的数据,外部查询执行一行,子查询就执行一次。并且是外部先查询一次,然后再执行一次内部查询!(由于他执行查询的次数多,可见他的效率并不高,可以用存储过程来代替他)】

另一位网友总结:非相关子查询和相关子查询区别
  1. 非相关子查询是独立于外部查询的子查询,子查询总共执行一次,执行完毕后将值传递给外部查询,并且它是优先于外部查询先执行的,他执行了再执行外部。
  2. 相关子查询的执行依赖于外部查询的数据,外部查询执行一行,子查询就执行一次。并且是外部先查询一次,然后再执行一次内部查询!(由于他执行查询的次数多,可见他的效率并不高,可以用存储过程来代替他)

另:相关子查询:相关子查询的执行依赖于外部查询。多数情况下是子查询的WHERE子句中引用了外部查询表。执行过程:

(1)从外层查询中取出一个元组,将元组相关的列值传给内层查询。

(2)执行内层查询,得到子查询操作的值。

(3)外查询根据子查询返回的结果或结果集得到满足条件的行

(4)然后外层查询取出下一个元组重复做步骤1-3,直到外层的元组全部处理完毕。

另:从语法要求上,EXISTS子句并不要求一定是相关子查询。但想要用EXISTS实现IN的逻辑,通常都是相关子查询。

Exists所在之处不见得都是相关子查询.这要看你的内部查询是否引用到外部的表.

执行Exists的伪代码:

select * from t1 where exists ( select * from t2 where y = x ) ;
可以理解为: 
  for x in ( select * from t1 ) 
  loop 
      if ( exists ( select * from t2 where y = x.x ) 
      then 
        OUTPUT THE RECORD 
      end if 
  end loop

(一)下面是使用相关子查询的正确的代码,

SELECT e.`department`,e.`empno`,e.`salary`
FROM employee e
WHERE 10>(SELECT COUNT(1) FROM employee et WHERE et.`department` = e.`department` AND et.`salary` > e.`salary`)
ORDER BY e.`department`,e.`salary` DESC;

我们先看一下数据库的原始记录,就是我们刚刚插入的数据。(总共49行,这里从上到下截取部分)


根据现在查询的资料和执行sql的结果,我来猜测一下该sql执行的顺序。

A.e 表查询第一行,取出 empno department salary

                                     1             B                16000.00

这条记录。

B.然后where语句就变为

where 10>(SELECT COUNT(1) FROM employee et WHERE et.`department` = 'B' AND et.`salary` >16000.00)

首先执行查询

SELECT COUNT(1) FROM employee et WHERE et.`department` = 'B' AND et.`salary` >16000.00

得到结果为3

然后where 语句就变为 

where 10>3;

而整个语句(先不考虑

ORDER BY e.`department`,e.`salary` DESC
,因为这句是最后最后才执行的)就变为

SELECT e.`department`,e.`empno`,e.`salary`
FROM employee e
WHERE 10>3;

如果sql变成这样,那不是所有记录都会查出来吗,因为10>3是一个永远符合条件的条件。

不知大家有没注意到这条sql还有一个隐含条件,就是 这个sql是在

e 表查询到第一行,取出 empno department salary

                                     1             B                16000.00

这个前提下形成的,也就是说此时,e.department='B',e.empno=1,e.salary=16000.00;所以上面的sql应是这样的: 

SELECT e.`department`,e.`empno`,e.`salary`
FROM employee e
WHERE 10>3 and 
e.`department`='B' and e.`empno`=1 and e.`salary`=16000.00;

然后根据这个sql就取出结果1             B                16000.00 这一条记录。

C.然后e表取出第二条记录 

                                      empno department salary

                                     2             B             19000.00

以后的以后就剩重复执行A步骤和B步骤,符合条件的结果就取出来,不符合的就抛弃。

我们来观察一下最后的结果,完整执行

SELECT e.`department`,e.`empno`,e.`salary`
FROM employee e
WHERE 10>(SELECT COUNT(1) FROM employee et WHERE et.`department` = e.`department` AND et.`salary` > e.`salary`);

之后,我们看结果

和理论上一致,结果是按原始记录的顺序逐条取舍的。此时并没有排序,我们再把排序第件加上,执行并查看结果

SELECT e.`department`,e.`empno`,e.`salary`
FROM employee e
WHERE 10>(SELECT COUNT(1) FROM employee et WHERE et.`department` = e.`department` AND et.`salary` > e.`salary`)
ORDER BY e.`department`,e.`salary` DESC;

举杯庆祝,得到了最后的正确结果。大二学的数据库一直没有搞透这个相关子查询(距大二已过去七年了,怀念那时的青春时光,现在什么都没有,什么都不随心愿,好孤单,好哀伤,算了算了,人生不就是这样么,有人过的好,有人过的不好,有人春风得意马蹄急,有人江枫渔火对愁眠,待好身边的人,处好身边的事,快快乐乐,少留遗憾地随时光同来同去),现在终于搞明白了,解了一个心结。

(二)下面是用连接查询实现

先自行分析一下要如何实现,用group by怎么搞,貌似也没法搞,多表连接又能怎样?笨啊,百度吧。

看完后又是一个恍然大悟,不多说写sql.额,看着明白了,一写又错了,果然纸上得来终觉浅,绝知此事要躬行。

方法A :用left join

SELECT e.`department`,e.`empno`,e.`salary`
FROM employee e
LEFT JOIN employee et
ON e.`department` = et.`department` AND e.`salary`<et.`salary`
GROUP BY e.`empno`,e.`department`,e.`salary`
HAVING COUNT(1)<10
ORDER BY e.`department`,e.`salary` DESC;

方法B:用inner join

SELECT e.`department`,e.`empno`,e.`salary`
FROM employee e
INNER JOIN employee et
ON e.`department` = et.`department` AND e.`salary`<=et.`salary`
GROUP BY e.`empno`,e.`department`,e.`salary`
HAVING COUNT(1)<=10
ORDER BY e.`department`,e.`salary` DESC;

结果全是正确的,不截图了。left join 和inner join的写法有一点点差别,在这里提一下

left join 里用e.`salary`<et. `salary`,而inner join 里用e.`salary`<=et.`salary`是因为

在left join里,最大值即使不符合e.`salary`<et. `salary`条件,也会在选取结果中,因为left join 是以左表为主的查询,

而inner join 里只有用e.`salary`<=et.`salary`才不会漏掉最大值。


关于ORACLE的,因为本机上没装,所以试验不了,先放下,记一点查到的有关用法算了

项目中用到Oracle分组查询取每组排序后的前N条记录,group by 只能返回每个组的单条统计。所以用OVER(PARTITION BY)函数

要求查询出按B字段进行分组,每组取C值最大的前3位。
查询sql为 :
select * from (
SELECT b,c,row_number() OVER(PARTITION BY b ORDER BY c desc) e FROM test_abc) t where e <= 3

生活如此多艰,对事物没有看法,事物对你也没有看法。

3月30号下午续:

今天下午面试官给我说了一个sql题:

有一员工表,按员工工资从高到低给员工排序,第一,第二......工资相同的排名相同

也不让在纸上做,想了好久没做出来。现在复盘,就利用上面的employee表做吧,看着他妈妈的还是挺简单的

SELECT empno,salary,(SELECT COUNT(1)+1 FROM employee et WHERE et.salary > e.`salary`) ranking
FROM employee e
ORDER BY ranking;

这个题稍微一变,就成了令一个题:

按员工工资从高到低,统计出每个部门员工的排行 第一,第二......(部门内工资相同的排名相同)

SELECT department,empno,salary,(SELECT COUNT(1)+1 FROM employee et WHERE et.salary > e.`salary` AND et.department = e.`department`) ranking
FROM employee e
ORDER BY department,ranking;


阅读终点,创作起航,您可以撰写心得或摘录文章要点写篇博文。去创作
  • 6
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 8
    评论
实验一 程控交换原理实验系统及控制单元实验 一、 实验目的 1、熟悉该程控交换原理实验系统的电路组成与主要部件的作用。 2、体会程控交换原理实验系统进行电话通信时的工作过程。 3、了解CPU中央集中控制处理器电路组成及工作过程。 二、 预习要求 预习《程控交换原理》与《MCS-51单片计算机原理与应用》中的有关内容。 三、 实验仪器仪表 1、主机实验箱 一台 2、三用表 一台 3、电话单机 四台 四、 实验系统电路组成 (一)电路组成 图1-1是该实验系统的原理框图 图1-1 实验系统的原理框图 图1—2是该实验系统的方框图,其电路的组成及主要作用如下: 1、用户模块电路 主要完成BORSCHT七种功能,它由下列电路组成: A、 用户线接口电路 B、 二\四线变换器 C、 PCM编译码电路 用户线接口电路 二/ 四线变换器 二/四线变换器 用户线接口电路 用户1 PCM CODEC电路 PCM CODEC电路 用户3 用户线接口电路 二/ 四线变换器 二/ 四线变换器 用户线接口电路 用户2 PCM CODEC电路 PCM CODEC电路 用户4 时钟信号电路 控制、检测电路 输出显示电路 二次稳压电路 多种信号音电路 CPU中央处理器 键盘输入电路 直流电源 图1-2 实验系统方框图 2、交换网络系统 主要完成空分交换与时隙交换两大功能,它由下列电路组成: A、空分交换网络系统 B、时隙交换网络系统 3、多种信号音电路 主要完成各种信号音的产生与发送,它由下列电路组成: A、450Hz拨号音电路 B、忙音发生电路 C、回铃音发生电路 D、25Hz振铃信号电路 4、CPU中央集中控制处理器电路 主要完成对系统电路的各种控制,信号检测,号码识别,键盘输入信息,输出显示信息等各种功能。 5、系统工作电源 主要完成系统所需要的各种电源,本实验系统中有+5V,-5V,+12V,-12V,-48V等5组电源,由下列电路组成: A、内置工作电源:+5V,+12V,-12V,-48V B、稳压电源: -8V,-5V 控制部分就是由CPU中央处理系统、输入电路(键盘)、输出电路(数码管)、双音多频DTMF检测电路、用户环路状态检测电路、自动交换网络驱动电路与交换网络转换电路、扩展电路、信号音控制电路等电路组成。 下面简要说明各部分电路的作用与要求: 1、键盘输入电路: 主要把实验过程中的一些功能通过键盘设置到系统中。 2、显示电路:  显示主叫与被叫电路的电话号码,同时显示通话时间。 3、输入输出扩展电路: 显示电路与键盘输入电路主要通过该电路进行工作。主要芯片是D8155A,SN74LS240,MC1413。 4、双音多频DTMF接收检测电路: 把MT8870DC输出的DTMF四位二进制信号,接收存贮后再送给CPU中央集中控制处理系统。 5、用户状态检测电路: 主要识别主、被叫用户的摘挂机状态,送给CPU进行处理。 6、自动交换网络驱动电路: 主要实现电话交换通信时,CPU发出命令信息,由此电路实现驱动自动交换网络系统,其核心集成电路为SN74LS374,D8255A,GD74LS373等芯片。 7、信号音控制电路: 它完全按照CPU发出的指令进行操作,使各种信号音按照系统程序进行工作。 8、振铃控制电路: 它也是按照CPU发出的指令进行工作,具体如下: (A)不振铃时,要求振铃支路与供电系统分开。 (B)振铃时,铃流送向话机,并且供电系统通过振铃支路向用户馈电,用户状态检测电路同时能检测用户的忙闲工作状态。 (C)当振铃时,用户一摘机就要求迅速断开振铃支路。 (D)振铃时要求有1秒钟振、4秒钟停的通断比。 以上是CPU中央集中控制处理系统的主要工作过程,要全面具体实现上述工作过程,则要有软件支持,该软件程序流程图见图1—4。 图1-3 键盘功能框图 对图1-3所示的键盘功能作如下介绍: “时间”: 该键可设置系统的延时时间。如久不拔号、久不应答、位间不拔号的延时,缺省值为10秒,可选择的时间值有10秒、30秒、1分钟。按一次该键则显示下一个时间值,三个值循环显示,当按下“确认”键时,就选定当显示值供系统使用,按“复位”键则清除该次时间的设定。 “会议电话”: 该键为召开电话会议的按键。电话会议设置用户1为主叫方,其他三路为被叫方,只能由主叫方主持召开会议,向其他三路发出呼叫。电路完全接通或者接通两路后,主叫方能和任一被叫方互相通话。除“复位”键外,其他键均推失去功能。会议结束后,可按“复位”键重启系统。 “中继”: 该键为局内交换切向中继交换的功能按键,按下此键,再按“确认”键进行确认,则工作模式由局内交换切换为中继交换,显示器循环显示“d”,此时方可通过中继拨打“长途”电话。按“复位”键重启系统,进入正常局内交换模式。 “确认”: 该键完成对其他功能键的确认,防止误按键,在键盘中除“复位”键外,其他功能键都必须加“确认”键才能完成所定义的功能。 “复位”: 该键为重启系统按键。在任何时候或者系统出现不正常状态时都可按下此键重启系统(有用户通话时,会中断通话),所有设置均为默认值。 图1-5是显示电路工作示意说明图。 主叫号码显示 计时显示 被叫号码显示 图1-5 显示电路 开 始 NO 有用户呼叫吗? 呼叫••••••••••••••••••••••••••••••••••••••••••• YES 去 话 接 续 向主叫送拨号音 NO 第一位号码来了吗? 拨号开始•••••••••••••••••••••••••••••••• YES 停送拨号音,收存号码 内 部 处 理 拨号完毕•••••••••••••••••••••••••••••••• 被叫闲吗? NO YES 来 话 接 续 向主叫送忙音 向被叫送铃流,向主叫送回铃音 被叫应答否? NO 主叫挂机否? 应答•••••••••••••••••••••••••••••••••••• YES 停送铃流,回铃音,接通电路 YES 话终挂机否? 挂机•••••••••••••••••••••••••••••••••••••• YES 拆线(释放复原) 结 束 图1-4 程序工作流程示意图 五、实验内容 1、测量实验系统电路板中的TP91~TP95各测量点电压值,并记录。 2、从总体上初步熟悉两部电话单机用空分交换方式进行通话。 3、初步建立程控交换原理系统及电话通信的概念。 4、观察并记录一个正常呼叫的全过程。 5、观察并记录一个不正常呼叫的状态。 图1-6 呼叫识别电路框图 五、 实验步骤 1、接上交流电源线。 2、将K11~K14,K21~K24,K31~K34,K41~K44接2,3脚;K70~K75接2,3脚;K60~K63接2,3脚。 3、先打开“交流开关”,指示发光二极管亮后,再分别按下直流输出开关J8,J9。此时实验箱上的五组电源已供电,各自发光二极管亮。 4、按 “复位”键进行一次上电复位,此时,CPU已对系统进行初始化处理,数码管循环显示“P” ,即可进行实验。 5、将三用表拔至直流电压档,然后测量TP91,TP92,TP93,TP94,TP95的电压是否正常:TP91为-12V,TP92为-48V,TP93为+5V,TP94为+12V,TP95为-5V。(-48V允许误差±10%,其它为±5%) 6、将四个用户接上电话单机。 7、正常呼叫全过程的观察与记录。(现以用户1为主叫,用户4为被叫进行实验) A、 主叫摘机,听到拨号音,数码管显示主叫电话号码“68” 。 B、 主叫拨首位被叫号码“8”,主叫拨号音停,主叫继续拨完被叫号码“9”。 C、 被叫振铃,主叫听到回铃音。 D、 被叫摘机,被叫振铃停,主叫回铃音停,双方通话。数码管显示主叫号码和被叫号码,并开始通话计时。 E、 挂机,任意一方先挂机(如主叫先挂机),另一方(被叫)听到忙音,计时暂停,双方都挂机后,数码管循环显示“P” 。 8、不正常呼叫的自动处理 A、 主叫摘机后在规定的系统时间内不拨号,主叫听到忙音。(系统时间可以设置,在系统复位后按“时间”可循环显示“10”,“30”,“100”,分别表示10秒,30秒,1分钟,选定一个时间,按“确定”即系统时间被设置,在复位状态时,系统时间默认为10秒。) B、 拨完第一位号码后在规定的系统时间内没有拨第二位号码时,主叫听到忙音。 C、 号码拨错时(如主叫拨“56” ),主叫听到忙音。 D、 被叫振铃后在规定的系统时间内不摘机,被叫振铃音停,主叫听到忙音。 六、 实验注意事项 对实验系统加电一定要严格遵循先打开系统工作电源的“交流开关”,然后再打开直流输出开关J8,J9。实验结束后,先分别关直流输出开关J8,J9。最后再关“交流开关”,以避免实验电路的器件损坏。 七、 实验报告要求 1、画出实验系统电路的方框图,并作简要叙述。 2、对正常呼叫全过程进行记录。 实验二 用户线接口电路及二\四线变换实验 一、实验目的 1、全面了解用户线接口电路功能(BORST)的作用及其实现方法。 2、通过对MH88612C电路的学习与实验,进一步加深对BORST功能的理解。 3、了解二\四线变换电路的工作原理。 二、预习要求 认真预习程控交换原理中有关用户线接口电路等章节。 三、实验仪器仪表 1、主机实验箱 一台 2、电话单机 二台 3、20MHz示波器 一台 4、三用表 一台 四、电路工作过程 在现代电话通信设备与程控交换机中,由于交换网络不能通过铃流、馈电等电流,因而将过去在公用设备(如绳路)实现的一些用户功能放到“用户电路”来完成。 用户电路也可称为用户线接口电路(Subscriber Line Interface Circuit—SLIC)。任何交换机都具有用户线接口电路。 模拟用户线接口电路在实现上的最大压力是应能承受馈电、铃流和外界干扰等高压大电流的冲击,过去都是采用晶体管、变压器(或混合线圈)、继电器等分立元件构成,随着微电子技术的发展,近十年来在国际上陆续开发多种模拟SLIC,它们或是采用半导体集成工艺或是采用薄膜、厚膜混合工艺,并已实用化。在实际中,基于实现和应用上的考虑,通常将BORSCHT功能中过压保护由外接元器件完成,编解码器部分另单成一体,集成为编解码器(CODEC),其余功能由所谓集成模拟SLIC完成。 在布控交换机中,向用户馈电,向用户振铃等功能都是在绳路中实现的,馈电电压一般是-60V,用户的馈电电流一般是20mA~30 mA,铃流是25HZ, 90V左右,而在程控交换机中,由于交换网络处理的是数字信息,无法向用户馈电、振铃等,所以向用户馈电、振铃等任务就由用户线接口电路来承担完成,再加上其它一些要求,程控交换机中的用户线接口电路一般要具有B(馈电)、O(过压保护)、R(振铃)、S(监视)、C(编译码)、H(混合)、T(测试)七项功能。 模拟用户线接口电路的功能可以归纳为BORSCHT七种功能,具体含义是: (1)馈电(B-Battery feeling)向用户话机送直流电流。通常要求馈电电压为—48伏,环路电流不小于18mA。 (2)过压保护(O-Overvoltage protection)防止过压过流冲击和损坏电路、设备。 (3)振铃控制(R-Ringing Control)向用户话机馈送铃流,通常为25HZ/90Vrms正弦波。 (4)监视(S-Supervision)监视用户线的状态,检测话机摘机、挂机与拨号脉冲等信号以送往控制网络和交换网络。 (5)编解码与滤波(C-CODEC/Filter)在数字交换中,它完成模拟话音与数字码间的转换。通常采用PCM编码器(Coder)与解码器(Decoder)来完成,统称为CODEC。相应的防混叠与平滑低通滤波器占有话路(300HZ~3400HZ)带宽,编码速率为64kb/s。 (6)混合(H-Hyhird)完成二线与四线的转换功能,即实现模拟二线双向信号与PCM发送,接收数字四线单向信号之间的连接。过去这种功能由混合线圈实现,现在改为集成电路,因此称为“混合电路”。 (7)测试(T-Test)对用户电路进行测试。 模拟用户线接口功能见图2—1。 铃流发生器 馈电电源 发送码流 过 振 低通 编 a 压 测 铃 馈 混 码 模 拟 保 试 继 电 合 平衡 器 用 (编码信号) 户 护 开 电 电 电 网络 解 线 b 电 关 器 路 路 码 路 低通 器 接收码流 测试 振铃控台 用户线 总线 制信号弹 状态信号 图2-1 模拟用户线接口功能框 (一)用户线接口电路 在本实验系统中,用户线接口电路选用的是MITEL公司的MH88612C。MH88612C是2/4线厚膜混合用户线接口电路。它包含向用户话机恒流馈电、向被叫用户话机馈送铃流、用户摘机后自行截除铃流,摘挂机的检测及音频或脉冲信号的识别,用户线是否有话机的识别,语音信号的2/4线混合转换,外接振铃继电器驱动输出。MH88612C用户电路的双向传输衰耗均为-1dB,供电电源+5V和-5V。其各项性能指标符合邮电部制定的有关标准。 (1)该电路的基本特性 1、向用户馈送铃流 2、向用户恒流馈电 3、过压过流保护 4、被叫用户摘机自截铃 5、摘挂机检测和LED显示 6、音频或脉冲拨号检测 7、振铃继电器驱动输出 8、语音信号的2/4线转换 9、能识别是否有话机 10、无需偶合变压器 11、体积小及低功耗 12、极少量外围器件 13、厚膜混合型工艺 14、封装形式为20引线单列直插 图2-2是它的管脚排列图 (2)MH88612C引出端功能的说明 0脚:IC Internal Connection:空端。 1脚:TF Tip Feed: 连接外接二极管作为保护电路连到-48V和地。。 2脚:IC Internal Connection:空端。 3脚:VR Voice Receive(input): 四线语音信号的接收端。 4脚:VRef Voltage Reference:设置向用户电话线送恒流馈电的参考电压,恒流通过VRef调节;也可接地,一般为21mA环流。 5脚:VEE 负供电电源,通常为-5V DC。 6脚:GNDA 供电电源和馈电电源的地端,模拟接地。 7脚:GS Gain setting(input):低电平时直接接收附加增益为-0.5 dB, 此增益除编解码增益设置之外的,高电平时为0dB。 8脚:VX Voice Transmit(output):四线语音信号的发送端。 9脚:TIP 连接用户电话的“TIP”线。 10脚:RING 连接用户电话的“RING”线。 11脚:RF Ring Feed:外部连接至振铃继电器。 12脚:VDD 正供电电源,通常为+5V DC。 13脚:RC Relay Control(input)振铃继电器控制输入端,高电平有效 14脚:RD 振铃继电器驱动输出端,外接振铃继电器线圈至地端,内部有一线圈感应箝位二极管。 15脚:RV Ring Feed Voltage:用户线铃流源输入端,外部连接至振铃继电器。 16脚:VRLY 振铃继电器正供电电源,能常为+5V DC。 17脚:IC Internal Connection:空端。 18脚:VBat 用户线馈电电压,通常为-48V DC 19脚:CAP 连接外部电容作为振铃滤波控制连电阻到地。 20脚:SHK 摘挂机状态检测及脉冲号码输出端,摘机时输出高电平。 (3)用户线接口电路主要功能 图2-3是MH88612C内部电路方框图,其主要功能说明如下: TF VR TIP RING VX RF RV VRLY RC VRef RD CAP SHK 图2-3 MH88612C内部电路方框图 1、向用户话机供电,MH88612C可对用户话机提供恒流馈电,馈电电流由VBAT以及VDD供给。恒定的电流为25 mA。当环路电阻为2KΩ时,馈电电流为18 mA,具体如下: A、 供电电源VBat采用-48V; B、 在静态情况下(不振铃、不呼叫),-48V电源通过继电器静合接点至话机; C、 在振铃时,-48V电源通过振铃支路经继电器动合接点至话机; D、 用户挂机时,话机叉簧下压馈电回路断开,回路无电流流过; E、 用户摘机后,话机叉簧上升,接通馈电回路(在振铃时接通振铃支路)回路。 2、MH88612C内部具有过压保护的功能,可以抵抗保护TIP- -RING端口间的瞬时高压,如结合外部的热敏与压敏电阻保护电路,则可保护250V左右高压。 3、振铃电路可由外部的振铃继电器和用户电路内部的继电器驱动电路以及铃流电源向用户馈送铃流:当继电器控制端(RC端)输入高电平,继电器驱动输出端(RD端)输出高电平,继电器接通,此时铃流源通过与振铃继电器连接的15端(RV端)经TIP––RING端口向被叫用户馈送铃流。当控制端(RC端)输入低电平或被叫用户摘机都可截除铃流。用户电路内部提供一振铃继电器感应电压抑制箝位二极管。 4、监视用户线的状态变化即检测摘挂机信号,具体如下: A、用户挂机时,用户状态检测输出端输出低电平,以向CPU中央集中控制系统表示用户“闲”; B、用户摘机时,用户状态检测输出端输出高电平,以向CPU中央集中控制系统表示“忙”; 5、在TIP––RING端口间传输的语音信号为对地平衡的双向语音信号,在四线VR端与VX端传输的信号为收发分开的不平衡语音信号。MH88612C可以进行TIP––RING端口与四线VR端和VX端间语音信号的双向传输和2/4线混合转换。 6、MH88612C可以提供用户线短路保护:TIP线与RING线间,TIP线与地间,RING线与地间的长时间的短路对器件都不会损坏。 7、MH88612C提供的双向语音信号的传输衰耗均为-dB。该传输衰耗可以通过MH88612C用户电路的内部调整,也可通过外部电路调整; 8、MH88612C的四线端口可供语音信号编译码器或交换矩阵使用。 由图1-1可知,本实验系统共有四个用户线接口电路,电路的组成与工作过程均一样,因此只对其中的一路进行分析。 图2-4是用户1用户线接口电路的原理图: 图2-4 用户线接口电路电原理图 为了简单和经济起见,反映用户状态的信号一般都是直流信号,当用户摘机时,用户环路闭合,有用户线上有直流电流流过。主叫摘机表示呼叫信号,被叫摘机,则表示应答信号,当用户挂机时,用户环路断开,用户线上的直流电流也断开,因此交换机可以通过检测用户线上直流电流的有无来区分用户状态。 当用户摘机时,发光二极管D10亮表示用户已处于摘机状态,TP13由低电平变成高电平,此状态送到CPU进行检测该路是否摘机,当检测到该路有摘机时,CPU命令拨号音及控制电路送出f=450HZ,U=3V的波形。 此时,在TP12上能检测到如图2—5所示波形 TP12 0 2VP-P t f = 400~450Hz 图2-5 450Hz拨号音波形 当用户听到450HZ拨号音信号时,用户开始拨电话号码,双音多频号码检测电路检测到号码时通知CPU进行处理,CPU命令450HZ拨号音发生器停止送拨号音,用户继续拨完号码,CPU检测主叫所要被叫用户的号码后,立即向被叫用户送振铃信号,提醒被叫用户接听电话,同时向主叫用户送回铃音信号,以表示线路能够接通,当被叫用户摘机时,CPU接通双方线路,通信过程建立。一旦接通链路,CPU即开始计时,当任一方先挂机,CPU检测到后,立即向另一方送忙音,以示催促挂机,至此,主、被叫用户一次通信过程结束。 通过上述简单分析,不难得出各测量点的波形。 TP11:通信时有发送话音波形;拨号时有瞬间DTMF波形;不通信时则此点无波形。 TP12:通信时有接收话音波形:摘机后拨号有450HZ拨号音信号;不通信时则此点无波形。 TP13:摘挂机状态检测测量点 挂机:TP13=低电平。 摘机:TP13=高电平。 TP14:振铃控制信号输入,高电平有效。即工作时为高电平,常态为低电平。 由于4个用户线接口电路的测量点相同,故对其它三个用户线接口电路的测量点就不一一叙述,波形均相同,即: TP11=TP21=TP31=TP41 TP12=TP22=TP32=TP42 TP13=TP23=TP33=TP43 TP14=TP24=TP34=TP44 (二)二\四线变换电路 在该实验系统中,二\四线变换由用户线接口电路中的语音单元电路实现,图2-6为电路的功能框图,该电路完成二线–––单端之间信号转换,在MH88612C内部电路中已经完成了该变换。 T TR R 图2-6 二/四线变换功能框图 二\四线变换的作用就是把用户线接口电路中的语音模拟信号(TR)通过该电路的转换分成去话(T)与来话(R),对该电话的要求是: 1、将二线电路转换成四线电路; 2、信号由四线收端到四线发端要有尽可能大的衰减,衰减越大越好; 3、信号由二线端到四线发端和由四线收端到二线端的衰减应尽可能小,越小越好; 4、应保持各传输端的阻抗匹配; 以便于PCM编译码电路形成发送与接收的数字信号。 五、实验内容 1、参考有关程控交换原理教材中的用户线接口电路等单节,对照该实验系统中的电路,了解其电路的组成与工作过程。 2、通过主叫、被叫的摘、挂机操作,了解B、R、S等功能的具体作用。 六、实验步骤 1. 接上交流电源线。 2. 将K11~K14,K21~K24,K31~K34,K41~K44接2,3脚;K70~K75接2,3脚;K60~K63接2,3脚。 3. 先打开“交流开关”,指示发光二极管亮后,再分别按下直流输出开关J8,J9,此时实验箱上的五组电源已供电,各自发光二极管亮。 4. 按“复位”键进行一次上电复位,此时,CPU已对系统进行初始化处理,显示电路循环显示“P”,即可进行实验。 5. 用户1,用户3接上电话单机。 6. 用户电话单机的直流供电(B)的观测。(现以用户1为例) 1) 用户1的电话处于挂机状态,用三用表的直流档测量TP1A,TP1B对地的电压,TP1A为-48V,TP1B为0V,它们之间电压差为48V。 2) 用户1的电话处于摘机状态,用三用表的直流档测量TP1A,TP1B对地的电压,TP1A为-10V左右(此时的电压与电话的内阻抗有关,所以每部电话的测量值不一定相同),TP1B为-3.7V左右。 以上给出的电压值只是作为参考。 7. 观察二/四线变换的作用。 1) 用正常的呼叫方式,使用户1、用户3处于通话状态。 2) 当用户1对着电话讲话时(或按电话上的任意键),用示波器观察TP11上的波形,为语音信号(或双音多频信号),不讲话时无信号。 3) 当用户1听到用户3讲话时(或用户3按电话上任意键),用示波器观察TP12上的波形,为语音信号(或双音多频信号),对方不讲话时无信号。 4) 用示波器观察TP1A。不管是用户1讲话还是用户3讲话(或按电话上的任意键)此测试点都有语音波形(或双音多频信号)。 8. 摘、挂机状态检测的观测。 1) 当用户1的电话摘机时,用示波器测量TP13为高电平(4V左右)。 2) 当用户1的电话挂机时,用示波器测量TP13为低电平(0V左右)。 9. 被叫话机振铃(R)的观测。 1) 用户1处于挂机状态,用户3呼叫用户1,即用户3拨打“68”,使用户1振铃。 2)当用户1的电话振铃时,用示波器观察TP14,振铃时TP14为高电平(3V左右);不振铃时TP14为低电平(0V左右)。 七、实验注意事项 当实验过程中出现不正常现象时,请按一下“复位”键,以使系统重新启动。 八、实验报告要求 1、画出本次实验电路方框图,并能说出其工作过程。 2、画出各测量点在各种情况下的波形图。 实验三 程控交换PCM编译码器实验 一、实验目的 1、掌握PCM编译码器在程控交换机中的作用。 2、熟悉单片PCM编译码集成电路TP3067的使用方法。 二、预习要求 1、查阅有关TP3067的使用说明及其应用电路。 2、认真预习程控交换原理中有关这方面的内容。 三、实验仪器仪表 1、主机实验箱 一台 2、电话单机 二台 3、20MHz示波器 一台 4、音频信号源 一台 四、实验电路工作过程 1、PCM编译码器的简单介绍 模拟信号经过编译码器时,在编码电路中,它要经过样、量化、编码,如图3—1(a)所示。到底在什么时候被样,在什么时序输出PCM码则由A→D控制来决定。同样PCM码被接收到译码电路后经过译码低通、放大。最后输出模拟信号到话机,把这两部分集成在一个芯片上就是一个单路编译码器,它只能为一个用户服务,即在同一时刻只能为一个用户进行A\D及D\A变换。 编码器把模拟信号变换成数字信号的规律一般有二种,一种是μ律十五折线变换法,它一般用在PCM24路系统中,另一种是A律十三折线非线性变换法,它一般应用于PCM30\32路系统中,这是一种比较常用的变换法,模拟信号经样后就进行A律十三折变换,最后变成8位PCM码头,在单路编译码器中,经变换后的PCM码是在一个时隙中被发送出去,这个时序号是由A→D控制电路来决定的,而在其它时隙时编码器是没有输出的,即对一个单路编译码器来说,它在一个PCM帧里只在一个由它自己的A→D控制电路决定的时隙里输出8位PCM码,同样在一个PCM帧里,它的译码电路也只能在一个由它自己的D—A控制电路决定的时序里,从外部接收8位PCM码。 其实电路编译码器的发送时序和接收时序还是可由外部电路来控制的,编译码器的发送时序由A→D控制电路来控制,而A→D控制电路还是受外部控制电路的控制,同样在译码电路中D→A控制电路也受外部控制电路的控制,这样,我们只要向A→D控制电路或D→A控制电路发某种命令即可控制单路编译码器的发送时序和接收时序号,从而也可以达到总线交换的目的,但各种单路编译码器对其发送时序和接收时序的控制方式都有所不同。象有些编译器就有二种方式,一种是编程法,即给它内部的控制电路输进一个控制字,令其在某某时隙干什么工作,另一种是直接控制,这时它有两个控制端,我们定义为FSX和FSr,要求FSX和FSr是周期性的,并且它的周期和PCM的周期要相同,都为125μS,这样,每来一个FSX,其中codec就输出一个PCM码,每来一个FSr,其codec就从外部输入一个PCM码。 图3-1(b)是PCM的译码电路方框图,它的工作过程同图3-1(a)的工作过程完全相反,因此这里就不再讨论了。 (a)A→D电路 (b)D→A电路 图3—1 A\D及D\A电路框图 2.在本实验系统的PCM编译码电路中,器件为美国国家半导体公司的TP3067。图3-2是它的管脚排列图。 图3-2 TP3067管脚排列图 其引脚符号说明 符号 功能 VP0+ 接收功率放大器的非倒相输出 GNDA 模拟地,所有信号均以该引脚为参考点 VP0- 接收功率放大器的倒相输出 VPI 接收功率放大器的倒相输入 VFRO 接收滤波器的模拟输出 VCC 正电源引脚,VCC=+5V±5% FSR 接收帧同步脉冲,它启动BCLKR,于是PCM数据移入DR,FSR为8KHz脉冲序列。 DR 接收帧数据输入,PCM数据随着FSR沿移入DR BCLKR\CLKSESL 在FSR的沿后把数据移入DR的位时钟,其频率可从64KHz至2.48MHz。另一方面它也可能是一个逻辑输入,以此为在同步模式中的主时钟选择频率1.536MHz\1.544MHz或2.048MHz,BCLKR用在发送和接收两个方向(见表3-1) MCLKR\PDN 接收主时钟,其频率可以为1.536MHz、1.544MHz或2.148MHz,它允许与MCLKX异步,但为了获得最佳性能应当与MCLKX同步,当MCLKR连续联在低电位时,CLKX被选用为所有内部定时,当MCLKR连续工作在高电位时,器件就处于掉电模式。 MCLKX 发送主时钟,其频率可以是1.536MHZ,1.544MHZ或2.048MHz,它允许与MCLKR异步,同步工作能实现最佳性能。 BCLKX 把PCM数据从DX上移出的位时钟,其频率可 64kHz变至2.048MHz,但必须与MCLKX同步。 DX 由FSX启动的三态PCM数据输出 FSX 发送帧同步脉冲输入,它启动BCLKX并使DX上PCM数据移出DX上。 ANLB 模拟环回路控制输入,在正常工作时必须置为逻辑“0”当拉到逻辑“1”时,发送滤波器和发送置放大器输出的连接线被断开,开而改为和接收功率放大器的VP0+输出连接。 GSX 发送输入放大器的模拟输出。用来在外部调节增益。 VFXI- 发送输入放大器的倒相输入。 VFXI+ 发送输入放大器的非倒相输入。 VBB 负电源引脚,VBB= -5V±5%。 3、PCM编译码电路的工作时钟 由上述电路分析可知,PCM编译码电路所需的工作时钟为2.048MHZ,FSR、FSX帧同步信号为8KHZ窄脉冲。它们的时序关系如图3-3 TP2048 0 TPTS0~ TPTS7 0 图3—3 PCM编译码工作钟各测量点波形图 图3-4 PCM编解码电原理图 五、实验内容 PCM编译码(C)的功能实验 六、实验步骤 1. 接上交流电源线。 2. 将K11~K14,K21~K24,K31~K34,K41~K44接2,3脚;K70~K74接2,3脚,K75接1,2脚;K60~K63接2,3脚;KTS7接2,3脚;K51、K52接2、3脚。 3. 先打开“交流开关”,指示发光二极管亮后,再分别按下直流输出开关J8,J9,此时实验箱上的五组电源已供电,各自发光二极管亮。 4. 按“复位”键进行一次上电复位,此时,CPU已对系统进行初始化处理,显示电路循环显示“P”,即可进行实验。 5. 将一外加音频信号正弦波(VP-P为1.5伏,频率为1KHZ左右)接入至TPIN输入端(在实验箱上面中部)。 6. 用示波器逐点观察TPIN、TPDT、TPDTMF各测量点波形。 7. 慢慢增加外加音频信号的幅值,并用示波器观察TPDTMF的波形的变化。 说明:图3-5是PCM编译码输入输出波形图。有一点需注意,PCM编译码电路中,在没有外加信号输入时,PCM编码电路还是有输出的,此时该芯片对输入随机噪声进行编译码,一旦有信号输入,它会立即对输入信号进行编码。 TPIN 0 t TPTS6 t 125uS TPDT 0 t TPDTMF 0 t 图3-5 PCM编译码电路输入、输出波形图 七、实验注意事项 1、在进行PCM实验时,对TP3067芯片要特别小心谨慎操作,+5V、-5V电源必须同时加入,以保证该芯片有接地回路,否则,该芯片特别容易损坏。 2、观测各测量点波形时,示波器探头不能乱碰到其它测量点。 八、实验报告要求 1、画出各测量点的波形,注明在何种状态下测试到的波形。 2、当外加信号源的幅值到达一定值时,TPDTMF外的波形就会失真,这是为什么,分析其原因。 3、写出对实验电路的改进措施,有何体会? 实验四 多种信号音及铃流信号发生器实验 一、实验目的 1、了解电话通信中常用的几种信号和铃流信号的电路组成与产生方法。 2、熟悉这些音信号在传送过程中的技术要求和实现方法。 二、预习要求 预习有关拨号音,忙音,回铃音,铃流等有关内容。 三、实验仪器仪表 1、主机实验箱 一台 2、电话机 二台 3、20MHz示波器 一台 四、电路工作过程 我们知道,在用户话机与电信局的交换机之间的线路上,要沿两个方向传递语言信息。但是,为了接通一个电话,除了上述情况外,还必须沿两个方向传送所需的控制信号。比如,当用户想要通话时,必须首先向程控机提供一个信号,能让交换机识别并使之准备好有关设备,此外,还要把指明呼叫的目的地的信号(被叫)发往交换机。当用户想要结束通话时,也必须向电信局交换机提供一个信号,以释放通话期间所使用的设备。除了用户要向交换机传送信号之外,还需要传送相反方向的信号,如交换机要向用户传送关于交换机设备状况,以及被叫用户状态的信号。 由此可见,一个完整的电话通信系统,除了交换系统和传输系统外,还应有信号系统。 下面是本实验系统的传送信号流程,见图4-1所示。 用户向电信局交换机发送的信号有用户状态信号和号码信号。交换机向用户发送的信号有各种可闻信号与振铃信号(铃流)两种方式。 a、各种可闻信号:一般采用频率为450Hz的交流信号,例如: 拨号音:(Dial tone)连续发送的信号。 回铃音:(Ringing tone)1秒送,4秒断的5秒断续信号,与振铃一致。 忙音:(busy tone)0.35秒送,0.35秒断的0.7秒断续信号。 b、振铃信号(铃流):一般采用频率为25Hz,幅度为75V±15V的交流电压,以1秒送,4秒断的5秒断续方式发送。 在呼叫建立过程中,交换机应向主叫用户发送各种信号音,以使用户能了解连续进展情况和下一步应采的操作。 用户线 用户线 主叫用户 被叫用户 摘机 拨号音信号 回铃音信号 振铃信号 话音信号 通信建立 忙音信号 挂机(先挂方) 挂机信号 挂机 (用户线信号) 图4-1 本实验系统传送信号流程图 (一)拨号音及产生电路 主叫用户摘机,CPU检测到该用户有摘机状态后,立即送出的音信号,表示可以拨号,当CPU中央处理单元收到第一个拨号脉冲后,应立即给予切断该信号,拨号音用连续的信号音。在本实验系统中,频率为400Hz~450Hz之间,幅度在1.5V~3.5 V之间,图4-2(a)是该电路的框图,图4-2(b)是该原理图。 (a) 450HZ方框图 (b) 450HZ电原理图 图4-2 450Hz拨号音电路图 (二)回铃音及控制电路 回音信号由CPU中央处理单元控制送出,通知主叫用户正在对被叫用户振铃,回铃音信号所用频率也同拨号音频率,继续周期为1秒通,4秒断,与振铃一致。 各国所用的断续周期不同,如日本为1秒断2秒续,重复周期为3秒。美国和加拿大为2秒续,4秒断,重复周期为6秒。我国采用4秒断,1秒续的5秒周期信号。因此在本实验系统中采用大约4秒断,1秒续的重复周期为5秒信号,见图4-3所示。 (a) 方框图 (b) 电原理图 图4-3 回铃音控制产生电路框图及原理图 (三)忙音及控制电路 忙音表示用户处于忙状态,此时用户应挂机等一会再重新呼叫。 在本实验系统中采用大约0.35秒断,0.35秒续的400Hz~450Hz的信号,见图4-4所示。 (a) 方框图 (b) 电原理图 图4-4 忙音控制产生电路框图及电原理图 (四)铃流信号发生器电路 铃流信号的作用是交换机向被叫用户发出,作为呼入信号,一般采用低频电流,如频率有16.6Hz、25Hz、33.3Hz等几种。 它的断续周期同回铃音信号相同,因此,在本实验系统中采用大约4秒断、1秒通的断续信号。图4-5是它的原理方框图,电原理图4-6所示。 图4-5 25HZ铃流发生器框图 图4-6 25Hz铃流发生器电原理图 上述四种信号在本实验系统中均有具体电路实现,然而在程控交换机中,信号音还不止上述几种,在此作一简单介绍,不作实验要求。 图4-7中各测量点的波形 (1)450Hz拨号音电路,其测量点为TP60; (2)回铃音控制电路,其测量点为TP61; (3)忙音控制电路,其测量点为TP62; (4)25Hz铃流号发生器电路,其测量点为TP63; (5)铃流信号输出的变压电路,其测量点为TP64; TP60 +1.5V O t -1.5V f=400~450Hz TP61 4.2V O t 1s 4s TP62 4.2V 0 t 0.35s 0.35s TP63 4.2V 0 t TP64 +50~60V 0 t -50~60V 图4-7 各测量点的波形图 (六)音信号的数字方式产生 众所周知,在数字程控交换机中直接进行交换的是PCM数字信息,在这样的情况下如何使用户接收到信号音(如拨号音,回铃音,忙音等)是一个重要的问题。因为模拟电路产生的信号音是不能通过PCM交换系统的,这就是要求设计一个数字型信号音发生器,使之能向交换网络输出这样一些PCM数字信息,这些数字信息经过非线性译码后能成为一个我们所需的模拟信号音。 1、传统方式产生数字音信号 电路见图4-8所示,可知,这是一种常见的PCM编码方式,400Hz~450Hz的正弦信号由硬件电路实现,再经过PCM编码器电路后,就可输出音信号的PCM数字码流了,经过数字交换网络后,再进行D/A变换还原成正弦信号送往用户电路即可。 图4—8 传统方式产生音信号电原理图 2、用数字电路产生音信号 图4-9是大约450Hz正弦波信号一个周期样示意图,图4-10是数字电路产生音信号的原理框图。 0 t1 t2 t3 t4 A B C D 图4-9 450Hz正弦波信号样示意图 图4—10 数字型信号音产生电路原理框图 由此可见,我们只要对正弦信号在理论上以每隔125μs样一次,并将样所得的正弦信号幅度按照A律十三折线非线性编码的规律进行计算,变成二进制编码,然后把这些二进制码存贮在EEPROM中,只要每隔125μs对它读出一次即可得到PCM数字信息码流。(注意:TP3067编码输出时,偶数位反,例如+2.5V的电压编码输入应为 1111 1111,而TP3067输出为 1010 1010。) 五、实验内容 1、用三用表或示波器测量拨号音,忙音、回铃音及铃流信号的各测量点电压或波形,即测量点TP60、TP61、TP62、TP63、TP64。 六、实验步骤 1. 接上交流电源线。 2. 将K11~K14,K21~K24,K31~K34,K41~K44接2,3脚;K70~K75接2,3脚;K60~K63接2,3脚。 3. 先打开“交流开关”,指示发光二极管亮后,再分别按下直流输出开关J8、J9,此时实验箱上的五组电源已供电,各自发光二极管亮。 4. 按“复位”键进行一次上电复位,此时,CPU已对系统进行初始化处理,显示电路循环显示“P”,即可进行实验。 5. 用示波器测量TP60、TP61、TP62、TP63、TP64各点波形。(观察TP61、TP62时示波器应设置为直流档) TP60 TP61 TP62 TP63 TP64 6. 用户1、用户3接上电话单机,用户1呼叫用户3,在呼叫过程中观察TP12的波形。(示波器设为直流档) 1) 用双踪示波器观察TP12的波形和TP60的波形,用户1摘机后听到拨号音时。即TP12与TP60的波形一样为450HZ的三角波信号。 2) 用户1拨完被叫电话号码“88” 后听到回铃音时,用双踪示波器观察TP12的波形和TP61的波形。即当TP61为高电平时(用户1听到回铃音),TP12有450HZ的三角波信号;当TP61为低电平时,TP12无波形。 3) 用户3振铃时,用双踪示波器观察TP3A的波形和TP64的波形。即当用户3振铃时,TP3A与TP64的波形一样;不振铃时,TP3A无波形。 4) 用户3摘机通话后,用户3先挂机,此时用户1听到忙音,用双踪示波器观察TP12的波形和TP62的波形。即当TP62为高电平时(用户1听到忙音),TP12有450HZ的三角波信号;当TP62为低电平时,TP12无波形。 七、实验注意事项 1、此项实验必须要由两人合作完成。 2、在测量25Hz的铃流信号发生器输出的波形时,一定要注意三用表的量程和示波器的电压量程档,以防止损坏仪器和其它电子器件。 八、实验报告要求 1、认真画出实验过程各测量点波形,并进行分析。 2、画出电路组成框图。 3、在实验过程中遇到的其它情况作出记录,并进行分析。 实验五 双音多频DTMF接收实验 一、实验目的 1、了解电话号码双音多频信号在程控交换系统中的发送和接收方法。 2、熟悉该电路的组成及工作过程。 二、预习要求 1、认真预习有关双音多频等相关内容。 三、实验仪器仪表 1、主机实验箱 一台 2、电话单机 两台 3、20MHz示波器 一台 四、实验电路工作过程 (一)双音多频拨号简单介绍 在电话单机中,有两种拨号方式,即脉冲拨号和双音多频拨号。 双音多频拨号方式中的双音多频是指用两个特定的单音频信号的组合来代表数字或功能,两个单音频的频率不同,所代表的数字和功能也不同,在双音多频电话机中有16个按键,其中有10个数字键0~9,6个功能键*、#、A、B、C、D,按照组合的原理,它必须有8种不同的单音频信号,由于采用的频率有8种,故又称之为多频,又因以8种频率中任意抽出2种进行组合,又称其为8中2的编码方式。 根据CCITT的建议,国际上采用697Hz、770Hz、852Hz、941Hz、1209Hz、1336Hz、1477Hz和1633Hz,把这8种频率分成两个群,即高频群和低频群,从高频群和低频群中任意各抽出一种频率进行组合,共有16种不同组合,代表16种不同数字或功能,见表5-1。 表5-1 1209 1336 1447 1633 697 1 2 3 A 770 4 5 6 B 852 7 8 9 C 941 * 0 # D 表中*、# 键作特殊功能用(如闭音、重发)等,A、B、C、D留作它用,例如拨数字号码“8”,则发双音多频信号频率为fH=1336Hz、fL=852Hz。 双音多频,简写DTMF(DTMF=Dual Tone Multirequency) fH (C1~C4) (R1~R4) fL 图5-1 一个典型的DTMF发送电路原理框图 DTMF发送器的原理与构成如图5-1所示,它主要包括: (1)晶体振荡器––––外接晶体(通常采用3.579545MHz)与片内电路构成振荡器,经分频产生参考信号。 (2)键控可变时钟产生电路–––––它是一种可控分频比的分频器,通常由n级移位寄存器与键控反馈逻辑单元组成。 (3)正弦波产生电路–––––它由正弦波编码器与D/A变换器构成,通常,可变速时钟信号先经5位移位寄存器,产生一组5位移位代码,再由可编程逻辑阵列(PLA)将其转换成二进制代码,加到D/A变换器形成台阶型正弦波。显然台阶的宽度等于时钟频率的倒数,这样形成的正弦波信号频率必然对应时钟的速率和按键的号码。 (4)混合电路–––––将键盘所对应产生的行、列正弦波信号(即低、高群fL、fH)相加、混合成双音信号输出。 (5)附加功能单元,如有时含有单音抑制,输出控制(禁止)、双键同按无输出等控制电路。 DTMF发送器按输入控制方式可分为键盘行列控制和BCD接口控制两种。它们的控制部分真值表分别示于表5-2、表5-3。 表5-2键盘控制接口功能真值表 输入 行 列 R1 R2 R3 R4 C1 C2 C3 C4 发送 fL(HZ) 697 770 852 941 频率 fH(HZ) 1209 1336 1477 1633 表5-3 BCD码控制接口功能真值表 BCD 码 输 入 发 送 频 率 R1 R2 R3 R4 fL(HZ) fH(HZ) 0 0 0 0 941 1336 0 0 0 1 697 1209 0 0 1 0 697 1336 0 0 1 1 697 1477 0 1 0 0 770 1209 0 1 0 1 770 1336 0 1 1 0 770 1477 0 1 1 1 852 1209 1 0 0 0 852 1336 1 0 0 1 852 1477 (二)双音多频接收电路 图5-2 典型DTMF接收器原理框图 DTMF接收器包括DTMF分组滤波器和DTMF译码器,其基本原理如图5-2所示。DTMF接收器先经高、低群带通滤器进行fL/fH区分,然后过零检测、比较,得到相应于DTMF的两路fL、fH信号输出。该两路信号经译码、锁存、缓冲,恢复成对应于16种DTMF信号音的4比特二进制码(D1~D4)。 图5-3 MT8870芯片及管脚排列图 在本实验系统电路中,DTMF接收器采用的是MT8870芯片。 图5-3是该芯片的管脚排列图。 1、该电路的基本特性 (1)提供DTMF信号分离滤波和译码功能,输出相应16种DTMF频率组合的4位并行二进制码。 (2)可外接3.579545MHz晶体,与内含振荡器产生基准频率信号。 (3)具有抑制拨号音和模拟信号输入增益可调的能力。 (4)二进制码为三态输出。 (5)提供基准电压(VDD\2)输出。 (6)电源 +5V (7)功耗 15mw (8)工艺 CMOS (9)封装 18引线双列直插 2、管脚简要说明 引出端符号说明 IN+,IN- 运放同、反相输入端,模拟信号或DTMF信号从此端输入。 FB 运放输出端,外接反馈电阻可调节输入放大器的增益。 VREF 基准电压输出。 IC 内部连接端,应接地。 OSC1,OSC0 振荡器输入、输出端,两端外接3.579545MHz晶体。 EN 数据输出允许端,若为高电平输入,即允许D01~D04输出, 若为低电平输入,则禁止D01~D04输出。 D01~D04 数据输出,它是相应于16种DTMF信号(高,低单音组合) 的4位二进制并行码,为三态缓冲输出。 CI\GT 控制输入,若此输入电压高于门限值VTSt,则电路将接收 DTMF单音对,并锁存相应码字于输出,若输入电压低于VTSt,则电路不接收新的单音对。 EC0 初始控制输出,若电路检测出一可识别的单音对,则此端即变为高电平,若无输入信号或连续失真,则EC0返回低电平。 CID 延迟控制输出,当一有效单音对被接收,CI超过VTSt,输出锁存器被更新,则CID为高电平,若CI低于VTSt,则CID返至低电平。 VDD 接正电源,通常接+5V。 VSS 接负电源,通常接地。 3、电路的基本工作原理 它完成典型DTMF接收器的主要功能:输入信号的高,低频组带通滤波、限幅、频率检测与确认、译码、锁存与缓冲输出及振荡,监测等,具体说来,就是DTMF信号从芯片的输入端输入,经过输入运放和拨号音抑制滤波器进行滤波后,分两路分别进入高,低频组滤波器以分离检测出高、低频组信号。 如果高,低频组信号同时被检测出来,便在EC0输出高电平作为有效检测DTMF信号的标志;如果DTMF信号消失,则EC0即返至低电平,与此同时,EC0通过外接R向C充电,得到CI,GT。(通常此两端相短接)积分波形,如图5-4所示,若经tGTP延时后,CI,GT。电压高于门限值VTst时,产生内部标志,这样,该电路在出现EC0标志时,将证实后的两单音送往译码器,变成4比特码字并送到输出锁存器,而CI标志出现时,则该码字送到三态输出端D01——D04,另外,CI信号经形成和延时,从CID端输出,提供一选通脉冲,表明该码字已被接收和输出已被更新,如若积分电压降到门限VTst以下,使CID也回到低电平。 图5-4是它的工作时序波形图 图5-4 MT8870的时序图 图5-7 DTMF信号测电路原理框图 其中,双音多频信号测试点为TPDTMF,数据输出允许端EN的测量点为TPSTD,它经反相器反向后得到。数据输出则可以通过发光二极管D103~D100显示出来,它代表的数是8421码。 五、实验内容 1、用示波器观察并测量发送DTMF信号的波形,在用户线接口电路的输入端进行测量,即在用户1用户线接口电路的测量点TP1A与TP1B进行测量。 2、用示波器观察并测量DTMF信号接收的波形TPDTMF,以及在MT8870电路输出端TPSTD。 其中,TPDTMF为双音多频信号的测量点 TPSTD为数据输出允许端EN的反相测量点,识别到双音多频信号时为低,否则就为高。 六、实验步骤 1. 接上交流电源线。 2. 将K11~K14,K21~K24,K31~K34,K41~K44接2,3脚;K71~K75接2,3脚;K61~K63接2,3脚,K70、K60接1、2脚。 3. 先打开“交流开关”,指示发光二极管亮后,再分别按下直流输出开关J8、J9,此时实验箱上的五组电源已供电,各自发光二极管亮。 4. 按“复位”键进行一次上电复位,此时,CPU已对系统进行初始化处理,显示电路循环显示“P”,即可进行实验。 5. 用户1、用户3接上电话单机。 6. 用户1摘机,开始拨打号码,即按电话单机上的任意键,用示波器的直流档对以下测量点进行观察并记录波形: 1) TPDTMF:当有键按下时有双音多频信号,无键按下时无信号。 2) TPSDT:当有键按下时该点是低电平,无键按下时该点为高电平。 3) TP11:当有键按下时有双音多频信号,无键按下时无信号。 7. 按不同的键时,其双音多频信号的波形不一样,要仔细观察。 8. 在按键过程中观察发光二极管D103~D100与所按键值的关系:(显示二极管是在该按键抬起的瞬间发生改变的) D103~D100对应的是8421码,如接下的键值为5时,对应的码字为0101,发光二极管D102,D100发光。在按键的过程中观察所按键值与发光二极管是否满足上述对应关系。 七、注意事项 1、使主机实验箱加电处于正常工作状态,并严格遵循操作规程。 2、在测量观察上述各测量点波形时,两位同学一定要配合好,即一位同学按照正常拨打电话的顺序进行操作,另一位同学要找到相应的测量点和有关电路单元,小心慎重操作,仔细体会实验过程中的各种实验现象。 3、在测量TP1A时,示波器接头的另一接地线接到TP1B上。 八、实验报告要求 1、画出DTMF接收电路的电原理图,并能简要分析工作过程。 2、画出在接收DTMF过程中各有关测量点在有、无信号状态的波形,并能作简要的分析与说明。 实验六 空分交换网络原理 系统实验 一、实验目的 1、掌握程控交换的基本原理与实现方法。 2、通过对MT8816芯片的实验,熟悉空分交换网络的工作过程。 二、预习要求 认真预习《程控交换原理》教材中的相关内容。 三、实验仪器仪表 1、主机实验箱 一台 2、电话单机 二~四台 3、20MHz示波器 一台 四、实验电路工作过程 (一)原理说明 其实,我们在实验一中已经对实验系统中的交换网络有了一些了解,下面我们则比较详细分析它的工作过程。它是由两大部分组成,即话路部分和控制部分,话路部分包括交换网络,用户电路出中继电路,入中继电路,收号器,音信号发生器以及信号设备等;控制部分则是一台电子计算机,它包括中央处理器,存储器和输入、输出设备。 在我们本实验系统中,交换网络的方框图见图6-1所示。 图6-1 实验系统的交换网络结构方框图 (二)电子接线器简介 早先的程控空分交换机的网络,采用的接线器是机械的,也就是说它由机械接点组成的。然后由这些机械接线器组成交换网络。这些机械接线器包括小型纵横接线器、螺簧接线器、剩簧接线器、笛簧接线器……五花八门,品种繁多。由于目已不采用,所以不在这里介绍。当的空分交换机采用的是电子接线器。这是从MOS型超大规模接线器。目,生产电子接线器的电子化成为可能。电子接线器就是MOS型的空分接线器。目,生产电子接线器的厂家很多,型号也各有不同,如Mitel公司的MT8804,MT8812,MT8816等,MOTOROLA公司的142100,145100等,SGS公司的M089,M099,M093等。这些电子接线器在我国生产和引进的空分用户交换机中均能见到。 下面将重点分析MT8816芯片的工作过程。 (1)MT8816基本特性 由图6-2可见,该芯片是8×16模拟开关阵列,它内含7–––128线地址译码器,控制锁存器和8×16交叉点开关阵列,其电路的基本特性为: 1、提供8×16模拟开关阵列功能 2、导通电阻(VDD=12V) 45Ω 3、导通电阻偏差(VDD=12V) 5Ω 4、模拟信号最大幅度 12VPP 5、开关带宽 45MHZ 6、非线性失真 0.01% 7、电源 4.5~13.2V 8、工艺 CMOS 9、封装 双列直插式 (a) MT8816管脚排列图 VCC VEE VSS COL0 COL7 (b) MT8816功能方框图 图6-2 MT8816功能方框图 (2)MT8816管脚说明 下面将对该管脚功能作一简要说明 COL0~COL7 列输入\输出,开关阵列8路列输入或输出。 ROW0~ROW15 行输入\输出,开关阵列16路行输入或输出。 ACOL0~ACOL2 列地址码输入,对开关阵列进行列寻址。 AROW0~AROW3 行地址码输入,对开关阵行进行行寻址。 ST 选通脉冲输入,高电平有效,使地址码与数据得以控制相应开关的通、断。在ST上升沿,地址必须进入稳定态,在ST下降沿处,数据也应该是稳定的。 DI 数据输入,若DI为低电平,不管CS处于什么电平,均将全部开关置于截止状态。 RESET 复位信号输入,若为高电平,不管CS处于什么电平,均将全部开关置于截止状态。 CS 片选信号输入,高电平有效。 VDD 正电源,电压范围为4.5~13.2V。 VEE 负电源。 VSS 数字地。 (3)MT8816工作原理 下面我们将对MT8816型电子接线器作一介绍,使大家了解电子接线器的结构原理。其它型号的电子接线器也大同小异。 MT8816是CMOS大规模集成电路芯片。这是一片8×16模拟交换矩阵,如图6-3所示 COL7 COL6 COL5 COL4 COL3 COL2 COL1 COL0 图6-3 MT8816交换矩阵示意图 图中有8COL线(L0—L7)和16ROW线(J1~J15),形成一个模拟交换矩阵。它们可以通过任意一个交叉点接通。芯片有保持电路,因此可以保持任一叉接点处于接通状态,直至来复信号为止。CPU可以通过地址线ACOL2 ~ACOL0和数据线AROW3~AROW0进行控制和选择需要接通的交叉点号。ACOL2 ~ACOL0管COL7 ~COL0中的一线。ACOL7 ~ACOL0编成二进制码,经过译码以后就可以接通交叉点相应的COLi;数据线AROW3~AROW0管ROW15~ROW0中的一。AROW3~AROW0是不编码的,某一AROW7线为“1”,控制相应ROWi的以接通有关的交叉点。例如要接通L1和J8之间的交叉点。这时一方面向ACOL0 ~ACOL2。送001,另一方面向AROW3送“1”。当送出地址启动门ST时,就可以将相应交叉点接通了,图中还有一个端子叫“CS”片选端。当CS为“1”时,全部交叉点就打开了。 电子接线器速度快,驱动要求低,并能自己保持。因此使用起来十分方便。 其它型号的芯片其基本原理也大致相同。区别只是容量不一样。 电子接线器的优点是体积小,价格便宜,它的缺点是导通电阻较机械接点大(一般几十欧姆到一百欧姆),并且串音衰耗也较机电的接线器小,因此电子接线器组成的交换网络和由机械接点组成的交换网络也有所区别。 五、实验内容 利用空分自动交换网络进行两部电话单机通话,对工作过程作记录。 六、实验步骤 1. 接上交流电源线。 2. 将K11~K14,K21~K24,K31~K34,K41~K44接2,3脚;K70~K75接2,3脚;K60~K63接2,3脚。 3. 先打开“交流开关”,指示发光二极管亮后,再分别按下直流输出开关J8、J9,此时实验箱上的五组电源已供电,各自发光二极管亮。 4. 按“复位”键进行一次上电复位,此时,CPU已对系统进行初始化处理,显示电路循环显示“P”,即可进行实验。 5. 将四个用户接上电话单机。 6. 首先用户1呼叫用户3,并进行通话,然后用户2呼叫用户4通话。 7. 用双踪示波器观察 1) 当用户1说话时 (或按电话上的任意键),TP11(用户1的去话)、TP32(用户3的来话)有语音波形(或双音多频信号),且波形一致,只是TP11的幅值比TP32的幅值大;不说话时无波形。 2) 当用户3说话时(或按电话上的任意键),TP31(用户3的去话)、TP12(用户1的来话)有语音波形(或双音多频信号),且波形一致,只是TP31的幅值比TP12的幅值大;不说话时无波形。 3) 当用户2说话时(或按电话上的任意键),TP21(用户2的去话)、TP42(用户4的来话)有语音波形(或双音多频信号),且波形一致,只是TP21的幅值比TP42的幅值大;不说话时无波形。 4) 当用户4说话时(或按电话上的任意键),TP41(用户4的去话)、TP22(用户2的来话)有语音波形(或双音多频信号),且波形一致,只是TP41的幅值比TP22的幅值大;不说话时无波形。 七、实验报告要求 1、画出本实验系统自动交换网络的电路框图,并分析工作过程。 实验七 程控交换原理编程调试实验 一、实验目的 1、了解CPU的工作原理及各种控制过程。 2、体会程控交换原理实验系统进行电话通信时的控制过程。 二、预习要求 1、熟练使用8051系列单片机仿真器。 2、预习《MCS-51单片机原理与应用》。 三、实验设备 1、主机实验箱 一台 2、电话单机 四台 3、PC机 一台 4、MCS-51系统单片机仿真器 一套 四、实验编程 本实验分为七个单元实验,每个实验单元完成对一个单元电路的控制或一种系统设置。图7-1为本实验总体框图。 图7-1 实验总体框图 在本次实验中,我们通过实际编程调试,实现程控交换机中CPU对话路设备的控制,进一步加深对程控交换网络工作原理的认识。在实验四中我们已经了解到实验系统中已由硬件产生了各种信号音,在电话拨打和接续过程中,CPU自动将各种信号音按照电话接续规则接入电话机,使我们能自如地拨打电话,各种信号音都是通过可由计算机控制的开关接入电话线路的,CPU根据电话接续规则,打开或关闭各种信号音的接入开关,使我们能从拨打电话的过程中听到各种信号音。 注意,系统定义:用户1系统定义为第1路; 用户2系统定义为第2路; 用户3系统定义为第3路; 用户4系统定义为第4路; 下面我们按图7-1将实验系统通过MCS-51单片机仿真器连接到计算机,打开单片机仿真调试软件,编辑、修改、编译源程序,下载执行CPU控制指令,
数据可视化智能软件主要性能指标 1) 分布式实时数据库 A 软件应采用多线程的处理机制,分布式组件的设计支持负载均衡体系。 B 内置动态优化功能,可保证用户在访问一个窗口、鼠标动作等所产生的数据交互的快速 响应。 C 数据库支持远程访问重连及数据断点续传功能,使数据库之间的数据同步及完整性具有 了高可靠性的保障。 D 软件应内置的实时数据库支持无限分层和扩展并支持中英文的标签配置,可以按照"工厂 数据模型"来管理整个系统。可根据实际情况按照厂区、车间、区域、工段、单元的多级 分层,方便一线人员的查看与管理。 E 具有灵活的结构,支持用户自定义点类型及参数的使用,用户可根据实际需要自定义自 己的各类数据库结构模型,方便对数据的管理和查找。 F 支持丰富的点类型包括模拟IO点,数字IO点,控制点,累积点,运算点,组合点,雪崩 过滤点,滤波点,计数器点,定时器点,设备运行点,事故追忆点等,可满足用户不同 场景下的应用。 2) 数据采集 A 通讯调度设计符合OPC规范,提供全开放的IO通讯参数,可获通讯状态及IO的通讯优化 参数; B 支持通讯负载均衡与通讯效率的动态优化; C 支持IO通信多"进程"调度模式,根据实际需要可自由选择与分配信道与设备的数量来分 配多个或单个进程管理,优化数据采集开销; D 具有较强的数据读写能力,支持批量下置功能,支持写优先的策略,保证现场工况突发 事件及时处理。 E 支持传输数据块的自动与手动分包,支持"数据块"的读与转发; F 根据具体协议要求,通讯性能可支持访问速度达毫秒级; G 支持多种协议的设备挂在一通讯链路,连接设备可达数百个; H 支持模拟量、数字量、SOE、二进制数据类型的采集 I 提供设备配置参数、通讯数据配置模板,支持通讯状态的在线诊断与在线配置参数; J 软件可提供3000个以上的IO通讯驱动程序,支持与国内外主流的设备的通信与联网等, 支持以协议宏开发方式进行驱动程序开发。 K 支持IEC101、IEC104、CDT、DNP3等远动规约的通讯;支持以OPC、MODBUS、IEC101、IE C104等协议对外转发数据完成联网。 L 支持不固定网络IP的模式下的网络通讯;支持多设备无线通讯能力,避免采用虚拟串口 方式,造成数据传输不稳定的隐患; 3) 组态开发 A 组态开发管理提供的是一体化集成的系统开发平台,组态开发管理平台能够提供良好的 远程运维功能,支持分布式网络节点下的工程开发和部署,对工程能够远程更新。 B 管理工具按照分布式系统统一管理系统内工程,如实时数据、历史库、采集器、人机界 面 、Web服务等,可实现工程的离线应用和在线修改。 C 支持工程模型的导入与导出、变量查找替换; D 支持窗口的新建、复制,支持多窗口的文件管理,支持窗口查找与定位; E 支持多达几百种过渡色、渐进色调色板,支持透明色处理; F 支持图元打组、智能单元可根据数据模型封装对象,可支持自定义属性和方法,形成动 态图库; G 支持变量动态注册机制,支持通过脚本访问自定义脚本函数; H 支持ActiveX控件脚本开放函数; I 支持增强的ADO脚本。 J 支持以GDI、GDI+、FLASH、WPF、WCF技术来构建软件图形库,可嵌入各种格式(BMP、G IF、JPG、JPEG、CAD等)的图片。 K 软件提供具备丰富的"矢量"行业图库集,图库集具有自己的属性方法,可提供用户编写 脚本逻辑,图库设计参考行业软件设计标准,图库包括工控场合常见的符号之外,还具备 行业定制化专用图库如油田、燃气、楼宇、新能源等。 L 软件平台提供集成化的设计环境,对工程模板创建、数据模型与画面模型等都进行了完 整的"模板化设计",支持界面及模板分组、派生继承等功能。 M 软件平台提供的批量组态工具包括设备批量创建、设备信息导入导出、点表批量复制功 能。 N 支持不同格式的多媒体文件,包括支持幻灯片播放,图片显示(BMP、JPG、PNG),GIF 动画文件播放,Flash文件播放,Windows Media Player所支持的全部文件格式。 4) 工业报警 A 支持ISA18.2标准,可以单独设立报警服务器,独立管理报警的通知与存储。 B 支持工业现场报警"雪崩"处理,方便响应大型系统异常及紧急情况; C 支持千万级别报警记录存储,并方便网络查询; D 支持报警处置与评论,并可根据业务形成报警知识库 E 支持高达10个件报警判断(H5、H4、H3、HH、HI、LO、LL、L3、L4、L5); F 支持的报警类型有限值报警,偏差报警,变化率报警,开关量报警。可设置十种限值报 警,报警支持1-9999种优先级,报警可分0- 99组,每个报警点可设置最多10个报警标签。; G 支持实现对测点、区域、类型、级别的统计查
习 题 答 案 习题一答案 一、选择题 1. 软件的主要特性是(A B C)。 A) 无形 B) 高成本 C) 包括程序和文档   D) 可独立构成计算机系统 2. 软件工程三要素是(C D)。 A) 技术、方法和工具  B) 方法、工具和过程  C) 方法、对象和类  D) 过程、模型、方法 3. 包含风险分析的软件工程模型是(A)。 A) 螺旋模型 B) 瀑布模型 C) 增量模型 D) 喷泉模型 4. 软件工程的主要目标是(C)。 A) 软件需求  B) 软件设计  C) 风险分析  D) 软件实 现 5. 下列属于面向对象开发方法的是(A B C D)。 A) Booch   B) UML   C) Coad   D) OMT 6. 软件危机的主要表现是(B D)。 A) 软件成本太高 B) 软件产品的质量低劣 C) 软件开发人员明显不足 D) 软件生产率低下 7. 软件开发方法的主要工作模型有(A B C) A) 螺旋模型 B) 循环模型 C) 瀑布模型 D) 专家模型 8. 软件工程的目标有(A B C)。 A) 易于维护 B) 低的开发成本 C) 高性能 D) 短的开发期 9. 软件工程学的目的和意义是( )。 A) 应用科学的方法和工程化的规范管理来指导软件开发 B) 克服软件危机 C) 作好软件开发的培训工作 D) 以较低的成本开发出高质量的软件 二、 判断题 1. 软件就是程序,编写软件就是编写程序。(×) 2. 瀑布模型的最大优点是将软件开发的各个阶段划分得十分清晰。(×) 3. 结构化方法的工作模型是使用螺旋模型进行开发。(×) 4. 结构化方法和JSP方法都不适合于大型软件的开发。(√) 5. 原型化开发方法包括生成原型和实现原型两个步骤。(×) 6. 面向对象的开发方法包括面向对象的分析、面向对象的设计和面向对象的程序设计。( √) 7. 软件危机的主要表现是软件的需求量迅速增加,软件价格上升。(×) 8. 软件工具的作用是为了延长软件产品的寿命。(×) 9. 软件工程过程应该以软件设计为中心,关键是编写程序。(×) 10. RCP法与RSP法的主要区别是者采用循环渐进的开发方式,原型将成为最终的产品,而后者将被废弃。(√) 三、简答题 1. 软件产品的特性是什么? 答: ● 软件是一种逻辑产品,具有无形性;  ● 软件产品的生产主要是研制;  ● 软件不存在磨损和老化问题,但存在退化问题;  ● 软件产品的生产主要是脑力劳动;  ● 软件产品的成本非常昂贵,其开发方式目尚未完全摆脱手工生产方式; ● 软件具有“复杂性”,其开发和运行常受到计算机系统的限制。 2. 软件发展有几个阶段?各有何特征? 答: ① 程序设计阶段。    硬件特征:价格贵、存储容量小、运行可靠性差。    软件特征:只有程序、程序设计概念,不重视程序设计方法。   ② 程序系统阶段。    硬件特征:速度、容量及工作可靠性有明显提高,价格降低,销售有爆炸性增长 。    软件特征:程序员数量猛增,开发人员素质低。   ③ 软件工程阶段。    硬件特征:向超高速、大容量、微型化及网络化方向发展。    软件特征:开发技术有很大进步,但未获得突破性进展,软件价格不断上升,未完全摆脱软件危机。 3. 什么是软件危机?其产生的原因是什么? 答:“软件危机”(Software Crisis)的出现是由于软件的规模越来越大,复杂度不断增 加,软件需求量增大。而软件开发过程是一种高密集度的脑力劳动,软件开发的模式及技术 不能适应软件发展的需要。致使大量质量低劣的软件涌向市场,有的花费大量人力、财力, 而在开发过程中就夭折。软件危机主要表现在两个方面: (1) 软件产品质量低劣,甚至开发过程就夭折。 (2) 软件生产率低,不能满足需要。 4. 什么是软件生存周期模型?它有哪些主要模型? 答:软件生存周期模型是描述软件开发过程中各种活动如何执行的模型。 主要模型包括:瀑布模型、增量模型、螺旋模型、喷泉模型、变换模型和基于知识的模型。 5. 有哪些主要的软件开发方法? 答:主要的软件开发方法有:结构化开发方法、Jackson(JSP、JSD)方法、原型化开发方 法、维也纳开发方法(VDM)和面向对象的开发方法。 6. 软件生命期各阶段的任务是什么? 答:软件生命期瀑布模型分为六个阶段: ● 可行性研究与计划(确定系统的目标和规模,分析项目的可行性); ● 需求分析与规格说明(明确系统的规格和要求); ● 设计(包括概要设计和详细设计,将系统分解为模块); ● 编程(用程序语言实现每个模块,简单容易); ● 测试(发现并改正错误,分为模块测试、集成测试和系统联调三级); ● 运行维护(扩充功能、纠错等)。 习题二答案 一、 选择题 1. 需求分析的主要目的是(B C)。 A) 系统开发的具体方案 B) 进一步确定用户的需求 C) 解决系统是“做什么的问题” D) 解决系统是“如何做的问题” 2. 需求分析的主要方法有(C D)。 A) 形式化分析方法 B) PAD图描述 C) 结构化分析(SA)方法 D) OOA法 3. 面向对象的分析方法主要是建立三类模型,即(D)。 A) 系统模型、ER模型、应用模型 B) 对象模型、动态模型、应用模型 C) E-R模型、对象模型、功能模型 D) 对象模型、动态模型、功能模型 4. SA法的主要描述手段有(B)。 A) 系统流程图和模块图 B) DFD图、数据词典、加工说明 C) 软件结构图、加工说明 D) 功能结构图、加工说明 5. 画分层DFD图的基本原则有(A C D)。 A) 数据守恒原则 B) 分解的可靠性原则 C) 子、父图平衡的原则 D) 数据流封闭的原则 6. 在E-R模型中,包含以下基本成分(C)。 A) 数据、对象、实体 B) 控制、联系、对象 C) 实体、联系、属性 D) 实体、属性、联系 7. 画DFD图的主要目的是(A D)。 A) 作为需求分析阶段用户与开发者之间交流信息的工具 B) 对系统的数据结构进行描述 C) 对目标系统的层次结构进行描述 D) 作为分析和设计的工具 8. 数据字典是数据流图中所有元素的定义的集合,一般由以下四类目组成(C)。 A) 数据说明目、控制流目、加工目、数据存储目 B) 数据目、数据目、文件目、加工目 C) 数据目、数据目、数据处理目、数据文件目 D) 数据目、数据文件目、数据目、加工目 9. 在需求分析阶段主要采用图形工具来描述的原因是(B C)。 A) 图形的信息量大,便于描述规模大的软件系统 B) 图形工具能够极好地概括描述一个系统的信息,比文字叙述能够更好地表达重 要的细节 C) 图形能够更加直观地描述目标系统,便于用户理解和交流,有利于开发者与用 户之间达成一致的需求 D) 图形比文字描述简单、形象 二、 判断题 1. 在进行了可行性分析后,需求分析就只需要解决目标系统的设计方案。(×) 2. SA法是面向数据流,建立在数据封闭原则上的需求分析方法。(√) 3. HIPO法既是需求分析方法,又是软件设计方法。(√) 4. 在面向对象的需求分析方法中,建立动态模型是最主要的任务。(×) 5. 加工小说明是对系统流程图中的加工进行说明。(×) 6. 判定表的优点是容易转换为计算机实现,缺点是不能够描述组合件。(×) 7. 需求分析的主要方法有SD法、OOA法及HIPO法等。(×) 8. 分层的DFD图可以用于可行性分析阶段,描述系统的物理结构。(×) 9. 信息建模方法是从数据的角度来建立信息模型的,最常用的描述信息模型的方法是E-R 图。(√)  10. 用于需求分析的软件工具,应该能够保证需求的正确性,即验证需求的一致性、完整性、现实性和有效性。(√) 三、 问答题 1. 什么是需求分析?需求分析阶段的基本任务是什么? 答: 需求分析是当软件工程中的关键问题,需求分析阶段的任务是:在可行性分析的基础上,进一步了解、确定用户需求。准确地回答 “系统必须做什么?” 的问题。获得需求规格说 明书。还涉及到软件系统的目标、软件系统提供的服务、软件系统的约束和软件系统运行的环境。它还涉及到这些因素和系统的精确规格说明,以及系统进化之间的关系。 需求分析的基本任务包括: (1) 抽需求 分析现行系统存在需要解决的问题。获足够多的问题领域的知识,需求抽方法一般有问卷法、面谈法、数据采集法、用例法、情景实例法以及基于目标的方法等;还有知识工程方法,例如,场记分析法、卡片分类法、分类表格技术和基于模型的知识获等 。 (2) 模拟和分析需求 需求分析和模拟又包含三个层次的工作。首先是需求建模。需求模型的表现形式有自然语言、半形式化(如图、表、结构化英语等)和形式化表示等三种。需求概念模型的要求包括实现的独立性:不模拟数据的表示和内部组织等;需求模拟技术又分为企业模拟、功能需求模拟和非功能需求模拟等。 (3) 传递需求 传递需求的主要任务是书写软件需求规格说明。 (4) 认可需求 就是对需求规格说明达成一致,其主要任务是冲突求解,包括定义冲突和冲突求解两方面。常用的冲突求解方法有:协商、竞争、仲裁、强制、教育等,其中有些只能用人的因素去控制。 (5) 进化需求 客户的需要总是不断(连续)地增长,但是一般的软件开发又总是落后于客户需求的增长,如何管理需求的进化(变化)就成为软件进化的首要问题。对于传统的变化管理过程来说,其基本成分包括软件配置、软件基线和变化审查小组。当的发展是软件家族法 ,即产品线方法。多视点方法也是管理需求变化的一种新方法,它可以用于管理不一致性, 并进行关于变化的推理。 2. M公司的软件产品以开发实验型的新软件为主。用瀑布模型进行软件开发已经有近十年了,并得了一些成功。若你作为一名管理员刚加入M公司,你认为快速原型法对公司的软件开发更加优越,请向公司副总裁写一份报告阐明你的理由,切记:副总裁不喜欢报告长度 超过一页(B5)。 参考答案提示: 应先简述瀑布模型的缺点,它已不适宜开发实验型的软件。根据快速原型法的特点,说明它特别适合于开发探索型、实验型的软件。 3. 如何画分层数据流图? 答: 总的原则是:至顶而下,逐层分解(画分层数据流图)。 比较复杂的系统不能画在一张纸上,逐层分解的画法可以控制每一层的复杂度。 顶层:将整个系统作为一个加工,描述系统边界(输入与输出)。 中间层:表示某个加工分解为一组子加工,其中的子加工还需进一步分解。 底层:由不再进行分解的基本加工组成。 4. 加工小说明有哪些描述方法? 答: ● 结构化语言:介于自然语言和形式语言(如谓词逻辑)之间。 ● 结构化英语:通常由外层和内层结构组成。 ● 汉语的情况:精确、简明扼要、文体可以灵活。 ● 判定表:适用于表述比较复杂的加工逻辑,如具有多项选择件的操作。 ● 判定树:本质上与判定表相同,图形表示更易于理解。 5. 考察下图中子图、父图的平衡。 图1 图2 参考答案: 图1中子图与父图不平衡。子图是父图中加工2的分解,加工2 有输入数据流M和N,输出数据流T,而子图则只有一个输入数据N,却有两个输出数据流T与S。 图2中子图是父图中加工3的分解,虽然表面上加工3只有一个输入数据流“订货单”,而子图却有三个输入数据流,但是如果“订货单”是由“客户”、“账号”和“数量”三部分组成,即有如下数据目,订货单=客户+账号+数量(2.2.5数据词典),则子、父图平衡。 6. 画出银行款过程的DFD图。问题描述为:储户用存折款,首先填写款单,根据“ 账卡”中的信息检验款单与存折,如有问题,将问题反馈给储户,否则,登录“储户存款 数据库”,修改相应数据,并更新“账卡”,同时发出付款通知,出纳向储户付款。 参考答案: 7. 常用的软件需求分析方法有哪些? 答: 结构化分析方法(SA)、功能分解法、信息建模法、面向对象的分析方法(OOA)。 习题三答案 一、 选择题 1. 模块的基本特征是(A C)。 A) 外部特征(输入/输出、功能) B) 内部特征(输入/输出、功能) C) 内部特征(局部数据、代码) D) 外部特征(局部数据、代码 ) 2. SD方法的设计总则是(C D)。 A) 程序简洁、操作方便 B) 结构清晰、合理 C) 模块内聚性强 D) 模块之间耦合度低 3. 软件设计的主要任务是(A B D)。 A) 将分析阶段获得的需求说明转换为计算机中可实现的系统 B) 完成系统的数据结构和程序结构设计 C) 完成模块的编码和测试 D) 对模块内部的过程进行设计 4. 设计阶段应达到的目标有(A D)。 A) 提高可靠性和可维护性 B) 提高应用范围 C) 结构清晰 D) 提高可理解性和效率 5. 从工程管理的角度来看,软件设计分两步完成(D)。 A) ①系统分析②模块设计 B) ①详细设计②总体设 计 C) ①模块设计②详细设计 D) ①总体设计②详细设 计 6. 模块独立性准则由以下定性指标来衡量(BD)。 A) 分解度    B) 耦合度    C) 屏蔽性    D) 内聚性 7. 用户界面设计的任务包括(A B C)。 A) 确定用户界面类型 B) 建立任务模型 C) 建立用户模型 D) 建立功能模型 8. 程序设计语言可以分为(B C D)。 A) 面向过程的语言    B) 机器语言 C) 高级语言    D) 汇编语言  9. 程序效率包括(A C D)几个方面的内容。 A) 代码效率     B) 运行效率    C) 存储效率     D) I/O效率 10. SP方法中的基本控制结构有(A B C)。 A) 顺序结构 B) 选择结构 C) 重复结构 D) GOTO结构 11. 内部文档可用注释语言书写,注释语言分为(A B C D)。 A) 序言性注释 B) 描述性注释 C) 功能性注释 D) 状态性注释 12. 为使程序中数据说明更易于理解和维护,必须遵循以下原则(A B C) 。 A) 数据说明的次序应当规范化 B) 一个语句说明多个变量时,各变量名按字母顺序排列 C) 对于复杂的数据结构,要加注释,说明在程序实现时的特点 D) 定义变量名应按字母顺序排列 13. 源程序的效率与(D)阶段确定的算法的效率直接有关。 A) 概要设计 B) 总体设计 C) 单元设计 D) 详细设计 14. 在详细设计翻译转换成源程序代码后,算法效率反映为对程序的哪几个方面的要求 (C D)。 A) 读写速度 B) 代码长度 C) 存储容量 D) 执行速度 15. 提高程序效率的根本途径在于(B C)。 A) 编程时对程序语句进行调整 B) 选择良好的设计方法 C) 使程序最大限度的简洁 D) 选择良好的数据结构与算法 二、判断题 1. 划分模块可以降低软件的复杂度和工作量,所以应该将模块分得越小越好。 (×) 2. 在网状结构中任何两个模块都是平等的,没有从属关系,所以在软件开发过程中常常被使用。(×) 3. 信息隐蔽原则有利于提高模块的内聚性。(√) 4. 中心变换型的DFD图可看成是对输入数据进行转换而得到输出数据的处理,因此可以使 用事务分析技术得到初始的模块结构图。(×) 5. SD法是一种面向数据结构的设计方法,强调程序结构与问题结构相对应。 (×) 6. 所谓结构冲突,是指输入数据与输出数据之间很少或没有结构上的对应关系。通常解决 的办法是:构造一个或者多个中间结构,在输入和输出结构之间进行转换。(√) 7. 当模块的控制范围是其作用范围的子集时,模块之间的耦合度较低。(×) 8. JACKSON方法是以数据流、数据封闭性准则逐层分解的。(×) 9. 程序设计语言的工程特性包括:可移植性、可重用性、可维护性、局部性和顺序性。(×) 10. 项目应用领域是选择语言的关键因素。(√) 11. FORTRAN、Pascal、C语言、PL/1和汇编语言都是科学工程计算可选用的语言。(×) 12. 要用快速原型法开发软件,应选用4GL语言。(√) 13. 提高程序效率的根本途径是选择良好的设计方法数据结构与算法。(×) 14. 良好的程序设计风格简单说就是高的编程技巧。(√) 三、简答题 1. 模块内联系和模块间联系有哪些种类? 答:块间联系的各种类型的划分,从以下3方面考虑: ● 按块间联系的方式(可分为直接引用与过程调用); ● 按块间共用信息的作用(可分为数据型、控制型与混合型); ● 按块间共用的信息数量多少(信息多联系紧密)。 (1) 块间联系的类型,按照耦合度由大到小分为: 内容型:直接引用另一模块的内部信息; 公共型:两个模块引用共同的全程数据区; 控制型:模块间传送的信息用于控制模块的内部逻辑; 复合型:模块间传送复合的数据结构; 数据型:模块间传送单个数据项。 (2) 块内联系的类型,按照内聚性从小到大分为: 偶然型:模块内部没有必然联系; 逻辑型:逻辑上相似的功能放进一个模块; 瞬时型:将同时执行的语句放在一个模块; 通信型:模块中的各部分引用共同的数据; 顺序型:模块中一部分的输出是另一部分的收入; 功能型: 模块中刚好包含了完成一个基本任务所必需的成分。 2. 分析以下DFD图,说明属于哪种类型的DFD图,并按照相应的变换将其转换为初始的模块 结构图。 参考答案:(略) 3. 下图是修改文件记录的DFD图,请确定其主加工。 解:主加工为:账号、修改、写记录。 4. 按照“降低块间联系,提高块内联系”的设计总则对模块进行修改,具体从哪些方面进 行改进? 解: (1) 尽可能建立功能模块; (2) 消除重复功能; (3) 模块的作用范围与控制范围,即当作用范围为控制范围的子集时,才能获得较低的块间 联系; (4) 模块的大小适当; (5) 模块的扇入扇出数不宜太多。 5. 根据模块的作用范围与控制范围的原则,判定a、b两图的正确性。 解:显然,图a不满足作用范围应与控制范围的原则,模块F的作用范围不在控制范围之内。 图b的模块设计合理。 6. 图a中,模块G为判定,判断涉及到模块B、F、G,请指出设计中的错误,再根据改进模 块图的基本原则,画出1~2个改进方案(不改变模块G的判断关系),并说明是按照哪基本 原则进行改进的。 解:图b为一个改进方案,将模块G的位置提高,使其作用范围为控制范围的子集,减少模块 之间的联系。 7. 编码阶段的主要任务是什,应交付的结果是什么? 答:编码阶段的主要任务是为每个模块编写程序。即是:将详细设计的结果转换为用某种计 算机语言写的程序——源程序代码。编码阶段应交付的结果是带有“程序内部文档”的、不 再含有语法错误的程序。 8. SP法的自顶向下,逐步求精方法的优点有哪些? 答:此法符合人们解决复杂问题的普遍规律,可提高软件开发的成功率和生产率;而且用先 全局后局部、先整体后细节、先抽象后具体的逐步求精过程,开发出来的程序具有清晰的层 次结构,因此程序容易阅读和理解。这样,程序自顶向下,逐步细化,分解成一个树型结构 。 因此,在同一层次的节点上做细化工作,相互之间没有联系,它们之间的细化工作相互独立 ;在任何一步发生错误,一般只影响它下层的节点,同一层其他节点不受影响;在以后的测试中,也可以先独立地一个节点一个节点地做,最后再集成。这样,程序清晰和模块化,使 得在修改和重新设计一个软件时,可复用的代码量最大。 9. 为了使程序具有良好的设计风格,应注意哪些方面的问题? 答:(1) 标识符应按意名。 标识符即符号名,包括:模块名、常量名、标号名、子程序名、数据区名、缓冲区名等。 这些名字应能反映它所代表的实际东西,应有一定实际意义,使其能够见名知意,有助于对 程序功能的理解。 (2) 程序应加注释,它分为两类:序言性注释和功能性注释。 序言性注释应置于每个模块的起始部分,主要内容有:①说明每个模块的用途,功能;②说明模块的接口即调用格式、参数描述及从属模块的清单;③数据描述;④开发历史 。 功能性注释是嵌在源程序体中的,用于说明其后的程序段或语句的功能以及数据的状态;也就是解释下面要“做什么”,或是执行下面的语句会发生什么情况;而不是解释下面“怎么做”,因为怎么做常常是与程序重复的,且对读者理解程序没有什么帮助。 10. 样评价程序的执行效率?它与程序清晰性的关系是怎样的? 答:许多程序员往往片面追求效率,其实程序系统的成本不仅包括运行所需的机时,同时还应把程序员及操作员所花费的人力考虑进去。在编程时为追求效率而损害可读性或可靠性,会给以后的维护工作带来困难,所以从整体上看来是不值得的。 此外,还应该认识到,提高程序效率的根本途径在于:选择良好的设计方法、良好的数据结构与算法,而不是靠编程时对程序语句进行调整。 (1) 追求建立在不损害程序可读性或可靠性基础上,要先使程序正确、清晰,再提高程序 效率。 (2) 不能因为贪图效率上的小利,而破坏程序的清晰性。 (3) 让编译程序去作简单的优化。 (4) 提高程序效率的根本途径在于:选择良好的设计方法和良好的数据结构与算法,而不是靠编程时对程序语句做调整。 11. 假定:需要编一个求解一元二次方程根的子程序,加入到现有的子程序库中,供其他程序员使用。要求: (1) 为该子程序写一个序言性注释; (2) 用PASCAL语言或其他语言写出这个子程序(要把根的性质,如:实根、复根、降为一次方程等有区别地通知调用者),并加上描述性注释。 答案:(略) 习题四答案 一、选择题 1. 面向对象程序设计的基本机制(ABC)。 A) 继承 B) 消息 C) 方法 D) 结构 2. 下列属于面向对象的要素有(BCD)。 A) 分类性 B) 抽象 C) 共享 D) 封装 3. 下列选项中属于面向对象开发方法的有(ACD)。 A) Booch B) CAD C) Coad D) OMT 4. 下列属于Coad方法中面向对象的分析模型的层次有(AB)。 A) 主题层 B) 对象层 C) 应用层 D) 接口层 5. 一个类属性依其特征划分,其类型有(ABCD)。 A) 描述型 B) 定义型 C) 派生型 D) 参考型 6. 在进行面向对象分析时,所采用的模型有(ABD)。 A) 对象模型 B) 动态模型 C) 静态模型 D) 功能模型 7. 状态是对象属性的值的一种抽象,它的性质有(AB)。 A) 时间性 B) 持续性 C) 有序性 D) 有穷性 8. 数据流图中的处理必须用对象中的操作来实现常见的操作有(ABCD)。 A) 查询 B) 动作 C) 活动 D) 访问 9. 建立继承关系时所采用的方式有(AC)。 A) 自顶向下 B) 从内到外 C) 自底向上 D) 从复杂到简单 10. 对象是人们要研究的任何事物主要的对象类型有(ABCD)。 A) 有形实体 B) 作用 C) 事件 D) 性能说明 二、判断题 1. 面向对象的的方法是以类作为最基本的元素,它是分析问题解决问题的核心。(×) 2. 类是指具有相同或相似性质对象的抽象,对象是抽象的类,类的具体化就是对象。(√) 3. 继承性是父类和子类之间共享数据结构和消息的机制,这是类之间的一种关系(×)。 4. 多态性增强了软件的灵活性和重用性,允许用更为明确、易懂的方式去建立通用软件, 多态性和继承性相结合使软件具有更广泛的重用性和可扩充性。(×) 5. 面向对象分析,就是抽和整理用户需求并建立问题域精确模型的过程。(√) 6. 面向对象的设计的主要目标是提高生产效率,提高质量和提高可维护性。(√) 7. 对象模型表示了静态的、结构化的系统数据性质,描述了系统的静态结构,它是从客观世界实体的对象关系角度来描述,表现了对象的相互关系。(√) 8. 面向对象的分析是用面向对象的方法对目标系统的问题空间进行理解、分析和反映。通过对象层次结构的组织确定解空间中应存在的对象和对象层次结构。(√) 9. 类的设计过程包括:确定类,确定关联类,确定属性,识别继承关系。(√) 10. 复用也叫重用或再用,面向对象技术中的“类”,是比较理想的可重用软构件。有三种重用方式:实例重用、继承重用、多态重用。(√) 11. 主题是一种关于模型的抽象机制,它是面向对象模型的概貌,也是关于某个模型要同时考虑和理解的内容,主题起一种控制作用。(√) 12. 面向对象的分析由对象、结构、继承性和基于消息的通信构成。(×) 13. 支持继承性是面向对象程序设计语言和传统程序设计语言在语言机制方面的根本区别。(√) 14. 面向对象的分析过程主要包括三项内容:理解、表达和验证。(√) 15. 面向对象的设计的主要目标是提高生产效率、提高质量和提高可维护性。(√) 三、 简答题 1. 与传统程序设计模式中的过程调用相比,消息传递机制有何本质区别? 答: (1) 消息传递必须给出信道的信息,通常要指出明显的接受方。 (2) 由于接受方是一通信实体,具有保持状态的能力,所以同一发送方在不同时刻向同一 接受方发送同样的信息,可因接受方的当状态不同而得到不同的结果。 (3) 消息传递可以是异步的,发送方可以不必等待接受方返回信息就可以继续执行后面的操作,因而支持程序的并发和分布执行,而过程调用只能是同步的,本质上是串行的。 2. 阐述面向对象的特征,并做简要的解释。 答: (1) 对象惟一性。 每个对象都有自身惟一的标识,通过这种标识,可找到相应的对象。 (2) 分类性。 是指将具有一致的数据结构(属性)和行为(操作)的对象抽象成类。 (3) 继承性。 是父类和子类之间共享数据结构和方法的机制,这是类之间的一种关系。 (4) 多态性。 是指相同的操作或函数,过程作用于多种类型的对象上,并获得不同的结果。 3. Coad方法主要由面向对象分析OOA和面向对象设计OOD。OOA方法分析过程和构造OOA概念模型的顺序由5个层次组成,请简述这5个层次。 答: (1) 发现类及对象。描述如何发现类及对象。从应用领域开始识别类及对象,形成整 个应用的基础,然后,据此分析系统的责任。 (2) 识别结构。该阶段分为两个步骤。第一,识别“一般-特殊”结构,该结构捕获了识别出的类的层次结构;第二,识别“整体-部分”结构,该结构用来表示一个对象如何成为另一个对象的一部分,以及多个对象如何组装成更大的对象。 (3) 定义主题。主题由一组类及对象组成,用于将类及对象模型划分为更大的单位,便于理解。 (4) 定义属性。其中包括定义类的实例(对象)之间的实例连接。 (5) 定义服务。其中包括定义对象之间的消息连接。 4. 面向对象程序设计有哪些优点? 解:开发时间短、效率高、可靠性高,所开发的程序更强壮。由于面向对象编程的可重用性 ,可以在应用程序中大量采用成熟的类库,从而缩短开发时间,这样程序更易于维护、 更新和升级。继承和封装使得应用程序的修改带来的影响更加局部 化。 5.比较面向对象方法与结构化方法的特点。 解:分析是问题抽象 (做什么),设计是问题求解 (怎么做),实现是问题的解 (结果)。任 何方法学对客观世界的抽象和求解过程都是如此。在问题抽象阶段,结构化方法面向过程, 按照数据变换的过程寻找问题的结点,对问题进行分解。因此,与面向对象方法强调的对象 模型不同,描述数据变换的功能模型是结构化方法的重点。如果问题世界的功能比数据更复 杂或者更重要,那么结构化方法仍然应是首选的方法学。如果数据结构复杂且变换不多, 那么如果以过程主导分析和设计,一旦有系统变更就会给下游开发带来极大混乱。 由于对过程的理解不同,面向过程的功能细分所分割出的功能模块有时会因人而异。而面向 对象的对象细分,从同一问题领域的对象出发,不同人得出相同结论的比率较高。 在设计上,结构化方法学产生自顶向下、结构清晰的系统结构。每个模块有可能保持较强的独立性,但它往往与数据库结构相独立,功能模块与数据库逻辑模式间没有映射关系,程序与数据结构很难封装在一起。如果数据结构复杂,则模块独立性很难保证。面向对象方法抽象的系统结构往往并不比结构化方法产生的系统结构简单,但它能映射到数据库结构中,很容易实现程序与数据结构的封装。 在软件工程基本原则中有一“形式化原则”,即对问题世界的抽象结论应该以形式化语言 (图形语言、伪码语言等)表述出来。结构化方法可以用数据流图、系统结构图、数据辞典、状态转移图、实体关系图来进行系统逻辑模型的描述;而面向对象方法可以使用对象模型图、数据辞典、动态模型图、功能模型图。其中对象模型图近似系统结构图与实体关系图的结合,动态模型图类似状态迁移图,功能模型图类似数据流图。 6.当重要的对象被发现后,通过一组互相关联的模型详细表示类之间的关系和对象的行为,这些模型从四个不同的侧面表示了软件的体系结构、静态逻辑、动态逻辑、静态物理和动态物理。试描述一下这四种特性。 解:静态逻辑模型描述实例化(类成员关系)、关联、聚集(整体/部分)、和一般化(继承)等关系。这被称为对象模型。一般化关系表示属性和方法的继承关系。定义对象模 型的图形符号体系通常是从用于数据建模的实体关系图导出的。对设计十分重要的约束,如 基数(一对一、一对多、多对多),也在对象模型中表示。 动态逻辑模型描述对象之间的互相作用。互相作用通过一组协同的对象,对象之间消 息的有序的序列,参与对象的可见性定义,来定义系统运行时的行为。 静态物理模型通过模块描述代码的布局。动态物理模型描述软件的进程和线程体系结 构。 习题五答案 一、选择题 1. 下列不是模型元素的是(D)。 A) 关联 B) 聚合 C) 依赖 D) 笔记 2. UML具有扩展性,常见的扩展机制有(BCD)。 A) 修饰 B) 版类 C) 加标签值 D) 约束 3. UML语言支持的建模方式有(ABD)。 A) 静态建模 B) 动态建模 C) 模块化建模 D) 功能建模 4. 下列各种图可用于动态建模的有(ACD)。 A) 状态图 B) 类图 C) 序列图 D) 活动图 5. 下列属于状态的组成部分的有(AB)。 A) 名称 B) 活动 C) 件 D) 事件 6. UML中包括的事件有(ABCD)。 A) 件为真 B) 收到另一对象的信号 C) 收到操作调用 D) 时间表达式 7. 属性的可见性有(ABD)。 A) 公有的 B) 私有的 C) 私有保护的 D) 保护的 8. 用例之间的关系有(BCD)。 A) 友元 B) 扩展 C) 使用 D) 组合 9. 应用于通用化约束的方式有(ABCD)。 A) 完整 B) 不相交 C) 不完整 D) 覆盖 10. 消息的类型有(ABC)。 A) 同步 B) 异步 C) 简单 D) 复杂 二、 判断题 1. UML建模语言是由视图、图、模型元素和通用机制构成的层次关系来描述的。 (√) 2. UML是一种建模语言,是一种标准的表示,是一种方法。 (×) 3. 泳道是一种分组机制,它描述了状态图中对象所执行的活动。 (×) 4. 同步消息和异步消息的主要区别是:同步消息的发送对象在消息发送后,不必等待消息处理,可立即继续执行,而异步消息则发送对象必须等待接收对象完成消息处理后,才能继续执行。 (×) 5. 类图中的角色是用于描述该类在关联中所扮演的角色和职责的。 (√) 6. 类图用来表示系统中类和类与类之间的关系,它是对系统动态结构的描述。 (×) 7. 用例模型的基本组成部件是用例、角色和用例之间的联系。 (√)
### 回答1: CFB工作模式中,如果密文插入或丢失了一个分组,则会导致解密时对应的明文分组与原始明文分组不同步,进而影响后续分组的解密。通常情况下,一个分组的错误会导致接下来的所有分组解密错误,直到下一个正确的同步点。因此,一个错误的分组可能会导致多个分组的解密错误。 ### 回答2: CFB(Cipher Feedback)模式是一种使用分组密码算法的加密模式,它允许以流式的方式加密和解密数据。在CFB模式中,密文是通过将一个密文分组与明文分组的异或结果作为输出密文生成的。 当向CFB模式中插入或丢失一个分组时,会造成密文流与预期的不一致,从而导致错误的传播。具体地说,插入一个分组会导致之后的所有分组都偏移一个位置,因为插入的分组会在加密和解密过程中持续地参与异或运算。 假设在第n个密文分组后插入一个分组,当解密第n+1个密文分组时,使用的密钥和向量将与预期值不一致,因为密钥和向量从第n+1个分组开始参与异或运算。这就导致解密过程中后续分组的明文与预期明文不同,错误会继续传播下去,直到插入点之后的所有分组都被解密为错误的明文。 同样地,如果在第n个密文分组之后丢失一个分组,解密过程将会使用错误的向量进行异或运算。这就会导致后续分组的解密过程出现偏移,明文与预期明文不符。错误会传播并影响之后的分组,直到找到正确的起始点,以重新获正确的明文流。 总的来说,CFB工作模式中如果插入或丢失一个分组,错误会沿着密文流传播,影响从插入点或丢失点之后的所有分组的解密过程。因此,保持密文的完整性和正确性十分重要,以确保正确解密和得到预期的明文结果。 ### 回答3: 在CFB(Cipher Feedback)工作模式中,密文插入或丢失了一个分组,只会引起一个分组的分析错误传播。 CFB工作模式中,明文被划分为一系列的分组,每个分组的大小与加密算法的分组大小相同。首先,初始向量(IV)会被输入到加密算法中产生一个密文分组。这个密文分组会被解密并与对应的明文分组进行异或操作,然后产生一个密文分组。此后,这个密文分组又会被解密并与下一个明文分组进行异或操作,生成下一个密文分组,以此类推。 当密文插入或丢失了一个分组时,对应的解密操作也无法正常进行。具体分析错误的传播方式如下: 1.插入错误: 当密文中插入了一个分组时,这个插入的分组会被错误地解密。由于分组之间的依赖关系,这个错误的明文分组会继续参与后续分组的解密和异或操作。这就导致了后续分组的解密结果出现错误,从而引发了错误的传播。 2.丢失错误: 当密文中丢失了一个分组时,对应的解密操作无法从该分组中获到正确的明文。因此,这个丢失的分组无法正确地参与后续的异或操作。由于密文和明文分组之间的依赖关系,这将导致后续分组的解密结果出现错误,并进一步引发错误的传播。 总结起来,CFB工作模式中,密文插入或丢失了一个分组只会引起一个分组的分析错误传播。这是因为分组之间的解密和异或操作依赖于一个分组的解密结果,任何一个分组解密错误都会影响到后续分组的解密结果,但仅限于一个分组

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Vick_Zhang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值