- Обязательно представиться на русском языке кириллицей (заполнить поле "Имя").
- Фиктивные имена мы не приветствуем. Ивановых и Пупкиных здесь уже достаточно.
- Не писать свой вопрос в первую попавшуюся тему - вместо этого создать новую тему.
- За поиск, предложение и обсуждение пиратского ПО и средств взлома - бан без предупреждения.
- Рекламу и частные объявления "куплю/продам/есть халтура" мы не размещаем ни на каких условиях.
- Перед тем как что-то написать - читать здесь и здесь, а студентам - обязательно здесь.
- Не надо писать в ЛС администраторам свои технические вопросы. Администраторы форума отлично знают как работает форум, а не все-все контроллеры, о которых тут пишут.
Таймер для массива данных.
-
- здесь недавно
- Сообщения: 12
- Зарегистрирован: 18 дек 2019, 10:29
- Имя: Егор
- Благодарил (а): 4 раза
Таймер для массива данных.
Здравствуйте!
Каким образом возможно организовать обработку таймера в массиве. Т.е. у меня имеется к примеру 15 задвижек, я в массиве обрабатываю входы, выходы, состояния, если обрабатываю теги по одной задвижке все понятно, как только создаю обработку массива, естественно все "плывет", как использовать таймеры для обработки с каждой задвижкой. До этого с Бредли работал, как то по другому все проходило.) Контроллер 300.
Каким образом возможно организовать обработку таймера в массиве. Т.е. у меня имеется к примеру 15 задвижек, я в массиве обрабатываю входы, выходы, состояния, если обрабатываю теги по одной задвижке все понятно, как только создаю обработку массива, естественно все "плывет", как использовать таймеры для обработки с каждой задвижкой. До этого с Бредли работал, как то по другому все проходило.) Контроллер 300.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
-
- здесь недавно
- Сообщения: 81
- Зарегистрирован: 01 мар 2010, 17:37
- Имя: Алексей Алексеевич
- Страна: Россия
- город/регион: Нижний Тагил
- Благодарил (а): 14 раз
- Поблагодарили: 9 раз
Таймер для массива данных.
На каждую отдельную задвижку должен быть отдельный таймер.
В интерфейсе FB надо создать переменную с типом SFB4. Это таймер TON.
В интерфейсе FB надо создать переменную с типом SFB4. Это таймер TON.
-
- здесь недавно
- Сообщения: 12
- Зарегистрирован: 18 дек 2019, 10:29
- Имя: Егор
- Благодарил (а): 4 раза
Таймер для массива данных.
Неужели нет других способов организации подобной задачи....((( Это ведь стандартная ситуация, когда на объекте большое количество однотипных устройств.
Неужели при 100 одинаковых задвижках придется городить такую тонну скопированного кода.... это ведь не удобно.
Отправлено спустя 9 минут 24 секунды:
В Бредли думаю тоже самое ))) как то через реальное время контроллера возможно....
Отправлено спустя 12 минут :
Если не говорить о задвижке, предположим есть входы DI, 64 штуки, на каждый из них подается некий сигнал, после поступления сигнала необходимо осуществить задержку предположим в 2 секунды, после чего уже будет "взведен" тег в алгоритме.
Придется использовать 64 таймера??? Да это сумасшествие какое то.
Отправлено спустя 4 минуты :
Можно ведь просто проиндексировать DI, DI[#index], где индекс равен от 0 до 64.
-
- не первый раз у нас
- Сообщения: 343
- Зарегистрирован: 12 дек 2018, 14:47
- Имя: Влад
- Благодарил (а): 1 раз
- Поблагодарили: 44 раза
Таймер для массива данных.
Вы один раз напишите код FB и будете вставлять его с разными входами и выходами. В каждом вставленном блоке свой DB в котором как написал коллега UNTK_RAA будет SFB4 таймер со своим DB.
-
- здесь недавно
- Сообщения: 12
- Зарегистрирован: 18 дек 2019, 10:29
- Имя: Егор
- Благодарил (а): 4 раза
Таймер для массива данных.
Да, спасибо я понял, создал один FB и втыкай где надо, как только вставляешь создается DB, но если внутри "универсального" FB обойтись без таймера...
Существует функция SFC64 "TIME_TCK" Вот что вычитал "Можно использовать системное время, например, для того, чтобы измерять длительность процессов путем сравнения результатов двух вызовов SFC 64 и тем самым убедится что Ваш процесс укладывается в нормативы рассчитанные вами"
Только вот не понимаю как это реализовать....
Идея в том чтобы создать один FB для обработки всех задвижек. Как пример у меня реализована обработка аналоговых сигналов, тем самым при расширении площадки мне не придется заниматься "долгой" доработкой проекта, да и в данный момент я обрабатываю все аналоговые каналы, даже пустые, АСУшники в последующем смогут подключить оборудование к свободному каналу, и достаточно будет например заменить в логике работы резервуара AI[1] на AI[12] если будет установлен дополнительный датчик, вариаций много. При должной пояснении в руководстве, данная работа не будет вызывать у сотрудников паники).
У вас нет необходимых прав для просмотра вложений в этом сообщении.
-
- освоился
- Сообщения: 248
- Зарегистрирован: 31 янв 2017, 08:44
- Имя: Маркушин Андрей Геннадьевич
- Страна: Россия
- город/регион: Нижегородская обл., Выкса
- Благодарил (а): 19 раз
- Поблагодарили: 64 раза
Таймер для массива данных.
Если сильно хочется поработать с массивами, то можно сделать так:
1. Определить пользовательский тип (пусть будет ITIMER), в котором будут содержаться элементы интерфейса используемого IEC таймера (например, SFB4). В этом типе могут быть поля IN:BOOL, PT:TIME, Q:BOOL, ET:TIME, в соответствии с интерфейсом блока таймера.
2. В вашем функциональном блоке сделать массив типа ITIMER необходимого размера, сколько нужно таймеров, такой и размер. Пример: timers: ARRAY [0..9] of ITIMER
3. В начале функционального блока организовать вызов нужного количества блоков таймеров, привязать к интерфейсу массива timers.
4. В ходе выполнения программы работать с массивом timers.
Пример:
1. Определить пользовательский тип (пусть будет ITIMER), в котором будут содержаться элементы интерфейса используемого IEC таймера (например, SFB4). В этом типе могут быть поля IN:BOOL, PT:TIME, Q:BOOL, ET:TIME, в соответствии с интерфейсом блока таймера.
2. В вашем функциональном блоке сделать массив типа ITIMER необходимого размера, сколько нужно таймеров, такой и размер. Пример: timers: ARRAY [0..9] of ITIMER
3. В начале функционального блока организовать вызов нужного количества блоков таймеров, привязать к интерфейсу массива timers.
4. В ходе выполнения программы работать с массивом timers.
Пример:
У вас нет необходимых прав для просмотра вложений в этом сообщении.
-
- знаток Eplan
- Сообщения: 1136
- Зарегистрирован: 21 сен 2012, 22:45
- Имя: aranea
- Благодарил (а): 30 раз
- Поблагодарили: 165 раз
Таймер для массива данных.
KorgathVarvar, это ваша первая программа на промышленном ПЛК? имеется опыт наладки программного обеспечения? судя по стремлению к циклам и массивам, вы уже знакомы с каким-то высокоуровневым языком программирования?
знакомы с ООП? тогда что может быть логичнее чем FB (класс/тип) и DB (экземпляр/объект)? причем количество экземпляров логично что будет совпадать с количеством реальных объектов (задвижек)
да хоть тысячи их, задвижка, допустим, довольно простой механизм, а как в цикле отлаживать логику работы отдельно-взятого механизма посложнее? визуально оценить все его входы и выходы, отследить внутреннюю логику при возникновении проблемы?
в офисе можно что угодно и как угодно написать для сферически-вакуумного оборудования, но в поле, при наладке, при поиске проблем и устранении причины простоев - эти циклы аукнутся
опять же данные для верхнего уровня как брать из кучи? а если добавить/удалить, сместить адресацию?
гнать такой подход при помощи несвежего веника
весь МЭК 61131-3 нацелен на простоту, понятность и прозрачность
знакомы с ООП? тогда что может быть логичнее чем FB (класс/тип) и DB (экземпляр/объект)? причем количество экземпляров логично что будет совпадать с количеством реальных объектов (задвижек)
да хоть тысячи их, задвижка, допустим, довольно простой механизм, а как в цикле отлаживать логику работы отдельно-взятого механизма посложнее? визуально оценить все его входы и выходы, отследить внутреннюю логику при возникновении проблемы?
в офисе можно что угодно и как угодно написать для сферически-вакуумного оборудования, но в поле, при наладке, при поиске проблем и устранении причины простоев - эти циклы аукнутся
опять же данные для верхнего уровня как брать из кучи? а если добавить/удалить, сместить адресацию?
гнать такой подход при помощи несвежего веника
весь МЭК 61131-3 нацелен на простоту, понятность и прозрачность
-
- здесь недавно
- Сообщения: 12
- Зарегистрирован: 18 дек 2019, 10:29
- Имя: Егор
- Благодарил (а): 4 раза
Таймер для массива данных.
Вы верно подметили, мой опыт в разработке не так велик. Имеется и опыт наладки и доработки проектов различных контроллеров за другими программистами. Имеется небольшой опыт в web и Сиaranea писал(а): ↑10 янв 2020, 11:17 KorgathVarvar, это ваша первая программа на промышленном ПЛК? имеется опыт наладки программного обеспечения? судя по стремлению к циклам и массивам, вы уже знакомы с каким-то высокоуровневым языком программирования?
знакомы с ООП? тогда что может быть логичнее чем FB (класс/тип) и DB (экземпляр/объект)? причем количество экземпляров логично что будет совпадать с количеством реальных объектов (задвижек)
да хоть тысячи их, задвижка, допустим, довольно простой механизм, а как в цикле отлаживать логику работы отдельно-взятого механизма посложнее? визуально оценить все его входы и выходы, отследить внутреннюю логику при возникновении проблемы?
в офисе можно что угодно и как угодно написать для сферически-вакуумного оборудования, но в поле, при наладке, при поиске проблем и устранении причины простоев - эти циклы аукнутся
опять же данные для верхнего уровня как брать из кучи? а если добавить/удалить, сместить адресацию?
гнать такой подход при помощи несвежего веника
весь МЭК 61131-3 нацелен на простоту, понятность и прозрачность
Меня именно это и задело))) 100 одинаковых задвижек сиди вставляй FB и каждой входа выхода прикручивай. Более сложные объекты я не трогаю, если это будет некий нагреватель или котел (печь) и их 50 штук, то лучше сделать без массива.задвижка, допустим, довольно простой механизм, а как в цикле отлаживать логику работы отдельно-взятого механизма посложнее? визуально оценить все его входы и выходы, отследить внутреннюю логику при возникновении проблемы?
Это вопрос следующий.) А вообще мне гораздо проще ориентироваться если это ZD[0] то скорее всего у нее и DI[0],[1] (закрыто\открыто) и DO по той же логике.опять же данные для верхнего уровня как брать из кучи? а если добавить/удалить, сместить адресацию?
Вообще вероятно я саму концепцию своей программы выбрал не верно, надо подумать.
Отправлено спустя 7 минут 27 секунд:
Вы подтолкнули меня в нужную сторону.winb писал(а): ↑10 янв 2020, 08:54 Если сильно хочется поработать с массивами, то можно сделать так:
1. Определить пользовательский тип (пусть будет ITIMER), в котором будут содержаться элементы интерфейса используемого IEC таймера (например, SFB4). В этом типе могут быть поля IN:BOOL, PT:TIME, Q:BOOL, ET:TIME, в соответствии с интерфейсом блока таймера.
2. В вашем функциональном блоке сделать массив типа ITIMER необходимого размера, сколько нужно таймеров, такой и размер. Пример: timers: ARRAY [0..9] of ITIMER
3. В начале функционального блока организовать вызов нужного количества блоков таймеров, привязать к интерфейсу массива timers.
4. В ходе выполнения программы работать с массивом timers.
Пример:
Снимок.PNG
Снимок2.PNG