西门子PLC的问题(s7-200)

有三个拨动开关分别控制三条电路,只要任一个拨通,其他两个电路不起作用,只有复位后其他两个拨通后才可以运行,程序如何做?用什么指令好?

使用高速计数器返回顶端通常高速计数器被用作鼓式计数器驱动器,以恒速旋转的转轴配有增量轴式编码器。轴式编码器提供每次旋转的指定计数以及每次旋转一个复原脉冲。轴式编码器的时钟和复原脉冲为高速计数器提供输入。
用最先的几个预设值载入高速计数器,并在当前计数小于当前预设值的期间内激活所需输出。当前计数等于预设值或复原时,计数器设置提供中断。
每次发生当前计数值等于预设值中断事件时,载入新预设值,并设置下一个输出状态。发生复原中断事件时,设置第一个预设值和第一个输出状态,并重复该循环。因为中断的发生速率远远低于高速计数器的计数速率,可对高速操作执行精确的控制,并对整体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指令,改变全部数值或其中任何组合。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-07-26

你看这样是否符合你的要求

本回答被提问者采纳
相似回答