Существуют компоненты, которые составляют 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. В зависимости от конфигурации перетащите один или несколько блоков Terminator к модели.
В браузере библиотеки Simulink выберите Sources. В зависимости от конфигурации перетащите блок Ground к модели.
Доступен предварительно сконструированный пример модели. The 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 Read: 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 Send Receive подсистемы.
В этих примерах показаны образцы, когда можно использовать блок 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-битные типы данных являются NULL-оконечными векторами символов, которые представлены как векторы Simulink. Ширина - это максимальное количество символов, которые можно хранить. На рисунке M
- фактический набор сохраненных символов и N
- максимальное количество символов, которые можно хранить. Этот рисунок иллюстрирует 8-битную int
NULL-оконечная и 8-битная uint
Типы данных с обрыв NULL.
Вектор символов имеет 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 Encode и Decode. 16-битный и 32-битный типы данных наиболее полезны для двоичных потоков данных.
Обычно вы конфигурируете блок считывания FIFO последовательного ввода-вывода вашей модели, чтобы он выполнялся быстрее, чем модель получает данные. Это препятствует переполнению буфера приема FIFO. Вы также должны сконфигурировать свою модель, чтобы иметь дело с возможностью, что блок FIFO Read не имеет сообщения на его выходе.
В получателях FIFO может быть слишком мало символов для операции чтения FIFO. Модель, которая получает последовательный ввод-вывод, может иметь блок FIFO Read, который выполняется в этой ситуации. В зависимости от того, как вы конфигурируете поведение, это условие заставляет блок FIFO Read выполнить одну из следующих операций:
Возвращает последнее полученное сообщение.
Возвращает сообщение нулевой длины.
Библиотека композитных последовательных драйверов Simulink Real-Time имеет три блока FIFO Read: FIFO Read HDRS, FIFO Read Binary и FIFO Read. Для блоков FIFO Read HDRS или FIFO Read Binary вы конфигурируете это поведение с помощью параметра Output behavior. Блок FIFO Read возвращает либо новое сообщение, либо сообщение нулевой длины.
Чтобы выполнить код модели только в случае поступления нового сообщения, проверьте первый элемент возвращенного вектора, в зависимости от типа данных вектора символов:
В 8-битном типе данных возвращенный вектор символов завершен по NULL. Если первый элемент равен 0, вектор символов имеет нулевую длину, и считанное FIFO не обнаружило новое сообщение.
В 16-битном и 32-битном типах данных первым элементом является количество символов в вектор символов. Это значение 0, если считанное FIFO не обнаружило новое сообщение.
Если сообщение имеет ненулевую длину, включите подсистему для обработки нового вектора символов. В противном случае не обрабатывайте его.
Можно использовать структуру обоих типов последовательных данных для управления при отправке сообщения. Для получения дополнительной информации смотрите RS-232 Signal Data Types. В обоих случаях a 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