このページは機械翻訳を使用して翻訳されました。最新版の英語を参照するには、ここをクリックします。
MATLAB の J1939 通信入門
この例では、J1939 チャネルを作成して使用し、J1939 ネットワーク上でパラメータ グループを送受信する方法を示します。この例では、データベース ファイル J1939.dbc と、ループバック構成で接続された MathWorks ® 仮想 CAN チャネルを使用します。
DBCファイルを開く
定義にアクセスするには、canDatabase を使用して DBC ファイルを開きます。
db = canDatabase("J1939.dbc")db =
Database with properties:
Name: 'J1939'
Path: 'C:\Users\michellw\OneDrive - MathWorks\Documents\MATLAB\Examples\vnt-ex33605241\J1939.dbc'
Nodes: {2×1 cell}
NodeInfo: [2×1 struct]
Messages: {2×1 cell}
MessageInfo: [2×1 struct]
Attributes: {3×1 cell}
AttributeInfo: [3×1 struct]
UserData: []
J1939チャネルを作成する
関数 j1939Channel を使用して、情報を送受信できる J1939 チャネルを作成します。
txCh = j1939Channel(db, "MathWorks", "Virtual 1", 1)
txCh =
Channel with properties:
Device Information:
-------------------
DeviceVendor: 'MathWorks'
Device: 'Virtual 1'
DeviceChannelIndex: 1
DeviceSerialNumber: 0
Data Details:
-------------
ParameterGroupsAvailable: 0
ParameterGroupsReceived: 0
ParameterGroupsTransmitted: 0
FilterPassList: []
FilterBlockList: []
Channel Information:
--------------------
Running: 0
BusStatus: 'N/A'
InitializationAccess: 1
InitialTimestamp: [0×0 datetime]
SilentMode: 0
TransceiverName: 'N/A'
TransceiverState: 'N/A'
BusSpeed: 500000
SJW: []
TSEG1: []
TSEG2: []
NumOfSamples: []
Other Information:
------------------
UserData: []
rxCh = j1939Channel(db, "MathWorks", "Virtual 1", 2)
rxCh =
Channel with properties:
Device Information:
-------------------
DeviceVendor: 'MathWorks'
Device: 'Virtual 1'
DeviceChannelIndex: 2
DeviceSerialNumber: 0
Data Details:
-------------
ParameterGroupsAvailable: 0
ParameterGroupsReceived: 0
ParameterGroupsTransmitted: 0
FilterPassList: []
FilterBlockList: []
Channel Information:
--------------------
Running: 0
BusStatus: 'N/A'
InitializationAccess: 1
InitialTimestamp: [0×0 datetime]
SilentMode: 0
TransceiverName: 'N/A'
TransceiverState: 'N/A'
BusSpeed: 500000
SJW: []
TSEG1: []
TSEG2: []
NumOfSamples: []
Other Information:
------------------
UserData: []
J1939パラメータグループを作成する
関数 j1939ParameterGroup を使用して、ネットワークに送信する単一フレーム パラメータ グループを作成します。
pgSingleFrame = j1939ParameterGroup(db, "VehicleDataSingle")pgSingleFrame =
ParameterGroup with properties:
Protocol Data Unit Details:
---------------------------
Name: 'VehicleDataSingle'
PGN: 40192
Priority: 6
PDUFormatType: 'Peer-to-Peer (Type 1)'
SourceAddress: 254
DestinationAddress: 254
Data Details:
-------------
Timestamp: 0
Data: [255 255 255 255 255 255 255 255]
Signals: [1×1 struct]
Other Information:
------------------
UserData: []
送信の詳細と信号データを設定します。
pgSingleFrame.SourceAddress = 30; pgSingleFrame.DestinationAddress = 50; pgSingleFrame.Signals.VehicleSignal1 = 25; pgSingleFrame.Signals.VehicleSignal2 = 1000; pgSingleFrame.Signals
ans = struct with fields:
VehicleSignal4: -1
VehicleSignal3: -1
VehicleSignal2: 1000
VehicleSignal1: 25
同じアプローチを使用して、マルチフレーム パラメータ グループを作成し、送信の詳細と信号データを設定します。
pgMultiFrame = j1939ParameterGroup(db, "VehicleDataMulti")pgMultiFrame =
ParameterGroup with properties:
Protocol Data Unit Details:
---------------------------
Name: 'VehicleDataMulti'
PGN: 51200
Priority: 6
PDUFormatType: 'Peer-to-Peer (Type 1)'
SourceAddress: 254
DestinationAddress: 254
Data Details:
-------------
Timestamp: 0
Data: [255 255 255 255 255 255 255 255 255 255 255 255]
Signals: [1×1 struct]
Other Information:
------------------
UserData: []
pgMultiFrame.SourceAddress = 30; pgMultiFrame.DestinationAddress = 255; pgMultiFrame.Signals.VehicleSignal1 = 5; pgMultiFrame.Signals.VehicleSignal2 = 650; pgMultiFrame.Signals.VehicleSignal3 = 5000; pgMultiFrame.Signals
ans = struct with fields:
VehicleSignal6: -1
VehicleSignal5: -1
VehicleSignal4: -1
VehicleSignal3: 5000
VehicleSignal2: 650
VehicleSignal1: 5
J1939チャネルを開始する
関数 start を使用して、送信および受信操作用の J1939 チャネルを開始します。
start(rxCh); start(txCh);
J1939パラメータグループを送信する
transmit 関数は、パラメータ グループをネットワークに送信します。J1939 チャネルは、トランスポート プロトコルを介して、マルチフレーム メッセージングを必要とするパラメータ グループを自動的に送信します。
transmit(txCh, pgSingleFrame) transmit(txCh, pgSingleFrame) transmit(txCh, pgMultiFrame) transmit(txCh, pgSingleFrame) transmit(txCh, pgSingleFrame) pause(2);
パラメータグループを受け取る
receive 関数は、ネットワーク上で発生したメッセージングを表す情報をチャネルから取得します。
pgRx = receive(rxCh, Inf)
pgRx=5×8 timetable
Time Name PGN Priority PDUFormatType SourceAddress DestinationAddress Data Signals
___________ _________________ _____ ________ _____________________ _____________ __________________ ____________________________________________ ____________
0.13955 sec VehicleDataSingle 40192 6 Peer-to-Peer (Type 1) 30 50 {[ 25 0 232 3 255 255 255 255]} {1×1 struct}
0.14347 sec VehicleDataSingle 40192 6 Peer-to-Peer (Type 1) 30 50 {[ 25 0 232 3 255 255 255 255]} {1×1 struct}
0.59386 sec VehicleDataMulti 51200 6 Peer-to-Peer (Type 1) 30 255 {[5 0 138 2 136 19 255 255 255 255 255 255]} {1×1 struct}
0.76564 sec VehicleDataSingle 40192 6 Peer-to-Peer (Type 1) 30 50 {[ 25 0 232 3 255 255 255 255]} {1×1 struct}
0.7702 sec VehicleDataSingle 40192 6 Peer-to-Peer (Type 1) 30 50 {[ 25 0 232 3 255 255 255 255]} {1×1 struct}
受信したパラメータグループ信号の検査
単一フレームおよびマルチフレーム パラメータ グループのインスタンスの受信信号の詳細を表示します。
pgRx.Signals{1}ans = struct with fields:
VehicleSignal4: -1
VehicleSignal3: -1
VehicleSignal2: 1000
VehicleSignal1: 25
pgRx.Signals{3}ans = struct with fields:
VehicleSignal6: -1
VehicleSignal5: -1
VehicleSignal4: -1
VehicleSignal3: 5000
VehicleSignal2: 650
VehicleSignal1: 5
アクセス信号値
j1939SignalTimetable 関数を使用すると、パラメータ グループの timetable から信号データを簡単に抽出して変換できます。
sigTT = j1939SignalTimetable(pgRx)
sigTT = struct with fields:
VehicleDataMulti: [1×6 timetable]
VehicleDataSingle: [4×4 timetable]
sigTT.VehicleDataSingle
ans=4×4 timetable
Time VehicleSignal4 VehicleSignal3 VehicleSignal2 VehicleSignal1
___________ ______________ ______________ ______________ ______________
0.13955 sec -1 -1 1000 25
0.14347 sec -1 -1 1000 25
0.76564 sec -1 -1 1000 25
0.7702 sec -1 -1 1000 25
sigTT.VehicleDataMulti
ans=1×6 timetable
Time VehicleSignal6 VehicleSignal5 VehicleSignal4 VehicleSignal3 VehicleSignal2 VehicleSignal1
___________ ______________ ______________ ______________ ______________ ______________ ______________
0.59386 sec -1 -1 -1 5000 650 5
J1939チャネルを停止する
ネットワークからのデータの受信を停止するには、stop 関数を使用して J1939 チャネルを停止します。
stop(rxCh); stop(txCh);