注册名:

密码:

个人注册

企业注册

商务申请

商务管理平台

企业管理平台

个人管理平台

我的工控博客

中国工控网www.chinakong.com

首页 | 新闻中心 | 工控论坛 | 经验视点 | 工控商务 | 电气手册 | 工控博客 | 招聘求职 | 网上调查 | 企业中心 | 供求信息 | 资料中心 | 工控书店

所在位置:工控论坛 -- PLC论坛 -- PLC论坛(非专题) -- PLC编程

中国工控网搜索:

 登陆:密码:  注册  密码

搜索:

发表人:工控处男 发表时间:2005/6/13 16:20:00  

 

 本栏论题: 新论题:PLC中断程序专题(声明:必须举例讲解)  [18263]

    看过不少书,工控论坛里也讲了不少,还是看不懂,大道理一套一套的,就是没有一个实用的,希望各位工控大哥,你们都是过来人,帮帮小弟忙。最好举例说明,实用的例子。
    中断到底咋回事呀!

以下是关于《新论题:PLC中断程序专题(声明:必须举例讲解)》论题的回复(共25篇,分2页显示)

 共2页  第1页   末页   下一页   

回复人:我是笨鸟 

 回复时间:2006/1/23 12:24:00

支持(822) | 反对(988)

 

    回复:很好的专题,怎么不活跃呀

    

回复人:姜波云 

 回复时间:2005/10/18 10:59:00

支持(893) | 反对(827)

 

    回复:中断理论

    调用中断
   
    ·中断
   
      中断是一种使CPU中止正在执行的程序而转去处理特殊事件的操作。
   
      这些引起中断的事件称为中断源,它们可能是来自外设的输入输出请求,也可能是计算机的一些异常事故或其它内部原因。
   
      由外设控制器或协处理器(8087/80287)引起的中断一般称为外中断,由程序中安排的中断指令INT产生的中断,或由CPU的某些错误结果产生的中断称为内中断。
   
    ·中断向量表
   
      我们给每种中断安排一个中断类型号。IBM PC中断系统能处理256种类型的中断,类型号为0-0FFH。例如:系统定时器的中断类型为08,键盘为09,内中断中的除法错误的中断类型为0,等等。
   
      每种类型的中断都由相应的中断处理程序来处理,中断向量表就是各中断类型的处理程序的地址表。
   
      存储器的低1.5K字节,地址从0到5FFH为系统占用,其中最低的1K字节,地址从0到3FFH存放中断向量。中断向量表中的256项中断向量对应256种中断类型,每项占用四个字节,其中两个字节存放中断处理程序的段地址,另两个字节存放偏移地址。
   
    ·调用中断
   
      调用中断需要使用汇编指令INT n(n为中断类型)。
   
      如:
   
    asm
     int 23H
    end;
   
   
      这段代码可以模拟按下Ctrl+Break键,结束程序运行。
   
      又如:
   
    asm
     int 19H
    end;
   
      这段代码可以重启系统(Windows MS-DOS 方式下可以关闭窗口)。
   
    内部扬声器
   
    ·内部扬声器
   
      内部扬声器是计算机内置的一种简单发声设备,原本是为BIOS(基本输入输出系统)设计的,用于发生异常或其它情况时的报警发声,后来被DOS游戏和软件广泛用于音乐的播放。
   
    ·通用发声程序
   
      ROM BIOS中有个BEEP子程序,它能根据BL中给出的时间计数值控制8254定时器,产生持续时间为1个或几个0.5秒,频率为896Hz的声音。它的用途是当“加电自测”系统发现硬件错误后,由ERROR_BEEP处理程序调用BEEP子程序,使扬声器发出“嘟嘟”的信号。BL中的时间计数值由 ERROR_BEEP程序设置为533H,BEEP子程序将此计数值送给8254的定时器2来产生896Hz的声音,然后BEEP又将AL的第0位和第1 位置1,并把AL的值送到8255的输出寄存器(I/O端口61H),使扬声器接通发出声音。
   
      由此,可以得出产生任一频率声音的计数值应为:533H×896÷给定频率=1192576÷给定频率。
   
      发声和关闭扬声器的程序如下:
   
    procedure MakeSound(Freq:Word);
    begin
     if Freq<19 then CloseSound
     else
     begin
      Port[66]:=1192576 div Freq and 255;
      Port[66]:=1192576 div Freq shr 8;
      Port[97]:=Port[97] or 3;
     end;
    end;
    procedure CloseSound;
    begin
     Port[97]:=Port[97] and 252;
    end;
   
    ·播放音乐
   
      播放音乐的核心在于获得各个音符的频率。按照乐理基本知识,每八度为一音程,每一音程中共有12个不同的音调,即1,#1,2,·2,3,4,#4, 5,#5,6,#6,7。中央C调的1其频率为261.6Hz。每升高一个音程,频率为原先的两倍。在同一音程中,每升高一个音调,频率为原先的2^ (1/12)倍。根据这一原理,若选定一个基本音频,比如音程0音调1的频率为32.7Hz,则给定某一音程及音调的数值,即可算得该音的频率值。
   
    procedure PlayNote(Octave,Tone:Integer);{Octive:音程,0..6;Tone:音调,1..12}
    begin
     MakeSound(Round(32.7*Exp(Ln(2)*(Octive+(Tone-1)/12))));
    end;
    设置光标位置
   
    ·设置光标位置
   
      要设置光标位置,可以调用BIOS中断10H:
    中断号 AH 功能 调用参数
    10H 2H 设置光标位置 BH=页号 DH,DL=行,列
      例如(设置为0行0列):
   
    asm
     mov ah,2H
     mov bh,0
     mov dh,0
     mov dl,0
     int 10H
    end;
    ·获取光标位置
   
    中断号 AH 功能 调用参数 返回参数
    10H 3H 获取当前光标位置 BH=页号 CH=光标起始行DH,DL=行,列
    例如:
   
    var
     Row,Col:Byte;
    asm
     mov ah,3H
     mov bh,0
     int 10H
     mov Row,dh
     mov Col,dl
    end;
   
    设置显示模式
   
    ·设置显示模式
   
      要设置显示模式,可以调用BIOS中断10H:
    中断号 AH 功能 调用参数
    10H 0H 设置显示模式 AL=显示模式号
      例如(设置为640*480 16 Colors):
    asm
     mov ah,0
     mov al,12H
     int 10H
    end;
    ·获取显示模式
    中断号 AH 功能 调用参数 返回参数
    10H FH 获取当前显示模式 AL=显示模式号
   
   
    例如:
   
    var
     Mode:Byte;
    asm
     mov ah,FH
     int 10H
     mov Mode,al
    end;
   
    ·显示模式表
   
      标准VGA显示模式表:
   
    显示模式 文本/图形 分辨率 颜色数
    00H 文本 40*25 2
    01H 文本 40*25 16
    02H 文本 80*25 2
    03H 文本 80*25 16
    04H 图形 320*200 4
    05H 图形 320*200 4
    06H 图形 640*200 2
    0DH 图形 320*200 16
    0EH 图形 640*200 16
    0FH 图形 640*350 2
    10H 图形 640*350 16
    11H 图形 640*480 2
    12H 图形 640*480 16
    13H 图形 320*200 256
    设置中断子程序
   
    ·设置中断子程序
   
      设置自己的中断子程序,可以利用中断实现拦截Ctrl+Break、自动计时、实时响应键盘操作等诸多功能,在编写好的游戏和软件时必不可少。
   
      一般在检查或设置任何中断向量时,总是避免直接使用中断向量的绝对地址,而是使用DOS功能调用(21H)存取中断向量。
   
      DOS单元有两个过程分别执行设置中断向量和获取中断向量:SetIntVec和GetIntVec。其定义如下:
      procedure SetIntVec(IntNo:Byte;Vector:Pointer);
      procedure GetIntVec(IntNo:Byte;var Vector:Pointer);
      这两个过程都是使用DOS功能调用(21H)存取中断向量。
   
      如果新的中断功能只供自己使用,或用自己编写的中断处理程序代替系统中的中断处理功能时,要注意保存原中断向量,在设置自己的中断向量时,应先保存原中断向量再设置新的中断向量,再程序结束之前恢复原中断向量。
   
    ·编写自己的中断子程序
   
      编写自己的中断子程序是系统级程序设计员常用的技术之一。编写这类程序,常常需要很复杂的技术,并且要很细心,一般都用汇编语言或C语言来实现。然而,Turbo Pascal提供了实现这种技术的简便方法。
   
      中断过程可用Interrupt指令来声明:
   
    procedure IntHandler(Flags,Cs,Ip,Ax,Bx,Cx,Dx,Si,Di,Ds,Es,Bp:word);interrupt;
    begin
     ...
    end;
   
   
      Turbo Pascal在中断过程的入口处自动保存所有寄存器并初始化DS寄存器。所有寄存器都作为参数传递,因而在过程中可以使用并修改其值。不一定要列出上面所有寄存器参数,但对参数表有几个规定:
      1.不能声明其它的参数;
      2.可以不声明任何参数;
      3.若前一个参数没有省略,则不能省略后一个参数。
   
      例如:
      procedure IntHandler;           {正确}
      procedure IntHandler(Si,Di,Ds,Es,Bp:Word);{正确}
      procedure IntHandler(Si,Es,Bp:Word);   {错误}
   
      最后一例的错误在于省略了Di和Ds,而没有省略Si。虽然编译程序不会报告此类错误,但你自己应负责参数顺序的正确性,否则会发生意外的错误。
   
      注意,Turbo Pascal并没有自动插入开中断指令----STI,因而不会产生进一步的中断。需要时可以用inline语句插入一条STI指令。
   
      中断过程的出口码将恢复寄存器并执行中断返回指令。中断过程可以修改寄存器参数,中断返回时,会导致相应寄存器的修改。
   
      值得注意的是,若是编写硬件中断处理程序,则不能使用Turbo Pascal的输入输出或动态内存分配子程序,因为它们是不可重入的。另外,由于DOS也是不可重入的,因而也不能使用DOS功能调用。
   

回复人:kafang 

 回复时间:2005/9/10 17:56:00

支持(942) | 反对(1002)

 

    回复:这个主题很好呀,怎么不踊跃呢?

    不要保守吗,相互学习

回复人:xiamy 

 回复时间:2005/6/14 15:06:00

支持(961) | 反对(1226)

 

    回复:要是了解中断,需要一下几个方面

    1、什么叫中断
    2、中断的实际作用
    3、中断的种类
    4、中断指令的组成
    5、中断的实际运用
   
    过几天,我会一一答复,现在上班,不方便。
   

回复人:工控处男 

 回复时间:2005/7/13 7:57:00

支持(1046) | 反对(881)

 

    回复:你好

    你好

回复人:工控处男 

 回复时间:2005/6/14 17:23:00

支持(953) | 反对(870)

 

    回复:能用最简单的程序范例讲解一下中断的过程吗?

    

回复人:jiaju 

 回复时间:2005/6/15 13:26:00

支持(737) | 反对(891)

 

    回复:最简单的:比如,故障报警,就可以用两个事件中断实现

    1、中断事件:故障输入点,占用PLC输入点。中断事件其实是两个:输入电闭合(故障);输入点断开(故障解除)
    2、中断程序:中断程序需要两个,报警(输出置位),停止报警(输出复位)。
    3、建立中断事件和中断程序的对应关系。
    中断事件1(故障)——中断程序1(报警,输出置位)
    中断事件2(故障解除)——中断程序2(报警,输出复位)
   
   
    这个例子,可能在程序中,很少采用中断方式,但他的确是非常简单的中断事例,很好理解中断的意义。

回复人:有机物 

 回复时间:2005/6/13 20:49:00

支持(1513) | 反对(884)

 

    回复:我的理解:

    1、中断事件
    2、中断程序
    3、建立中断事件和中断程序的连接
    4、中断功能的控制:包括:中断功能投入运行(开中断),中断功能停止(停中断)
   
    简单事例:
    1、两个中断事件,PLC输入点1、2
    2、两个中断程序:中断程序1,中断程序2。
    3、建立联系,中断事件1对应中断程序1,中断事件2对应中断程序2,这一点非常重要,否则处乱了。
    4、允许中断功能运行等等。
   
   
   
   

回复人:死亡骑士2000 

 回复时间:2007/5/3 15:52:00

支持(814) | 反对(876)

 

    学习中

回复人:镜花缘嘉峪 

 回复时间:2007/6/22 14:08:00

支持(680) | 反对(762)

 

    看的头晕ing

回复人:mzy1212 

 回复时间:2007/6/23 12:11:00

支持(1311) | 反对(703)

 

    还是不怎么明白...
    请高手推荐一些这方面的书籍或者资料,自回去慢慢学习,消化...
    学无止境....

回复人:ccgcygjjy 

 回复时间:2007/6/26 22:52:00

支持(1148) | 反对(747)

 

    我也是个刚入门的,jiaju说的我是这样理解的,不知道对不?假如用一个自锁开关连接成一个通路,当开关按下后则线路导通,在导通期间如果开关坏掉了,就不再导通了,是不是属于中断呢?哪位明白的帮解答一下,谢谢.

回复人:wlfei1994 

 回复时间:2007/10/6 17:10:00

支持(667) | 反对(774)

 

    中断在程序中优先运行,常用在急停,定时运行等.
   

回复人:xj2007 

 回复时间:2008/1/11 11:02:00

支持(678) | 反对(678)

 

    学习中

回复人:yss020 

 回复时间:2009/8/30 19:55:00

支持(798) | 反对(664)

 

    看的晕呼呼的

 共2页  第1页   末页   页次: 1  2      下一页  

如果要回复本栏论题,请首先中国工控网www.chinakong.com

·如果你已经是中国工控网www.chinakong.com成员,请直接登录。

·如果你还不是中国工控网www.chinakong.com成员,请首先注册,注册为免费!

注册名:

密  码:

           注册中国工控网www.chinakong.com
           忘记密码

关闭该窗口

关于我们     免责声明     服务项目     广告联系     友情链接     联系方式     意见反馈     设为首页     加入收藏

 ©2023-2025 中国工控网(www.chinakong.com) 版权所有 豫ICP备17046657号

管理员信箱:chinakong98@163.com  服务热线:13525974529

洛阳博德工控自动化技术有限公司

中国    洛阳