Creating charts from CAN bus messages

Posted in impulse Birt

This screen cast shows the creation and configuration of BIRT and XY charts, using data from CAN bus messages.

Screen Cast: Creating charts from
CAN bus messages

A Pie chart from the CAN bus message IDs

The first example creates a PIE chart, showing the received CAN bus message IDs. The used script is shown below. The script

  1. creates the members of a struct signal,
  2. analyzes all in samples (read the id of the messages) and counts them in a dictionary
  3. writes the counter values in the struct and finally into the output signal.
// input: an array of all input signals
// in0: primary input of type ISamplePointer,IReadableSamples
// in1..: additional inputs of type ISamplePointer,IReadableSamples
// out: output signal of type ITextSamplesWriter
// console: console output of type MessageConsoleStream
// iter: iterator of type ISamplesIterator
// progress: progess control of type  IScriptProgress

// struct signal
progress.cont();
if (members == null) {
    var members <:[Lde.toem.impulse.values.StructMember;:> = out.createMembers(7);
    out.createMember(members, 0, "12", IStructSample.STRUCT_TYPE_INTEGER, null, -1);
    out.createMember(members, 1, "24", IStructSample.STRUCT_TYPE_INTEGER, null, -1);
    out.createMember(members, 2, "61", IStructSample.STRUCT_TYPE_INTEGER, null, -1);
    out.createMember(members, 3, "62", IStructSample.STRUCT_TYPE_INTEGER, null, -1);
    out.createMember(members, 4, "Label", IStructSample.STRUCT_TYPE_TEXT, "LABEL", -1);

    var counter = {};

} else {
    out.close();
    out.open(0);
}

// analyze input
while (iter.hasNext()) {
    iter.next();
    var id = in1.intValueOf("Id");
    if (counter[id] == null)
        counter[id] = 1;
    else
        counter[id] = counter[id] + 1;
}

// create output
members[0].setIntValue(counter[12]);
members[1].setIntValue(counter[24]);
members[2].setIntValue(counter[60]);
members[3].setIntValue(counter[61]);
members[4].setStringValue("Messages");

out.write(0, false, members);

An XY chart from 2 separate integer signals

The second example shows how to create a XY chart from simple float or integer signals using the array combiner production. As the XY chart requires an array signal (float array or integer array containing the x and y values), the separate input signals need to be combined with the array combiner.
 

Print

User Rating: 0 / 5

Star InactiveStar InactiveStar InactiveStar InactiveStar Inactive