5.1.54. J1939 DM1 transmit (pj1939_Dm1Transmit)

Transmit a J1939-73 DM1 message containing the DTCs with an active state from a DTC table.

5.1.54.1. Supported targets

All targets

5.1.54.2. Required license

None (Main library). (See Section 2.3, “Licensed Features”.)

5.1.54.3. Description

A J1939-73 DM1 message is a variable length message, transmitted by a network node to the global network address. The DM1 message contents detail any active diagnostic trouble codes. As the message is variable in length, direct blockset support is provided (rather than relying on the pj1939_PgTransmit block).

When the block iterates, the DTC table is inspected for active and previously active DTCs. If any differ since the last time the block iterated, a DM1 message could be sent. The J1939-73 specification explains how the periodic transmission of this message varies in relation to DTC activation state changes, as a need to limit J1939 network bandwidth.

Excerpt from J1939/73 specification, on transmission rate:

A DM1 message shall be transmitted, regardless of the presence or absence of any DTC, once every second and on state change. To prevent a high message rate due to intermittent faults that have a very high frequency, it is recommended that no more than one state change per DTC per second be transmitted. For example, if a fault has been active for 1 second or longer, and then becomes inactive, a DM1 message shall be transmitted to reflect this state change. If a different DTC changes state within the 1 second update period, a new DM1 message is transmitted to reflect this new DTC.

5.1.54.4. Inports

  • sim_error_flag

    The simulation inport for the error_flag outport.

    Value type:Boolean
    Calibratable:No
  • sim_transport_errors

    Simulation value of the outport transport_errors.

    Value type:Integer
    Calibratable:No
  • force_transmission

    Set to 1 to force the transmission of a DM1 message, set to zero otherwise.

    Range: 0 or 1.

    Value type:Boolean
    Calibratable:No
  • priority

    J1939 priority of the DM1 message to be transmitted.

    Range: [0, 7]

    Value type:Integer
    Calibratable:No
  • dest_addr

    J1939 destination address for the DM1 message (This could be the source address of the corresponding PGN request, or the global address (255) if the request was sent to the global address). If use_dest_addr is false or a PDU2 message is shorter than 9 bytes, this value is ignored and the message is sent to the global address.

    Range: [0, 255]

    Value type:Integer
    Calibratable:No
  • use_dest_addr

    Whether to send the DM1 to a specified destination address. If false (0), the message will always be sent to the global address. Set to true (1) to allow the message to be sent to a specific destination address, such as the source address of a PGN request.

    Range: 0 or 1.

    Value type:Boolean
    Calibratable:No

5.1.54.5. Outports

  • error_flag

    Set to 1 when the DM1 message could not be buffered for transmission, or if a previous request to send a DM1 message has not completed.

    Value type:Boolean
    Calibratable:No
  • transport_errors

    Saturated count of transport errors (timeout or aborts) for this message.

    Range: [0, 255]

    Value type:Integer
    Calibratable:No

5.1.54.6. Mask parameters

  • J1939 Channel

    The logical J1939 channel on which to transmit. Must be a channel declared with a pj1939_ChannelConfiguration block.

    Value type:Integer
    Calibratable:No
  • DTC table identifier

    The name of the DTC table to act on (there must be a corresponding named table specified in a pdtc_Table block in the model).

    Value type:String
    Calibratable:No

5.1.54.7. Notes

In order to meet the requirement of sending a periodic DM1 message every second, when there is one or more active DTCs, it is necessary to set the block sample rate to 1 second or less. The rate must be an integer factor of 1 second.