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

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

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

Присоединился: 02 Октябрь 2007
Категория: Russian Federation
Online Status: Offline
Публикации: 427
Свойства публикации Свойства публикации   Ответить, цитируя автора - Vald Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Тема сообщения: Многопоточность в ADAM 5510( или прерывания)
    Опубликовано: 03 Май 2009 14:28

На всякий случай проверил - при записи в 2 файла каждую секунду за один час 20 минут получил отставание часов машины на 1.5-2 секунды.  Собственно это я видел и вижу и в дос и под виндами постоянно. Сейчас посмотрел под  ME и 433 celeronом.  В контроллерах стоит или что-то типа этого или менее шустрое. Интересно было бы посмотреть еще под XP и  CE.

Даже правильную на первый взгляд теорию проверяйте сами. А про то как написанное соответствуе действительности Рихтер побухтел кое-где.

Пока писал цифра уточнилась: 2 сек отставания часов  за 1 час 40 минут.

При экспериментах ни один чайник не пострадал

-----------
Плохому системному интегратору всегда OPC сервер мешает.
______________
Пишу на C++ за еду
Наверх
Dismay Смотреть выпадающим
Действительный член
Действительный член
Аватар

Присоединился: 01 Июнь 2006
Категория: Russian Federation
Online Status: Offline
Публикации: 464
Свойства публикации Свойства публикации   Ответить, цитируя автора - Dismay Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 03 Май 2009 15:03

Поток режима ядра повышает и понижает IRQL процессора, на котором он
выполняется, в зависимости от того, что именно делает этот поток. Например,
обработчик ловушки (или сам процессор) при прерывании повышает IRQL
процессора до IRQL источника прерывания. В результате все прерывания с
более низким или равным IRQL маскируются (только на этом процессоре), что
не дает прерыванию с таким же или более низким IRQL помешать процессо-
ру обработать текущее прерывание, Замаскированные прерывания либо об-
рабатываются другим процессором, либо откладываются до понижения IRQL.
Поэтому все системные компоненты, в том числе ядро и драйверы устройств,
пытаются удерживать IRQL на уровне passive («пассивный*), иногда называе-
мом низким уровнем, Если бы IRQL долго оставался неоправданно высоким,
драйверы устройств не смогли бы оперативно реагировать на аппаратные
прерывания.
Уровень «clock» (часы) используется для системных часов, с помощью ко-
торых ядро отслеживает время суток, измеряет и распределяет процессорное
время между потоками.
Уровень «'device» (устройство) применяется для задания приоритетов пре-
рываний от устройств.
Хотя контроллеры прерываний различают уровни приоритетов прерываний,
Windows 2000 использует свою схему приоритетов прерываний, известную под
названием уровни запросов прерываний (interrupt request levels, IRQL). Внут-
ри ядра IRQL представляются в виде номеров от О до 31, причем больший номер
соответствует прерыванию с большим приоритетом. Ядро определяет стандар-
тный набор IRQL для программных прерываний, a HAL увязывает IRQL с но-
мерами аппаратных прерываний. IRQL
======================================
Возможно вы не там копаете, хотя возможно имеет место заговор треклятого Microsofta супротив Вас чего конечно же нельзя полностью исключать. Хотя ИМХО эти люди забыли о многозадачности больше, чем Вы когда либо захотите узнать. Описанных вами явления я не наблюдал никогда, за исключением работы QNX на виртуальной машине Microsoft Virtual PC. Что бы переферия влияла на квантование это определенно заговор, проверять конечно необходимо, я бы начал с проверки таблиц умножения, Брадиса и Пифагора
Наверх
Vald Смотреть выпадающим
Действительный член
Действительный член
Аватар

Присоединился: 02 Октябрь 2007
Категория: Russian Federation
Online Status: Offline
Публикации: 427
Свойства публикации Свойства публикации   Ответить, цитируя автора - Vald Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 03 Май 2009 18:19

К сожалению, программисты с которыми мы работаем постоянно делают открытия. Что то они не видели, о чем то не знают, что то видели, но не задумывались почему так. Это радует, но только когда они работают не над темами в которой работаешь сам. Сейчас забавляюсь ситуацией когда заказчики уже 2 год не собираются просто честно сесть и проверить, как на самом деле у них работает (вернее не работает) передача через  RS232 порт,  но что-то им никак не дает это сделать. 

А описанные мной явления наблюдают все пользователи Windows. 

Всем и всегда советую проверять.  Проверка таблицы умножения простым виндовским калкулятором в свое время выявила в пентюхах ошибку в плавающей арифметике.

Кстати пока смотрел еще увидел, что после перезагрузки отставание часов исчезло.  Это уже другой явление и к прерываниям не имеет отношения.   

Второй процессор наверняка вылечит много скрытых камней.

При экспериментах ни один чайник не пострадал

-----------
Плохому системному интегратору всегда OPC сервер мешает.
______________
Пишу на C++ за еду
Наверх
Dismay Смотреть выпадающим
Действительный член
Действительный член
Аватар

Присоединился: 01 Июнь 2006
Категория: Russian Federation
Online Status: Offline
Публикации: 464
Свойства публикации Свойства публикации   Ответить, цитируя автора - Dismay Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 03 Май 2009 19:59
А вот это уже интересно, попробуйте остановить службу "Windows Time" и еще поэксперементировать. Тем более что у Вас все под рукой. Кстати вы ничего не говроили о железе ЧушьТехнолоджи в виде HyperTreading тоже можно попридавливать.
(Хотя идея встать в две очереди к одному писсуару не лишена возможно своей извращенной привлекательности. Вот кстати прямое доказательство несовершенства виндового механизма распределения процесорного времени, это чушь подпорка в чистом виде, а выжимает до 8% Правдо в первой реализации пользователи писали друг на друга и Соломоновым решением кэш был сначала поделен поровну а потом удвоен Но народ в целом не совсем безнадежен ибо флешовый костыль к висте небыл принят вот это уже непрекрытое шарлотанство)
Наверх
Vald Смотреть выпадающим
Действительный член
Действительный член
Аватар

Присоединился: 02 Октябрь 2007
Категория: Russian Federation
Online Status: Offline
Публикации: 427
Свойства публикации Свойства публикации   Ответить, цитируя автора - Vald Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 04 Май 2009 00:22

Да я вот призадумался.  Часики и последовательный порт меня пару лет назад крепко достали - у меня в контроллере и с тем и с тем были проблемы.  Что то вот нарыл. Но остался темным момент такой : для совместимости в свое время как переходили от  XT  к AT сделали так, что в  AT при включении часики считывались из батарейных часов и с этого момента шли в ОЗУ (отсюда и приключения с отставаниями часов).  Но ! для совместимости должен быть механизм, который при правке времени в часах в ОЗУ переносил бы это в батарейные часы (ведь предполагалось что будут работать программы которые работали еще на XT когда время вводилось каждый раз ручками при старте системы).  И практика это подтверждала. При интенсивной работе часы отставали. Причем отставали то не только при работе а и после - т е и батарейные часы. Вот где то должен быть механизм который периодически(?) правит батарейные часы по времени которое идет в ОЗУ.  Я у себя отставание часов борол тем что раз в 30 секунд брал время из батарейных часов и правил часы в озу - при этом отставания часов не было и все работало при любой интенсивности обмена с винчестером.

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

При экспериментах ни один чайник не пострадал

-----------
Плохому системному интегратору всегда OPC сервер мешает.
______________
Пишу на C++ за еду
Наверх
Dismay Смотреть выпадающим
Действительный член
Действительный член
Аватар

Присоединился: 01 Июнь 2006
Категория: Russian Federation
Online Status: Offline
Публикации: 464
Свойства публикации Свойства публикации   Ответить, цитируя автора - Dismay Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 04 Май 2009 04:24
Фишка в том, что "Windows Time" вообще может не брать системный таймер для определения системного времени, взяв его единожды при загрузке системы. А так как это по сути обычный процесс с базовым приоритетом, то мы имеем то что имеем. Честно говоря я давно отказался от использования их клиента времени. Он делался для нужд домена и работает в отсутствие контроллера из рук вон плохо, а в присутствии просто плохо. Дело в том, что для домена рассинхронизация до пяти минут не критична. Подкрутить его можно из консоли, по моему команда wintm или что то созвучное, но лучше использовать NTP клиента для NT версии 4.2 он бесплатен и доступен на NTP.org весит мало работает с приоритетом реального времени (24) тоесть самый первый (после прерываний всех конечно). Самое главное к нему есть гуевый настройщик NTP Time Server Monitor, который позволяет тюнить и следить за сервисом. Вы сможете явно указать, что в отсутствии внешних источников синхронизации использовать внутренние часы ну и забудите со временем проблемы со временем Да, чуть не забыл самое главное, безжалостно пиаримый мной NTP клиент также являеться и сервером времени, реализован строго в стандарте спецификации NTP (кроссплатформенный) В то время как Microsoft реализовало свой Windows Time как водится несколько иначе
Наверх
globus Смотреть выпадающим
Участник
Участник


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

1. Ну ваще-то, программа не должна падать по определению. Если падает - то надо переписывать, пока не достигнет нужной устойчивости. Это как организм - пытается жить до последнего, даже при тяжелых повреждениях. Винда - прямая противоположность: чуть чо не так - лапки кверху.


Когда я говорил о выборе ОС то забыл одну очень интересную вещь - драйверы Реального Времени встраиваемые в стандартные ОС.  Из которых я встречал, самая серьезная -  SP RTE , входящая в состав среды CoDeSys.
Этот драйвер пролазит до самого железа, колет кирпич на две части, и делит его с Виндой.  После этого комп часть времени работает на Винду, а часть на ПЛК.  Соотношение частей можно устанавливать с шагом 0,1 мкс.
У системы  SP RTE  есть свой развитый планировщик задач, удобно строится в  CoDeSys.
О серьезности софта говорит тот факт, что когда мы подвешивали Винду  -  ПЛК-часть продолжала работать как ни в чем не бывало !


Вот отличный пример компромисса !  Каждая часть занимается своим делом :  Винда - для раскрасок, расписных интерфейсов (уж это-то она могет !),  РТ-часть - для классического ПЛК, без всяких декораций и с присущей ему надежностью.


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


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



1.     По определению много чего не должно быть. Поэтому вылизывается все в процессе. Кстати ядро у винды, в отличии от ее шела, работает относительно стабильно. И хоть оно не подходит для построения РТ систем но как ты правильно заметил ее хватает для отображения всяких красивостей.

Про ST RTE ничего сказать не могу – не юзал. Как в прочем ничего не скажу и про CoDeSys. Но как в любой среде разработки есть свои ограничения. В CoDeSy, я думаю, они накладываются стандартом МЭК. Хотя в этом вопросе многое зависит и от среды.

Примерно лет пять назад пришлось переносить на один ПК проект нижнего уровня написанный на Isagraf Enhanced и прект верхнего уровня написанный под скаду inellution IFix. Все работало и обменивалось данными по Modbus TCP.
С уважением!
Наверх
sanwork Смотреть выпадающим
Действительный член
Действительный член


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

Если строить развитую систему управления, с монторами и сетью - то без  Win-ды  щас никак не обойтись !
Нужны еёные богатые графические возможности, файловая система, и самое интересное - сетевые средства.

Есть конечно специально предназначенные РТ ОС-ы (за немалые бабки) - о них говорить нечего.
Кстати, и среди Виндос есть РТ - WinCE. Она по жизни уже РТ, и если даже законно покупать - стоит не дорого. Есть Mobile, но это уже для ARM-ов.

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

1. Сперва подготовить на пользовательском уровне :
Убрать скринсейверы, выключение дисков и дисплея.
Файловую систему - лучше FAT32.
Выключить всякое кэширование всех дисков.
Выключить все фоновые службы связанные с файловыми операциями - дефрагментация и прочее.
Убрать файрволлы и всякие сетевые запреты.
Заглушить все логи, ведение журналов и пр.
...
В каждом случае надо перебирать конкретно и терпеливо. Какие-то службы могут наоборот понадобиться, например для OPC.
...

2. От зависания ничо не спасет, особенно при сетевых сбоях.
Значит надо сменить стратегию - не пытаться избежать стопоров, а сделать систему способной выходить из "смертельных ситуаций".
Почти всегда зависы происходят на пользовательском уровне - ядро продолжает работать.
Здесь очень помогут  API- функции  IOCance() - отменяет текущие операции ввода/вывода (в том числе сетевые). Есть еще убойная функция  DeviceIOControl() с добрым десятком параметров, каждый из которых - это свой способ работы с устройствами.
Работать с расшаренными сетевыми папками очень удобно, но чтобы избежать лишних проблем лучше подстраховаться несколькими типовыми мерами. Перед обращением к шаре - пропинговать, дождаться сетевого события, оценить результаты.
Нужные классы есть в  C++, можно и напрямую через  WinSock (на порядок сложнее).

Софт доводиться не за один раз. При добавлении или убавлении чего-то нового заново прокручиваются испытания.

3. В крайних случаях можно задействовать и ядро - функции группы  Kernrel.  Но во 1-х, их простот так не вызовешь, во 2-х  нужно хорошо понимать -  чо собссна хочешь, и чо делаешь.  Рекомендую - Руссиновича, Рихтера.

Я выдал только начальный мизер, Примерный общий порядок действий, которые надо прокрутить несколько раз, подшлифовывая на каждом круге.
Кто заинтересуется, может использовать как отправную точку.

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

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


Присоединился: 29 Июнь 2007
Категория: Russian Federation
Online Status: Offline
Публикации: 62
Свойства публикации Свойства публикации   Ответить, цитируя автора - globus Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 06 Май 2009 08:17
Можно воспользоваться панелью оператора, винды там может и небыть. Самое интересное в том что виндовые сетевые средства нужны тогда когда нужно использовать сетевую политику, в противном случае – пофиг можно использвать и ДОС (утрирую). И дело не в богатости графических возможностей, а в том что под окна написано дофига разного софта.

Маленькое добавление по п.1.
Иногда для подготовки системы может помочь BartPE.
И FAT32 использовать очень опасно, можно похерить все данные.
С уважением!
Наверх
sanwork Смотреть выпадающим
Действительный член
Действительный член


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

..сетевую политику.., дофига софта ..., .. BartPE ...

Я не совсем понял (совсем не понял), но я веду речь про совместную работу РилТайм-ядра и Виндовой шеллы (оболочки)...

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

Наверх
 Ответить Ответить Страница  <1 4567>

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

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