|
Сложные программы |
|
|
|
Jan 4 2017, 06:47
|

Профессионал
    
Группа: Свой
Сообщений: 1 433
Регистрация: 27-10-08
Из: Украина, Киев
Пользователь №: 41 215

|
Доброго времени! Всех с НГ!  Занимаюсь созданием приборов с микроконтроллерным управлением. Ничего эдакого, как говорит ЛИ "автоматизация курятников". Из последнего у меня получилось 32К на Си. Освоил и пользуюсь методами из теории конечных автоматов. Сообщения, таймеры много канальные программные. Однако новые требования заказчиков, косяки в архитектуре ПО и некоторые другие факторы вынуждали меня что то править, что то и вовсе переписывать. Это вылилось в трудно модифицируемую систему с костылями и тп хренью. С нового года я работаю над еще более сложным прибором и понимаю, что так как было делать нельзя. Смотрю в сторону объектно ориентированных принципов построения ПО, а также подумываю над идеями из теории ОС. Как вы решали свои задачи, что можете посоветовать посмотреть-почитать? Спасибо!
--------------------
Брак - это такой вид отношений, в которых один всегда прав, - а другой - муж.
|
|
|
|
|
 |
Ответов
|
Jan 5 2017, 11:12
|
Профессионал
    
Группа: Свой
Сообщений: 1 817
Регистрация: 14-02-07
Из: наших, которые работают за бугром
Пользователь №: 25 368

|
Буратино, я думаю, что ваша проблема в том, что у вас нет четко определенной архитектуры ПО. Под архитектурой я подразумеваю то, что ПО должно быть разделено на программные модули, которые взаимодействуют друг-с-другом через четко заданные интерфейсы. Данный подход позволил бы вам разбить сложную программу на несколько простых, которые гораздо легче разрабатывать и поддерживать, а также портировать на другое железо. Сделаете ли вы это с помощью ОС, скриптов или других методов - это уже ваш выбор.
Что касается архитектуры ПО для системы управления, то у меня сложилась следующая архитектура, которую я реализовал не в одном успешном проекте: К основным модулям данной архитектуры относятся: I/O менеджер, управляющй процесс, менеджер коммуникаций, логгер.
Задачей I/O менеджера является абстрагирование железа от остального ПО. Т.е он должен преобразовывать сигналы, получаемые от физических интерфейсов во внутренние "виртуальные" сигналы, которые затем будут использоваться управляющим процессом и менеджером коммуникаций. Под сигналами я понимаю состояния входов, измерения, команды на включение чего либо, статусные сигналы и т.д. Т.е смысл I/O менеджера в том, чтобы остальному ПО было наплевать откуда появляется нужный сигнал и куда он уходит. Сегодня это может быть пин А, завтра пин B, а послезавтра пин на слейве в Modbus RTU или SPI - все это должно конфигурироваться на данном уровне и только на нем. Также тут можно делать простые действия над сигналами - инвертировать, масштабировать. Неплохой функцией является возможность "подменить" значение какого либо сигнала на свое во время исполнения программы, чтобы упростить отладку. I/O менеджер должен работать в жестком реальном времени, с теми же циклами, что и управляющий процесс, поэтому важно его оптимизировать, чтобы он не занимал много процессорного времени.
Управляющий процесс - это сердце вашей системы. Он исполняет все управляющие алгоритмы, которые нужны в данной задаче - автоматы состояний, алгоритмы управления теплицей, курятником, турбиной и пр. Благодаря I/O менеджеру все выходы и входы управляющего процесса будут внутренними переменными, следовательно вы легко сможете изменять свои алгоритмы без необходимости изменять весь проект. Также это значительно упрощает повторное использование алгоритмов и функций, так как они становятся аппаратно-независимыми. Еще раз, важно - никакой непосредственной связи с железом в управляющем процессе. Управляющий процесс опять же исполняется в реальном времени в связке с I/O менеджером. Возможно иметь несколько управлящих циклов, работющие в многозадачном шедулере - самые быстрые с временем исполнения <1мс - например для различных защит, основные 10-100мс - где исполняются основные алгоритмы, медленные 100мс-1с - выборы режимов работы.
Управлящий процесс и I/O менеджер - это два модуля, работающих в реальном времени. Менеджер коммуникаций - уже нет. Его задачей является предоставление доступа различным нереалтаймовым интерфейсам типа HMI, HTTP , файловой систеы к виртуальным переменным I/O менеджера. Это собственно Scada интерфейс.
Логгер - подсистема, взаимодействующая с I/O менеджером и служащая для постоянной записи изменеий всех или выборочных виртуальных сигналов в лог-файл для следующей диагностики.
Приведенная архитектура возможно слегка сумбурна, так как по определенным соображениям не могу привести картинки - спрашивайте, если что не понятно. Как ее реализовывать - это уже дело каждого. Например ПЛК реализуют почти все из этой архитектуры, но на МК возможно вы на чем-то сэкономите. В простых системах все можно сделать даже без ОС, но в более сложных она понадобится. В самых высокопроизводительных системах, как у нас, вообще используется мультипроцессорная архитектура, а I/O менеджер частично реализован на ПЛИС. Для разработки и отладки управляющего процесса при использовании данной архитектуры идеально подходит т.н. Модельно-ориентированный подход, реализованный, например, на Matlab/Sumulink. Тогда вы сможете сконцентрироваться на решении задачи, а не ее программировании. А все остальное за вас сделает программа, включая генерацию кода. I/O менеджер в простейшем случае будет представлять shared memory, где хранятся различные переменные. А к этой памяти уже обращаются и драйверы и управляющий процесс. В сложных системах со многими сигналами это уже будет что-то наподобии быстрой базы данных. Конечно, 8-и битник для всего этого слегка слабоват, так как такая архитектура имеет серьезный оверхед, но начиная с простого АРМ 32-х битника она уже легко позволяет получать циклы в 10мс на сотне-другой I/O сигналов.
|
|
|
|
|
Jan 6 2017, 08:10
|
Гуру
     
Группа: Модераторы
Сообщений: 4 011
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369

|
Цитата(syoma @ Jan 5 2017, 14:12)  Буратино, я думаю, что ваша проблема в том,... Вот это все было бы хорошо оформить в виде статьи! Пусть она будет небольшая, но тем не менее... Прямо так и начать: "В конференции шло обсуждение... И мое мнение таково..." И к нам, в КиТ... Что скажете?
--------------------
www.iosifk.narod.ru
|
|
|
|
Сообщений в этой теме
Буратино Сложные программы Jan 4 2017, 06:47 AlexandrY Цитата(Буратино @ Jan 4 2017, 08:47) Как ... Jan 4 2017, 08:36 Make_Pic Цитата(AlexandrY @ Jan 4 2017, 12:36) ...... Jan 4 2017, 09:04  AlexandrY Цитата(Make_Pic @ Jan 4 2017, 11:04) Ужас... Jan 4 2017, 12:28   mantech Цитата(AlexandrY @ Jan 4 2017, 15:28) Но ... Jan 4 2017, 20:29 zltigo Цитата(AlexandrY @ Jan 4 2017, 10:36) И т... Jan 4 2017, 09:32 haker_fox QUOTE (AlexandrY @ Jan 4 2017, 16:36) Вся... Jan 5 2017, 10:06 gte Цитата(Буратино @ Jan 4 2017, 09:47) Зани... Jan 4 2017, 09:48 k155la3 Цитата(gte @ Jan 4 2017, 12:48) . . . .
... Jan 4 2017, 10:16 jcxz Цитата(gte @ Jan 4 2017, 12:48) Кроме тог... Jan 4 2017, 14:08  яман-тау Цитата(jcxz @ Jan 4 2017, 19:08) ... но к... Jan 4 2017, 14:14   Огурцов си шарп и микрофреймворк Jan 4 2017, 14:59    alexunder Цитата(Огурцов @ Jan 4 2017, 15:59) си ша... Jan 4 2017, 15:46     Огурцов Цитата(alexunder @ Jan 4 2017, 16:46) авт... Jan 4 2017, 17:42   jcxz Цитата(яман-тау @ Jan 4 2017, 17:14)... Jan 4 2017, 15:19    яман-тау Цитата(jcxz @ Jan 4 2017, 20:19) Например... Jan 4 2017, 16:02     AlexandrY Цитата(яман-тау @ Jan 4 2017, 18:02)... Jan 4 2017, 16:51      яман-тау Цитата(AlexandrY @ Jan 4 2017, 21:51) Мож... Jan 4 2017, 17:06       mantech Цитата(яман-тау @ Jan 4 2017, 20:06)... Jan 4 2017, 20:25        jcxz Цитата(mantech @ Jan 4 2017, 23:22) Повез... Jan 4 2017, 20:26         mantech Цитата(jcxz @ Jan 4 2017, 23:26) Сколько ... Jan 4 2017, 20:32         zltigo Цитата(jcxz @ Jan 4 2017, 22:26) Сколько ... Jan 4 2017, 22:56 Буратино нет, готовые RTOS меня не интересуют. Я работаю с ... Jan 4 2017, 09:49 Onkel Цитата(Буратино @ Jan 4 2017, 12:49) ....... Jan 4 2017, 12:38 яман-тау Если проектируемая система единична зачем городить... Jan 4 2017, 13:28 dm37 Занимался как раз задачами автоматизации птичника ... Jan 4 2017, 16:17 dm37 ЦитатаМожет что нибудь предложить? Какой ПЛК самый... Jan 4 2017, 17:33 Буратино В этой теме речь не идет о пром контроллерах, арма... Jan 4 2017, 19:11 AlexandrY Цитата(Буратино @ Jan 4 2017, 21:11) В эт... Jan 4 2017, 21:26 Огурцов Цитата(Буратино @ Jan 4 2017, 20:11) В эт... Jan 5 2017, 09:15  Буратино Цитата(Огурцов @ Jan 5 2017, 13:15) тогда... Jan 6 2017, 07:38   syoma Цитата(Буратино @ Jan 6 2017, 09:38) Чего... Jan 6 2017, 08:52   Огурцов Цитата(Буратино @ Jan 6 2017, 07:38) Я с ... Jan 7 2017, 19:37   desh Цитата(Буратино @ Jan 6 2017, 10:38) Чего... Jan 7 2017, 21:04    syoma Цитата(desh @ Jan 7 2017, 23:04) Присмотр... Jan 7 2017, 22:36   Укушенный воблой Цитата(Буратино @ Jan 6 2017, 07:38) меня... Jan 8 2017, 13:27    Огурцов Цитата(Укушенный воблой @ Jan 8 2017, 14... Jan 8 2017, 14:04    gerber Цитата(Укушенный воблой @ Jan 8 2017, 16... Jan 8 2017, 14:28 dm37 С++ для микроконтроллеров.
в первую очередь эта с... Jan 4 2017, 19:24 dm37 ЦитатаЕсли ПЛК не может работать в 24\7 - это... Jan 4 2017, 20:30 dm37 ЦитатаА насколько сложные программы вам удается пи... Jan 5 2017, 06:46 k155la3 Цитата(Буратино @ Jan 4 2017, 23:11) . . ... Jan 5 2017, 07:22 Буратино Спасибо за ответы.
Немного почитал о ОС. Мне точн... Jan 5 2017, 07:40 k155la3 Цитата(Буратино @ Jan 5 2017, 11:40) . . ... Jan 5 2017, 07:59 AlexandrY Цитата(Буратино @ Jan 5 2017, 09:40) Еще ... Jan 5 2017, 10:16  haker_fox QUOTE (AlexandrY @ Jan 5 2017, 18:16) Cor... Jan 5 2017, 13:03   jcxz Цитата(haker_fox @ Jan 5 2017, 16:03) Ну,... Jan 6 2017, 07:52 Буратино компилятора!? о_О Jan 5 2017, 08:07 k155la3 Цитата(Буратино @ Jan 5 2017, 12:07) комп... Jan 5 2017, 08:12 Drozd2 Protothreads в помощь Jan 5 2017, 09:40 k155la3 Цитата(Drozd2 @ Jan 5 2017, 13:40) Protot... Jan 5 2017, 10:03  jcxz Цитата(k155la3 @ Jan 5 2017, 13:03) Это н... Jan 5 2017, 11:19  AlexandrY Цитата(iosifk @ Jan 6 2017, 10:10) Вот эт... Jan 6 2017, 09:02   iosifk Цитата(AlexandrY @ Jan 6 2017, 12:02) Не ... Jan 6 2017, 09:13    HardEgor Цитата(iosifk @ Jan 6 2017, 16:13) А для ... Jan 6 2017, 13:35     iosifk Цитата(HardEgor @ Jan 6 2017, 16:35) Упс,... Jan 6 2017, 15:15   zltigo Цитата(AlexandrY @ Jan 6 2017, 11:02) Нын... Jan 6 2017, 09:19    iosifk Цитата(zltigo @ Jan 6 2017, 12:19) Слова,... Jan 6 2017, 09:25 Drozd2 Цитатаназываются "кооперативные" ?
Чтоб ... Jan 5 2017, 11:41 ViKo Писать надо туда, где больше заработаешь.
А I/O м... Jan 6 2017, 09:11 syoma Цитата(ViKo @ Jan 6 2017, 12:11) А I/O ме... Jan 6 2017, 09:49  AlexandrY Цитата(syoma @ Jan 6 2017, 11:49) о I/O м... Jan 6 2017, 10:25   syoma Цитата(AlexandrY @ Jan 6 2017, 12:25) Eth... Jan 6 2017, 14:57    AlexandrY Цитата(syoma @ Jan 6 2017, 16:57) Alexand... Jan 7 2017, 19:05     syoma Цитата(AlexandrY @ Jan 7 2017, 22:05) А в... Jan 8 2017, 09:11  Укушенный воблой Цитата(syoma @ Jan 6 2017, 10:49) В одном... Jan 6 2017, 11:42   ViKo Цитата(Укушенный воблой @ Jan 6 2017, 14... Jan 6 2017, 12:47    Укушенный воблой Цитата(ViKo @ Jan 6 2017, 13:47) Универса... Jan 6 2017, 13:45 dm37 "Буратино", всё таки предложу ещё раз по... Jan 6 2017, 12:26 aiwa Цитата(Укушенный воблой @ Jan 6 2017, 11... Jan 6 2017, 13:02 zltigo Цитата(aiwa @ Jan 6 2017, 15:02) Недостат... Jan 6 2017, 14:31 haker_fox QUOTE (jcxz @ Jan 6 2017, 15:52) "Чт... Jan 6 2017, 13:04 jcxz Цитата(haker_fox @ Jan 6 2017, 16:04) Я д... Jan 6 2017, 15:31 TSerg Сложные программы..
Угу, посмотрел бы я на любител... Jan 7 2017, 23:11 BackEnd Цитата(TSerg @ Jan 7 2017, 23:11) Угу, по... Jan 8 2017, 04:16  agregat Цитата(BackEnd @ Jan 8 2017, 07:16) Ну оз... Jan 8 2017, 10:26   syoma Цитата(agregat @ Jan 8 2017, 12:26) Я мож... Jan 8 2017, 11:11 Буратино Огурцов, не хамите. Я в этом деле первый после Бог... Jan 8 2017, 08:27 Огурцов Цитата(Буратино @ Jan 8 2017, 09:27) Огур... Jan 8 2017, 10:07 BackEnd Цитата(Буратино @ Jan 4 2017, 06:47) Смот... Jan 8 2017, 08:57 -SANYCH- ЦитатаА автору советую взять AT91SAM7 установить н... Jan 8 2017, 11:32 AlexandrY Цитата(-SANYCH- @ Jan 8 2017, 13... Jan 8 2017, 12:24 Буратино Огурцов, сори, но Вы не в теме. Просто не понимает... Jan 8 2017, 12:34 HardEgor Цитата(Буратино @ Jan 8 2017, 19:34) еще ... Jan 8 2017, 17:01 SlavaV Буратино,
лично моё мнение, все Ваши проблемы реш... Jan 8 2017, 13:45 Буратино Цитата(SlavaV @ Jan 8 2017, 17:45) Бурати... Jan 8 2017, 14:04 SlavaV У Вас название темы "Сложные программы"
... Jan 8 2017, 14:14 Укушенный воблой А вообще, ИМХО, топикстартер просто не специалист ... Jan 8 2017, 14:47 Буратино детский сад. Jan 8 2017, 15:32 aiwa Цитата(Буратино @ Jan 8 2017, 14:34) Есте... Jan 8 2017, 17:45 Эдди Как по мне, так ртось как раз и надо бритвой Оккам... Jan 8 2017, 18:44 TSerg Для меня и Windows NT - тоже RTOS. Jan 8 2017, 18:47
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|