Существуют компоненты, составляющие RS-232 устаревшие драйверы. С помощью этих драйверов можно создать модель. Эти драйверы выполняют RS-232 асинхронную связь.
Программное обеспечение Simulink ® Real-Time™ предоставляет устаревшие драйверы, поддерживающие последовательные порты целевого компьютера (основной платы).
Эти драйверы инкапсулируют функциональные возможности устройства с помощью блоков Legacy Serial Port и Legacy Serial Port F. Для большинства RS-232 требований можно использовать эти драйверы RS-232. Для определения требований к модему используйте блок управления модемом и блок состояния модема.
Когда Вы захотите использовать последовательные порты на целевом компьютере для последовательного ввода/вывода, добавьте Устаревший Последовательный порт последовательного порта RS-232 или Наследия F блоки подсистемы к Вашей модели Simulink.
Перед запуском определите, какие устаревшие последовательные порты необходимо использовать. В этом примере настраивается блок устаревших последовательных портов. Чтобы настроить этот блок, сначала выберите последовательные порты.
В следующей процедуре показано, как использовать последовательные порты на целевом компьютере для ввода-вывода с устаревшими драйверами. На ней показана модель, в которой используются устаревший последовательный порт 1 и устаревший последовательный порт 2.
Откройте библиотеку блоков Simulink в реальном времени. Доступ к библиотеке можно получить из обозревателя библиотеки Simulink. В редакторе Simulink на вкладке «Реальное время» в разделе «Подготовка» выберите «Обозреватель библиотек». На левой панели дважды щелкните Simulink Real-Time и нажмите кнопку RS232. Чтобы открыть библиотеку в окне команд MATLAB, введите:
slrealtimelib
В библиотеке блоков драйверов Simulink Real-Time дважды щелкните блок группы RS232.
В окне с блоками для RS-232 устаревших драйверов перетащите блок кодирования ASCII в модель Simulink. Этот блок кодирует входные данные для стандартного порта XMT.
Настройте этот блок.
Перетащите блок декодирования ASCII в модель Simulink. Этот блок декодирует выходные данные из порта RCV блока устаревших последовательных портов.
Настройте этот блок.
Дважды щелкните по блоку «Mainboard group».
Перетащите два устаревших блока последовательного порта в модель Simulink.
Дважды щелкните первый блок устаревших последовательных портов.
Настройка этого блока для устаревшего последовательного порта 1
Дважды щелкните второй блок устаревших последовательных портов.
Настройка этого блока для устаревшего последовательного порта 2
Добавьте блок генератора импульсов и целевой блок области.
Сконфигурируйте блок генератора импульсов таким образом, чтобы его тип импульса был Sample based.
В диалоговом окне отображается параметр Sample time. Введите время выборки, которое меньше времени, заданного для Receive Setup.
В браузере библиотеки Simulink выберите «Раковины». В зависимости от конфигурации перетащите один или несколько блоков терминатора в модель.
В браузере библиотеки Simulink выберите «Источники». В зависимости от конфигурации перетащите блок «Земля» в модель.
Доступна предварительно построенная примерная модель. slrt_ex_serialbaseboardasciitest модель использует два устаревших последовательных порта. Чтобы открыть эту модель, в окне команды MATLAB введите:
open_system(fullfile(matlabroot, 'toolbox', 'slrealtime',... 'examples', 'slrt_ex_serialbaseboardasciitest'))

Следующей задачей является создание и запуск приложения в реальном времени.
Программное обеспечение Simulink Real-Time и Simulink Coder™ создают код C на основе модели Simulink. Затем можно использовать компилятор C для создания исполняемого кода, запускаемого на целевом компьютере. Необходимо знать, как настроить модель для создания приложения в реальном времени. См. раздел Сборка и загрузка приложения в режиме реального времени с помощью запуска на целевом компьютере.
После добавления блоков RS-232 для основной платы в модель Simulink и настройки модели можно создать приложение реального времени.
В редакторе Simulink на вкладке Real-Time нажмите кнопку Run on Target.
Программное обеспечение Simulink Real-Time поддерживает RS-232 связь с помощью блоков драйверов в модели Simulink.
Существует три типа блоков чтения FIFO: чтение FIFO, чтение FIFO HDRS и чтение Binary FIFO. Для разработки модели используйте следующие рекомендации.
Простые потоки данных - используйте блок чтения FIFO для чтения простых потоков данных. Примером простого потока данных является поток, который имеет числа, разделенные пробелами, и заканчивается символом новой строки. Блок чтения FIFO - это простой блок, который может легко извлекать эти числа.
Сложные потоки данных - используйте двоичные блоки чтения FIFO HDRS и чтения FIFO для более сложных потоков данных. Более сложным может быть поток данных, который содержит заголовки, сообщения различной длины или сообщения без определенных признаков конца. Заголовок сообщения состоит из одного или нескольких идентификаторов символов в начале сообщения, которые определяют, какие данные следуют за ним. Сообщения ASCII обычно имеют переменную длину и признак конца. Обычно сообщения конкретного устройства используют один и тот же предопределенный признак конца. Двоичные сообщения обычно имеют фиксированную длину без определенного признака конца.
Можно также использовать двоичные блоки чтения FIFO HDRS и чтения FIFO для работы с устройствами, которые могут отправлять различные сообщения в разное время.
Входные данные этих блоков считывания FIFO должны иметь тип serialfifoptr, который выводится из подсистем отправки и получения типа F.
В этих примерах показаны случаи, когда можно использовать блок чтения FIFO.
Для инструмента, который посылает такой вектор символов:
<number> <number> ... <CR><LF>
используйте простой блок чтения FIFO для чтения сообщения. Настройте параметр Разделитель блока чтения FIFO для подачи строки (значение 10). Подключите выходные данные к блоку декодирования ASCII с форматом, разделяющим номера и подающим их на выходные порты.
Для инструмента, который может посылать одно из нескольких различных сообщений, каждое из которых начинается с другого фиксированного символьного вектора, используйте блок FIFO Read HDRS. Например, цифровой мультиметр, подключенный через порт RS-232, посылает показания напряжения и усилителя с сообщениями в следующем формате:
volts <number> <CR><LF> amps <number> <CR><LF>
Конфигурирование параметра заголовка блока чтения HDRS FIFO для volts и amps заголовки в массиве ячеек: {'volts', 'amps'}. Сконфигурируйте параметр Terminating string для возврата каретки (13) и подачи строки (10): [13 10].
Подключите выходные данные к нескольким блокам декодирования ASCII, по одному для каждого заголовка и сообщения. Примеры использования этого блока в модели см. в разделе slrt_ex_serialasciitest и slrt_ex_serialasciisplit модели в matlab/toolbox/slrealtime/examples.
Для инструмента, отправляющего двоичное сообщение, можно узнать длину каждого полного сообщения, включая заголовок. Настройте параметр FIFO Read Binary block Header для заголовков сообщения в массиве ячеек и параметр Message Lengths для длин сообщений. Дополнительные примеры использования этого блока в модели см. в разделе slrt_ex_serialbinarytest и slrt_ex_serialbinarysplit модели в matlabroot/toolbox/slrealtime/examples.
Сигналы между блоками в составных драйверах могут быть одного из нескольких основных типов данных: 8-разрядных, 16-разрядных и 32-разрядных. Эти типы являются структурами.
8-битные типы данных представляют собой символьные векторы с нулевым окончанием, которые представлены как векторы Simulink. Ширина - это максимальное количество символов, которое может быть сохранено. На рисунке M - фактический набор хранимых символов и N - максимальное количество символов, которое может быть сохранено. Этот рисунок иллюстрирует 8-битный int NULL-termined и 8-разрядный uint Типы данных с окончанием NULL.
Вектор символов содержит 11 символов, завершенных байтом NULL (0). Тип данных не может содержать байт NULL как часть реальных данных.
16-разрядный и 32-разрядный типы данных используют первый элемент вектора в качестве подсчета допустимых данных. На рисунке 16-разрядного типа данных C - это число допустимых данных и N - ширина вектора. На этом рисунке показано число + 16 бит int и count + 16-битный uint типы данных. Это расположение также относится к счетчику + 32-битному int и count + 32-разрядный uint типы данных.
Последовательные блоки интерпретируют каждую запись в векторе как один символ. Низкоуровневый блок Send записывает байт низкого порядка каждой записи в UART. 16-разрядные и 32-разрядные типы данных позволяют встраивать 8-разрядные значения данных, включая 0. 8-битный тип данных наиболее полезен с блоками кодирования и декодирования ASCII. 16-разрядные и 32-разрядные типы данных наиболее полезны для двоичных потоков данных.
Обычно блок считывания FIFO серийного ввода-вывода модели настраивается для выполнения быстрее, чем модель получает данные. Это предотвращает переполнение буфера FIFO приема. Необходимо также настроить модель таким образом, чтобы иметь возможность того, что блок чтения FIFO не будет иметь сообщения на выходе.
Приемные FIFO могут содержать слишком мало символов для операции чтения FIFO. Модель, принимающая последовательный ввод-вывод, может иметь блок чтения FIFO, который выполняется в этой ситуации. В зависимости от того, как настраивается поведение, это условие приводит к тому, что блок чтения FIFO выполняет одну из следующих операций:
Возврат последнего полученного сообщения.
Возврат сообщения нулевой длины.
У библиотеки В реальном времени Simulink сложных последовательных водителей есть три FIFO Прочитанные блоки: FIFO Прочитанный HDRS, FIFO Прочитанный Набор из двух предметов и Прочитанная FIFO. Для блоков FIFO Read HDRS или FIFO Read Binary это поведение настраивается с помощью параметра Output behavior. Блок чтения FIFO возвращает либо новое сообщение, либо сообщение нулевой длины.
Для выполнения кода модели только в случае поступления нового сообщения проверьте первый элемент возвращаемого вектора в зависимости от типа данных символьного вектора:
В 8-разрядном типе данных возвращаемый символьный вектор завершается NULL. Если первый элемент равен 0, вектор символов имеет нулевую длину, и считывание FIFO не обнаружило нового сообщения.
В 16-разрядных и 32-разрядных типах данных первым элементом является количество символов в символьном векторе. Это значение равно 0, если при чтении FIFO новое сообщение не обнаружено.
Если сообщение имеет ненулевую длину, включите подсистему для обработки нового символьного вектора. В противном случае не обрабатывайте его.
Для управления передачей сообщения можно использовать структуру обоих последовательных типов данных. Дополнительные сведения см. в разделе Типы данных сигналов RS-232. В обоих случаях a 0 в первой позиции указывает пустой символьный вектор.
8-разрядные типы данных - значение 0 в первой позиции находится терминатор NULL для символьного вектора.
16-разрядные и 32-разрядные типы данных - первая позиция - это количество следующих символов.
При подключении пустого символьного вектора к порту XMT в одной из подсистем передачи/приема никакие символы не вставляются в FIFO передачи. Этот пустой вектор символов можно получить одним из следующих способов:
Чтобы периодически отправлять определенный символьный вектор, используйте блок Product для умножения всего символьного вектора на 0 или 1. В этом случае 0 или 1 значение становится разрешением передачи. Чтобы оптимизировать эту операцию, используйте блок Demux для извлечения первого элемента. Умножьте только этот элемент на 0 или 1, затем используйте блок Mux, чтобы снова объединить его.
Используйте блок ручного коммутатора, мультипортового коммутатора или коммутатора. Сконфигурируйте блоки для двух портов для выбора между различными сообщениями, при этом одним из вариантов является вектор 0 значения. Блок Switch выбирает только между векторами одинаковой ширины. Поскольку длина символьного вектора не использует весь вектор, можно поместить данные на одинаковую ширину с помощью 0 значения.
Декодирование ASCII | Декодирование ASCII V2 | Кодировка ASCII | Чтение FIFO | Двоичный файл чтения FIFO | FIFO чтение HDRS | Запись FIFO | Управление модемом | Состояние модема