Добрый день, помогите разобраться в причинах ошибок компилятора.
При вызове ФБ присваиваю внутренние переменные (элементы одномерного массива) переменным, объявленным в Главной программе (элементы многомерного массива). Пробовал Очистить все и заново Генерировать код, но компилятор все равно ругается.
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