PLC的中断程序

发布时间:2024-02-06
中断程序不是由程序调用,而是在中断事件发生时由操作系统调用。因为不能预知系统何时调用中断程序,故它不能改写其他程序使用的存储器,因此应在中断程序中使用局部变量。在中断程序中可以调用一级子程序,累加器和逻辑堆栈在中断程序和被调用的子程序中是公用的。
可采用下列方法创建中断程序:在“编辑”菜单中选择“插入”→“中断”,在程序编辑器视窗中单击鼠标右键,从弹出菜单中选择“插入”→“中断”;用鼠标右键单击指令树上的“程序块”图标,并从弹出菜单中选择“插入”→“中断”。创建成功后程序编辑器将显示新的中断程序,程序编辑器底部出现标有新的中断程序的标签,可以对新的中断程序编程。
中断处理提供对特殊内部事件或外部事件的快速响应。应优化中断程序,执行完某项特定任务后立即返回主程序。应使中断程序尽量短小,以减少中断程序的执行时间,减少对其他处理的延迟,否则可能引起主程序控制的设备操作异常。设计中断程序时应遵循“越短越好”的原则。
中断允许指令eni(enable interrupt)全局性地允许处理所有被连接的中断事件。
禁止中断指令disi(disable interrupt)全局性地禁止处理所有中断事件,允许中断排队等候,但是不允许执行中断程序,直到用全局中断允许指令eni重新允许中断。
进入run模式时自动禁止中断。在run模式执行全局中断允许指令后,各中断事件发生时是否会执行中断程序,取决于是否执行了该中断事件的中断连接指令。
使eno=0的错误条件:sm4.3(运行时间),0004(在中断程序中执行eni、disi、hdef指令)。
中断程序有条件返回指令creti(conditional return from interrupt)在控制它的逻辑条件满足时从中断程序返回。编程软件自动地为各中断程序添加无条件返回指令。
中断连接指令atch(attach interrupt)用来建立中断事件(event)和处理此事件的中断程序(int)之间的联系。中断事件由中断事件号指定(见表1),中断程序由中断程序号指定。为某个中断事件指定中断程序后,该中断事件被自动地允许。
表1 中断事件描述
中断号
中断描述
优先级分组
按组排列
的优先级
8
通信口0:字符接收
通信(最高)
0
9
通信口0:发送完成
0
23
通信口0:报文接收完成
0
24
通信口1:报文接收完成
1
25
通信口1:字符接收
1
26
通信口1:发送完成
1
19
pto0脉冲输出完成
数字量(中等)

0
20
pto1脉冲输出完成
1
0
i0.0的上升沿
2
2
i0.1的上升沿
3
4
i0.2的上升沿
4
6
i0.3的上升沿
5
1
i0.0的下降沿
6
3
i0.1的下降沿
7
5
i0.2的下降沿
8
7
i0.3的下降沿
9
12
hsc0cv=pv(当前值=设定值)
10
27
hsc0方向改变
11
28
hsc0外部复位
12
13
hsc1cv=pv(当前值=设定值)
13
14
hsc1方向改变
14
15
hsc1外部复位
15
16
hsc2cv=pv(当前值=设定值)
16
17
hsc2方向改变
17
18
hsc2外部复位
18
32
hsc3cv=pv(当前值=设定值)
19
29
hsc4cv=pv(当前值=设定值)
20
30
hsc4方向改变
21
31
hsc4外部复位
22
33
hsc5cv=pv(当前值=设定值)
23
10
定时中断0
定时(最低)
0
11
定时中断1
1
21
定时器t32的ct=pt
2
22
定时器t96的ct=pt
3
使atch指令的eno=0的错误条件:sm4.3(运行时间),0002(hsc输入赋值冲突)。
中断分离指令dtch(detach interrupt)用来断开中断事件(event)与中断程序(int)之间的联系,从而禁止单个中断事件。
在启动中断程序之前,应在中断事件和该事件发生时希望执行的中断程序之间,用atch指令建立联系,使用atch指令后,该中断程序在事件发生时被自动启动。
多个中断事件可以调用同一个中断程序,但一个中断事件不能调用多个中断程序。中断被允许且中断事件发生时,将执行为该事件指定的最后一个中断程序。
在中断程序中不能使用disi、eni、hdef、lscr和end指令。
中断按以下固定的优先级顺序执行:通信(最高优先级)、i/o中断、定时中断(最低优先级)。在上述3个优先级范围内,cpu按照先来先服务的原则处理中断,任何时刻只能执行一个用户中断程序。一旦一个中断程序开始执行,它要一直执行到完成,即使另一程序的优先级较高,也不能中断正在执行的中断程序。正在处理其他中断时发生的中断事件要排队等待处理。3个中断队列及其能保存的最大中断个数如表2所示。
表2 中断队列和各队列的最大中断数
队 列
cpu221
cpu222
cpu224
cpu226
通信中断队列
4
4
4
8
i/o中断队列
16
16
16
16
定时中断队列
8
8
8
8
如果发生中断过于频繁,使中断产生的速率比可处理的速率快,或中断被disi指令禁止,则中断队列溢出状态位被置1。只应在中断程序中使用这些位,因为当队列变空或返回主程序时这些位被复位。
可编程序控制器的串行通信口可由用户程序控制,通信口的这种操作模式称为自由端口模式。在该模式下,接收信息完成、发送信息完成和接收一个字符均可产生中断事件,利用接收和发送中断可简化程序对通信的控制。
i/o中断包括上升沿中断、下降沿中断、高速计数器(hsc)中断和脉冲列输出(pto)中断。cpu可用输入点i0.0~i0.3的上升沿或下降沿产生中断。高速计数器中断允许响应hsc的计数当前值等于设定值、计数方向改变(相应于轴转动的方向改变)和计数器外部复位等中断事件。高速计数器可实时响应高速事件,而可编程序控制器的扫描工作方式不能快速响应这些高速事件。完成指定脉冲数输出时也可以产生中断,脉冲列输出可用于步进电机等。
【例】 在i0.0的上升沿通过中断使q0.0立即置位,在i0.1的下降沿通过中断使q0.0立即复位。
//主程序ob1
ld sm0.1
atch int_0,0 //i0.0上升沿时执行0号中断程序
atch int_1,3 //i0.1下降沿时执行1号中断程序
eni// //允许全局中断
//中断程序0(int_0)
ld sm0.0
si q0.0,1 //使q0.0立即置位
//中断程序1(int_1)
ld sm0.0
ri q0.0,1 //使q0.0立即复位
可用定时中断来执行一个周期性的操作,以1 ms为增量,周期的时间可取1~255 ms。定时中断0和中断1的时间间隔分别写入特殊存储器字节smb34和smb35。每当定时器的定时时间到时,执行相应的定时中断程序,例如可以用定时中断来采集模拟量和执行pid程序。如果定时中断事件已被连接到一个定时中断程序,为
上一个:吃鸡里怎么抽玛莎拉蒂 安全便宜抽取玛莎拉蒂方法
下一个:club是什么意思 有什么用呢

找英国norgren蝶阀(多家知名工业备品备件厂家供货价格超实惠)
婚前的房产离婚后卖房需要带什么手续
新型建筑保温板无机渗透外墙防火硅脂板材
茶叶储存技巧大全
根据规定征地补偿有多少
阿里云服务器双11活动
怎样感受普洱茶的滋味呢?
茶叶农残多吗?长期喝茶影响健康吗?
纸张抗张强度检测
格式化了手机照片还能找回吗,oppo手机不小心清除数据怎么恢复