S7 200 第6章
2020-02-27 239浏览
- 1.S7-200 PLC编程及应用 Chap 6 PLC的功能指令
- 2.6.1 S7-200的指令规约 6.1.1 使能输入与使能输出 图6-1 EN与ENO LD I2.4 MOVW VW10, VW14 // VW10→VW14 AENO /I VW12, VW14 // VW14/VW12→VW14 AENO MOVB VB0, VB2 // VB0→VB2 除数VW12为0时无能流流出。删除AENO后两个方框变为并联。
- 3.6.1.2 梯形图中的网络与指令 一个网络中只能有一块独立电路。 输入语句表指令时必须使用英文的标点符号。 6.2 程序控制指令 1.条件结束指令与停止指令 2.监控定时器复位指令 3.循环指令 图6-2 循环程序
- 4.【例6-1】在I0.5的上升沿,求VB10~VB29中20个字节的异或值。 网络1 LD I0.5 EU // 在I0.5的上升沿 MOVB 0, AC0// 清累加器0 MOVD &VB10, AC1 // 累加器1(存储区指针)指向VB10 FOR VW0, 1, 20 // 循环开始 网络2 LD SM0.0 XORB *AC1, AC0 // 字节异或 INCB AC1 // 指针AC1的值加1,指向下一个变量存储器字节 网络3 NEXT 网络4 LD I0.5 EU // 循环结束 I2.1 4 JMP … 4 LBL MOVB AC0, VB40 // 保存异或结果 图6-3 跳转与标号指令
- 5.6.3 局部变量表与子程序 6.3.1 局部变量表 1.局部变量与全局变量 程序中的每个程序组织单元POU(Program Organizational Unit)均有由64 字节L存储器组成的局部变量表。局部变量只在它被创建的POU中有效,全 局符号在各POU中均有效。局部变量有以下优点: (1) 尽量使用局部变量的子程序易于移植到别的项目。 (2) 如果使用临时变量(TEMP),同一片物理存储器可以在不同的程序 中重复使用。 2.局部变量的类型 TEMP (临时变量):暂时保存在局部数据区中的变量。主程序或中断程序 的局部变量表只有TEMP变量。 IN (输入变量):由调用它的POU提供的传入子程序的输入参数。 OUT(输出变量):子程序返回给调用它的POU的输出参数。 IN_OUT(输入_输出变量):其初始值由调用它的POU提供,并用同一变量将 子程序的执行结果返回给调用它的POU。
- 6.3.局部变量的赋值 4.在局部变量表中增加新的变量 5.局部变量的数据类型检查 6.3.2 子程序的编写与调用 1.子程序的作用 子程序将程序分成容易管理的小块,使程序结构简单清晰,易于查错和 维护。子程序调用是有条件的,可以多次调用,使用子程序可以减少扫描时 间。 2.子程序的创建 3.子程序的调用
- 7.分裂条 图6-5 局部变量表与模拟量计算子程序
- 8.图6-6 在主程序中调用子程序 LD I0.4 CALL 模拟量计算, AIW2, VW20, +2356, VD40 4.子程序的有条件返回 5.子程序中的定时器
- 9.6.4 数据处理指令 6.4.1 比较指令 图6-9 比较指令 图6-10 自复位接通延时定时器
- 10.6.4.2 数据传送指令 1.字节、字、双字和实数的传送 2.字节立即读指令MOV_BIR读取1个字节的物理输入, 字节立即写指令MOV_BIW写1个字节的物理输出。 3.字节、字、双字的块传送指令 “BMB VB20, VB100, 4”指令将VB20~VB23中的数据被传送到VB100~ VB103。 4.字节交换指令 6.4.3 移位与循环指令 1.右移位和左移位指令 2.循环右移位和循环左移位指令
- 11.图6-12 移位与循环移位指令 图6-13 移位寄存器
- 12.6.4.4 数据转换指令 1.段译码指令, 2.数字转换指令 3.实数转换为双整数的指令 ROUND将实数四舍五入后转换为双字整数,TRUNC是截位取整指令。 4.译码指令 5.编码指令 6.4.5 表功能指令 1.填表指令
- 13.图6-18 填表指令举例
- 14.图6-19 查表指令举例 命令参数CMD = 1~4,分别代表“=”、“<>”(不等于)、“<”和“>”。 图6-20 先入先出指令举例
- 15.图6-21 后入先出指令举例 图6-22 填充指令
- 16.6.4.6 读写实时时钟指令 读实时时钟指令TODR从实时钟读取当前时间和日期,并把它们装入以T 为起始地址的8字节缓冲区,依次存放年、月、日、时、分、秒、0和星期, 1 为星期日,2~7为星期1~6。写实时时钟指令TODW将起始地址为T的 8字节 缓冲区中的时间和日期写入实时钟。 【例6-5】出现事故时,I0.0的上升沿产生中断,使输出Q1.0立即置位,同 时将事故发生的日期和时间保存在VB10~VB17中。 //主程序 OB1 LD SM0.1 // 第一次扫描时 ATCH 0, 0 // 指定在I0.0的上升沿执行0号中断程序 ENI // 允许全局中断
- 17.//中断程序0(INT_0) LD SM0.0 // 该位总是为ON SI Q1.0, 1 // 使Q1.0立即置位 TODR VB10 // 读实时时钟 6.5 数学运算指令 6.5.1 数学运算指令 梯形图:IN1 + IN2 = OUT,IN1-IN2 = OUT, IN1 * IN2 = OUT,IN1 / IN2 = OUT 语句表:IN1 + OUT = OUT,OUT-IN1 = OUT, IN1 * OUT = OUT,OUT / IN1 = OUT 有16位整数运算、32位双整数运算、实数运算和加1、减1指令。 整数乘、除法的操作数为两个16位整数,乘积或商均为16位,不保留余 数。双整数乘、除法的操作数和运算结果均为32位。此外还有 MUL:整数乘法产生双整数指令。 DIV:整数除法产生双整数指令。两个16位整数相除,结果的高16位为 余数,低16位为商。
- 18.【例6-8】 在输入信号I0.4的上升沿,用模拟电位器0来设置定时器T37的 设定值(5~20s),即从SMB28读出的数字0~255对应于5~20s。设读出的 数字为N,100ms定时器的设定值为 (200–50)×N / 255+50 =150×N / 255+50 (0.1s) 网络1 LD I0.4 EU // 在I0.4的上升沿 MOVB SMB28, AC0 MUL +150, AC0 // 150乘以模拟电位器的转换值 /D +255, AC0 // 除以255,双整数除法 +I +50, AC0 // 加偏移量50(5s) MOVW AC0, VW10 网络2 LD I0.5 TON T37, VW10 // T37以VW10中的数值为设定值
- 19.6.5.2 浮点数函数运算指令 包括正弦指令SIN、余弦指令COS和正切指令TAN,自然对数指令LN和自 然指数指令EXP。角度的单位为弧度。 6.5.3 逻辑运算指令 【例6-9】在I0.0的上升沿执行下面程序中的逻辑运算,运算前后各存储单 元中的值如图6-27所示。 LD I0.0 EU INVB VB0 // 字节取反指令 ANDB VB1, VB2 // 字节与指令 ORB VB3, VB4 // 字节或指令 XORB VB5, VB6 // 字节异或指令
- 20.6.6 中断程序与中断指令 6.6.1 中断程序 中断允许指令ENI允许处理所有被连接的中断事件。禁止中断指令DISI禁 止处理所有中断事件。进入RUN模式时自动禁止中断,中断程序越短越好。 6.6.2 中断事件与中断指令 中断连接指令ATCH建立中断事件(EVNT)与对应的中断程序(INT)的联系。 中断事件由中断事件号指定(见表6-12),中断程序由中断程序号指定。 中断分离指令DTCH断开中断事件与中断程序之间的联系。 中断优先级(见表6-12)分组:通信(最高优先级)、I/O中断和定时中断。 I/O中断:I0.0~I0.3上升沿、下降沿中断;HSC当前值等于设定值、计数 方向改变和计数器外部复位中断;输出完指定的脉冲数时产生的中断。 图6-28 中断指令
- 21.定时中断0/1的周期为1~255ms,分别写入SMB34和SMB35。每当定时时 间到时,执行相应的定时中断程序。定时器T32/T96中断的时间周期最大为 32.767s。 【例6-11】在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 // 该位总是为ON RI Q0.0, 1 // 使Q0.0立即复位
- 22.【例6-12】用定时中断0实现周期为2s的高精度定时。 // 主程序 OB1 LD SM0.1 // 第一次扫描时 MOVB 0, VB10 // 将中断次数计数器清0 MOVB 250, SMB34 // 设定时中断0的中断时间间隔为250ms ATCH INT_0, 10 // 指定产生定时中断0时执行0号中断程序 ENI // 允许全局中断 // 中断程序INT_0, 每隔250ms中断一次 LD SM0.0 // 该位总是为ON INCB VB10 // 中断次数计数器加1 LDB= 8, VB10 // 如果中断了8次(2s) MOVB 0, VB10 // 将中断次数计数器清0 INCB QB0 // 每2s将QB0加1
- 23.6.7 高速计数器与高速脉冲输出指令 6.7.1 编码器 高速计数器一般与增量式编码器配合使用,双通道A、B相型编码器提供 转速和转轴旋转方向的信息。三通道增量式编码器的Z相零位脉冲用作系统 清零信号,或坐标的原点,以减少测量的积累误差。 图6-29 A、B相型编码器的输出波形 6.7.2 高速计数器的工作模式与外部输入信号 (1) 无外部方向输入信号的单相加/减计数器(模式0~2):用控制字节控 制计数方向。 (2) 有外部方向输入信号的单相加/减计数器(模式3~5)。 (3) 有加计数时钟脉冲和减计数时钟脉冲输入的双相计数器(模式6~8)。 (4) A/B相正交计数器(模式9~11)。
- 24.图6-30 1倍速正交模式操作举例
- 25.图6-31 4倍速正交模式操作举例 根据有无复位输入和启动输入,上述的4类工作模式又可以各分为3种。 高速计数器的外部输入信号见表6-16。 6.7.3 高速计数器的程序设计 【例6-13】用指令向导生成HSC0的初始化程序和中断程序,HSC0为无外 部方向输入信号的单相加/减计数器(模式0),计数值为10000~20000时 Q4.0输出为1。 (用编程软件演示)
- 26.6.7.4 高速脉冲输出与开环位置控制 占空比:脉冲宽度与脉冲周期之比。 脉冲列(PTO)功能提供周期与脉冲数目可以由用户控制的占空比为50%的 方波脉冲输出。脉冲宽度调制 (PWM) 功能提供连续的、周期与脉冲宽度可 以由用户控制的输出。 CPU有两个PTO/PWM发生器,分别通过Q0.0或Q0.1输出高速脉冲。 用脉冲输出向导生成PWM指令PWMx_RUN。 RUN为使能位,周期Cycle的数据 类型为WORD,变化范围为2~65535。 脉冲宽度Pulse的数据类型为WORD值, 变化范围为0~65535。 P WMx_RUN EN RUN Cycle Error Pulse 周期 脉冲宽度
- 27.图6-34 位置控制系统的速度与加减速时间 用位置控制向导组态脉冲列输出PTO的包络曲线。