calibration support

This commit is contained in:
hg 2014-02-03 23:04:57 +01:00
parent 68231bdb9a
commit 7f804ca9ca
4 changed files with 56 additions and 51 deletions

View File

@ -268,7 +268,7 @@ environment/project/it.baeyens.arduino.core.toolChain.release.1518476005/JANTJE.
environment/project/it.baeyens.arduino.core.toolChain.release.1518476005/JANTJE.BOARD_NAME/value=Arduino Micro environment/project/it.baeyens.arduino.core.toolChain.release.1518476005/JANTJE.BOARD_NAME/value=Arduino Micro
environment/project/it.baeyens.arduino.core.toolChain.release.1518476005/JANTJE.COM_PORT/delimiter=\: environment/project/it.baeyens.arduino.core.toolChain.release.1518476005/JANTJE.COM_PORT/delimiter=\:
environment/project/it.baeyens.arduino.core.toolChain.release.1518476005/JANTJE.COM_PORT/operation=replace environment/project/it.baeyens.arduino.core.toolChain.release.1518476005/JANTJE.COM_PORT/operation=replace
environment/project/it.baeyens.arduino.core.toolChain.release.1518476005/JANTJE.COM_PORT/value=/dev/tty.usbmodemfd1111 environment/project/it.baeyens.arduino.core.toolChain.release.1518476005/JANTJE.COM_PORT/value=/dev/tty.usbmodemfa131
environment/project/it.baeyens.arduino.core.toolChain.release.1518476005/JANTJE.EXTRA.C.COMPILE/delimiter=\: environment/project/it.baeyens.arduino.core.toolChain.release.1518476005/JANTJE.EXTRA.C.COMPILE/delimiter=\:
environment/project/it.baeyens.arduino.core.toolChain.release.1518476005/JANTJE.EXTRA.C.COMPILE/operation=replace environment/project/it.baeyens.arduino.core.toolChain.release.1518476005/JANTJE.EXTRA.C.COMPILE/operation=replace
environment/project/it.baeyens.arduino.core.toolChain.release.1518476005/JANTJE.EXTRA.C.COMPILE/value= environment/project/it.baeyens.arduino.core.toolChain.release.1518476005/JANTJE.EXTRA.C.COMPILE/value=

View File

@ -1,17 +1,17 @@
// Do not remove the include below // Do not remove the include below
#include <HardwareSerial.h> // #include <HardwareSerial.h>
#include "MeterBusPowerMaster.h" #include "MeterBusPowerMaster.h"
#include "cmd.h" #include "cmd.h"
// #include "test.h" #include "test.h"
#include "uptime.h" #include "uptime.h"
#include "meterBusMaster.h" #include "meterBusMaster.h"
#include "overCurrentProt.h" #include "overCurrentProt.h"
static CmdServer cmdServer(&Serial); static CmdServer cmdServer(&Serial);
// static TestCmd testCmd; static TestCmd testCmd;
static Uptime uptime; static Uptime uptime;
static MeterBusMaster meterBusMaster; static MeterBusMaster meterBusMaster;
static OverCurrentProt overCurrentProt; static OverCurrentProt overCurrentProt;
@ -20,7 +20,7 @@ static OverCurrentProt overCurrentProt;
void setup() { void setup() {
cmdServer.begin(); cmdServer.begin();
// testCmd.registerYourself(&cmdServer); testCmd.registerYourself(&cmdServer);
overCurrentProt.begin(&cmdServer); overCurrentProt.begin(&cmdServer);
uptime.begin(&cmdServer); uptime.begin(&cmdServer);
meterBusMaster.begin(&cmdServer); meterBusMaster.begin(&cmdServer);

View File

@ -39,23 +39,25 @@ uint16_t stringToUInt8(String i, uint8_t index) {
String CalibrationSupport::exec(String params) { String CalibrationSupport::exec(String params) {
String res = "failed"; String res = "failed";
MeterBusMaster *mbm = (MeterBusMaster*)m_meterBusMaster; MeterBusMaster *mbm = (MeterBusMaster*)m_meterBusMaster;
if (params.equalsIgnoreCase("sample") && enable) { if (params.equalsIgnoreCase("sample") && enable) {
mbm->sample(); mbm->sample();
res = "done"; res = "done";
} else if (params.equalsIgnoreCase("hold") && enable) { } else if (params.equalsIgnoreCase("hold") && enable) {
mbm->hold(); mbm->hold();
res = "done"; res = "done";
} else if (params.equalsIgnoreCase("enable") && ! enable) { } else if (params.equalsIgnoreCase("enable") && ! enable) {
enable = true; enable = true;
res = "enabled"; mbm->m_calibration = true;
} else if (params.equalsIgnoreCase("disable") && enable) { res = "enabled";
enable = false; } else if (params.equalsIgnoreCase("disable") && enable) {
res = "disabled"; enable = false;
} mbm->m_calibration = false;
return res; res = "disabled";
}
return res;
} }
String MeasureCurrent::exec(String params) { String MeasureCurrent::exec(String params) {
@ -136,7 +138,8 @@ void SendOctets::sendError(uint8_t code) {
MeterBusMaster::MeterBusMaster() : m_sendOctets(this), m_measureCurrent(this), MeterBusMaster::MeterBusMaster() : m_sendOctets(this), m_measureCurrent(this),
m_calibrationSupport(this), m_calibrationSupport(this),
m_cmdReadyToSend(false), m_cmdReadyFromRecv(false), m_expectResponse(false), m_cmdReadyToSend(false), m_cmdReadyFromRecv(false), m_expectResponse(false),
m_sendBufLen(0), m_recvBufLen(0), m_retransmitCount(0), m_responseCallback(0) { m_sendBufLen(0), m_recvBufLen(0), m_retransmitCount(0), m_responseCallback(0),
m_sampling(true), m_calibration(false) {
pinMode(RX_EN_PIN, OUTPUT); pinMode(RX_EN_PIN, OUTPUT);
digitalWrite(RX_EN_PIN, RX_DISABLE); digitalWrite(RX_EN_PIN, RX_DISABLE);
Serial1.begin(2400, SERIAL_8E1); Serial1.begin(2400, SERIAL_8E1);
@ -145,7 +148,7 @@ MeterBusMaster::MeterBusMaster() : m_sendOctets(this), m_measureCurrent(this),
void MeterBusMaster::begin(CmdServer *cmdServer) { void MeterBusMaster::begin(CmdServer *cmdServer) {
m_sendOctets.registerYourself(cmdServer); m_sendOctets.registerYourself(cmdServer);
m_measureCurrent.registerYourself(cmdServer); m_measureCurrent.registerYourself(cmdServer);
m_calibrationSupport.registerYourself(cmdServer); m_calibrationSupport.registerYourself(cmdServer);
} }
@ -230,38 +233,39 @@ void MeterBusMaster::hold() {
} }
void MeterBusMaster::exec() { void MeterBusMaster::exec() {
static unsigned long cmdSendTime = 0; if (! m_calibration) {
static unsigned long cmdSendTime = 0;
if (m_cmdReadyToSend) { if (m_cmdReadyToSend) {
sample(); sample();
Serial1.write(m_sendBuffer, m_sendBufLen); Serial1.write(m_sendBuffer, m_sendBufLen);
Serial1.flush(); Serial1.flush();
hold(); hold();
m_cmdReadyToSend = false; m_cmdReadyToSend = false;
m_expectResponse = true; m_expectResponse = true;
cmdSendTime = millis(); cmdSendTime = millis();
} }
if (! m_expectResponse) { if (! m_expectResponse) {
sample(); sample();
} }
// timeout // timeout
if (m_expectResponse && ((millis() - cmdSendTime) > RESPONSE_TIMEOUT)) { if (m_expectResponse && ((millis() - cmdSendTime) > RESPONSE_TIMEOUT)) {
m_retransmitCount++; m_retransmitCount++;
if (m_retransmitCount > 2) { if (m_retransmitCount > 2) {
m_expectResponse = false; m_expectResponse = false;
prepareResponse(true, 0); prepareResponse(true, 0);
} else { } else {
m_cmdReadyToSend = true; m_cmdReadyToSend = true;
}
}
int serialInChar = Serial1.read();
if ((serialInChar != -1) && m_expectResponse) {
prepareResponse(false, (uint8_t)serialInChar);
} }
} }
int serialInChar = Serial1.read();
if ((serialInChar != -1) && m_expectResponse) {
prepareResponse(false, (uint8_t)serialInChar);
}
} }

View File

@ -78,6 +78,7 @@ private:
uint8_t m_sendBuffer[SEND_BUFFER_SIZE]; uint8_t m_sendBuffer[SEND_BUFFER_SIZE];
uint8_t m_recvBuffer[RECEIVE_BUFFER_SIZE]; uint8_t m_recvBuffer[RECEIVE_BUFFER_SIZE];
bool m_sampling; bool m_sampling;
bool m_calibration;
void prepareResponse(bool err, uint8_t in); void prepareResponse(bool err, uint8_t in);
void sample(); void sample();
void hold(); void hold();