Разработка архитектуры системы для сбора и контроля в реальном времени - PullRequest
5 голосов
/ 13 февраля 2009

Краткое описание требований

(Здесь много хороших ответов, спасибо всем, я обновлю, если когда-нибудь получу этот полет).

Детектор работает по дорожке, измеряя несколько различных физических параметров в режиме реального времени (детерминист) в зависимости от криволинейного расстояния. Пользователь может нажать кнопку, чтобы «пометить» путевые точки во время этого процесса, а затем использует графический интерфейс для ввода деталей для каждой путевой точки (в человеческом времени, но пока продолжается сбор данных).

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

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

Моя текущая идея для вашего ввода / комментарии / предупреждения

Что я хочу определить, могу ли я сделать это с ПК + FPGA. FPGA будет выполнять «сбор данных», я буду использовать C # на ПК для чтения данных из буфера. Информация о путевых точках может быть введена через приложение WPF / Winforms и помещена в базу данных / плоский файл / что-либо, ожидающее «обработки».

Для обработки я бы использовал F #.

FPGA будет использоваться для «записи» информации обратно на физическую машину.

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

Я был бы очень признателен за любые ваши отзывы.

ОБНОВЛЕНИЯ (дополнительная информация добавляется здесь как и когда)

При входе в фильтр Калмана мы смотрим раз в 1 мс. Но с другой стороны фильтра Калмана мы будем отбирать каждые 1 м, что при скоростях, о которых мы говорим, будет около 2 в секунду.

Итак, я думаю, более точные вопросы были бы:

  1. реализация фильтра Калмана на FPGA - кажется , что возможно возможно, но я не понимаю достаточно о том или ином предмете можно разобраться, насколько это возможно.

  2. Я также не уверен, сможет ли реализация Kalman в FPGA работать с циклом каждые 1 мс - хотя я предполагаю, что это не должно быть проблемой.

  3. Если я правильно понял, у ПЛИС нет проблем с памятью. Для третьей части процесса, где я буду отправлять (приблизительно) массив двойных чисел 4 x 400 для использования в качестве таблицы поиска, возможно ли это?

  4. Кроме того, будет ли переключение между двумя процессами (чтение / запись данных) означать перепрограммирование ПЛИС каждый раз, или может быть дано указание переключаться между ними? (Возможно, можно просто запустить оба параллельно и игнорировать одно или другое).

  5. Другая опция Я видел компиляцию F # в VHDL с использованием Avalda FPGA Developer , я скоро попробую, я думаю .

Ответы [ 7 ]

3 голосов
/ 23 февраля 2009

Вы не упоминаете свои цели, клиентов, бюджет, надежность или сроки, поэтому сложно ответить, но ...

Забудьте о ПЛИС. Упростите свой дизайн, среду разработки и интерфейсы, если вы не знаете, что с помощью другого решения вы столкнетесь с требованиями реального времени.

Если у вас есть бюджет, я бы сначала взглянул на LabView.

http://www.ni.com/labview/

http://www.ni.com/dataacquisition/

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

Если вы решили использовать скомпилированные языки, то я бы изолировал компонент сбора данных в реальном времени от встроенной цели с ОСРВ, и предпочтительно тот, который использует MMU для планирования и изоляции потоков и позволяет вам писать C. Если вы получаете реальную ОСРВ, вы должны иметь возможность точно планировать процессы, которые необходимо запустить, а также иметь возможность отлаживать их, если это необходимо! Сохраняйте эту нецелевую систему как можно более простой с помощью определенных интерфейсов. Сделайте это достаточно, чтобы получить необходимые данные.

Затем я бы реализовал интерфейсы обратно в графический интерфейс ПК, используя общий файл интерфейса для обслуживания. Используйте стандартные интерфейсы для передачи данных на ПК, что-то вроде USB2 или Ethernet. Чипы FTDI отлично подходят для этого.

2 голосов
/ 23 февраля 2009

Вот предложение.

Дамп концепции FPGA. Получить оценочную плату DSP от TI Выберите один с достаточным количеством гигафлопов, чтобы сделать вас счастливым. Достаточно ОЗУ для хранения вашего рабочего набора.

Запрограммируйте его на C. TI поставляет небольшое ядро ​​RT.

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

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

Нет проблем с производительностью DSP.

Бит в реальном времени делает в реальном времени, с MP ОЗУ. Обработка выполняется быстро, а графический интерфейс не критичен ко времени.

2 голосов
/ 13 февраля 2009

Поскольку вы движетесь по дорожке, я должен предположить, что частота дискретизации не превышает 10 кГц. Вы можете легко загрузить данные на ПК с такой скоростью, даже 12 МБ USB (на полной скорости).

Для серьезной обработки математических данных Matlab - это путь. Но так как я не слышал о F #, я не могу комментировать.

4 х 400 дублей не проблема. Даже бюджетные FPGA имеют 100 КБ памяти.

Вам не нужно менять изображения для переключения между чтением и записью. Это все время делается в ПЛИС.

1 голос
/ 23 февраля 2009

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

Я думаю, что самая большая проблема, с которой вы столкнетесь, связана с языковыми привязками для ваших аппаратных API. В прошлом мне приходилось разрабатывать большую часть своего программного обеспечения на языке C и на ассемблере (и даже несколько Forth) просто потому, что это был самый простой способ получить данные от оборудования.

1 голос
/ 22 февраля 2009

Звучит так, будто вы можете выполнять всю обработку в автономном режиме. Если это так, то путь в автономном режиме. Другими словами, разделите процесс на 3 этапа:

  1. Сбор данных
  2. Анализ данных
  3. Исправления физической системы на основе анализа данных.

Сбор данных

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

Анализ данных

Если у вас есть данные на жестком диске, у вас есть много возможностей для анализа данных. Если вы уже знаете F #, тогда переходите к F #. В Python и Matlab доступно множество библиотек анализа данных.

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

Исправления физической системы

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

1 голос
/ 21 февраля 2009

В Microsoft Robotics Studio может быть что-то полезное: текст ссылки , особенно в режиме реального времени. В CCR - Concurrency Coordination Runtime уже многое обдумано, и инструменты моделирования могут помочь вам построить модель, которая поможет вашему анализу.

1 голос
/ 17 февраля 2009

Какое у вас соединение с ПК? .Net подойдет, если это сетевое соединение, так как вы можете использовать потоки для обработки ввода данных.

Мое единственное предупреждение для вас относительно F # или любого функционального языка программирования, включающего большие наборы данных, - это использование памяти. Они замечательны и математически доказуемы, но когда вы получаете исключение переполнения стека для многих рекурсий, это означает, что ваша программа не будет работать и вы потеряете время и усилия.

C # будет отлично, если вам нужно разработать графический интерфейс, winforms и GDI + помогут вам найти что-то полезное без огромных усилий.

Дайте нам больше информации о скоростях передачи данных и подключении, и, может быть, мы можем предложить дополнительную помощь?

...