可编程序控制器 主讲:张波
4.1 编程语言与指令操作数范围 4.2 基本指令 4.3 程序控制指令 4.4 数学运算指令 4.5 数据操作指令 4.6 PID指令 第四章 S7-200编程语言及指令系统 4.1 编程语言与指令操作数范围 4.2 基本指令 4.3 程序控制指令 4.4 数学运算指令 4.5 数据操作指令 4.6 PID指令 4.7 其他操作指令
设计思想:让CPU模仿电源的电流通过一系列逻辑控制 条件,并根据结构产生逻辑输出。逻辑控制条件按其控制功能分解成多个“梯级”,构成梯形图。 4.1 编程语言与指令操作数范围 4.1.1 编程语言 梯形图 (LAD) 语句表 (STL) 功能块图(FBD) 1、梯形图(图形语言) 适用:开关量和逻辑控制 设计思想:让CPU模仿电源的电流通过一系列逻辑控制 条件,并根据结构产生逻辑输出。逻辑控制条件按其控制功能分解成多个“梯级”,构成梯形图。 执行程序时,从左到右,从上到下逐级执行,执行到程序结尾,再从上至下反复循环。
A B (M) (Q) C D IN TON PT 100 T33 梯形图组成: 左右两条垂直线:左母线、右母线。 常开触点、常闭触点:代表逻辑“输入”条件,如:开关、按钮、内部软元件等。 输出线圈:代表逻辑“输出”结果,如:电机启动器、电磁阀、软元件、继电器。 方框:代表附加指令,如:定时器、计数器、数学运算指令等。 梯形图编程就是用软继电器线圈的吸、放和触点的通、断实现各种实际控制系统。 左母线 右母线 注:-通常括号(输出驱动线圈)右边的部分在梯形图中不画 出。 触点在水平线上若是互相串联,则相当于逻辑与(AND) 若相邻的水平线用一条垂直线连接起来形成并联,相当于逻辑或(OR)
能流:假想在梯形图中有“电流”流动,这个“电流”称为“能流”。 “能流”只能单方向流动,不可逆。即从上至下、从左到右。 梯形图左边的母线即为“能流”源,并能沿着“梯级”线从左到右驱动最右边的输出线圈。如果这个“能流”能畅通无阻地到达最右边,则输出线圈被驱动;否则,输出线圈不被驱动。
2. 语句表 语句表是由各种指令组成的语言程序。使用NETWORK对程序分段。可以实现某些不能用梯形图或功能块图实现的功能。 (1)指令 指令是构成语句表的元素,由一个或几个容易记忆的字符来表示。 每一条指令带上必要的符号和参数就形成一个语句,可完成一特点功能。 程序执行时,按从上到下的顺序逐条执行。
梯形图中的线圈、触点、方块等符号,在语句表中有具体的指令与其对应。 (2)梯形图转换成语句表规则 梯形图中的线圈、触点、方块等符号,在语句表中有具体的指令与其对应。 利用PLC基本指令对梯形图编程时,务必按从上到下、从左到右的原则进行。 为了减少程序步骤,要优化编程顺序,其原则是串联多的电路放在上面,并联多的电路尽量靠近左母线。 对于不符合编程要求的梯形图控制电路必须重新编排,以便于正确使用PLC指令进行语句表编程。 I0.0 I0.1 M0.0 ( ) I0.2 Q0.0 ( ) I0.3 NETWORK1 LD I0.0 A I0.1 = M0.0 NETWORK2 LD I0.2 ON I0.3 = Q0.0
每一种功能使用一个运算方块,其运算功能由方块内的符号表示。 功能块图编辑器没有梯形图中的线圈和触点,但有与之等价的指令。 3、功能块图 采用半导体逻辑电路方块图。 每一种功能使用一个运算方块,其运算功能由方块内的符号表示。 功能块图编辑器没有梯形图中的线圈和触点,但有与之等价的指令。 4、指令操作数范围(P65表4.1) I2.1 V50.0 AND T33 IN Ton PT 100
梯形图中的触点应画在水平线上,不能画在垂直线上。 4.1.3 梯形图设计规则 梯形图没有实际的电流流动,被假设的“能流”实际是控制系统的信号流,它只能单方向流动,不能产生反流。即梯形图必须符合从上至下、从左到右的执行原则,否则不能直接编程。 梯形图中的触点应画在水平线上,不能画在垂直线上。 c 错误 正确
不包含触点的分支应放在垂直方向上,不能放在水平方向上,以便识别触点的组合和对输出线圈的控制路径。 错误 正确
梯形图每一“梯级”都是从左边母线开始,输出线圈接在右边母线上,所有触点不能画在输出线圈的右边。输出线圈不能直接连接在左母线上,若必须的话,则可通过插入常闭触点将线圈连于左母线上。 错误 正确
若几个并联回路串联,应将触点最多的回路放在梯形图的最左面;若几个串联回路并联,应将触点最多的回路放在梯形图的最上面。 正确 错误
“=”(OUT)线圈驱动指令,使该线圈所代表的软元件的触点闭合或断开。 4.2 基本指令 4.2.1 逻辑位标准操作指令 1、逻辑取、线圈驱动指令LD、LDN和= LD指令用于常开触点逻辑运算开始。 LDN指令用于常闭触点逻辑运算开始。 “=”(OUT)线圈驱动指令,使该线圈所代表的软元件的触点闭合或断开。 网络1 LD I0.0 = Q0.0 网络2 LDN I0.1 = M0.0 = Q0.0
几点说明 LD、LDN用于将左母线与触点相连;也可以与其他指令配合,用于其他分支回路的开始。 “=”指令用于驱动输出继电器、辅助继电器、特殊功能寄存器、定时器及计数器等,但不能用于驱动输入继电器。 并联的“=”指令可以连续使用任意次。 LD、LDN的操作数为I、Q、M、SM、T、C、V、S、L “=”的操作数为Q、M、SM、T、C、V、S、L
2、逻辑与操作指令A、AN 在梯形图中,如果有串联触点,要用逻辑与指令对其编程。 若串联的触点是常开触点,则使用与指令A; 若串联的触点是常闭触点,则使用与非指令AN。
几点说明 A、AN指令是单个触点串联连接指令,可连续使用。 若串联一个由多触点并联的回路,则不能用A、AN指令,需采用逻辑块与指令ALD。 并联的“=”指令可以连续使用任意次。 A、AN指令的操作数为I、Q、M、SM、T、C、V、S、L
3、逻辑或操作指令O、ON 在梯形图中,如果有单个触点并联,要用逻辑或指令对其编程。 若并联的触点是常开触点,则使用或指令O; 若并联的触点是常闭触点,则使用或非指令ON。
几点说明 O、ON指令是单个触点并联连接指令,一般紧跟在LD、LDN等指令后。即对其前面LD、LDN指令所指定的触点再并联一个触点,并联的次数可以是无限次。 若并联两个以上触点的串联回路,则不能用O、ON指令,需采用逻辑块或指令OLD。 O、ON指令的操作数为I、Q、M、SM、T、C、V、S、L
4、块操作指令ALD、OLD 有两个或两个以上串联触点的控制电路称为串联电路块。 有两个或两个以上并联触点的控制电路称为并联电路块。 在梯形图中,若有两个以上的并联块触点串联,则用块与指令ALD。 若有两个以上的串联块触点并联,则用块或指令OLD
几点说明 几个串、并联支路进行并联或串联连接时,其支路的起点以LD、LDN开始,支路终点用OLD、ALD指令。 如需将多个支路并联或串联,则从第二条支路开始,在每一条支路后面加OLD指令或ALD支路。 对串、并联支路的个数没有限制。 OLD、ALD支路均无操作数。
5、置位指令S和复位指令R 执行S、R指令时,从bit或out指定的地址参数开始的N个点都被置位或复位。N可以是1~255。当用复位指令时,如果bit或out指定的是T位或C位,则定时器或计数器被复位的同时当前值将被清零。被置位的位一旦为1后,在执行复位指令前不会改变为0,即置位指令具有锁存功能。 输入/输出 操作数 数据类型 位 I,Q,M,SM,T,C,V,S,L BOOL N VB,IB,QB,MB,SMB,SB,LB,AC,常数,*VD,*AC,*LD BYTE
用于检测开关量状态的变化以及配合功能指令完成一些逻辑控制。 6、脉冲生成指令EU、ED 用于检测开关量状态的变化以及配合功能指令完成一些逻辑控制。 当对应EU指令前的逻辑运算结果有一个上升沿跳变时,EU指令让能流接通一个扫描周期,即产生一个宽度为一个扫描周期的脉冲,驱动其后面的输出线圈。 当对应ED指令前的逻辑运算结果有一个下降沿跳变时,ED指令让能流接通一个扫描周期,即产生一个宽度为一个扫描周期的脉冲,驱动其后面的输出线圈。 对应的梯形图EU、ED P N EU上升沿跳变 ED下降沿跳变
I0.0 M0.0 I0.1 M0.1 Q0.0 一个扫描周期
7、逻辑取反NOT和空操作NOP指令 NOT指令是逻辑取反指令,它可改变能流状态,能流达到取反触点时则停止,能流未达到取反触点时则通过。 NOT指令无操作数。 NOP为空操作指令,它的使用对程序不产生任何影响,用于调试及修改程序,也可用于短暂的延时。 NOP指令的操作数N是一个0-255的常数,表示要进行的空操作的次数。
8、逻辑堆栈指令 S7-200系列PLC中有一个9层的堆栈,用于处理所有逻辑操作,称为逻辑堆栈。 有6条逻辑操作指令要用到逻辑堆栈。 在语句表(STL)中,常开触点由LD(装载)、A(与)及O(或)指令描述,LD将位bit值装入栈顶,A、O分别将位bit值与、或栈顶值,运算结果仍存入栈顶。在语句表中,常闭触点由LDN(非装载)、AN(非与)、和ON(非或)指令描述,LDN将位bit值取反后再装入栈顶,AN、ON先将位bit值取反,再分别与、或栈顶值,其运算结果仍存入栈顶。 ALD和OLD指令操作时利用堆栈作为中间结果的暂存区。
ALD指令对堆栈中的第一层和第二层的值进行逻辑与操作,结果放入栈顶。执行完后堆栈深度减1。 操作数:无 OLD指令对堆栈中的第一层和第二层的值进行逻辑或操作,结果放入栈顶。执行完后堆栈深度减1。 操作数:无
栈顶值复制指令 第2级栈顶值复制指令 LPS指令复制栈顶的值并将这个值推入栈,栈底的值被推出并丢失。 操作数:无 LRD指令复制堆栈中的第二个值到栈顶,堆栈没有推入或弹出栈操作,但旧的栈顶值被新的复制值取代。 栈顶值复制指令 第2级栈顶值复制指令
栈顶弹出指令 n级堆栈值复制指令 操作数:n(1~8的立即数) LPP指令弹出栈顶的值,堆栈的第二个值成为新的栈顶值,其他堆栈值依次被向上推移一级。该指令使原堆栈顶值弹出后丢失,最底层成为不确定值。 操作数:无 LDS指令复制堆栈中的第n个值到栈顶,原有的堆栈值依次被向下推移一级,原堆栈底层值被压出而丢失。 操作数:n(1~8的立即数) 栈顶弹出指令 n级堆栈值复制指令
4.2.2 逻辑位立即操作指令 (1)立即触点指令 在每个标准触点指令的后面加“I”。指令执行时,立即读取物理输入点的值,但是不刷新对应映像寄存器的值。 这类指令包括:LDI、LDNI、AI、ANI、OI和ONI。下面以LDI指令为例。 用法: LDI bit 例: LDI I0.2 注意:bit只能是I类型。 LDI指令把物理输入点的值立即装入栈顶。 AI和OI指令分别将物理输入点的值与堆栈顶值进行与和或,运算结果仍放于栈顶。 LDNI指令把物理输入点的值取反后立即装入栈顶。 ANI和ONI指令分别将物理输入点的值取反与堆栈顶值进行与和或,运算结果仍放于栈顶。
(2)=I,立即输出指令 用立即指令访问输出点时,把栈顶值立即复制到指令所指出的物理输出点,同时,相应的输出映像寄存器的内容也被刷新。 用法: =I bit 例: =I Q0.2 注意:bit只能是Q类型。 (3)SI,立即置位指令 用立即置位指令访问输出点时,从指令所指出的位(bit)开始的N个(最多为128个)物理输出点被立即置位,同时,相应的输出映像寄存器的内容也被刷新。 用法: SI bit, N 例: SI Q0.0, 2
(4)RI,立即复位指令 用立即复位指令访问输出点时,从指令所指出的位开始的N个(最多为128个)物理输出点被立即复位,同时,相应的输出映像寄存器的内容也被刷新。 用法: RI bit, N 例: RI Q0.0, 1
按功能分为3类:接通延时定时器TON、断开延时定时器TOF和有记忆接通延时定时器TONR 。 4.2.3 定时器指令 S7-200系列PLC内部有256个定时器。 按功能分为3类:接通延时定时器TON、断开延时定时器TOF和有记忆接通延时定时器TONR 。 按定时器的分辨率分为3个等级:1ms、10ms和100ms。 每个定时器由一个16位寄存器和1个状态位(反映其触点状态)构成。 定时器编号和分辨率
TXXX:定时器编号 PT(INT)预置常数:VW、IW、QW、MW、SMW、LW、AIW、AC、T、C IN(BOOL)使能输入:I、Q、M、SM、T、C、V、S、L
1、定时器工作工程 接通延时定时器 TON,接通延时定时器指令。用于单次时间定时。上电时或首次扫描,该定时器的状态位T和寄存器内容被清0。 当使能输入接通时,定时器状态位为OFF,当前值从0开始计时,当前值达到预设值时,定时器状态位为ON,继续计时,一直计到最大值32767。 当使能输入断开,定时器自动复位,即定时器状态位为OFF,当前值为0。 指令格式: TON Txxx,PT 例: TON T120,8
I0.0 T33当前值 T33状态位 Q0.0 =PT(100)
有记忆接通延时定时器 TONR,有记忆接通延时定时器指令。用于多次时间间隔累计定时。上电时或首次扫描,定时器状态位被清零,寄存器内容保持为上次停机时的值。 当使能输入接通时,定时器状态位为OFF,当前值从上次数值基础上开始计时。当前值大于等于预设值时,状态位被置为1,当前值连续计到32767。 TONR定时器只能用复位指令进行复位操作。 指令格式:TONR Txxx,PT 例: TONR T20,63
I0.0 最大值=32767 =PT(200) T3当前值 =PT(100) I0.1 T3状态位 Q0.0
断开延时定时器 TOF,断开延时定时器指令。上电时或首次扫描,定时器状态位为OFF,当前值为0。 当使能输入接通时,定时器状态位立即接通被置为ON,并将当前值清0。 当使能输入由接通到断开时,定时器开始计时,当前值达到预设值时,定时器状态位被清零,当前值等于预设值,停止计时。 TOF复位后,如果使能输入再有从ON到OFF的负跳变,则可实现再次启动。 指令格式:TOF Txxx,PT 例: TOF T35,6
I0.0 T33当前值 T33状态位 Q0.0 100
2、定时器的分辨率 定时原理:对内部时基脉冲进行计数。 S7-200PLC提供给定时器的时基脉冲有1ms、10ms、100ms三种。 定时器的分辨率为1ms、10ms、100ms。 定时器的分辨率不同,刷新方法也不同。 1ms分辨率 系统每隔1ms刷新一次,状态位和当前值在一个扫描周期内可能被多次刷新。 10ms分辨率 在每次扫描周期的开始时自动刷新,状态位和当前值在一个周期内只改变一次 100ms分辨率 只有定时器指令执行过程中被启动后才能在每个扫描周期开始时被刷新。
1ms定时器的使用方法在修改之前,只有当该定时器的当前值更新发生在常闭触点T32执行以后及常开触点T32执行以前Q0
10ms定时器的使用方法在修改以前,Q0.0将不会被置位,因为定时位T33只能在每次扫描开始被置位。往后,执行定时指令时,定时器将被复位。当常开触点T33被执行,因为T33为OFF,所以Q0.0也为OFF,即Q0.0永不会被置位。
100ms定时器的使用方法在修改前,只有当定时器当前值达到预置值时,Q0. 0会被置位一个扫描周期。用常闭触点Q0 100ms定时器的使用方法在修改前,只有当定时器当前值达到预置值时,Q0.0会被置位一个扫描周期。用常闭触点Q0.0代替常闭触点T32作为定时器的允许计时输入,这就保证当定时器达到预置时,Q0.0会置位一个扫描周期。
4.2.4 计数器指令 S7-200PLC内部有256个计数器C0-C255。 按计数方式不同分为加计数(CTU)、减计数(CTD)、加/减计数(CTUD)。 每个计数器有16位寄存器和一个状态位(反映其触点状态)即C位构成。 计数范围为0-32767。
Cxxx(WORD):计数器编号。 CU(加计数输入端)、CD (减计数输入端) 、LD(装载复位端)、R(复位输入端)(BOOL)使能输入。 PV(INT)预设常值:VW、IW、QW、MW、SMW、LW、AIW、AC、T、C、常数、SW、*VD、*AC、*LD。
加计数器 CTU,加计数器指令。首次扫描,定时器状态位为0,当前值为0。脉冲输入的每个上升沿,计数器计数1次,当前值增加1个单位,当前值达到预设值时,计数器状态位为1,当前值继续计数到32767停止计数。复位输入有效或执行复位指令,计数器自动复位,即计数器状态位和当前值清零。 指令格式:CTU Cxxx,PV 例: CTU C20,3
减计数器 CTD,增减计数器指令。脉冲输入端CD用于递减计数。首次扫描,定时器状态位为0,当前值为等于预设值PV。计数器检测到CD输入的每个上升沿时,计数器当前值减小1个单位,当前值减到0时,计数器状态位为1。 复位输入有效或执行复位指令,计数器自动复位,即计数器状态位为0,当前值复位为预设值,而不是0。 指令格式:CTD Cxxx,PV 例: CTD C40,4
增减计数器 CTUD,增减计数器指令。有两个脉冲输入端:CU输入端用于递增计数,CD输入端用于递减计数。 当加计数输入端有上升沿输入时,计数器当前值加1;当减计数输入端有上升沿输入时,计数器从预设的当前值中1。当计数器当前值大于或等于预设值(PV)时,该计数器状态位置为1。 当复位输入端R被置位时,计数器复位,当前值和状态位被清零。 指令格式:CTUD Cxxx,PV 例: CTUD C30,5
4.2.5 比较指令 4.2.5 比较指令 1. 字节比较 字节比较用于比较两个字节型整数值IN1和IN2的大小,字节比较是无符号的。比较式可以是LDB、AB或OB后直接加比较运算符构成。 如:LDB=、AB<>、OB>= 等。 整数IN1和IN2的寻址范围:VB、IB、QB、MB、SB、SMB、LB、*VD、*AC、*LD和常数。 指令格式例: LDB= VB10, VB12 AB<> MB0, MB1 OB<= AC1, 116 在梯形图中,当比较式为真时,该触点闭合 在语句表中,当比较式为真时,将栈顶置1
2. 整数比较 整数比较用于比较两个一字长整数值IN1和IN2 的大小,整数比较是有符号的(整数范围为16#8000和16#7FFF之间)。比较式可以是LDW、AW或OW后直接加比较运算符构成。 如:LDW=、AW<>、OW>= 等。 整数IN1和IN2的寻址范围:VW、IW、QW、MW、SW、SMW、LW、AIW、T、C、AC、*VD、*AC、*LD和常数。 指令格式例: LDW= VW10, VW12 AW<> MW0, MW4 OW<= AC2, 1160 在梯形图中,当比较式为真时,该触点闭合 在语句表中,当比较式为真时,将栈顶置1
3. 双字整数比较 双字整数比较用于比较两个双字长整数值IN1和IN2的大小,双字整数比较是有符号的(双字整数范围为16#80000000和16#7FFFFFFF之间)。 指令格式例: LDD= VD10, VD14 AD<> MD0, MD8 OD<= AC0, 1160000 LDD>= HC0, *AC0 在梯形图中,当比较式为真时,该触点闭合 在语句表中,当比较式为真时,将栈顶置1
4. 实数比较 实数比较用于比较两个双字长实数值IN1和IN2的大小,实数比较是有符号的(负实数范围为-1.175495E-38和-3.402823E+38,正实数范围为+1.175495E-38和+3.402823E+38)。比较式可以是LDR、AR或OR后直接加比较运算符构成。 指令格式例: LDR= VD10, VD18 AR<> MD0, MD12 OR<= AC1, 1160.478 AR> *AC1, VD100 在梯形图中,当比较式为真时,该触点闭合 在语句表中,当比较式为真时,将栈顶置1
4.2.6 基本指令的编程实例 1、输出自锁
2、输入优先 输入信号A和输入信号B先到者取得优先权的梯形图程序。
3、输入判断 对输入信号A和输入信号B的状态进行判断,并给予相对指示的梯形图程序。
4、信号分频 I0.0(Q0.0) I0.1 Q0.1 Q0.2 T
I0.0(Q0.0) Q0.3 Q0.1 Q0.2 T
5、扩展定时 I0.0 T37 T38 Q0.0 5S 3S 8S
6、延时接通/断开 3S I0.0 Q0.0 1S
7、闪光电路 Q0.0 I0.0 T37 T38 1S 3S
4.3 S7-200PLC的程序控制指令 4.3.1 跳转、标号指令 程序控制指令控制程序转向和停止执行。 1. 跳转指令 JMP,跳转指令。使能输入有效时,使程序流程跳到同一程序中的指定标号n处执行。 n由标号指令LBL说明,n的取值范围为0-255。 JMP和LBL必须成对使用。 执行跳转指令后,逻辑堆栈的栈顶值总是1。 2.标号指令 LBL,标号指令。标记程序段,作为跳转指令执行时跳转到的目的位置。 操作数n为0-255的字型数据。
程序实例: 如右图所示。用增减计数器进行计数,如果当前值小于500,则程序按原顺序执行,若当前值超过500,则跳转到从标号10开始的程序执行。
4.3.2 子程序调用、子程序入口和返回指令 CALL子程序调用指令。将主程序转到子程序(n)的入口处去执行子程序。 SBR子程序入口指令。该指令确定n号子程序的开始位置。 CRET子程序条件返回指令。当条件成立时,该指令结束子程序(n),返回主程序调用处。 RET子程序无条件返回指令。该指令无条件结束子程序的执行,返回主程序调用处。每个子程序均要以此指令结束。STEP7-Micro/Win32在执行子程序时自动将无条件返回指令加在每一个子程序的末尾。
当有一个子程序被调用时系统会保存当前的逻辑堆栈,置栈顶值为1,堆栈的其他值为0把控制交给被调用的子程序。当子程序完成后恢复逻辑堆栈,把控制权交还给调用程序。
注意几点: 当子程序执行结束时,程序应该返回到原调用指令(CALL)的下一条指令。 子程序可以嵌套,但最多不能超过8层,允许自调用(自己调用自己),但使用时要谨慎,避免出现混乱。 累加器值可在主、子程序之间自由传递,调用子程序时无需保存累加器。
4.3.3 STOP、WDR、END、MEND指令 STOP指令用以暂停程序执行。使能输入有效时,该指令使主机CPU的工作方式由RUN切换到STOP方式,从而立即终止用户程序的执行。 STOP指令在梯形图中以线圈形式编程。指令不含操作数。指令的执行不考虑对特殊标志寄存器位和能流的影响。 指令格式:STOP (无操作数)
WDR看门狗复位指令(监控复位指令)。当使能输入有效时,执行WDR指令,每执行一次,看门狗定时器就被复位一次。用本指令可用以延长扫描周期,从而可以有效避免看门狗超时错误。S7-200警戒时钟默认监控时间为300ms。 指令格式:WDR (无操作数) 程序实例:指令STOP、END、WDR的应用如图5.2所示。 一次扫描结束之前以下处理被禁止:通信(自由口通信除外)、I/O口刷新(直接I/O除外)、强制刷新、特殊标志位刷新、执行时间诊断、中断程序中的STOP指令。
结束指令 结束指令有两条:END和MEND。两条指令在梯形图中以线圈形式编程。 用Micro/Win32编程时,编程人员不需手工输入MEND指令,而是由软件自动加在主程序结尾。 指令格式:MEND (无操作数)
4.3.4 FOR与NEXT循环指令 FOR指令和NEXT指令必须成对使用,FOR标记循环的开始,NEXT标记循环的结束。FOR标记在FOR和NEXT之间执行指令,必须给FOR指令指定当前循环计数值(INDX)、初值(INIT)、和终值(FINAL)。NEXT指令标记循环的结束,并置栈顶值为1。如果初值大于终值,那么循环体不被执行。每执行一次循环体,当前计数值增加1,并且将其结果同终值作比较,如果大于终值,那么循环结束。
4.4 数学运算指令 4.4.1 数学逻辑运算指令 4.4.2 四则运算指令 4.4.3 数学函数指令 返回本章首页
4.4.1 数学逻辑运算指令 数学逻辑运算指令:按字节、字或双字进行逻辑运算的指令。 S7-200提供的数学逻辑运算指令可以按字、字节或双字进行逻辑与、逻辑或、逻辑异或和逻辑取反等数学操作。
1. 字节运算指令 字节逻辑运算包括字节与、字节或、字节异或、字节取反。 ANDB(字节与)指令对两个输入字节按位与,得到一个字节结果(OUT) ORB(字节或)指令对两个输入字节按位或,得到一个字节结果(OUT) XORB(字节与)指令对两个输入字节按位异或,得到一个字节结果(OUT)
2. 字逻辑运算 字逻辑运算包括字与、字或、字异或、字取反。 ANDW(字与)指令对两个输入字按位与,得到一个字结果(OUT) ORW(字或)指令对两个输入字按位或,得到一个字结果(OUT) XORW(字与)指令对两个输入字按位异或,得到一个字结果(OUT)
3. 双字逻辑运算 双字逻辑运算包括双字与、双字或、双字异或、双字取反。 ANDD(双字与)指令对两个输入双字按位与,得到一个双字结果(OUT) ORD(双字或)指令对两个输入双字按位或,得到一个双字结果(OUT) XORD(双字与)指令对两个输入双字按位异或,得到一个双字结果(OUT)
4、逻辑取反运算指令 INVB字节取反指令求出输入字节(IN)的反码,得到一个字节结果(OUT) INVW字取反指令求出输入字 (IN)的反码,得到一个字结果(OUT) INVD双字取反指令求出输入双字(IN)的反码,得到一个双字结果(OUT)
5、使用数学逻辑运算指令注意以下几点 在梯形图中,执行结果放在OUT中,在语句表中,执行结果则放在IN2中。且在梯形图中,可以设定OUT和IN2指向同一个单元以节省内存空间。 指令执行影响零特殊标志位SM1.0,当执行结果为0时,SM1.0被置1。 在执行程序时出错,将使输出允许ENO为0,从而终止梯形图中的“能流”继续下传。
4.4.2 四则运算指令 S7-200PLC四则运算指令有加法、减法、乘法、除法、加1和减1等指令。 加、减法指令包括: 整数加、减法运算指令 双整数加、减法运算指令 实数加、减法运算指令
1. 整数加法 +I,整数加法指令。 使能输入有效时,将两个单字长(16位)的符号整数IN1和IN2相加,产生一个16位整数结果OUT。
图4.25 整数加法例
2. 双整数加法 +D,双整数加法指令。使能输入有效时,将两个双字长(32位)的符号双整数IN1和IN2相加,产生一个32位双整数结果OUT。 在LAD和FBD中,执行结果:IN1+IN2=OUT。 在STL中,执行结果:IN1+OUT=OUT。 OUT的寻址范围:VD、ID、QD、MD、SD、SMD、LD、AC、*VD、*AC、*LD。 指令格式:+D IN1, OUT 例: +D VD0,VD4
+R,实数加法指令。使能输入有效时,将两个双字长(32位)的实数IN1和IN2相加,产生一个32位实数结果OUT。 3、实数加法指令 +R,实数加法指令。使能输入有效时,将两个双字长(32位)的实数IN1和IN2相加,产生一个32位实数结果OUT。 在LAD和FBD中,执行结果:IN1+IN2=OUT。 OUT的寻址范围:VD、ID、QD、MD、SD、SMD、LD、AC、*VD、*AC、*LD。 本指令影响的特殊存储器位:SM1.0(零);SM1.1(溢出);SM1.2(负)。 4 返回本节
4. 减法 减法指令是对有符号数进行相减操作。包括:整数减法、双整数减法和实数减法。这三种减法指令与所对应的加法指令除运算法则不同之外,其他方面基本相同。
在LAD和FBD中,执行结果:IN1-IN2=OUT。 在STL中,执行结果: OUT- IN2=OUT。 指令格式: -I IN2, OUT (整数减法) -D IN2, OUT (双整数减法) -R IN2, OUT (实数减法) 例: -I AC0, VW4
*I,整数乘法指令。使能输入有效时,将两个单字长(16位)的符号整数IN1和IN2相乘,产生一个16位整数结果OUT。 5、乘法 *I,整数乘法指令。使能输入有效时,将两个单字长(16位)的符号整数IN1和IN2相乘,产生一个16位整数结果OUT。 IN2和OUT指向同一个内存单元以节省内存空间。 指令格式:*I IN1,OUT 例: *I VW0,AC0
完全整数乘法 MUL,完全整数乘法指令。使能输入有效时,将两个单字长(16位)的符号整数IN1和IN2相乘,产生一个32位双整数结果OUT。 在LAD和FBD中,执行结果:IN1*IN2=OUT。 OUT的寻址范围:VD、ID、QD、MD、SD、SMD、LD、AC、*VD、*AC、*LD。 本指令影响的特殊存储器位:SM1.0(零);SM1.1(溢出);SM1.2(负);SM1.3(被0除)。 指令格式:MUL IN1,OUT 例: MUL AC0,VD10
双整数乘法 *D,双整数乘法指令。使能输入有效时,将两个双字长(32位)的符号整数IN1和IN2相乘,产生一个32位双整数结果OUT。 在STL中,执行结果:IN1*OUT=OUT。 IN1和IN2的寻址范围:VD、ID、QD、MD、SD、SMD、LD、HC、AC、*VD、*AC、*LD和常数。 OUT的寻址范围:VD、ID、QD、MD、SD、SMD、LD、AC、*VD、*AC、*LD。 本指令影响的特殊存储器位:SM1.0(零);SM1.1(溢出);SM1.2(负);SM1.3(被0除)。 指令格式:*D IN1,OUT 例: *D VD0,AC0
实数乘法 *R,实数乘法指令。使能输入有效时,将两个双字长(32位)的实数IN1和IN2相乘,产生一个32位实数结果OUT。 在LAD和FBD中,以指令盒形式编程,执行结果:IN1*IN2=OUT。 在STL中,执行结果:IN1*OUT=OUT。 IN1和IN2的寻址范围:VD、ID、QD、MD、SD、SMD、LD、AC、*VD、*AC、*LD和常数。 OUT的寻址范围:VD、ID、QD、MD、SD、SMD、LD、AC、*VD、*AC、*LD。 本指令影响的特殊存储器位:SM1.0(零);SM1.1(溢出);SM1.2(负);SM1.3(被0除)。 指令格式: *R IN1,OUT 例: *R VD0,AC0
6.除法 在LAD和FBD中,以指令盒形式编程,执行结果:IN1/IN2=OUT。 在STL中,执行结果: OUT/ IN2=OUT。 指令格式:/I IN2, OUT (整数除法) DIV IN2, OUT (整数完全除法) /D IN2, OUT (双整数除法 /R IN2, OUT (实数除法)
例:DIV VW10, VD100 /I VW20, VW200 两条指令的编程及执行情况比较如图所示。
对于完全除法指令: 对于除法指令:
增减指令 1. 字节增和字节减 INCB,字节增指令。使能输入有效时,把一字节长的无符号输入数(IN)加1,得到一字节的无符号输出结果OUT。 DECB,字节减指令。使能输入有效时,把一字节长的无符号输入数(IN)减1,得到一字节的无符号输出结果OUT。
2. 字增和字减 INCW字增指令,使能输入有效时,把一字长的有符号输入数(IN)加1,得到32位的有符号输出结果OUT。 DECW字减指令,使能输入有效时,把一字节的有符号输入数(IN)减1,得到一字长的有符号输出结果OUT。 IN的寻址范围:VW、IW、QW、MW、SW、SM、LW、AIW、T、C、AC、*VD、*AC、*LD和常数 OUT的寻址范围: VW、IW、QW、MW、SW、SMW、LW、AIW、T、C、AC、*VD、*AC、*LD。
3. 双字增和双字减 INCD双字增指令。使能输入有效时,把双字长(32位)的有符号输入数(IN)加1,得到双字长的有符号输出结果OUT。 DECD双字减指令。使能输入有效时,把双字长的有符号输入数(IN)减1,得到双字长的有符号输出结果OUT。
几点说明 在梯形图中IN+1=OUT,IN-1=OUT 在指令表中IN+1=IN,IN-1=IN或OUT+1=OUT,OUT-1=OUT。即在梯形图中,可以设定OUT和IN指向同一个内存单元以节省内存空间。 指令执行结果影响零特殊标志位SM1.0、溢出特殊标志位SM1.1和符号特殊标志位SM1.2。当指令运算结果为0、有溢出或为负值时, SM1.0、 SM1.1和SM1.2分别被置1。
4. 应用实例 控制要求:食品加工厂对饮料生产线上的盒装饮料进行计数,每24盒为一箱,要求能记录生产的箱数
4.4.3 数学函数指令 1. 平方根指令 2. 自然对数指令 3. 指数指令 4. 正弦、余弦、正切指令
1. 平方根 SQRT,平方根指令。把一个双字长(32位)的实数IN开平方,得到32位的实数结果。 在LAD中,执行结果:SQRT(IN)=OUT。 在STL中,执行结果:SQRT(IN)=OUT。 本指令影响的特殊存储器位:SM1.0(零);SM1.1(溢出和非法值);SM1.2(负)。 使能流输出ENO断开的出错条件:SM1.1(溢出);SM4.3(运行时间)。 指令格式: SQRT IN,OUT 例: SQRT VD0,AC0
2. 自然对数指令 LN,自然对数指令。将一个双字长(32位)的实数IN取自然对数,得到32位的实数结果放入输出单元OUT中。求以10为底的对数时,用除法指令将自然对数除以2.302585即可。 该指令影响下列的特殊存储器位:SM1.0(零位),SM1.1(溢出),SM1.2(负数),SM4.3(运行时间)。 指令格式: LN IN,OUT
应用实例:求以10为底的50(存于VD0)的常用对数,结果放到AC0。
3. 指数指令 EXP,指数指令。将一个双字长(32位)的实数IN取以e为底的指数,得到32位的实数结果OUT。 在LAD中,执行结果:EXP(IN)=OUT。 在STL中,执行结果:EXP(IN)=OUT。 指令格式: EXP IN, OUT 例: EXP VD0, AC0 该指令影响下列的特殊存储器位:SM1.0(零位),SM1.1(溢出),SM1.2(负数),SM4.3(运行时间)。
4. 正弦、余弦、正切指令 SIN、COS、TAN,即正弦、余弦、正切指令。将一个双字长(32位)的实数弧度值IN分别取正弦、余弦、正切,各得到32位的实数结果。 如果已知输入值为角度,要先将角度值转化为弧度值,方法:使用(*R)MUL_R乘法指令用角度值乘以π/180°即可转换为弧度值。 例:TAN VD0, AC0,
应用实例:求COS160o的值
4.5 数据操作指令 4.5.1 数据移位指令 4.5.2 数据循环移位指令 4.5.3 数据传送指令 4.5.4 数据转换指令
(1)字节左移(SLB)和字节右移(SRB) 此指令可将字节的移出位逐位移入溢出标志位SM1.1,被移字节的最后移位逐次自动补0。 4.5.1 数据移位指令 (1)字节左移(SLB)和字节右移(SRB) 此指令可将字节的移出位逐位移入溢出标志位SM1.1,被移字节的最后移位逐次自动补0。 最大实际可移位次数为8。此时该字节的实际值已为0。 如果移位操作的结果使字节的每一位都是0,则零标志存储器位SM1.0就被置位。 字节操作是无符号的。 SLB OUT, N(字左移) SRB OUT, N(字右移)
以第一条指令为例,指令执行情况如表所示。 表 指令SLB执行结果
(2)字左移(SLW)和字右移(SRW) 最大实际可移位次数为16。此指令可将字节的移出位逐位移入溢出标志位SM1.1,被移字节的最后移位逐次自动补0。如果移位操作的结果使字节的每一位都是0,则零标志存储器位SM1.0就被置位。 字操作是有符号的。当使用有符号数据类型时,符号位也被移动。 指令格式: SLW OUT, N(字左移) SRW OUT, N(字右移) 例: SLW MW0, 2 SRW LW0, 3
以第二条指令为例,指令执行情况如表所示。
(3)双字左移(SLD)和双字右移(SRD) 使能输入有效时,把双字型输入数据IN左移或右移N位后,再将结果输出到OUT所指的双字存储单元。最大实际可移位次数为32。此指令可将字节的移出位逐位移入溢出标志位SM1.1,被移字节的最后移位逐次自动补0。如果移位操作的结果使字节的每一位都是0,则零标志存储器位SM1.0就被置位。 双字操作是有符号的。当使用有符号数据类型时,符号位也被移动。 指令格式: SLD OUT, N(双字左移) SRD OUT, N(双字右移) 例: SLD MD0, 2 SRD LD0, 3
4.5.2. 数据循环移位指令 循环左移和循环右移根据所循环移位的数的长度分别又可分为字节型、字型、双字型。 循环移位特点: 数据循环移位指令是在移位的基础上再进行循环操 作,从而到达循环移位的目的。它将第一个移出位移入溢出标志位,同时也将它复制送到最后一个移出位。 例如在循环右移时,移位数据的最右端位移入最左端,同时又进入SM1.1。SM1.1始终存放最后一次被移出的位。
循环移位的类型 (1)字节循环左移和字节循环右移 (2)字循环左移和字循环右移 (3)双字循环左移和双字循环右移
(1)字节循环左移(RLB)和字节循环右移(RRB) 如果所需移位次数大于或等于8,那么在执行循环位前,先对N除以8,其余数为实际移动位数。 如果锁移位数N为0,那么就不执行循环移位 在每次执行循环移位时,溢出位SM1.1的值就是本次循环移动最后一位的值。 如果移位操作的结果为0,则零标志位SM1.0就被置位。 指令格式:RRB OUT,N RLB OUT,N
(2)字循环左移(RLW)和字循环右移(RRW) 如果所需移位次数大于或等于16,那么在执行循环位前,先对N除以16,其余数为实际移动位数。 如果锁移位数N为0,那么就不执行循环移位 在每次执行循环移位时,溢出位SM1.1的值就是本次循环移动最后一位的值。 如果移位操作的结果为0,则零标志位SM1.0就被置位。 指令格式:RRW OUT,N RLW OUT,N
(3)双字循环左移(RLD)和双字循环右移(RRD) 如果所需移位次数大于或等于32,那么在执行循环位前,先对N除以32,其余数为实际移动位数。 如果锁移位数N为0,那么就不执行循环移位 在每次执行循环移位时,溢出位SM1.1的值就是本次循环移动最后一位的值。 如果移位操作的结果为0,则零标志位SM1.0就被置位。 指令格式:RRD OUT,N RLD OUT,N
移位和循环移位举例
3. 位寄存器移位 SHRB,寄存器移位指令。 DATA为数值输入,将该位的值移入移位寄存器;S_BIT为移位寄存器的最低位端;N指定移位寄存器的长度和移位方向(正向移位=N,反向移位=-N)。每次使能输入有效时,整个移位寄存器移动1位。 移位特点:移位寄存器长度在指令中指定,没有字节型、字型、双字型之分。可指定的最大长度为64位,可正也可负。 受影响的SM标志位:SM1.1(溢出) 指令格式:SHRB DATA,S_BIT,N
在每个扫描周期整个移位寄存器移动一位。此移位寄存器由S-BIT和N决定。位移为寄存器的最高位(MSB. b)可通过下面公式计算:MSB 在每个扫描周期整个移位寄存器移动一位。此移位寄存器由S-BIT和N决定。位移为寄存器的最高位(MSB.b)可通过下面公式计算:MSB.b=[(S-BIT的字节号)+([N-1]+(S-BIT的位号))/8的商].[除8的余数]。因S-BIT也是移位寄存器中的一位,故必须减1。 位移为寄存器移位方向由N的正负决定。反移时N为负,输入数据从最高位移入,最低位(S-BIT)移出;正移时N为正,输入数据从最低位(S-BIT)移入,最高位移出。移出的数据放在一处存储器位(SM1.1)。移位寄存器的最大长度是64位,可正可负 例:如果S-BIT是V33.4,N是14,那么MSB.b是V35.1 MSB.b= V33+([14]-1+4)/8=V33+17/8=V33+2(余数为1)=V35.1
4.5.3 数据传送指令 1. 单数据传送 (1)MOVB,字节传送指令 (2)BIR,传送字节立即读指令 (3)BIW,传送字节立即写指令 4.5.3 数据传送指令 1. 单数据传送 (1)MOVB,字节传送指令 (2)BIR,传送字节立即读指令 (3)BIW,传送字节立即写指令 (4)MOVW,字传送指令 (5)MOVD,双字传送指令 (6)MOVR,实数传送指令 2. 块数据传送 (1)BMB,字节块传送指令 (2)BMW,字块传送指令 (3)BMD,双字块传送指令
1. 字节、字、双字和实数传送指令 使能输入有效时,把一个字节、字、双字和实数由IN传送到OUT所指的存储单元。传送之后,原内容保持不变。 指令格式分别为: MOVB IN, OUT MOVW IN, OUT MOVD IN, OUT MOVR IN, OUT 例: MOVB VB0, QB0
2. 字节、字和双字块传送指令 字节块传送指令(BMB)是将从字节(IN)开始的连续N个字节的数据块全部复制到从字节输出单元(OUT)开始的数据块里,指令传送是以一个字节为组进行连续传送,N的数值范围是1-255,最大可传送的字节数为256。 字块传送指令(BMW)是将从字(IN)开始的连续N个字的数据块全部复制到从字节输出单元(OUT)开始的数据块里,指令传送是以一个字为组进行连续传送,其中N的数值范围是1-255,最大可传送的字节数为512。 双字块传送指令(BMD)是将从双字(IN)开始的连续N个双字的数据块全部复制到从双字输出单元(OUT)开始的数据块里,指令传送是以一个双字为组进行连续传送,其中N的数值范围是1-255,最大可传送的字节数为1024。
在执行块传送指令时,输入源字节、字或双字的内容都是不变的。
3 字节交换指令 SWAP,字节交换指令。使能输入有效时,将字型输入数据IN的高字节和低字节进行交换。结果仍放回字IN中。本指令只对字型数据进行处理,指令的执行不影响的特殊存储器位。 使能流输出ENO断开的出错条件:SM4.3(运行时间);0006(间接寻址)。 指令格式: SWAP IN (字节交换) 例: SWAP VW10
4、传送字节立即读、立即写指令 BIR,传送字节立即读指令 使能输入有效时,立即读取单字节物理输入区数据IN,并传送到OUT所指的字节存储单元。但过程映像寄存器并不刷新。 IN的寻址范围:IB OUT的寻址范围:VB、IB、QB、MB、SB、SMB、LB、AC、*VD、*AC、*LD。 指令格式:BIR IN1,OUT 例: BIR IB0,VB10
BIW,传送字节立即写指令 使能输入有效时,从内存地址(IN)中读取数据,并传送到OUT所指的字节存储单元。同时刷新过相应的过程映像寄存器。 IN的寻址范围:IB、QB、VB、MB、SMB、SB、LB、AC 、*VD、*AC、*LD、常数 OUT的寻址范围:QB、 *VD、*AC、*LD 。 指令格式:BIW IN1, OUT 例: BIW IB0, VB10
4.5.4 数据转换指令 1、BCD码与整数之间互换指令 (1)BCD码到整数 4.5.4 数据转换指令 1、BCD码与整数之间互换指令 (1)BCD码到整数 BCDI,使能输入有效时,将BCD码输入数据IN转换成整数类型,并将结果送到OUT输出。输入数据IN的范围为0~9999。 (2)整数到BCD码 IBCD,使能输入有效时,将整数输入数据IN转换成BCD码类型,并将结果送到OUT输出。输入数据IN的范围为0~9999。 上述指令执行结果影响特殊标志位SM1.6(非法BCD码标志位),即输入的源字若不是BCD码,则标志位被置1。
2、双整数转换为实数指令 DTR,使能输入有效时,将32位有符号的双整数输入数据IN转换成32位的实数,并将结果送到OUT输出。 使能流输出ENO断开的出错条件:SM4.3(运行时间);0006(间接寻址)。 指令格式 :DTR IN, OUT 例:DTR AC0, VD100
3、两种取整指令 ROUND,使能输入有效时,将输入的实数IN转换成双整数的值,并将结果送到OUT输出。 如果小数部分大于0.5,就进1位。 该指令影响溢出标志位SM1.1。 使能流输出ENO断开的出错条件:SM4.3(运行时间);0006(间接寻址); SM1.1 (溢出)。 指令格式:ROUND IN, OUT 例: ROUND AC0, VD100
TRUNC指令是将输入的32位实数IN转换为32位有符号的整数值,并存到OUT中去。 只有实数的整数部分被转换。 如果要转换的值是无效的实数,或因太大而无法表示输出,则溢出位SM1.1被置位,同时输出保持上一次的值不变。 该指令影响溢出标志位SM1.1。 使能流输出ENO断开的出错条件:SM4.3(运行时间);0006(间接寻址); SM1.1 (溢出)。 指令格式:TRUNC IN, OUT 例: TRUNC AC0, VD100
4、双整数和整数之间互换指令 DTI,使能输入有效时,将双整数输入数据IN转换成整数类型,并将结果送到OUT输出。输入数据超出整数范围则产生溢出。同时输出保持上一次的值不变。 移位指令影响的特殊存储器位:SM1.1(溢出)。 使能流输出ENO断开的出错条件:SM1.1(溢出);SM4.3(运行时间);0006(间接寻址)。 指令格式:DTI IN, OUT 例: DTI AC0, VW20
ITD,使能输入有效时,将整数输入数据IN转换成双整数类型(符号进行扩展),并将结果送到OUT输出。 使能流输出ENO断开的出错条件:SM4.3(运行时间);0006(间接寻址)。 指令格式:ITD IN, OUT 例: ITD VW0, AC0
5、整数和字节之间互换指令 (1)字节到整数 BTI,使能输入有效时,将字节输入数据IN转换成整数类型,并将结果送到OUT输出。字节型是无符号的,所以没有符号扩展。 使能流输出ENO断开的出错条件:SM4.3(运行时间);0006(间接寻址)。 指令格式:BTI IN, OUT 例: BTI VB0, AC0
(2)整数到字节 ITB,使能输入有效时,将整数输入数据IN转换成字节类型,并将结果送到OUT输出。输入数据超出字节范围(0~255)则产生溢出。 移位指令影响的特殊存储器位:SM1.1(溢出)。 使能流输出ENO断开的出错条件:SM1.1(溢出);SM4.3(运行时间);0006(间接寻址)。 指令格式: ITB IN, OUT 例: ITB AC0, VB10
程序实例 功能:模拟量控制程序中的数据类型转换。将模拟量输入端采样值由整数转换为双整数,然后由双整数转换为实数,再除以一个比例因子得到PLC可以处理的范围内的值。
6、ASCII码与十六进制数 (1) ASCII码转化为十六进制数 ATH,把从输入字符IN开始的,长度为LEN的ASCII码字符串转换为十六进制数,并存到以OUT为首地址的连续输出单元中。有效的ASCII码输入字符是0到9的十六进制数代码值30H到39H,和大写字符A到F的十六进制数代码值41H到46H这些字母数字字符。 ASCII字符串的最大长度为255个字符。 (2)十六进制数转化为ASCII码 HTA,把从输入字符IN开始的,长度为LEN的十六进制数转换为ASCII码字符串,并存到以OUT为首地址的连续输出单元中。可转换的十六进制数的最大个数为255。 以上两条指令影响特殊标志位SM1.7(非法ASCII码标志位)
7、整数、双整数和实数转换为ASCII码 (1)ITA指令:整数转换为ASCII码指令,将一个整数字IN转换成一个ASCII码字符串。格式FMT指定小数点右侧的转换精度和小数点是使用逗号还是点号。转换结果放在OUT指定的连续8个字节中。 格式操作数如下图所示。输出缓冲区大小始终是8个字节,nnn表示输出缓冲区中小数点右侧的数字位数。nnn的范围是0到5。将小数点右侧的位数定为0,使得所显示的数值没有小数点。对于nnn大于5的情况,输出缓冲区会被空格键的ASCII码填冲。c指定是用逗号(c=1)或者点号(c=0)作为整数和小数的分隔符。高4位必须为0。
如图给出了一个数值的例子,其格式为使用点号(c=0),小数点右侧有三位小数(nnn=011)。 输出缓冲区的格式符合以下规则: 正数值写入输出缓冲区时没有符号位。 负数值写入输出缓冲区时以负号(--)开头。 小数点左侧的开头的0(除去靠近小数点的那个之外)被隐藏。 数值在输出缓冲区中是右对齐的。
(2)DAT指令 DTA双整数转换为ASCII码指令,将一个双字IN转换成一个ASCII码字符串。格式操作数FMT指定小数点右侧的转换精度。转换结果存储在从OUT开始的连续12个字节中。 nnn表示输出缓冲区中小数点右侧的数字位数。nnn的合理范围是0到5。将小数点右侧的位数定为0,使得所显示的数值没有小数点。对于nnn大于5的情况,输出缓冲区会被空格键的ASCII码填冲。c指定是用逗号(c=1)或者点号(c=0)作为整数和小数的分隔符。高4位必须为0。
如下图其格式为使用点号(c=0),小数点右侧有四位小数(nnn=100)。 输出缓冲区的格式符合以下规则: 正数值写入输出缓冲区时没有符号位。 负数值写入输出缓冲区时以负号(--)开头。 小数点左侧的开头的0(除去靠近小数点的那个之外)被隐藏。 数值在输出缓冲区中是右对齐的。
(3)RTA指令 RTA实数转ASCII码指令。格式操作数FMT指定小数点右侧的转换精度,小数点是用逗号还是用点号表示和输出缓冲区的大小。转换结果存储在从OUT开始的输出缓冲区中。 结果ASCII码字符的位数(或长度)就是输出缓冲区的大小,它的值可以在3到15字节或字符之间。 S7--200的实数格式支持最多7位小数。试图显示7位以上的小数会产生一个四舍五入错误。
下图是对RTA指令中格式操作数FMT的描述。ssss表示输出缓冲区的大小。输出缓冲区的大小是0、1或者2个字节的大小是不合理的。 nnn表示输出缓冲区中小数点右侧的数字位数。nnn的合理范围为0到5。将小数点右侧的位数定为0,使得所显示的数值没有小数点。对于nnn大于5或者指定的输出缓冲区太小以致于无法存储转换值的情况,输出缓冲区会被空格键的ASCII码填冲。 c指定是用逗号(c=1)或者点号(c=0)作为整数和小数的分隔符。
下图中给出了一个数值的例子,其格式为:使用点号(c=0)、小数点右侧有1位小数(nnn=001)和6个字节的缓冲区大小(ssss=0110)。 输出缓冲区的格式符合以下规则: 正数值写入输出缓冲区时没有符号位。 负数值写入输出缓冲区时以负号(--)开头。 小数点左侧的开头的0(除去靠近小数点的那个之外)被隐藏。 小数点右侧的数值按照指定的小数点右侧的数字位数被四舍五入。 输出缓冲区的大小应至少比小数点右侧的数字位数多三个字节。 数值在输出缓冲区中是右对齐的。
4.5.5 编码和译码指令 1. 编码指令:ENCO。使能输入有效时,将字型输入数据IN的最低有效位(值为1的位)的位号输出到OUT所指定的字节单元的低4位,其他位全部为0。即用半个字节来对一个字型数据16位中的1位有效位进行编码。 使能流输出ENO断开的出错条件:SM4.3(运行时间);0006(间接寻址)。 指令格式: ENCO IN, OUT 例: ENCO AC0, VB0
2. 译码:DECO。使能输入有效时,将输入字节数据IN的低4位所表示的位号对OUT所指定的字单元的对应位置1,其他位置0。即对半个字节的编码进行译码来选择一个字型数据16位中的1位。 使能流输出ENO断开的出错条件:SM4.3(运行时间);0006(间接寻址)。 指令格式:DECO IN, OUT 例: DECO VB0, AC0
4.5.6 七段码显示指令 SEG,七段码指令。使能输入有效时,将字节型输入数据IN的低4位有效数字产生相应的七段码,并将其输出到OUT所指定的字节单元。 OUT的最高位恒为0,其余7位从高到低依次为七段码g、f、e、d、c、b、a。
Thank You ! www.themegallery.com