1、状态位指令,S7-CPU 的寄存器和存储器区域,累加器,ACCU1,ACCU4,ACCU3,ACCU2,仅适用于 S7-400,AR2,AR1,地址寄存器,打开的 DB DB 长度,数据块寄存器,状态位,状态字,32 位,32位,32位,32位,32位,32位,16位,16位,装载存储器 - 逻辑块 - 数据块,工作存储器 - 逻辑块 - 数据块,I/O 区域,系统存储器 - 过程映像输入表 - 过程映像输出表 - 位存储器 - 定时器 - 计数器- 逻辑数据堆栈 - 中断堆栈 - 块堆栈,S7-CPU 寄存器,S7-CPU 存储器区域,T, S, =,.,L, A, O,.,16位,打开的
2、DI DI 长度,状态字结构,位 定义 值 含义0 /FC 20 首次检查位1 RLO 21 逻辑运算结果 2 STA 22 状态位3 OR 23 或4 OS 24 保存溢出5 OV 25 溢出6 CC 0 26 条件代码7 CC 1 27 条件代码8 BR 28 二进制结果9.15 未定义 29 210,状态字各位的含义,检查状态位,OV,S,0,M 4.0,M 4.0,在 STL中进行检查 A OV 扫描溢出显示 A OS 扫描存储的溢出标志 A BR 扫描 BR标志 检查条件代码(CC0, CC1) A = 0 结果等于 0 A 0 结果大于 0 A 0 结果不等于 0 A = 0 结果
3、小于或等于 0,等等 A UO 无序指令在LAD 和FBD 中进行检查,| |,带有状态位的指令,指令码 含义 示例 SET 将RLO位设置为“1“ SET /RLO-1 = M 0.1 CLR 将RLO位设置为“0“ CLR /RLO-0 NOT 将 RLO位取反 O 手动模式; O 自动模式; NOT; = 操作模式 = M0.0 SAVE 以二进制形式保存RLO结果 A BR 检查二进制形式结果,| |,I 1.0 I 1.1 I 1.2,| |,| |,( ),(SAVE),| |,BR Q 4.2 Q 5.0,块调用或复杂功能中的BR位及ENO,LAD,STL,Network 1:
4、循环程序,FC23,I0.0,EN,MW10,Step_bit _memory,Step_dis play,ENO,( ),M100.0,QW12,Network 2: ?,MUL_I,I0.1,EN,345,IN1,OUT,ENO,( ),M100.1,MW10,987,IN2,Network 1: 循环程序A I 0.0 JNB _001 CALL FC 23 Step_bit_memory :=MW10 Step_display :=QW12 _001: A BR = M 100.0,Network 2:?A I 0.1JNB _002L 345L 987 *I T MW 10 AN O
5、V SAVE CLR _002: A BR = M 100.1,取决于状态位的跳转功能,JU 标号1) 无条件跳转JC 标号1) 如果“RLO” =1,则跳转JCN标号1) 如果“RLO” =0,则跳转JCB标号1) 如果“RLO” =1,则跳转,并将RLO保存在BR位中JNB标号1) 如果“RLO” =0,则跳转,并将RLO保存在BR位中JBI标号1) 如果“BR” =1,则跳转JNBI标号1) 如果“BR” =0,则跳转JO标号1) 如果状态字中的“OV”位 =1,则跳转JOS标号1) 如果状态字中的“OS” 位=1,则跳转1) 标号可以由4位字母-数字字符组成,取决于条件代码的跳转功能,
6、JZ 标号1) 如果状态字“CC 1”位=0且“CC 0”位=0,则跳转(结果 = 0)JN标号1) 如果状态字“CC 1”位不等于“CC 0”位,则跳转(结果 0)JP标号1) 如果状态字“CC 1”位=1且“CC 0”位=0(结果=0),则跳转(结果 0)JM标号1) 如果状态字“CC 1”位=0且“CC 0”位=1(结果=0),则跳转 (结果 = 0)JMZ标号1) JM和JZ联合使用,同时满足条件,则跳转(结果 = 0)JUO标号1) 如果是无效的实数或者除数为0,则跳转 1) 标号可以由4位字母-数字字符组成,跳转分支的编程,装载跳转 分支数,JL OVER,. . .,ACCU1
7、n 时的 指令段,示例:带有3个分支的跳转分支程序L Recipe no / 装载分支程序数JL OVER / 带有3个分支的跳转分支JU Rec0 / 跳转到0号分支 (ACCU1 = 0)JU Rec1 / 跳转到1号分支 (ACCU1 = 1)JU Rec2 /跳转到2号分支 (ACCU1 = 2)OVER: JU ERROR / 如果ACCU1 2,则跳转至标号OVER.Rec0: L DBW4.Rec1: L DBW6.Rec2: L DBW8.ERROR: CLR.,操作模式,M_n:,JU M_0,JU M_n,ACCU1 = 0 时的 指令段,. . .,ACCU1 = n 时
8、的 指令段,OVER:,M_0:,循环指令的编程,初始化 循环计数器,LOOP NEXT 将ACCU1进行减1操作, 并作判断ACCU1 0 ?,是,否,继续,NEXT:,将循环执行数次的 代码段,将循环计数器内容 装入 ACCU1.,示例:进行4次循环扫描的循环指令编程 L +4 / 装载循环计数器 NEXT: T MW10 / 循环开始. / 指令代码. / 指令代码. / 指令代码L MW10 / 再次装载循环计数器LOOP NEXT / 循环计数器值 1, / 如果Accu 1 0,则 / 跳转到标号NEXT处,操作模式,将ACCU1内容 送入循环计数器,BE 块结束指令BEU 无条件
9、块结束指令(在块内)BEC 条件块结束指令(取决于 RLO位) (RET) 在 LAD 编程语言中 在 FBD编程语言中,块结束指令,RET,练习1.1:减法运算完成后跳转,拨码按钮,1 2 3 4,- D,正值结果 (=0),将IW 0 的值写入显示,删除显示,负值结果,JM 标号,转换为 DINT,转换为 DINT,BTD,BTD,0,0,0,0,0,0,0,0,1,0,0,1,0,0,1,0,20,215,27,仿真器上的切换开关,十进制开关:S7-300: IW4 (IW2, 32位模式) 显示: S7-300: QW12 (QW6, 32位模式) S7-400: IW 30 S7-4
10、00: QW38切换开关: S7-300: IW0 (IW0) S7-400: IW28,练习 1.2:乘法运算完成后跳转,无溢出,将结果输出显示,删除显示,溢出,JO 标号,十进制开关: S7-300: IW4 (IW2, 32位模式) 显示: S7-300: QW12 (QW6, 32位模式) S7-400: IW30 S7-400: QW38 切换开关: S7-300: IW0 (IW0) S7-400: IW28,DTB,转换为 BCD码,拨码开关,1 2 3 4,* I,转换为 DINT,转换为 DINT,BTD,BTD,0,0,0,0,0,0,0,0,1,0,0,1,0,0,1,0,20,215,27,仿真器上的切换开关,练习 1.3:跳转分支编程,拨码按钮,1,1,2,3,4,5,Motor_let 右转,Motor_let 左转,马达停转,喇叭开,喇叭关,使用Jump指令,跳转到所列标号,功能:, JL 标号,标号:,地址: S7-300 (16位) S7-300 (32位) S7-400 马达右转: Q20.5 Q8.5 Q40.5 马达左转: Q20.6 Q8.6 Q40.6 喇叭: Q20.7 Q8.7 Q40.7,