Эта тема описывает компоненты, которые составляют драйверы составного объекта RS-232, и как можно создать модель с помощью этих драйверов. Эти драйверы выполняют RS-232 асинхронные коммуникации.
Программное обеспечение Simulink® Real-Time™ обеспечивает составные драйверы, которые поддерживают целевой компьютер (системная плата) последовательные порты.
Эти драйверы распределяют функциональность устройства через несколько подсистем и блоков. Для большинства требований RS-232 можно использовать эти драйверы RS-232, когда они реализованы. Однако, если необходимо настроить драйверы RS-232 Simulink Real-Time, составная природа драйверов позволяет вам сделать так.
Вы добавляете блоки подсистемы RS-232 в свою модель Simulink, когда это необходимо, чтобы использовать последовательные порты на целевом компьютере для последовательного ввода-вывода.
После того, как вы создадите модель Simulink, можно добавить блоки драйверов Simulink Real-Time и сконфигурировать те блоки. Следующая процедура описывает, как использовать последовательные порты на целевом компьютере для ввода-вывода с составными драйверами.
Прежде чем вы запустите, решите, какие комбинации COM-порта вы хотите использовать. Пример сделал, чтобы вы сконфигурировали блок Baseboard Send/Receive. Сконфигурировать этот блок, первые избранные пары последовательного порта. Этот параметр задает порты, для которых вы задаете передачу и получаете. У вас есть выбор следующего:
Com1/none
Com2/none
Com1/Com3
Com2/Com4
none/Com3
none/Com4
Custom
Если вы выбираете Com1/Com3
или Com2/Com4
пара, проверяйте, что пара порта совместно использует прерывание. Если пара порта не совместно использует прерывание, вы не можете использовать эти два порта в качестве пары.
В качестве альтернативы можно задать Custom
пара порта. Custom
пара порта является той, которая не совпадает с существующими комбинациями пар порта. Когда вы выбираете Custom
, диалоговое окно позволяет вам конфигурировать свою собственную пару порта. Например, можно установить IRQ и два адреса для пары порта. Если один из портов не используется, установите тот адрес на 0
.
Обычно, порты установлены в следующее:
COM1 — 0x3F8, IRQ 4
COM2 — 0x2F8, IRQ 3
COM3 — 0x3E8 (если есть), IRQ 4
COM4 — 0x2E8 (если есть), IRQ 3
В Custom
пара порта, или установила один или оба порта пары к адресам кроме этих соглашений или присваивает различное значение IRQ. Некоторые платы позволяют вам определять номера IRQ независимо.
Если вы выбираете пары порта Com1/Com3
или Com2/Com4
, необходимо включать, каждый Отправляет/Получает блок подсистемы в модели. Если вы используете COM1 и COM2, или COM1 и пользовательскую пару порта, необходимо включать два, Отправляют/Получают блоки в модели.
Следующий пример показывает две модели, та, которая использует стандартный Com1/Com3
пара порта и та, которая использует пользовательские пары порта:
В Командном окне ввести
slrtlib
Библиотека блока драйверов Simulink Real-Time открывается.
Дважды кликните блок группы RS-232.
Окно с блоками для драйверов составного объекта RS-232 открывается.
В качестве альтернативы можно получить доступ к библиотеке блоков Simulink Real-Time от Браузера Библиотеки Simulink. В Редакторе Simulink, на вкладке Real-Time, от раздела Prepare, нажимают Library Browser. На левой панели дважды кликните Simulink Real-Time, и затем нажмите RS232.
Перетащите блок ASCII Encode к своей модели Simulink. Этот блок кодирует вход для блока RS-232 Send Receive.
Сконфигурируйте этот блок.
Перетащите блок ASCII Decode к своей модели Simulink. Этот блок декодирует выход от блока RS-232 Send Receive.
Сконфигурируйте этот блок.
Дважды кликните блок группы Системной платы.
В зависимости от вашей настройки пары порта перетащите один или два RS-232 Основной платы, Отправляют/Получают блоки в вашу модель Simulink.
Дважды кликните блок Baseboard RS-232 Send/Receive.
Сконфигурируйте этот блок. Отметьте следующие значения Parameter group:
Когда вы выбираете Board Setup
, убедитесь, что значение Configuration сопоставимо с вашей конфигурацией последовательного порта RS-232.
Когда вы выбираете Receive Setup
, для каждого канала, установленного значение параметра Receive Sample Time к значению шага расчета быстрее, чем отправляемые данные. Не оставляйте это значение в -1
. Установите этот параметр для всех каналов, включая каналы, которые вы не используете; в противном случае вы получаете ошибку при генерации кода для приложения реального времени.
Добавьте блок Pulse Generator и целевой блок Scope.
Сконфигурируйте блок Pulse Generator так, чтобы его Pulse type был Sample based
.
Диалоговое окно изменяется, чтобы отобразить параметр Sample time. Введите Sample time, который медленнее, чем тот, который вы устанавливаете для Receive Setup
.
От Браузера Библиотеки Simulink выберите Sinks. В зависимости от вашей настройки перетащите один или несколько блоков Терминатора к своей модели. Чтобы подавить сообщения неиспользуемого порта, соедините этот блок с неиспользованным портом RCV1.
От Браузера Библиотеки Simulink выберите Sources. В зависимости от вашей настройки перетащите блок Ground к своей модели. Чтобы подавить сообщения неиспользуемого порта, соедините этот блок с неиспользованным портом XMT3.
Ваша модель может использовать один блок или два.
Модель одно блока использует Com1/Com3
пара порта:
Модель 2D блока использует два набора Custom
пары порта:
Дважды кликните блок Baseboard RS232 Send Receive. Чтобы сконфигурировать порты на целевом компьютере для этой платы, введите значения.
Это диалоговое окно изменяется в зависимости от выбора Parameter group.
Например, если Parameter group является Board Setup
и порт целевого компьютера соединяется с COM1/COM3, ваш Отправлять Получают диалоговое окно блока, выглядит так фигура.
Для получения дополнительной информации о вводе параметров блоков смотрите, что RS-232 Отправляет/Получает.
Нажмите OK. Отправление Получает завершения диалогового окна блока.
Ваша следующая задача состоит в том, чтобы создать и запустить приложение реального времени.
Программное обеспечение 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, один для каждого заголовка и сообщения. Смотрите xpcserialasciitest
и xpcserialasciisplit
модели в xpcdemos
для примеров того, как использовать этот блок в модели.
Для инструмента, который отправляет двоичное сообщение, вы обычно знаете длину каждого полного сообщения, включая заголовок. Сконфигурируйте блок FIFO Read Binary параметр Header для заголовков сообщения в массиве ячеек и параметре Message Lengths для длин сообщения. Смотрите xpcserialbinarytest
и xpcserialbinarysplit
модели в xpcdemos
для дальнейших примеров того, как использовать этот блок в модели.
Сигналы между блоками в составных драйверах могут быть одним из нескольких типов основных данных, 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 не имеет сообщения на своем выходе.
Получите FIFOs, может иметь слишком мало символов для операции чтения FIFO. Модель, которая получает последовательный ввод-вывод, может иметь блок чтения FIFO, который выполняется в этой ситуации. Это условие заставляет блок чтения FIFO выполнять одно из следующего, в зависимости от того, как вы конфигурируете поведение:
Возвратите последнее сообщение, которое это получило
Возвратите нулевое сообщение длины
Библиотека 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 не обнаружило новое сообщение.
Если сообщение имеет ненулевую длину, позвольте подсистеме обработать новый вектор символов; в противном случае не обрабатывайте его.
Можно использовать структуру обоих типов последовательных данных (Типы Данных сигнала), чтобы управлять, когда сообщение отправляется. В обоих случаях, 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 | RS-232 Send/Receive | RS-232 Send/Receive FIFO | RS232 State