您好!欢迎光临工博士商城

西门子经销商

产品:2486    

咨询热线:18621383637

您当前的位置:首页 » 新闻中心 » 西门子TIA中如何把浮点64位转换为32位
产品分类
新闻中心
西门子TIA中如何把浮点64位转换为32位
发布时间:2020-08-27        浏览次数:505        返回列表
 
       TIA中已经支持64位高精度的浮点格式,当S7-1200/1500与S7300/400通讯的时候,这些高精度的浮点数是无法在300/400里计算,必须转成32为浮点数,剑指工控里很多网友都不知道该如何转换,那在这里我们首先看一下32位浮点数的格式。



而双精度(64位)浮点数的结构与单精度相仿
 
名称 长度 位置
 
符号位 Sign (S) : 1bit (63)
 
指数部分Exponent (E) : 11bit (62-52)
 
尾数部分Mantissa (M) : 52bit (51-0)
 
双精度的指数部分(E)采用的偏置码为1023
 
解决方法:
 
双精度浮点和单精度浮点主要区别就是:
 
1、指数,双精度指数11位,***大值为308计算为(指数11位形成的数量-1027),单精度浮点数8位,***大38,计算(8位形成的数值-127),双精度转单精度的指数计算是(指数11位形成的数值-1027)+127.
 
2、小数,无论单精度还是双精度小数部分计算方式一样,所以可以直接从双精度浮点小数中截取前23位就可以了。
 
算法代码:
 
FUNCTION FC1:VOID
 
TITLE=‘ Double Float to Single Float’
 
NAME=Jiansiting
 
VAR_INPUT
 
DF_INPUT:ANY;
 
END_VAR
 
VAR_OUTPUT
 
F_OUTPUT:REAL;
 
RETVAL:WORD;
 
END_VAR
 
VAR_TEMP
 
HFORS7:BYTE;
 
DATA_TYPE:BYTE;
 
REP_FACTOR:WORD;
 
DB_NUMBER:WORD;
 
MEM_AREA:BYTE;
 
TEMP1:BYTE;
 
ADDR_1:BYTE;
 
ADDR_2:BYTE;
 
ADDR_3:BYTE;
 
ADDR_4:BYTE;
 
OUT_T:REAL;
 
AD_T:DWORD;
 
END_VAR
 
BEGIN
 
L 0.000000e+000
 
T #OUT_T
 
L P#DF_INPUT
 
LAR1
 
L B[AR1,P#0.0]
 
T #HFORS7
 
L B[AR1,P#1.0]
 
T #DATA_TYPE
 
L B[AR1,P#2.0]
 
T #REP_FACTOR
 
L B[AR1,P#4.0]
 
T #DB_NUMBER
 
L B[AR1,P#6.0]
 
T #MEM_AREA
 
L B#16#0
 
T #ADDR_1
 
L B[AR1,P#7.0]
 
T #ADDR_2
 
L B[AR1,P#8.0]
 
T #ADDR_3
 
L B[AR1,P#9.0]
 
T #ADDR_4
 
L #MEM_AREA
 
L B#16#80
 
JC ERR0
 
L #MEM_AREA
 
L B#16#81
 
JC ERR1
 
L #MEM_AREA
 
L B#16#82
 
JC ERR2
 
L #MEM_AREA
 
L B#16#83
 
JC MAR
 
L #MEM_AREA
 
L B#16#84
 
JC DBAR
 
L #MEM_AREA
 
L B#16#85
 
JC ERR5
 
L #MEM_AREA
 
L B#16#86
 
JC ERR6
 
L #MEM_AREA
 
L B#16#87
 
JC ERR7
 
MAR: LAR1 LD 8
 
L MW[AR1,P#0.0]
 
SLW 1
 
SRW 5
 
L 1023
 
-I
 
L 128
 
>I
 
JCB ERRA
 
TAK
 
L 127
 
+I
 
SLW 7
 
L LW 12
 
OW
 
T LW 12
 
L MD[AR1,#P1.0]
 
SLD 4
 
SRD 9
 
L #OUT_T
 
OD
 
T #OUT_T
 
A M[AR1,P#0.7]
 
= L 12.7
 
JU COMP
 
DBAR: OPN [#DB_NUMBER]
 
LAR1 LD 8
 
L DBW[AR1,P#0.0]
 
SLW 1
 
SRW 5
 
L 1023
 
-I
 
L 128
 
>I
 
JCB ERRA
 
TAK
 
L 127
 
+I
 
SLW 7
 
L LW 12
 
OW
 
T LW 12
 
L DBD[AR1,P#1.0]
 
SLD 4
 
SRD 9
 
L #OUT_T
 
OD
 
T #OUT_T
 
A DBX[AR1,P#0.7]
 
= L 12.7
 
COMP: L #OUT_T
 
T #F_OUT
 
SET
 
SAVE
 
BE
 
ERR0: L W#16#8000
 
JU END
 
ERR1: L W#16#8001
 
JU END
 
ERR2: L W#16#8002
 
JU END
 
ERR3: L W#16#8003
 
JU END
 
ERR5: L W#16#8005
 
JU END
 
ERR6: L W#16#8006
 
JU END
 
ERR7: L W#16#8007
 
JU END
 
ERRA: L W#16#8100
 
JU END
 
END: T #RETVAL
 
NOP 0
 
END_FUNCTION

此文来源于网络  2020.08.27


想了解更多详情点击:西门子经销商



 

联系热线:18621383637   联系人:申经理 联系地址:上海市宝山区富联一路98弄6号

技术和报价服务:星期一至星期六8:00-22:00 西门子经销商