Форум АСУ в Україні

форум з автоматизації для викладачів, студентів та спеціалістів
Сьогодні: 12 грудня 2018, 16:43

Часовий пояс UTC + 2 годин [ DST ]




Створити нову тему Відповісти  [ 12 повідомлень ]  На сторінку 1, 2  Далі
Автор Повідомлення
 Тема повідомлення: Подстановка номера в идентификаторы переменных или функций.
ПовідомленняДодано: 26 грудня 2017, 18:16 
Офлайн

З нами з: 04 жовтня 2017, 23:31
Повідомлення: 16
Недавно в процессе копипаста вызова DFB управления 92-мя задвижками, я задумался о тщетности бытия, и о том что тупой копипаст претит программисту.

К примеру есть 92 задвижки. Есть один DFB для управления ими. В DataEditor-е создано 92 экземпляра для вызова DFB вида
Код:
fb_EZ_<номер_задвижки>
И в результате в программе приходится делать 92 вызова вида.
Код:
fb_EZ_1 (i_iControl := i_iControl_EZ_1,
        i_xReady := RDY_SH_04,
        i_xStop := STOP_SH_04,
        i_xDistance := DIST_SH_04,
        i_xOpened := OP_EZ_1,
        i_xClosed := CL_EZ_1,
        q_xOpen => OPEN_EZ_1,
        q_xClose => CLOSE_EZ_1,
        q_xAlarm => q_xAlarm_EZ_1,
        q_iStatus => q_iStatus_EZ_1,
        q_iAlarms => q_iAlarms_EZ_1,
   q_iCount => q_iCount_EZ_1);


Можно ли в UnityPro сделать это в цикле. Подставляя индекс цикла в имя экземпляра и имена переменных. ЧТо-то типа:
Код:
FOR i=1 TO 92 DO
fb_EZ_[i] (i_iControl := i_iControl_EZ_[i],
        i_xReady := RDY_SH_04,
        i_xStop := STOP_SH_04,
        i_xDistance := DIST_SH_04,
        i_xOpened := OP_EZ_[i],
        i_xClosed := CL_EZ_[i],
        q_xOpen => OPEN_EZ_[i],
        q_xClose => CLOSE_EZ_[i],
        q_xAlarm => q_xAlarm_EZ_[i],
        q_iStatus => q_iStatus_EZ_[i],
        q_iAlarms => q_iAlarms_EZ_[i],
   q_iCount => q_iCount_EZ_[i]);
END_FOR;

Я понимаю, что использование квадратных скобок, как в обращении к массиву тут неправильно, просто я пытаюсь объяснить, что имею ввиду под подстановкой числа в идентификатор переменной или функции.

Можно ли как-то организовать такой циклический вызов DFB вместо копипаста 92-х вызовов. Может можно как-то формировать строку, и потом подставлять её в качестве идентификатора переменной?


Догори
 Профіль  
 
 Тема повідомлення: Re: Подстановка номера в идентификаторы переменных или функций.
ПовідомленняДодано: 27 грудня 2017, 00:01 
Офлайн
Викладач

З нами з: 29 листопада 2013, 17:11
Повідомлення: 4935
Мы в своем каркасе отказались от экземплярности. Т.е. DFB используем как функцию. Таким образом, мы создаем и вызываем один экземпляр, которому подсовываем структурные переменные как INOUT. А там можно делать массивы. Вот Вам как вариант.


Догори
 Профіль  
 
 Тема повідомлення: Re: Подстановка номера в идентификаторы переменных или функций.
ПовідомленняДодано: 27 грудня 2017, 11:41 
Офлайн

З нами з: 04 жовтня 2017, 23:31
Повідомлення: 16
Хм. Ещё при написании этого поста, у меня в голове забрезжила эта идея...
Хорошо есть у меня массив DDT структур, которые я в цикле передаю в DFB задвижки через inputs/outputs. Вроде работает.
Остаётся ещё одна большая работа, привязка полей структур к входам/выходам контроллера. Как видно в первом моём посте, входы/выходы заалиасены на нумерованные переменные. Теперь вместо присвоения этих переменных при вызове 92-х экземпляров мне надо их присвоить полям массива структур:
Код:
ar_ddtEZ[1].i_xReady:=RDY_SH_04;
ar_ddtEZ[1].i_xDistance:=DIST_SH_04;
ar_ddtEZ[1].i_xOpened:=OP_EZ_1;
ar_ddtEZ[1].i_xClosed:=CL_EZ_1;
ar_ddtEZ[1].q_xOpen:= OPEN_EZ_1;
ar_ddtEZ[1].q_xClose:= СLOSE_EZ_1;
ar_ddtEZ[1].q_iStatus:= q_iStatus_EZ_1;
ar_ddtEZ[1].q_iAlarms:= q_iAlarms_EZ_1;
ar_ddtEZ[1].q_iCount:= q_iCount_EZ_1;
И так 92 раза. Можно и это как-то в цикле организовать?


Догори
 Профіль  
 
 Тема повідомлення: Re: Подстановка номера в идентификаторы переменных или функций.
ПовідомленняДодано: 27 грудня 2017, 13:18 
Офлайн
Викладач

З нами з: 29 листопада 2013, 17:11
Повідомлення: 4935
В М340 и М580 похоже что нет, а в симатиках, например, запросто.
Мы таким и не паримся, потому что для нас все входы и выходы привязаются к объектам 0-го уровня, а дальше - это всегда массив. Таким образом, при необходимости, можно будет привязывать технологические переменные к любому входу/выходу не внося изменения в программу.


Догори
 Профіль  
 
 Тема повідомлення: Re: Подстановка номера в идентификаторы переменных или функций.
ПовідомленняДодано: 27 грудня 2017, 17:54 
Офлайн

З нами з: 04 жовтня 2017, 23:31
Повідомлення: 16
Под объектами 0-го уровня подразумевается RIO/DIO инфраструктура? Или удалённый ввод/вывод сторонних производителей (не шнайдер)?


Догори
 Профіль  
 
 Тема повідомлення: Re: Подстановка номера в идентификаторы переменных или функций.
ПовідомленняДодано: 27 грудня 2017, 19:32 
Офлайн
Викладач

З нами з: 29 листопада 2013, 17:11
Повідомлення: 4935
Я про этот


Догори
 Профіль  
 
 Тема повідомлення: Re: Подстановка номера в идентификаторы переменных или функций.
ПовідомленняДодано: 28 грудня 2017, 15:40 
Офлайн

З нами з: 04 жовтня 2017, 23:31
Повідомлення: 16
Каюсь. Скачать скачал, а прочесть так и не удосужился. :oops:

Хм. Т.е. структуры Device DDT в m580 являются нулевым уровнем?
Код:
PLC0_d0_r0_s2_DDI160.DIS_CH_IN[0].VALUE
PLC0_d0_r0_s2_DDI160.DIS_CH_IN[1].VALUE
PLC0_d0_r0_s2_DDI160.DIS_CH_IN[2].VALUE
PLC0_d0_r0_s2_DDI160.DIS_CH_IN[3].VALUE
PLC0_d0_r0_s2_DDI160.DIS_CH_IN[4].VALUE
PLC0_d0_r0_s2_DDI160.DIS_CH_IN[5].VALUE
PLC0_d0_r0_s2_DDI160.DIS_CH_IN[6].VALUE
PLC0_d0_r0_s2_DDI160.DIS_CH_IN[7].VALUE
...

И их тоже можно обрабатывать в цикле как массив? Только надо было сразу в проекте задвижки по номерам входов как-то распределить...


Догори
 Профіль  
 
 Тема повідомлення: Re: Подстановка номера в идентификаторы переменных или функций.
ПовідомленняДодано: 30 грудня 2017, 11:08 
Офлайн
Викладач

З нами з: 29 листопада 2013, 17:11
Повідомлення: 4935
Нет, нулевой уровень - это так называемый уровень абстрагирования от оборудования. А значение каналов как и диагностика для таких систем часто делается индивидулаьно без циклов. Хотя например в Симатиках это можно сделать и в цикле.


Догори
 Профіль  
 
 Тема повідомлення: Re: Подстановка номера в идентификаторы переменных или функций.
ПовідомленняДодано: 31 грудня 2017, 17:41 
Офлайн

З нами з: 04 жовтня 2017, 23:31
Повідомлення: 16
Нулевой уровень это к примеру булевый массив DICH_01[i]? Или DICH_01 слово статуса дискретных входов? Которое в каждом конкретном случае вручную присваивается дискретным входам ПЛК?


Догори
 Профіль  
 
 Тема повідомлення: Re: Подстановка номера в идентификаторы переменных или функций.
ПовідомленняДодано: 31 грудня 2017, 18:57 
Офлайн
Викладач

З нами з: 29 листопада 2013, 17:11
Повідомлення: 4935
Мы от булевых переменных ушли, слишком они платформозависимы.
Нулевой уровень - это массивы статусных слов и команд а также функций, отвечающих за их обработку, связанных с каналами. Т.н логические каналы. Привязка значения логического канала осуществялется к каждому конкретному каналу через адрес. В разных платформах делается это по разному. Далее технологические переменные (1-й уровень) привязываются к нужному логическому каналу по его индексу. Это дает возможность менять каналы "на лету" без изменения программы.


Догори
 Профіль  
 
Відображати повідомлення за:  Сортувати за  
Створити нову тему Відповісти  [ 12 повідомлень ]  На сторінку 1, 2  Далі

Часовий пояс UTC + 2 годин [ DST ]



Хто зараз онлайн

Зараз переглядають цей форум: Немає зареєстрованих користувачів і 1 гість


Ви не можете створювати нові теми у цьому форумі
Ви не можете відповідати на теми у цьому форумі
Ви не можете редагувати ваші повідомлення у цьому форумі
Ви не можете видаляти ваші повідомлення у цьому форумі
Ви не можете додавати файли у цьому форумі

Знайти:
Вперед:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Вы можете бесплатно создать форум PHPBB2 на MyBB2.ru, Также возможно создать форум бесплатно PHPBB3 на Getbb.ru
Український переклад © 2005-2007 Українська підтримка phpBB