В этом примере показано, как моделировать сеть связи Ethernet по протоколу CSMA/CD с использованием сообщений Simulink ® и SimEvents ®. В данном примере имеется три компьютера, которые обмениваются данными через сеть связи Ethernet. Каждый компьютер имеет программный компонент, который генерирует данные и интерфейс Ethernet для связи. Каждый компьютер пытается отправить данные на другой компьютер с уникальным MAC-адресом. Интерфейс Ethernet управляет взаимодействием компьютера с сетью с помощью протокола связи CSMA/CD. Протокол используется для реагирования на конфликты, возникающие при одновременной отправке данных несколькими компьютерами. Компонент Ethernet представляет сеть и соединение между компьютерами.

В модели каждый программный компонент генерирует данные (полезную нагрузку) и объединяет данные, их размер и назначение в сообщение. Затем сообщение посылается на интерфейс Ethernet для связи.
В каждой подсистеме компонентов программного обеспечения:
Функциональный блок MATLAB генерирует данные с размером между 46 и 1500 байт [1].
Блок Constant назначает адресам назначения данные.
Блок Bus Creator преобразует Data, PayloadSize, и DestAddress сигналы для невиртуального объекта шины, вызываемого dataPacket.
A Преобразование блоков отправки dataPacket в сообщение.
Блок исходящего порта передает сообщение на интерфейс Ethernet для связи.

Каждый компьютер генерирует данные с различной скоростью. Скорость генерации данных можно изменить из времени выборки функционального блока MATLAB.
Сведения об основах создания интерфейсов отправки и получения сообщений см. в разделе Установление интерфейсов отправки и получения сообщений между компонентами программного обеспечения.
Дважды щелкните по интерфейсу Ethernet 1. Обратите внимание, что можно указать идентификатор станции и емкость буфера передачи.

Подсистемы интерфейса Ethernet имеют три основных компонента:
Собрать кадр Ethernet - преобразует входящее сообщение в кадр Ethernet (MAC).
Буфер передачи - сохраняет кадры Ethernet для передачи.
Управление доступом к среде - реализует протокол CSMA/CD для пакетной передачи [2].

Блоки «Assemble Ethernet Frame» преобразуют сообщения в кадры Ethernet путем присоединения к сообщению специфичных для Ethernet атрибутов [1].
В процессе сборки пакетов:
Блок репликации объектов SimEvents ® с меткой «Копировать сообщение» копирует входящее сообщение. Исходное сообщение пересылается в блок генератора объектов SimEvents ® с именем Assemble MAC Frame. Поскольку параметру метода создания блока генератора объектов присвоено значение Event-based, он немедленно создает объект, когда исходное сообщение приходит в блок. Копия сообщения передается блоку функции Simulink с помощью initPacket() функция. Термины сообщение и сущность используются взаимозаменяемо между Simulink ® и SimEvents ®.
Блок Simulink Function передает данные, их размер и адрес назначения блоку Assemble MAC Frame для сборки кадра.

Блок «Assemble MAC Frame» генерирует кадры Ethernet, которые несут как специфичные для Ethernet атрибуты, так и значения, переданные из блока «Simulink Function».
Блок «Собрать MAC-кадр» вызывает initPacket() функционирует как действие, вызываемое каждым событием формирования кадра.

Ниже приведены атрибуты сгенерированного кадра Ethernet:
entity.TxAddress является StationID.
entity.RxAddress, entity.Data, и entity.PayloadSize присваиваются значения из блока Simulink Function.
entity.TxDelay - задержка передачи. Он определяется размером полезной нагрузки и битрейтом. Bitrate задается функцией инициализации в свойствах модели.
entity.CRC - проверка циклическим избыточным кодом для обнаружения ошибок.
Буфер передачи хранит объекты перед передачей с использованием политики FIFO. Буфер моделируется блоком Queue.
Емкость очереди определяется параметром емкости буфера передачи.
Блоки управления доступом к среде моделируются с использованием шести блоков SimEvents ®.
Блок литника сущности с меткой «Допустим 1 кадр» конфигурируется как активированный литник с двумя входными портами. Один входной порт допускает кадры из блока буфера передачи. Другой входной порт называется управляющим портом, который принимает сообщения от блока CSMA/CD. Блок позволяет одному кадру продвигаться вперед, когда он принимает сообщение с положительным значением от блока CSMA/CD.
Блок коммутатора ввода объектов с именем «Объединить» объединяет два пути. Один входной порт принимает новые кадры, допускаемые блоком кадров «Допуск 1», а другой входной порт принимает кадры для повторной передачи, которые посылаются блоком CSMA/CD.
Блок сервера сущностей с меткой «Ожидание канала» моделирует время обратного отключения кадра перед его повторной передачей по каналу.
Другой блок литника объекта с меткой Отправить в канал открывает литник для приема кадров, когда канал свободен. Состояние канала передается посредством диаграммы CSMA/CD.
Блок репликации объектов с именем «Копировать передаваемый кадр» создает копию кадра. Один кадр передается в сеть Ethernet, а другой - на диаграмму CSMA/CD.
Блок диаграммы дискретных событий CSMA/CD представляет конечный автомат, который моделирует протокол CSMA/CD.

Протокол CSMA/CD [2] моделируется блоком дискретной диаграммы событий, который имеет два входа:
TxIn - копия передаваемого кадра.
RxIn - Кадр, полученный из сети Ethernet.
Диаграмма имеет пять выходов:
IsIdle - Открывает шейку Send to Channel для приема кадров, когда значение равно 1, и закрывает литник, когда значение равно 0.
TxRe - повторно переданный кадр, который пересылается в блок объединения, если во время его передачи обнаружена коллизия.
TxNext - Открывает вентиль «Разрешить 1 кадр» для приема новых кадров, когда значение равно 1.
DataOut - Полученные данные.
Size - размер полученных данных.

Блок изначально находится в Standby состояние и канал свободен.
Если блок передает, то после задержки блок пытается передать сообщение и Isle.data имеет значение 0 чтобы объявить, что канал используется.
Если передача выполнена успешно, блок устанавливает TxNext.data кому 1 , чтобы разрешить новое сообщение в канал и сбросить в Standby состояние.
При наличии коллизии блок повторно отправляет сообщение после его задержки на случайное время отключения. n - счетчик повторных передач. Блок повторно передает сообщение максимум 16 времена. Если все попытки повторной передачи не увенчались успехом, то блок завершает сообщение и разрешает ввод нового сообщения. Затем сбрасывается в StandBy.
Аналогично, блок может принимать сообщения от других компьютеров. Если ошибка отсутствует, сообщения принимаются успешно, и блок выводит принятые данные и их размер.
Компонент Ethernet представляет сеть связи и кабельные соединения компьютеров с сетью.
Дважды щелкните по блоку Ethernet для просмотра его параметров.
Подключенные станции - эти значения присвоены Stations, который является вектором с идентификаторами станций в качестве элементов.
Длина кабелей (м) - эти значения присвоены CableLength и представляют длину кабелей в метрах для каждого компьютера, подключенного к концентратору.
Частота пакетных ошибок (PER) - эти значения присваиваются PER и представляют частоту ошибок при передаче сообщения для каждого компьютера.
Время обработки - эти значения присваиваются ProcessingTime и представляет задержку передачи канала.

Для моделирования сети Ethernet используются три блока SimEvents ®. Три соединения с компьютером объединяются с помощью блока коммутатора ввода объектов. Блок сервера объектов используется для моделирования задержки передачи канала на основе длины кабеля. Блок репликации объектов копирует переданное сообщение и пересылает его на три компьютера.

Смоделировать модель и открыть блок Scope, отображающий среднее использование канала. Коэффициент использования канала сходится приблизительно к 0.12.

Откройте программный компонент 1 в качестве верхней модели и измените скорость генерации данных, установив для параметра Sample time блока Generate Data 1 значение 0.01. Запустите моделирование еще раз и убедитесь, что использование канала увеличивается до 0.2.

К сети можно подключить больше компьютеров.
Чтобы добавить новый компьютер в сеть, выполните следующие действия.
Скопируйте существующий компьютер и присвойте новый идентификатор двойным щелчком на блоке интерфейса Ethernet. В этом примере новый компьютер имеет идентификатор 4.

Дважды щелкните по блоку Ethernet и добавьте идентификатор станции, длину кабеля и частоту ошибок пакетов для нового компьютера.

Кадр Ethernet - Википедия (https://en.wikipedia.org/wiki/Ethernet_frame)
Множественный доступ с контролем несущей с обнаружением столкновений - Википедия (https://en.wikipedia.org/wiki/Carrier-sense_multiple_access_with_collision_detection)
Очередь | Получить | Послать | Диаграмма дискретных событий (SimEvents) | Ворота сущности (SimEvents) | Генератор сущности (SimEvents) | Переключатель ввода сущности (SimEvents) | Репликатор сущности (SimEvents)