STL转成SCL

已锁定

妥妥哥

  • 帖子

    99
  • 精华

    4
  • 被关注

    41

论坛等级:侠士

注册时间:2013-01-09

黄金 黄金 如何晋级?

STL转成SCL

2133

0

2017-08-23 15:35:53

项目中遇到REAL计算输出成#NaN的情况,PCS7中用一个FC260来处理的,解密FC260得出的STL如下:


      SET   

      SAVE  

      =     L     16.1

      L     0

      T     #ErrNum

      L     #In

      T     #theREAL

      L     #theREAL

      L     DW#16#7F800000

      AD    

      T     #exponent

      TAK   

      L     DW#16#400000

      AD    

      T     #fraction_1

      TAK   

      L     DW#16#3FFFFF

      AD    

      T     #fraction_2

      L     #theREAL

      T     #RET_VAL

      L     #exponent

      L     DW#16#7F800000

      ==D   

      JCN   A7d0

      L     #fraction_1

      L     DW#16#0

      <>D   

      L     #fraction_1

      L     DW#16#0

      =     L     16.2

      ==D   

      L     #fraction_2

      L     DW#16#0

      =     L     16.3

      <>D   

      A     L     16.3

      O     L     16.2

      JCN   A7d1

      L     3

      T     #ErrNum

      CLR   

      =     L     16.1

      JU    A7d2

A7d1: L     #fraction_1

      L     DW#16#0

      ==D   

      L     #fraction_2

      L     DW#16#0

      =     L     16.2

      ==D   

      A     L     16.2

      JCN   A7d7

      L     1

      T     #ErrNum

      L     #theREAL

      L     0.000000e+000

      >R    

      JCN   A7d4

      L     3.402822e+038

      T     #RET_VAL

      JU    A7d2

A7d4: L     -3.402822e+038

      T     #RET_VAL

A7d2: JU    A7d7

A7d0: L     #exponent

      L     DW#16#0

      ==D   

      L     #fraction_1

      L     DW#16#0

      =     L     16.2

      <>D   

      L     #fraction_2

      L     DW#16#0

      =     L     16.3

      <>D   

      O     L     16.3

      A     L     16.2

      JCN   A7d7

      L     2

      T     #ErrNum

      L     0.000000e+000

      T     #RET_VAL

A7d7: CLR   

      A     L     16.1

      SAVE  

      BE    


根据个人理解转成SCL如下:

FUNCTION "ChkREAL" :REAL 

VAR_INPUT 

    IN:REAL; 

END_VAR 

VAR_OUTPUT 

    ErrNum:INT; 

END_VAR 

VAR_TEMP 

    theREAL:REAL; 

    exponent:DWORD;

    fraction_1:DWORD;

    fraction_2:DWORD; 

END_VAR

ErrNum := 0;

theREAL := IN;

REALChk :=  theREAL; 

exponent := REAL_TO_DWORD(theREAL) AND 16#7F800000;

fraction_1:= REAL_TO_DWORD(theREAL) AND 16#400000;     

fraction_2:= REAL_TO_DWORD(theREAL) AND 16#3FFFFF;


IF exponent = 16#7F800000 THEN  

    IF fraction_2 <> 16#0 & fraction_1 = 16#0 OR fraction_1 <> 16#0 THEN  

        ErrNum := 3; 

    ELSIF fraction_1 = 16#0  & fraction_2 = 16#0 THEN  

        ErrNum := 1;  

        IF theREAL > 0.0 THEN 

            REALChk :=  3.402822e+038;

        ELSE 

            REALChk :=  -3.402822e+038; 

        END_IF;

    END_IF;     

ELSE 

    IF (fraction_2 <> 0 OR fraction_1 <> 0) & exponent = 0 THEN  

        ErrNum := 2;

        REALChk :=   0.0; 

    END_IF;     

END_IF;     

END_FUNCTION 


求教大神转换是否准确,谢谢

STL转成SCL 已锁定
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-300/400

共有54716条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

  • 分享

  • 只看
    楼主

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