PLC第六章1N.ppt_第1页
PLC第六章1N.ppt_第2页
PLC第六章1N.ppt_第3页
PLC第六章1N.ppt_第4页
PLC第六章1N.ppt_第5页
已阅读5页,还剩62页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

后一页 返回 PLC编程及应用S 200 安徽理工大学电气工程系 多媒体课件编制金林 后一页 返回 安徽理工大学电气工程系 第6章可编程序控制器的功能指令 返回 后一页 前一页 6 1S7 200的指令规约 6 2程序控制指令 6 3局部变量表与子程序 6 4数据处理指令 6 5数学运算指令 6 6中断程序与中断指令 6 7高速计数器与高速脉冲输出指令 返回 后一页 前一页 6 1S7 200的指令规约 6 1 1使能输入与使能输出 6 1 2梯形图中的网络与指令 6 1 3其他规约 返回 后一页 前一页 在梯形图中 用方框表示功能指令 在SIMATIC指令系统中将这些方框称为 盒子 Box 在IECll31 3指令系统中将它们称为 功能块 功能块的输入端均在左边 输出端均在右边 见图6 1 梯形图中有一条提供 能流 的左侧垂直母线 图中I2 4的常开触点接通时 能流流到功能块DIV I的数字量输入端EN EnableIN 使能输入 该输入端有能流时 功能指令DIV I才能被执行 6 1 1使能输入与使能输出 返回 后一页 前一页 如果功能块在EN处有能流而且执行时无错误 则ENO EnableOUT 使能输出 将能流传递给下一元件 如果执行过程中有错误 能流在出现错误的功能块终止 ENO可作为下一功能块的EN输入 即几个功能块可以串联在一行中 见图6 1 只有前一功能块被正确执行 后一功能块才能被执行 EN和ENO的操作数均为能流 数据类型为BOOL 布尔 型 图中的功能块DIV I表示将字节变量VW10 VW12的结果送回VW14 返回 后一页 前一页 语句表 STL 中没有EN输入 对于要执行的STL指令 栈顶的值必须为1 指令才能执行 与梯形图中的ENO相对应 语句表设置了ENO位 可用AENO AndENO 指令存取ENO位 AENO用来产生与功能块的ENO相同的效果 图6 1中的梯形图对应的语句表为 LDI2 4MOVWVW10 VW14AENO IVW12 VW14AENOMOVBVB0 VB2 返回 后一页 前一页 S7 200系统手册的指令部分给出了指令的描述 使ENO 0的错误条件 受影响的SM位 该指令支持的CPU型号和操作数表 该表中给出了每个操作数允许的存储器区 寻址方式和数据类型 返回 后一页 前一页 在梯形图中 程序被划分为称为网络 Network 的独立的段 网络由触点 线圈和功能块组成 在梯形图中给出了网络的编号 如网络2 能流只能从左往右流动 网络中不能有断路 开路和反方向的能流 允许以网络为单位给梯形图程序加注释 STL程序不使用网络 如果用Network这个关键词对程序分段 可以将STL程序转换为梯形图程序 6 1 2梯形图中的网络与指令 返回 后一页 前一页 必须有能流输入才能执行的功能块或线圈指令称为条件输入指令 它们不能直接连接到左侧母线上 如果需要无条件执行这些指令 可以用接在左侧母线上的SM0 0 该位始终为1 的常开触点来驱动它们 有的线圈或功能块的执行与能流无关 如标号指令LBL和顺序控制指令SCR等 称为无条件输入指令 应将它们直接接在左侧母线上 不能级连的指令块ENO没有输出端和能流流出 JMP CRET LBL NEXT SCR和SCRE等属于这类指令 返回 后一页 前一页 触点比较指令没有能流输入时 输出为0 有能流输入时 输出与比较结果有关 返回 后一页 前一页 SIMATIC程序编辑器中的直接地址由存储器区和地址组成 如I0 0 IEC程序编辑器用 表示直接地址 如 I0 0 INPUT1 为全局符号名 符号 INPUT1 中的 号表示该符号是局部变量 红色部号 或 表示需要输入的地址或数值 梯形图中的规约 是一个开路符号 或需要能流连接 表示输出是一个可选的能流 用于指令的级连 符号 表示有一个值或能流可以使用 6 1 3其他规约 返回 后一页 前一页 6 2程序控制指令 返回 后一页 前一页 1 条件结束指令与停止指令条件结束指令END根据前面的逻辑关系终止当前的扫描周期 只能在主程序中使用条件结束指令 停止指令STOP使可编程序控制器从运行模式进入停止模式 立即终止程序的执行 如果在中断程序中执行停止指令 中断程序立即终止 并忽略全部等待执行的中断 继续执行主程序的剩余部分 并在主程序的结束处 完成从运行方式至停止方式的转换 返回 后一页 前一页 2 监控定时器复位指令监控定时器 Watchdog 又称看门狗 它的定时时间为300ms 每次扫描它都被自动复位一次 正常工作时如果扫描周期小于300ms 监控定时器不起作用 如果强烈的外部干扰使可编程序控制器偏离正常的程序执行路线 监控定时器不再被周期性地复位 定时时间到时 可编程序控制器将停止运行 在以下情况下扫描周期可能大于300ms 监控定时器会停止执行用户程序 1 用户程序很长 2 出现中断事件时 执行中断程序的时间较长 返回 后一页 前一页 3 循环指令使扫描时间延长 为了防止在正常情况下监控定时器动作 可将监控定时器复位 WDR 指令插人到程序中适当的地方 使监控定时器复位 如果FOR NEXT循环程序的执行时间可能超过监控定时器的定时时间 可将WDR指令插入到循环程序中 条件跳转指令JMP若在它对应的标号之后 即程序往回跳 可能因连续反复跳步使它们之间的程序被反复执行 总的执行时间超过监控定时器的定时时间 为了避免出现这样的情况 可在JMP指令和对应的标号之间插入WDR指令 使用WDR指令后 在终止本次扫描之前 下列操作将被禁止 返回 后一页 前一页 1 通信 自由口模式除外 2 I O更新 立即I O除外 3 强制更新 4 SM位更新 不能更新SM0 5 运行时间诊断 6 在中断程序中的STOP指令 7 如果扫描时间超过25s 10ms定时器和lOOms定时器不能正确累计时间 如果将CPU的方式开关切换到STOP位置 1 4s内CPU转到停止模式 返回 后一页 前一页 3 循环指令在控制系统中经常遇到需要重复执行若干次同样的任务的情况 这时可以使用循环指令 FOR指令表示循环的开始 NEXT指令表示循环的结束 并将堆栈的栈顶值设为1 驱动FOR指令的逻辑条件满足时 反复执行FOR与NEXT之间的指令 在FOR指令中 需要设置指针或当前循环次数计数器 1NDX 起始值 1NIT 和结束值 FINAL 假设INIT等于1 FINAL等于10 每次执行FOR与NEXT之间的指令后 INDX的值加1 并将结果与结束值比较 如果INDX大于结束值 则循环终止 FOR与NEXT之间的指令将被执行10次 如果起始值大于结束值 则不执行循环 返回 后一页 前一页 下面是使用FOR NEXT循环的注意事项 1 如果启动了FOR NEXT循环 除非在循环内部修改了结束值 否则循环就一直进行 直到循环结束 在循环的执行过程中 可以改变循环的参数 2 再次启动循环时 它将初始值INIT传送到指针INDX中 FOR指令必须与NEXT指令配套使用 允许循环嵌套 即FOR NEXT循环在另一个FOR NEXT循环之中 最多可嵌套8层 返回 后一页 前一页 I2 1 VW100 1 100 VW200 1 2 返回 后一页 前一页 例6 1I2 1接通时 执行100次标有1的外层循环 I2 1和I2 2同时接通时 执行2次标有2的内层循环 返回 后一页 前一页 4 跳转与标号指令条件满足 栈顶的值为1 时 跳转指令JMP Jump 使程序流程转到对应的标号LBL 1abel 处 标号指令用来指示跳转指令的目的位置 JMP与LBL指令中的操作数n为常数0 255 JMP和对应的LBL指令必须在同一程序块中 图6 4中12 1的常开触点闭合时 程序流程将跳到标号LBL4处 返回 后一页 前一页 5 诊断LED指令S7 200检测到致命错误时 SF DIAGLED发红光 选择有变量被强或有I O错误时 LED亮 出现上述诊断事件时LED将发黄光 如果两个选项都没有被选择 SF DIAGLED发黄光只受DIAG LED指令的控制 如果此时指令的输入参数IN为0 诊断LED不亮 如果IN大于0 诊断LED发黄光 图6 4的VBl0中如果有非零的错误代码 将使诊断LED亮 返回 后一页 前一页 程序控制指令 返回 后一页 前一页 6 3局部变量表与子程序 6 3 1局部变量表1 局部变量与全局变量程序中的每个POU ProgramOrganizationalUnit 程序组织单元 均有自己的由64字节L储器组成的局部变量表 它们用来定义有范围限制的变量 局部变量只在它被创建的POU中有效 与之相反 全局符号在各POU中均有效 只能在符号表 全局变量表中定义 全局符号与局部变量名称相同时 在定义局部变量的POU中 该局部变量的定义优先 该全局定义则在其它POU中使用 返回 后一页 前一页 局部变量适用于以下两种情况 1 在子程序中只用局部变量 不用绝对地址或全局符号 子程序可移植到别的项目去 2 如果使用临时变量 TEMP 同一片物理存储器可在不同的程序中重复使用 如果不是上述两种情况 不需要使用局部变量 通过在符号表 SIMATIC 或全局变量表 IEC 中进行定义 可使符号成为全局变量 2 局部变量的类型TEMP 临时变量 暂时保存在局部数据区中的变量 只有在执行该POU时 定义的临时变量才被使用 POU执行完后 不再使用临时变量的数值 返回 后一页 前一页 在主程序或中断程序中 局部变量表只包含TEMP变量 子程序中的局部变量表还有下面的3种变量 IN 输入变量 由调用它的POU提供的输人参数 OUT输出变量 返回给调用它的POU的输出参数 IN OUT 输入 输出变量 其初始值由调用它的POU提供 被子程序修改后返回给调用它的POU 3 局部变量的赋值在局部变量表中赋值时 只需指定声明局部变量的类型 TEMP IN IN OUT或OUT 和数据类型 参见SIMATIC和IEC1131 3的数据类型 但不指定存储器地址 程序编辑器自在L存储区中为所有局部变量指定存储器位置 返回 后一页 前一页 4 在局部变量表中增加新的变量对于主程序与中断程序 局部变量表显示一组已被预先定义为TEMP 临时 变量的行 表中增加行 只需用右键单击表中的某一行 选择 插入一行 指令 在所选行的上部插入行 选择 插入一行下 指令 在所选行的下部插入新的行 对于子程序 局部变量表显示数据类型被预先定义为IN IN OUT OUT和TEMP的一行 不能改变它们的顺序 如果要增加新的局部变量 必须用鼠标右键单击已有的行 并出菜单在所击行的上下插入相同类型的另一局部变量 返回 后一页 前一页 5 局部变量数据类型检查局部变量作为参数向子程序传递时 在该子程序的局部变量表中指定的数据类型必须与调用POU中的数据类型值匹配 例如从主程序OB1调用子程序SBR0 使用名为INPUT1的全局符号作为子程序的输人参数 在SBR0的局部变量表中 已经定义了一个名为FIRST的局部变量作为该输人参数 当OB1调用SBR0时 INPUT1的数值被传人FIRST INPUT1和FIRST的数据类型必须匹配 返回 后一页 前一页 6 显示或隐藏局部变量表将水平分裂条拉至程序编辑器视窗的顶部 则不再显示局部变量表 但它仍然存在 将分裂条下拉 将再次显示局部变量表 7 在局部变量表中进行赋值在程序中使用符号名时 程序编辑器首先检查有关POU的局部变量表 然后检查符号表 全局变量表 如果某符号名在两处都没有定义 程序编辑器则将其视为全局符号 程序编辑器指定一条绿色波浪状下画线 并将名称括在双引号中 例如 UndefinedLocalVar 未定义的局部变量 如果后来对该符号名赋了值 程序编辑器不会自动再次读取局部变量表并修改它 返回 后一页 前一页 为了将该符号名作为局部变量使用 必须手工删除程序代码中的引号 并在符号名前插入 号 例如改为 UndefinedLocalVar 各子程序最多可调用16个输入 输出参数 如果超出16个 将返回错误 选择希望的变量类型所在的行 并在名称域中键人变量名称 在数据类型域中键人数据类型 不需在局部变量表中的变量名称前加 号 号只在程序代码中的局部变量名之前使用 局部变量名可包含数字 字母和下画号 也可以包含扩展字符 ASCll128 ASCll255 第一个字符必须是字母或扩展字符 关键字不能作为符号名 返回 后一页 前一页 局部变量表中的变量名被下载和存储在CPU存储器中 使用较长的变量名将占用较多的存储空间 6 3 2子程序的编写与调用S7 200CPU的控制程序由主程序 子程序和中断程序组成 STEP7 Micro WIN32在程序编辑器窗口里为每个POU 程序组织单元 提供一个独立的页 主程序总是第1页 后面是子程序或中断程序 因为各个程序在编辑器窗口里被分开 编译时在程序结束的地方自动加入五条件结束指令END MEND RET或RETI 如果在程序里加了这些指令 编译时反而会出错 返回 后一页 前一页 1 子程序的作用子程序常用于需要多次反复执行相同任务的地方 只需要写一次子程序 别的程序在需要子程序的时候调用它 而无需重写该程序 子程序的调用是有条件的 未调用它时不会执行子程序中的指令 因此使用子程序可以减少扫描时间 使用子程序可以将程序分成容易管理的小块 使程序结构简单清晰 易于查错和维护 如果子程序中只引用参数和局部变量 可以将子程序移植到其他项目 为了移植子程序 应避免使用全局符号和变量 如I Q M SM AI AQ V T C S AC等存储器中的绝对地址 返回 后一页 前一页 2 子程序的创建可采用下列方法创建子程序 在 编辑 菜单中选择 插入一子程序 在程序编辑器视窗中按鼠标右键 从弹出菜单中选择 插入一子程序 程序编辑器将从原来的POU显示进入新的子程序 程序编辑器底部将出现标志新的子程序的新标签 在程序编辑器窗口中可以对新的子程序编程 可以使用该子程序的局部变量表定义参数 各子程序最多可以定义16个IN OUT参数 用右键双击指令树中的子程序或中断程序的图标 在弹出的窗口中选择 重新命名 可修改它们的名称 返回 后一页 前一页 返回 后一页 前一页 假设创建了一个名为CULCU的子程序 首先在该子程序的局部变量表中 定义一个名为 输入 的双字IN 输人 变量 一个名为 输出 的双字OUT 输出 变量和一个名为TMP1的双字TEMP 临时 变量 见图6 5 在图6 6的子程序中 输入变量被乘以12000 再除以13257 运算结果作为子程序的输出 返回 后一页 前一页 3 子程序的调用可以在主程序 另一子程序或中断程序中调用子程序 但是不能在子程序中调用自己 即不允许递归调用 调用子程序时将执行子程序的全部指令 直至子程序结束 然后返回调用程序中子程序调用指令的下一条指令之处 创建子程序后 STEP7 Micro WIN32在指令树最下面的 子程序 图标下自动生成刚创建的子程序CULCU对应的图标 对于梯形图程序 在子程序局部变量表中为该子程序定义参数后 将生成客户化调用指令块 见图6 6 指令块中自动包含了子程序的输人参数和输出参数 返回 后一页 前一页 返回 后一页 前一页 在梯形图程序中插入子程序调用指令时 首先打开程序编辑器视窗中需要调用子程序的POU 找到需要调用子程序的地方 在指令树的最下面用左键打开子程序文件夹 将需要调用的子程序图标从指令树拖到程序编辑器中的正确位置 或将光标置于程序编辑器视窗中 然后双击指令树中的调用指令 应为子程序调用指令的各参数指定有效的操作数 有效操作数为存储器地址 常量 全局符号和调用指令所在的POU中的局部变量 不是被调用子程序中的局部变量 如果在使用子程序调用指令后修改该子程序中的局部变量表 调用指令将变为无效 必须删除无效调用 并用能反映正确参数的新的调用指令代替 返回 后一页 前一页 在语句表程序中调用子程序时使用调用指令 SBRn 在调用子程序时 CPU保存整个逻辑堆栈后 将栈顶值置为1 堆栈中的其他值清0 控制转移至被调用的子程序 子程序执行完成时 用调用时保存的数据恢复堆栈 控制返回调用程序 子程序和调用程序共用累加器 不会因使用子程序自动保存或恢复累加器 4 调用带参数的子程序调用带参数的子程序时需要设置调用的参数 参数在子程序的局部变量表中定义 最多可传递16个参数 返回 后一页 前一页 IN 输人 是传人子程序的输入参数 如果参数是直接寻址 如VBl0 指定地址的值被传人子程序 如果参数是间接寻址 如 AC1 指针指定地址的值被传人子程序 如果参数是常数 例如DW 12345 或地址 如 VBl00 它们的值被传人子程序 为常数描述符 OUT 输出 是子程序的执行结果 它被返回给调用它的POU 常数和地址 如 VBl00 不能作输出量 IN OUT 输入 输出 将参数的初始值传给予程序 子程序的执行结果返回给同一地址 常数和地址不能作输入 输出参数 在子程序中可以使用参数IN IN OUT和OUT 返回 后一页 前一页 TEMP是局部存储变量 不能用来传递参数 它们只能在子程序中使用 子程序传递的参数放在子程序的局部变量表中 局部变量表最左边的一列是每个被传递的参数酌局部存储器地址 调用子程序时 输人参数被拷贝到子程序的局部存储器 子程序执行完后 从局部存储器区拷贝输出参数到指定的输出参数地址 数据单元的大小和类型用参数的代码表示 在子程序中局部参数存储器的参数值分配如下 1 按子程序指令的调用顺序 给参数值分配局部存储器 起始地址是L0 返回 后一页 前一页 2 1 8个连续的位参数分配一个字节 字节中的位地址为Lx 0 Lx 7 3 字节 字和双字值在局部存储器中按字节顺序分配 如LBx LWx或LDx 在带参数调用子程序指令中 参数必须按一定的顺序排列 输人参数在最前面 其次是输人 输出参数 最后是输出参数 如果用语句表编程 子程序调用指令的格式为 CALL子程序号 参数1 参数2 参数nn 0 16 带参数调用子程序使ENO 0的错误条件 SM4 3 运行时间 0008 子程序嵌套超界 返回 后一页 前一页 子程序调用举例 主程序LD10 0CALLI0 I0 1 VBl0 I1 0 VBl00 AC1 VD200 子程序10 LDI2 1CRET 返回 后一页 前一页 例6 2 子程序调用举例 返回 后一页 前一页 返回 后一页 前一页 5 子程序的嵌套调用程序中最多可创建64个子程序 子程序可以嵌套调用 在子程序中调用别的子程序 最大嵌套深度为8 6 程序的有条件返回在子程序中用触点电路控制RET 从子程序有条件返回 指令 触点电路接通时条件满足 子程序被终止 编程软件自动地为主程序和子程序添加无条件返回指令 类似地 可以在主程序中用触点电路驱动END 有条件结束 返回 后一页 前一页 6 4数据处理指令 6 4 1比较指令比较指令用来比较两个数IN1与IN2的大小 在梯形图中 满足比较关系式给出的条件时 触点接通 在语句表中 满足条件时 将堆栈顶置1 返回 后一页 前一页 返回 后一页 前一页 LDW VW3 VW5ANDB VB8 VB24 返回 后一页 前一页 返回 后一页 前一页 字节比较指令指令用来比较两个无符号数字节INl与IN2的大小 整数比较指令用来比较两个字INl与IN2的大小 最高位为符号位 例如16 7FFF 16 8000 后者为负数 双字整数比较指令用来比较两个双字INl与IN2的大小 双字整数比较是有符号的 16 7FFFFFFF 16 80000000 后者为负数 实数比较指令用来比较两个实数INl与IN2的大小 实数比较是有符号的 6 4 2数据传送指令SIMATIC功能指令助记符中最后的B W DW 或D 和R分别表示操作数为字节 Byte 字 Word 双字 DoubleWord 和实数 Real 数据传送指令如表6 13和图6 9 6 11图所示 返回 后一页 前一页 1 字节 字 双字和实数的传送这些指令将输入的数据 1N 传送到输出 OUT 传送过程中不改变数的大小使ENO 0的错误条件 SM4 3 运行时间 0006 间接地址 返回 后一页 前一页 返回 后一页 前一页 2 字节 宇 双字的块传送指令块传送指令将从输入地址 1N 开始的N个数据传送到输出地址 OUT 开始的N个单元 N 1 255 N为字节变量 使ENO 0的错误条件 SM4 3 运行时间 0006 间接地址 0091 操作数超出范围 以块传送指令 BMBVB20 VBl00 4 为例 执行后VB20 VB23中的数据被传送到VBl00 VBl03中 返回 后一页 前一页 返回 后一页 前一页 3 字节交换指令字节交换SWAP SwapBytes 指令交换输入字 1N 的高字节与低字节 使ENO 0的错误条件 SM4 3 运行时间 0006 间接地址 SWAPIN 返回 后一页 前一页 4 字节立即读写指令字节立即读MOV BIR MoveBytelmmediateRead 指令读取IN输入端给出的1个字节的物理输入点 1B 并将结果写入OUT 字节立即写MOV BIW MoveBytelmmediateWrite 指令将输入 1N 给出的1字节数值写入OUT端给出的物理输出点 QB 两条指令的IN和OUT都是字节变量 使ENO 0的错误条件 SM4 3 运行时间 0006 间接地址 返回 后一页 前一页 6 4 3移位与循环移位指令1 字节 字 双字右移位和左移位指令字节向右移位指令SHR B与字节向左移位指令SHL B将输入 1N 的无符号数字节中的各位向右或向左移动N位后 送给输出字节 OUT 移位指令对移出位补0 如果移动的位数N 8 最多移位8次 所有的循环和移位指令中的N均为字节变量 SRBOUT NSRWOUT NSRDOUT N 返回 后一页 前一页 字向右移位指令SHlW与字向左移位指令SHlW将输入 1N 的无符号数字中的各位向右或向左移动N位后 送给输出字 OUT 移位指令对移出位补0 如果移动的位数N 16 最多移位16次 双字向右移位指令SHlDW与双字向左移位指令SHLDW将输入 1N 的无符号双字中的各位向右或向左移动N位后 送给输出双字 O

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论