In J1939 every ID identifies the data it carries, so you can create a DBC file that species what this is in each ID and a program like my canking will filter out the data into lines with the data as interpreted by the DBC file. With CANOpen there are a handful of ID's and in the mode I am working right now one ID to send to a device and 1 ID in response. The data is identified by the contents of the message. The system uses an object dictionary of indexs and sub indexes to reference the data sent from the same ID followed by the data so only 4 bytes of data are sent for the SDO protocol that I need to use to start up. But because the ID is not unique to the data contained in the message, J1939 types of decoding are not that useful beyond seeing what the last response was.