技术论坛

 使用SCL在S7-400中实现查表功能

返回主题列表
作者 主题
gufazu
游士

经验值:182
发帖数:5
精华帖:1
楼主    2025-06-03 17:22:00
主题:使用SCL在S7-400中实现查表功能 精华帖 

FC程序

FUNCTION FC2042 : VOID


TITLE = 'Find the Grade can use smaller or biger roll'


VERSION : '1.0'

AUTHOR : GuFazu

KNOW_HOW_PROTECT  


VAR_INPUT

    

    Grade_DB : INT;

    

    IN1 : CHAR;

    IN2 : CHAR;

    IN3 : CHAR;

    IN4 : CHAR;           


END_VAR


VAR_OUTPUT


     Rolling_Fact : REAL;

     

END_VAR

    

VAR_TEMP

        

    DB_Number : WORD;   

    i : INT;             

    j : INT;           

    Tag : INT;   

    Diff : BOOL;

    High_Steel : BOOL; 

    


END_VAR


BEGIN


        DB_Number := INT_TO_WORD(Grade_DB);       

        WORD_TO_BLOCK_DB(DB_Number).DB14  := CHAR_TO_BYTE(IN1);

        WORD_TO_BLOCK_DB(DB_Number).DB15  := CHAR_TO_BYTE(IN2);        

        WORD_TO_BLOCK_DB(DB_Number).DB16  := CHAR_TO_BYTE(IN3);        

        WORD_TO_BLOCK_DB(DB_Number).DB17  := CHAR_TO_BYTE(IN4);   

          

 

        FOR i:= 1 TO 31 DO

            

            Tag := 0;

            

            FOR j:= 0 TO 3 DO

                

                Diff := WORD_TO_BLOCK_DB(DB_Number).DB[ 14 + j ] <> WORD_TO_BLOCK_DB(DB_Number).DB[ 18 + 4 * (i-1) + j ];

                

                IF Diff THEN

                    

                    EXIT; 

                    

                ELSE

                   

                    Tag := Tag +1 ;                    

                               

                END_IF;

                                               

            END_FOR;

            

            IF Tag = 4 THEN                

                             

                EXIT;

                

            END_IF;

            

        END_FOR;

           

            WORD_TO_BLOCK_DB(DB_Number).DW10 := INT_TO_WORD(i); 

            WORD_TO_BLOCK_DB(DB_Number).DW12 := INT_TO_WORD(j);

                        

    

        IF Tag = 4 THEN

              

            HIGH_STEEL := 1;

            WORD_TO_BLOCK_DB(DB_Number).DD4 := WORD_TO_BLOCK_DB(DB_Number).DD[ 142 + 4 * (i-1) ];

            

        

        

        ELSE

        

            HIGH_STEEL := 0;

            WORD_TO_BLOCK_DB(DB_Number).DD4 := WORD_TO_BLOCK_DB(DB_Number).DD0;        

            

        END_IF; 

          

        WORD_TO_BLOCK_DB(DB_Number).D8.0 := HIGH_STEEL;

        Rolling_Fact := DWORD_TO_REAL(WORD_TO_BLOCK_DB(DB_Number).DD4);

       


END_FUNCTION


DB块生产程序:

DATA_BLOCK DB3803


STRUCT 

        General_coefficient : REAL :=1.0;

        Actual_coefficient : REAL;

        High_Steel : BOOL :=False;      

        Grade_No,Grade_Byte : INT;

        Actul_Grade  : ARRAY [1..4] OF CHAR;

      


        Pre_Grades_String : ARRAY [1..31, 1..4] OF CHAR  := 'B','0','T','C',    //1

                                                            'B','0','X','U',    //2

                                                            'B','0','T','L',    //3

                                                            'B','B','C','1',    //4

                                                            'B','C','A','1',    //5

                                                            'B','G','D','2',    //6

                                                            'B','S','P','Q',    //7

                                                            'B','Z','W','Y',    //8

                                                            'B','0','S','P',    //9

                                                            'A','X','P','5',    //10

                                                            'B','J','D','A',    //11

                                                            'B','S','L','3',    //12

                                                            'B','X','H','2',    //13

                                                            'A','X','P','Z',    //14

                                                            'B','0','T','H',    //15

                                                            'C','S','H','C',    //16

                                                            'C','P','T','A',    //17

                                                            'C','X','R','B',    //18

                                                            'C','J','D','A',    //19

                                                            'C','D','T','2',    //20

                                                            'C','C','Q','2',    //21

                                                            'C','0','X','U',    //22

                                                            'C','0','T','L',    //23

                                                            'C','0','S','P',    //24

                                                            'C','0','Q','1',    //25

                                                            'C','0','Q','0',    //26

                                                            'C','X','D','C',    //27

                                                            'C','X','D','T',    //28

                                                            'C','G','D','1',    //29

                                                            'D','D','T','2',    //30

                                                            'D','0','Q','8';    //31

        

        Force_coefficient : ARRAY [ 1..31 ] OF REAL;

        


      

END_STRUCT


BEGIN 


        General_coefficient := 1.0;

        Force_coefficient[1] := 0.3;

        Force_coefficient[2] := 0.3;

        Force_coefficient[3] := 0.3;

        Force_coefficient[4] := 0.3;

        Force_coefficient[5] := 0.3;

        Force_coefficient[6] := 0.3;

        Force_coefficient[7] := 0.3;

        Force_coefficient[8] := 0.3;

        Force_coefficient[9] := 0.3;

        Force_coefficient[10] := 0.3;

        Force_coefficient[11] := 0.3;

        Force_coefficient[12] := 0.3;

        Force_coefficient[13] := 0.3;

        Force_coefficient[14] := 0.3;

        Force_coefficient[15] := 0.3;

        Force_coefficient[16] := 0.35;

        Force_coefficient[17] := 0.35;

        Force_coefficient[18] := 0.35;

        Force_coefficient[19] := 0.35;

        Force_coefficient[20] := 0.35;

        Force_coefficient[21] := 0.35;

        Force_coefficient[22] := 0.35;

        Force_coefficient[23] := 0.35;

        Force_coefficient[24] := 0.35;

        Force_coefficient[25] := 0.35;

        Force_coefficient[26] := 0.35;

        Force_coefficient[27] := 0.35;

        Force_coefficient[28] := 0.35;

        Force_coefficient[29] := 0.35;

        Force_coefficient[30] := 0.35;

        Force_coefficient[31] := 0.35;

        


END_DATA_BLOCK


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