Современные технологии автоматизации» («СТА») —  журнал для квалифицированных специалистов по промышленной автоматизации Форум СТА — современные технологии автоматизации Домашняя страница
Домашняя страница форума CTA Домашняя страница форума CTA > II. АСУТП и SCADA > ПЛК и микроконтроллеры
  Активные темы Активные темы
  FAQ FAQ  Искать в форуме   Зарегистрироваться Зарегистрироваться  Вход в систему Вход в систему

Многопоточность в ADAM 5510( или прерывания)

 Ответить Ответить Страница  <12345 7>
Автор
Сообщение
Dismay Смотреть выпадающим
Действительный член
Действительный член
Аватар

Присоединился: 01 Июнь 2006
Категория: Russian Federation
Online Status: Offline
Публикации: 464
Свойства публикации Свойства публикации   Ответить, цитируя автора - Dismay Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Тема сообщения: Многопоточность в ADAM 5510( или прерывания)
    Опубликовано: 17 Апрель 2009 04:32
Первоначально опубликовано Максим Ананских


3. Многозадачность нынешних Windows берет свое начало в UNIX. В свое время был и другой подход. Я думаю, многие помнят висюче-падучую Win'95... И понимают, чем чревато взаимодействие задач в контроллере.

Не удачный пример. Причина не во заимодействии задач, а в принципиальном построении самой системы. Виндовс изначально задумывалась как полностью реентерабельная система с вытесняющей многозадачностью, где по сути все процессы равноправны в том числе и системные и выполняються в отсутствии аппаратных и програмных прерываний. Отсюда и зависания.


Первоначально опубликовано Максим Ананских


4. Я не вполне понял определение "одноцикловая многозадачность". В современных контроллерах можно реализовать как вытесняющую, так и невытесняющую многозадачность. Вопрос, стоит ли это делать? В случае вытесняющей многозадачности сразу возникает вопрос с синхронизацией. А затем еще и с отладкой полученной программы.

Опять же вопросы синхронизации не связаны с механизмом вытеснения, они возникают в любой многозадачной среде на самом деле. Это просто следствие разной длительности взаимодействующих процессов а не следствие вытеснения. Вообще вытеснение проявляеться в строго определенных случаях, когда менеджер ресурсов определяет процессу статус "голодающего" В сбалансированной системе (среднее время простоя 35% и выше) вытеснение никак себя особо не проявляет.
Собственно основная причина, по которой опреционные системы Windows не могут считаться системами реального времени вовсе не в механизме вытеснения а в архитектуре, при котрой время выполнения определяеться процессами протекающими по прерываниям, которые в конечном итоге лишь позволяют выполняться пользовательскому и системному коду в отсутствие программных и аппартных прерывании... Это и делает неопределенным время выполнения вашей задачи. Так как в каждый момент времени процент свободного процессрного времени для системного и пользовательского кода величина неизвестная.
Наверх
Максим Ананских Смотреть выпадающим
Действительный член
Действительный член
Аватар

Присоединился: 14 Май 2003
Online Status: Offline
Публикации: 770
Свойства публикации Свойства публикации   Ответить, цитируя автора - Максим Ананских Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 18 Апрель 2009 18:15
Поднимается флейм. Как в старое доброе время - РВ, ПЛК vs. ПК, скоро дойдем до C против МЭК

Первоначально опубликовано sanwork

Режим Реального Времени в контроллерах получается сам-собой - его не нужно специально создавать

Да, поскольку контроллеры предназначены для работы в РВ. Его не нужно создавать, его можно нарушить:

WHILE %IX1.0 <> TRUE DO SOMETHING; END_WHILE;

Первоначально опубликовано sanwork

вот режим Жесткого Реального Времени - это специальный случай, когда несколько процессов нужно точно согласовать во времени.

Непонятно, откуда Вы это взяли. Про "мягкое" и "жесткое" РВ см. википедию (английскую, в русской пока эта тема плохо освещена.

Первоначально опубликовано sanwork

В современных ПЛК (...) процессор с 10-20 Мбайт памяти - обычное дело
Да? Можно ссылочку?
Первоначально опубликовано sanwork

а вот раздобыть эксклюзив с парой килобайт - надо  попотеть (можно в музее) !
Программируемые реле типа LOGO! - чем не современная техника? Не забывайте, ограничения в ПЛК вводятся самими производителями, в т.ч. и по объему памяти.

Первоначально опубликовано sanwork

Вытесняющая, не-вытесняющая многозадачность ... ?  В контроллерах не используется ни та ни другая модель !
Ваши сведения немного устарели. Взять тот же до боли знакомый мне WAGO 750-841 - там реализована вытесняющая многозадачность.

Первоначально опубликовано sanwork

при сложных процессах, когда они логически разделяются на несколько блоков, их удобно и естественно также разделить на несколько командаппаратов.
Да, я тут уже писал про декомпозицию. Но Вы говорите об однозадачных системах. Это можно назвать кооперативной многозадачностью с циклическим переключением процессов, но здесь фактически нет вызовов ядра.

Первоначально опубликовано sanwork

отладка значительно упрощается, когда [...] всё делается на одном уровне, в одном цикле и без всякой путаницы.
Совершенно верно, задача упрощается, если не нужна синхронизация процессов.
Первоначально опубликовано sanwork

и забудьте наконец про Windows !
Так разве я её начал вспоминать? Но, справедливости ради, отмечу, что сейчас Windows в контроллере или в панели никого не удивишь. Обычно это WinCE или WinXPe.

Первоначально опубликовано sanwork

Динамическое выделение памяти - низкоуровневый системный механизм, и никагого влияния на работу программы не оказывает

То есть, как? Это очень смелое утверждение.

Первоначально опубликовано sanwork

Большинство ПЛК щас делают на базе ПРОМ-ПК, в том числе и ДИН-коробочки вроде АДАМ-а или ВАГА (которые вроде и на ПРОМ-ПК то не похожи)

Тогда как Вы определяете их принадлежность к ПК?

Первоначально опубликовано sanwork

вопрос о том, можно ли программе по ходу дела занять память - уходит в историю.

Да видите ли, занять-то память, наверно, можно. Вопрос в том, каковы последствия такого решения. Недаром в МЭК 61131-3 не предусмотрено никаких средств для этого.
Инженер-системотехник
+7 (916) 477 3925
Наверх
Максим Ананских Смотреть выпадающим
Действительный член
Действительный член
Аватар

Присоединился: 14 Май 2003
Online Status: Offline
Публикации: 770
Свойства публикации Свойства публикации   Ответить, цитируя автора - Максим Ананских Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 18 Апрель 2009 18:59
Первоначально опубликовано Dismay

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

Ну, Windows'9x до этого определения было явно далеко. Вот WinNT/2K/XP - другое дело.

Первоначально опубликовано Dismay

Опять же вопросы синхронизации не связаны с механизмом вытеснения, они возникают в любой многозадачной среде на самом деле...


Спасибо за умный и развернутый комментарий. Но здесь есть с чем поспорить. Во-первых, вопросы синхронизации между процессами возникают тогда, когда процессы выполняются асинхронно. При кооперативной многозадачности, мы явно отдаем процессорное время другим задачам, завершив какую-то часть процесса. Проблем с синхронизацией тут не возникает - мы твердо знаем, что все ресурсы, свободные на момент передачи управления процессу, остаются свободными. И такой подход гораздо ближе к понятию системы реального времени. Трудности начинаются, когда процесс может быть вытеснен другим процессом. Для этого вытесняющему процессу достаточно иметь более высокий приоритет. И что делать, если ресурс, нужный высокоприоритетному процессу, занят низкоприоритетным? Приходится как-то сигнализировать ему о том, что ресурс занят.
Процессы, протекающие по прерываниям, есть всегда. И сколько они занимают процессорного времени, вообще говоря, лежит на совести разработчика ОС (или, в нашем случае, ПЛК). Основную проблему Windows все знают - она ведет себя недетерминированно (мы не знаем, а вдруг ей понадобится свопиться в данный момент?). Ну а как поведет себя тот или иной ПЛК? Остается лишь надеяться, что лучше чем Windows, поскольку они гораздо проще и используют обычно другие ОС (или вообще не используют).
Инженер-системотехник
+7 (916) 477 3925
Наверх
Dismay Смотреть выпадающим
Действительный член
Действительный член
Аватар

Присоединился: 01 Июнь 2006
Категория: Russian Federation
Online Status: Offline
Публикации: 464
Свойства публикации Свойства публикации   Ответить, цитируя автора - Dismay Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 18 Апрель 2009 19:30
Вытеснение в Windows само по себе не приводит к выходу из выделенного кванта процессорного времени. Как говориться все дело в волшебных пузырьках. Если процесс, в нашем случае POU получает к примеру квант времени необходимый для полного завершения задачи, либо квант обусловленный временем цикла, то это тоже можно считать своего рода синхронизацией, так как это гарантирует, что в каждый произвольный момент времени ни одна из “параллельно” выполняемых POU не сможет получить доступа к “сырым” либо занятым данным другой POU. Но такой подход в конечном итоге приводит к внутренней фрагментации процессорного времени и к вынужденным простоям. Если взять Windows, то мы имеем заведомо меньший квант времени нежели необходим процессу для завершения. В результате мы имеем карусель на которую попадают маленькие фрагменты исполняемого кода множество процессов. Процессы имеющие более высокий приоритет либо временно его получившие в результате голодания попадают на карусель чаще и получают квантов больше. Это позволяет говорить о более реалистичной иллюзии параллельного выполнения, но тут уже нужны мьютексы и семафоры и запросы обработки плюс накладные расходы не переключение процессов и сохранение и освобождение стека процессора. Кстати CLR (FrameWork) решает эту задачу в Windows весьмя экстравагантным способом – использует один процесс разделенный на защищенные потоки. НО при любой модели многозадачности вопрос синхронизации актуален, просто в некоторых вариантах он заложен саму модель исполнения.
Наверх
Максим Ананских Смотреть выпадающим
Действительный член
Действительный член
Аватар

Присоединился: 14 Май 2003
Online Status: Offline
Публикации: 770
Свойства публикации Свойства публикации   Ответить, цитируя автора - Максим Ананских Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 19 Апрель 2009 17:20
Первоначально опубликовано Dismay

просто в некоторых вариантах он заложен саму модель исполнения.


Остается только согласиться с этим.
Инженер-системотехник
+7 (916) 477 3925
Наверх
sanwork Смотреть выпадающим
Действительный член
Действительный член


Присоединился: 08 Март 2006
Категория: Russian Federation
Online Status: Offline
Публикации: 440
Свойства публикации Свойства публикации   Ответить, цитируя автора - sanwork Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 21 Апрель 2009 11:54

Тему многозадачности обсуждать можно долго, уж очень она бъемлющая. Но можно когда-то и остановиться.
В конце-концов, вопрос стоит так - использовать её в промышленных контроллерах или нет ?
Windows-овую - НЕТ !
Как точно указал Dismay - в Windows возможна ситуация, когда задача может никогда не выполниться. Это прямой путь к зависанию, и значит, категорически не годится.
В одно-цикловой модели команд-аппарата нет никаких потаенных уголков. Даже если строится "многозадачная" система, то на самом деле никаких "многих задач" тут нет - просто вся работа определенным образом  систематизируется и упорядочивается.
Попадая в лапы Windows программа становится полностью ей подвластна.
В PLC программа ведет себя только по указаниям программиста !
В этом и есть принципиальная разница "многозадачностей" в бытовых ОС и ПРОМ-ПЛК, как-бы они там не назывались.

Еще пару слов

Режим  Жесткого Реального Времени - официальный термин.
Он означает, что прогораммист обязан уложиться в отведенный интервал времени. Рабочей единицей здесь считается время цикла. Действительными считаются данные на момент начала следующего цикла.
Названия "нежесткое" реальное время официально нету, но по сути он есть, и многие современные планировщики задач именно так и работают, т-е растягивают цикл под задачу.

И еще ключевой момент - насчет динамической памяти.
Если в контроллере есть средства коммуникации (а щас они везде), будь то OPC, MODBUS, или хоть RS485, то это прямо означает наличие функций динамической памяти !


С уважением, SAN

Наверх
globus Смотреть выпадающим
Участник
Участник


Присоединился: 29 Июнь 2007
Категория: Russian Federation
Online Status: Offline
Публикации: 62
Свойства публикации Свойства публикации   Ответить, цитируя автора - globus Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 22 Апрель 2009 07:55
Первоначально опубликовано sanwork

Тему многозадачности обсуждать можно долго, уж очень она бъемлющая. Но можно когда-то и остановиться.
В конце-концов, вопрос стоит так - использовать её в промышленных контроллерах или нет ?
Windows-овую - НЕТ !


А как же глюкавая но WinCE или же какой-нибудь Windows с RTX, в конце-концов embedded? Понятное дело все будет зависеть от задачи но так категорично я бы не заявлял.
Первоначально опубликовано sanwork


Попадая в лапы Windows программа становится полностью ей подвластна.

Если программа будет полностью не подвластна ОС , то это уже будет анархия!

Первоначально опубликовано sanwork


И еще ключевой момент - насчет динамической памяти.
Если в контроллере есть средства коммуникации (а щас они везде), будь то OPC, MODBUS, или хоть RS485, то это прямо означает наличие функций динамической памяти !


Это смотря какой контроллер и какая среда разработки используется. Так что не факт.
С уважением!
Наверх
sanwork Смотреть выпадающим
Действительный член
Действительный член


Присоединился: 08 Март 2006
Категория: Russian Federation
Online Status: Offline
Публикации: 440
Свойства публикации Свойства публикации   Ответить, цитируя автора - sanwork Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 22 Апрель 2009 11:41

1. Windows - имеется в виду бытовая. Есть другие Windows-ы, которые хоть и называются также, но отличаются сильно. Embedded я сам охотно использую. Так же не плохи CE и QUNX. Но есть и посерьезнее, настоящие RTOS32, работающие прямо на кирпиче (проце) без заморочек, в сотню раз экономичнее Винды, и все ресурсы принадлежат PLC !

2. Для ПРОМ-ПК идеальное взаимодействие между исполняемой программой и операционной системой - когда управление полностью принадлежит программе, а ОС только предоставляет функции и сервисы.

3. Конечно, есть простые автономные контроллеры, без всяких коммуникаций, обходящиеся без всяких системных  сервисов. Но это уже скорее редкость, чем правило.

С уважением, SAN

Наверх
Максим Ананских Смотреть выпадающим
Действительный член
Действительный член
Аватар

Присоединился: 14 Май 2003
Online Status: Offline
Публикации: 770
Свойства публикации Свойства публикации   Ответить, цитируя автора - Максим Ананских Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 22 Апрель 2009 15:44
Первоначально опубликовано sanwork

Тему многозадачности обсуждать можно долго, уж очень она бъемлющая. Но можно когда-то и остановиться.
В конце-концов, вопрос стоит так - использовать её в промышленных контроллерах или нет ?



Прежде чем завершить обсуждение, хотелось бы внести ясность в обсуждаемый вопрос. Горячее обсуждение началось с моего утверждения, что многозадачность (вернее, многопоточность) и динамическое выделение памяти не стоит использовать при программировании контроллеров. На что Вы ответили, что
Первоначально опубликовано sanwork

В современных сложных процессах одноцикловая многозадачность - очень удобная вещь. И никакие фундаментальные принципы не запрещают динамически брать память , если она нужна.


Меня не покидает ощущение, что мы говорим о несколько разных вещах. Например, под "одноцикловой многозадачностью" Вы, похоже, имели в виду так называемую "SWITCH-технологию", не приводящую к распараллеливанию процесса и, следовательно, ничего общего не имеющую с многозадачностью.

Далее, по ходу дискуссии, Вы приводите большое количество весьма смелых утверждений. Возможно, если бы Вы приводили примеры из обсуждаемой области, они не выглядели бы такими спорными.

Когда Вы говорите о применении в контроллерах многозадачности "от Windows", не вполне понятно, что Вы имеете в виду. Это ядро ПЛК, работающее под управлением ОС Windows (какое?), или это прикладная программа, использующая Windows API (какие средства разработки используются?)?

И тут же Вы сами себе противоречите - говорите, что не стоит применять в контроллерах Windows (в качестве чего?), и тут же отчитываетесь об успешном применении XP Embedded (применении для каких целей?).

В моем понимании, ПЛК (PLC) - это то, что описано в IEC 61131. То есть, это некая среда (контроллер), обладающая ресурсами, в которой выполняются задачи, вызывающие программы, написанные на языках МЭК. Как видите, такой подход вполне допускает реализацию многозадачности. Однако внутренняя реализация этой среды скрыта для прикладного программиста. Она может использовать, в том числе, и Windows (примеры: CoDeSys SP RTE, Siemens WinAC). Сейчас очень многие ПЛК строятся на базе ОС Linux.

Под контроллером я понимаю любое микропроцессорное устройство, служащее для непосредственного управления технологическим объектом. Это не обязательно может быть ПЛК, но и так называемый PAC (Programmable Automation Controller). Грубо говоря, это устройства, не соответствующие IEC 61131, и программируемые другими методами (например, на языке C).

Описанный мной подход я распространяю на любые контроллеры. Я говорю о том, что прикладная программа по возможности не должна применять многопоточность и динамическое выделение памяти. Причины: требования обеспечения надежности работы программы, а также облегчение отладки. Вы согласны с этим утверждением?
Инженер-системотехник
+7 (916) 477 3925
Наверх
Максим Ананских Смотреть выпадающим
Действительный член
Действительный член
Аватар

Присоединился: 14 Май 2003
Online Status: Offline
Публикации: 770
Свойства публикации Свойства публикации   Ответить, цитируя автора - Максим Ананских Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 22 Апрель 2009 15:53
Первоначально опубликовано sanwork

Если в контроллере есть средства коммуникации (а щас они везде), будь то OPC, MODBUS, или хоть RS485, то это прямо означает наличие функций динамической памяти


С этим утверждением нельзя согласиться. Я не раз использовал обмен по Modbus и RS-485. Динамическая память для этого не нужна.

Ну на по поводу OPC, тут мы опять рискуем скатиться к обсуждению, стоит ли засовывать пальцы в розетку, тьфу, Windows в контроллер.
Инженер-системотехник
+7 (916) 477 3925
Наверх
 Ответить Ответить Страница  <12345 7>

Переход на форум Права доступа на форуме Смотреть выпадающим

Bulletin Board Software by Web Wiz Forums® version 9.64
Powered by Web Wiz Forums Free Express Edition
Copyright ©2001-2009 Web Wiz