1,算术平均滤波法A、方法:连续取N个采样值进行算术平均运算N值较大时:信号平滑度较高,但灵敏度较低N值较小时:信号平滑度较低,但灵敏度较高N值的选取:一般流量,N=12;压力:N=4B、优点:适用于对一般具有随机干扰的信号进行滤波这样信号的特点是有一个平均值,信号在某一数值范围附近上下波动C、缺点:对于速度较慢或要求数据计算速度较快的实时控制不适用比较浪费
2,中位值滤波法A、方法:连续采样N次(N取奇数)把N次采样值按大小排列取中间值为本次有效值B、优点:能有效克服因偶然因素引起的波动干扰对温度、液位的变化缓慢的被测参数有良好的滤波效果C、缺点:对流量、速度等快速变化的参数不宜
3,限幅滤波法(又称程序判断滤波法)A、方法:根据经验判断,确定两次采样允许的最大偏差值(设为A)每次检测到新值时判断:如果本次值与上次值之差《=A,则本次值有效如果本次值与上次值之差》A,则本次值无效,放弃本次值,用上次值代替本次值B、优点:能有效克服因偶然因素引起的脉冲干扰C、缺点无法抑制那种周期性的干扰平滑度差
4,中位值平均滤波法(又称防脉冲干扰平均滤波法)A、方法:相当于“中位值滤波法”+“算术平均滤波法”连续采样N个数据,去掉一个最大值和一个最小值然后计算N-2个数据的算术平均值N值的选取:3~14B、优点:融合了两种滤波法的优点对于偶然出现的脉冲性干扰,可消除由于脉冲干扰所引起的采样值偏差C、缺点:测量速度较慢,和算术平均滤波法一样比较浪费RAM
5,递推平均滤波法(又称滑动平均滤波法)A、方法:把连续取N个采样值看成一个队列队列的长度固定为N每次采样到一个新数据放入队尾,并扔掉原来队首的一次数据。(先进先出原则)把队列中的N个数据进行算术平均运算,就可获得新的滤波结果N值的选取:流量,N=12;压力:N=4;液面,N=4~12;温度,N=1~4B、优点:对周期性干扰有良好的抑制作用,平滑度高适用于高频振荡的系统C、缺点:灵敏度低对偶然出现的脉冲性干扰的抑制作用较差不易消除由于脉冲干扰所引起的采样值偏差不适用于脉冲干扰比较严重的场合比较浪费RAM
6,限幅平均滤波法A、方法:相当于“限幅滤波法”+“递推平均滤波法”每次采样到的新数据先进行限幅处理,再送入队列进行递推平均滤波处理B、优点:融合了两种滤波法的优点对于偶然出现的脉冲性干扰,可消除由于脉冲干扰所引起的采样值偏差C、缺点:比较浪费RAM
7,加权递推平均滤波法A、方法:是对递推平均滤波法的改进,即不同时刻的数据加以不同的权通常是,越接近现时刻的数据,权取得越大。给予新采样值的权系数越大,则灵敏度越高,但信号平滑度越低B、优点:适用于有较大纯滞后时间常数的对象和采样周期较短的系统C、缺点:对于纯滞后时间常数较小,采样周期较长,变化缓慢的信号不能迅速反应系统当前所受干扰的严重程度,滤波效果差
8,一阶滞后滤波法A、方法:取a=0~1本次滤波结果=(1-a)*本次采样值+a*上次滤波结果B、优点:对周期性干扰具有良好的抑制作用适用于波动频率较高的场合C、缺点:相位滞后,灵敏度低滞后程度取决于a值大小不能消除滤波频率高于采样频率的1/2的干扰信号
9,消抖滤波法A、方法:设置一个滤波计数器将每次采样值与当前有效值比较:如果采样值=当前有效值,则计数器清零如果采样值《》当前有效值,则计数器+1,并判断计数器是否》=上限N(溢出)如果计数器溢出,则将本次值替换当前有效值,并清计数器B、优点:对于变化缓慢的被测参数有较好的滤波效果,可避免在临界值附近控制器的反复开/关跳动或上数值抖动C、缺点:对于快速变化的参数不宜如果在计数器溢出的那一次采样到的值恰好是干扰值,则会将干扰值当作有效值导入系统
10,限幅消抖滤波法A、方法:相当于“限幅滤波法”+“消抖滤波法”先限幅,后消抖B、优点:继承了“限幅”和“消抖”的优点改进了“消抖滤波法”中的某些缺陷,避免将干扰值导入系统C、缺点:对于快速变化的参数不宜。
原文标题:干货 | PLC如何模拟输入滤波十种方法
文章出处:【微信号:gongkongworld,微信公众号:工控资料窝】欢迎添加关注!文章转载请注明出处。
伺服系统是重要的工业自动化执行机构,通过它,我们能够实现位移的变化,扭矩的变化,方向的变化。生产线里....
正运动技术专注于运动控制技术研究和通用运动控制软硬件产品的研发,是国家级高新技术企业。主要业务有:运....
作为一家研发生产PLC的公司,我们深知大家需要的是性价比比较高的设备。因此,我们的PLC采用了组合式....
在工业自动化领域,PLC和工控机是人们不得不提的两类控制设备,它们是大多数自动化系统的基础设备。PL....
现场总线技术是工业自动化最深刻变革之一。PLC和工控机采用现场总线后可方便地作为I/O站和监控站连接....
《LM 小型可编程控制器指令手册》是和利时公司对其 LM 系列 PLC 包含的所有指令详细 介绍的技....
第1章从硬件体系结构、编程软件、快速应用等各个方面对LM小型PLC作了概述性介绍。 第2、3章主要针....
LM 小型可编程控制器(PLC)是和利时公司推出的新一代小型一体化 PLC,其中包括 多种 CPU....
CX-One是一一个集成的支持软件包,其中包含适用于网络、PT、伺服驱动器、变频器和温度控制器的安装....
近日FPGA领域的顶会FCCM(第30届IEEE现场可编程门阵列定制计算机国际研讨会——The 30....
你知道电池自动点焊机的六大优势吗?相信很多有采购需求的朋友对此颇有兴趣,今天深圳市斯特科技有限公司给....
说完了数字量IO再说模拟量IO。模拟量的采集型IO有采集电压信号的,有采集电流信号的,还有采集温度信....
编写本书的目的就是使读者尽快掌握PLC应用系统的设计方法,并能动手进行实际开发。书中内容由浅入深,从....
PLC也叫可编程逻辑控制器,相当于一台工业生产专用的电脑。既然叫可编程逻辑控制器,那它肯定是可以根....
所以在循环程序处理过程中,CPU的过程信号映象是一致的。CPU并不直接访问I/O 模板上的输入(I ....
PLC程序源码——上海光明三得利啤酒灌装机图纸和程序(三菱)
备煤车间主要承担全厂动力煤的输入、破碎、存储、混匀工作。斗轮机作为对散料连续堆取作业的高效装卸机械,....
PLC也称可编程逻辑控制器,在各个自动化控制项目里,我们都能够见到PLC的身影。不过,从PLC的市场....
三菱PLC(可编程逻辑控制器)编程实例项目例程:一个三台发电机两用一备的PLC程序
三菱PLC(可编程逻辑控制器)编程实例项目例程,注塑机改造的程序(含触摸屏有注释)
三菱PLC(可编程逻辑控制器)编程实例项目例程,自动料带长度测量1113A控制变频器多段速和用接近开....
三菱PLC(可编程逻辑控制器)编程实例项目例程,制冷控制系统梯形图(日本人编的,有英文注释,三菱FX....
三菱PLC(可编程逻辑控制器)编程实例项目例程,饮水机生产线PLC程序《带注释》
本文主要介绍炼焦区装煤车与煤塔之间PLC远距离无线通讯技改。
有没有工业电力方面的板子?是自研plc
本论文根据中国城市小区的供水要求,设计了一套基于PLC的恒压供水控制系统。恒压供水系统由可编程控制器....
modbus是一种总线高层协议,它可以被应用于以太网总线以及串口总线上,分别叫做modbus TCP....
摘要:锅炉是工业中普遍的动力设备,其控制系统的可靠性直接影响了锅炉的安全和经济运行。在实际工作中,锅....
一、概述说明 针对低区供水泵房、高位水池设计一套泵房供水全自动智能监控系统,使管理人员可以通过手机安....
污水处理FX2NPLC程序(有注解的)
自动化输送线对现代化物流仓储有什么影响? 随着现代物流仓储行业高速化和高度自动化发展的需要,全自动智....
对于一台可编程逻辑控制器来说,IO履行了数据采集以及指令输出的职责,一台PLC到底能够实现怎样的控....
备煤车间主要承担全厂动力煤的输入、破碎、存储、混匀工作。斗轮机作为对散料连续堆取作业的高效装卸机械,....
本手册阐述了用户安装、编辑、故障诊断和故障排除、日常维护等相关事宜。为了 保证能正确操作此系列文本....
PLC源代码_ 三万多步马扎克系统三菱梯形图程序英文注释(日本人写)
西门子STEP7教材资料分享,有各种PLC资料,从别处下载的,保存至今,欢迎交流学习
指令列表基本上是 PLC 的汇编代码。它使用简化的指令集,但具有熟悉的命令,如加载、存储和跳转。虽然....
罗克韦尔PLC技术资料 AB PLC手册资料免费下载。
装盒机PLC源码程序,包括CAD装配图等完整的文件工程。
三菱PLC(可编程逻辑控制器)编程实例项目例程-自动模切机PLC程序(FX系列)
三菱PLC(可编程逻辑控制器)编程实例项目例程——新印刷机PLC程序
PLC 必须处理三种主要类型的值:布尔值、整数和浮点数。这些最后的浮点值会给程序员和技术人员带来最大....
还在以为单片机外围器件很难吗,选择开发板很重要 学习其的外围器件都不会特别的困难,所以刚开始最难的就....
本文讨论了CNC和PLC之间的各种硬件差异。目的不是断言不可能在控制器之间进行转换,而是解释为了使机....
电机控制板上面包括主控芯片,pwm输出电路,滤波电路,加密芯片等部分,电机驱动板部分包括逆变器部分(....
大多数控制系统入门级培训包括可编程逻辑控制器 (PLC) —梯形图编程、接线输入和输出,以及标签数据....
有朋友会看梯形图,画plc自动门组态王动画仿真吗?有的请联系...
从工业物联网 (IIoT) 到网络基础设施设备,下一代电子系统正在注入新的智能,在不断缩小的空间中需要更多的功率,而不会影响热...
plc和两个单片机通过485通讯,接线方式不对,现在单片机通讯口的灯灭了,不知道是不是烧坏了?后面改成正确接线,换上新的单片机...
PLC在和第三方采集器通信时,会出现接收的数据顺序和发送方数据存在高低位颠倒的情况,这是怎么回事呢?怎样去解决?...
各位大佬,我想建立一个数组变量来读倍福PLC中类型为ARRAR[0..10] of Dint的数组,在OPC里添加变量的时候,怎么照着...
数据处理、运算指令及应用
数据传送、字节交换、字节立即读写、移位、转换指令的介绍、应用及实训算术运算、逻辑运算、递增/递减指令的介绍、应用及实训
表的定义、填表指令、表取数指令、填充指令、表查找指令的介绍
1.字节、字、双字、实数单个数据传送指令 MOV
数据传送指令 MOV,用来传送单个的字节、字、双字、实数。指令格式及功能如表 5-1所示。
表5-1单个数据传送指令 MOV指令格式
字节 字、整数 双字、双整数 实数
功能 使能输入有效时,即 EN=1时,将一个输入 IN的字节、字/整数、双字/双整数或实数送到 OUT指定的
存储器输出。在传送过程中不改变数据的大小。传送后,输入存储器 IN中的内容不变
0006(间接寻址错误)。
【例5-1】将变量存储器 VW10中内容送到 VW100中。程序如图 5-1所示。
2.字节、字、双字、实数数据块传送指令 BLKMOV
数据块传送指令将从输入地址 IN开始的N个数据传送到输出地址 OUT开始的N个单元中,N的范
围为1至255,N的数据类型为:字节。指令格式及功能如表 5-2所示。
常量;数据类型:字节;数据范围:1-255
使能输入有效时,即EN=1时,把从输入IN开始的N个字节(字、双字)传送到以输出OUT
开始的N个字节(字、双字)中
0的错误条件:0006(间接寻址错误)
0091(操作数超出范围)。
【例5-2】程序举例:将变量存储器VB20开
VB23)中的数据,移至
VB100开始的4个字节中
程序执行后,将VB20~VB23中的
5.1.2 字节交换、字节立即读写指令
字节交换指令用来交换输入字 IN的最高位字节和最低位字节。指令格式如表 5-3所示。
表5-3 字节交换指令使用格式及功能
功能:使能输入 EN有效时,将输入字 IN
的高字节与低字节交换,结果仍放在 IN中
LW,AC。数据类型:字
ENO=0的错误条件: 0006(间接寻址错误),SM4.3(运行时间)
【例5-3】字节交换指令应用举例。如图 5-3所示。
指令执行之前 VW50中的字为:D6C3
指令执行之后 VW50中的字为:C3D6
字节立即读指令(MOV-BIR)读取实际输入端
IN给出的1个字节的数值,并将结果写入
的存储单元,但输入映像寄存器未更新。
IN所指定的存储单元中读取
1个字节的数值并写入(以字节为单位)实际输
出OUT端的物理输出点,同时刷新对应的输出映像寄存器。指令格式及功能如表
表5-4字节立即读写指令格式
使ENO=0的错误条件:0006(间接寻址错误),SM4.3(运行时间)。注意:字节立即读写指令无法存取扩展模块。
5.1.3 移位指令及应用举例
移位指令分为左、右移位和循环左、右移位及寄存器移位指令三大类。前两类移位指令按移位数据的
长度又分字节型、字型、双字型 3种。
左、右移位数据存储单元与 SM1.1(溢出)端相连,移出位被放到特殊标志存储器 SM1.1位。移位数
据存储单元的另一端补 0。移位指令格式见表 5-5。
(1)左移位指令( SHL)
使能输入有效时,将输入 IN的无符号数字节、字或双字中的各位向左移 N位后(右端补 0),将结果
输出到OUT所指定的存储单元中, 如果移位次数大于 0,最后一次移出位保存在 “溢出”存储器位 SM1.1。
如果移位结果为 0,零标志位 SM1.0置1。
使能输入有效时,将输入 IN的无符号数字节、字或双字中的各位向右移 N位后,将结果输出到 OUT
所指定的存储单元中, 移出位补 0,最后一移出位保存在 SM1.1。如果移位结果为 0,零标志位 SM1.0置1。
(3)使ENO=0的错误条件: 0006(间接寻址错误),SM4.3(运行时间)
常量;数据类型:字节;数据范围:
N位;SHR:字节、字、双字右移N位
SHL:字节、字、双字左移
的数据送入 OUT所指定的存储单元。如:
循环移位将移位数据存储单元的首尾相连, 同时又与溢出标志 SM1.1连接,SM1.1用来存放被移出的
位。指令格式见表 5-6。
(1)循环左移位指令( ROL)
使能输入有效时,将 IN输入无符号数(字节、字或双字)循环左移 N位后,将结果输出到 OUT所指
定的存储单元中,移出的最后一位的数值送溢出标志位 SM1.1。当需要移位的数值是零时, 零标志位 SM1.0
(2)循环右移位指令( ROR)
使能输入有效时,将 IN输入无符号数(字节、字或双字)循环右移 N位后,将结果输出到 OUT所指
定的存储单元中,移出的最后一位的数值送溢出标志位 SM1.1。当需要移位的数值是零时, 零标志位 SM1.0
3)移位次数N≥数据类型(B、W、D)时的移位位数的处理
如果操作数是字节,当移位次数 N≥8时,则在执行循环移位前,先对 N进行模8操作(N除以8后
取余数),其结果 0-7为实际移动位数。
如果操作数是字,当移位次数 N≥16时,则在执行循环移位前,先对 N进行模16操作(N除以16后
取余数),其结果 0-15为实际移动位数。
如果操作数是双字,当移位次数 N≥32时,则在执行循环移位前,先对 N进行模32操作(N除以32
后取余数),其结果 0-31为实际移动位数。
4)使ENO=0的错误条件:0006(间接寻址错误),SM4.3(运行时间)。
表5-6循环左、右移位指令格式及功能
常量;数据类型:字节。
ROL:字节、字、双字循环左移
N位;ROR:字节、字、双字循环右移
说明:在STL指令中,若IN和OUT指定
的存储器不同,则须首先使用数据传送指令
MOV将IN中的数据送入
OUT所指定的存储单元。如:
【例5-4】程序应用举例,将
AC0中的字循环右移2位,将
VW200中的字左移3位。程序及运行结果如
【例5-5】用I0.0控制接在Q0.0~Q0.7上的8个彩灯循环移位, 从左到右以 0.5s的速度依次点亮, 保
持任意时刻只有一个指示灯亮,到达最右端后,再从左到右依次点亮。
分析:8个彩灯循环移位控制,可以用字节的循环移位指令。根据控制要求,首先应置彩灯的初始状
态为QB0=1,即左边第一盏灯亮;接着灯从左到右以 0.5s的速度依次点亮,即要求字节 QB0中的“1”用
循环左移位指令每 0.5s移动一位,因此须在 ROL-B指令的EN端接一个 0.5s的移位脉冲(可用定时器指
令实现)。梯形图程序和语句表程序如图 5-5所示。
3.移位寄存器指令(SHRB)
移位寄存器指令是可以指定移位寄存器的长度和移位方向的移位指令。其指令格式如图
说明:(1)移位寄存器指令SHRB将DATA数值移入移位寄存器。梯形图中,
接移位脉冲信号,每次使能有效时,整个移位寄存器移动
1位。DATA为数据输入端,连接移入移位寄存
器的二进制数值,执行指令时将该位的值移入寄存器。
S_BIT指定移位寄存器的最低位。
器的长度和移位方向,移位寄存器的最大长度为
64位,N为正值表示左移位,输入数据(
位寄存器的最低位(S_BIT),并移出移位寄存器的最高位。移出的数据被放置在溢出内存位(
N为负值表示右移位,输入数据移入移位寄存器的最高位中,并移出最低位(
S_BIT)。移出的数据被放置
在溢出内存位(SM1.1)中。
3)使ENO=0的错误条件:0006(间接地址),0091(操作数超出范围),0092(计数区错误)。
4)移位指令影响特殊内部标志位:SM1.1(为移出的位值设置溢出位)。
【例5-6】移位寄存器应用举例。程序及运行结果如图 5-7所示。
例5-6梯形图、语句表、时序图及运行结果
【例5-7】用PLC构成喷泉的控制。用灯 L1~L12分别代表喷泉的 12个喷水注。
(1)控制要求:按下起动按钮后,隔灯闪烁, L1亮0.5秒后灭,接着 L2亮0.5秒后灭, 接着
0.5秒后灭,接着 L4亮0.5秒后灭,接着 L5、L9亮0.5秒后灭,接着 L6、L10亮0.5秒后灭,接着
L11亮0.5秒后灭,接着 L8、L12亮0.5秒后灭,L1亮0.5秒后灭,如此循环下去,直至按下停止按钮。
?图5-8喷泉控制示意图
梯形图程序如图5-10所示。
分析:应用移位寄存器控制,根据喷泉模拟控制的 8位输出(Q0.0~Q0.7),须指定一个 8位的移位
寄存器(M10.1~M11.0),移位寄存器的 S-BIT位为M10.1,并且移位寄存器的每一位对应一个输出。如
移位寄存器的位与输出对应关系图
在移位寄存器指令中, EN连接移位脉冲,每来一个脉冲的上升沿,移位寄存器移动一位。移位寄存
0.5s移一位,因此需要设计一个 0.5s产生一个脉冲的脉冲发生器(由 T38构成)。
为数据输入端 DATA ,根据控制要求,每次只有一个输出,因此只需要在第一个移位脉冲到来
送入移位寄存器 S-BIT位(M10.1)一个“1”,第二个脉冲至第八
T38构成0.5s产生一个机器扫描周期脉冲的脉冲发生器
位的移位寄存器移位寄存器的每一位对应一个输出
例5-7喷泉模拟控制梯形图
个脉冲到来时由M10.0送入M10.1的值均为“0”,这在程序中由定时器T37延时0.5s导通一个扫描周期实现,第八个脉冲到来时M11.0置位为1,同时通过与T37并联的M11.0常开触点使M10.0置位为1,在第九个脉冲到来时由M10.0送入M10.1的值又为1,如此循环下去,直至按下停止按钮。按下常闭停止按钮(I0.1),其对应的常闭触点接通,触发复位指令,使M10.1~M11.0的8位全部复位。
转换指令是对操作数的类型进行转换,并输出到指定目标地址中去。转换指令包括数据的类型转换、数据的编码和译码指令以及字符串类型转换指令。
不同功能的指令对操作数要求不同。类型转换指令可将固定的一个数据用到不同类型要求的指令中,
包括字节与字整数之间的转换,整数与双整数的转换,双字整数与实数之间的转换,BCD码与整数之间的转换等。
字节与字整数之间的转换
字节型数据与字整数之间转换的指令格式见表
表5-7字节型数据与字整数之间转换指令
AC,常量,数据类型:整数
BTI指令将字节数值(
IN)转换成整数值,并将结果
ITB指令将字整数(IN)转换成字节,并将结果置
置入OUT指定的存储单元。因为字节不带符号,所以
入OUT指定的存储单元。输入的字整数
转换。超出部分导致溢出,SM1.1=1。输出不受影响
字整数与双字整数之间的转换
字整数与双字整数之间的转换格式、功能及说明,如表 5-8所示。
双整数与实数之间的转换
双整数与实数之间的转换的转换格式、功能及说明,如表5-9所示。
表5-8 字整数与双字整数之间的转换指令
DTI指令将双整数值(IN)转换成整数值,并将结
ITD指令将整数值(IN)转换成双整数值,并将结果
果置入OUT指定的存储单元。如果转换的数值过
置入OUT指定的存储单元。符号被扩展
大,则无法在输出中表示,产生溢出
表5-9 双字整数与实数之间的转换指令
DTR指令将32位带符号整数
ROUND指令按小数部分四舍五入的
TRUNC(截位取整)指令按将小数部
原则,将实数(IN)转换成双整数
转换成32位实数,并将结果置入
(IN)转换成32位双整数,并将结
果置入OUT指定存储单元
值得注意的是:不论是四舍五入取整, 还是截位取整,如果转换的实数数值过大, 无法在输出中表示,
则产生溢出,即影响溢出标志位,使 SM1.1=1,输出不受影响。
4.BCD码与整数的转换
BCD码与整数之间的转换的指令格式、功能及说明,如表 5-10所示。
BCD码与整数之间的转换的指令
BCD-I指令将二进制编码的十进制数
I-BCD指令将输入整数
IN转换成二进制编码的十进
OUT指定的存储单元。IN的有效范围
OUT指定的存储单元。IN的
有效范围是0至9999
注意:(1)数据长度为字的
BCD格式的有效范围为:0~9999(十进制),0000~9999(十六进制)
(2)指令影响特殊标志位
和STL指令中,IN和OUT的操作数地址相同。若
IN和OUT操作数地址不
是同一个存储器,对应的语句表指令为:
译码和编码指令的格式和功能如表
译码和编码指令的格式和功能
类型:字节 常量。数据类型: 字
译码指令根据输入字节( IN)的低
编码指令将输入字(IN)最低有效位(其值为
的位号,将输出字的相对应的位,
【例5-8】译码编码指令应用举例。如图
行译码指令,则将输出字
=2#0100,执行编码指令,则输出字节
VB50中的错误码为2。
abcdefg段分别对应于字节的第
0位~第6位,字节的某位为1时,其对应的段亮;输
出字节的某位为0时,其对应的段暗。将字节的第
7位补0,则构成与七段显示器相对应的
0~9、字母A~F与七段显示码的对应如图
SEG将输入字节16#0~F转换成七段显示码。指令格如表
表5-12七段显示译码指令
功能:将输入字节(IN)的低四位确定的
进制数(16#0~F),产生相应的七段显示码,
使ENO=0的错误条件:0006间接地址,SM4.3运行时间。
【例5-9】编写显示数字0的七段显示码的程序。程序实现如图
ASCII码与十六进制数之间的转换指令
ASCII码与十六进制数之间的转换指令指令格式和功能如表
表5-13ASCII码与十六进制数之间转换指令的格式和功能
常量。数据类型:字节。最
从输入字节(IN)开始的长度为
LEN的十六进制数转换成ASCII
转换成十六进制数,放入从OUT开
字符,放入从OUT开始的存储单
间接地址,SM4.3运行时间,0091
注意:合法的ASCII的十六制数包括
包含非法的ASCII,止操作,特殊内部志位
可将VB10~VB12中存放的3个ASCII33、45、41,成十六制数3E和Ax,放在VB20和VB21中,“x”表示VB21的“半字”即低四位的未改。
5.1.5天塔之光的模拟控制实训
1)掌握移位寄存器指令的用方法
2)用移位寄存器指令天塔之光控制系
3)掌握PLC的程技巧和程序的方法
如5-15所示的天塔的灯光,可以用 PLC控制灯光的耀移位
及序的化等。控制要求如下:按起按, L12→L11→L10→L8
L9→L12→L11→L10??循下去,直至按下停止按。
分析:根据灯光闪亮移位,分为
19步,因此可以指定一个
M11.7,M12.0~M12.3),移位寄存器的每一位对应一步。而对于输出,如: L1(Q0.0)分别在“5、6、7、
的常开触点并联后输出 Q0.0,以此类推其它的输出。参考程序如图 5-16所示。
图5-16天塔之光控制梯形图
图5-16天塔之光控制梯形图(续)
输入、调试程序并运行程序
如果控制要求改为L12→L11→L10→L8→L1→L2、L3、L4、L5→L6、L7、L8、L9,循环如何修改程序。输入程序,调试观察现象。
5.2算术运算、逻辑运算指令
算术运算指令包括加、减、乘、除运算和数学函数变换,逻辑运算包括逻辑与或非指令等。
整数与双整数加减法指令
整数加法(ADD-I)和减法(SUB-I)指令是:使能输入有效时,将两个
16位符号整数相加或相减,
16位的结果输出到OUT。
双整数加法(ADD-D)和减法(SUB-D)指令是:使能输入有效时,将两个
32位符号整数相加或相
减,并产生一个32位结果输出到OUT。
整数与双整数加减法指令格式如表
表5-14整数与双整数加减法指令格式
IN/OUT数据类型:整数
间接地址,SM4.3运行时间,
(1)当IN1、IN2和OUT操作数的地址不同时,在
STL指令中,首先用数据传送指令将
值送入OUT,然后再执行加、减运算即:OUT+IN2=OUT
、OUT-IN2=OUT。为了节省内存,在整数加法
的梯形图指令中,可以指定
IN1或IN2=OUT,这样,可以不用数据传送指令。如指定
IN2=OUT,则语句表指令为:+IIN1,OUT。在整数减法的梯形图
IN1=OUT,则语句表指令为:
-IIN2,OUT。这个原则适用于所有的算术运算指令,
且乘法和加法对应,减法和除法对应。
(2)整数与双整数加减法指令影响算术标志位
【例5-11】求5000加400的和,5000在数据存储器VW200中,结果放入AC0。程序如图
整数乘法指令( MUL-I)是:使能输入有效时,将两个 16位符号整数相乘,并
产生一个 16位积,从OUT指定的存储单元输出。
整数除法指令( DIV-I)是:使能输入有效时,将两个 16位符号整数相除,并
产生一个 16位商,从OUT指定的存储单元输出, 不保留余数。如果输出结果大于一个字, 则溢出位 SM1.1
双整数乘法指令( MUL-D):使能输入有效时,将两个 32位符号整数相乘,并产生一个 32位乘积,
从OUT指定的存储单元输出。
双整数除法指令( DIV-D):使能输入有效时,将两个 32位整数相除,并产生一个 32位商,从 OUT
指定的存储单元输出,不保留余数。
整数乘法产生双整数指令( MUL):使能输入有效时,将两个 16位整数相乘,得出一个 32位乘积,
从OUT指定的存储单元输出。
整数除法产生双整数指令( DIV):使能输入有效时,将两个 16位整数相除,得出一个 32位结果,从
OUT指定的存储单元输出。其中高 16位放余数,低 16位放商。
整数乘除法指令格式如表 5-15所示。
整数双整数乘除法指令操作数及数据类型和加减运算的相同。
使ENO=0的错误条件:0006(间接地址),SM1.1(溢出),SM1.3(除数为0)。
对标志位的影响:SM1.0(零标志位),SM1.1(溢出),SM1.2(负数),SM1.3(被0除)。
表5-15 整数乘除法指令格式
【例5-12】乘除法指令应用举例,程序如图
注意:因为VD100包含:VW100和VW102两个字,VD200包含:VW200和VW202两个字,所以在语句表指令中不需要使用数据传送指令。
实数加法(ADD-R)、减法(SUB-R)指令:将两个32位实数相加或相减,并产生一个
果,从OUT指定的存储单元输出。
实数乘法(MUL-R)、除法(DIV-R)指令:使能输入有效时,将两个
32位实数相乘(除),并产生
一个32位积(商),从OUT指定的存储单元输出。
指令格式如表5-16所示。
【例5-13】实数运算指令的应用,程序如图
数学函数变换指令包括平方根、自然对数、指数、三角函数等。
1)平方根(SQRT)指令:对32位实数(IN)取平方根,并产生一个32位实数结果,从OUT指定的存储单元输出。
2)自然对数(LN)指令:对IN中的数值进行自然对数计算,并将结果置于OUT指定的存储单元中。
求以10为底数的对数时,用自然对数除以
(3)自然指数(EXP)指令:将IN取以e为底的指数,并将结果置于OUT指定的存储单元中。
将“自然指数”指令与“自然对数”指令相结合,可以实现以任意
数为底,任意数为指数的计算。求 yx,输入以下指令: EXP(x*LN(y))。
(4)三角函数指令:将一个实数的弧度值 IN分别求SIN、COS、TAN,得到实数运算结果,从 OUT
函数变换指令格式及功能如表 5-17所示。
表5-17 函数变换指令格式及功能
使ENO=0的错误条件:0006(间接地址),SM1.1(溢出)SM4.3(运行时间)
对标志位的影响:SM1.0(零),SM1.1(溢出),SM1.2(负数)【例5-14】求45o正弦值。
45o转换为弧度:(3.)*45,再求正弦值。程序如图
逻辑运算是对无符号数按位进行与、或、异或和取反等操作。操作数的长度有 B、W、DW。指令格
逻辑与(WAND)指令:将输入IN1,IN2按位相与,得到的逻辑运算结果,放入
逻辑或(WOR)指令:将输入IN1,IN2按位相或,得到的逻辑运算结果,放入
逻辑异或(WXOR)指令:将输入IN1,IN2按位相异或,得到的逻辑运算结果,放入
取反(INV)指令:将输入IN按位取反,将结果放入OUT指定的存储单元。
表5-18 逻辑运算指令格式
1)在表5-18中,在梯形图指令中设置IN2和OUT所指定的存储单元相同,这样对应的语句表指
令如表中所示。若在梯形图指令中,IN2(或IN1)和OUT所指定的存储单元不同,则在语句表指令中需
使用数据传送指令,将其中一个输入端的数据先送入 OUT,在进行逻辑运算。如 MOVBIN1,OUT
2)ENO=0的错误条件:0006间接地址,SM4.3运行时间
3)对标志位的影响:SM1.0(零)
【例5-15】逻辑运算编程举例,程序如图
递增、递减指令用于对输入无符号数字节、符号数字、符号数双字进行加
1或减1的操作。指令格式
递增字节(INC-B)/递减字节(DEC-B)指令
递增字节和递减字节指令在输入字节
(IN)上加1或减1,并将结果置入
OUT指定的变量中。递增和
递减字节运算不带符号。
递增字(INC-W)/递减字(DEC-W)指令
递增字和递减字指令在输入字( IN)上加 1或减1,并将结果置入 OUT。递增和递减字运算带符号
递增双字和递减双字指令在输入双字( IN)上加1或减1,并将结果置入 OUT。递增和递减双字运算
表5-19 递增、递减指令格式
IN/OUT数据类型:字节 数据类型:整数
1)使ENO=0的错误条件:SM4.3(运行时间),0006(间接地址),SM1.1溢出)
2)影响标志位:SM1.0(零),SM1.1(溢出),SM1.2(负数)。
3)在梯形图指令中,IN和OUT可以指定为同一存储单元,这样可以节省内存,在语句表指令中不需使用数据传送指令。
5.2.4 运算单位转换实训
1)掌握算术运算指令和数据转换指令的应用。
2)掌握建立状态表及通过强制调试程序的方法。
3)掌握在工程控制中,进行运算单位转换的的方法及步骤。
将英寸转换成厘米,已知 C10的当前值为英寸的计数值, 1英寸=2.54厘米。
3.写入程序、编译并下载到 PLC
分析:将英寸转换为厘米的步骤为:将C10中的整数值英寸→双整数英寸→实数英寸→实数厘米→整数厘米。参考程序如图5-22所示。
//将计数器数值(英寸)载入 AC1
乘以2.54(转换为厘米)
?图5-22 将英寸转换为厘米参考程序
注意:在程序中 VD0、VD4、VD8、VD12,都是以双字( 4个字节)编址的。
4.建立状态表,通过强制,调试运行程序。
用鼠标右键单击目录树中的状态表图标或单击已经打开的状态表, 将弹出一个窗口,在窗口中选择“插
入状态表”选项,可创建状态表。在状态表的地址列输入地址 I0.0、C10、AC1、VD0、VD4、VD8、VD12。
与可编程控制器的通信连接成功后,用菜单“调试→状态表”或单击工具条上的状态表图标 ,可
起动状态表,再操作一次关闭状态表。状态表被起动后,编程软件从 PLC读取状态信息。
(3)用状态表强制改变数值
通过强制 C,模拟逻辑条件,方法是在显示状态表后,在状态表的地址列中选中“ C”操作数,在“新
数值”列写入模拟数值,然后单击工具条的“强制”图标
,被强制的数值旁边将显示锁定图标
成对“C”的“新数值”列的改动
部写入”,将所有需要的改动发送至 PLC。
5)运行程序并通过状态表监视操作数的当前值,记录状态表的数据。
数据表是用来存放字型数据的表
5-23所示。表格的第一个字地址即首地
地址,首地址中的数值是表格的最大长度(
TL),即最大填表数。表格的第二个字地址中的数值是表的实
际长度(EC),指定表格中的实际填表数。
每次向表格中增加新数据后,
EC加1。从第三个字地址开始,存放数据(字) 。表格最多可存放 100
个数据(字),不包括指定最大填表数( TL)和实际填表数( EC)的
要建立表格,首先须确定表的最大填表数。如图
//输入表格的最大填表数
图5-24 输入表格的最大填表数
确定表格的最大填表数后,可用表功能指令在表中存取字型数据。表功能指令包括填表指令,表取数指令,表查找指令,字填充指令。所有的表格读取和表格写入指令必须用边缘触发指令激活。
表填表(ATT)指令:向表格( TBL)中增加一个字( DATA)。如图5-25所示。
(3)指令执行后,新填入的数据放在表格中最后一个数据的后面, EC的值自动加 1。
(4)使ENO=0的错误条件:0006(间接地址),0091(操作数超出范围),SM1.4(表溢出),SM4.3(运行时间)。
(5)填表指令影响特殊标志位: SM1.4(填入表的数据超出表的最大长度, SM1.4=1)。
【例5-16】填表指令应用举例。将VW100中的数据 1111,填入首地址是 VW200的数据表中(图5-23)。
程序及运行结果如图 5-26所示。
从数据表中取数有先进先出( FIFO)和后进先出( LIFO)两种。执行表取数指令后,实际填表数 EC
先进先出指令( FIFO):移出表格( TBL)中的第一个数(数据 0),并将该数值移至 DATA指定存储
单元,表格中的其他数据依次向上移动一个位置。
后进先出指令( LIFO):将表格(TBL)中的最后一个数据移至输出端 DATA指定的存储单元,表格
中的其他数据位置不变。
表取数指令格式如表 5-20所示。
表5-20 表取数指令格式
输入端TBL为数据表的首地址,输出端
DATA为存放取出数值的存储单元
使ENO=0的错误条件:0006(间接地址),0091(操作数超出范围),SM1.5(空表)SM4.3(运行
响:SM1.5(试图从空
5-26的数据表中, 用
序及运行结果如图 5-27所示。
表格查找(TBL-FIND)指令在表格(TBL)中搜索符合条件的数据在表中的位置(用数据编号表示,编号范围为0~99)。其指令格式如图5-28所示。
(1)梯形图中各输入端的介绍
TBL:为表格的实际填表数对应的地址(第二个字地址),即高于对应的“增加至表格”、“后入先出”或“先入先出”指令TBL操作数的一个字地址(两个字节)。TBL操作数:VW,IW,QW,MW,SW,SMW,LW,
来描述查表条件时进行比较的
所指的数据编号开始查找,并将搜索到的符合条件的数据的编号放入
CMD:比较运算符,其操作数为常量 1~4,分别代表 =、<>、<,>。数据类型:字节 。
表格查找”指令搜索表格时,从 INDX指定的数据编号开始,寻找与数据 PTN的关系满足 CMD比较
条件的数据。参数如果找到符合条件的数据,则 INDX的值为该数据的编号。要查找下一个符合条件的数
据,再次使用“表格查找”指令之前须将 INDX 加1。如果没有找到符合条件的数据, INDX 的数值等于
实际填表数 EC。一个表格最多可有 100数据,数据编号范围: 0~99。将INDX的值设为 0,则从表格的
(3)使ENO=0的条件: SM4.3(运行),0006(接地址),0091(操作数超出范)。
5-18】表指令用例。从 EC地址VW202的表中找等于 16#2222的数。程序及数据表
了从表格的端开始搜索,AC1的初始=0,表指令行后AC1=1,找到符合条件的数据1。向下找,先将AC1加1,再激活表找指令,从表中符合条件的数据1的下一个数据开始找,第二次行表指令后,AC1=4,找到符合条件的数据4。向下找,将AC1再加1,再激活表找指令,从表中符合条件的数据4的下一个数据开始找,第三次行表找指令后,没有找到符合条件的数据,
AC1=6(填表数)。
N个的字存元中。 N的
式如5-30所示。明如下:
(1)IN字型数据入端,操作数:
(2)使ENO=0的条件: SM4.3(运行),0006(接地址),0091(操作数超出范)。
【例5-19】将0填入VW0~VW18(10个字)。程序及运行果如 5-31所示。
从5-31中可以看出程序运行果将从 VW0开始的10个字(20个字)的存元清零。
用送指令控制出的化,要求控制Q0.0~Q0.7的8个指示灯,在I0.0接通,使出隔位接通,在I0.1接通,出取反后隔位接通。上机程序,果。如果改送的数,出的状
如何化,从而学会置出的初始状。
制上升沿化的程序。每当
I0.0接通一次,使存元
VW0的加1,如果数达到
用数据型指令将厘米英寸。已知
写出字符8的七段示程序。
程下列控制功能,假有8个指示灯,从右到左以0.5s的速度依次点亮,任意刻只有一个指示灯亮,到达最左端,再从右到左依次点亮。
按下面的 I/O分配写程序。
8.用算术运算指令完成下列的运算。
将VW100开始的20个字的数据送到VW200开始的存储区。
读程序,给程序加注释。
???????立即类指令的功能
???????中断指令的功能应用举例及实训
???????高速计数器指令、高速脉冲输出指令功能应用举例及实训PID指令的原理及PID控制功能的应用
立即类指令是指执行指令时不受S7-200循环扫描工作方式的影响,而对实际的I/O点立即进行读写操作。分为立即读指令和立即输出指令两大类。
立即读指令用于输入 I接点,立即读指令读取实际输入点的状态时,并不更新该输入点对应的输入映
像寄存器的值。如:当实际输入点(位)是1时,其对应的立即触点立即接通;当实际输入点(位)是0时,其对应的立即触点立即断开。
立即输出指令用于输出 Q线圈,执行指令时,立即将新值写入实际输出点和对应的输出映像寄存器。
立即类指令与非立即类指令不同,非立即指令仅将新值读或写入输入 /输出映像寄存器。
立即类指令的格式及说明如表 6-1所示。
立即类指令的格式及说明
Bit:Q,数据类型:布尔
S7-200设置了中断功能,用于实时控制、高速处理、通信和网络等复杂和特殊的控制任务。中断就是终止当前正在运行的程序,去执行为立即响应的信号而编制的中断服务程序,执行完毕再返回原先被终止的程序并继续运行。
中断源即发出中断请求的事件,又叫中断事件。为了便于识别,系统给每个中断源都分配一个编号,
称为中断事件号。S7-200系列可编程控制器最多有34个中断源,分为三大类:通信中断、输入/输出中断和时基中断。
在自由口通信模式下,用户可通过编程来设置波特率、奇偶校验和通信协议等参数。用户通过编程控
制通讯端口的事件为通信中断。
I/O中断包括外部输入上升 /下降沿中断、高速计数器中断和高速脉冲输出中断。 S7-200用输入(I0.0、
I0.1、I0.2或I0.3)上升/下降沿产生中断。这些输入点用于捕获在发生时必须立即处理的事件。高速计数
器中断指对高速计数器运行时产生的事件实时响应,包括当前值等于预设值时产生的中断,计数方向的改变时产生的中断或计数器外部复位产生的中断。脉冲输出中断是指预定数目脉冲输出完成而产生的中断。
时基中断包括定时中断和定时器 T32/T96中断。定时中断用于支持一个周期性的活动。周期时间从 1
毫秒至255毫秒,时基是 1毫秒。使用定时中断 0,必须在SMB34中写入周期时间;使用定时中断 1,必
须在SMB35中写入周期时间。将中断程序连接在定时中断事件上,若定时中断被允许,则计时开始,每
当达到定时时间值,执行中断程序。定时中断可以用来对模拟量输入进行采样或定期执行 PID回路。定时
器T32/T96中断指允许对定时间间隔产生中断。 这类中断只能用时基为 1ms的定时器T32/T96构成。当中
断被启用后,当前值等于预置值时, 在S7-200执行的正常 1毫秒定时器更新的过程中, 执行连接的中断程
2.中断优先级和排对等候
优先级是指多个中断事件同时发出中断请求时,CPU优先由高到低依次是:通信中断、I/O中断和定时中断。如表6-2所示。
对中断事件响应的优先次序。S7-200规定的中断每类中断中不同的中断事件又有不同的优先权,
一个程序中总共可有 128个中断。S7-200在各自的优先级组内按照先来先服务的原则为中断提供服务。
在任何时刻,只能执行一个中断程序。一旦一个中断程序开始执行,则一直执行至完成。不能被另一个中
断程序打断,即使是更高优先级的中断程序。中断程序执行中,新的中断请求按优先级排队等候。中断队
列能保存的中断个数有限, 若超出,则会产生溢出。中断队列的最多中断个数和溢出标志位如表 6-3所示。
通信口1:接收信息完成
PTO0脉冲串输出完成中断
PTO1脉冲串输出完成中断
HSC0当前值=预置值中断
HSC0计数方向改变中断
HSC1当前值=预置值中断
HSC1计数方向改变中断
HSC2当前值=预置值中断
HSC2计数方向改变中断
HSC3当前值=预置值中断
HSC4当前值=预置值中断
HSC5当前值=预置值中断
中断队列的最多中断个数和溢出标志位
中断指令有 4条,包括开、关中断指令,中断连接、分离指令。 指令格式如表 6-4所示。
开中断(ENI)指令全局性允许所有中断事件。关中断( DISI)指令全局性禁止所有中断事件,中断
事件的每次出现均被排队等候,直至使用全局开中断指令重新启用中断。
PLC转换到 RUN(运行)模式时,中断开始时被禁用,可以通过执行开中断指令,允许所有中断事
件。执行关中断指令会禁止处理中断,但是现用中断事件将继续排队等候。
中断连接指令( ATCH)指令将中断事件( EVNT)与中断程序号码( INT)相连接,并启用中断事件。
分离中断(DTCH)指令取消某中断事件( EVNT)与所有中断程序之间的连接,并禁用该中断事件。
注意:一个中断事件只能连接一个中断程序,但多个中断事件可以调用一个中断程序。
中断程序是为处理中断事件而事先编好的程序。中断程序不是由程序调用,而是在中断事件发生时由操作系统调用。在中断程序中不能改写其他程序使用的存储器,最好使用局部变量。中断程序应实现特定
的任务,应“越短越好”,中断程序由中断程序号开始,以无条件返回指令(CRETI)结束。在中断程序中禁止使用DISI、ENI、HDEF、LSCR和END指令。
方法一:从“编辑”菜单→选择插入( Insert)→ 中断(Interrupt)。
方法二:从指令树,用鼠标右键单击“程序块”图标并从弹出菜单→选择插入 (Insert)→中断(Interrupt)。
方法三:从“程序编辑器”窗口,从弹出菜单用鼠标右键单击插入(Insert)→中断(Interrupt)。程序编辑器从先前的POU显示更改为新中断程序,在程序编辑器的底部会出现一个新标记,代表新
【例6-1】编写由I0.1的上升沿产生的中断事件的初始化程序。
分析:查表 6-2可知,I0.1上升沿产生的中断事件号为 2。所以在主程序中用 ATCH指令将事件号 2
和中断程序 0连接起来,并全局开中断。程序如图 6-1所示。
【例6-2】编程完成采样工作,要求每 10ms采样一次。
分析:完成每 10ms采样一次,需用定时中断,查表 6-2可知,定时中断 0的中断事件号为 10。因此
在主程序中将采样周期( 10ms)即定时中断的时间间隔写入定时中断 0的特殊存储器 SMB34,并将中断
事件10和INT-0连接,全局开中断。在中断程序 0中,将模拟量输入信号读入,程序如图 6-2所示。
【例6-3】利用定时中断功能编制一个程序,实现如下功能:当 I0.0由OFF→ON,Q0.0亮1s,灭1s,如
程序如图 6-3所示。
6.2.5 中断程序编程实训
1)熟悉中断指令的使用方法。
2)掌握定时中断设计程序的方法。
(1)利用T32定时中断编写程序,要求产生占空比为 50%,周期为4s的的方波信号。
2)用定时中断实现喷泉的模拟控制,控制要求如【例5-7】。
(1)产生占空比为 50%,周期为 4s的的方波信号,主程序和中断程序如图 6-4所示。
(2)喷泉的模拟控制参考程序如图 6-5所示。
分析:程序中采用定时中断 0,其中断号为 10,定时中断 0的周期控制字 SMB34中的定时时间设定
值的范围为 1-255ms。喷泉模拟控制的移位时间为 0.5s,大于定时中断 0的最大定时时间设定值 255ms,
所以将中断的时间间隔设为 100ms,这样中断执行 5次,其时间间隔为 0.5s,在程序中用 VB0来累计中断
的次数,每执行一次中断, VB0在中断程序中加 1,当VB0=5时,即时间间隔为 0.5s,QB0移一位。
用状态图监视程序的运行,并记录观察到的现象。
6.3 高速计数器与高速脉冲输出
前面讲的计数器指令的计数速度受扫描周期的影响,对比CPU扫描频率高的脉冲输入,就不能满足控制要求了。为此,SIMATICS7-200系列PLC设计了高速计数功能(HSC),其计数自动进行不受扫描周期的影响,最高计数频率取决于CPU的类型,CPU22x系列最高计数频率为30KHz,用于捕捉比CPU扫描速更快的事件,并产生中断,执行中断程序,完成预定的操作。高速计数器最多可设置12种不同的操作模式。用高速计数器可实现高速运动的精确控制。
PLC还设有高速脉冲输出,输出频率可达
个频率可调,占空比为50%的脉冲)和PWM(输出占空比可调的脉冲),高速脉冲输出的功能可用于对电动机进行速度控制及位置控制和控制变频器使电机调速。
6.3.1 占用输入/输出端子
高速计数器占用输入端子
CPU224有六个高速计数器,其占用的输入端子如表 6-5所示。
高速计数器占用的输入端子
各高速计数器不同的输入端有专用的功能,如:时钟脉冲端、方向控制端、复位端、起动端。
注意:同一个输入端不能用于两种不同的功能。但是高速计数器当前模式未使用的输入端均可用于其
他用途,如作为中断输入端或作为数字量输入端。例如,如果在模式 2中使用高速计数器 HSC0,模式
2.高速脉冲输出占用的输出端子
脉冲串功能可输出指定个数、指定周期的方波脉
冲(占空比 50%);PWM功能可输出脉宽变化的脉冲信号,用户可以指定脉冲的周期和脉冲的宽度。若一
台发生器指定给数字输出点 Q0.0,另一台发生器则指定给数字输出点 Q0.1。当PTO、PWM发生器控制输
出时,将禁止输出点 Q0.0、Q0.1的正常使用;当不使用 PTO、PWM高速脉冲发生器时,输出点 Q0.0、
Q0.1恢复正常的使用,即由输出映像寄存器决定其输出状态。
6.3.2 高速计数器的工作模式
1)单路脉冲输入的内部方向控制加/减计数。即只有一个脉冲输入端,通过高速计数器的控制字节
的第3位来控制作加计数或者减计数。该位=1,加计数;该位=0,减计数。如图6-6所示内部方向控制的单路加/减计数。
2)单路脉冲输入的外部方向控制加/减计数。即有一个脉冲输入端,有一个方向控制端,方向输入
信号等于 1时,加计数;方向输入信号等于 0时,减计数。如图 6-7所示外部方向控制的单路加 /减计数。
(3)两路脉冲输入的单相加 /减计数。即有两个脉冲输入端,一个是加计数脉冲,一个是减计数脉冲,
计数值为两个输入端脉冲的代数和。如图 6-8所示。
(4)两路脉冲输入的双相正交计数。即有两个脉冲输入端,输入的两路脉冲 A相、B相,相位互差
90°(正交),A相超前B相90°时,加计数; A相滞后B相90°时,减计数。在这种计数方式下,可
选择1x模式(单倍频,一个时钟脉冲计一个数) 和4x模式(四倍频,一个时钟脉冲计四个数) 。如图6-9,
高速计数器有 12种工作模式,模式0~模式2采用单路脉冲输入的内部方向控制加 /减计数;模式3~
模式5采用单路脉冲输入的外部方向控制加 /减计数;模式6~模式8采用两路脉冲输入的加 /减计数;模式
9~模式11采用两路脉冲输入的双相正交计数。
S7-200CPU224有HSC0-HSC5六个高速计数器,每个高速计数器有多种不同的工作模式。 HSC0和
有模式0。每种高速计数器所拥有的工作模式和其占有的输入端子的数目有关。如表 6-6所示。
高速计数器的工作模式和输入端子的关系及说明
占用的输入端子及其功能
单路脉冲输入的内部方向控制加
单路脉冲输入的外部方向控制加
方向控制端=0,减计数;
方向控制端=1,加计数。
两路脉冲输入的单相加/减计数。
加计数有脉冲输入,加计数;
减计数端脉冲输入,减计数。
两路脉冲输入的双相正交计数。
A相脉冲超前B相脉冲,加计数;
A相脉冲滞后B相脉冲,减计数。
选用某个高速计数器在某种工作方式下工作后,高速计数器所使用的输入不是任意选择的,必须按系
统指定的输入点输入信号。如
HSC1在模式11下工作,就必须用
I0.6为A相脉冲输入端,
冲输入端,I1.0为复位端,
高速计数器的控制字和状态字
定义了计数器和工作模式之后,还要设置高速计数器的有关控制字节。每个高速计数器均有一个控制
字节,它决定了计数器的计数允许或禁用,方向控制(仅限模式0、1和2)或对所有其他模式的初始化计数方向,装入当前值和预置值。控制字节每个控制位的说明如表6-7所示。
每个高速计数器都有一个状态字节,状态位表示当前计数方向以及当前值是否大于或等于预置值。每
个高速计数器状态字节的状态位如表6-8所示。状态字节的0-4位不用。监控高速计数器状态的目的是使外部事件产生中断,以完成重要的操作。
0=复位信号高电平有效;1=低电平有效
0=起动信号高电平有效;1=低电平有效
正交计数器计数速率选择:
0=4×计数速率;1=1×计数速率
向HSC写入计数方向:
0=无更新1=更新计数方向
向HSC写入新预置值:
向HSC写入新当前值:
高速计数器状态字节的状态位
当前值等于预设值状态位:
当前值大于预设值状态位:
0=小于或等于;1=大于
6.3.4 高速计数器指令及举例
高速计数器指令有两条:高速计数器定义指令
(1)高速计数器定义指令 HDEF。指令指定高速计数器( HSCx)的工作模式。工作模式的选择即选
择了高速计数器的输入脉冲、 计数方向、复位和起动功能。 每个高速计数器只能用一条 “高速计数器定义”
(2)高速计数器指令 HSC。根据高速计数器控制位的状态和按照 HDEF指令指定的工作模式,控制
高速计数器。参数 N指定高速计数器的号码。
表6-9 高速计数器指令格式
高速计数器定义指令HDEF
HSC:高速计数器的编号,为常量(0~5)
N:高速计数器的编号,为常量
MODE工作模式,为常量(0~11)
SM4.3(运行时间),0003(输入点冲突),SM4.3(运行时间),0001(HSC在
0004(中断中的非法指令),000A(HSC
2.高速计数器指令的使用
(1)每个高速计数器都有一个 32位当前值和一个 32位预置值,当前值和预设值均为带符号的整数
值。要设置高速计数器的新当前值和新预置值,必须设置控制字节(表 6-7),令其第五位和第六位为 1,
允许更新预置值和当前值,新当前值和新预置值写入特殊内部标志位存储区。然后执行 HSC指令,将新
数值传输到高速计数器。当前值和预置值占用的特殊内部标志位存储区如表
当前值和预置值占用的特殊内部标志位存储区
除控制字节以及新预设值和当前值保持字节外,还可以使用数据类型 HC(高速计数器当前值)加计
数器号码(0、1、2、3、4或5)读取每台高速计数器的当前值。因此,读取操作可直接读取当前值,但
只有用上述 HSC指令才能执行写入操作。
(2)执行 HDEF指令之前,必须将高速计数器控制字节的位设置成需要的状态,否则将采用默认设
置。默认设置为:复位和起动输入高电平有效,正交计数速率选择 4×模式。执行 HDEF指令后,就不能
再改变计数器的设置,除非 CPU进入停止模式。
(3)执行HSC指令时,CPU检查控制字节和有关的当前值和预置值。
3.高速计数器指令的初始化
高速计数器指令的初始化的步骤如下:
(1)用首次扫描时接通一个扫描周期的特殊内部存储器 SM0.1去调用一个子程序, 完成初始化操作。
因为采用了子程序,在随后的扫描中,不必再调用这个子程序,以减少扫描时间,使程序结构更好。
(2)在初始化的子程序中,根据希望的控制设置控制字( SMB37、SMB47、SMB137、SMB147、
SMB157),如设置SMB47=16#F8,则为:允许计数,写入新当前值,写入新预置值,更新计数方向为加计数,若为正交计数设为4×,复位和起动设置为高电平有效。
3)执行HDEF指令,设置HSC的编号(0-5),设置工作模式(0-11)。如HSC的编号设置为1,工作模式输入设置为11,则为既有复位又有起动的正交计数工作模式。
SMD162)。如执行指令
1000。若写入预置值为
计数器处于不工作状态。
(6)为了捕捉当前值等于预置值的事件,将条件
13)与一个中断程序相联
(7)为了捕捉计数方向的改变,将方向改变的中断事件(事件 14)与一个中断程序相联系。
(8)为了捕捉外部复位,将外部复位中断事件(事件 15)与一个中断程序相联系。
9)执行全局中断允许指令(ENI)允许HSC中断。
10)执行HSC指令使S7-200对高速计数器进行编程。
【例6-4】高速计数器的应用举例 。
如图6-11所示,用首次扫描时接通一个扫描周期的特殊内部存储器 SM0.1去调用一个子程序 ,完成
如图6-12所示,定义 HSC1的工作模式为模式 11(两路脉冲输入的双相正交计数,具有复位和起动
输入功能),设置SMB47=16#F8(允许计数,更新新当前值,更新新预置值,更新计数方向为加计数,若
为正交计数设为 4×,复位和起动设置为高电平有效) 。HSC1的当前值 SMD48清零,预置值 SMD52=50,
当前值 =预设值,产生中断(中断事件 13),中断事件 13连接中断程序 INT-0。
(3)中断程序 INT-0,如图6-13所示。
//只写入一个新当前值,
预置值不变,计数方向不变,
脉冲输出(PLS)指令
脉冲输出(PLS)指令功能为:使能有效时,检查用于脉冲输出(Q0.0或Q0.1)的特殊存储器位(SM),
然后执行特殊存储器位定义的脉冲操作。指令格式如表
脉冲输出(PLS)指令格式
用于脉冲输出(Q0.0或Q0.1)的特殊存储器
(1)控制字节和参数的特殊存储器
每个PTO/PWM发生器都有:一个控制字节(8位)、一个脉冲计数值(无符号的
周期时间和脉宽值(无符号的
16位数值)。这些值都放在特定的特殊存储区(
SM),如表6-12所示。执行
SM),然后执行特殊存储器位定义的脉冲操作,即对相应的
PTO/PWM发生器进行编程。
表6-12脉冲输出(Q0.0或Q0.1)的特殊存储器
:异步更新;1:同步更新
:单段操作;1:多段操作
PWM脉冲宽度值(范围:
PTO脉冲计数值(范围:
段号(仅用于多段PTO操作),多段流水线
PTO运行中的段的编号
包络表起始位置,用距离
V0的字节偏移量表示(仅用于多段
PTO包络由于增量计算错误异常终止
PTO包络由于用户命令异常终止
【例6-5】设置控制字节。用 Q0.0作为高速脉冲输出,对应的控制字节为 SMB67,如果希望定义的
输出脉冲操作为 PTO操作,允许脉冲输出,多段 PTO脉冲串输出,时基为 ms,设定周期值和脉冲数,则
通过修改脉冲输出( Q0.0或Q0.1)的特殊存储器 SM区(包括控制字节),既更改PTO或PWM的输
出波形,然后再执行 PLS指令。
注意:所有控制位、周期、脉冲宽度和脉冲计数值的默认值均为零。向控制字节( SM67.7或SM77.7)
的PTO/PWM允许位写入零,然后执行PLS指令,将禁止PTO或PWM波形的生成。
2)状态字节的特殊存储器
除了控制信息外,还有用于PTO功能的状态位,如表6-12所示。程序运行时,根据运行状态使某些位自动置位。可以通过程序来读取相关位的状态,用此状态作为判断条件,实现相应的操作。
PTO/PWM发生器控制输出,并禁止输出点的正常使用,输出波形不受输出映像寄存器状态、输出强制、
执行立即输出指令的影响;在Q0.0或Q0.1位置没有使用PTO或PWM功能时,输出映像寄存器控制输出,所以输出映像寄存器决定输出波形的初始和结束状态,即决定脉冲输出波形从高电平或低电平开始和结束,使输出波形有短暂的不连续,为了减小这种不连续有害影响,应注意:
(1)可在起用 PTO或PWM操作之前,将用于 Q0.0和Q0.1的输出映像寄存器设为 0。
2)PTO/PWM输出必须至少有10%的额定负载,才能完成从关闭至打开以及从打开至关闭的顺利转换,即提供陡直的上升沿和下降沿。
PTO是可以指定脉冲数和周期的占空比为 50%的高速脉冲串的输出。 状态字节中的最高位 (空闲位)
用来指示脉冲串输出是否完成。可在脉冲串完成时起动中断程序,若使用多段操作,则在包络表完成时起动中断程序。
周期范围从 50微秒至65,535微秒或从
16位无符号数,时基有
种,通过控制字节的第三位选择。注意:
???????如果周期<2个时间单位,则周期的默认值为2个时间单位。???????周期设定奇数微秒或毫秒(例如75毫秒),会引起波形失真。脉冲计数范围从1至4,294,967,295,为32位无符号数,如设定脉冲计数为
0,则系统默认脉冲计数值
2)PTO的种类及特点
PTO功能可输出多个脉冲串,现用脉冲串输出完成时,新的脉冲串输出立即开始。这样就保证了输出脉冲串的连续性。PTO功能允许多个脉冲串排队,从而形成流水线。流水线分为两种:单段流水线和多段流水线。
单段流水线是指:流水线中每次只能存储一个脉冲串的控制参数,初始PTO段一旦起动,必须按照对第二个波形的要求立即刷新SM,并再次执行PLS指令,第一个脉冲串完成,第二个波形输出立即开始,重复此这一步骤可以实现多个脉冲串的输出。
单段流水线中的各段脉冲串可以采用不同的时间基准,但有可能造脉冲串之间的不平稳过渡。输出多
个高速脉冲时,编程复杂。
多段流水线是指在变量存储区
V建立一个包络表。包络表存放每个脉冲串的参数,执行
S7–200PLC自动按包络表中的顺序及参数进行脉冲串输出。包络表中每段脉冲串的参数占用
由一个16位周期值(2字节)、一个16位周期增量值
(2字节)和一个32位脉冲计数值(4字节)组成。
段数(1~255);数值
0产生非致命错误,无PTO输出
初始周期(2至65535个时基单位)
(符号整数:-32768至32767个时基单位)
初始周期(2至65535个时基单位)
(符号整数:-32768至32767个时基单位)
初始周期(2至65535个时基单位)
(符号整数:-32768至32767个时基单位)
多段流水线的特点是编程简单,能够通过指定脉冲的数量自动增加或减少周期,周期增量值
会增加周期,周期增量值
为零,则周期不变。在包络表中的所有的脉冲串必须
采用同一时基,在多段流水线执行时,包络表的各段参数不能改变。多段流水线常用于步进电机的控制。
【例6-6】根据控制要求列出 PTO包络表。
步进电机的控制要求如图
例6-6题图步进电机的控制要求
在本例中:流水线可以分为 3段,需建立 3段脉冲的包络表。起始和终止脉冲频率为 2kHz,最大脉
冲频率为 10kHz,所以起始和终止周期为 500μs,与最大频率的周期为 100μs。1段:加速运行,应在约
200个脉冲时达到最大脉冲频率; 2段:恒速运行,约( )=3600个脉冲;3段:减速运行,
应在约200个脉冲时完成。
某一段每个脉冲周期增量值 用以下式确定:
周期增量值 =(该段结束时的周期时间 -该段初始的周期时间) /该段的脉冲数
用该式,计算出 1段的周期增量值 为-2μs,2段的周期增量值 为0,3段的周期增量值 为2μs。
假设包络表位于从 VB200开始的V存储区中,包络表如表 6-14所示。
V变量存储器地址 段号
在程序中的用指令可将表中的数据送入 V变量存储区中。
(3)多段流水线 PTO初始化和操作步骤
用一个子程序实现 PTO初始化,首次扫描(SM0.1)时
本发明涉及软plc领域,尤其涉及一种将plc梯形图转换成指令表并解释执行的方法。
20世纪90年代后期,传统plc难以构建开放的硬件体系结构、工作人员必须经过较长时间的专业培训才能掌握某一种产品的编程方法、传统plc的生产被几家厂商所垄断等缺点已经严重制约了其发展。近年来,随着计算机技术的迅猛发展以及iec61131国际标准的指定,软plc技术得到迅速发展。软plc系统基于pc机,建立在一定操作平台之上,通过软件的方法实现传统plc的计算、控制、存储和编程功能。
梯形图和指令表都是可编程逻辑控制器的常用编程语言,它们都符合iec61131-3标准。梯形图与电器控制系统的电路图很相似,它是在常用的继电器与接触器逻辑控制基础上简化了符号演变过来,具有直观易懂的优点,很容易被工厂电气人员掌握,特别适合用于开关量的逻辑控制。在梯形图中,左、右母线类似于继电器与接触器控制电源线,输出线圈类似于负载,输入触点类似于按钮。梯形图由若干阶级构成,自上而下排列,每个阶级起于左母线,经过触点与线圈,止于右母线。指令表编程语言是一种与汇编语言相类似的助记符编程语言,和汇编语言一样由操作码和操作数组成。指令表编程语言采用助记符来表示操作功能,具有容易记忆、便于掌握等特。与梯形图相比,指令表更接近于机器语言,更容易被软plc系统所识别。因此,设计一个方法将图形化的梯形图转换成指令表是一个重要问题。
目前,梯形图向指令表转换的方法主要有分成两类:一类方法是直接对梯形图进行遍历扫描,并在从上到下、从左到右扫描梯形图时,若遇到并联支路,就转入与当前分支相邻的下一行开始扫描,重复地使用这种策略从而得到指令表。另一种方法是使用二叉有向图表示梯形图的逻辑关系,并用二叉树存储梯形图,通过对二叉树的一次遍历即可生成指令表。
为了克服现有技术存在的缺点与不足,本发明提供一种将plc梯形图转换成指令表并解释执行的方法,有效地解决梯形图的复杂串并联关系和多输出难以准确转化成指令表的问题;同时本发明能把转化后的指令表解释执行,能结合emc数控系统构成一套软plc系统。
为解决上述技术问题,本发明提供如下技术方案:一种将plc梯形图转换成指令表并解释执行的方法,包括如下步骤:
s1、遍历梯形图并构造十字链表的所有顶点,根据各顶点的逻辑关系构造十字链表的弧链表,通过所有顶点和弧链表得到十字链表;
s2、利用串并联归并,化简十字链表得到包含指令间逻辑关系的二叉树结构;
s3、遍历二叉树结构得到对应的指令表;
s4、利用堆栈的先进先出原理解释指令表。
进一步地,所述步骤s1,具体为:
s11、构造strrung结构体保存梯形图一行的信息,其中包括element数组,该数组的元素是保存梯形图元件信息的strelement结构体指针,然后用rung指针数组保存每一行的strrung结构体指针;
s12、把除导线以外的其他元件看成有向图的一个顶点,构造顶点结构strvexnode并遍历rung指针数组建立所有顶点,顶点结构包括一个指向二叉树节点结构strbinode指针;
s13、构造弧节点的数据结构并且根据各顶点的逻辑关系构造弧链表;
s14、通过所有顶点和弧链表得到十字链表。
进一步地,所述步骤s2,具体为:
s21、利用串联归并,求入度为1的顶点,由该顶点结构的firstin域得到以该顶点为弧头的第一个弧结点,由弧结点得到弧尾顶点,接着计算该弧尾顶点的出度和入度,如果弧尾顶点的出度为1且入度小于等于1,则弧尾和弧头顶点合并为一个顶点;合并时新建一个二叉树节点binode,把弧尾顶点所包含的二叉树节点指针赋值为binode的左子节点,把弧头顶点所包含的二叉树节点指针赋值为binode的右子节点,同时把binode的operator字段赋值为枚举元素and,然后binode的指针赋值给弧尾顶点的二叉树节点指针并且把弧头顶点的firstout指针赋值给弧尾顶点的firstout指针,最后释放弧头顶点的firstin弧节点和弧头顶点;
s22、利用并联归并,依次计算顶点的出度,如果顶点的出度大于1则利用firstout域把以该顶点为弧尾的所有弧结点的弧头顶点保存在temp1数组中,对于temp数组中的顶点都按照以下步骤执行,求该顶点为弧尾的第一个弧结点的弧头顶点,计算该弧头顶点的入度,如果该弧头顶点的入度大于1,则利用firstin域把以该弧头顶点为弧头的所有弧结点的弧尾顶点保存在temp2数组中,然后遍历temp1数组和temp2数组找出两个数组都包含的顶点,把这些顶点合并成一个顶点;其中,合并时:
s23、重复步骤s21、s22,直到十字链表只剩下一个顶点,该顶点的binode字段为一颗包含了梯形图逻辑关系的二叉树的根节点。
进一步地,所述步骤s4,具体为:
s41、扫描物理输入并存储物理输入状态;
s42、利用堆栈原理逐行解释指令表,直到遇到end指令结束;
s43、把存储的物理输出状态更新到物理输出。
进一步地,所述步骤s42的利用堆栈原理逐行解释指令表,利用堆栈先进先出的特点来实现指令表的解释,所述指令表的解释分4种情况,包括:
(1)对于ld或ldi指令,将其操作数压入堆栈;
(2)对于out指令,将其操作数从堆栈中取出;
(3)对于and、ani、or、ori、anb、orb指令,将其对象从堆栈中取出,经过逻辑运算后存入堆栈;
(4)对于set、rst指令,改变其操作数的状态。
采用上述技术方案后,本发明至少具有如下有益效果:
1、本发明能够准确、有效地把包含复杂逻辑关系的梯形图转换成指令表并解释执行;
2、本发明可结合emc数控系统组成软plc系统,软plc系统具有开放的体系结构,可以根据用户需求合理选择硬件,节省成本。
图1为本发明一种将plc梯形图转换成指令表并解释执行的方法的步骤流程图;
图2为常见plc梯形图示例;
图3为图2的plc梯形图映射成的无环有向图示意图;
图4为根据图3无环有向图建立的十字链表;
图5为本发明一种将plc梯形图转换成指令表并解释执行的方法中串联归并的步骤流程图;
图6为本发明一种将plc梯形图转换成指令表并解释执行的方法中并联归并的步骤流程图;
图7为本发明一种将plc梯形图转换成指令表并解释执行的方法的指令表解释器工作的步骤流程图;
图8为根据图2所得到的指令表。
需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互结合,下面结合附图和具体实施例对本申请作进一步详细说明。
梯形图时由一系列图形化元件通过水平线和垂直线串并联组合而成的具有一定逻辑关系的图形表达式。如图1所示,本发明提供了一种将plc梯形图转换成指令表并解释执行的方法,其具体步骤方法如下面详细的描述内容。
梯形图时由图符构成的,在梯形图编辑部分,梯形图每一行作为一个阶级,每个阶级含有n个图符,所以我们设计strrung结构体和strelement结构体作为梯形图的数据结构,以记录梯形图各元件的数据信息,strrung结构体和strelement结构体如下所示:
其中数组element保存了阶级中所有元件,rung_width表示每个阶级中元件的个数,flow_end_type标志位表示是子程序结束还是整个程序结束,linecomment表示行注释字符串。
2、建立十字链表,如图4所示:
梯形图的数据结构存储的是各个元件的数据信息,并没有包含元件之间的串并联逻辑关系,所以需要根据梯形图建立十字链表。通过自上而下、自左而右遍历梯形图,把除了空元件和导线元件的其他元件视为十字链表的顶点,十字链表顶点的数据结构如下所示:
firstin表示指向以该顶点作为弧头的第一个弧结点,firstout表示指向以该顶点作为弧尾的弧结点。binode是二叉树的结点的数据结构。ele_type表示顶点对应元件的元件类型;var_type表示变量的类型;num表示顶点对应元件的标号。十字链表的顶点数据结构存储了元件的数据信息,而元件的串并联关系则通过十字链表弧结点数据结构实现,十字链表弧结点的数据结构如下所示:
tailvex表示弧尾顶点在梯形图中的位置,headvex表示弧头顶点在梯形图中的位置,headlink表示指向与此弧的弧头相同的下一条弧,taillink表示指向与此弧弧尾相同的下一条弧。
梯形图与指令表之间是一一对应的,通过研究发现梯形图中每个梯级的图符的逻辑关系是一种层次结构,而这种层次结构容易用数据结构中的树来表达,把每个梯级用二叉树这种结构表达后,整个梯形图就是多个二叉树的集合。二叉树结构体strbinode如下所示:
该结构体中,left是二叉树结点的左叶子结点指针,right是二叉树右叶子结点指针,parent是二叉树结点的父亲结点指针,operator是用于保存逻辑关系。
因为十字链表的顶点数据结构包含了二叉树结构体指针,而十字链表的弧结点存储了梯形图的串并联逻辑关系,所以我们可以通过化简十字链表来建立二叉树,其步骤如下所示:
1)串联归并,以图2所示的plc梯形图为例,其映射的无环有向图如图3所示,依次计算十字链表顶点的入度,顶点x2的入度为1,由该顶点结构的firstin域得到以该顶点为弧头的第一个弧节点,由弧节点得到弧尾顶点x1,接着计算该弧尾顶点x1的出度和入度,因为弧尾顶点的出度为1且入度小于等于1,则弧尾顶点x1和弧头顶点x2可以合并为一个顶点;其中,串联归并的步骤流程图如图5所示。
2)并联归并,依次计算顶点的出度,如果顶点的出度大于1则利用firstout域把以该顶点为弧尾的所有弧结点的弧头顶点保存在temp1数组中,对于temp数组中的顶点都按照以下步骤执行,求该顶点为弧尾的第一个弧结点的弧头顶点,计算该弧头顶点的入度,如果该弧头顶点的入度大于1,则利用firstin域把以该弧头顶点为弧头的所有弧结点的弧尾顶点保存在temp2数组中,然后遍历temp1数组和temp2数组找出两个数组都包含的顶点,合并时a)先声明一个指向strbinode的指针pbinode,把第一个顶点的binode字段赋值给pbinode,b)然后取出下一个顶点,分配一个二叉树结构,其指针为newbinode,把pbinode赋值给newbinode的left字段,把顶点的binode字段赋值给newbinode的right字段,赋值newbinode的operator字段为枚举元素or,把newbinode赋值给pnode,最后释放该顶点的firstin和firstout指针所指向内容和该顶点指针所指向内容,c)重复步骤b)直到取出所有顶点。并联归并的步骤流程图如图6所示;
3)重复步骤1)和步骤2)直到十字链表只剩下一个顶点,该顶点的binode字段为一颗包含了梯形图逻辑关系的二叉树的根节点。
通过后序遍历所建立的二叉树即可得到如图8所示的指令表。
本发明是利用堆栈来实现逻辑运算的解释,堆栈是一种先进先出的线性表,即先进去的元素最后才出来,我们将利用堆栈此特点来解释指令表。我们可以将指令表的指令码大致分成4类,如下所示:
1)将其操作数存入堆栈,例如:ld、ldi等;
2)将其操作数从堆栈中取出,例如:out;
3)将其对象从堆栈中取出,经过逻辑运算后存入堆栈,例如:and、ani、or、ori、anb、orb等;
4)改变其操作数的状态,例如:set、rst等。
如图7所示,解释指令表时,我们先扫描所有物理输入并存储所有物理输入的状态,然后逐行解释指令表,按照以上4类情况操作堆栈,直到遇到end指令结束,最后把存储的输出状态更新到物理输出。
尽管已经示出和描述了本发明的实施例,对于本领域的普通技术人员而言,可以理解的是,在不脱离本发明的原理和精神的情况下可以对这些实施例进行多种等效的变化、修改、替换和变型,本发明的范围由所附权利要求及其等同范围限定。