Эта тема описывает компоненты, которые составляют драйверы составного объекта 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, и из меню View, нажимают Show 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, ваше диалоговое окно блока Send Receive выглядит так фигура.
Для получения дополнительной информации о вводе параметров блоков смотрите, что RS-232 Отправляет/Получает.
Нажмите OK. Завершения диалогового окна блока Send Receive.
Ваша следующая задача состоит в том, чтобы создать и запустить приложение реального времени.
Программное обеспечение Simulink Real-Time и Simulink Coder™ создают код С из вашей модели Simulink. Можно затем использовать компилятор C, чтобы создать исполняемый код, который работает на целевом компьютере. Эта тема принимает, что вы знаете, как сконфигурировать вашу модель, чтобы создать приложение реального времени. См. Приложение реального времени Сборки и Загрузки.
После того, как вы добавили блоки RS-232 для системной платы к вашей модели Simulink и сконфигурировали вашу модель, можно создать приложение реального времени.
В Редакторе Simulink, и из меню Code, нажимают C/C++ Code> Build Model.
В Командном окне ввести
start(tg)
Программное обеспечение Simulink Real-Time поддерживает связь RS-232 с блоками драйверов в вашей модели Simulink.
Существует три вида блоков Чтения FIFO: Чтение FIFO, Чтение FIFO HDRS и Двоичный файл Чтения FIFO. Чтобы разработать вашу модель, используйте следующие инструкции:
Простые потоки данных — Использование блок FIFO Read, чтобы считать простые потоки данных. Примером простого потока данных является тот, которому разделили числа пробелы и заканчивается символом новой строки. Блок FIFO Read является простым блоком, который может легко извлечь эти числа.
Более сложные потоки данных — Использование Чтение FIFO HDRS и Двоичный файл Чтения FIFO блокируется для более сложных потоков данных. Более сложный поток данных может быть тем, который содержит заголовки, сообщения переменных длин, или обменивается сообщениями без определенных терминаторов строки. Заголовок сообщения состоит из одного или нескольких символьных идентификаторов в начале сообщения, которые задают то, за чем следуют данные. Сообщения ASCII обычно имеют переменную длину и терминатор строки. Как правило, сообщения конкретного устройства используют тот же предопределенный терминатор строки. Двоичные сообщения обычно имеют фиксированную длину без определенного терминатора строки.
HDRS Чтения FIFO и Двоичные блоки Чтения FIFO также полезны, чтобы работать с устройствами, которые могут отправить различные сообщения в разное время.
Три 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 Декодирует блоки, один для каждого заголовка и сообщения. См. модели 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 HDRS, Двоичный файл Чтения FIFO и Чтение FIFO. Для Чтения FIFO HDRS или Двоичные блоки Чтения FIFO, вы конфигурируете это поведение с параметром Output behavior. Блок FIFO Read возвращает или новое сообщение или нулевое сообщение длины.
Чтобы выполнить типовой код, только если новое сообщение прибывает, проверяйте первый элемент возвращенного вектора, в зависимости от типа данных вектора символов:
В 8-битном типе данных ОТКЛЮЧЕН ПУСТЫМ УКАЗАТЕЛЕМ возвращенный вектор символов. Поэтому, если первый элемент 0, вектор символов имеет нулевую длину, и чтение FIFO не обнаружило новое сообщение.
В 16-битных и 32-битных типах данных первый элемент является количеством символов в векторе символов. Это значение 0, если чтение FIFO не обнаружило новое сообщение.
Если сообщение имеет ненулевую длину, позвольте подсистеме обработать новый вектор символов; в противном случае не обрабатывайте его.
Можно использовать структуру обоих типов последовательных данных (Типы Данных сигнала), чтобы управлять, когда сообщение отправляется. В обоих случаях 0
в первом положении указывает на пустой символьный вектор.
8-битные типы данных — значение 0
в первом положении является терминатором строки NULL для вектора символов.
16-битные и 32-битные типы данных — первое положение является количеством символов, которые следуют.
Если вы соединяете пустой символьный вектор с портом XMT на одной из отправить/получить подсистем, никакие символы не продвинуты на передачу FIFO. Можно получить этот пустой символьный вектор при помощи одного из следующего:
Чтобы иногда отправлять определенный вектор символов, используйте блок продукта, чтобы умножить целый вектор символов или на 0
или на 1
. В этом случае значение 0
или 1
становится передачей, включают. Чтобы оптимизировать эту операцию, используйте блок Demux, чтобы извлечь первый элемент. Умножьтесь только, что элемент 0
или 1
, затем используйте блок Mux, чтобы объединить его снова.
Используйте Ручной Переключатель, Многопортовый Переключатель или блок switch. Сконфигурируйте блоки для двух портов, чтобы выбрать между различными сообщениями с одним из выбора вектор значений 0
. Блок switch только выбирает между векторами той же ширины. Однако, потому что длина вектора символов не использует целый вектор, можно заполнить данные к той же ширине со значениями 0
.
ASCII декодирует | ASCII декодирует V2 | ASCII кодирует | Чтение FIFO | Двоичный файл чтения FIFO | Чтение FIFO HDRS | Запись FIFO | Управление модемом | Модемное состояние | RS-232 Отправляет/Получает | RS-232 Отправляет/Получает FIFO | Состояние RS232