Форум АСУ в Україні http://asu.in.ua/ |
|
Подстановка номера в идентификаторы переменных или функций. http://asu.in.ua/viewtopic.php?f=110&t=1971 |
Сторінка 1 з 2 |
Автор: | bars [ 26 грудня 2017, 18: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-х вызовов. Может можно как-то формировать строку, и потом подставлять её в качестве идентификатора переменной? |
Автор: | san [ 27 грудня 2017, 00:01 ] |
Тема повідомлення: | Re: Подстановка номера в идентификаторы переменных или функций. |
Мы в своем каркасе отказались от экземплярности. Т.е. DFB используем как функцию. Таким образом, мы создаем и вызываем один экземпляр, которому подсовываем структурные переменные как INOUT. А там можно делать массивы. Вот Вам как вариант. |
Автор: | bars [ 27 грудня 2017, 11:41 ] |
Тема повідомлення: | Re: Подстановка номера в идентификаторы переменных или функций. |
Хм. Ещё при написании этого поста, у меня в голове забрезжила эта идея... Хорошо есть у меня массив DDT структур, которые я в цикле передаю в DFB задвижки через inputs/outputs. Вроде работает. Остаётся ещё одна большая работа, привязка полей структур к входам/выходам контроллера. Как видно в первом моём посте, входы/выходы заалиасены на нумерованные переменные. Теперь вместо присвоения этих переменных при вызове 92-х экземпляров мне надо их присвоить полям массива структур: Код: ar_ddtEZ[1].i_xReady:=RDY_SH_04; И так 92 раза. Можно и это как-то в цикле организовать?
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; |
Автор: | san [ 27 грудня 2017, 13:18 ] |
Тема повідомлення: | Re: Подстановка номера в идентификаторы переменных или функций. |
В М340 и М580 похоже что нет, а в симатиках, например, запросто. Мы таким и не паримся, потому что для нас все входы и выходы привязаются к объектам 0-го уровня, а дальше - это всегда массив. Таким образом, при необходимости, можно будет привязывать технологические переменные к любому входу/выходу не внося изменения в программу. |
Автор: | bars [ 27 грудня 2017, 17:54 ] |
Тема повідомлення: | Re: Подстановка номера в идентификаторы переменных или функций. |
Под объектами 0-го уровня подразумевается RIO/DIO инфраструктура? Или удалённый ввод/вывод сторонних производителей (не шнайдер)? |
Автор: | san [ 27 грудня 2017, 19:32 ] |
Тема повідомлення: | Re: Подстановка номера в идентификаторы переменных или функций. |
Я про этот |
Автор: | bars [ 28 грудня 2017, 15:40 ] |
Тема повідомлення: | Re: Подстановка номера в идентификаторы переменных или функций. |
Каюсь. Скачать скачал, а прочесть так и не удосужился. Хм. Т.е. структуры 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 ... И их тоже можно обрабатывать в цикле как массив? Только надо было сразу в проекте задвижки по номерам входов как-то распределить... |
Автор: | san [ 30 грудня 2017, 11:08 ] |
Тема повідомлення: | Re: Подстановка номера в идентификаторы переменных или функций. |
Нет, нулевой уровень - это так называемый уровень абстрагирования от оборудования. А значение каналов как и диагностика для таких систем часто делается индивидулаьно без циклов. Хотя например в Симатиках это можно сделать и в цикле. |
Автор: | bars [ 31 грудня 2017, 17:41 ] |
Тема повідомлення: | Re: Подстановка номера в идентификаторы переменных или функций. |
Нулевой уровень это к примеру булевый массив DICH_01[i]? Или DICH_01 слово статуса дискретных входов? Которое в каждом конкретном случае вручную присваивается дискретным входам ПЛК? |
Автор: | san [ 31 грудня 2017, 18:57 ] |
Тема повідомлення: | Re: Подстановка номера в идентификаторы переменных или функций. |
Мы от булевых переменных ушли, слишком они платформозависимы. Нулевой уровень - это массивы статусных слов и команд а также функций, отвечающих за их обработку, связанных с каналами. Т.н логические каналы. Привязка значения логического канала осуществялется к каждому конкретному каналу через адрес. В разных платформах делается это по разному. Далее технологические переменные (1-й уровень) привязываются к нужному логическому каналу по его индексу. Это дает возможность менять каналы "на лету" без изменения программы. |
Сторінка 1 з 2 | Часовий пояс UTC + 2 годин [ DST ] |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |