Существуют компоненты, которые составляют устаревшие драйверы RS-232. Можно создать модель при помощи этих драйверов. Эти драйверы выполняют RS-232 асинхронные коммуникации.
Программное обеспечение Simulink® Real-Time™ обеспечивает устаревшие драйверы, которые поддерживают целевой компьютер (системная плата) последовательные порты.
Эти драйверы инкапсулируют функциональность устройства при помощи блока Legacy Serial Port и блоков Legacy Serial Port F. Для большинства требований RS-232 можно использовать эти драйверы RS-232. Для модемных требований используйте блок Modem Control и блок Modem Status.
Когда это необходимо, чтобы использовать последовательные порты на целевом компьютере для последовательного ввода-вывода, добавьте RS-232 Legacy Serial Port или блоки подсистемы Legacy Serial Port F к вашей модели Simulink.
Прежде чем вы запустите, решите, какие устаревшие последовательные порты вы хотите использовать. Пример сделал, чтобы вы сконфигурировали блок Legacy Serial Port. Сконфигурировать этот блок, первые избранные последовательные порты.
Следующая процедура показывает, как использовать последовательные порты на целевом компьютере для ввода-вывода с устаревшими драйверами. Это показывает модель что устаревший последовательный порт использования 1 и устаревший последовательный порт 2.
Откройте библиотеку блоков Simulink Real-Time. Можно получить доступ к библиотеке от Браузера Библиотеки Simulink. В Редакторе Simulink, на вкладке Real-Time, от раздела Prepare, нажимают Library Browser. На левой панели дважды кликните Simulink Real-Time, и затем нажмите RS232. Чтобы открыть библиотеку от командного окна MATLAB, введите:
slrealtimelib
В библиотеке блока драйверов Simulink Real-Time дважды кликните блок группы RS232.
В окне с блоками для устаревших драйверов RS-232 перетащите блок ASCII Encode к своей модели Simulink. Этот блок кодирует вход для порта XMT блока Legacy Serial Port.
Сконфигурируйте этот блок.
Перетащите блок ASCII Decode к своей модели Simulink. Этот блок декодирует выход от порта RCV блока Legacy Serial Port.
Сконфигурируйте этот блок.
Дважды кликните блок группы Mainboard.
Перетащите два блока Legacy Serial Port к своей модели Simulink.
Дважды кликните первый блок Legacy Serial Port.
Сконфигурируйте этот блок для Устаревшего Последовательного порта 1
Дважды кликните второй блок Legacy Serial Port.
Сконфигурируйте этот блок для Устаревшего Последовательного порта 2
Добавьте блок Pulse Generator и целевой блок Scope.
Сконфигурируйте блок Pulse Generator так, чтобы его Pulse type был Sample based
.
Диалоговое окно изменяется, чтобы отобразить параметр Sample time. Введите Sample time, который медленнее, чем тот, который вы устанавливаете для Receive Setup
.
От Браузера Библиотеки Simulink выберите Sinks. В зависимости от вашей настройки перетащите один или несколько блоков Терминатора к своей модели.
От Браузера Библиотеки Simulink выберите Sources. В зависимости от вашей настройки перетащите блок Ground к своей модели.
Предварительно созданная модель в качестве примера доступна. slrt_ex_serialbaseboardasciitest
модель использует два устаревших последовательных порта. Чтобы открыть эту модель, в командном окне MATLAB, введите:
open_system(fullfile(matlabroot, 'toolbox', 'slrealtime',... 'examples', 'slrt_ex_serialbaseboardasciitest'))
Ваша следующая задача состоит в том, чтобы создать и запустить приложение реального времени.
Программное обеспечение Simulink Real-Time и Simulink Coder™ создает код С из вашей модели Simulink. Можно затем использовать компилятор C, чтобы создать исполняемый код, который работает на целевом компьютере. Необходимо знать, как сконфигурировать модель, чтобы создать приложение реального времени. См. Приложение реального времени Сборки и Загрузки при помощи Работавшего Цель.
После того, как вы добавите блоки RS-232 для системной платы к вашей модели Simulink и сконфигурируете вашу модель, можно создать приложение реального времени.
В Редакторе Simulink, на вкладке Real-Time, нажимают Run on Target.
Программное обеспечение Simulink Real-Time поддерживает коммуникацию RS-232 при помощи блоков драйверов в вашей модели Simulink.
Существует три вида блоков Чтения FIFO: FIFO Read, FIFO Read HDRS и FIFO Read Binary. Чтобы разработать вашу модель, используйте следующие инструкции:
Простые потоки данных — Использование блок FIFO Read, чтобы считать простые потоки данных. Примером простого потока данных является тот, которому разделили числа пробелы и заканчивается символом новой строки. Блок FIFO Read является простым блоком, который может легко извлечь эти числа.
Сложные потоки данных — Использование FIFO Read HDRS и FIFO Read Binary блокируется для более сложных потоков данных. Более сложный поток данных может быть тем, который содержит заголовки, сообщения различных длин, или обменивается сообщениями без определенных терминаторов строки. Заголовок сообщения состоит из одного или нескольких символьных идентификаторов в начале сообщения, которые задают то, за чем следуют данные. Сообщения ASCII обычно имеют переменную длину и терминатор строки. Как правило, сообщения конкретного устройства используют тот же предопределенный терминатор строки. Двоичные сообщения обычно имеют фиксированную длину без определенного терминатора строки.
Можно также использовать FIFO Read HDRS и блоки FIFO Read Binary, чтобы работать с устройствами, которые могут отправить различные сообщения в разное время.
Вход к этим, FIFO считал блоки, должен иметь тип serialfifoptr
, который выводится от типа F, Отправляют, Получают подсистемы.
Эти примеры показывают экземпляры, когда можно использовать блок FIFO Read.
Для инструмента, который отправляет вектор символов как этот:
<number> <number> ... <CR><LF>
используйте простой блок FIFO Read, чтобы считать сообщение. Сконфигурируйте блок FIFO Read параметр Delimiter для перевода строки (значение 10). Соедините выход с блоком ASCII Decode с форматом, который разделяет числа и кормит ими выходные порты.
Для инструмента, который может отправить одно из нескольких различных сообщений, каждый начинающий с различного фиксированного вектора символов, используют блок FIFO Read HDRS. Например, цифровой мультиметр, соединенный через порт RS-232, отправляет напряжение и усилитель, читающий с сообщениями в этом формате:
volts <number> <CR><LF> amps <number> <CR><LF>
Сконфигурируйте блок FIFO Read HDRS параметр Header для volts
и amps
заголовки в массиве ячеек: {'volts', 'amps'}
. Сконфигурируйте параметр Terminating string для возврата каретки (13) и перевод строки (10): [13 10]
.
Соедините выход с несколькими блоками ASCII Decode, один для каждого заголовка и сообщения. Для примеров того, как использовать этот блок в модели, смотрите slrt_ex_serialasciitest
и slrt_ex_serialasciisplit
модели в matlab/toolbox/slrealtime/examples
.
Для инструмента, который отправляет двоичное сообщение, вы могли знать длину каждого полного сообщения, включая заголовок. Сконфигурируйте блок FIFO Read Binary параметр Header для заголовков сообщения в массиве ячеек и параметр Message Lengths для длин сообщения. Для дальнейших примеров того, как использовать этот блок в модели, смотрите slrt_ex_serialbinarytest
и slrt_ex_serialbinarysplit
модели в matlabroot/toolbox/slrealtime/examples
.
Сигналы между блоками в составных драйверах могут быть одним из нескольких типов основных данных: 8-битный, 16-битный, и 32-битный. Эти типы являются структурами.
8-битные типы данных являются ОТКЛЮЧЕННЫМИ ПУСТЫМ УКАЗАТЕЛЕМ векторами символов, которые представлены как векторы Simulink. Ширина является максимальным количеством символов, которые могут храниться. На рисунке, M
фактический набор сохраненных символов и N
максимальное количество символов, которые могут храниться. Этот рисунок иллюстрирует 8-битный int
ОТКЛЮЧЕННЫЙ ПУСТЫМ УКАЗАТЕЛЕМ и 8-битный uint
ОТКЛЮЧЕННЫЕ ПУСТЫМ УКАЗАТЕЛЕМ типы данных.
Вектор символов имеет 11 символов, отключенных с байтом NULL (0
). Тип данных не может содержать байт NULL как часть действительных данных.
16-битные и 32-битные типы данных используют первый элемент вектора как количество допустимых данных. На рисунке 16-битного типа данных, C
количество допустимых данных и N
ширина вектора. Этот рисунок иллюстрирует количество + 16-битный int
и рассчитайте + 16-битный uint
типы данных. Это расположение также применяется к количеству + 32-битный int
и рассчитайте + 32-битный uint
типы данных.
Последовательные блоки интерпретируют каждую запись в векторе как отдельный символ. Низкоуровневый блок Send пишет байт младшего разряда каждой записи в UART. 16-битные и 32-битные типы данных позволяют встраивание 8-битных значений данных, включая 0
. 8-битный тип данных является самым полезным с ASCII, Кодируют и Декодируют блоки. 16-битные и 32-битные типы данных являются самыми полезными для потоков двоичных данных.
Обычно, вы конфигурируете блок чтения FIFO своего последовательного ввода-вывода модели, чтобы выполниться быстрее, чем модель получает данные. Выполнение так предотвращает получить буфер FIFO от переполнения. Необходимо также сконфигурировать модель, чтобы иметь дело с возможностью, что блок FIFO Read не имеет сообщения на своем выходе.
Получите FIFOs, может иметь слишком мало символов для операции чтения FIFO. Модель, которая получает последовательный ввод-вывод, может иметь блок FIFO Read, который выполняется в этой ситуации. В зависимости от того, как вы конфигурируете поведение, это условие заставляет блок FIFO Read выполнять одну из этих операций:
Возвратите последнее сообщение, которое это получило.
Возвратите сообщение нулевой длины.
Библиотека Simulink Real-Time составных последовательных драйверов имеет три блока Чтения FIFO: FIFO Read HDRS, FIFO Read Binary и FIFO Read. Для FIFO Read HDRS или блоков FIFO Read Binary, вы конфигурируете это поведение при помощи параметра Output behavior. Блок FIFO Read возвращает или новое сообщение или сообщение нулевой длины.
Чтобы выполнить типовой код, только если новое сообщение прибывает, проверяйте первый элемент возвращенного вектора, в зависимости от типа данных вектора символов:
В 8-битном типе данных ОТКЛЮЧЕН ПУСТЫМ УКАЗАТЕЛЕМ возвращенный вектор символов. Если первый элемент 0, вектор символов имеет нулевую длину, и чтение FIFO не обнаружило новое сообщение.
В 16-битных и 32-битных типах данных первым элементом является количество символов в векторе символов. Это значение 0, если чтение FIFO не обнаружило новое сообщение.
Если сообщение имеет ненулевую длину, позвольте подсистеме обработать новый вектор символов. В противном случае не обрабатывайте его.
Можно использовать структуру обоих типов последовательных данных, чтобы управлять, когда вы отправляете сообщение. Для получения дополнительной информации смотрите Типы Данных сигнала RS-232. В обоих случаях, 0
в первом положении указывает на пустой символьный вектор.
8-битные типы данных — значение 0
в первом положении терминатор строки NULL для вектора символов.
16-битные и 32-битные типы данных — первое положение является количеством символов, которые следуют.
Если вы соединяете пустой символьный вектор с портом XMT на одной из отправить/получить подсистем, никакие символы не продвинуты на передачу FIFO. Можно получить этот пустой символьный вектор при помощи одного из этих методов:
Чтобы иногда отправлять определенный вектор символов, используйте блок Product, чтобы умножить целый вектор символов на любой 0
или 1
. В этом случае, 0
или 1
значение становится передачей, включают. Чтобы оптимизировать эту операцию, используйте блок Demux, чтобы извлечь первый элемент. Умножьте только тот элемент на 0
или 1
, затем используйте блок Mux, чтобы объединить его снова.
Используйте Manual Switch, Multiport Switch или блок Switch. Сконфигурируйте блоки для двух портов, чтобы выбрать между различными сообщениями с одним из выбора, являющегося вектором из 0
значения. Блок Switch выбирает только между векторами из той же ширины. Поскольку длина вектора символов не использует целый вектор, можно заполнить данные к той же ширине с 0
значения.
ASCII Decode | ASCII Decode V2 | ASCII Encode | FIFO Read | FIFO Read Binary | FIFO Read HDRS | FIFO Write | Modem Control | Modem Status