61阅读

示波器的原理和使用-示波器的原理与使用全攻略

发布时间:2018-02-21 所属栏目:示波器的使用方法

一 : 示波器的原理与使用全攻略

61阅读/ www.61k.net在数字电路实验中,需要使用若干仪器、仪表观察实验现象和结果。常用的电子测量仪器有万用表、逻辑笔、普通示波器、存储示波器、逻辑分析仪等。万用表和逻辑笔使用方法比较简单,而逻辑分析仪和存储示波器目前在数字电路教学实验中应用还不十分普遍。示波器是一种使用非常广泛,且使用相对复杂的仪器。本章从使用的角度介绍一下示波器的原理和使用方法。

示波器工作原理

示波器是利用电子示波管的特性,将人眼无法直接观测的交变电信号转换成图像,显示在荧光屏上以便测量的电子测量仪器。它是观察数字电路实验现象、分析实验中的问题、测量实验结果必不可少的重要仪器。示波器由示波管和电源系统、同步系统、X轴偏转系统、Y轴偏转系统、延迟扫描系统、标准信号源组成。?

1.1 示波管阴极射线管(CRT)简称示波管,是示波器的核心。它将电信号转换为光信号。正如图1所示,电子枪、偏转系统和荧光屏三部分密封在一个真空玻璃壳内,构成了一个完整的示波管。
示波器原理 示波器的原理与使用全攻略
图1 示波管的内部结构和供电图示?

1.2?荧光屏现在的示波管屏面通常是矩形平面,内表面沉积一层磷光材料构成荧光膜。在荧光膜上常又增加一层蒸发铝膜。高速电子穿过铝膜,撞击荧光粉而发光形成亮点。铝膜具有内反射作用,有利于提高亮点的辉度。铝膜还有散热等其他作用。?

当电子停止轰击后,亮点不能立即消失而要保留一段时间。亮点辉度下降到原始值的10%所经过的时间叫做“余辉时间”。余辉时间短于10μs为极短余辉, 10μs—1ms为短余辉,1ms—0.1s为中余辉,0.1s-1s为长余辉,大于1s为极长余辉。一般的示波器配备中余辉示波管,高频示波器选用短余辉,低频示波器选用长余辉。?

由于所用磷光材料不同,荧光屏上能发出不同颜色的光。一般示波器多采用发绿光的示波管,以保护人的眼睛。?

1.3.电子枪及聚焦电子枪由灯丝(F)、阴极(K)、栅极(G1)、前加速极(G2)(或称第二栅极)、第一阳极(A1)和第二阳极(A2)组成。它的作用是发射电子并形成很细的高速电子束。灯丝通电加热阴极,阴极受热发射电子。栅极是一个顶部有小孔的金属园筒,套在阴极外面。由于栅极电位比阴极低,对阴极发射的电子起控制作用,一般只有运动初速度大的少量电子,在阳极电压的作用下能穿过栅极小孔,奔向荧光屏。初速度小的电子仍返回阴极。如果栅极电位过低,则全部电子返回阴极,即管子截止。调节电路中的W1电位器,可以改变栅极电位,控制射向荧光屏的电子流密度,从而达到调节亮点的辉度。第一阳极、第二阳极和前加速极都是与阴极在同一条轴线上的三个金属圆筒。前加速极G2与A2相连,所加电位比A1高。G2的正电位对阴极电子奔向荧光屏起加速作用。?

电子束从阴极奔向荧光屏的过程中,经过两次聚焦过程。第一次聚焦由K、G1、G2完成,K、K、G1、G2叫做示波管的第一电子透镜。第二次聚焦发生在G2、A1、 A2区域,调节第二阳极A2的电位,能使电子束正好会聚于荧光屏上的一点,这是第二次聚焦。A1上的电压叫做聚焦电压,A1又被叫做聚焦极。有时调节A1 电压仍不能满足良好聚焦,需微调第二阳极A2的电压,A2又叫做辅助聚焦极。?
1.4.偏转系统?

偏转系统控制电子射线方向,使荧光屏上的光点随外加信号的变化描绘出被测信号的波形。图8.1中,Y1、Y2和Xl、X2两对互相垂直的偏转板组成偏转系统。Y轴偏转板在前,X轴偏转板在后,因此Y轴灵敏度高(被测信号经处理后加到Y轴)。两对偏转板分别加上电压,使两对偏转板间各自形成电场,分别控制电子束在垂直方向和水平方向偏转。?
1.5.示波管的电源?

为使示波管正常工作,对电源供给有一定要求。规定第二阳极与偏转板之间电位相近,偏转板的平均电位为零或接近为零。阴极必须工作在负电位上。栅极G1相对阴极为负电位(—30V~—100V),而且可调,以实现辉度调节。第一阳极为正电位(约+100V~+600V),也应可调,用作聚焦调节。第二阳极与前加速极相连,对阴极为正高压(约+1000V),相对于地电位的可调范围为±50V。由于示波管各电极电流很小,可以用公共高压经电阻分压器供电。?

被测信号①接到“Y"输入端,经Y轴衰减器适当衰减后送至Y1放大器(前置放大),推挽输出信号②和③。经延迟级延迟Г1时间,到Y2放大器。放大后产生足够大的信号④和⑤,加到示波管的Y轴偏转板上。为了在屏幕上显示出完整的稳定波形,将Y轴的被测信号③引入X轴系统的触发电路,在引入信号的正(或者负)极性的某一电平值产生触发脉冲⑥,启动锯齿波扫描电路(时基发生器),产生扫描电压⑦。由于从触发到启动扫描有一时间延迟Г2,为保证Y轴信号到达荧光屏之前X轴开始扫描,Y轴的延迟时间Г1应稍大于X轴的延迟时间Г2。扫描电压⑦经X轴放大器放大,产生推挽输出⑨和⑩,加到示波管的X轴偏转板上。z轴系统用于放大扫描电压正程,并且变成正向矩形波,送到示波管栅极。这使得在扫描正程显示的波形有某一固定辉度,而在扫描回程进行抹迹。?

以上是示波器的基本工作原理。双踪显示则是利用电子开关将Y轴输入的两个不同的被测信号分别显示在荧光屏上。由于人眼的视觉暂留作用,当转换频率高到一定程度后,看到的是两个稳定的、清晰的信号波形。?

示波器中往往有一个精确稳定的方波信号发生器,供校验示波器用。?

示波器使用?

本节介绍示波器的使用方法。示波器种类、型号很多,功能也不同。数字电路实验中使用较多的是20MHz或者40MHz的双踪示波器。这些示波器用法大同小异。本节不针对某一型号的示波器,只是从概念上介绍示波器在数字电路实验中的常用功能。? 
2.1 荧光屏

荧光屏是示波管的显示部分。屏上水平方向和垂直方向各有多条刻度线,指示出信号波形的电压和时间之间的关系。水平方向指示时间,垂直方向指示电压。水平方向分为10格,垂直方向分为8格,每格又分为5份。垂直方向标有0%,10%,90%,100%等标志,水平方向标有10%,90%标志,供测直流电平、交流信号幅度、延迟时间等参数使用。根据被测信号在屏幕上占的格数乘以适当的比例常数(V/DIV,TIME/DIV)能得出电压值与时间值。?

2.2 示波管和电源系统?

1.电源(Power)?
示波器主电源开关。当此开关按下时,电源指示灯亮,表示电源接通。?

2.辉度(Intensity)?
旋转此旋钮能改变光点和扫描线的亮度。观察低频信号时可小些,高频信号时大些。?  一般不应太亮,以保护荧光屏。?

3.聚焦(Focus)?
聚焦旋钮调节电子束截面大小,将扫描线聚焦成最清晰状态。?

4.标尺亮度(Illuminance)?  此旋钮调节荧光屏后面的照明灯亮度。正常室内光线下,照明灯暗一些好。室内光线不足的环境中,可适当调亮照明灯。?

2.3 垂直偏转因数和水平偏转因数?

1.垂直偏转因数选择(VOLTS/DIV)和微调?
在单位输入信号作用下,光点在屏幕上偏移的距离称为偏移灵敏度,这一定义对X轴和Y轴都适用。灵敏度的倒数称为偏转因数。垂直灵敏度的单位是为 cm/V,cm/mV或者DIV/mV,DIV/V,垂直偏转因数的单位是V/cm,mV/cm或者V/DIV,mV/DIV。实际上因习惯用法和测量电压读数的方便,有时也把偏转因数当灵敏度。?

踪示波器中每个通道各有一个垂直偏转因数选择波段开关。一般按1,2,5方式从 5mV/DIV到5V/DIV分为10档。波段开关指示的值代表荧光屏上垂直方向一格的电压值。例如波段开关置于1V/DIV档时,如果屏幕上信号光点移动一格,则代表输入信号电压变化1V。?

每个波段开关上往往还有一个小旋钮,微调每档垂直偏转因数。将它沿顺时针方向旋到底,处于“校准”位置,此时垂直偏转因数值与波段开关所指示的值一致。逆时针旋转此旋钮,能够微调垂直偏转因数。垂直偏转因数微调后,会造成与波段开关的指示值不一致,这点应引起注意。许多示波器具有垂直扩展功能,当微调旋钮被拉出时,垂直灵敏度扩大若干倍(偏转因数缩小若干倍)。例如,如果波段开关指示的偏转因数是1V/DIV,采用×5扩展状态时,垂直偏转因数是0.2V/DIV。?  在做数字电路实验时,在屏幕上被测信号的垂直移动距离与+5V信号的垂直移动距离之比常被用于判断被测信号的电压值。?

2.时基选择(TIME/DIV)和微调

时基选择和微调的使用方法与垂直偏转因数选择和微调类似。时基选择也通过一个波段开关实现,按1、2、5方式把时基分为若干档。波段开关的指示值代表光点在水平方向移动一个格的时间值。例如在1μS/DIV档,光点在屏上移动一格代表时间值1μS。

“微调”旋钮用于时基校准和微调。沿顺时针方向旋到底处于校准位置时,屏幕上显示的时基值与波段开关所示的标称值一致。逆时针旋转旋钮,则对时基微调。旋钮拔出后处于扫描扩展状态。通常为×10扩展,即水平灵敏度扩大10倍,时基缩小到1/10。例如在2μS/DIV档,扫描扩展状态下荧光屏上水平一格代表的时间值等于?
2μS×(1/10)=0.2μS?

TDS实验台上有10MHz、1MHz、500kHz、100kHz的时钟信号,由石英晶体振荡器和分频器产生,准确度很高,可用来校准示波器的时基。

示波器的标准信号源CAL,专门用于校准示波器的时基和垂直偏转因数。例如COS5041型示波器标准信号源提供一个VP-P=2V,f=1kHz的方波信号。

示波器前面板上的位移(Position)旋钮调节信号波形在荧光屏上的位置。旋转水平位移旋钮(标有水平双向箭头)左右移动信号波形,旋转垂直位移旋钮(标有垂直双向箭头)上下移动信号波形。?


2.4 输入通道和输入耦合选择

1.输入通道选择?
输入通道至少有三种选择方式:通道1(CH1)、通道2(CH2)、双通道(DUAL)。选择通道1时,示波器仅显示通道1的信号。选择通道2时,示波器仅显示通道2的信号。选择双通道时,示波器同时显示通道1信号和通道2信号。测试信号时,首先要将示波器的地与被测电路的地连接在一起。根据输入通道的选择,将示波器探头插到相应通道插座上,示波器探头上的地与被测电路的地连接在一起,示波器探头接触被测点。示波器探头上有一双位开关。此开关拨到“× 1”位置时,被测信号无衰减送到示波器,从荧光屏上读出的电压值是信号的实际电压值。此开关拨到“×10"位置时,被测信号衰减为1/10,然后送往示波器,从荧光屏上读出的电压值乘以10才是信号的实际电压值。?

2.输入耦合方式?
输入耦合方式有三种选择:交流(AC)、地 (GND)、直流(DC)。当选择“地”时,扫描线显示出“示波器地”在荧光屏上的位置。直流耦合用于测定信号直流绝对值和观测极低频信号。交流耦合用于观测交流和含有直流成分的交流信号。在数字电路实验中,一般选择“直流”方式,以便观测信号的绝对电压值。?

2.5 触发?

第一节指出,被测信号从Y轴输入后,一部分送到示波管的Y轴偏转板上,驱动光点在荧光屏上按比例沿垂直方向移动;另一部分分流到x轴偏转系统产生触发脉冲,触发扫描发生器,产生重复的锯齿波电压加到示波管的X偏转板上,使光点沿水平方向移动,两者合一,光点在荧光屏上描绘出的图形就是被测信号图形。由此可知,正确的触发方式直接影响到示波器的有效操作。为了在荧光屏上得到稳定的、清晰的信号波形,掌握基本的触发功能及其操作方法是十分重要的。?

1.触发源(Source)选择?  要使屏幕上显示稳定的波形,则需将被测信号本身或者与被测信号有一定时间关系的触发信号加到触发电路。触发源选择确定触发信号由何处供给。通常有三种触发源:内触发(INT)、电源触发(LINE)、外触发EXT)。?

内触发使用被测信号作为触发信号,是经常使用的一种触发方式。由于触发信号本身是被测信号的一部分,在屏幕上可以显示出非常稳定的波形。双踪示波器中通道1或者通道2都可以选作触发信号。?

电源触发使用交流电源频率信号作为触发信号。这种方法在测量与交流电源频率有关的信号时是有效的。特别在测量音频电路、闸流管的低电平交流噪音时更为有效。?

外触发使用外加信号作为触发信号,外加信号从外触发输入端输入。外触发信号与被测信号间应具有周期性的关系。由于被测信号没有用作触发信号,所以何时开始扫描与被测信号无关。?

正确选择触发信号对波形显示的稳定、清晰有很大关系。例如在数字电路的测量中,对一个简单的周期信号而言,选择内触发可能好一些,而对于一个具有复杂周期的信号,且存在一个与它有周期关系的信号时,选用外触发可能更好。

2.触发耦合(Coupling)方式选择?

触发信号到触发电路的耦合方式有多种,目的是为了触发信号的稳定、可靠。这里介绍常用的几种。?

AC耦合又称电容耦合。它只允许用触发信号的交流分量触发,触发信号的直流分量被隔断。通常在不考虑DC分量时使用这种耦合方式,以形成稳定触发。但是如果触发信号的频率小于10Hz,会造成触发困难。?

直流耦合(DC)不隔断触发信号的直流分量。当触发信号的频率较低或者触发信号的占空比很大时,使用直流耦合较好。?

低频抑制(LFR)触发时触发信号经过高通滤波器加到触发电路,触发信号的低频成分被抑制;高频抑制(HFR)触发时,触发信号通过低通滤波器加到触发电路,触发信号的高频成分被抑制。此外还有用于电视维修的电视同步(TV)触发。这些触发耦合方式各有自己的适用范围,需在使用中去体会。?

3.触发电平(Level)和触发极性(Slope)?

触发电平调节又叫同步调节,它使得扫描与被测信号同步。电平调节旋钮调节触发信号的触发电平。一旦触发信号超过由旋钮设定的触发电平时,扫描即被触发。顺时针旋转旋钮,触发电平上升;逆时针旋转旋钮,触发电平下降。当电平旋钮调到电平锁定位置时,触发电平自动保持在触发信号的幅度之内,不需要电平调节就能产生一个稳定的触发。当信号波形复杂,用电平旋钮不能稳定触发时,用释抑(Hold Off)旋钮调节波形的释抑时间(扫描暂停时间),能使扫描与波形稳定同步。?

极性开关用来选择触发信号的极性。拨在“+”位置上时,在信号增加的方向上,当触发信号超过触发电平时就产生触发。拨在“-”位置上时,在信号减少的方向上,当触发信号超过触发电平时就产生触发。触发极性和触发电平共同决定触发信号的触发点。?

2.6 扫描方式(SweepMode)?
扫描有自动(Auto)、常态(Norm)和单次(Single)三种扫描方式。?  自动:当无触发信号输入,或者触发信号频率低于50Hz时,扫描为自激方式。?  常态:当无触发信号输入时,扫描处于准备状态,没有扫描线。触发信号到来后,触发扫描。?  单次:单次按钮类似复位开关。单次扫描方式下,按单次按钮时扫描电路复位,此时准备好(Ready)灯亮。触发信号到来后产生一次扫描。单次扫描结束后,准备灯灭。单次扫描用于观测非周期信号或者单次瞬变信号,往往需要对波形拍照。?  上面扼要介绍了示波器的基本功能及操作。示波器还有一些更复杂的功能,如延迟扫描、触发延迟、X-Y工作方式等,这里就不介绍了。示波器入门操作是容易的,真正熟练则要在应用中掌握。值得指出的是,示波器虽然功能较多,但许多情况下用其他仪器、仪表更好。例如,在数字电路实验中,判断一个脉宽较窄的单脉冲是否发生时,用逻辑笔就简单的多;测量单脉冲脉宽时,用逻辑分析仪更好一些。

二 : 触发器的原理和使用方法

触发器




触发器的定义:(www.61k.com)q触发器是当特定事件出现时自动执行的存储过程
q特定事件可以是执行更新的DML语句和DDL语句 q触发器不能被显式调用 q触发器的功能:
q自动生成数据 q自定义复杂的安全权限 q提供审计和日志记录 q启用复杂的业务逻辑
触发器的语法:CREATE [OR REPLACE] TRIGGER trigger_name

AFTER | BEFORE | INSTEAD OF

[INSERT] [[OR] UPDATE [OF column_list]]

[[OR] DELETE]

ON table_or_view_name

[REFERENCING {OLD [AS] old / NEW [AS] new}]

[FOR EACH ROW]

[WHEN (condition)]

pl/sql_block;

触发器由三部分组成:

q触发器语句(事件) q定义激活触发器的 DML 事件和 DDL 事件 q触发器限制 q执行触发器的条件,该条件必须为真才能激活触发器 q触发器操作(主体) q包含一些 SQL 语句和代码,它们在发出了触发器语句且触发限制的值为真时运行

触发器按执行次序分为:before触发器、after触发器
before触发器:
触发器原理 触发器的原理和使用方法
after触发器:
触发器原理 触发器的原理和使用方法

for each row:
create table student (id number (10 ),name varchar2 (20 ),age number( 10)); insert into student values( 1, '张三',20); insert into student values( 2, '李四',25); insert into student values( 3, '王五',30);
create or replace trigger trigger1 after update --after触发器,并且针对于更新操作 on student --触发器针对哪张表 for each row -- 添加了 begin dbms_output.put_line('更新了' ); end; -- ORA-04089: 无法对 SYS 拥有的对象创建触发器 SQL >connect hr/ hr@ jiagulun update student s set s.age = s.age +5 ; SQL> set serverout on; SQL> update student s set s.age = s.age +5 ; 更新了--触发器触发了 更新了--触发器触发了 更新了--触发器触发了 3 rows updated --更新了三行触发了三次 SQL>
create or replace trigger trigger1 after update on studentfor each row-- 没有添加了 begin dbms_output.put_line('更新了' ); end;
SQL> update student s set s.age = s.age +5 ; 更新了--触发器触发了 3 rows updated --更新了三行触发了一次 SQL> 通过上面的测试可以得出: 1.对于sys用户所拥有的对象是不能建立触发器的。 2.for each row: 1.假如添加了说明是行级别的触发器,每行的更新都会触发。 2. 假如没添加就是表级别的触发器,所有的更新行只会触发一次。


:new 和 :old的区别:
:new 和sqlserver中的inserted
:old 和sqlserver中的deleteed

如果在触发器的plsql内使用了:new 和 :old,就必须使用行级触发器也就是for each row
因为:new和:old是指向某行记录的指针,假如是表级别的触发器这两个指针不知道确定指向哪行记录
这样就会产生歧义了
当执行insert 的时候: :new存在 :old不存在。当执行delete 的时候: :new不存在 :old存在。当执行update 的时候: :new存在 :old存在。 当一个update被执行的时候: oracle是先删除记录行,所以old是需要的 oracle再insert记录行,所以new是需要的
create or replace trigger trigger2 before update on student for each row begin if :old.age > 20 or :new.age < 30 then raise_application_error (-20001 ,&#39;大于20岁的学生不需要更新,而且更新后的年龄不能大于30&#39; ); end if; end; SQL> update student s set s.age = s.age + 10; update student s set s.age = s.age + 10 --ORA-20001: 大于20岁的学生不需要更新,而且更新后的年龄不能大于30 --ORA-06512: 在 "HR.TRIGGER2", line 3 --ORA-04088: 触发器 &#39;HR.TRIGGER2&#39; 执行过程中出错
create or replace trigger trigger2 before update on student --for each row 使用了new或old就必须使用行级触发器 begin if :old.age > 20 or :new.age < 30 then raise_application_error (-20001 ,&#39;大于20岁的学生不需要更新,而且更新后的年龄不能大于30&#39; ); end if; end; --ORA-04082: NEW 或 OLD 引用不允许在表级触发器中
SQL>
通过上面的操作可以发现:
1. NEW 或 OLD 引用不允许在表级触发器中
2. 在update中既有new 也有 old
3. 在触发器中不能使用alter、create、事务回滚、
create or replace trigger trigger3afterinsert --对于before 类型 insert操作的触发器,:new是不能被修改的;只能在before情况下 on student for each row begin if :new.age < 0 then :new.age := -:new.age; end if; end;
--ORA-04084: 无法更改此触发器类型的 NEW 值
create or replace trigger trigger3 before/after delete on student for each row begin if :old.age > 0 then:old.age := - :old.age ;--无论在before还是after中都不能更改 end if; end; --ORA-04085: 无法更改 OLD 引用变量的值

触发器的类型:
触发器原理 触发器的原理和使用方法触发器原理 触发器的原理和使用方法
触发器原理 触发器的原理和使用方法


触发器原理 触发器的原理和使用方法instead of触发器:
SQL> create view stu_add_view 2 as select s.id, s.name, s.age, a.zz from student s inner join address a 3 on s.id = a.xh; View created
SQL> select * from stu_add_view; ID NAME AGE ZZ ----------- -------------------- ----------- ---------- 2 李四 40 郑州 1 张三 35 开封 3 王五 45 洛阳 SQL> update stu_add_view sav set sav.zz = &#39;江西&#39; where sav.name = &#39;王五&#39;; update stu_add_view sav set sav.zz = &#39;江西&#39; where sav.name = &#39;王五&#39;; --ORA-01779: 无法修改与非键值保存表对应的列
--对于上面的错误,可以通过触发器来解决: create or replace trigger trigger4 instead of update on stu_add_view for each row declare xh3 number (10 );--变量的声明不要和列名相同,因为会出现下面问题: begin select s.id into xh3 from student s where s.name = : old.name; delete address a where a.xh = xh3;--这里,假如上面的声明是xh那么就会出现a.xh = xh这会出现恒等的情况,会删除所有记录 insert into address values (xh3 ,:new.zz ); end ; 其实instead of 触发器的sql.block中做的操作就是底层更新的操作:先删除后插入
-------------------------写一个触发器:所有的dml操作都输出操作信息---------- create or replace trigger trigger6 before insert or delete or update on student for each row begin if inserting then dbms_output.put_line(&#39;进行的是插入操作插入的信息如下:姓名:&#39; ||:new.name ||&#39;年龄:&#39; ||:new.age ); elsif deleting then dbms_output.put_line (&#39;进行的是删除操作删除的信息如下:姓名:&#39; ||:old.name ||&#39;年龄:&#39; ||:old.age ); elsif updating then dbms_output.put_line (&#39;进行的是更新操作原信息如下:姓名:&#39; ||:new.name ||&#39;年龄:&#39; ||:new.age ); dbms_output.put_line (&#39;新信息如下姓名:&#39; ||:old.name ||&#39;年龄:&#39; ||:old.age ); else dbms_output.put_line (&#39;做的是其他操作&#39; ); end if; end;

--------------写一个模式触发器---------------------------- create table dropped_obj (obj_name varchar2( 20), obj_type varchar2(20),drop_date date);
create or replace trigger trigger1 before alter or drop on schema --针对于该用户对象的删除操作进行触发 begin insert into dropped_obj values(ora_dict_obj_name,ora_dict_obj_type,sysdate ); end ; SQL> drop table student; Table dropped
SQL> select * from dropped_obj;--会发现刚刚删除的操作被记录下来 OBJ_NAME OBJ_TYPE DROP_DATE -------------------- -------------------- ----------- STUDENT TABLE 19- 1月 -15 6 :
SQL>
--使用的变量: --Ora_client_ip_address 返回客户端的ip地址 --Ora_database_name 返回当前数据库名 --Ora_login_user 返回登录用户名 --Ora_dict_obj_name 返回ddl操作所对应的数据库对象名 --Ora_dict_obj_type 返回ddl操作所对应的数据库对象的类型
--------------写一个数据库触发器---------------------------- create table event_table ( event varchar2( 30), time date );
create or replace trigger trigger_start after startup on database begin insert into event_table values (ora_sysevent ,sysdate ); end ; create or replace trigger trigger_shut before shutdown on database; begin insert into event_table values (ora_sysevent ,sysdate ); end ;
SQL> shutdown immediate; --关闭数据库事件 Database closed. Database dismounted. ORACLE instance shut down. SQL> startup; ORACLE instance started.--开启数据库事件
Total System Global Area 400846848 bytes Fixed Size 2213776 bytes Variable Size 251660400 bytes Database Buffers 142606336 bytes Redo Buffers 4366336 bytes Database mounted. Database opened. SQL> select * from event_table;--两个事件都被记录下来了
EVENT TIME ------------------------------ ------------ SHUTDOWN 19- JAN- 15 STARTUP 19- JAN- 15
SQL>
--------------写一个登录触发器触发器---------------------------- create table log_table (username varchar2( 20), logon_time date , logoff_time date, address varchar2( 20));
create or replace trigger trigger_login after logon on database begin insert into log_table values(Ora_login_user,sysdate ,null ,Ora_client_ip_address ); end ; create or replace trigger trigger_logout before logoff on database begin update log_table lt set lt.logoff_time = sysdate where lt.username = Ora_login_user; end;


SQL> exit;--退出操作 Disconnected fromOracleDatabase 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production With the Partitioning , OLAP , Data Mining and Real Application Testing options [oracle@ localhost ~]$ sqlplus / as sysdba --登录操作
SQL*Plus: Release 11.2.0.1.0 Production on Mon Jan 19 06: 37: 49 2015
Copyright ( c) 1982 , 2009, Oracle. All rights reserved.

Connected to : Oracle Database 11 g Enterprise Edition Release 11.2 .0.1.0 - 64 bit Production With the Partitioning , OLAP , Data Mining and Real Application Testing options
SQL> select * from log_table;
USERNAME LOGON_TIME LOGOFF_TIME ADDRESS -------------------- ------------ ------------ -------------------- SYS 19- JAN- 15 19- JAN- 15 SYS 19- JAN- 15
6 rows selected.
SQL>

三 : Android 之Handle的使用原理理解

Handle的使用,首先我们要明白一点,那就是Handle的用处,Handle是用来做什么的,明白了这点,那么我在来理解下面的内容。

一:接下来我来说明一下Handle的用途

Handle到底是什么,我们为什么要来使用Handle,Handle 其实跟Intent有点类&#20284;,这里我直说类&#20284;,没有说什么是一样的啊,这种话,不是我说的,intent是用来实现四大组件之间的通信用的,而Handle呢?这个它的用途就是实现线程之间的通信,例如:当子线程做一个耗时的操作的时候,我们并不知道他什么时候做完,做完了也不知道,那么,我们是不是需要一个东西来通知我们,让我们知道呀,所以说,也就有了Handle的来源,没有Handle这个东西,对我们来说,非常的麻烦。

二:Handle的消息机制原理

1.图形展示

handle Android 之Handle的使用原理理解下载图片,下载完成之后通知主线程更新ui)

1.主线程中有一个消息处理器Handle,被放在主线程中的消息队列中

2.在主线程中有一个MessageQueue 也就是消息队列,存放消息

3.在主线程中也有一个Looper (不停的循环消息队列取消息)如果有新的消息就将消息交给消息处理器,handle会调用其中的handleMessage处理消息

3.具体实施

1.子线程,利用handle发送消息放在主线程的消息队列中

2.主线程里面有一个looper循环获取消息

3.发现新的消息,就会调用handlemessage方法处理消息

三:示例代码:

package com.zengtao.classwork;


import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.ActionBarActivity;
import android.widget.ProgressBar;


public class MainActivity extends ActionBarActivity {
private ProgressBar pb; // 进度条
private int[] randData = new int[100]; // 数组
private int index = 0; // 索引
private int mProgressStaus = 0; // 设置进度条的长度
private Handler mHandler;


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);


pb = (ProgressBar) findViewById(R.id.pb);


// 初始化handle,绑定在主线程中的队列消息中
mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
// 接收消息
if (msg.what == 0x111) {
mProgressStaus = index;
pb.setProgress(mProgressStaus);
}
}
};
// 创建子线程,在子线程中处理耗时工作
new Thread() {
@Override
public void run() {
super.run();
while (index<100) {
doWork();
Message msg = new Message();
msg.what = 0x111;
mHandler.sendMessage(msg);
}
}


}.start();
}


/**
* 模拟耗时工作(一定要在子线程中做)
*
* @return 进度条的多少
*/
public int doWork() {
randData[index&#43;&#43;] = (int) (Math.random() * 100);
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
return index;
}
}

四:示例代码注解

1.主线程中创建Handle对象

2.子线程中发送消息到队列中

3.主线程looper获取消息,利用handleMessage()方法处理

以上便是handle的使用,以及原理的解析,写的不明白的,请谅解,将此分享给大家,希望对你们有所帮助。

扩展:handle机制的原理 / handle原理 / android handle

本文标题:示波器的原理和使用-示波器的原理与使用全攻略
本文地址: http://www.61k.com/1139905.html

61阅读| 精彩专题| 最新文章| 热门文章| 苏ICP备13036349号-1