UM-0086-A2
CANgate User’s Manual
Page 19
RECVJ – Receive J1939 Messages
{ slot }
RECVJ
CANport
PGN
{ startByte{
.
bit}
endByte{
.
bit}
ECUaddr
priority
sampleRate } {
FORMAT
fmtOpt }
where:
slot
is the memory slot being defined (integer,
0-150
). If not specified then
0
is assumed. If CANgate is in Run Mode
then zero is the only value that can go here.
CANport
is the CAN port to use (integer,
1-2
)
PGN
is the J1939 Parameter Group Number (integer,
0-131071
)
startByte{
.
bit}
is the starting bit position of the field of interest within the received message. Bytes are numbered from
1, bits are numbered from 8 (MSB) down to 1 (LSB). If
startByte
is
0
or not specified then
1
is assumed. If
.
bit
is not
specified then
.8
is assumed.
endByte{
.
bit}
is the ending bit position (inclusive) of the field of interest. If
endByte
is
0
or not specified then this will be
the last received byte in the message. If
.
bit
is not specified then
.1
is assumed.
ECUaddr
is the address of the ECU (source address) from which to receive messages (integer,
0-255
, or
256
). If
256
is specified (which is the default), messages are received from any source address.
priority
(integer,
0-7
, default:
6
) specifies the expected value of the priority field (bits 28-26 in the CAN ID)
sampleRate
is the rate at which to return values to the host (integer, in ms, must be multiple of 100ms). May also be
ALL
, in which case a value is returned on receipt of every matching CAN message. If this parameter is
0
or not
specified, the memory slot will only return data when it is polled by the host system (using the
RP
command).
fmtOpt
specifies how the data value is to be formatted when it is returned to the host system; see
(P21)
for more details. if not specified, data will be returned in raw hexadecimal format.
A
RECVJ
memory slot operates in a similar way to a
RECVE
slot. That is, it listens for CAN messages with a particular
extended identifier, extracts the required data field then returns it to the host when polled (or at regular intervals, or after
every message is received). The difference is in the way the identifier is specified.
The SAE-J1939 protocol assigns meaning to various parts of the 29-bit CAN identifier, as follows:
CAN ID bit
J1939 interpretation
28-26
Priority
25
Reserved
24
Data Page, which is effectively bit 16 of the PGN
23-16
Parameter Group Number (PGN) MSB (bit 15-8) – if < 240 then this identifier has
PDU1
(directed
message) format, otherwise it has
PDU2
(broadcast message) format
15-8
if PDU1 format: destination address (implied PGN LSB = 0)
if PDU2 format: PGN LSB, or "group extension" (implied destination address = 0)
7-0
source address
CANgate will receive messages where:
the Priority field matches
priority
, and
the 17-bit PGN/Datapage fields match
PGN
(for PDU1 format, any destination address will be accepted), and
the source address field matches
ECUaddr
(if
ECUaddr
= 256, any source address will be accepted).
PGN numbers, and the layout of the data fields therein, are defined in the SAE J1939/71 (Vehicle Application Layer)
standard.
The
SNOOPJ
command
can be used to determine which J1939 PGNs are being broadcast on a CAN network. See also
(P28)
.
The J1939 protocol also supports
multi-packet
broadcast messages. These messages use a fixed PGN value in the CAN
identifier (PGN 59904, 60160 or 60416); the actual PGN is embedded in the CAN data field. CANgate will receive
multi-packet broadcasts where the embedded PGN value matches
PGN
.
Note that there are some special considerations to be aware of regarding multi-packet transfers; see
(P30)
.
Examples
RECVJ 2 61444 1 8 256 3
Receive messages on CAN port 2 (from any ECU) which relate to PGN 61444 – which contains various engine controller
parameters – and return the entire message to the host when polled. Only messages with priority 3 will be received.