| 作者 | 主题 |
|---|---|
|
gufazu 游士 经验值:182 发帖数:5 精华帖:1 |
楼主
主题:使用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 |