最佳答案
其他答案共有8条回答
-
爱笑的小海豚
中断连接指令(atch)使中断事件(evnt)与中断程序号码(int)相联系,并启动中断事件。根据指定事件优先级组,plc按照先来先服务的顺序对中断提供服务。
任何时刻只能激活一个用户中断。其它中断处于激活状态时,cpu发出中断暂时入队,等待以后处理。如果发生的中断数目过多,队列无法处理,则设定队列溢出状态位。当队空时,重置这些位。
中断程序必须由三部分构成:中断程序标号(即中断事件的编号)、中断程序指令和无条件返回指令。在中断程序中不能使用disi、eni、hdef、l scr和end指令。
扩展资料:
中断优先级
给中断源指定处理的次序就是给中断源确定中断优先级。中断按以下固定的优先级顺序执行:通信(最高优先级)、i/o中断和定时中断(最低优先级)。在上述3个优先级范围内,cpu按照先来先服务的原则处理中断,任何时刻只能执行一个用户中断程序。
如果发生中断过于频繁,使中断产生的速率比可处理的速率快,或中断被disi指令禁止,中断队列溢出状态位被置1。只应在中断程序中使用这些位,因为当队列变空或返回主程序时,这些位会被复位。
参考资料:百度百科-中断指令
-
温暖的芹菜
定义高速计数器无外乎下面几个步骤:
1、建一个初始化程序,用sm0.1控制;
2、在初始化程序中,初始化高速计数器,置控制寄存器(hsc0为smb37),不同的计数器对应不同的di点,hsc0为i0.0,hsc3为i0.1,hsc4为i0.2,hsc5为i0.3(222不支持hsc1和hsc2),执行hdef指令,你可以用模式0。
3、置计数器初始值(hsc0为smd38),如果从零启动就置零。
4、置预置值(hsc0为smd42),计数器计到这个值可以产生一个中断,一般利用这个中断调用相应的中断程序把当前值(smd38)复零,否则计数器到头就不再计数了,当然你也可以置一个大点的值,在其他程序中清除当前值(smd38),确保永远到不了头就可以了。
5、指定中断程序(atch),中断事件是12,程序号看你程序了。
6、打开中断(eni),这条指令没有的话,2.5是不起作用的。
7、启动高速计数器(hsc),按前面的初始化,你就要启动hsc0,即n为0。
8、程序中读取高速计数器的值,对于hsc0,hc0单元中的内容就是当前的计数值,这个单元只读不能写,你可以通过修改smd38的内容改变当前的计数值。
-
听话的热狗
只要中断程序的触发条件一触发就立即中断,多个中断程序同时触发则按优先级处理,否则则先来先处理.关于触发条件你可以去网上查,一共34个.
开始你可以先启动中断eni,在附加中断atch(将中断事件evnt和中断连接起来),当所对应的例行程序号码的条件触发则执行中断.例如0号中断,当i0.0有上升沿就进行中断
-
机智的鲜花
从名词上就能理解了嘛,中断就是cpu对该程序停止响应。中断方式有定时中断、输入中断、计数器中断等,当这些中断事件发生时,中断程序就执行。指令中有个eni这是开放中断程序的,中断程序在int_0中编写
-
勤奋的白昼
使用高速计数器返回顶端通常高速计数器被用作鼓式计数器驱动器,以恒速旋转的转轴配有增量轴式编码器。轴式编码器提供每次旋转的指定计数以及每次旋转一个复原脉冲。轴式编码器的时钟和复原脉冲为高速计数器提供输入。
用最先的几个预设值载入高速计数器,并在当前计数小于当前预设值的期间内激活所需输出。当前计数等于预设值或复原时,计数器设置提供中断。
每次发生当前计数值等于预设值中断事件时,载入新预设值,并设置下一个输出状态。发生复原中断事件时,设置第一个预设值和第一个输出状态,并重复该循环。因为中断的发生速率远远低于高速计数器的计数速率,可对高速操作执行精确的控制,并对整体plc扫描循环产生相对较小的影响。中断附加方法允许在独立中断例行程序中执行每个载入的新预设值,以便进行状态控制。(另一种方法是在单个中断例行程序中处理所有的中断事件。)
识别高速计数器的详细计时功能返回顶端下列时序图显示根据模式分类的每台计数器的功能。在另一个时序图中显示复原和起始输入操作,并应用于所有使用复原和起始输入的模式。在复原和起始输入图中,复原和起始的现用状态均被编程为高级。
有复原、无起始的操作举例有复原和起始的操作举例模式0、1和2操作举例模式3、4和5操作举例使用计数模式6、7和8时,上下时钟输入的上升沿间隔0.3微秒,高速计数器可能认为这些事件同时发生。如果发生这种情况,当前值不改变,而且计数方向不改变。只要上下时钟输入的上升沿之间的间隔大于该时段,高速计数器就能够单独捕获每个事件。在两种情况下,均不生成错误,而且计数器保持当前计数值。模式6、7和8操作举例模式9、10和11操作举例(正交 1x 模式)模式9、10和11操作举例(正交 4x 模式)为高速计数器连接输入线返回顶端使用"高速计数器定义"指令定义计数器模式和输入。下表显示与高速计数器相关的用于时钟、方向控制、复原和起始功能的输入。高速计数器专用输入
高速计数器 使用的输入
hsc0 i0.0, i0.1, 0.2
hsc1 i0.6, i0.7, i1.0, i1.1
hsc2 i1.2, i1.3, i1.4, i1.5
hsc3 i0.1
hsc4 i0.3, i0.4, i0.5
hsc5 i0.4
有些高速计数器和边缘中断的输入点赋值存在某些重叠。同一个输入不能用于两种不同的功能;但是高速计数器当前模式未使用的任何输入均可用于其他目的。例如,如果在模式2中使用hsc0,模式2使用i0.0和i0.2,则i0.1可用于边缘中断或用于hsc3。如果所用的hsc0模式不使用输入i0.1,则该输入可用于hsc3或边缘中断。与此相似,如果所选的hsc0模式不使用i0.2,则该输入可用于边缘中断;如果所选hsc4模式不使用i0.4,则该输入可用于hsc5。
请注意hsc0的所有模式均使用i0.0,hsc4的所有模式均使用i0.3,因此当使用这些计数器时,这些输入点绝不会用于其他用途。hsc模式
返回顶端为高速计数器编址(hc)返回顶端欲存取高速计数器的计数值,您需要利用内存类型(hc)和计数器号码(例如hc0)指定高速计数器的地址。如下所示,高速计数器的当前值是只读数值,只能作为双字(32位)编址。格式:hc[高速计数器号码],以hc2为例。
存取高速计数器的当前值识别不同的高速计数器
返回顶端对于相同的计数器操作模式,所有计数器的功能均相同。如上所示,共有四种基本计数器模式类型。请注意并非每一种计数器均支持每种模式。您可以使用每种类型:无复原或起始输入、有复原但无起始或有起始和复原输入。?激活复原输入时,会清除当前值并保持清除状态直至取消激活复原。?激活起始输入时,会允许计数器计数。起始被取消激活时,计数器的当前值保持恒定,并忽略时钟事件。?如果在起始未激活时激活复原,则会忽略复原,当前值不变。如果激活复原输入时激活起始输入,则当前值被清除使用高速计数器之前必须选择计数器模式,您可以利用hdef指令(高速计数器定义)选择计数器模式。利用首次扫描内存位sm0.1(首次扫描时该位打开,随后关闭),调用包含hdef指令的子程序。选择激活状态和1x/4x模式
返回顶端上图显示的复原和起始输入操作适用于使用复原和起始输入的所有模式。在复原和起始输入图形中,复原和起始均显示为现用状态编程为高位。四台计数器有三个控制位,用于配置复原和起始输入的激活状态并选择1x或4x计数模式(仅限正交计数器)。这些控制位位于各自计数器的控制字节内,只在执行hdef指令时才使用。
执行hdef指令之前,必须将这些控制位设为所需的状态,否则计数器采用所选计数器模式的默认配置。复原输入和起始输入的默认设置为现用水平高,正交计数速率为4x(或4乘以输入时钟频率)。一旦执行了hdef指令,就不能再改变计数器设置,除非首先将cpu设为stop(停止)模式。hdef控制位(仅在执行hdef时使用)
hsc0 hsc1 hsc2 hsc4 说明
sm37.0 sm47.0 sm57.0 sm147.0 "复原"现用水平控制位**:0 = 复原现用水平高1 = 复原现用水平低
sm47.1 sm57.1 "起始"现用水平控制位**:0 = 起始现用水平高1 = 起始现用水平低
sm37.2 sm47.2 sm57.2 sm147.2 "正交"计数器的计数速率选项:0 = 4x计数速率1 = 1x计数速率
**复原输入和起始输入的默认值为现用水平高,正交计数率为4x(或4乘以输入时钟频率)。
控制字节返回顶端一旦定义了计数器和计数器模式,您就可以为计数器动态参数编程。每台高速计数器均有一个控制字节,允许完成以下作业:?启用或禁止计数器?控制方向(仅限模式0、1和2)或初始化所有其他模式的计数方向?载入当前值通过执行hsc指令可激活控制字节以及相关当前值和预设值检查。下表说明每个控制位。
用于hsc参数的sm控制位
hsc0 hsc1 hsc2 hsc3 hsc4 hsc5 说明
sm37.3 sm47.3 sm57.3 sm137.3 sm147.3 sm157.3 计数方向控制位:0 = 向下计数1 = 向上计数
sm37.4 sm47.4 sm57.4 sm137.4 sm147.4 sm157.4 向hsc写入计数方向:0 = 无更新1 = 更新方向
sm37.5 sm47.5 sm57.5 sm137.5 sm147.5 sm157.5 向hsc写入新预设值:0 = 无更新1 = 更新预设值
sm37.6 sm47.6 sm57.6 sm137.6 sm147.6 sm157.6 向hsc写入新当前值:0 = 无更新1 = 更新当前值
sm37.7 sm47.7 sm57.7 sm137.7 sm147.7 sm157.7 启用hsc:0 = 禁用hsc1 = 启用hsc
设置当前值和预设值返回顶端每台高速计数器都有一个32位当前值和一个32位预设值,当前值和预设值均为带符号的整数值。欲向高速计数器载入新的当前值和预设值,您必须设置包含当前值和/或预设值的控制字节及特殊内存字节。然后您必须执行hsc指令,将新数值传输至高速计数器。下表说明用于包含新当前值和预设值的特殊内存字节。
除控制字节以及新预设值和当前值保持字节外,还可以使用数据类型hc(高速计数器当前值)加计数器号码(0、1、2、3、4或5)读取每台高速计数器的当前值。因此,读取操作可直接存取当前值,但只有用上述hsc指令才能执行写入操作。载入数值 hsc0 hsc1 hsc2 hsc3 hsc4 hsc5
新当前值 smd38 smd48 smd58 smd138 smd148 smd158
新预设值 smd42 smd52 smd62 smd142 smd152 smd162
状态字节
返回顶端为每台提供状态内存位的高速计数器提供状态字节,状态内存位表示当前计数方向以及当前值是否大于或等于预设值。下表定义每台高速计数器的状态位。hsc0、hsc1、hsc2、hsc3、hsc4和hsc5的状态位
hsc0 hsc1 hsc2 hsc3 hsc4 hsc5 说明
sm36.0 sm46.0 sm56.0 sm136.0 sm146.0 sm156.0 未使用
sm36.1 sm46.1 sm56.1 sm136.1 sm146.1 sm156.1 未使用
sm36.2 sm46.2 sm56.2 sm136.2 sm146.2 sm156.2 未使用
sm36.3 sm46.3 sm56.3 sm136.3 sm146.3 sm156.3 未使用
sm36.4 sm46.4 sm56.4 sm136.4 sm146.4 sm156.4 未使用
sm36.5 sm46.5 sm56.5 sm136.5 sm146.5 sm156.5 当前计数方向状态位:
0 = 向下计数;
1 = 向上计数
sm36.6 sm46.6 sm56.6 sm136.6 sm146.6 sm156.6 当前值等于预设值状态位:
0 = 不相等;1 = 等于
sm36.7 sm46.7 sm56.7 sm136.7 sm146.7 sm156.7 当前值大于预设值状态位:0 = 小于或等于;
1 = 大于
注释:
只有在执行高速计数器中断例行程序时,状态位才有效。监控高速计数器状态的目的在于启用对正在执行的操作有重大影响的事件的中断程序。
为中断赋值返回顶端所有计数器模式均支持当前值等于预设值中断,使用外部复原输入的计数器模式支持将外部复原现用中断。除模式0、1和2以外的所有计数器模式均支持计数方向改变中断。可单独启用或禁止这些中断条件。注释:
如果您尝试载入新的当前值或从外部复原中断例行程序内先禁用然后再重新启用高速计数器,会引起严重错误。高速计数器初始化顺序返回顶端hsc1在以下初始化和操作顺序说明中被用作模型计数器。初始化说明假设s7-200刚刚被放置在run(运行)模式中,因此首次扫描内存位为真。如果不是如此,请记住在进入run(运行)模式后,只能为每台高速计数器执行一次hdef指令。为高速计数器第二次执行hdef会生成运行时间错误,并不会改变该计数器首次执行hdef时计数器的设置方式。
虽然以下顺序分别显示如何更改方向、当前值和预设值,您可以按照相同的顺序更改所有这些数值或这些数值的任何组合,方法是以适当的方式设置smb47数值,然后执行hsc指令。0、1或2初始化模式
下列步骤说明如何为带内部方向的单相向上/向下计数器(模式0、1或2)初始化hsc1:
1. 使用首次扫描内存位调用执行初始化操作的子程序。因为使用子程序调用,随后的扫描不再调用子程序,因此可减少扫描时间执行并使程序结构更条理化。2. 在初始化子程序中,根据所需的控制操作载入smb47。例如:
smb47 = 16#f8产生下列结果:
启动计数器
写入新当前值
写入新预设值
将方向设置为向上计数
将起始和复原输入设为现用水平高3. 执行hdef指令,hsc输入设为1,无外部复原或起始的mode(模式)输入设为0,有外部复原但无起始设为1,有外部复原和起始设为2。4. 用所需的当前值载入smd48(双字尺寸数值)(载入零可加以清除)。5. 用所需的预设值载入smd52(双字尺寸值)。6. 为了捕获当前值等于预设值,将cv=pv中断事件(事件13)附加于中断例行程序中,为中断编程。7. 为了捕获外部复原事件,将外部复原中断事件(事件15)附加于中断例行程序中,为中断编程。8. 执行全局中断启用指令(eni),启用中断。9. 执行hsc指令,使s7-200为hsc1编程。10. 退出子程序。3、4或5初始化模式下列步骤说明如何为带外部方向的单相向上/向下计数器(模式3、4或5)初始化hsc1:1. 使用首次扫描内存位调用执行初始化操作的子程序。因为使用子程序调用,随后的扫描不再调用子程序,因此可减少执行时间执行并使程序结构更条理化。2. 在初始化子程序中,根据所需的控制操作载入smb47。例如:smb47 = 16#f8产生下列结果:
启用计数器
写入新当前值
写入新预设值
设置hsc初始方向,向上计数
将起始和复原输入设为现用水平高
3. 执行hdef指令,hsc输入设为1,无外部复原或起始的mode(模式)输入设为3,有外部复原但无起始设为4,有外部复原和起始设为5。4. 用所需的当前值载入smd48(双字尺寸数值)(载入零可加以清除)。5. 用所需的预设值载入smd52(双字尺寸数值)。6. 为了捕获当前值等于预设值,将cv=pv中断事件(事件13)附加于中断例行程序中,为中断编程。7. 为了捕获方向改变,将方向改变中断事件(事件14)附加于中断例行程序中,为中断编程。8. 为了捕获外部复原事件,将外部复原中断事件(事件15)附加于中断例行程序中,为中断编程。9. 执行全局中断启用指令(eni),启用中断。10. 执行hsc指令,使s7-200为hsc1编程。11. 退出子程序。6、7或8初始化模式
下列步骤说明如何为带向上/向下时钟的双相向上/向下计数器(模式6、7或8)初始化hsc1:
1. 使用首次扫描内存位调用执行初始化操作的子程序。因为使用子程序调用,随后的扫描不再调用子程序,因此可减少扫描时间执行并使程序结构更条理化。2. 在初始化子程序中,根据所需的控制操作载入smb47。例如:smb47 = 16#f8产生下列结果:
启用计数器
写入新当前值
写入新预设值
设置hsc初始方向,向上计数
将起始和复原输入设为现用水平高
3. 执行hdef指令,hsc输入设为1,无外部复原或起始的mode(模式)设为6,有外部复原但无起始设为7,有外部复原和起始设为8。4. 用所需的当前值载入smd48(双字尺寸数值)(载入零可加以清除)。5. 用所需的预设值载入smd52(双字尺寸数值)6. 为了捕获当前值等于预设值,将cv=pv中断事件(事件13)附加于中断例行程序中,为中断编程。7. 为了捕获方向改变,将方向改变中断事件(事件14)附加于中断例行程序中,为中断编程。8. 为了捕获外部复原事件,将外部复原中断事件(事件15)附加于中断例行程序中,为中断编程。9. 执行全局中断启用指令(eni),启用中断。10. 执行hsc指令,使s7-200为hsc1编程。11. 退出子程序。9、10或11初始化模式
下列步骤说明如何为a/b相正交计数器(模式9、10或11)初始化hsc1:
1. 使用首次扫描内存位调用执行初始化操作的子程序。因为使用子程序调用,随后的扫描不再调用子程序,因此可减少扫描时间执行并使程序结构更条理化。2. 在初始化子程序中,根据所需的控制操作载入smb47。例如(1x 计数模式):
smb47 = 16#fc产生下列结果:启用计数器
写入新当前值
写入新预设值
设置hsc初始方向,向上计数
将起始和复原输入设为现用水平高 例如(4x计数模式):
smb47 = 16#f8产生下列结果:启用计数器
写入新当前值
写入新预设值
设置初始hsc方向,向上计数
将起始和复原输入设为现用水平高
3. 执行hdef指令,hsc输入设为1,无外部复原或起始的mode(模式)输入设为9,有外部复原但无起始设为10,有外部复原和起始设为11。4. 用所需的当前值载入smd48(双字尺寸数值)(载入零可加以清除)。5. 用所需的预设值载入smd52(双字尺寸数值)。6. 为了捕获当前值等于预设值,将cv=pv中断事件(事件13)附加于中断例行程序中,为中断编程。7. 为了捕获方向改变,将方向改变中断事件(事件14)附加于中断例行程序中,为中断编程。8. 为了捕获外部复原事件,将外部复原中断事件(事件15)附加于中断例行程序中,为中断编程。9. 执行全局中断启用指令(eni),启用中断。10. 执行hsc指令,使s7-200为hsc1编程。11. 退出子程序。12初始化模式
下面步骤描述了如何为计算由pto0产生的脉冲数而初始化hsc0 (模式12)。
1. 使用首次扫描内存位调用执行初始化操作的子程序。因为使用子程序调用,随后的扫描不再调用子程序,因此可减少扫描时间执行并使程序结构更条理化。2. 在初始化子程序中,根据所需的控制操作载入smb47。例如:smb37 = 16#f8 产生下列结果:
启动计数器
写入新当前值
写入新预设值
将方向设置为向上计数
将起始和复原输入设为现用水平高3. 在将hsc输入设为0且mode(模式)输入设为12后执行hdef指令。4. 用所需的当前值载入smd38(双字尺寸数值)(载入零可加以清除)。5. 用所需的预设值载入smd42(双字尺寸数值)。6. 为了捕获当前值等于预设值事件,将cv = pv中断事件(事件13)附加于中断例行程序中,从而实现中断编程。如需关于中断处理的全部细节,请参阅讨论"中断指令"的章节。7. 执行全局中断启用指令(eni)以启用中断。8. 执行hsc指令以使s7-200为hsc0编程。9. 退出子程序。在0、1、2或12模式中改变方向下列步骤说明如何配置hsc1,使带内部方向的单相计数器(模式0、1、2或12)改变方向:1. 载入smb47,写入所需的方向:
smb47 = 16#90
启动计数器
将hsc方向设为向下计数smb47 = 16#98
启动计数器
将hsc方向设为向上计数
2. 执行hsc指令,使s7-200为hsc1编程。载入新当前值(任何模式)下列步骤说明如何改变hsc1的计数器当前值(任何模式):
改变当前值强迫计数器在进行改动的过程中被禁止。计数器被禁止时,则不再计数或生成中断。
1. 载入smb47,写入所需的当前值:
smb47 = 16#c0
启用计数器
写入新当前值2. 用所需的当前值载入smd48(双字尺寸)(载入零可加以清除)。3. 执行hsc指令,使s7-200为hsc1编程。载入新预设值(任何模式)
下列步骤说明如何改变hsc1的计数器预设值(任何模式):
1. 载入smb47,写入所需的预设值:
smb47 = 16#a0
启用计数器
写入新预设值2. 用所需的预设值载入smd52(双字尺寸数值)。3. 执行hsc指令,使s7-200为hsc1编程。禁止高速计数器(任何模式)下列步骤说明如何禁用hsc1高速计数器(任何模式):
1. 载入smb47,禁止计数器:
smb47 = 16#00 禁止计数器2. 执行hsc指令,禁止计数器。虽然上述操作步骤显示如何逐一改变方向、当前值和预设值,您也可以按照相同顺序,通过以适当方式设置smb47数值并执行hsc指令,改变全部数值或其中任何组合。
-
端庄的飞鸟
西门子s7-200系列plc中无操作元件的指令有非not指令、上升沿检测eu指令、下降沿检测ed指令、空操作nop指令、开放中断eni指令、禁止中断disi指令、中断返回reti指令、循环结束next指令、结束scr scre指令、子程序返回ret指令、程序结束end指令、停止模式stop指令、看门狗复位wdr指令。
望采纳。。。。。。
-
昏睡的秋天
i存储区是输入触点,可以接收外部的开关量信号;
m为中间继电器触点,一般编程时多用于标志位;
l为临时变量存储区,如ld10,这个变量只在当前的程序段内起作用,调用子程序后或者子程序调用结束返回后临时变量中的数值就可能丢失了。
d不是存储区也不是触点,这个一种数据类型,表示双字或实数类型,包含32个位,4个字节。
望采纳。。。。。。
-
负责的微笑
首先你需要在主程序或者在初次调用子程序中编写t96的定时时间和开全局中断eni。然后再用atch中断连接指令连接t96的中断号位22号,就可以了,之后你在所对应的中断程序中,编写你想处理的程序就可以了
以下举例:
主程序
ld
i0.0
ton
t96,100
定时器t96的定时时间是100ms
ld
sm0.1
atch
int_22,0
解释;连接t96的中断,当t96的定时时间等于设定时间时调用int_0中断程序
eni
开全局总中断
中断程序(int_0)
ld
i0.0
这是在中断程序中需要做的事情
out
q0.0
热门文章
- 南昌绿地主管岗待遇怎么样
- 放弃华尔街高薪回国守门,她的背后原来藏着一个神秘家族
- 橡胶英才网上有哪些江苏橡胶公司在招聘
- 主题酒店加盟哪个好
- 融资租赁租金及利息计算
- 果果的鞋加盟费多少钱
- 诗和远方一一一中建五局南康家居小镇城市客厅项目建设心语
- 怎么打开微信
- 肯德基的经营模式
- 广东诚泰交通科技发展有限公司怎么样
- 野生茶怎么冲
- 糯米酿苦瓜要蒸多久
- 萝卜苗和什么菜拌凉菜好吃
- 韭菜肉馅饺子怎么做好吃吗
- 玄米功能怎么用
- 糯米粉放烤箱用烤多久
- 韭菜肉馅鸡蛋怎么调馅
- 爆米花奶油是什么
- 新会小青柑怎么分辨
- 暖水瓶绿豆汤多久
- 胆机怎么使用
- 功放没声音怎么修
- ads1293怎么用
- 信捷的plc和keyence基恩士的plc哪个好啊
- 健伍汽车cd怎么进入调eq功能
- 西门子s7-200 smart plc用pls命令控制步进电机的简单程序中的eni是什么意思
- 大众波罗音响怎么解码
- vk3234 怎么样
- 西门子plc的atch中断指令使用
- 单片机怎么设置otp位