이 페이지는 기계 번역을 사용하여 번역되었습니다. 영어 원문을 보려면 여기를 클릭하십시오.
MATLAB에서 CAN 통신 시작하기
이 예제에서는 CAN 채널을 사용하여 CAN 메시지를 송수신하는 방법을 보여줍니다. 여기서는 루프백 구성으로 연결된 MathWorks® 가상 CAN 채널을 사용합니다.
수신 채널 생성하기
공급업체명, 장치명 및 장치 채널 인덱스를 지정하여 canChannel를 사용한 CAN 채널을 생성하고 메시지를 수신합니다.
rxCh = canChannel("MathWorks", "Virtual 1", 2);
채널 검사하기
get 명령어를 사용하여 모든 채널 속성과 그 현재 값에 대한 더 자세한 정보를 확인하십시오.
get(rxCh)
ArbitrationBusSpeed: []
DataBusSpeed: []
ReceiveErrorCount: 0
TransmitErrorCount: 0
InitializationAccess: 1
InitialTimestamp: [0×0 datetime]
SilentMode: 0
TransceiverState: 'N/A'
BusSpeed: 500000
NumOfSamples: []
SJW: []
TSEG1: []
TSEG2: []
BusStatus: 'N/A'
TransceiverName: 'N/A'
Database: []
MessageReceivedFcn: []
MessageReceivedFcnCount: 1
UserData: []
FilterHistory: 'Standard ID Filter: Allow All | Extended ID Filter: Allow All'
MessagesReceived: 0
MessagesTransmitted: 0
Running: 0
Device: 'Virtual 1'
DeviceChannelIndex: 2
DeviceSerialNumber: 0
DeviceVendor: 'MathWorks'
ProtocolMode: 'CAN'
MessagesAvailable: 0
채널 시작하기
채널을 온라인 상태로 설정하려면 start 명령어를 사용하십시오.
start(rxCh);
메시지 송신하기
예제 함수 generateMsgs는 canMessage를 사용하여 CAN 메시지를 생성하고, 다양한 주기적 속도로 transmit를 통해 이를 송신합니다. 데모 목적으로 CAN 버스에서 트래픽을 생성합니다.
type generateMsgsfunction generateMsgs()
% generateMsgs Creates and transmits CAN messages for demo purposes.
%
% generateMsgs periodically transmits multiple CAN messages at various
% periodic rates with changing message data.
%
% Copyright 2008-2016 The MathWorks, Inc.
% Create the messages to send using the canMessage function. The
% identifier, an indication of standard or extended type, and the data
% length is given for each message.
msgTx100 = canMessage(100, false, 0);
msgTx200 = canMessage(200, false, 2);
msgTx400 = canMessage(400, false, 4);
msgTx600 = canMessage(600, false, 6);
msgTx800 = canMessage(800, false, 8);
% Create a CAN channel on which to transmit.
txCh = canChannel('MathWorks', 'Virtual 1', 1);
% Register each message on the channel at a specified periodic rate.
transmitPeriodic(txCh, msgTx100, 'On', 0.500);
transmitPeriodic(txCh, msgTx200, 'On', 0.250);
transmitPeriodic(txCh, msgTx400, 'On', 0.125);
transmitPeriodic(txCh, msgTx600, 'On', 0.050);
transmitPeriodic(txCh, msgTx800, 'On', 0.025);
% Start the CAN channel.
start(txCh);
% Run for several seconds incrementing the message data regularly.
for ii = 1:50
% Increment the message data bytes.
msgTx200.Data = msgTx200.Data + 1;
msgTx400.Data = msgTx400.Data + 1;
msgTx600.Data = msgTx600.Data + 1;
msgTx800.Data = msgTx800.Data + 1;
% Wait for a time period.
pause(0.100);
end
% Stop the CAN channel.
stop(txCh);
end
예제를 위해 메시지를 송신하려면 generateMsgs 함수를 실행하십시오.
generateMsgs();
메시지 수신하기
generateMsgs가 완료되면, receive 함수를 사용하여 채널에서 이용 가능한 모든 메시지를 수신합니다.
rxMsg = receive(rxCh, Inf, "OutputFormat", "timetable");
수신된 메시지의 첫 몇 행을 미리 보기 위해 head를 사용하십시오.
head(rxMsg)
Time ID Extended Name Data Length Signals Error Remote
___________ ___ ________ __________ ___________________ ______ ____________ _____ ______
0.31722 sec 100 false {0×0 char} {1×0 uint8 } 0 {0×0 struct} false false
0.31723 sec 200 false {0×0 char} {[ 0 0]} 2 {0×0 struct} false false
0.31723 sec 400 false {0×0 char} {[ 0 0 0 0]} 4 {0×0 struct} false false
0.31723 sec 600 false {0×0 char} {[ 0 0 0 0 0 0]} 6 {0×0 struct} false false
0.31723 sec 800 false {0×0 char} {[0 0 0 0 0 0 0 0]} 8 {0×0 struct} false false
0.34689 sec 800 false {0×0 char} {[1 1 1 1 1 1 1 1]} 8 {0×0 struct} false false
0.37728 sec 600 false {0×0 char} {[ 1 1 1 1 1 1]} 6 {0×0 struct} false false
0.37729 sec 800 false {0×0 char} {[1 1 1 1 1 1 1 1]} 8 {0×0 struct} false false
채널 중지하기
채널을 오프라인으로 설정하려면 stop 명령어를 사용하십시오.
stop(rxCh);
수신된 메시지 분석하기
MATLAB®는 CAN 메시지 분석을 수행하기 위한 강력한 환경을 제공합니다. plot 명령어는 메시지 타임스탬프와 식별자를 포함한 산점도를 생성하여 네트워크에서 특정 메시지가 언제 발생했는지에 대한 개요를 제공합니다.
plot(rxMsg.Time, rxMsg.ID, "x") ylim([0 2047]) xlabel("Timestamp") ylabel("CAN Identifier")
