Добрый день, помогите разобраться в причинах ошибок компилятора.
При вызове ФБ присваиваю внутренние переменные (элементы одномерного массива) переменным, объявленным в Главной программе (элементы многомерного массива). Пробовал Очистить все и заново Генерировать код, но компилятор все равно ругается.
123.png
Код ФБ:
Вызов ФБ:Код:FUNCTION_BLOCK Downtime_Chassis_line VAR_INPUT xRedButton: BOOL; //Красная кнопка "Авария" END_VAR VAR_OUTPUT arDownTimeS1: ARRAY [1..TargetVars.iQuantityHoursPerShift] OF WORD; //Массив времени простоев I смена arDownTimeS2: ARRAY [1..TargetVars.iQuantityHoursPerShift] OF WORD; //Массив времени простоев II смена wTotalDownTimeS1: WORD; //Всего простоев за I смену wTotalDownTimeS2: WORD; //Всего простоев за II смену arCountDownTimeS1: ARRAY [1..TargetVars.iQuantityHoursPerShift] OF WORD; //Массив количества простоев I смена arCountDownTimeS2: ARRAY [1..TargetVars.iQuantityHoursPerShift] OF WORD; //Массив количества простоев II смена END_VAR VAR tofDowntime: TimerTOF_Chassis_line; //Таймер времени простоя tDowntime: TIME; //Время работы таймера простоя в милллисекундах dwDowntime: DWORD; wDowntime: WORD; rtClickButton: R_TRIG; //Передний фронт красной кнопки "Авария" ftClickButton: F_TRIG; //Задний фронт красной кнопки "Авария" i: INT; //Итератор цикла END_VAR //Присвоение значения селекторам количества часов в I и II сменах IF (TargetVars.stRTC.sGetFormatTime>=TargetVars.sStartShift1 AND TargetVars.stRTC.sGetFormatTime<TargetVars.sH1_H2Shift1) THEN TargetVars.iHourShift1:=1; //1-ый час ELSIF (TargetVars.stRTC.sGetFormatTime>=TargetVars.sH1_H2Shift1 AND TargetVars.stRTC.sGetFormatTime<TargetVars.sStartBreak11) THEN TargetVars.iHourShift1:=2; //2-ой час ELSIF (TargetVars.stRTC.sGetFormatTime>=TargetVars.sEndBreak11 AND TargetVars.stRTC.sGetFormatTime<TargetVars.sH3_H4Shift1) THEN TargetVars.iHourShift1:=3; //3-ий час ELSIF (TargetVars.stRTC.sGetFormatTime>=TargetVars.sH3_H4Shift1 AND TargetVars.stRTC.sGetFormatTime<TargetVars.sStartLunch1) THEN TargetVars.iHourShift1:=4; //4-ый час ELSIF (TargetVars.stRTC.sGetFormatTime>=TargetVars.sEndLunch1 AND TargetVars.stRTC.sGetFormatTime<TargetVars.sH5_H6Shift1) THEN TargetVars.iHourShift1:=5; //5-ый час ELSIF (TargetVars.stRTC.sGetFormatTime>=TargetVars.sH5_H6Shift1 AND TargetVars.stRTC.sGetFormatTime<TargetVars.sStartBreak12) THEN TargetVars.iHourShift1:=6; //6-ой час ELSIF (TargetVars.stRTC.sGetFormatTime>=TargetVars.sEndBreak12 AND TargetVars.stRTC.sGetFormatTime<TargetVars.sH7_H8Shift1) THEN TargetVars.iHourShift1:=7; //7-ой час ELSIF (TargetVars.stRTC.sGetFormatTime>=TargetVars.sH7_H8Shift1 AND TargetVars.stRTC.sGetFormatTime<TargetVars.sEndShift1) THEN TargetVars.iHourShift1:=8; //8-ой час ELSE TargetVars.iHourShift1:=0; //Сброс селектора количества часов в I смене END_IF IF (TargetVars.stRTC.sGetFormatTime>=TargetVars.sStartShift2 AND TargetVars.stRTC.sGetFormatTime<TargetVars.sH1_H2Shift2) THEN TargetVars.iHourShift2:=1; //1-ый час ELSIF (TargetVars.stRTC.sGetFormatTime>=TargetVars.sH1_H2Shift2 AND TargetVars.stRTC.sGetFormatTime<TargetVars.sStartBreak21) THEN TargetVars.iHourShift2:=2; //2-ой час ELSIF (TargetVars.stRTC.sGetFormatTime>=TargetVars.sEndBreak21 AND TargetVars.stRTC.sGetFormatTime<TargetVars.sH3_H4Shift2) THEN TargetVars.iHourShift2:=3; //3-ий час ELSIF (TargetVars.stRTC.sGetFormatTime>=TargetVars.sH3_H4Shift2 AND TargetVars.stRTC.sGetFormatTime<TargetVars.sStartLunch2) THEN TargetVars.iHourShift2:=4; //4-ый час ELSIF (TargetVars.stRTC.sGetFormatTime>=TargetVars.sEndLunch2 AND TargetVars.stRTC.sGetFormatTime<TargetVars.sH5_H6Shift2) THEN TargetVars.iHourShift2:=5; //5-ый час ELSIF (TargetVars.stRTC.sGetFormatTime>=TargetVars.sH5_H6Shift2 AND TargetVars.stRTC.sGetFormatTime<TargetVars.sStartBreak22) THEN TargetVars.iHourShift2:=6; //6-ой час ELSIF (TargetVars.stRTC.sGetFormatTime>=TargetVars.sEndBreak22 AND TargetVars.stRTC.sGetFormatTime<TargetVars.sH7_H8Shift2) THEN TargetVars.iHourShift2:=7; //7-ой час ELSIF (TargetVars.stRTC.sGetFormatTime>=TargetVars.sH7_H8Shift2 AND TargetVars.stRTC.sGetFormatTime<TargetVars.sEndShift2) THEN TargetVars.iHourShift2:=8; //8-ой час ELSE TargetVars.iHourShift2:=0; //Сброс селектора количества часов в II смене END_IF //Сброс данных о простоях I и II смены IF TargetVars.stRTC.sGetFormatTime=TargetVars.sDataReset THEN FOR i:=1 TO TargetVars.iQuantityHoursPerShift DO arDownTimeS1[i]:=0; arDownTimeS2[i]:=0; arCountDownTimeS1[i]:=0; arCountDownTimeS2[i]:=0; END_FOR wTotalDownTimeS1:=0; wTotalDownTimeS2:=0; END_IF rtClickButton (CLK:=xRedButton); ftClickButton (CLK:=xRedButton); //Включение/отключение Таймера времени простоя tofDowntime (PT:=T#28800S); // Таймер на 8 часов tofDowntime.IN:=rtClickButton.Q; tofDowntime.Reset:=ftClickButton.Q; IF ((TargetVars.stRTC.sGetFormatTime=TargetVars.sStartLunch1 OR TargetVars.stRTC.sGetFormatTime=TargetVars.sStartLunch2 OR TargetVars.stRTC.sGetFormatTime=TargetVars.sStartBreak11 OR TargetVars.stRTC.sGetFormatTime=TargetVars.sStartBreak12 OR TargetVars.stRTC.sGetFormatTime=TargetVars.sStartBreak21 OR TargetVars.stRTC.sGetFormatTime=TargetVars.sStartBreak22) AND tofDowntime.Q) THEN tofDowntime.Pause:= TRUE; END_IF IF ((TargetVars.stRTC.sGetFormatTime=TargetVars.sEndLunch1 OR TargetVars.stRTC.sGetFormatTime=TargetVars.sEndLunch2 OR TargetVars.stRTC.sGetFormatTime=TargetVars.sEndBreak11 OR TargetVars.stRTC.sGetFormatTime=TargetVars.sEndBreak12 OR TargetVars.stRTC.sGetFormatTime=TargetVars.sEndBreak21 OR TargetVars.stRTC.sGetFormatTime=TargetVars.sEndBreak22) AND tofDowntime.Q) THEN tofDowntime.Pause:= FALSE; END_IF IF ftClickButton.Q THEN tDowntime:=tofDowntime.ET; dwDowntime:=TO_DWORD (tDowntime); dwDowntime:=dwDowntime/1000; //Перевод миллисекунд в секунды CASE TargetVars.iHourShift1 OF 1: arDownTimeS1[1]:=arDownTimeS1[1]+TO_WORD (dwDowntime); arCountDownTimeS1[1]:=arCountDownTimeS1[1]+1; 2: arDownTimeS1[2]:=arDownTimeS1[2]+TO_WORD (dwDowntime); arCountDownTimeS1[2]:=arCountDownTimeS1[2]+1; 3: arDownTimeS1[3]:=arDownTimeS1[3]+TO_WORD (dwDowntime); arCountDownTimeS1[3]:=arCountDownTimeS1[3]+1; 4: arDownTimeS1[4]:=arDownTimeS1[4]+TO_WORD (dwDowntime); arCountDownTimeS1[4]:=arCountDownTimeS1[4]+1; 5: arDownTimeS1[5]:=arDownTimeS1[5]+TO_WORD (dwDowntime); arCountDownTimeS1[5]:=arCountDownTimeS1[5]+1; 6: arDownTimeS1[6]:=arDownTimeS1[6]+TO_WORD (dwDowntime); arCountDownTimeS1[6]:=arCountDownTimeS1[6]+1; 7: arDownTimeS1[7]:=arDownTimeS1[7]+TO_WORD (dwDowntime); arCountDownTimeS1[7]:=arCountDownTimeS1[7]+1; 8: arDownTimeS1[8]:=arDownTimeS1[8]+TO_WORD (dwDowntime); arCountDownTimeS1[8]:=arCountDownTimeS1[8]+1; END_CASE CASE TargetVars.iHourShift2 OF 1: arDownTimeS2[1]:=arDownTimeS2[1]+TO_WORD (dwDowntime); arCountDownTimeS2[1]:=arCountDownTimeS2[1]+1; 2: arDownTimeS2[2]:=arDownTimeS2[2]+TO_WORD (dwDowntime); arCountDownTimeS2[2]:=arCountDownTimeS2[2]+1; 3: arDownTimeS2[3]:=arDownTimeS2[3]+TO_WORD (dwDowntime); arCountDownTimeS2[3]:=arCountDownTimeS2[3]+1; 4: arDownTimeS2[4]:=arDownTimeS2[4]+TO_WORD (dwDowntime); arCountDownTimeS2[4]:=arCountDownTimeS2[4]+1; 5: arDownTimeS2[5]:=arDownTimeS2[5]+TO_WORD (dwDowntime); arCountDownTimeS2[5]:=arCountDownTimeS2[5]+1; 6: arDownTimeS2[6]:=arDownTimeS2[6]+TO_WORD (dwDowntime); arCountDownTimeS2[6]:=arCountDownTimeS2[6]+1; 7: arDownTimeS2[7]:=arDownTimeS2[7]+TO_WORD (dwDowntime); arCountDownTimeS2[7]:=arCountDownTimeS2[7]+1; 8: arDownTimeS2[8]:=arDownTimeS2[8]+TO_WORD (dwDowntime); arCountDownTimeS2[8]:=arCountDownTimeS2[8]+1; END_CASE END_IF wTotalDownTimeS1:=arDownTimeS1[1]+arDownTimeS1[2]+arDownTimeS1[3]+arDownTimeS1[4]+arDownTimeS1[5]+arDownTimeS1[6]+arDownTimeS1[7]+arDownTimeS1[8]; wTotalDownTimeS2:=arDownTimeS2[1]+arDownTimeS2[2]+arDownTimeS2[3]+arDownTimeS2[4]+arDownTimeS2[5]+arDownTimeS2[6]+arDownTimeS2[7]+arDownTimeS2[8];
Код:fbDowntime_Chassis_line: ARRAY [1..TargetVars.iQuantityStation_ChassisLine] OF Downtime_Chassis_line; //ФБ Время простоя Линии сборки шасси arrDowntime_Shift1: ARRAY [1..9] OF ARRAY [1..20] OF WORD; //Многомерный массив простоев I смена Линия сборки шасси arrDowntime_Shift2: ARRAY [1..9] OF ARRAY [1..20] OF WORD; //Многомерный массив простоев II смена Линия сборки шасси arRedButtonStation: ARRAY [1..TargetVars.iQuantityStation_ChassisLine] OF BOOL; //Массив красных кнопок "Авария" Станции №1...20 //Вызов ФБ Время простоя Линии сборки шасси FOR i:=1 TO TargetVars.iQuantityStation_ChassisLine DO fbDowntime_Chassis_line [i] (xRedButton:=arRedButtonStation[i], arDownTimeS1[1]=>arrDowntime_Shift1[1][i], arDownTimeS1[2]=>arrDowntime_Shift1[2][i], arDownTimeS1[3]=>arrDowntime_Shift1[3][i], arDownTimeS1[4]=>arrDowntime_Shift1[4][i], arDownTimeS1[5]=>arrDowntime_Shift1[5][i], arDownTimeS1[6]=>arrDowntime_Shift1[6][i], arDownTimeS1[7]=>arrDowntime_Shift1[7][i], arDownTimeS1[8]=>arrDowntime_Shift1[8][i], wTotalDownTimeS1=>arrDowntime_Shift1[9][i], arDownTimeS2[1]=>arrDowntime_Shift2[1][i], arDownTimeS2[2]=>arrDowntime_Shift2[2][i], arDownTimeS2[3]=>arrDowntime_Shift2[3][i], arDownTimeS2[4]=>arrDowntime_Shift2[4][i], arDownTimeS2[5]=>arrDowntime_Shift2[5][i], arDownTimeS2[6]=>arrDowntime_Shift2[6][i], arDownTimeS2[7]=>arrDowntime_Shift2[7][i], arDownTimeS2[8]=>arrDowntime_Shift2[8][i], wTotalDownTimeS2=>arrDowntime_Shift2[9][i]); END_FOR




Ответить с цитированием