7.7.17. Parameter identifier (ppid_Pid)

Captures the current value of a parameter to internal memory or non-volatile memory for access by a diagnostic scan tool.

7.7.17.1. Supported targets

All targets

7.7.17.2. Required license

EXT_DIAG (Extended diagnostics library). (See Section 2.3, “Licensed Features”.)

7.7.17.3. Description

A PID is used to access the current value of an application parameter by a diagnostic scan tool. The access includes reading the parameter and if enabled over-riding the parameter. If the parameter is a non-volatile PID, this value can be written to non-volatile memory, and retained across power cycles.

7.7.17.4. Inports

  • app_bytes

    Application supplied data which is to be accessed by a diagnostic scan tool via the associated PID.

    Value type:Array
  • write_to_nv

    Flag from application to write the data supplied at app_bytes to non-volatile memory. The memory write is triggered on a rising edge. This inport is only active when the Non-volatile storage parameter is ticked.

    Value type:Boolean

7.7.17.5. Outports

  • pid_bytes

    When the PID data is being overridden at the request of the diagnostic scan tool, this outport gives the override data. When not overridden, this outport just copies what is entered at the app_bytes inport. Note that the size and dimensions of this outport are automatically set to match those of the app_bytes inport.

    Value type:Array
  • override_status

    Indicates the ControlParameter status for an InputOutputControl diagnostic service. The values of the InputOutputControlParameter are specified as per the draft KW2000-3. The issued KW2000-3 standard does not specify the values. The draft KW2000-3 and UDS InputOutputControlParameter values do not match

    Table 7.5. InputOutputControl Status (KW2000-3 draft)

    IOControl Status Value Description
    returnControlToECU0x00 Indicates that ControlParameter from InputOutputControl request from test tool was "return control to ECU", or this PID is not currently subject to IOControl.
    freezeCurrentState0x05 Indicates that ControlParameter from InputOutputControl request from test tool was "freeze current state", indicating that this PID is currently subject to override by the tool.
    shortTermAdjustment0x07 Indicates that ControlParameter from InputOutputControl request from test tool was "short term adjustment", indicating that this PID is currently subject to override by the tool.


    Value type:Integer
  • is_valid

    Flag to indicate if the value read from a non-volatile PID is valid. The non-volatile PID can be invalid, if it does not exist yet in non-volatile memory, as it has never been written before. It can also be invalid if the previous size in bytes does not match the currently read size. This flag indicates if the data in pid_bytes is valid. This outport is only active when the Non-volatile storage parameter is ticked.

    Value type:Boolean
  • num_cem_recvd

    The number of controlEnableMask bytes received in the most recent $2F request from the test tool. This outport is only active when the Number of controlEnableMask bytes expected parameter has a non-zero value.

    Value type:uint8_T
  • cem_bytes

    The controlEnableMask byte values received in the most recent $2F request from the test tool. This outport is only active when the Number of controlEnableMask bytes expected parameter has a non-zero value. Only the number of bytes indicated in the num_cem_recvd signal are valid; the rest are zeroed.

    Value type:uint8_T vector

7.7.17.6. Mask parameters

  • Non-volatile storage

    If ticked indicates the PID's value is to be preserved across power cycles thus it is stored in non-volatile memory

    Value type:Boolean
    Calibratable:No
  • J1979 (8 bit)

    If ticked, this parameter is accessible using the SAE J1979 protocol. A numeric box is unveiled upon ticking this box. In the unveiled numeric box enter the unique PID number. This parameter is not available if the Non-volatile storage parameter is ticked.

    Value type:Boolean
    Calibratable:No
  • KWP (8 bit)

    If ticked, this parameter is accessible using the Keyword 2000-3 protocol. A numeric box is unveiled upon ticking this box. In the unveiled numeric box enter a unique PID number.

    Value type:Boolean
    Calibratable:No
  • ISO (16 bit)

    If ticked, this parameter is accessible using the ISO 14229-1 (UDS) protocol. Two additional parameters are unveiled upon ticking this box. In the unveiled numeric box enter the unique PID number. Tick the unveiled "ReadScalingByIdentifier (UDS $24) support" box if UDS $24 support is required. If this box is ticked, more options are unveiled: see below following "Resend input as output". NOTE: If ticked, the PID data is not altered in any way by the PID block. The UDS $24 scaling data is only used to describe the scaling done by the application prior to the PID block so the diagnostic tool can properly decode the data.

    Value type:Boolean
    Calibratable:No
  • J1939 (SPN)

    If ticked indicates the PID represents a J1939 Suspect Parameter Number. A numeric box is displayed upon ticking this box. In the displayed numeric box enter the unique SPN number. Note that this parameter is only currently used to allow freeze frame data to be stored for a J1939 DTC, and to allow reading from and writing to non-volatile memory.

    Value type:Boolean
    Calibratable:No
  • Alphanumeric?

    This checkbox is only displayed when the J1939 (SPN) checkbox is ticked. It determines the format in which the SPN data is transmitted. If ticked, the SPN data is treated as alphanumeric data with most significant byte transmitted first; otherwise it is transmitted with least significant byte first.

    Value type:Boolean
    Calibratable:No
  • String PID

    If ticked indicates a string PID. A box to enter the string is displayed upon ticking this box. The entered string needs to be enclosed with single apostrophes. Note when using a string PID with non-volatile memory, the value of the string will only be written during initialisation.

    Value type:Boolean
    Calibratable:No
  • Allows IOControl

    If ticked allows the diagnostic scan tool to override the PID. Leave unticked to deny the diagnostic scan tool the ability to override the PID. Not applicable for non-volatile PIDs.

    Value type:Boolean
    Calibratable:No
  • Resend input as output

    For a PID value which is being overridden by a diagnostic scan tool, two options exist for what value to report back to the diagnostic scan tool in response to a read data by identifier ($22) command. Not applicable for non-volatile PIDs.

    • Unticked - Responds with the application value written to the PID.
    • Ticked - Responds with the overridden value.

    Value type:Boolean
    Calibratable:No
  • Number of controlEnableMask bytes expected

    If set to a non-zero value, the PID will accept additional input bytes as part of a $2F service request, and these are assumed to be controlEnableMask bytes. These are made available via the outports num_cem_recvd and cem_bytes.

    It is the responsibility of the application to act appropriately on any controlEnableMask bytes, e.g. by restricting the override of physical outputs only to selected signals.

    Value type:Integer
    Calibratable:No
  • Number of data bytes

    Part of ReadScalingByIdentifier support. Enter the number of data bytes that will be stored by this PID. This is the number of data bytes of the PID data, NOT the number of scaling bytes.

    Value type:Integer
    Calibratable:No
  • Scaling Data Type

    Part of ReadScalingByIdentifier support. A drop-down selection of data types as defined in ISO-14229.

    Value type:List
    Calibratable:No
  • Specify Scaling Formula?

    Part of ReadScalingByIdentifier support. If ticked, indicates that a scaling formula will be transmitted with the scaling information. A "Formula Type" drop-down will be unveiled where the formula type must be specified. Additionally, numeric boxes will be unveiled where the formula coefficients must be entered.

    Value type:Boolean
    Calibratable:No
  • Specify engineering units?

    Part of ReadScalingByIdentifier support. If ticked, indicates that engineering units will be transmitted with the scaling information. A "Units" drop-down will be unveiled where the engineering units must be specified. Additionally, a "Use Unit Prefix" check-box will be unveiled. If ticked, a unit prefix will be transmitted with the scaling information. A unit prefix drop-down will be unveiled where the unit prefix must be specified.

    Value type:Boolean
    Calibratable:No
  • Specify state and connection type?

    Part of ReadScalingByIdentifier support. If ticked, indicates that state and connection information (such as active high/low, pull-up/down circuitry, etc.) will be transmitted with the scaling information. Four drop-downs will be unveiled where the state and connection information must be specified.

    Value type:Boolean
    Calibratable:No
  • Manual Entry Scaling Bytes

    Part of ReadScalingByIdentifier support. This field will be unveiled if the "Scaling Data Type" drop-down is set to "F: Manually enter scaling bytes". This field allows the user to manually specify all of the scaling bytes that will be sent by the test tool. Scaling bytes must be entered as a comma-separated list of decimal integers from 0 to 255.

    Value type:Array
    Calibratable:No
  • Scaling Bytes Sent To Test Tool

    Part of ReadScalingByIdentifier support. This read-only field displays the scaling bytes that will be transmitted when service $24 is requested.

    Value type:String
    Calibratable:No

7.7.17.7. Notes

Certain PIDs are handled by the platform and should not be defined by the application using this block. In particular, the J1979 standard defines PIDs $00, $20, $40, etc. to be bitfields defining what other PIDs are supported in various contexts. These PIDs are handled directly by the platform in response to the different J1979 service messages that request them. Similarly, PID 0x02 is defined in the J1979 standard to identify the DTC that caused a freeze frame to be stored, and since this also depends on the context (as to the identity of the freeze frame in question) this too is handled directly by the platform.