Skip to content

Commit

Permalink
Added Commanded AFR calc based on POL Fueling table for IAT MAF Comp
Browse files Browse the repository at this point in the history
  • Loading branch information
vimsh committed Oct 12, 2014
1 parent 66b7708 commit 42526f8
Show file tree
Hide file tree
Showing 5 changed files with 114 additions and 32 deletions.
Binary file modified MafScaling.jar
Binary file not shown.
54 changes: 45 additions & 9 deletions src/com/vgi/mafscaling/MafIatColumnsFiltersSelection.java
Original file line number Diff line number Diff line change
Expand Up @@ -30,25 +30,27 @@ public MafIatColumnsFiltersSelection(boolean isPolfTableSet) {
}

protected int getWindowHeight() {
return 750;
return 850;
}

protected int getColSelectionGridHeight() {
return 10;
return 13;
}

protected void addColSelection() {
addTimeColSelection();
addRPMColSelection();
addLoadColSelection();
addThrottleAngleColSelection();
addAFLearningColSelection();
addAFCorrectionColSelection();
addMAFVoltageColSelection();
addStockAFRColSelection();
addWidebandAFRColSelection();
addCommandedAFRColSelection();
addIATColSelection();
addMAFColSelection();
addClOlStatusColSelection();
addCommandedAFRColSelection();
}

protected void addFilterSelection() {
Expand All @@ -64,6 +66,8 @@ protected void addFilterSelection() {
minAfrFilter.setText(String.valueOf(Config.getMIAfrMinimumValue()));
addDvDtMaximumFilter();
maxDvdtFilter.setText(String.valueOf(Config.getMIDvDtMaximumValue()));
addWOTEnrichmentMinimumFilter();
wotEnrichmentField.setText(String.valueOf(Config.getWOTEnrichmentValue()));
addWideBandAFRRowOffsetFilter();
wbo2RowOffsetField.setText(String.valueOf(Config.getWBO2RowOffset()));
addCellHitCountMinimumFilter();
Expand All @@ -84,6 +88,26 @@ protected boolean validate(StringBuffer error) {
boolean ret = true;
String value;
String colName;

// Engine Speed
value = rpmName.getText().trim();
colName = rpmLabelText;
if (value.isEmpty()) {
ret = false;
error.append("\"").append(colName).append("\" column must be specified\n");
}
else
Config.setRpmColumnName(value);

// Engine Load
value = loadName.getText().trim();
colName = loadLabelText;
if (value.isEmpty()) {
ret = false;
error.append("\"").append(colName).append("\" column must be specified\n");
}
else
Config.setLoadColumnName(value);

// AFR Learning
value = afLearningName.getText().trim();
Expand Down Expand Up @@ -174,16 +198,23 @@ protected boolean validate(StringBuffer error) {
}
else
Config.setWidebandAfrColumnName(value);

// Commanded AFR
value = commAfrName.getText().trim();
colName = commAfrLabelText;
if (value.isEmpty()) {
ret = false;
error.append("\"").append(colName).append("\" column must be specified if \"Primary Open Loop Fueling\" table is not set.\n");
}
else
if (isPolfTableSet) {
if (value.isEmpty())
value = Config.NO_NAME;
Config.setCommandedAfrColumnName(value);
}
else {
if (value.isEmpty()) {
ret = false;
error.append("\"").append(colName).append("\" column must be specified if \"Primary Open Loop Fueling\" table is not set.\n");
}
else
Config.setCommandedAfrColumnName(value);
}

// MAF
value = mafName.getText().trim();
Expand Down Expand Up @@ -220,6 +251,9 @@ protected boolean validate(StringBuffer error) {
// dV/dt filter
Config.setMIDvDtMaximumValue(Double.valueOf(maxDvdtFilter.getText()));

// WOT Enrichment
Config.setWOTEnrichmentValue(Double.valueOf(wotEnrichmentField.getText()));

// WBO2 Row Offset
Config.setWBO2RowOffset(Integer.valueOf(wbo2RowOffsetField.getText()));

Expand All @@ -240,6 +274,8 @@ else if ("maxdvdt".equals(e.getActionCommand()))
maxDvdtFilter.setText(Config.DefaultDvDtMaximum);
else if ("minhitcnt".equals(e.getActionCommand()))
minCellHitCountFilter.setText(Config.DefaultMIMinCellHitCount);
else if ("wotenrich".equals(e.getActionCommand()))
wotEnrichmentField.setText(Config.DefaultWOTEnrichment);
else if ("wbo2offset".equals(e.getActionCommand()))
wbo2RowOffsetField.setText(Config.DefaultWBO2RowOffset);
else if ("corrapply".equals(e.getActionCommand()))
Expand Down
78 changes: 58 additions & 20 deletions src/com/vgi/mafscaling/MafIatComp.java
Original file line number Diff line number Diff line change
Expand Up @@ -119,13 +119,16 @@ public class MafIatComp extends JTabbedPane implements ActionListener, IMafChart
private double afrMin = Config.getMIAfrMinimumValue();
private double afrMax = Config.getMIAfrMaximumValue();
private double dvDtMax = Config.getMIDvDtMaximumValue();
private double minWotEnrichment = Config.getWOTEnrichmentValue();

private int logClOlStatusColIdx = -1;
private int logThrottleAngleColIdx = -1;
private int logAfLearningColIdx = -1;
private int logAfCorrectionColIdx = -1;
private int logAfrColIdx = -1;
private int logWBAfrColIdx = -1;
private int logRpmColIdx = -1;
private int logLoadColIdx = -1;
private int logCommandedAfrCol = -1;
private int logTimeColIdx = -1;
private int logMafvColIdx = -1;
Expand All @@ -142,6 +145,7 @@ public class MafIatComp extends JTabbedPane implements ActionListener, IMafChart
private ChartPanel chartPanel = null;
private JScrollPane dataScrollPane = null;

private PrimaryOpenLoopFuelingTable polfTable = null;
private ExcelAdapter mpExcelAdapter = null;
private ExcelAdapter excelAdapter = new ExcelAdapter();
private ArrayList<Double> errCorrArray = new ArrayList<Double>();
Expand All @@ -160,8 +164,9 @@ public class MafIatComp extends JTabbedPane implements ActionListener, IMafChart
private ArrayList<Double> yAxisArray = null;
private ArrayList<ArrayList<Double>> savedNewMafIatTable = new ArrayList<ArrayList<Double>>();

public MafIatComp(int tabPlacement) {
public MafIatComp(int tabPlacement, PrimaryOpenLoopFuelingTable table) {
super(tabPlacement);
polfTable = table;
initialize();
}

Expand Down Expand Up @@ -208,16 +213,25 @@ private void createDataTab() {
dataPanel.add(cntlPanel, gbl_ctrlPanel);

GridBagLayout gbl_cntlPanel = new GridBagLayout();
gbl_cntlPanel.columnWidths = new int[]{0, 0, 0, 0, 0, 0, 0};
gbl_cntlPanel.columnWidths = new int[]{0, 0, 0, 0, 0, 0, 0, 0};
gbl_cntlPanel.rowHeights = new int[]{0};
gbl_cntlPanel.columnWeights = new double[]{0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0};
gbl_cntlPanel.columnWeights = new double[]{0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0};
gbl_cntlPanel.rowWeights = new double[]{0};
cntlPanel.setLayout(gbl_cntlPanel);

JButton btnOpFuelingButton = new JButton("POL Fueling");
GridBagConstraints gbc_btnOpFuelingButton = new GridBagConstraints();
gbc_btnOpFuelingButton.insets = new Insets(0, 0, 5, 5);
gbc_btnOpFuelingButton.gridx = 0;
gbc_btnOpFuelingButton.gridy = 0;
btnOpFuelingButton.setActionCommand("fueling");
btnOpFuelingButton.addActionListener(this);
cntlPanel.add(btnOpFuelingButton, gbc_btnOpFuelingButton);

JButton btnLoadDataButton = new JButton("Load Log");
GridBagConstraints gbc_btnLoadDataButton = new GridBagConstraints();
gbc_btnLoadDataButton.insets = new Insets(0, 0, 5, 5);
gbc_btnLoadDataButton.gridx = 0;
gbc_btnLoadDataButton.gridx = 1;
gbc_btnLoadDataButton.gridy = 0;
btnLoadDataButton.setActionCommand("loadlog");
btnLoadDataButton.addActionListener(this);
Expand All @@ -227,7 +241,7 @@ private void createDataTab() {
GridBagConstraints gbc_btnMafIatClearButton = new GridBagConstraints();
gbc_btnMafIatClearButton.anchor = GridBagConstraints.PAGE_START;
gbc_btnMafIatClearButton.insets = new Insets(0, 0, 5, 5);
gbc_btnMafIatClearButton.gridx = 1;
gbc_btnMafIatClearButton.gridx = 2;
gbc_btnMafIatClearButton.gridy = 0;
btnMafIatClearButton.setActionCommand("clearmp");
btnMafIatClearButton.addActionListener(this);
Expand All @@ -236,7 +250,7 @@ private void createDataTab() {
JButton btnRunClearButton = new JButton("Clear Run Data");
GridBagConstraints gbc_btnRunClearButton = new GridBagConstraints();
gbc_btnRunClearButton.insets = new Insets(0, 0, 5, 5);
gbc_btnRunClearButton.gridx = 2;
gbc_btnRunClearButton.gridx = 3;
gbc_btnRunClearButton.gridy = 0;
btnRunClearButton.setActionCommand("clearlog");
btnRunClearButton.addActionListener(this);
Expand All @@ -245,7 +259,7 @@ private void createDataTab() {
JButton btnAllClearButton = new JButton("Clear All");
GridBagConstraints gbc_btnAllClearButton = new GridBagConstraints();
gbc_btnAllClearButton.insets = new Insets(0, 0, 5, 5);
gbc_btnAllClearButton.gridx = 3;
gbc_btnAllClearButton.gridx = 4;
gbc_btnAllClearButton.gridy = 0;
btnAllClearButton.setActionCommand("clearall");
btnAllClearButton.addActionListener(this);
Expand All @@ -254,7 +268,7 @@ private void createDataTab() {
JCheckBox hideLogTableCheckBox = new JCheckBox("Hide Log Table");
GridBagConstraints gbc_hideLogTableCheckBox = new GridBagConstraints();
gbc_hideLogTableCheckBox.insets = new Insets(0, 0, 3, 3);
gbc_hideLogTableCheckBox.gridx = 4;
gbc_hideLogTableCheckBox.gridx = 5;
gbc_hideLogTableCheckBox.gridy = 0;
hideLogTableCheckBox.setActionCommand("hidelogtable");
hideLogTableCheckBox.addActionListener(this);
Expand All @@ -263,7 +277,7 @@ private void createDataTab() {
compareTableCheckBox = new JCheckBox("Compare Tables");
GridBagConstraints gbc_compareTableCheckBox = new GridBagConstraints();
gbc_compareTableCheckBox.insets = new Insets(0, 0, 3, 3);
gbc_compareTableCheckBox.gridx = 5;
gbc_compareTableCheckBox.gridx = 6;
gbc_compareTableCheckBox.gridy = 0;
compareTableCheckBox.setActionCommand("comparetables");
compareTableCheckBox.addActionListener(this);
Expand All @@ -273,7 +287,7 @@ private void createDataTab() {
GridBagConstraints gbc_btnGoButton = new GridBagConstraints();
gbc_btnGoButton.anchor = GridBagConstraints.EAST;
gbc_btnGoButton.insets = new Insets(0, 0, 5, 0);
gbc_btnGoButton.gridx = 6;
gbc_btnGoButton.gridx = 7;
gbc_btnGoButton.gridy = 0;
btnGoButton.setActionCommand("go");
btnGoButton.addActionListener(this);
Expand Down Expand Up @@ -737,7 +751,7 @@ private int getLogTableEmptyRow() {
return 0;
}

private boolean getColumnsFilters(String[] elements) {
private boolean getColumnsFilters(String[] elements, boolean isPolSet) {
boolean ret = true;
ArrayList<String> columns = new ArrayList<String>(Arrays.asList(elements));
String logClOlStatusColName = Config.getClOlStatusColumnName();
Expand All @@ -751,6 +765,8 @@ private boolean getColumnsFilters(String[] elements) {
String logIatColName = Config.getIatColumnName();
String logMafColName = Config.getMassAirflowColumnName();
String logCommandedAfrColName = Config.getCommandedAfrColumnName();
String logRpmColName = Config.getRpmColumnName();
String logLoadColName = Config.getLoadColumnName();
logClOlStatusColIdx = columns.indexOf(logClOlStatusColName);
logThrottleAngleColIdx = columns.indexOf(logThrottleAngleColName);
logAfLearningColIdx = columns.indexOf(logAfLearningColName);
Expand All @@ -762,17 +778,21 @@ private boolean getColumnsFilters(String[] elements) {
logMafvColIdx = columns.indexOf(logMafvColName);
logIatColIdx = columns.indexOf(logIatColName);
logMafColIdx = columns.indexOf(logMafColName);
logRpmColIdx = columns.indexOf(logRpmColName);
logLoadColIdx = columns.indexOf(logLoadColName);
if (logClOlStatusColIdx == -1) { Config.setClOlStatusColumnName(Config.NO_NAME); ret = false; }
if (logThrottleAngleColIdx == -1){ Config.setThrottleAngleColumnName(Config.NO_NAME);ret = false; }
if (logAfLearningColIdx == -1) { Config.setAfLearningColumnName(Config.NO_NAME); ret = false; }
if (logAfCorrectionColIdx == -1) { Config.setAfCorrectionColumnName(Config.NO_NAME); ret = false; }
if (logWBAfrColIdx == -1) { Config.setWidebandAfrColumnName(Config.NO_NAME); ret = false; }
if (logAfrColIdx == -1) { Config.setAfrColumnName(Config.NO_NAME); ret = false; }
if (logCommandedAfrCol == -1) { Config.setCommandedAfrColumnName(Config.NO_NAME); ret = false; }
if (logTimeColIdx == -1) { Config.setTimeColumnName(Config.NO_NAME); ret = false; }
if (logMafvColIdx == -1) { Config.setMafVoltageColumnName(Config.NO_NAME); ret = false; }
if (logIatColIdx == -1) { Config.setIatColumnName(Config.NO_NAME); ret = false; }
if (logMafColIdx == -1) { Config.setMassAirflowColumnName(Config.NO_NAME); ret = false; }
if (logRpmColIdx == -1) { Config.setRpmColumnName(Config.NO_NAME); ret = false; }
if (logLoadColIdx == -1) { Config.setLoadColumnName(Config.NO_NAME); ret = false; }
if (logCommandedAfrCol == -1) { Config.setCommandedAfrColumnName(Config.NO_NAME); if (!isPolSet) ret = false; }
isMafIatInRatio = Config.getIsMafIatInRatio();
afrRowOffset = Config.getWBO2RowOffset();
corrApplied = Config.getMICorrectionAppliedValue();
Expand All @@ -782,12 +802,14 @@ private boolean getColumnsFilters(String[] elements) {
afrMin = Config.getMIAfrMinimumValue();
afrMax = Config.getMIAfrMaximumValue();
dvDtMax = Config.getMIDvDtMaximumValue();
minWotEnrichment = Config.getWOTEnrichmentValue();
return ret;
}

private void loadLogFile() {
if (JFileChooser.APPROVE_OPTION != fileChooser.showOpenDialog(this))
return;
boolean isPolSet = polfTable.isSet();
File[] files = fileChooser.getSelectedFiles();
for (File file : files) {
BufferedReader br = null;
Expand All @@ -797,21 +819,23 @@ private void loadLogFile() {
String line = br.readLine();
if (line != null) {
String [] elements = line.split(",", -1);
getColumnsFilters(elements);
getColumnsFilters(elements, false);

boolean resetColumns = false;
if (logThrottleAngleColIdx >= 0 || logAfLearningColIdx >= 0 || logAfCorrectionColIdx >= 0 ||
logWBAfrColIdx >= 0 || logAfrColIdx >= 0 || logCommandedAfrCol >= 0 || logTimeColIdx >=0 ||
logMafvColIdx >= 0 || logIatColIdx >= 0 || logMafColIdx >= 0 || logClOlStatusColIdx >= 0) {
logMafvColIdx >= 0 || logIatColIdx >= 0 || logMafColIdx >= 0 || logClOlStatusColIdx >= 0 ||
logRpmColIdx >= 0 || logLoadColIdx >= 0) {
if (JOptionPane.YES_OPTION == JOptionPane.showConfirmDialog(null, "Would you like to reset column names or filter values?", "Columns/Filters Reset", JOptionPane.YES_NO_OPTION, JOptionPane.PLAIN_MESSAGE))
resetColumns = true;
}

if (resetColumns || logThrottleAngleColIdx < 0 || logAfLearningColIdx < 0 || logAfCorrectionColIdx < 0 ||
logWBAfrColIdx < 0 || logAfrColIdx < 0 || logCommandedAfrCol < 0 || logTimeColIdx < 0 ||
logMafvColIdx < 0 || logIatColIdx < 0 || logMafColIdx < 0 || logClOlStatusColIdx < 0) {
ColumnsFiltersSelection selectionWindow = new MafIatColumnsFiltersSelection(false);
if (!selectionWindow.getUserSettings(elements) || !getColumnsFilters(elements))
if (resetColumns || logThrottleAngleColIdx < 0 || logAfLearningColIdx < 0 ||
logAfCorrectionColIdx < 0 || logWBAfrColIdx < 0 || logAfrColIdx < 0 || logTimeColIdx < 0 ||
logMafvColIdx < 0 || logIatColIdx < 0 || logMafColIdx < 0 || logClOlStatusColIdx < 0 ||
logRpmColIdx < 0 || logLoadColIdx < 0 || (logCommandedAfrCol < 0 && !isPolSet)) {
ColumnsFiltersSelection selectionWindow = new MafIatColumnsFiltersSelection(isPolSet);
if (!selectionWindow.getUserSettings(elements) || !getColumnsFilters(elements, isPolSet))
return;
}

Expand All @@ -825,6 +849,8 @@ private void loadLogFile() {
double pThrottle = 0;
double ppThrottle = 0;
double afr = 0;
double rpm = 0;
double load = 0;
double corr = 0;
double cmdafr = 0;
double trims = 0;
Expand Down Expand Up @@ -883,7 +909,16 @@ else if (row <= 2 || Math.abs(ppThrottle - throttle) <= thrtlMaxChange2) {
}
else {
afr = Double.valueOf(afrflds[logWBAfrColIdx]);
cmdafr = Double.valueOf(flds[logCommandedAfrCol]);
rpm = Double.valueOf(flds[logRpmColIdx]);
load = Double.valueOf(flds[logLoadColIdx]);
if (logCommandedAfrCol >= 0)
cmdafr = Double.valueOf(flds[logCommandedAfrCol]);
else if (isPolSet)
cmdafr = Utils.calculateCommandedAfr(rpm, load, minWotEnrichment, polfTable);
else {
JOptionPane.showMessageDialog(null, "Please set either \"Commanded AFR\" column or \"Primary Open Loop Fueling\" table", "Error", JOptionPane.ERROR_MESSAGE);
return;
}
corr = (afr / ((100.0 - trims) / 100.0)) / cmdafr;
}
iat = Double.valueOf(flds[logIatColIdx]);
Expand Down Expand Up @@ -1363,6 +1398,9 @@ else if ("clearall".equals(e.getActionCommand())) {
else if ("go".equals(e.getActionCommand())) {
calculateIATComp();
}
else if ("fueling".equals(e.getActionCommand())) {
polfTable.getSetUserFueling();
}
else if ("loadlog".equals(e.getActionCommand())) {
loadLogFile();
}
Expand Down
4 changes: 2 additions & 2 deletions src/com/vgi/mafscaling/MafScaling.java
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@

public class MafScaling {
private static final Logger logger = Logger.getLogger(MafScaling.class);
private static final String Title = "MAF Scaling - v1.6.0";
private static final String Title = "MAF Scaling - v1.6.1";
private static final String OLTabName = "<html>Open Loop</html>";
private static final String CLTabName = "<html>Closed Loop</html>";
private static final String RTabName = "<html>Rescale</html>";
Expand Down Expand Up @@ -119,7 +119,7 @@ public void windowClosing(WindowEvent e) {
lc.setTabLayoutPolicy(JTabbedPane.SCROLL_TAB_LAYOUT);
tabbedPane.add(lc, LCTabName);

JTabbedPane mi = new MafIatComp(JTabbedPane.LEFT);
JTabbedPane mi = new MafIatComp(JTabbedPane.LEFT, pofFuelingTable);
mi.setTabLayoutPolicy(JTabbedPane.SCROLL_TAB_LAYOUT);
tabbedPane.add(mi, MITabName);

Expand Down
Loading

0 comments on commit 42526f8

Please sign in to comment.