Перейти к содержанию
    

реализовать измеритель

требуется сделать устройство читающие данные с ацп и обрабатывающее их, кроме того, нужно синхронизировать время внутренних часов, осуществлять передачу данных через два порта(485 и езернет) независимо и вести протокол измерений на сд-карту, записывая время и результат измерений с ацп. Дело в том, что запись должна быть достаточно точной(погрешность 10мс.). Еще нужно по резултатам измерений управлять нагрузкой 10 ампер(тоже как можно оперативнее - с заднржкой между результатом измерений с ацп и включением/отключением нагрузки не более 20мс).

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

требуется сделать устройство читающие данные с ацп и обрабатывающее их, кроме того, нужно синхронизировать время внутренних часов, осуществлять передачу данных через два порта(485 и езернет) независимо и вести протокол измерений на сд-карту, записывая время и результат измерений с ацп. Дело в том, что запись должна быть достаточно точной(погрешность 10мс.). Еще нужно по резултатам измерений управлять нагрузкой 10 ампер(тоже как можно оперативнее - с заднржкой между результатом измерений с ацп и включением/отключением нагрузки не более 20мс).

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

1. На линукс все можно, как и на Виндоус, как и на ДОС. (напоминает врезавшуюся мне в память фразу "Процессор может все", и ведь не поспоришь же :)

2. Аргумент про SD-карту несостоятелен, как раз это делается на чистом Си очень просто, да и сделано много раз и выложено много где. Вот если бы Вы сказали что Езернет на чистом Си с нуля писать сложно- тут я бы наверное не поспорил.

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

 

Я бы на PIC32 делал такое, обычным суперлупом или RTOS- нужно посмотреть требования, за базу бы взял кит DM320004 (он Езернет имеет, цена $70). Уверен, что многие микроконтроллеры(не только майкрочип) могут подобное предложить, может и подешевле. Ардуино можете посмотреть, кубики Вам практически стандартные нужны.

Самый сложный момент в Вашей задаче- Езернет, от него и отталкивайтесь в выборе элементной базы.

10мс - это SNTP должен потянуть, думаю, 1588 подымать не придется.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Еще нужно по резултатам измерений управлять нагрузкой 10 ампер(тоже как можно оперативнее - с заднржкой между результатом измерений с ацп и включением/отключением нагрузки не более 20мс).

1. На линукс все можно, как и на Виндоус, как и на ДОС. (напоминает врезавшуюся мне в память фразу "Процессор может все", и ведь не поспоришь же :)

 

А Linux впишется в жёсткие временные рамки? Задержек непредсказуемых не будет?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1. На линукс все можно, как и на Виндоус, как и на ДОС. (напоминает врезавшуюся мне в память фразу "Процессор может все", и ведь не поспоришь же :)

2. Аргумент про SD-карту несостоятелен, как раз это делается на чистом Си очень просто, да и сделано много раз и выложено много где. Вот если бы Вы сказали что Езернет на чистом Си с нуля писать сложно- тут я бы наверное не поспорил.

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

 

Я бы на PIC32 делал такое, обычным суперлупом или RTOS- нужно посмотреть требования, за базу бы взял кит DM320004 (он Езернет имеет, цена $70). Уверен, что многие микроконтроллеры(не только майкрочип) могут подобное предложить, может и подешевле. Ардуино можете посмотреть, кубики Вам практически стандартные нужны.

Самый сложный момент в Вашей задаче- Езернет, от него и отталкивайтесь в выборе элементной базы.

10мс - это SNTP должен потянуть, думаю, 1588 подымать не придется.

 

Спасибо за ответ!

Я планировал взять что-то типа AT91(про запас так сказать).

Что такое 1588?

Соблазнительно использовать Linux, так как есть некоторый опыт. Но незнаю, насколько сумеет он выдержать временные рамки(каков разброс времени импульса управления нагрузкой будет)?

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо за ответ!

Я планировал взять что-то типа AT91(про запас так сказать).

Наманая машинка. только я на таком не Линукс, а uCOS-II гонял, очень понравилось (at91rm9200)

 

Что такое 1588?

http://en.wikipedia.org/wiki/Precision_Time_Protocol

http://www.nist.gov/el/isd/ieee/ieee1588.cfm

Протокол синхронизации времени через сеть, точность на уровне микросекунд. Уже есть микроконтроллеры с встроенной аппаратной поддержкой этого протокола. Читал очень интересный доклад с конференции, народ через океан синхронизацию делал, очень впечатляюще получалось.

 

Соблазнительно использовать Linux, так как есть некоторый опыт. Но незнаю, насколько сумеет он выдержать временные рамки(каков разброс времени импульса управления нагрузкой будет)?

Это очень серьезный вопрос. Если нет под рукой человека, который знает как сделать из Линукса систему с предсказуемым (гарантированным не более заданного/рассчетного) временем реакции на событие- то Ваш результат может зависеть от всего. Тогда уже Нейтрино смотрите или что там из QNX сейчас получилось.

 

Ну или просто RTOS возьмите- уверяю Вас, абсолютно мозги не вывихните, просто есть ряд условий и методов межзадачного взаимодействия, да собственно везде это есть. То есть логика Вашего мЫшления после применения RTOS не пострадает, а вот уверенность в надежности Вашего изделия повысится очень значительно.

 

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

Суперлуп на самом деле самый плохой вариант. Любой пользователь суперлупа сталкивается раньше-позже с теми засадами, которые Вы описали :)

 

Если знакомы с Линуксом- вперед, делайте. Не хватит реалтамовости- пересядете на RTOS, весь код переписывать не придется, там тоже задачи и взаимодействие процессов. Быстро выбросить на рынок изделие, а потом, уже заняв нишу, дорабатывать его- вполне нормальный подход ;)

 

А Linux впишется в жёсткие временные рамки? Задержек непредсказуемых не будет?

Есть всевозможные примочки, повышающие предсказуемость (реалтаймовость) Линукса. Но я в этом не спец, я в похожей ситуации выбрал RTOS. Но если человек знает Линукс, может Линуксом и закрыть. Да на крайняк в ядро встроить контроль и упавление, 20мс не так уж и мало. У меня в свое время осталось очень хорошее воспоминание от работы внутри ядра, а вот с передачей данных из ядра в задачу уже было плохо (но это ucLinux был, без MMU). Если реалтаймовый кусок проекта в ядро впендюрить- то вообще красота :) хотя наверное хулиганство.....

А процессор уровня AT91 может много делать железячно- у него ого-го какие DMA есть, собственно ожиданий для медленных устройств и не нужно, все по готовности можно делать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Кроме суперлупа как еще можно строить программу бе ос? Можно по-подробнее.

Ucos меня всегда пугал. Не видел доступных статей по этой ос.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для Linux есть несколько RealTime подсистем (RTLinux например) - можете задействовать какую нибудь из них. (Вот только тогда всю RT часть вам придется поместить в ядро, они именно там работают)

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для Linux есть несколько RealTime подсистем (RTLinux например) - можете задействовать какую нибудь из них. (Вот только тогда всю RT часть вам придется поместить в ядро, они именно там работают)

Млжно подробнее про RTLinux(кажется это старый проект) и про встраивание в ядро. Никогда такого не делал.

Допустим к реалтайму нужно отнести функции приёма данных с АЦП, мат. обработка и реакция (управление нагрузкой через реле). Хочется при этом хранить историю(результат мат. вычислений и время) на SD-карте(нужно это помещать в реалтайм или нет - не знаю).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Млжно подробнее про RTLinux(кажется это старый проект) и про встраивание в ядро.
Проект действительно старый, посмотрите еще RTAI и Xenomai http://en.wikipedia.org/wiki/RTLinux

Вот, оттуда:

RT-Linux application is in fact a Linux kernel module. It is the same type of module, which Linux uses for drivers, file systems and so on. The main difference between RTLinux module and an ordinary Linux module is that RT-Linux module calls functions, which are offered by RT-Linux kernel whereas ordinary module uses only Linux kernel functions.

 

Допустим к реалтайму нужно отнести функции приёма данных с АЦП, мат. обработка и реакция (управление нагрузкой через реле). Хочется при этом хранить историю(результат мат. вычислений и время) на SD-карте(нужно это помещать в реалтайм или нет - не знаю).
Угу, работу с SD и все общее управление запускаете в виде обычного Linux приложения, а всю RT часть - в виде RT-Linux application (т.е. загружаемого драйвера)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Проект действительно старый, посмотрите еще RTAI и Xenomai http://en.wikipedia.org/wiki/RTLinux

Вот, оттуда:

 

 

Угу, работу с SD и все общее управление запускаете в виде обычного Linux приложения, а всю RT часть - в виде RT-Linux application (т.е. загружаемого драйвера)

Тогда возникает конкретный врпрос: как осуществляется взаимосвязь реалтайм части (мат обработка) и обычной части(запись результата на карту периодически)

Приложение запускает некий системный вызов, который возвращает результат реалтайм вычислений?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Тогда возникает конкретный врпрос: как осуществляется взаимосвязь реалтайм части (мат обработка) и обычной части(запись результата на карту периодически)
Посмотрите API этих систем. Там должны быть методы взаимодействия с User Space (и не RT) частями.

 

BTW - в Xenomai есть возможность делать RT части в User Space (как - не знаю, подробно не смотрел)

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...