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

已锁定

夜听雨

  • 帖子

    28
  • 精华

    2
  • 被关注

    11

论坛等级:侠圣

注册时间:2010-06-13

黄金 黄金 如何晋级?

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

2643

4

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


S7-200 SMART中64位浮点数转32位浮点数 已锁定
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-200 SMART

共有7539条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

top
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。