SCL对Graph的背景数据块操作,应该对大家学习SCL有点帮助

已锁定

龚生

  • 帖子

    35
  • 精华

    0
  • 被关注

    6

论坛等级:游侠

注册时间:2016-11-20

普通 普通 如何晋级?

SCL对Graph的背景数据块操作,应该对大家学习SCL有点帮助

1005

0

2017-05-03 21:42:05

本来打算写点什么的,算了不写了,初版,凑活看吧,终结版我也会发出来,和大家共享吧!


FUNCTION FC2008 : VOID


VAR_INPUT
    DB_Graph,DB_Save,Target:INT;
END_VAR

VAR_IN_OUT
    //
END_VAR

VAR_OUTPUT
    ERR:WORD;
END_VAR

VAR_TEMP
    T_CNT,S_CNT,INSTANCE_DB:INT;
    DB_LENGTH:WORD;
    RET_CODE:INT;
    WRITE_PROT:BOOL;
    Index,Index_Byte,Index_Bit:INT;
END_VAR

    // Statement Section
    ERR:=W#16#0000;
    T_CNT:=0;
    S_CNT:=0;
    INSTANCE_DB:=0;
       
    //首先判断Save数据块在不在
    DB_LENGTH:=W#16#0000;
    RET_CODE:=0;
    WRITE_PROT:=0;
        
    RET_CODE:=TEST_DB(DB_NUMBER :=INT_TO_WORD(DB_Save)  // IN: WORD
            ,DB_LENGTH :=DB_LENGTH  // OUT: WORD
            ,WRITE_PROT :=WRITE_PROT  // OUT: BOOL
            ); // INT
    
    IF RET_CODE <> 0 THEN
        ERR:=W#16#0001;
        RETURN;
    END_IF;
    
    //判断Graph数据块在不在
    DB_LENGTH:=W#16#0000;
    RET_CODE:=0;
    WRITE_PROT:=0;
    
    RET_CODE:=TEST_DB(DB_NUMBER :=INT_TO_WORD(DB_Graph)  // IN: WORD
            ,DB_LENGTH :=DB_LENGTH  // OUT: WORD
            ,WRITE_PROT :=WRITE_PROT  // OUT: BOOL
            ); // INT
    
    IF RET_CODE <> 0 THEN
        ERR:=W#16#0002;
        RETURN;
    END_IF;
    
    //求出Graph里面的TS数值       
    T_CNT:=WORD_TO_INT(BYTE_TO_WORD(WORD_TO_BLOCK_DB(INT_TO_WORD(DB_Graph)).DB[WORD_TO_INT(DB_LENGTH)-31]));
    S_CNT:=WORD_TO_INT(BYTE_TO_WORD(WORD_TO_BLOCK_DB(INT_TO_WORD(DB_Graph)).DB[WORD_TO_INT(DB_LENGTH)-28]));

    INSTANCE_DB:=10+16+16*T_CNT+32+1;
    
    FOR Index:=1 TO S_CNT BY 1 DO
        
        Index_Byte:=0;
        Index_Bit:=0;
        Index_Byte:=Index / 8;
        Index_Bit:=(Index MOD 8)-1;
        
        IF (Index MOD 8) = 0 THEN
            Index_Byte:=Index_Byte-1;
            Index_Bit:=7;
        END_IF;

        WORD_TO_BLOCK_DB(INT_TO_WORD(DB_Save)).DX[Target+Index_Byte,Index_Bit]:=WORD_TO_BLOCK_DB(INT_TO_WORD(DB_Graph)).DX[INSTANCE_DB+32*(Index-1),0];
        
    END_FOR;
        
    RETURN;
    
END_FUNCTION
SCL对Graph的背景数据块操作,应该对大家学习SCL有点帮助 已锁定
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-300/400

共有54658条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

  • 分享

  • 只看
    楼主

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