第四章S7-200PLC功能指令二例题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第四章
S7-200PLC功能指令
主讲:李宏伟
4:子程序及应用
5:中断程序及应用
6:高速计数器功能及应用7:高速脉冲输出功能及应用
例:带参数的子程序调用如下所示。
注释:Micro/WIN保留L内存的最上方的4个字节(LB60-LB63),用于调用参数数据。
// L内存被用于保存布尔输入参数状态,
// 此类参数在LAD和FBD中被显示为使能位输入。
// 从而允许本网络在LAD、FBD和STL编辑器中显示。
七、子程序应用举例
例1:用两个子程序分别控制两台电动机的启停,主程序中调用子程序实现控制。
SBR0
方案一:无参数传递
OB1
SBR1
OB1
方案二:带参数传递
LD I0.0
= L60.0
LD I0.1
= L63.7
LD I0.2
= L63.6
LD L60.0
CALL SBR_0:SBR0, L63.7, L63.6, Q0.0
LD I1.0
= L60.0
LD I1.1
= L63.7
LD I1.2
= L63.6
LD L60.0
CALL SBR_0:SBR0, L63.7, L63.6, Q1.0
方案二:带参数传递
SBR0
LD #启动:L0.0
O #电机:L0.2
AN #停止:L0.1
= #电机:L0.2
例2:设计一记录设备运行时间的子程序,符号名为“运行时间”。
设备运行时I0.0为ON,用I0.0的常开触点调用子程序。
OB1
SBR0
四、中断应用举例
例1:利用定时中断指令实现对模拟量的等间隔采样
OB1:
LD SM0.1
CALL SBR_0:SBR0 SBR0:
LD SM0.0
MOVB 100, SMB34
ATCH INT_0:INT0, 10
ENI
INT0:
LD SM0.0
MOVW AIW4, VW100
例2:在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 //常ON
SI Q0.0,1 //使Q0.0立即置位
//中断程序1(INT_1)
LD SM0.0
RI Q0.0,1 //使Q0.0立即复位
例3:定时中断的定时时间最长为255ms,如何用定时中断1实现周期为2s的高精度定时?
//主程序OB1
LD SM0.1 //第一次扫描时
MOVB 0,VB10 //中断次数计数器清零
MOVB 250,SMB34 //设定中断0时间间隔为250ms ATCH INT_0,10 //指定定时中断0执行0号中断程序ENI //允许全局中断
//中断程序0(INT_0),每隔250ms中断一次
LD SM0.0 //常ON
INCB VB10 //中断次数计数器加1
LDB= 8,VB10 //比较,如果中断8次(2s)MOVB 0,VB10 //中断次数计数器清零
INCB QB0 //每2s将QB0加1
例4:出现事故时,I0.0的上升沿产生中断,使输出Q1.0立即置位,同时将事故发生的日期和时间保存在VB10~VB17中。
//主程序OB1
LD SM0.1 //第一次扫描
ATCH 0,0 //指定在I0.0上升沿
//执行中断程序0
ENI //开中断
//中断程序INT0
LD SM0.0
SI Q1.0,1 //使Q1.0立即置位
TODR VB10 //读实时时钟
例5:使用定时中断的彩灯控制程序,控制8个彩灯循环左移。
定时中断0的中断号为10,SMB34中的定时时间为1~255ms。
彩灯移位的延时时间一般大于
255ms,将中断的时间间隔设为250ms,用VB0做中断次数计数器,在中断服务程序中将VB0加1,然后用比较触点指令判断VB0是否等于设置的次数N。
若相等则将QB0循环左移一位,同时VB0清零。
移位时间间隔为0.25N(s)。
主程序OB1
LD SM0.1
CALL SBR_0:SBR0
子程序SBR0
LD SM0.0
MOVB 16#07, QB0 MOVB 0, VB0 MOVB 250, SMB34 ATCH INT_0:INT0, 10 ENI 中断程序INT0 LD SM0.0 INCB VB0
LDB= VB0, 4 RLB QB0, 1 MOVB 0, VB0
例6:使用T32中断的彩灯控制程序,控制8个彩灯循环左移。
1ms定时器T32和T96的定时时间到时可以产生中断,中断号分别为21和22,最长定时时间为32.767s。
对于分辨率为1ms和10ms的定时器,不能使用定时器本身触点作为自复位控制,应使用下面主程序方法。
主程序OB1
LD SM0.1
CALL SBR_0:SBR0
LDN M0.0
TON T32, +500
LD T32
= M0.0子程序SBR0
LD SM0.0
MOVB 7, QB0
ATCH INT_0:INT0, 21 ENI
中断程序INT0
LD SM0.0
RLB QB0, 1
2、应用举例
例1:要对一高速事件精确控制,通过对脉冲信号进行增计数,计数当前值达到24产生中断,重新从0计数,对中断次数进行累计。
计数方向用一个外部信号控制,并能实现外部复位。
所用的主机型号为CPU221。
设计步骤:
①选择高速计数器HSC0,并确定工作方式4;
②令SM37=16#F8;
③执行HDEF指令,输入端HSC为0,MODE为4;
④装入当前值,令SMD38=0;
⑤装入设定值,令SMD42=24;
⑥执行中断连接ATCH指令,输入端INT为INT0,EVNT为12。
例2:控制要求
包装箱用传送带输送,当箱体到达检测传感
器A时,开始计数。
计数到2000个脉冲时,箱体刚好到达封箱机下进行封箱,此时传送带并没有停下,而是继续运转。
则在封箱过程中,箱体还在前行。
假设封箱过程共用300个脉冲,然后封箱机停止工作。
继续前行,当计数脉冲又累加到1500个码时,开始喷码,喷码机开始工作,假设喷码机共用5秒
钟进行喷码,喷码结束后,整个工作过程结束。
例3:用指令向导生成高速计数器HSC0的初始化程序和中断程序,HSC0为无外部方向输入信号的单相加/减计数器(模式0),计数值为10000~20000时Q4.0输出1。
执行菜单命令“工具”→“指令向导…”,按下面的步骤设置高速计数器的参数:
1)在第1页选择“HSC”(配置高速计数器),每次操作完成后点击“下一步>”按钮。
2)在第2页选择HSC0和模式0。
3)在第3页设置计数器的预置值为10000,当前值为0,初始计数方向为加(增)计数。
使用默认的初始化子程序符号名HSC_INIT。
4)在第4页设置当前值等于预置值时产生中断(中断事件编号为12),使用默认的中断程序符号名COUNT_EQ。
向导允许高速计数器按多个步骤进行计数,即在中断程序中修改某些参数,例如修改计数器的计数方向、当前值和预置值,并将另一个中断程序连接至相同的中断事件。
本例设置编程2步,在中断程序COUNT_EQ中,修改预置值为20000,计数当前值和计数方向不变。
完成设置后自动生成下述的初始化子程序HSC_INIT、中断程序COUNT_EQ和HSC0_STEP1。
在主程序中,首次扫描时调用HSC_INIT,中断程序中对Q4.0置位和复位的语句是用户添加的。
最后一个步骤可以重新连接第一个中断程序,
使计数过程循环进行。
①主程序
LD SM0.1
CALL HSC_INIT
②初始化子程序HSC_INIT
LD SM0.0
MOVB16#F8,SMB37
MOVD+0,SMD38
MOVD+10000,SMD42
HDEF0,0
ATCH COUNT_EQ,12
ENI
HSC0
③中断程序COUNT_EQ
LD SM0.0
MOVB16#A0,SMB37
MOVD+20000,SMD42
ATCH HSC0_STEP1,12
HSC0
SI Q4.0,1//用户添加
④中断程序HSC0_STEP1
LD SM0.0
MOVB16#80,SMB37
DTCH12
HSC0
RI Q4.0,1//用户添加。