技术论坛

S7-200 SMART中64位浮点数转32位浮点数

作者 主题
侠圣

经验值: 2900
发帖数: 29
精华帖: 2
主题:【探讨】S7-200 SMART中64位浮点数转32位浮点数


只看楼主 楼主 2021-11-25 17:51:48

1.请教各位大神有无需要改正的错误

2.数据溢出的范围有没有更好的处理方法?

以下是我的程序,欢迎指正

SUBROUTINE_BLOCK LREAL2REAL:SBR0

TITLE=//64位浮点数转32位浮点数

VAR_INPUT

LREAL_8Byte:DWORD; // LREAL_8Byte

END_VAR

VAR_OUTPUT

REAL_4Byte:DWORD; // REAL_4Byte

ERROR:BOOL;

END_VAR

VAR

temp1:WORD;

temp2:WORD;

temp3:BYTE;

temp4:DWORD;

temp5:DWORD;

END_VAR

BEGIN

Network 1 

// //1.把双精度浮点数的高16位读取出来;左移1位,右移5位之后取到双精度浮点数的指数部分;

// //2.双精度浮点数指数减去1023,再加上127得到单精度浮点数的指数部分。

// //1023=0000001111111111(16位)-1023=1111110000000001(16位)

// //  127=0000000001111111(16位)  -127=1111111110000001(16位)

LD     SM0.0

LPS

MOVW   *LD0, LW9

AENO

SLW    LW9, 1

AENO

MOVW   LW9, LW11

SRW    LW11, 5

LRD

-I     1023, LW11

LRD

AW<    LW11, -127

MOVW   -127, LW11

AENO

MOVD   0, LD4

LPP

AW>    LW11, 128

MOVD   0, LD4

=      L8.0

CRET

NOT

+I     127, LW11

Network 2 

// //取出双精度浮点数的高8位,用于取正负符号位。

LD     SM0.0

MOVB   *LD0, LB13

Network 3 

// //1.双精度浮点数指针后移一个字节。

// //2.左移4位,右移8位。

// //3.把单精度浮点数的指数部分加上,再右移1位,得到单精度浮点数的小数部分,空出符号位。

// //4.传送正负符号位

LD     SM0.0

LPS

+D     1, LD0

MOVD   *LD0, LD14

AENO

SLD    LD14, 4

AENO

MOVD   LD14, LD18

SRD    LD18, 8

LRD

MOVB   LB12, LB18

AENO

SRD    LD18, 1

LPP

A      L13.7

=      L18.7

Network 4 

// //输出结果。

LD     SM0.0

MOVD   LD18, LD4

END_SUBROUTINE_BLOCK



为天地立心,为生民立命, 为往圣继绝学,为万世开太平。 ——张横渠
以下网友喜欢您的帖子:

  
重要声明:

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

帖子链接:https://www.ad.siemens.com.cn/club/bbs/post.aspx?a_id=1733612&b_id=64&s_id=0&num=4

侠士

经验值: 1479
发帖数: 160
精华帖: 0
回复:S7-200 SMART中64位浮点数转32位浮点数


只看楼主 1楼 2021-11-27 11:13:01

还有64位浮点数这个说法?

这个数据在smart里面怎么寻址?


 
以下网友喜欢您的帖子:

  
至圣

经验值: 12725
发帖数: 1585
精华帖: 1
回复:S7-200 SMART中64位浮点数转32位浮点数


只看楼主 2楼 2021-11-28 08:47:59

语句表的,,,看不懂啊


努力学习西门子
以下网友喜欢您的帖子:

  
至圣

经验值: 19282
发帖数: 3866
精华帖: 1
回复:S7-200 SMART中64位浮点数转32位浮点数


只看楼主 3楼 2022-05-29 21:37:50

// //1.把双精度浮点数的高16位读取出来;左移1位,右移5位之后取到双精度浮点数的指数部分;

// //2.双精度浮点数指数减去1023,再加上127得到单精度浮点数的指数部分。

// //1023=0000001111111111(16位)-1023=1111110000000001(16位)

// //  127=0000000001111111(16位)  -127=1111111110000001(16位)

----能再详细介绍下1023,127如何来的吗?


// //1.双精度浮点数指针后移一个字节。

// //2.左移4位,右移8位。

// //3.把单精度浮点数的指数部分加上,再右移1位,得到单精度浮点数的小数部分,空出符号位。

// //4.传送正负符号位

----能再详细介绍**释如何来的吗?


弘扬中华传统美德,无私奉献为根本,助人为乐为根源。
以下网友喜欢您的帖子:

  
游侠

经验值: 339
发帖数: 55
精华帖: 0
回复:S7-200 SMART中64位浮点数转32位浮点数


只看楼主 4楼 2023-03-21 00:35:30

这样如何?整数应该可以,浮点数就不太清楚了……

判断正负

  1. 正值,直接取后32位。

  2. 负值,取补码。然后取后32位,再取补码


考虑到二进制实数精度非常差劲(参考https://blog.csdn.net/qq_36915078/article/details/106019023

建议还是安装放大的整数计算吧。最后显示的时候坐下处理好了。比如再触摸屏里面进行小数点位移



 
以下网友喜欢您的帖子:

  
  • 上一页
  • 1
  • 下一页
收起
S7-200 SMART中64位浮点数转32位浮点数
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。