Transcript 第5章应用指令
第5章 应用指令 5.1 程序控制类指令 5.2 特殊指令 5.1 程序控制类指令 5.1.1结束及暂停指令 5.1.2看门狗指令 5.1.3跳转指令 5.1.4子程序指令 5.1.5程序循环指令 5.1.6顺序控制继电器指令 5.1.7与ENO指令 返回本章首页 5.1.1 结束及暂停 1. 结束指令 结束指令有两条:END和MEND。两条指令在 梯形图中以线圈形式编程。 END,条件结束指令。使能输入有效时,终 止用户主程序。 MEND无条件结束指令。无条件终止用户程序 的执行,返回主程序的第一条指令。 用Micro/Win32编程时,编程人员不需手工 输入MEND指令,而是由软件自动加在主程序 结尾。指令格式:END (无操作数) 2. 暂停指令 STOP,暂停指令。使能输入有 效时,该指令使主机CPU的工作 方式由RUN切换到STOP方式, 从而立即终止用户程序的执行。 STOP指令在梯形图中以线圈形 式编程。指令不含操作数。指令 的执行不考虑对特殊标志寄存器 位和能流的影响。 指令格式:STOP (无操作数) 返回本节 5.1.2 看门狗 WDR,看门狗复位指令。当使能输入有效时,执行 WDR指令,每执行一次,看门狗定时器就被复位一 次。 S7的看门狗WDR的设定值为300ms,有时在循环 或调用子程序,响应中断服务程序时,扫描时间超 过300ms, WDR会认为出错。 可用本指令可用以延长扫描周期,从而可以有效避 免看门狗超时错误。 指令格式:WDR (无操作数) 程序实例:指令STOP、END、WDR的应用如图 5.2所示。 LD SM5.0 //检查 I/O 错误 O SM4.3 //运行时刻检查编程 O I0.3 //外部切换开关 STOP //条件满足,由 RUN // 切换到 STOP 方式 // // LD I0.5 //外部停止控制 END //停止程序执行 // // LD M0.4 //用触点重新触发 WDR A •图5.1 //看门狗定时器 I0.2 // 停止、结束、看门狗指令 返回本节 5.1.3 跳转 1. 跳转指令 与跳转相关的指令有下面两条: (1)跳转指令 JMP,跳转指令。使能输入有效时,使 程序流程跳到同一程序中的指定标号n 处执行。执行跳转指令时,逻辑堆栈的 栈顶值总是1。 (2)标号指令 LBL,标号指令。标记程序段,作为跳 转指令执行时跳转到的目的位置。操作 数n为0~255的字型数据。 程序实例: 某生产线对产品进行加工处理,同时用增减 计数器对成品进行计数,如果检测到100个成 品就要跳过某些控制程序直接进入小包装控 制程序;若检测到900个成品,则程序跳转到 大包装控制程序。 程序如下: • . 图 5 2 程 序 跳 转 实 例 5.1.4 子程序指令 编写子程序的步骤 1 .建立子程序 2. 编写子程序 3.在主程序、其他子程序、或中断程序中 调用子程序(带参数的子程序) 1. 建立子程序 可用编程软件Edit菜单中的Insert选项,选择 Subroutine,以建立或插入一个新的子程序, 同时在指令树窗口可以看到新建的子程序图 标,默认的程序名是SBR_n,编号n从0开始 按递增顺序生成,可以在图标上直接更改子 程序的程序名。在指令树窗口双击子程序的 图标就可对它进行编辑。 2. 子程序调用 (1)子程序调用和返回指令 SBR1 子程序调用 EN 子程序条件返回 ( RET ) (2)注意事项 可有64个子程序,可以嵌套子程序,最大 嵌套深度为8 子程序内不能用END指令 不允许直接递归(自己调用自己),可间 接递归 (3)应用实例 图5.3所示的程序实现用外部控制条件 分别调用两个子程序。 LD I0.0 //使能输入 CALL S2 //调用子程序 S2 // LD I0.0 //使能输入 CALL SBR_1 //调用子程序 //SBR_1 •图5.3 子程序调用举例 3. 带参数的子程序调用 (1)子程序参数---最多可带16个参数,每 个参数包含: (2)参数子程序调用的规则 变量名 变量类型 (IN类型、IN/OUT、OUT) 数据类型 (位、字节、字、双字、实型) 参数与局部变量标的定义相匹配 参数顺序是:输入,输入/输出,输出 (3)程序实例 LD I0.0 //装入常开触点 CALL SBR_0, I0.2, VB20, VD30 // //调用子程序 SBR_0 //含有 3 个参数: //分别为布尔、字节 //和双字型 •图5.5 带参数的子程序调用 返回本节 以上面指令为例,局部变量表分配如表 5.1所示,程序段如图5.5所示。 •表5.1 局部变量表例 5.1.5 程序循环 计数值 1.循环开始FOR 初值 每执行一次循环计数值 终值 加1,当计数值大于 终值,则循环终止。 2.循环结束 NEXT 3. 程序实例 FOR EN ENO INDX INIT FINAL (NEXT) LD M0.0 // 使能输入 FOR VW10, +1, +20 //循环开始 //与第 2 个 NEXT //之间为一级循环体 LD M0.1 //使能输入 FOR VW20, +1, +5 //循环开始 //与第 1 个 NEXT //之间为二级循环体 •图5.6 程序循环(1) LD I0.0 //使能输入 CALL SBR_0 //调用子程序 0 //本梯级为二级 //循环体的功能段 NEXT //循环结束指令 LD SM0.0 //使能输入 INCW VW100 //字增指令 //每执行一次一级 //循环体,VW100 //的值增 1 NEXT •图5.6 //循环结束指令 程序循环(2) 返回本节 5.1.7 顺序控制继电器 顺序控制继电器S是专门用于编写顺序控 制程序(常称为步进控制)的。 所谓顺序控制,使生产过程按生产工艺 的要求预先安排的顺序自动地进行生产 的控制方式。 一个步进控制程序是由若干个SCR段组 成,每个SCR段对应步进控制中的一个 功能控制步。 Sx.y 1. 顺序继电器指令 SCR LSCR Sn (1)段开始指令 功能:标记一个SCR段的开始,操作数是顺序继电 器Sx.y(如S0.0)。 当顺序继电器Sx.y=1启动SCR x.y的顺序程序。即允 Sn 许该SCR段工作。 (SCRT) SCRT Sn (2)段转移 功能:是当Sx.y=1,将当前的SCR段停止,切换到下 一个SCR 。其操 作数为 下一个 SCR的标 志位 ( 如 Sn S0.1) (SCRE) SCRE (3)段结束 功能:标记一个段的结束。 本例是用顺序 2. 程序实例 继电器实现的 顺序控制中的 一个步的程序 段,这一步实 现的功能是使 两个电机M1和 M2 起 动 运 行 20秒后停止, 切换到下一步。 程 序 如 图 5.7 所示。 LSCR S0.5 //由 S0.5 控制的 //顺序步的开始 // LD SM0.0 //装入常开触点 S Q1.2, 2 //将 Q1.2 和 Q1.3 //置 1 TON T50, +200 //通电延时 //本步的持续时间 //为 20s LD T50 //延时时间到 //作为切换条件 SCRT S0.6 //步转移 //切换到下一步 //同时关本步 // SCRE //本步结束标志 返回本节 3. 结构形式 (1)顺序结构 (2)分支结构 选择性分支 并发性分支 (3)循环结构 (4)复合结构 (1)顺序结构 I0.0 Q0.0 S0.1 ( ) I0.1 Q0.1 S0.2 ( ) I0.2 S0.3 Q0.2 ( ) 各顺序控制段的转换不带 分支和汇合的顺控过程。 将复杂的控制分解若干 个独立控制功能步,用 方框表示,根据动作顺 序用箭头将各方框连接 起来,在相邻的两步之 间用段横线表示转换条 件。在每步的右边画上 要执行的控制程序。 (1)顺序结构 (2)分支结构 1)选择分支 31 执行完1步,当A或D 或G或I为1,1步复位, 23 2或4或6或7开始执行; A D 43 B 8步执行,由C或F或H 或J为1决定,执行时 顺序继电器置1,3、 5、6、7顺序继电器 复位 G 3 36 E C F 38 图5.9 37 H 53 选择性分支 I J 用水平双线表示并行分支 开始和结束。 2)并发性分支 当A为1,1步复位, 2467同时置位开始 工作。 为提高工作效率, 各支路的工作时间 尽量接近一致。 图5.10 并发性分支 (3)循环结构 图 5 11 . 循环结构用于一 个顺序过程的多 次或往复执行。 功能图画法如图 5.11所示,这种 结构可看作是选 择性分支结构的 一种特殊情况。 循 环 结 构 (4)复合结构 I1.2 M 00.0 3 几种结构组合 Q0.0 I0.0 M 00.1 3 Q0.1 Q0.2 M 00.6 3 I0.6 I0.2 I0.1 M 00.2 3 Q0.2 M 00.4 3 I0.3 M 00.3 3 Q0.4 M 00.7 3 Q0.5 I1.0 I0.5 Q0.3 M 01.0 3 µÈ´ý I0.4 M 00.5 3 µÈ´ý Q0.0 I1.1 M 01.1 3 图5.12 Q1.0 功能流程图举例 返回本节 5.1.8 与ENO指令 AENO,与ENO指令。ENO是梯形图和功能框 图编程时指令盒的布尔能流输出端。如果指 令盒的能流输入有效,同时执行没有错误, ENO就置位,将能流向下传递。当用梯形图编 程时,且指令盒后串联一个指令盒或线圈, 语句表语言中用AENO指令描述。 指令格式:AENO(无操作数) •AENO指令只能在语句表中使用,将栈顶值 和ENO位的逻辑与运算,运算结果保存到栈 顶。程序如图5.13所示。 LD I0.0 //使能输入 +I VW200, VW204 //整数加法指令,VW200+VW204=VW204 //与 ENO 指令,判断整数加法指令执行是否出错 AENO ATCH INT_0, 10 //如果加法指令执行正确,则将中断程序 INT_0 //与中断事件号 10 连接,并对该中断事件开放 •图5.13 与ENO指令 返回本节 5.2 特殊指令 5.2.1 5.2.2 5.2.3 5.2.4 5.2.5 5.2.6 时钟指令 中断 通信 高速计数 高速脉冲输出 PID回路指令 返回本章首页 5.2.1 时钟指令 首地址 VB300 READ_RTC EN T ENO VB300 SET_RTC EN T ENO 1. 读实时时钟 TODR T TODW T TODR,读实时时钟指令。当使能输入有效时, 系统读当前时间和日期,并把它装入一个8字 节的缓冲区。 2. 写实时时钟 TODW,写实时时钟指令。用来设定实时时钟。 当使能输入有效时,系统将包含当前时间和 日期,一个8字节的缓冲区将装入时钟。 •表5.2 时钟缓冲区格式 程序实例 控制要求: 编写一段程序,可实现读、写实时时钟,并以 BCD码显示分钟。时钟缓冲区从VB100开始。 程序中的子程序SBR_0为写时钟子程序,将当 前时间写入从VB100开始的8字节时间缓冲区, 时间设置如下表5.3所示。程序实现:读写时 钟程序如图5.9所示。 LD I0.4 //装入触点 EU //上跳沿触发 CALL SBR_0 //调用子程序 LD SM0.0 //运行有效 TODR VB100 // 从 VB100 //读时钟值 MOVB VB104, VB0 //传送指令 SEG VB0,QB0 //将分钟值低位 //从QB0输出 SRB VB0,4 SEG VB0,QB1 //右移4位 //将分钟值低位 //从QB1输出 子程序SBR_0 //作用为写时钟 5.2.2 中断 1. 中断源 (1)中断源及种类 中断源,即中断事件发出中断请求的来源。 S7-200可编程序控制器具有34个中断源,每 个中断源都分配一个编号用以识别,称为中 断事件号。这些中断源大致分为三大类:通 信中断、输入输出中断和时基中断。 (2)中断优先级 中断优先级由高到低依次是:通信中断、输 入输出中断、时基中断。每种中断中的不同 中断事件又有不同的优先权。 主机中的所有中断事件及优先级如表5.4所示。 •表5.4 中断事件及优先级 ATCH EN ENO INT 2. 中断操作指令 EVNT 包括: (1)开中断指令ENI---全局开放所有被 (ENI) 连接的中断事件 (2)关中断指令DISI---全局关断所有 (DISI) 被连接的中断事件 (3)中断连接指令ATCH 功能:建立一个中断事件EVNT与一个 标号为INTn中断服务程序联系,并对该 中断事件开放。 (4)中断分离指令DTCH 功能:取消某个中断事件EVNT与所有中断程序的关 联,并对该事件关中断。 (5)中断返回指令RETI和CRET 有条件返回 无条件返回 注意事项 中断服务程序中,不能使用开中断指令ENI、关中 断指令DISI、定义高速计数器指令HDEF、步进开始 指令LSCR、条件结束指令END。 程序实例 (3)程序实例 控制要求: 程序实现的功能是 用I0.4 调用I0.1输 入 点的上升沿中断, 若发现I/O错误,则 禁止本中断,用外 部条件I0.5可以禁止 全局中断。 程序实现:本程序 如图5.10所示。 LD I0.4 ATCH INT_1, 2 //使能输入 //中断调用 //中断程序 //为 INT_1 //事件号为 2 ENI //全局开中断 // LD SM5.0 //检查 I/O 错 DTCH 2 //若 I/O 有错 //断开本中 //断连接 LD DISI I0.5 //外部条件 //全局中断 //禁止 •图5.10 中断调用程序 3. 中断程序 (1)构成 中断程序必须由三部分构成:中断程序标号、 中断程序指令和无条件返回指令。 (2)编制方法 建立中断程序INT n 在INT n中编写其服务程序 编写中断连接指令 允许中断 返回本节 温度模拟量数据采集实例 0~200度范围 定时中断0,设定100ms,在中断 服务程序中进行数据采集和变换 2 测量的实际温度=(AIW-6552)/[(32760-6552)/200] 复习思考题 测量的实际温度=(AIW-6552)/[(32760-6552)/200] 一个温度检测系统,用Pt100热电阻,测 温范围为0~200度(电流输出),如测得环 境温度为35度,问A/D转换后的数字量? 0~200度 对应 4~20mA 12为数字量 0 0 1 1 0 0 1 1 0 0 1 1 32760 4 6552 1100110011000 20 0 0 0 215 1 7 32760 12为数字量 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 5.2.3 通信 通信指令包括: XMT,自由口发送指令 RCV,自由口接收指令 NETR,网络读指令 NETW,网络写指令 GPA,获取口地址指令 一、S7-200的网络通信 字符数据格式 (1)10位字符数据 传送数据由1个起始位、8个数据位、无校验位、一 个停止位组成。传送速率一般为9600波特。 (2)11位字符数据 传送数据由1个起始位、8个数据位、1个偶校验位、 一 个 停 止 位 组 成 。 传 送 速 率 一 般 为 9600 波 特 或 19200波特。 S7-200被默认为是从站。在采用PPI通信协议时, 若设置为PPI主站模式,PLC主机可以在RUN工作 方式下为主站,可以用通信指令读取其他PLC主机 的数据。 通信协议控制寄存器 SMB30控制和设置通信端口0,如果PLC主机上有通 信端口1,则用SMB130来进行控制和设置。 SMB30 和SMB130的各位及其的含义如下: 将特殊标志寄存器中的SMB30和SMB130的低2位 置为2#10,其他位为0,即SMB30和SMB130的值 为16#2,则可以控制将S7-200 CPU设置为PPI主站 模式。 (1)PP位:奇偶选择 (2)D位:有效位数 (3)BBB位:自由口波特率 (4)MM位:协议选择 MM:00=PPI从站模式 01=自由口协议 10=PPI主站模式 11=保留 网络通信指令 在S7-200的PPI主站模式下,网络通信指令有两条: 1 网络读指令(NETR) 功能:EN有效通过端口PORT从远程设备接收数据, 并形成数据表。 NETR指令最多可以从远程设备上接受16字节的信 息。 2网络写指令(NETW) 功能:EN有效通过端口PORT将数据表TBL中的数 据发送到远程设备。最多可以向远程设备发送16字 节的信息。 NETR EN ENO NETW EN TBL TBL PORT PORT ENO 传送数据表 (1)数据表格式 执行网络读写指令时,PPI主站与从站之间的 数据以数据表的格式传送。传送数据表的格 式描述如表5.5示。 表5.5 传送数据表格式 (2)状态字节 传送数据表中的第一个字节为状态字节, 各位及其的含义如下: D—完成状态。D=0未完成,D=1完成 A—有效状态。 A=0无效,A=1有效操作已 被排队 E—错误状态。 E=0无错误,E=1有错误 0—无效位 E1、E2、E3、E4错误编码。如果执行指令 后E位为1,则由这4位返回一个错误码。这 4位组成的错误编码及含义如表5.6所示。 错误编码表 应用实例 有一简单网络,结构如下图8.17所示。其中 TD200为主站,在RUN模式下,CPU 224在用户 程 序 中 允 许 PPI 主 站 模 式 , 可 以 利 用 NETR 和 NETW指令来不断读写两个CPU 221模块中的数 据。 站2 CPU 221 站3 CPU 221 站4 站1 CPU 224 TD200 PC/PPI µçÀ 站2 操作要求: CPU 221 站3 CPU 221 站4 站1 CPU 224 TD200 PC/PPI µçÀ 站4要读写两个远程站(站2和站3)的状态字节和 计数值(分别放在VB100和VW101中)。如果某个 远程站中的计数值达到200,站4将发生一定动作, 并将该远程站的计数值清0,重新计数。 分析:网络通信---要将站4设置为PPI主站模式 主站建立接收与发送数据表,用以读写从站 CPU 224通信端口号为0,从VB200开始设置接收 和发送缓冲区。接收缓冲区从VB200开始,发送缓 冲区从VB250开始,内容如表5.6所示。该网络通信 用户程序如图5.18所示。 表5.6 缓冲区设置 LD SM0.1 //初次扫描 MOVB 16#02, SMB30 // //设置 CPU 224 //允许 PPI 主站 //模式 FILL +0, VW200, 30 // //接收和发送缓 //冲区清 0 LDN V200.6 //网络读无效 AN V200.5 //并且无错误 MOVB 2, VB201 // //装入站 2 地址 NETR VB200, 0 // //网络读指令 // . MOVD &VB100,VD202 // //装入访问站 2 //数据区的指针 // // MOVB 3, VB206 // //装入读数据的 //字节数 图 5 18 网 络 程 序 实 例 ( 1 ) LDN AW= MOVB MOVD // V200.7 // //网络读完成 VW208, +200 // //计数值达到 200 2, VB251 // //装入站 2 地址 &VB101,VD252 //装入发送到 //站 2 数据区 MOVB +0, VW257 // //的指针 //将站 2 的计数 // //值清 0 MOVB 2, VB256 // //装入发送数据 //的字节数 NETW VB250, 0 // //网络写指令 // 图8.18 网络程序实例(2) 返回本节 二、 自由口通信 1 相关寄存器及标志 2 自由口指令 3 应用实例 自由口通信是用户可自定义通信协议,通过 建立通信中断事件,使用通信指令控制PLC 串口与其他设备进行通信。 返回本章首页 1 相关寄存器及标志 1). 控制寄存器 2). 特殊标志位及中断 3). 特殊存储器字节 1)控制寄存器SMB30 或SMB130 用以设置自由口通信协议 SMB30控制和设置通信端口0,如果PLC主机上有通 信端口1,则用SMB130来进行控制和设置。SMB30 和SMB130的各位及其的含义如下: (1)PP位:奇偶选择 00—无奇偶,01---偶校验,10--无奇偶,11--奇校验 (2)D位:有效位数 0---8位/字符, 1--- 7位/字符 (3)BBB位:自由口波特率 选择 000=38400 bit/s , 001=19200 bit/s , 010=9600 bit/s ……. (4)MM位:协议选择 11---保留 00—PPI从站模式,01—自由口协议, 10—PPI主站模式 2. 特殊标志位及中断 中断 接收中断:中断事件号为8(口0)和25(口1)。 发送完成中断:中断事件号为9(口0)和26(口 1)。 接 收 完 成 中 断 : 中 断 事 件 号 为 23( 口 0) 和 24 (口1)。 特殊标志位 SM4.5和SM4.6:分别用来表示口0和口1发送空 闲状态 3. 特殊存储器字节 接收信息时用到一系列特殊功能存储器。对端口0用 SMB86到SMB94;对端口1用SMB186到SMB194。各字 节及内容描述如下表5.7所示。 返回本节 2 自由口指令 1. XMT指令 XMT,发送指令。使能 输入有效时,指令初始 化通信操作,通过通信 端口PORT将数据表TBL 中的数据发送到远程设 备。 发送缓冲区(数据表) TBL的格式如表5.8所示。 XMT 2. RCV 指令 RCV,接收指令。使能输 入有效时,指令初始化通 信操作,通过通信端口 PORT从远程设备上接收 数据并放到缓冲区(数据 表)TBL。 接收缓冲区TBL的格式如 表5.8所示。 返回本节 应用实例---例3-41 以自由口通信方式向个人计算机不断地发送 “S7-200”六个ASCII码。 编程思路: 建立通信协议-----设置SM30或SM130 建立发送数据表 编写发送指令(一秒钟发送一次) 程序如下 //初始化自由口 选9600bit/s,8为数据,无奇偶校验 //建发送数据表---将s7字符送表地址VW100 //将-2字符送表地址VW102 //将00字符送表地址VW104 //数据表长度送VB99 //发送指令 例3-42 个人计算机和PLC之间接受和发送信息。 编程思路:用接收完成中断,发送完成中断 实现接受和发送。 接收完成中断 主程序建立通信协议 建立数据表 引发定时中断 建立接收完成中断事件连接 建立发送完成中断事件连接 开中断 设有三个中断程序:接收完成中断,定时中断, 发送完成中断 通信协议设置SMB30 0 0 0 0 1 0 0 1 接收信息控制字节SMB87 EN接收允许1 SC是否用SM88检测起始信息0 EC是否用SM89检测结束信息1 IL是否用SM90检测空闲状态1 C/M定时器定时性质0 TMR是否用SM92的值终止接收0 BK是否用中断条件检测起始信息0 SM86见p124 应用实例 1. 控制要求 本程序实现的功能是,一台CPU 224作为本地PLC, 用另一台CPU 224作为远程PLC,本地PLC接收来自远 程PLC的20个字符,接收完成后,信息又发回对方。 要求有一外部脉冲控制接收任务的开始,并且任务完 成后用显示灯显示。 2. 参数设置 自由口通信模式。 通信协议为:波特率9600,无奇偶校验,每字符8位。 接收和发送用同一缓冲区,首地址为VB100。 不设立超时时间。 3. 程序 主程序如右图5.19所示。实现的功能 是初始化通信口及缓冲区,建立中断 联系,并开放全局中断。中断程序 INT_0,启动发送指令。如图5.20所 示。 LD SM0.1 // //初次扫描 MOVB 9, SMB30 // //初始化自由口 ATCH INT_1, 9 // //发送完成时 //连接到中断 //程序 INT_1 ENI // //全局开中断 LD I0.1 EU //外部脉冲 //上跳沿 RCV VB100, 0 // //发送指令 //缓冲区 VB100 //通信端口 0 图 5 19 . MOVB //波特率 9600 INT_0, 23 // //8 位数据,无校验 //接收完成时 20, VB100 // //连接到中断 //传送字节数 20 //程序 INT_0 //装入缓冲区首址 // ATCH 自 由 口 通 信 例 ( 主 程 序 ) LD SM0.0 // //运行时有效 XMT VB100, 0 // // 发送指令 //缓冲区 VB100 //通信端口 0 图5.20 自由口通信例(中断0程序) 中断程序INT_1,发结束时输出。如图8.21所示。 LD SM0.0 // //运行时有效 = Q1.0 // //发送完成, //经 Q1.0 显示 图5.21 自由口通信例(中断程序1) 返回本节 5.2.4 高速计数 高速计数器HSC---High-speed counter 1. 高速计数器介绍 2. 高速计数指令 3. 高速计数器的使用方法 4. 应用实例 1. 高速计数器介绍 普通计数器是按照顺序扫描的方式进行工作, 每个扫描周期中,对计数脉冲值进行一次累加, 当输入脉冲的频率比PLC扫描频率高时,则不能 准确计数。可用高速计数器。 高速计数器最大计数频率可达20kHz,主要用于 电机转速的检测,距离检测等。 (1)数量及编号 高速计数器在程序中使用时的地址编号用HCn 来表示(在非程序中有时用HSCn),HC表示编 程元件名称为高速计数器,n为编号。 HCn除了表示高速计数器的编号之外,还代 表两方面的含义:高速计数器位和高速计数 器当前值(字)。编程时,从所用的指令可 以看出是位还是当前值(字) 。 不同型号的PLC主机,高速计数器的数量对 应如表5.7所示。 (2)中断事件类型 高速计数器的计数和动作可采用中断方式进 行控制。各种型号的PLC可用的高速计数器 的中断事件大致分为3类: 当前值等于预设值中断 输入方向改变中断 外部复位中断。 所有高速计数器都支持当前值等于预设值中 断。 每个高速计数器的3种中断的优先级由高到低, 不同高速计数器之间的优先级又按编号顺序 由高到低。具体对应关系如表5.8所示。 高速计数器的中断的优先级 (3)工作模式 高速计数器的工作模式共有12种。6个计数 器功能不完全一样。 可通过编程,使用定义高速计数器指令 HDEF来选定工作模式。 可分为四类:-----以HSC0为例 带内部方向控制的单相计数器(一个输入I0.0端 或加,或减)-----设置SM37.3(0减计数,1加计数) 带外部方向控制的单相计数器(两个输入,一个 I0.0计数输入,一个方向控制I0.1—0减;1加) 带增减计数器的双向计数器(两个计数输入端, 一增I0.0一减I0.1) 正交计数器两个时钟输入端A相I0.0 ,B相I0.1相 差900(A相超前B相90顺时针转动---增计数, A 相滞后B相90逆时针转动---减计数) (4)输入端连接 •选用某个高速计数器在某种工作模式下工作, 高速计数器的输入端不是任意选择,必须按系 统指定的专用输入点。如表5.9所示。 上述输入点在不使用高速计数器时,可作为一般的数字量输入点 2. 高速计数指令 0 4 高 速 计 数 器 指 令 有 两 条 : HDEF 和 HSC。 (1)HDEF指令 HDEF,定义高速计数器指令。使能 输入有效时,为指定的高速计数器 选定一种工作模式。 梯形图指令盒中有两个数据输入端: HSC,高速计数器编号,为0~5的常 数,字节型;MODE,工作模式,为 0~11的常数,字节型。 每个高速计数器在使用前,都要用 HDEF定义工作模式,并且只能定义 一次 4 (2)HSC指令 HSC,高速计数器指令。使能 输入有效时,根据高速计数器 特殊存储器位的状态,并按照 HDEF指令指定的工作模式, 使高速计数器设置生效并执行 计数操作。梯形图指令盒数据 输入端N:高速计数器编号, 为0~5的常数,字型。 3. 高速计数器的使用方法 每个高速计数器都有固定的特殊功能存 储器与之相配合,完成高速计数功能。 具体对应关系如表5.11所示。 反映工作状态见书表3-7 启动或关闭计数器,控制方向等 见书表3-8 状态字节 每个高速计数器都有一个状态字节,程 序运行时根据运行状况自动使某些位置 位,可以通过程序来读相关位的状态, 用以作为判断条件实现相应的操作。状 态字节中各状态位的功能如表5.12所示。 控制字节 •表5.13 控制位含义 高速计数器编程步骤: •如:对一高速脉冲信号进行增 减计数,计数当前值达到120 产生中断,计数方向由外部信 号控制(主机CPU224) 1选择计数器及工作模式 •(1)选HSC0模式3, I0.0 计数I0.1方向控制(书P135) 2设置控制字节 •(2)SMB37---F8 3执行HDEF指令 •(3)执行HDEF指令 4设定当前值和预设值 •(4)0—SMD38,120--SMD42 5设置中断事件并全局开中断 •(5)12---INT0 •(6)执行HSC指令 6执行HSC指令 4. 应用实例1 要对一高速事件精确控制,通过对脉冲信号 进行增计数,计数当前值达到24产生中断, 重新从0计数,对中断次数进行累计。计数方 向用一个外部信号控制,并能实现外部复位。 所用的主机型号为CPU221。 设计步骤: ①选择高速计数器HSC0,并确定工作方式4。 ②令SM37=16#F8 ③执行HDEF指令,输 入端HSC为0,MODE为4。④装入当前值, 令SMD38=0。⑤装入设定值,令 SMD42=24。⑥执行中断连接ATCH指令, 输入端INT为INT0,EVNT为12。 主程序、初始化子程序和中断程序分别 如图5.12、图5.13和图5.14所示。 LD SM0.1 //初次扫描脉冲 CALL SBR_1 //调用初始化 //子程序 SBR_1 // •图5.12 主程序 LD MOVB HDEF MOVD SM0.0 //运行脉冲 16#F8, SMB37 // //设置控制字节 // // // 0, 4 //定义高速 //计数器 //选用 HSC0 //工作模式 4 +0, SMD38 // //当前值清 0 // MOVD +24, SMD42 // //将预设值 24 //入装 SMD42 // ATCH 12 ENI HSC INT_0, 10 // //中断连接指令 //中断程序为 //INT_0 //事件号为 12 //开全局中断 •图5.13 // 0 //编程计数 //器 HSC0 //使设置生效 初始化子程序 LD INCD MOVD MOVB HSC •图5.14 中断程序 SM0.0 //运行 //脉冲 VD100 // //双字增指令 //对中断次数 //进行累计 //存于 VD100 +0, SMD38 // //将 HSC0 当 //前值清 0 // 16#C8, SMB37 //重设控制字 //节 SMB37 //不重装设 //定值 0 //编程 HSC0 //使设置重新 //生效 返回本节 应用实例2 六层电梯平层信号产生。用高速计数器测距 离,了解轿厢当前位置和平层信号产生。 见附加程序。 5.2.5 高速脉冲输出 在需要对负载进行高精度控制时, 如对步进电机的控制,需要对步进 电机提供一系列的脉冲,高速脉冲 输出指令就是为满足这种需求而开 发的。 1. 高速脉冲输出介绍 (1)输出端子的确定 (2)高速脉冲输出的形式 (3)相关寄存器 (4)脉冲输出指令 (1)输出端子的确定 S7-200只有输出继电器Q0.0和Q0.1具有高速 脉冲输出功能。 不用高速脉冲时,作普通的数字量输出点用。 (2)高速脉冲输出的形式 高速脉冲输出有两种的形式: 高速脉冲序列(或称高速脉冲串)输出PTO 脉冲宽度调制输出PWM 可通过特殊继电器来定义输出的形式。 (3)相关的寄存器 每个高速脉冲发生器对应一定数量特殊标志 寄存器,这些寄存器包括控制字节寄存器、 状态字节寄存器和参数数值寄存器,用以控 制高速脉冲的输出形式、反映输出状态和参 数值。各寄存器分配如表5.14所示。 状态字节 每个高速脉冲输出都有一个状态字节 (SMB66或SMB76 ),程序运行时根据运行 状况自动使某些位置位,可以通过程序来读 相关位的状态,用以作为判断条件实现相应 的操作。状态字节中各状态位的功能如表 5.15所示。 控制字节 每个高速脉冲输出都对应一个控制字节,通 过对控制字节中指定位的编程,可以根据操 作要求设置字节中各控制位,如脉冲输出允 许、PTO/PWM模式选择、单段/多段选择、 更新方式、时间基准、允许更新等。控制字 节中各控制位的功能如表5.16所示。 脉冲输出指令 PLS指令 功能:EN有效,检测各相关寄存器的状态, 激活由控制字节定义的高速脉冲输出操作。 Q取0或1对应Q0.0和Q0.1 PLS EN 0 Q ENO 2. 高速脉冲串输出PTO (1)周期和脉冲数 (2)PTO的种类 (3)中断事件类型 (4)PTO的使用 (1)周期和脉冲数 SM67.3 周期:单位可以是微秒μs或毫秒ms;为16位 无符号数据,周期变化范围是50~65535μs或 2~65535ms,通常应设定周期值为偶数,若 设置为奇数,则会引起输出波形占空比的轻 微失真。如果编程时设定周期单位小于2,系 统默认按2进行设置。 脉冲数:用双字长无符号数表示,脉冲数取 值范围是1~4294967295之间。如果编程时指 定脉冲数为0,则系统默认脉冲数为1个。 (2)PTO的种类 PTO方式中,如果要输出多个脉冲串,允许脉冲串 进行排队,形成管线,当前输出的脉冲串完成之后, 立即输出新脉冲串,这保证了脉冲串顺序输出的连 续性。 根据管线的实现方式分: 单段管线---管线中只能存放一个脉冲串的控制参数 (入口地址)。在当前脉冲串输出期间,要对下一 个脉冲串的相关寄存器进行更新。当前脉冲串输出 完成,即可开始输出新脉冲串。 多段管线---输出多个脉冲串。需要在变量存储区建 包络表,在包络表中存储各脉冲串的参数 ,当执行 PLS指令时,CPU自动按顺序从包络表中调出各个脉 冲串的入口地址,连续输出各个脉冲串。 多管线PTO 包络表由包络段数和各段构成。每段长度为8 个字节,包括:脉冲周期值(16位)、周期 增量值(16位)和脉冲计数值(32位)。以 包络3段的包络表为例,包络表的结构如表 5.17所示。 (3)中断事件类型 高速脉冲串输出可以采用中断方式进行控制, 各种型号的PLC可用的高速脉冲串输出的中断 事件有两个,如表5.18所示。 (4)PTO的使用----编程要点 1. 2. 3. 4. 5. 6. 使用高速脉冲串输出时,要按以下步骤进行: 确定脉冲串的输出端及管线的实现方式(单段 多段) 设置控制字节---将控制字写入SMB67或SMB77 写入周期值、周期增量值和脉冲数 周期增量值= (Tn+1-Tn)/N 其中:Tn-------该段开始的周期时间 Tn+1------该段结束的周期时间 N------该段脉冲数 装入包络的首地址 设置中断事件并全局开中断 执行PLS指令 3. 应用实例 频率(KHz) B A 2 C 10 D 时间 (1)控制要求 步进电机转动过程中,要从A点加速到B点后恒速 运行,又从C点开始减速到D点,完成这一过程时 用指示灯显示。电机的转动受脉冲控制,A点和D 点的脉冲频率为2kHz,B点和C点的频率为10kHz, 加速过程的脉冲数为400个,恒速转动的脉冲数 为4000个,减速过程脉冲数为200个。 工作过程如图5.15所示。 4000个 脉冲 频率(KHz) 400个 脉冲 10 B A 200个 脉冲 C D 2 时间 •图5.15 步进电机工作过程 (2)分析 1用Q0.0,多管线方式—3段 确定脉冲发生器及工作模 (AB段、BC段、 CD段 ) 式 2确定周期值的时基单位, 设置控制字节 BC段频率最大10KHZ,对应 的周期值为100us,时基单位 写入周期值、周期增量值 为us,所以SMB67---16#A0 和脉冲数 3确定初始周期,周期增量 装入包络表首地址 •初始周期:求每段的频率 的倒数可得AB段500us,BC段 中断调用 100us,CD段100us 执行PLS指令 •周期增量= (Tn+1-Tn)/N ,AB 段-1,BC段0,CD段2 √ 4设包络表首地址VB400建立 √ 包络表。 包络表 (3)程序实现 本控制系统主程序如下图5.16所示。初始化 子程序SBR_1如图5.17所示。包络表子程序 如图5.18所示。中断程序如图5.19所示。 LD SM0.1 //初次扫描 R Q0.0, 1 //复位高速 //脉冲,使初值 //为低电位 CALL SBR_1 //调用初始 //化子程序 SBR_1 •图5.16 主程序 LD SM0.0 //运行脉冲 MOVB 16#A0, SMB67 //设置控制字节 //多段 PTO //增量单位 us //允许 PTO MOVW +400, SMW168 //装入包络表的首地 // 址 CALL SBR_0 //调用子程程序 SBR_0 //建立包络表 ATCH INT_0, 19 ENI PLS //中断连接 //事件号 19 //开全局中断 0 •图5.17 //启动 PTO 脉冲 //由 Q0.0 输出 // 初始化子程序SBR_1 • LD SM0.0 // 运行脉冲 MOVB 3, VB400 // //定义开始字节 //为VB400 // 3装入段数 MOVW+500, VW401 // //第1段周期初 //值为500ms // // . 图 5 18 MOVW-1, VW403 // //第1段周期 //增量为- 1 MOVD +400, VD405 // //第1段脉冲数 //为400个 MOVW0, VW411 // //第2段周期 //增量为 0 MOVD +4000, VD413 // //第2段脉冲数 //为4000个 SBR_ MOVW+100, VW409 // //第2段周期初 //值为100ms // // 包 络 表 子 程 序 0 ( 1 ) MOVW +100, VW417 // //第 3 段周期初 //值为 100ms // // MOVW +2, VW419 // //第 3 段周期 //增量为+2ms MOVD +200, VD421 // //第 3 段脉冲数 //为 200 个 •图5.18 包络表子程序SBR_0(2) LD SM0.0 //运行脉冲 = Q0.6 //脉冲串全部输出 //完成后将 Q0.6 置 1 •图5.19 中断程序 4. 宽度可调脉冲输出PWM 从Q0.0或Q0.1输出周期固定,脉冲宽度变化的 脉冲信号 (1)周期和脉冲宽度 周期同PTO。脉冲宽度为16为无符号数,脉冲 宽度增量单位为us或ms。范围0~65535,占空 比为0~100%。当脉冲宽度大于或等于周期时 输出将连续接通。为0时,输出一直被关断。 (2)更新方式 根据在改变脉冲宽度时是否需要改变时间基准, 可分为同步更新和异步更新。 返回本节 同步更新:脉宽的改变和PWM脉冲的新周期同步 发生。适用于不需要改变时间基准的情况,常用 中断实现。 异步更新:需要改变时间基准时使用。异步更新 可能会导致PWM功能暂时失效,造成被控装置的 振动。 (3)PWM的使用---编程要点 确定高速PWM的输出端(Q0.0或 Q0.1) 初始化设置 设置控制字节---将控制字写入SMB67 或SMB77 写入周期值SMW68(78)、 写入脉冲宽度值SMW70(80) 执行PLS指令 应用举例-- (书例3-46 ) 将Q0.1设置为PWM输出形式,脉冲周期固定 为10s,初始脉冲宽度1000ms,当M0.0上升 沿有效脉冲宽度改为5000ms。 //控制字节设置,允许PWM,选择PWM单段操 作,同步更新,时基1ms脉冲数不更新,脉冲 宽度更新,周期更新 //设置周期10s, 设置脉冲宽度1000 执行PLS,Q0.1输出PWM 重装控制字节,设为禁止更新周期后可更新脉 冲宽度 //新脉冲宽度设为 5000ms //执行PLS 5.2.6 PID回路指令 在过程控制中经常涉及到模拟量的控制,构 成闭环控制系统。而对模拟量的处理,除 对模拟量的采样检测外,还要对采样值进 行PID运算。根据运算结果形成对模拟量 的控制作用。 1. PID算法 2. PID指令 3. 应用实例 1. PID算法 1. PID算法 如果一个PID回路的输出M(t)是时间的函数, 则可以看作是比例项、积分项和微分项三部 分之和。即: t de M t K c e K c 0edt M 0 K c dt •其中:Kc为回路增益,M0为回路输出的初始值 •变成数字离散形式 M n K C en K I ei M 0 K D en en1 n i 1 M n K C en K I ei M 0 K D en en1 n i 1 Mn----第n个采样时刻计算出来的回路控制输出值 en ----第n个采样时刻回路偏差 en -1 ----第n-1个采样时刻回路偏差 KC ----回路增益 KI ----积分项的比例系数 KD ----微分项的比例系数 M0 ----初始值 M n MPn MI n MDn 上式可表示为 M n MPn MI n MDn Mn----第n个采样时刻PID计算值 MPn ----第n个采样时刻比例项值 MIn ----第n个采样时刻积分项值 MDn ----第n个采样时刻微分项值 MPn KC (SPn PVn ) MI n KCTs / TI (SPn PVn ) MX TS为采样周期 TI为积分时间常数 TD为微分时间常数 SPn第n个采样时刻的给 定值 VPn第n个采样时刻过程 变量值 MDn KCTD / TS ( PVn1 PVn ) MX第n-1个采样时刻积分 项的值 TS M n K C SPn PVn K C SPn PVn TI TD MX K C PVn1 PVn TS 采样后的过程变量与给定值的偏差, 经上式PID运算出控制量。 上式共包含9个参数,在执行PID指令前 要建立一个PID参数表----初始化处理。 PID参数表格式 地址偏 移量 PID参数 数据格式 I/O类型 0 PVn 双字、实数 I 4 SPn I 给定值,0.0~1.0 8 Mn I/O 输出值,0.0~1.0 12 KC I 回路增益,正负长值 16 TS I 采样周期,单位s,正数 20 TI I 积分时间常数,单位min,正数 24 TD I 微分时间常数,单位min,正数 28 MX I/O 积分项前值,0.0~1.0 32 PVn-1 I/O 最近一次PID运算的过程变量 描述 过程变量的当前值,0.0~1.0 回路表初始化 程序实例: 如果给定值为 0.5,Kc为0.4, Ts 为 0.2 秒 , Ti 为 30 分 钟 , Td 为 15 分 钟 , 则 可以建立一个 子 程 序 SBR0 用 来对回路表进 行初始化。表 首 地 址 VD200 程 序 如 图 5.20 所示。 LD SM0.0//运行脉冲 MOVR0.5, VD204 // //开始位置 //为VD200 //在VD204 装 //入设定值 MOVR0.4, VD212 // //装入回路增益 //值为 0.4 // // MOVR0.2, VD216 // //装入采样时间 //为0.2秒 MOVR30.0, VD220 // //装入积分时间 //为30分钟 // MOVR15.0, VD224 // //装入微分时间 //为15分钟 •图5.20 回路表初始化子程序SBR0 2. PID指令 PID,PID回路指令。使能输入有效时, 该指令利用回路表中的输入信息和组态 信息,进行PID运算。梯形图的指令盒 中有2个数据输入端:TBL,回路表的起 始地址,是由VB指定的字节型数据; LOOP,回路号,是0~7的常数。 指令影响的特殊标志存储器位:SM1.1 (溢出)。 使 能 流 输 出 ENO 断 开 的 出 错 条 件 : SM1.1(溢出);SM4.3(运行时间); 0006(间接寻址)。 指令格式:PID TBL, LOOP PID的组合选择 在很多控制场合,往往只需要PID中的1种或 2种运算,如:PI、PD控制等。不同运算功 能的组合选择可通过设定不同的参数来实现。 不需要积分运算-----TI=无穷大 不需要微分运算-----TD=0 不需要比例运算-----KC=0(积分和微分项KC=1) 输入模拟量的转换及标准化 用PID指令通常要将过程变量和给定的实际值标准 化为0.0~1.0的相对值格式。转换公式: RNorm RRaw S pan Offset RNorm工程实际值的标准化值 RRaw工程实际值的实数形式值 Span最大允许值减去最小值,取32000(单极性) 或64000 (双极性) Offset取0(单极性)或0.5 (双极性) 输出模拟量转换为工程实际值 输出产生的控制作用是0.0~1.0标准化值,需 要转换成工程实际值。 Rscal M n Offset S pan Rscal工程标定的过程变量的实数格式 PID控制方式 S7-200没有内装自动控制和手动控制方式 当PID指令使能有效就可以执行PID运算---自动控 制方式 当PID指令使能无效就不执行PID运算---手动控制 方式 3. 应用实例 (1)控制要求 一水箱有一条进水管和一条出水管,出水管的水流 量随时间不断变化,要求控制进水管阀门的开度, 使水箱内的液位始终保持在水满时液位的75%。系 统使用比例积分控制,假设采用下列控制参数值: Kc为0.25,Ts为0.1秒,Ti为30分钟,Td为0分钟。 (2)分析 本系统标准化时可采用单极性方案,系统的输入来 自液位计的液位测量采样;设定值是液位的75%, 输出是单极性模拟量用以控制阀门的开度,可以在 0%~100%之间变化。 (3)程序实现 本程序的主程序如图5.21所示,回路表初始化子程 序SBR0如图5.22所示,中断程序INT0如图5.23所 示。 //参数表给定值0.75 回路增益 采样周期 积分时间常数 微分时间常数 定时中断0---0.1 //过程变量的标准化 转换 //整形变双整形 //双整形变实形 除以基准值 送PID参数表首地址 中断程序INT-0 练习 设计一个温度调节系统,温度调节范围 0~100度。现根据实际需要,控制温度在80 度,采用PID控制。假定控制参数值为:Ts 为0.5min,Kc为0.65,Ti为5min,Td为 1min。