您好,欢迎来到化拓教育网。
搜索
您的当前位置:首页永宏PLC指令篇第5章(5-1~5-12)

永宏PLC指令篇第5章(5-1~5-12)

来源:化拓教育网
第5章:应用指令说明

5.1 应用指令的通则

FBs系列PLC的应用指令可分为输入控制、指令号码名称、操作数及功能输出四部分。而各个指令的输入控制、操作数、及功能输出的数目各不相同(请参考各指令说明)。在FP-08程序书写器上除了常用的T、C、SET、RST四指令及SFC指令有对应的专用按键,可直接按键输入外,其它的应用指令都需以指令号码输入,不能以指令名称输入。如下例:

梯 形 图 例1:单输入指令 15EN(+1)FP-08简码指令 FUN 15 D: R 0 Operation control运算控制 R0CYCarry(FO0)进位(FO0) 例2:多输入指令 计数脉冲 上/下数 Clock 7.UDCTRCKU/DCLRCV :PV :R010CUPCount-Up(FO0) 计数到(FO0)Up/Down countlear control 清C除控制 FUN 7 CV:R 0 PV: 10 注:在本手册的简码指令字段中,凡有实线方框框住的字样(如上例D:、CV:、Pr:等) 是FP-08为方便用户输入而自动显示的操作数名称导引字,非用户所键入的。 5.1.1 输入控制

FBs-PLC除7个无输入控制的应用指令外,其它应用指令至少有一个输入控制,最多为四个。应用指令是按照输入控制信号的组合来决定该指令是否执行,以及执行何种运算。在PRO-LADDER软件包上及梯形图程序印出时,所有的应用指令符号的输入控制及功能输出端子上都有加注英文批注简写,以注明该端子是何种功能控制或输出,以利于记忆和阅读,如上图例2第一个输入标注〝CK↑〞,表示计数脉冲Clock由0→1(升缘)时,该计数器才计数一次,第二个输入标注〝U/D〞斜线上方U表上数Up,下方D表示下数Down,若此输入为1则当计数脉冲CK↑来时,该计数器值会加1,反之若为0则减1,第三个输入标示〝CLR〞,表示清除Clear,即当此输入为1时,该计数器的计数值会被清为0。其它应用指令的输入控制批注请参考各指令说明。

注:无输入控制指令是指该指令需直接接于母线,不能串接输入控制组件,也无功能

输出。该指令本身单独形成一个网络。有MCE、SKPE、LBL、RTS、RTI、FOR、NEXT等7个无输入控制指令,请参考第6及7章各该指令的说明。 所有应用指令的各〝输入控制〞均应有组件连接,否则会出现语法错误。如下图例3,FUN7为三输入的应用指令,在FUN7指令前面的三个组件(ORG X0, LD X1, LD X2)分别对应到FUN7的第一个输入CK↑,第二个输入U/D和第三个输入CLR。

例3:

5-1

梯 形 图 X0CKX1U/DPV :X2CLR107.UDCTRCV :R0CUPFP-08简码指令 ORG X 0 LD X 1 LD X 2 FUN 7 CV :R 0 PV : 10 FUN7有3个输入,故其需要有3个组件

5.1.2 指令号码与衍生指令

FP-08除前述9个指令以专用按键输入外,其它的应用指令都需以〝指令号码〞来输入,在〝指令号码〞后,还可以加上D、P或DP等后缀,而衍生出另外三种不同的指令,现叙述如下:

D:表示Double Word,双字符组(32位)之意。在FBs-PLC中的缓存器都以字符组WORD

(16位)为基本单位,即所有R、T、C缓存器(C200~C255除外)都为16位长度,例如R0、R1、T0......等。如果需32位长度的缓存器,则必须由两个连续的16位缓存器合并起来而形成如R1-R0、R3-R2、......等,针对这种连续两个16位缓存器组成的双字符组缓存器,以该双字符组缓存器的低阶缓存器号码(如R1-R0取R0,R3-R2取R2)加上D表示(如DR0表示R1-R0,DR2表示R3-R2),例如在监视模式(MON)下键入如下的DR0或DWY8,将会显示32位(R1-R0,或WY24-WY8)长度的数值。

B31B16B15B0DR0 R1–R0

R1 ↑ 高阶Word缓存器 B31B16R0 ↑ 低阶Word缓存器 B15B0DWY8 =WY24–WY8 =Y39~Y8 WY24 ↑ 高阶Word缓存器WY8 ↑ 低阶Word缓存器 注:在梯形图或简码指令的表示,为方便区别16位或32位指令,我们在〝指令号码〞

后面加D后缀以表示32位指令,其来源或目的操作数的长度当然也是32位。但在操作数(如S,D......)栏上只标示Double Word的低阶缓存器号码,如6-6页例4中〝被加数〞Sa:R0因该指令FUN11D,有D后缀,故所有来源或目的操作数都无冠上D字,也即Sa为DR0=R1-R0,Sb为DR2=R3-R2....但非来源或目的操作数如指针Pr,数值N,长度L......等则无论D或非D指令都固定只有16位长度,请特别注意。在16位指令因其操作数长度只有一个Word,也正是操作数栏上所标示的缓存器号码,如例1中的D=R0。 P:表示Pulse(脉冲)模式运作,也就是每当输入控制由0→1瞬间(升缘↑)该指令即执行

一次,如上图例1若指令号码加上P码(即FUN 15P),则只有在输入控制信号的上升缘(0→1)时FUN15P才执行一次。若指令号码后无P后缀,则为连续执行模式,即只输入控制为1,PLC每次扫描到该指令都会执行一次,一直到输入控制变为0为止。(所有脉冲输入端都标有〝↑〞符号,如CK↑、EN↑、TG↑.........)。在本手册的应用指令说明中的

5-2

输入叙述有如下的叙述例:

z 当运算控制〝EN〞=1或〝EN↑〞(P 指令)由0→1时,.........

前者即表示非P指令(连续模式)的执行条件,后者即为P 指令(脉冲模式)的执行条件。

下列波形图为上节范例1(FUN15)工作在P模式和非P模式下其执行结果(R0) 的比较。

t为扫描时间1tttttttttt输入控制FUN15P的执行(R0起始值为0)FUN15的执行 (R0起始值为0)20001H0002H30001H0002H0003H0004H0005H0006H DP:表示该指令为32位指令,且为脉冲模式运作。 注:实际控制应用上大部分的应用指令都可使用P 指令,在程序设计时请尽可能使用

P 指令,以节省程序执行时间。

5.1.3 操作数

操作数为指令运算时的参考或写入的对象。可分为只供参考,内容不会因指令运算而改变的来源操作数(Source,简称S)及用来储存运算结果的目的操作数(Destination简称D)两大类。以下就FBs系列PLC应用指令中,主要的操作数名称及性质做说明,并将可当操作数的接点、线圈或缓存器的类别范围分别叙述如下: 󰂄 主要操作数名称及性质: 简 写 S D L N Pr CV PV T M

名 称

来源操作数 S为指令运算中的数据读取、参考的对象,其内容不会因运算而改变,(Source) 如果不只一个以上,则以脚注区分,如Sa、Sb。 目的操作数 用以存放指令运算结果的区域,其原始数据在运算后会破坏,只有能(Destination写入的线圈或缓存器才能当作目的操作数。 长 度 (Length) 数 值 (Number) 指 针 (Point) 当前值 设定值 列 表 (Table) 矩 阵 (Matrix)

用来表示一连串资料或列表(Table)的长度(范围),可以为常数或变量。

用来指定次数,个数(如第N个位)等的固定数字,若不只一个,则以脚注区分如Na、Nb、Ns、Nd等。

用来指定一串数据或列表中的某个数据或缓存器,通常Pr值为可变,故不能为常数或输入缓存器。

用在T、C中,只能为可写入的缓存器。 用在T、C中,只供参考比较用。

列表是一连续缓存器组合的名称,其运作单位是以字组或双字组为单位,如果不只一个,则以脚注区分,如Ta、Tb、Ts、Td等。 矩阵也是一连续缓存器组合的名称,但是其运作单位是以位为单位。如果不只一个则以Ms、Md、Ma、Mb等表示。

除上述主要操作数外,还有用来指定特定用途的操作数,如Fr表频率、ST表堆栈、QU

5-3

表示QUEUE......等,请参阅各指令的说明。

󰂄 操作数类别与范围:应用指令的操作数类别有a.单点(数位)

a. 单点(数位)操作数:

在应用指令中,有单点操作数的(即其操作数只影响某一单点的)仅有SET、RST、

DIFU、DIFD、TOGG五个指令,而且只能对Y△△△(外部输出)、M△△△△(内部及特殊)、S△△△(步进)三类型的继电器运作。下表为可当这五个指令的单点操作数的种类及范围,详细解释请参考这五个指令的说明。

Y 范围 D M SM S 操作数Y0 M0 M1912 S0 ∣ ∣ ∣ ∣ Y255 M1911 M2001 S999

b.缓存器 c.常数

三种

○ ○ ○* ○ 〝○〞符号表D可用该类别的线圈当操作数。在SM字段中〝○〞上方标有〝*〞符号,表示在SM中禁止写入的特殊继电器不得当作D操作数,请参考2-3页〝特殊继电器明细〞。

b.缓存器操作数:

应用指令中的操作数主要为缓存器操作数。缓存器操作数又分为两类,一为原本就以Word或2 Words为单位的缓存器(R、T、C)。另一则为由16或32个单点(X、Y、M、S)组成Word或2 Words的缓存器(WX、WY、WM、WS)。下表为在本手册中用来表示各指令的操作数所能允许的缓存器类别及其范围的范例:

WX 范围 WY WM WS TMR CTRC0 ∣ C255 HRIR OR R3904∣ R3967SR R3968∣ R4167RORR5000∣ R8071DR D0 ∣ D4095 K XR 操作数WX0 WY0 WM0 WS0 T0 ∣ ∣ ∣ ∣ ∣ WX240 WY240 WM16 WS984 T255 R0 R3840∣ ∣ R3839R390316或32位 V,Z 正、负数 P0~P9 S ○ ○ D ○ • • •○ ○ ○ ○ ○ ○ ○○ ○○ ○ ○ ○ ○ ○* ○*○* ○ ○ ○ ○ ○ 〝○〞符号表示可以以该类别的缓存器当操作数。在SR和D交会的字段中,〝○〞符号上方标有〝*〞符号,表示D操作数若为特殊缓存器SR时,应扣除不可以写入的缓存器,请参考2-7页〞特殊缓存器明细〞。

※ R5000~R8071不是规划为只读缓存器时,可当一般缓存器使用(可擦写) 注1:凡有W开头的缓存器(WX、WY、WM、WS)表示此缓存器是由16个单点组成

Word的缓存器。例如WX0表示由X0(位0)~X15(位15)组成的缓存器,WY144表示由Y144(位0)~Y159(位15)所组成的缓存器。但注意单点的号码必须为8的倍数(如0、8、16、24......... 等)才允许。 注2:表中最后一个缓存器(Word),不能当32位操作数,因32位操作数需有连续两个Word的长度才行。 注3:TMR(T0~T255)和CTR(C0~C255)为定时器和计数器专用的缓存器,虽然

也可以当一般缓存器使用,但会造成系统复杂,查错困难,因此除T或C指令外,其它指令应避免写入TMR或CTR。

注4:T0~T255和C0~C199都为16位长度,而C200~C255限定为32位长度,故不

能当16位操作数。

注5:缓存器操作数除如上述直接以缓存器号码(地址)来指定外,对于R0~R8071

范围内的缓存器操作数还可以结合指针缓存器V、Z或P0~P9来作间接寻址指定。利用指针缓存器(XR)作间接寻址的说明请参考下节(5.2节)的范例。 c. 常数操作数:

在16位中的常数范围最大为−32768~32767,32位的范围为−21474838~21474837,而某些指令只能为正常数,因此我们以下列叙述表示16或32位的常数

5-4

范围。

16位正负数 -32768~32767 16位正数 32位正数 16/32位正负数 16/32位正数

0~32767 0~21474837

-32768~32767 或-21474838~21474837

0~32767或0~21474837

32位正负数 -21474838~21474837

此外有某些特定的操作数长度大小不一(如长度L、位数...... N等),将在各该操作数的字段上直接标示范围,请参考个别的指令说明。

5.1.4 功能输出(FO)

简称FO(Function Output)为应用指令运算结果或状态的输出,如同〝输入控制〞一样。在WinProladder及程序印出的梯形图应用指令上,其功能输出上也有英文批注说明该FO为何种功能,如上图例1的CY,例2、例3的CUP及下图例4的D=0、CY、BR都是。功能输出FO最多只有4个(即FO0~FO3),其编号顺序是由上而下,第一个FO为FO0,第二个为FO1,最后一个为FO3。FO状态的取出必须用FO指令(在FP-08程序书写器上有FO专用按键),不使用的功能输出可空着不接任何组件,如下图例4的FO1(CY)即是。

例4:

梯 形 图

简码指令 ORG X 0 FUN 11D Sa: R 0 Sb: R 2 D : R 4 FO 0 OUT Y 0 FO 2 OUT Y 1 X011D.(+)ENSa :RSb :RU/SD :R024CYD=0Y0 Y1BR 当M1919=0时,FO状态只有在该指令被执行时才会更新,然后就一直保持至该指令下

一次被执行时(记忆保持),始由新产出的FO状态所更新。 当 M1919=1 时,应用指令不执行时,FO状态清除为0(无记忆保持)。

5.2 利用指针缓存器(XR)作间接寻址

在FBs-PLC应用指令中,有些操作数可以结合指针缓存器(V或Z)而作间接寻址的指

定(在每个指令说明栏的操作数叙述中会注明)但能够结合指针缓存器作间接地址指定的操作数只限定为R0~R8071范围内的缓存器(其它操作数如单点、常数、D0~D3071等都不能作间接地址指定)。

指针缓存器XR共有12个(V、Z、P0~P9),实际上在FBs-PLC的V缓存器就是特殊缓存器(R3840~R4167)中的R41,而Z缓存器则为R4165。操作数结合指针缓存器作间接寻址的表示方式是原操作数后紧接V或Z来表示:

5-5

原 始 操 作 数 ↓ R100实指

标际

操 暂

作 存

器数

↓↓

V(若V=50) = R150

50 (若V=100)= R200

•• • •

•• • •

100 +

如上图示,只要变更V的值即可变更操作数的地址,利用此功能结合FBs-PLC的应用指令,可以用极简易的指令,实现功能强大、极具效率的控制应用,如下图程序例,只须以一个区块搬移指令(BT_M)即达成诸如停车管理系统的动态区块数据显示。 指针缓存器P0~P9应用说明:

z 在间接寻址应用中,RXXXX缓存器可以结合指针缓存器V、Z和P0~P9作间接寻址应

用;DXXXX缓存器不可以结合指针缓存器V、Z作间接寻址应用,但可以结合P0~P9作间接寻址应用。 z 当RXXXX缓存器要结合V、Z作间接寻址应用时,例如R0要结合V、Z做间接寻址应

用,则所输入的格式为R0V(当V=100时,则指向R100)或R0Z(当Z=500时,则指向R500);而要结合P0~P9作间接寻址应用时,则所输入的格式为RPn (n为0~9)或为RPmPn (m,n为0~9),例如RP5 (若P5内容为100,则指向R100) 或RP0P1(若P0内容为100,P1内容为50,则指向R150)。 z 当DXXXX缓存器要结合P0~P9作间接寻址应用时,则所输入的格式为DPn (n为0~

9)或为DPmPn (m,n为0~9),例如DP3 (若P3内容为10,则指向D10) 或DP4P5(若P4内容为100,P5内容为1,则指向D101)。 z P0~P9指针缓存器可同时结合运用,例如P2=20、P3=30,当RXXXX或DXXXX缓存

器一次结合两个指针缓存器时,RP2P3就会指向R50,DP2P3就会指向D50;也就是说两个指针值之间的关系是相加的。

08.MOVENS :D :100P2M1924X23EN103.BT_MTs :Td :L :RP2R20004X23EN11P.(+)Sa :Sb :U/SD :4P2P2CYBRD=01. 开机时M1924开始脉冲将100搬入指标

暂存器P2中。 2. 当X23由0Æ1时,Fun103将由R100(因

为P2=100)开始,一次4个暂存器的长度,按照顺序搬到R2000。也就是说第一次将R100~R103搬到R2000~R2003,第二次将R104~R107搬到R2000~R2003,第三次将R108~R111搬到R2000~R2003依次类推。 3. Fun11用来将指标每次增加4个word

用,也就是X23每“ON”一次,P2的指标值就加上4。

5-6

间接定位程序范例:

梯 形 图 103.BT_MENTs :R100 VTd :R2000L :4简码指令 ORG SHORT FUN 103 Ts: R100V Td: R2000 L: 4

(V=0) 住户1 ˙ ˙ ˙ PLC内部预存 的住户资料R100R101R102姓楼层门号 电话号码 车牌号码 姓名 楼层门号 电话号码 车牌号码 ˙ ˙ ˙ ˙ ˙ ˙ 指针缓存器V { 姓 住户2感应站 名 4 名 终端显示器 ××小区住户停车系统住户姓名: (R2000)电话号码: (R2001)车牌号码: (R2002)车位号码: (R2003) R103 R104R105R106 (V=4) 住户2 ˙ ˙ ˙ ˙ ˙ ˙ ˙ ˙ ˙ R107 显示暂存区 楼层号码 电话号码 车牌号码 Rnnn姓 R2000 R2001名 R2002 (V=396) 住户100 楼层号码 R2003电话号码 车牌号码

程序说明: 上例假设某小区住户的自动化停车场管理系统,共有100个住户停车位,每个

住户都有1组基本资料,分别为住户姓名,电话号码,车牌号码,停车位号码等4个,每组数据如上图标占用连续4个PLC内部缓存器,共占用R100~R499等400个缓存器,每个住户都有一个不同卡号的卡片,以供进出口门禁及停车场进出的感应通行使用,其卡号为0,4,xxxxxx,396等100种,在PLC感应到卡号后,将它存入指针缓存器〝V〞,而在管理员处的终端机(LCD或CRT)显示数据则固定由PLC内部的R2001~R2003来抓取并显示,如本例感应到住户2的卡片,其值=4,因此V缓存器=4,PLC立即将R104~R107的数据搬移到显示暂存区(R2000~R2003),因此管理员处的终端机可在感应到住户2的卡片的同时,立即将其数据显示在终端机上。

警告

1. 运用指针缓存器作间接寻址的应用虽然功能强大、弹性方便,但相对地V、

Z内容值的任意变化可能对正常数据区的错误写入有着极大的杀伤力,因此用户在使用时应特别小心。 2. 在间接寻址所能寻址的数据缓存器(R0~R8071)范围中,缓存器R3840~

R4167等的328个缓存器(即IR,OR,SR)为系统或I/O用的重要缓存

5-7

器,任意对此等缓存器的写入,将可能使系统或I/O错误,造成重大的灾害。鉴于V、Z值对缓存器地址变化的灵活变化,用户可能不易察觉或掌握,因此FBs-PLC对间接寻址的写入动作会自动检查写入目的(Destination)是否在上述的R3840~R4067范围内,若是则不执行该写入动作,并将〝间接寻址不合法写入〞旗标M1969设为1。若应用上确实需要对R3840~R4067的缓存器作写入,请使用非间接寻址的指令来执行。

5.3 数目系统

5.3.1 二进制数值及其术语

二进制(Binary)为数字计算器的基本数目系统,PLC是由数字计算器所构成,自然也采用

二进制,为便于表示及掌握二进数值,首先需了解如下的术语:

z 位:(Bit简写B,如B0,B1......... )位为二进制数值的最基本单位,其状态非1即0。 z 位数:(Nibble简写NB,如NB0,NB1......... )由连续的4个位所组成(如B3~B0)可

用来表示一个位数的10进制数字0~9或16进制的0~F。 z 字节:(Byte简写BY,如BY0,BY1,......... )是由连续的两个位数所组成(也就是8个

位,例如B7~B0)。可表示16进制的两个位数值00~FF。 z 字符组:(Word简写W,如W0,W1,......... )是由连续的两个位所组成(也就是16个位例如B15~B0)可表示16进制的4个位数值0000~FFFF。 z 双字符组:(Double word简写DW,如DW0,DW1......... )是由连续的两个字字节所组成

(即32个位,例如B31~B0)可表示16进制的8个位数值00000000~FFFFFFFF。

←双字符组

W1 W0 ←字符组

DW BY3 BY2 BY1 BY0 ←字节 NB7 NB6 NB5 NB4 NB3 NB2 NB1 NB0 ←位数

B31 B30 B29 B28 B27 B26 B25 B24 B23 B22B21 B20 B19 B18 B17B16B15B14B13B12B11B10B9B8B7B6B5B4 B3 B2 B1 B0 ←位

z 浮点数:(Floating Point Number)也是由连续的两个字字节所组成。浮点数所能表示的最大

范围为±(1.8*10-38~3.4*1038),有关详细的格式说明请参考5.3.6节。

5.3.2 FBs-PLC的数码

FBs-PLC内部的数值运算或储存全部采用二进制(Binary),因此外界输入PLC内部的数值必须转换成二进制码PLC才能处理,同样地从PLC内部取出的数值结果也都为二进制,因此无论FP-08或WinProladder其所有数目最终都须化成二进制才能输入PLC。但因二进制极难输入和阅读,因此FP-08或WinProladder在人机界面(数值输入或显示)部分都提供用户以人们熟悉的10进值(Decimal)或16进制(Hexadecimal)来输入或显示,但实际上的数值处理全部都以二进制码来进行。

注:若您的数值输入或显示不是通过FP-08或WinProladder(例如以指拨开关或7段显

示器通过I/O点而输入PLC或从PLC取出),那么就得自己借着梯形图程序指令来处理二进制和10进制之间的转换,这样虽不通过FP-08或WinProladder也能以10进制来输入及得到10进制的输出显示,请参考FUN20(BIN→BCD)和FUN21(BCD→BIN)的说明。

5-8

5.3.3 数值的范围

如前面叙述FBs-PLC内部全部采用二进制(BCD值只是为了适合人们习惯,而由二进制转成适合人们阅读的显示用数码而已)。在PLC的数值有16位、32位以及浮点数三种数值,分别能表示如下的范围。

16位 -32768~32767 32位 -21474838~21474837 浮点数 ±(1.8*10-38~3.4*1038)

5.3.4 数值的表示 (初学者请跳过本节)

以下各节将叙述16位及32位数值的表示方式与格式。以供用户能深入了解数值的运算过程及结果而能应付各种复杂的应用需求。

无论是16位或32位的数值,都以其最高位MSB(16位的B15,32位的B31)表示该数值的正负(0:正数,1:负数),剩下的位(B14~B0或B30~B0)才真正用以表示数值大小,现以16位为例说明如下:(32位的作法也一样,只是长度倍增而已)。

16384 8192 4096 2048 1024 512 256 128 32 16 8 4 2 1 0:正数

12345 (10进值)

Ö 3039H

B15 B0 (1进值) 8192+4096+32+16+8+1=12345

0 0 11000000111001Ö

如上例,无论16位或32位,其二进制的位由最低位LSB(B0)开始,B0代表1,B1代表2,B2代表4,B3代表8,.......依此类推,而其数值则为所有为1的位所代表数值的总和。

5.3.5 负数的表示及取得

(初学者请跳过本节)

如前述当MSB为1,则此数为负数,FBs-PLC的负数是以〝2的补码〞(2'S Complement)来表示。所谓2的补码,是将等值正数的所有位(B15~B0或B31~B0)倒相(为1的位变0,为0的位变1,也就是所谓1的补码),然后再加上1即变成2的补码,现以上例正数12345,取其2的补码(即-12345)为例说明如下:

12345

Ö

0 0 11000000111001

ÖÖÖ

3039H CFC6H

12345的1 Ö 1 1 的补码

+ 12345的2 的补码 (- 12345)

00111111000110

1

CFC7H

Ö

1 100111111000111

(初学者请跳过本节)

5.3.6 浮点数的表示

永宏FBs浮点数格式同IEEE-754所制定的标准。储存的格式共占用32个位(双字符组) 其说明如下所示:

浮点数 = (正/负)数 + 指数 + 小数

5-9

▲ 若(正/负)位的值为0,表示此浮点数为正值,反之如果(正/负)位的值为1,代表该浮点数

为负值。 ▲ 指数表示法为超127法,举例来说,如果指数的值为128就代表1次方,指数的值为129 就代表2次方......... 依此类推。如果想表示指数为负的值,则126就是-1次方,125为 -2次方......... 依此类推。

▲ 小数字数有23bits,用来存放小数点以下的数字,正规化格式要求小数点之前一个位数, 必须为1,且不必储存(称为隐藏位)。 z 整数转换浮点数的规则为如下:

S N = ( -1) * 2 (E -127) * ( 1.M ) 0 < E < 255

转换范例1 :

1 = ( -1 ) 0 * 2 ( 01111111 ) * ( 1.000....... 0 )

此范例中(正/负)数字元为0,指数部分为127(超127法)=01111111,隐藏位为1,而小 数字数则全部为0,因此经过转换后的浮点数表示法如下所示: Code( 1 ) =

= 3F800000H

转换范例2 :

0.5 = ( -1 ) 0 * 2 ( 01111110 ) * ( 1.000....... 0 )

此范例中(正/负)数字元为0,指数部分以超127法表示为126=01111110(因指数部分为-1,126-127=-1,故指数部份在超127法中要转换成126),隐藏位为1,而小数字数则全部为0,因此经过转换后的浮点数表示法如下所示: Code( 0.5 ) =

= 3F000000H 转换范例3 :

-500.125 = ( -1 ) 1 * 2 ( 10000111 ) * ( 1. 11110100001000000000000)

此范例中(正/负)数字元为1,指数部分以超127法表示为135=10000111 (因指数部分为8,135-127=8,故指数部份在超127法中要转换成135),隐藏位部分为1,而小数字数则为11110100001000000000000,因此经过转换后的浮点数表示法如下所示:

Code( -500.125 ) =

= C3FA1000H

5.4 操作数递增(减)的溢位与欠位

(初学者请跳过本节)

16位及32位操作数所能表示的数字极限正数最上限为32767和21474837,而负数的最下限为-32768和-21474838。当对一个操作数作递增或递减动作(例如计数器上/下数或使缓存器值+1或−1时,若结果使其数值超过该操作数正数的最上限,则称为溢位(Overflow:OVF),溢位的结果会使数值循环至负数的最下限(例如16位上限32767再加1,变成-32768)。若递增(减)结果使其数值小于负数最下限,则称为欠位(Underflow:UDF),而欠位的结果会使数值循环至正数的最上限(例如-32768若再减1变成32767),如下表所示。在FBs-PLC的递增指令的功能输出(FO)都有溢位或欠位的旗号输出,可作串联(Cascade)应用而获得超过16或32位的运算结果。

5-10

递增(减)结果溢/欠位 16 bit操作数 -32767 -32768 32767 32766 32765 -32767 -32768 32767 32766 32765 32 bit操作数 递增 递减

+(-)

UDF=1 OVF=1 OVF=1 -21474836 -21474837 -21474838 21474837 21474836 -21474837 -21474838 21474837 21474836 21474835 UDF=1 5.5 加/减运算的进位与借位溢/欠位的发生是针对单一个操作数的递增/减致使该操作数的值超出其所能表示的正/负值极限时,产生溢/欠位旗号。而进/借位则不同于溢/欠位,首先其必有两个操作数作加(减)运算,而得到和(差)结果与进/借位旗号。因被加(减)、加(减)及和(差)的位数(bit数)都一样(16 bit或32bit),因此相加(减)的结果将可能造成和(差)的值超出16或32 bit,因此需以进(借)位旗号配合和(差)操作数来表示真正的数值。而进位旗号发生在加(减)结果超出该和(差)操作数所能表示的正值最大极限(32767或21474837)时,而借位则发生在加(减)结果超出该和(差)操作数所能表示的负值最大极限(-32768或-21474838)时,因此加(减)运算后的真正结果为进(借)位再加上和(差)操作数的值,FBs-PLC的加减指令的功能输出(FO)都有进位与借位旗号输出,可供您获得真正的结果。

MSB ↓

LSB↓

被加(减)操作数

加(减)操作数 和(差)操作数

16 bit/32 bit

16 bit/32 bit 16 bit或32 bit

1-bit 进(借)位

因FBs-PLC的数值运算都采用2的补码,因此加(减)运算所得的和(差)值的负值的表示将不同于我们一般习惯的负值表示方式。运算结果为负值时,其和(差)操作数将永远不可能出现0值。进位旗号代表正值32768(21474838),借位旗号则代表负值-32768(-21474838)。

5-11

负值 (MSB=1) 零旗号 =1 ,-2,-1,0,1,2, 正值 (MSB=0) xxx,-2,-1,-32768, (-21474838) ,32767,0,1,xxx (21474837) 进位旗号=1 =借位旗号1 x x B=0 B=0 B=0 B=0 B=0 MSB C=1 C=1 C=0 C=0 C=0 C=0 C=0 C=0 C=0 C=0 C=0 C=0 C=0 C=0 C=0 Z=Z=Z=Z=Z=0 0 0 0 0 ↓ 0 0 0 0 00 0 0 0 00 1 1 1 10 1 1 1 10 1 1 1 10011100111B=0 B=0 B=0 B=0 B=0 Z=0 Z=0 Z=1 Z=0 Z=0 0 0 0 1 1 0 0 0 1 1 0 0 0 1 1 0 0 0 1 1 000110001100011B=0 B=0 B=0 B=1 B=1 x x Z=0 Z=0 Z=0 Z=0 Z=0 1 1 1 1 1 0 0 0 1 1 0 0 0 1 1 0 0 0 1 1 000110001100011x x0000111111xx x x x0000001111xx x x x0000001111xx LSB001110011100111001110011100110↓101010001100011000110001100011100110101000011000110001100011000111001101010x x 32769 32768 32767 32766 32765 正值x x x x x 2 1 0 -1 -2 x x x x x -32766 -32767 负值-32768 -32769 -32770 x x C = Carry B = Borrow Z = Zero

5-12

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- huatuo9.cn 版权所有 赣ICP备2023008801号-1

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务