Используйте мультиплексирование, чтобы представлять несколько сигналов в местоположении одного сигнала в данных сообщения CAN. Мультиплексированное сообщение может иметь три типа сигналов:
Стандартный сигнал — Этот сигнал всегда активен. Можно создать один или несколько стандартных сигналов.
Сигнал мультиплексора — Также вызвал сигнал режима, это всегда активно, и его значение определяет, который мультиплексировал сигнал, в настоящее время активно в данных о сообщении. Можно создать только один сигнал мультиплексора на сообщение.
Мультиплексированный сигнал — Этот сигнал активен, когда его мультиплексное значение совпадает со значением сигнала мультиплексора. Можно создать один или несколько мультиплексированных сигналов в сообщении.
Мультиплексирование работает только с базой данных CAN с определениями сообщения, которые уже содержат мультиплексную информацию сигнала. Этот пример показывает вам, как получить доступ к различным мультиплексным сигналам с помощью базы данных, созданной именно с этой целью. Эта база данных имеет одно сообщение с этими сигналами:
SigA
— Мультиплексированный сигнал с мультиплексным значением 0
.
SigB
— Другой мультиплексированный сигнал с мультиплексным значением 1
.
MuxSig
— Сигнал мультиплексора, значение которого определяет, какой из двух мультиплексированных сигналов активен в сообщении.
Например,
Создайте базу данных CAN.
d = canDatabase('Mux.dbc')
Это - база данных в качестве примера, созданная для создания мультиплексных сообщений. Чтобы попробовать этот пример, используйте свою собственную базу данных.
Создайте сообщение CAN.
m = canMessage(d,'Msg')
m = can.Message handle Package: can Properties: ID: 250 Extended: 0 Name: 'Msg' Database: [1x1 can.Database] Error: 0 Remote: 0 Timestamp: 0 Data: [0 0 0 0 0 0 0 0] Signals: [1x1 struct] Methods, Events, Superclasses
Чтобы отобразить сигналы, введите:
m.Signals
ans = SigB: 0 SigA: 0 MuxSig: 0
MuxSig
является сигналом мультиплексора, значение которого определяет, какой из двух мультиплексированных сигналов активен в сообщении. SigA
и SigB
являются мультиплексированными сигналами, которые активны в сообщении, если их мультиплексные значения совпадают с MuxSig
. В показанном примере SigA
активен, потому что его текущее мультиплексное значение 0
совпадает со значением MuxSig
(который является 0
).
Если вы хотите сделать SigB
активным, изменить значение MuxSig
к 1
.
m.Signals.MuxSig = 1
Чтобы отобразить сигналы, введите:
m.Signals
ans = SigB: 0 SigA: 0 MuxSig: 1
SigB
теперь активен, потому что его мультиплексное значение 1
совпадает с текущим значением MuxSig
(который является 1
).
Измените значение MuxSig
к 2
.
m.Signals.MuxSig = 2
Здесь, ни один из мультиплексированных сигналов не активен, потому что текущее значение MuxSig
не совпадает с мультиплексным значением или SigA
или SigB
.
m.Signals
ans = SigB: 0 SigA: 0 MuxSig: 2
Всегда проверяйте значение сигнала мультиплексора перед использованием мультиплексированного значения сигналов.
if (m.Signals.MuxSig == 0) % Feel free to use the value of SigA however is required. end
Это гарантирует, что вы не используете недопустимое значение, потому что тулбокс не предотвращает или защищает чтение или запись неактивных мультиплексированных сигналов.
Можно получить доступ и к активным и неактивным мультиплексированным сигналам, независимо от значения сигнала мультиплексора.
Обратитесь к функции canMessage
, чтобы узнать больше о создании сообщений.