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