Страница 3 из 4 ПерваяПервая 1234 ПоследняяПоследняя
Показано с 21 по 30 из 31

Тема: SPK-ПРИСВОЕНИЕ значений элементам двумерного массива

  1. #21

    По умолчанию

    Здравствуйте коллеги, подскажите в чем разница этих массивов? Снимок.PNG

  2. #22
    Пользователь
    Регистрация
    28.08.2008
    Адрес
    23..93..123
    Сообщений
    1,786

    По умолчанию

    Первый массив одномерный, состоит из массивов BOOL[1..3], второй обычный двумерный массив, см. школьный учебник алгебры.

  3. #23

    По умолчанию

    Цитата Сообщение от Sergey666 Посмотреть сообщение
    Первый массив одномерный, состоит из массивов BOOL[1..3], второй обычный двумерный массив, см. школьный учебник алгебры.
    одномерный массив можно просто задать(a1: ARRAY [11..16] OF BOOL), но тем не менее, кодесис как то это принимает (a2:ARRAY [11..16] OF ARRAY [1..3] OF BOOL) в чем разница?

  4. #24

    По умолчанию

    Цитата Сообщение от sssssaaaaabbbbb Посмотреть сообщение
    одномерный массив можно просто задать(a1: ARRAY [11..16] OF BOOL), но тем не менее, кодесис как то это принимает (a2:ARRAY [11..16] OF ARRAY [1..3] OF BOOL) в чем разница?
    А как при этом считывать данные в 2х вариантах?
    s[1, 2] = xxx
    а в случае ARRAY OF ARRAY так пройдет? Сам не пробовал, но раз вы уже занялись этим...

  5. #25

    По умолчанию

    Цитата Сообщение от МихаилГл Посмотреть сообщение
    А как при этом считывать данные в 2х вариантах?
    s[1, 2] = xxx
    а в случае ARRAY OF ARRAY так пройдет? Сам не пробовал, но раз вы уже занялись этим...
    как двойной массив обьявлять понятно, но вот эта запись непонятна (a2:ARRAY [11..16] OF ARRAY [1..3] OF BOOL) и как с ней работать непонятно. Просто любопытство.

  6. #26

    По умолчанию

    Цитата Сообщение от sssssaaaaabbbbb Посмотреть сообщение
    как двойной массив обьявлять понятно, но вот эта запись непонятна (a2:ARRAY [11..16] OF ARRAY [1..3] OF BOOL) и как с ней работать непонятно. Просто любопытство.
    1.

    Объявления

    Код:
    a1: ARRAY [0..1, 0..2] OF INT;
    и

    Код:
    a2: ARRAY [0..1] OF ARRAY [0..2] OF INT;
    эквивалентны.

    Разница лишь в отображении элементов массива в окне просмотра при онлайн-подключении к контроллеру - в первом случае плоским списком, во втором - структурированно.

    22-05-2024 15-50-06.png

    2.

    Для обращения к элементу массива при втором варианте объявления используется следующий синтаксис (пример):

    Код:
    a2[0][1] := 123;

  7. #27
    Пользователь
    Регистрация
    28.08.2008
    Адрес
    23..93..123
    Сообщений
    1,786

    По умолчанию

    Цитата Сообщение от sssssaaaaabbbbb Посмотреть сообщение
    одномерный массив можно просто задать(a1: ARRAY [11..16] OF BOOL), но тем не менее, кодесис как то это принимает (a2:ARRAY [11..16] OF ARRAY [1..3] OF BOOL) в чем разница?
    Массив массивов...Можете начинать петь и танцевать, вы написали индусский код и не понимаете что вы написали? А зачем?

  8. #28

    По умолчанию

    Цитата Сообщение от Sergey666 Посмотреть сообщение
    Массив массивов...Можете начинать петь и танцевать, вы написали индусский код и не понимаете что вы написали? А зачем?
    Ну и что. что индусский, работает, а теперь и понятен стал. Спасибо Евгению.

  9. #29

    По умолчанию

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

  10. #30

    По умолчанию

    Добрый день.
    Слева от оператора => не может быть индексного доступа к выходу ФБ.

    Можете переписать в таком виде:

    arrDowntime_Shift1[1][i] := fbDowntime_Chassis_line [i].arDownTimeS1[1];

Страница 3 из 4 ПерваяПервая 1234 ПоследняяПоследняя

Похожие темы

  1. Тестирование Библиотеки SPK Tools
    от Александр Приходько в разделе СПК2xx (архив)
    Ответов: 116
    Последнее сообщение: 10.12.2016, 17:06
  2. Придание динамики элементам на панели СП270
    от Михаил Ковалев в разделе СП3хх, СП270
    Ответов: 3
    Последнее сообщение: 06.08.2013, 10:28
  3. Присвоение QW в LD
    от Salvafion в разделе ПЛК1хх
    Ответов: 3
    Последнее сообщение: 11.09.2012, 20:11
  4. Присвоение значений команде по условию
    от Salvafion в разделе Master SCADA 3
    Ответов: 1
    Последнее сообщение: 06.09.2011, 05:57
  5. Ответов: 1
    Последнее сообщение: 26.04.2010, 16:07

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •