首页 > 基础教程 > 西门子S7-200 SMART完全教程 > 文章内容

西门子S7-200 SMART教程第八课:子程序与中断编程(梯形图完整版)

时间: 2025-12-21 21:31浏览量:47次
西门子S7-200 SMART教程第八课:子程序与中断编程(梯形图完整版)

二、子程序编程实例(梯形图)

2.1 创建简单的子程序

示例1:报警灯闪烁子程序
步骤1:创建子程序SBR_0
// 在STEP 7-MicroWIN SMART中:
1. 右键点击"程序块" → "插入" → "子程序"
2. 命名为"SBR_0"
3. 在SBR_0中编写以下代码:
SBR_0梯形图程序
Network 1 // 1Hz闪烁控制
SM0.5 L0.0
--| |--------( )--
// SM0.5:1Hz时钟脉冲(0.5s ON, 0.5s OFF)
步骤2:在主程序中调用子程序
// 在主程序OB1中调用SBR_0
Network 1
I0.0 I0.1 Q0.0
--| |----|/|----( )--
Network 2
Q0.0
--| |-----SBR_0
EN
Network 3
L0.0 Q0.1
--| |--------( )--
// 当Q0.0=1时,调用闪烁子程序,Q0.1以1Hz闪烁

2.2 多设备控制子程序

示例2:电机控制子程序
SBR_1:电机控制子程序
Network 1 // 启动/停止控制
L0.0 L0.1 L0.2
--| |----|/|-----(S)--
N
1
Network 2 // 停止控制
L0.1 L0.2
--| |--------(R)--
N
1
Network 3 // 输出控制
L0.2 L0.3
--| |--------( )--
// L0.0:启动, L0.1:停止, L0.2:运行标志, L0.3:输出
主程序调用示例
// 控制电机1
Network 4
SM0.0
--| |-----SBR_1
EN
启动: I0.0
停止: I0.1
输出: Q0.0
// 控制电机2
Network 5
SM0.0
--| |-----SBR_1
EN
启动: I0.2
停止: I0.3
输出: Q0.1
// 同一个子程序控制不同的电机

三、带参数子程序编程实例

3.1 带输入参数子程序

示例3:温度比较子程序
SBR_2局部变量表定义
L 0.0: IN Real // 温度实际值
L 4.0: IN Real // 温度上限
L 8.0: IN Real // 温度下限
LB12: OUT Bool // 超温报警
LB13: OUT Bool // 低温报警
SBR_2梯形图程序
Network 1 // 超温判断
#Temp_Actual #Temp_High #Over_Temp_Alarm
--|>|----| |-----( )--
Network 2 // 低温判断
#Temp_Actual #Temp_Low #Low_Temp_Alarm
--|<|----| |-----( )--
主程序调用SBR_2
Network 6
SM0.0
--| |-----SBR_2
EN
Temp_Actual: VD100
Temp_High: 80.0
Temp_Low: 20.0
Over_Temp_Alarm: Q0.2
Low_Temp_Alarm: Q0.3

3.2 带IN_OUT参数子程序

示例4:计数器累加子程序
SBR_3局部变量表
L 0.0: IN_OUT Word // 计数值
LB2: IN Bool // 计数脉冲
LB3: IN Word // 计数上限
LB5: OUT Bool // 达到上限标志
SBR_3梯形图程序
Network 1 // 检测计数脉冲上升沿
#Count_Pulse #M0.0
--|P|--------( )--
Network 2 // 计数值加1
#M0.0
--| |-----+---(INC_W)--
| EN ENO
| IN OUT
| -- --
+---#Counter_Value---#Counter_Value
Network 3 // 判断是否达到上限
#Counter_Value #Count_Limit #Limit_Reached
--|>=|----| |-----( )--

四、中断编程实例(梯形图)

4.1 定时中断编程

示例5:定时数据采集中断
步骤1:创建中断程序INT_0
// 右键点击"程序块" → "插入" → "中断程序"
// 命名为"INT_0"
INT_0中断程序梯形图
Network 1 // 采集模拟量
SM0.0 AIW0
--| |---+---(MOV_W)--
| EN ENO
| IN OUT
| -- --
+---AIW0---VW100
Network 2 // 转换为工程值
SM0.0 VW100
--| |---+---(I_DI)--
| EN ENO
| IN OUT
| -- --
+---VW100---VD104
Network 3
SM0.0 VD104
--| |---+---(DI_R)--
| EN ENO
| IN OUT
| -- --
+---VD104---VD108
Network 4
SM0.0 VD108
--| |---+---(DIV_R)--
| EN ENO
| IN1 IN2 OUT
| -- -- --
+---VD108--320.0--VD112
// 温度值 = (AIW0 ÷ 32000) × 100
步骤2:主程序中断初始化
Network 1 // 首次扫描初始化
SM0.1 SMB34
--| |---+---(MOV_B)--
| EN ENO
| IN OUT
| -- --
+----100---SMB34
Network 2 // 连接中断
SM0.1
--| |-----+---(ATCH)--
| EN ENO
| INT EVNT
| -- --
+---INT_0--10
Network 3 // 允许中断
SM0.1
--| |-----(ENI)--
// 每100ms执行一次INT_0中断程序

4.2 I/O中断编程

示例6:急停中断处理
步骤1:创建急停中断程序INT_1
// 中断程序INT_1
INT_1梯形图程序
Network 1 // 急停处理
SM0.0 Q0.0
--| |--------(R)--
N
8
Network 2
SM0.0 Q0.4
--| |--------( )--
// 急停时复位Q0.0-Q0.7,点亮急停指示灯Q0.4
步骤2:主程序中断配置
Network 4 // 连接急停中断
SM0.1 I0.7
--| |----| |-----+---(ATCH)--
| | EN ENO
| | INT EVNT
| | -- --
| +---INT_1--0
| |
+----+---(ENI)
// 当I0.7(急停按钮)按下时触发中断0

4.3 高速计数器中断

示例7:编码器位置中断
步骤1:创建高速计数器中断程序INT_2
INT_2中断程序梯形图
Network 1 // 到达设定位置处理
SM0.0 Q0.5
--| |--------( )--
Network 2 // 停止电机
SM0.0 Q0.0
--| |--------(R)--
Network 3 // 记录到达时间
SM0.0 VD200
--| |---+---(MOV_DW)--
| EN ENO
| IN OUT
| -- --
+---SMD72---VD200
// 记录当前计数值
步骤2:主程序高速计数器配置
Network 5 // 高速计数器初始化
SM0.1
--| |----+---(HDEF)--
| EN ENO
| HSC MODE
| -- --
+----0-----0
Network 6
SM0.1 SMD38
--| |---+---(MOV_DW)--
| EN ENO
| IN OUT
| -- --
+----0-----SMD38
Network 7
SM0.1 SMD42
--| |---+---(MOV_DW)--
| EN ENO
| IN OUT
| -- --
+---1000---SMD42
Network 8
SM0.1 SMB37
--| |---+---(MOV_B)--
| EN ENO
| IN OUT
| -- --
+---16#F8--SMB37
Network 9 // 连接中断
SM0.1
--| |----+---(ATCH)--
| EN ENO
| INT EVNT
| -- --
+---INT_2--12
Network 10
SM0.1
--| |-----(HSC 0)--

五、综合编程实例

5.1 温度控制系统

示例8:完整的温度控制系统
SBR_4:温度控制子程序(带参数)
// 局部变量表
L 0.0: IN Real // 温度设定值
L 4.0: IN Real // 温度实际值
L 8.0: IN Real // 比例系数P
L 12.0: IN Real // 积分系数I
L 16.0: OUT Real // 控制输出
SBR_4梯形图程序
Network 1 // 计算温度偏差
SM0.0 #Temp_Error
--| |---+---(SUB_R)--
| EN ENO
| IN1 IN2 OUT
| -- -- --
+---#Temp_Set--#Temp_Actual--#Temp_Error
Network 2 // 比例项计算
SM0.0 #Temp_Error
--| |---+---(MUL_R)--
| EN ENO
| IN1 IN2 OUT
| -- -- --
+---#Temp_Error--#Kp--#P_Term
Network 3 // 积分项计算
SM0.0 #Integral_Sum
--| |---+---(ADD_R)--
| EN ENO
| IN1 IN2 OUT
| -- -- --
+---#Integral_Sum--#Temp_Error--#Integral_Sum
SM0.0 #Integral_Sum
--| |---+---(MUL_R)--
| EN ENO
| IN1 IN2 OUT
| -- -- --
+---#Integral_Sum--#Ki--#I_Term
Network 4 // 计算控制输出
SM0.0 #P_Term
--| |---+---(ADD_R)--
| EN ENO
| IN1 IN2 OUT
| -- -- --
+---#P_Term--#I_Term--#Control_Output
INT_3:定时中断进行温度控制
Network 1 // 调用温度控制子程序
SM0.0
--| |-----SBR_4
EN
Temp_Set: VD100
Temp_Actual: VD104
Kp: 2.5
Ki: 0.1
Control_Output: VD108
主程序:系统初始化和调用
Network 1 // 系统初始化
SM0.1 SMB34
--| |---+---(MOV_B)--
| EN ENO
| IN OUT
| -- --
+----50----SMB34
Network 2
SM0.1
--| |----+---(ATCH)--
| EN ENO
| INT EVNT
| -- --
+---INT_3--10
Network 3
SM0.1
--| |-----(ENI)--
Network 4 // 温度设定值处理
I0.0 VD100
--| |---+---(MOV_R)--
| EN ENO
| IN OUT
| -- --
+---25.0---VD100
Network 5
I0.1 VD100
--| |---+---(MOV_R)--
| EN ENO
| IN OUT
| -- --
+---30.0---VD100
// 每50ms执行一次温度控制计算
下载资料前请先绑定手机号码
对不起,请登录后再发表评论!

触屏端
扫一扫手机也能发信息
明扬工控商城-工控网-工控自动化真品,一站式专业服务!