您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > 软件工程 > PLC(FX2N)小数点(浮点)运算编程研究讲义2012
1gPLC(FX2N)浮点(小数点)运算编程研究讲义2012目录PLC(FX2N)浮点(小数)运算编程概要实验一将一个整数转变为一个二进制小数,并存入FX2N的Dn中(产生一个浮点数,存入FX2N的Dn中)实验二将2个二进制小数(或其中一个常数K、H)进行四则运算实验三一个二进制小数,如何在LED数码显示器,或者组态王上显示监控实验四二进制浮点数运算实例实验五任意位浮点数(小数)的输入附1:PLC数值显示(LED数码显示器)含小数点方法附2:PLC(FX2N)中输入小数小结、要点:PLC(FX2N)浮点(小数)运算编程概要1、PLC(FX2N)浮点数(小数)概论:二进制小数概念:二进制小数在PLC(FX2N)中存储占用32位(即占用2个连续编号的Dn、Dn+1),最高位bit31位是符号位(1是负数,0是正数),其他位(bit30~bit0)是数值位,数值位分尾数段和指数段,bit0~bit22共23位是尾数段,bit23~bit30共8位是指数段;注:二进制小数不是按2的补码处理;bit0bit1bit2bit3bit4bit5bit6bit7bit8bit9bit10bit11bit12bit13bit14bit15bit16bit17bit18bit19bit20bit21bit22bit23bit24bit25bit26bit27bit28bit29bit30bit31符号位指数段(8位)尾数段(23位)(1位)DnDn+1二进制小数在PLC(FX2N)中存入形式数值位(31位)浮点数(小数)运算规则概念进行浮点数(小数)运算的各Dn只能是二进制小数、常数K、H;不能是整数或十进制小数;若Dn中数据是整数,需用FLT指令转化为二进制小数形式,再参与运算;若Dn中数据是十进制小数,需用EBIN指令转化为二进制小数形式,再参与运算;若Dn中数据是常数K、H,可直接参与运算,无需转化,因其在参与运算过程中会自动转化;浮点数运算中指令前一般应加D,因参与运算的二进制小数都占有二个连续的Dn、为32位数据;2浮点数运算的种类在PLC(FX2N)中有加9EADD)、减(ESUB)、乘(EMUL)、除(EDIV)、正弦(SIN)、余弦(COS)、正切(TAN)、数类转化(FLT、INT、EBIN、EBCD)、比较(ECMP、CZCP)等等;二进制小数的PLC处理中的监控:因二进制小数数值与指数占用了二个连续的Dn,且难以区别,故难以在组态王等上监控(如LED数码显示器、组态王等)、监控的数据只是乱码,故若要监控需将这些二进制小数用EBCD指令转化为十进制小数,十进制小数占用连续二个Dn,编号大的为指数段,编号小的为尾数值、区别明确,易于监控;如:3130DD;其中D30为尾数值、D31为指数段;注:在FX2N仿真软件上易监控仿真结果;十进制小数概念:十进制小数在PLC(FX2N)中占用32位,在PLC内部存储时采用2个连续编号的Dn、Dn+1,编号小的保存尾数段(Dn),编号大的保存指数段(Dn+1);如:3130DD;其中D30为尾数值、D31为指数段;bit0bit1bit2bit3bit4bit5bit6bit7bit8bit9bit10bit11bit12bit13bit14bit15bit16bit17bit18bit19bit20bit21bit22bit23bit24bit25bit26bit27bit28bit29bit30bit31符号位指数段(16位)尾数段(16位)(1位)DnDn+1十进制小数在PLC(FX2N)中存入形式符号位(1位)十进制小数的运算:十进制小数无法在PLC(FX2N)中直接进行运算处理,需用EBIN指令转化为二进制小数再进行运算;十进制小数的数值监控作用:十进制小数易于数值监控,而二进制小数难以直接监控,直接监控数值往往为乱码,故PLC中二进制小数若需监控,可用EBCD指令将其转化为十进制小数;注:十进制小数在FX2N仿真软件上监控反而出现乱码;二~十进制数相互转化中的误差:在二进制小数转化为十进制小数、或十进制小数转化为二进制小数过程中,易产生一定的误差,因有效数字四舍五入的缘故;因某些自动控制采用浮点数可提高控制精度与品质,故需浮点数运算及处理;因某些自动控制部件只能采用整数,故需将浮点数转化为整数,其转化过程有四舍五入,将产生一定的误差。2、得到一个二进制小数的方法概要(与得到一个十进制小数的方法互为逆运算):方法一:如产生一个二进制小数254.6(往D20中存入一个二进制小数254.6);先往D0中送入一个整数(2546);MOVK2546D0;再用二进制整数转化为二进制小数指令FLT转化得到二进制小数形式,存入D10(2546.00);FLTD0D10;注:FLT指令仅是将整数的表示形式转化为小数的表现形式(2546---2546.00),但3此数值实质上仍是整数;最后将二进制小数形式除以常数10的倍数,得到所需小数后为几位的二进制小数(254.6);DEDIVD10K10D20;注:小数处理指令与整数处理指令类似,只是前面加E,表示属小数处理指令;另外小数数值占二个Dn,为32位,故运算指令前需加D;注:二进制小数因是32位数值,整个数值254.6占了(D21)D20;注:方案一PLC软件监控仿真结果正常;组态王监控为乱码;例程:方法二:如产生一个二进制小数254.6(往D10中存入一个二进制小数254.6);将一个需转化的整数送入D0(2546);MOVK2546D0;;再将一个负数(为小数的位数)送入D1;MOV-1D1;注:上述二个Dn标号必须连续、且存放整数的Dn标号应在前(D0)、存放负数的Dn标号应在后(D1);最后用十进制小数转化为二进制小数指令EBIN转化得到所需的二进制小数(254.6);DEBIND0D10;注:小数处理指令与整数处理指令类似,只是前面加E,表示属小数处理指令;另外小数数值占二个Dn,为32位,故运算指令前需加D;注:二进制小数因是32位数值,整个数值254.6占了(D21)D20;注:方法二PLC软件监控仿真为乱码;组态王监控为乱码;例程:3、得到一个十进制小数的方法概要(与得到一个二进制小数的方法互为逆运算):方法一:将一个二进制小数通过EBCD指令(二进制小数转化为十进制小数指令)转化得到;注:直接结果显示PLC监控仿真为乱码,可在组态王等上用尾数\指数形式显示结果Dn-Dn+1;4方法二:先往Dn中送入一个整数;再往Dn+1中送入一个负数(为小数的位数);注:上述二个Dn标号必须连续、且存入整数的Dn标号在前(Dn)、存入负数的Dn标号在后(Dn+1)。注:直接结果显示PLC监控仿真为乱码,可在组态王等上用尾数\指数形式显示结果Dn-Dn+1;5实验一将一个整数转变为一个二进制小数,并存入FX2N的Dn中(产生一个浮点数,存入FX2N的Dn中)1、具体实例:将一个整数12,转变为二进制小数1.2,存入(D21)D20中;为了在组态王上易监控,再转化为十进制小数存入(D31)D30中;并用D30-D31方式在组态王显示结果。2、程序1段及分析:先将常数(整数)12存入D0中;再用FLT指令将D0中的常数(整数)转变为二进制小数形式(12.00)存入D11(D10)中;最后用二进制小数除法指令DEDIV得到1位小数的二进制小数(1.200)存入(D21)D20中;M8002[MOVK12D0]将常数12存入D0中[FLTD0D10]将D0中整数12转变为二进制带小数12.00并存入D11、D10中[DEDIVD10K10D20]将D11、D10中二进制小数12.00除10结果1.2存入D21、D20中3、程序1段PLC仿真:4、程序2段及分析:为了实现(D21)D20中数值的组态王监控,先用DEBCD指令将其转化为十进制小数、存入(D31)D30中;M8002[DEBCDD20D30]将D21、D20中的二进制小数1.2转变为十进制小数1.2并存入D31、D30中5、程序2段PLC仿真:66、程序3段及分析、PLC仿真:十进制小数(D31)D30中指数段(D31)值作正负值判别,若是负值则求补码,再显示;若是正值则不需处理,直接显示;(指数段作正负判别是为了:若可能出现负数,需求补码处理成原码绝对值----十进制小数的指数一般都是负数,如此处-3);7、程序4段及分析、PLC仿真:十进制小数(D31)D30中尾数段(D30)值作正负值判别,若是负值则求补码,再显示;若是正值则不需处理,直接显示;(尾数段作正负判别是为了:若可能出现负数,需求补码处理成原码绝对值----为负数的十进制小数时才可能出现,此处不是);8、组态王监控结果及说明:在组态王监控中,原数D0=12,将其转化为1.200存入(D31)D30,并用D30-D31方式显示(1199×10-3):79、总的PLC程序及解说、仿真结果:10、几点说明:将一个整数转变为二进制小数形式,用FLT指令;二进制小数形式数在FX2N中:占用二个连续Dn存储,占32位;b0位—b22位(共23位)是尾数位;b23位—b30位(共8位)是指数位;b31位是符号位(1为负数,0为正数);二进制小数不是按2的补码处理;因上述规则,故二进制小数难以直接监控,直接监控会出现乱码;一般可将其转变为十进制小数,再进行监控;其整数后面(小数点后面)为三位小数形式;例如:一个整数12转变为二进制小数形式数,形式为12.000;b0b1b2b3b4b5b6b7b8b9b10b11b12b13b14b15D10b16b17b18b20b21b22b19b23b24b25b26b27b28b29b30b31D11二进制小数尾数段(23位)二进制小数指数段(8位)二进制小数符号位(1位)1:负数0:正数二进制小数(共32位,占2个Dn)8将二进制小数转变为十进制小数形式,用EBCD指令;十进制小数形式在FX2N中:占用二个连续Dn存储,占32位;Dn编号小的是尾数段,Dn编号大的是指数段;Dn的最高位都是符号位;十进制小数是按2的补码处理;例如:一个二进制小数转变为十进制小数存入D31、D30中,其表示形式为:3130DD,即3101199;即D30中存的是尾数段1199;D31中存的是指数段-3。因上述规则,故十进制小数可以用于直接监控;将二进制小数转变为十进制小数时,十进制小数的尾数段为4位,故转变可能会出现一定的误差。b0b1b2b3b4b5b6b7b8b9b10b11b12b13b14b15D30b16b17b18b20b21b22b19b23b24b25b26b27b28b29b30b31D31十进制小数尾数段(16位)十进制小数指数段(16位)十进制小数指数段符号位(1位)1:负数0:正数十进制小数(共32位,占2个Dn)十进制小数尾数段符号位(1位)1:负数0:正数9实验二将2个二进制小数(或其中一个常数K、H)进行四则运算1、具体实例:产生2个二进制小数,(D21)D20=2.4,(D26)D25=1.2,再将这2个二进制小数进行加减乘除等四则运算处理;2、FX2N程序及解说、仿真3、程序说明首先用MOV指令将整数24放入D1中、整数12放入D2中;用FLT指令将D1中的整数24转变为二进制小数形式24.00存入D10中、将D2中的整数12转变为二进制小数形式12.00存入D15中;用DEDIV指令将D10中的二进制小数形式数24.00成为具有一位小数的二进制小数2.400、用DEDIV指令将D15中的二进制小数形式数12.00成为具有一位小数的二进制小数1.200;二进制小数2.400与12.00进行加减乘除四则运算:2.4+1.2=(D31)D30;2.4-1.2=(D36)D35;2.4×1.2=(D41)D40;2.4÷1.2=(D46)D
本文标题:PLC(FX2N)小数点(浮点)运算编程研究讲义2012
链接地址:https://www.777doc.com/doc-7037627 .html