Add files via upload

This commit is contained in:
mackelec 2023-11-21 06:59:12 +10:00 committed by GitHub
parent 154cd7f001
commit 42f79ca0b7
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 142 additions and 0 deletions

View file

@ -32,4 +32,9 @@
#ifdef TEST_FAKE_BATTERY
#include "TEST-FAKE-BATTERY.h" //See this file for more Fake battery settings
#endif
#ifdef SERIAL_LINK_RECEIVER_FROM_BATTERY
#include "SERIAL-LINK-RECEIVER-FROM-BATTERY.h"
#endif
#endif

View file

@ -0,0 +1,86 @@
// SERIAL-LINK-RECEIVER-FROM-BATTERY.cpp
#include "SERIAL-LINK-RECEIVER-FROM-BATTERY.h"
#define INVERTER_SEND_NUM_VARIABLES 3 //--- comment out if nothing to send
#define INVERTER_RECV_NUM_VARIABLES 16
#ifdef INVERTER_SEND_NUM_VARIABLES
const uint8_t sendingNumVariables = INVERTER_SEND_NUM_VARIABLES;
#else
const uint8_t sendingNumVariables = 0;
#endif
// txid,rxid, num_send,num_recv
SerialDataLink dataLinkReceive(Serial2, 0, 0x01, sendingNumVariables,
INVERTER_RECV_NUM_VARIABLES); // ...
void __getData()
{
SOC = (uint16_t) dataLinkReceive.getReceivedData(0);
StateOfHealth = (uint16_t) dataLinkReceive.getReceivedData(1);
battery_voltage = (uint16_t) dataLinkReceive.getReceivedData(2);
battery_current = (uint16_t) dataLinkReceive.getReceivedData(3);
capacity_Wh = (uint16_t) dataLinkReceive.getReceivedData(4);
remaining_capacity_Wh = (uint16_t) dataLinkReceive.getReceivedData(5);
max_target_discharge_power = (uint16_t) dataLinkReceive.getReceivedData(6);
max_target_charge_power = (uint16_t) dataLinkReceive.getReceivedData(7);
bms_status = (uint16_t) dataLinkReceive.getReceivedData(8);
bms_char_dis_status = (uint16_t) dataLinkReceive.getReceivedData(9);
stat_batt_power = (uint16_t) dataLinkReceive.getReceivedData(10);
temperature_min = (uint16_t) dataLinkReceive.getReceivedData(11);
temperature_max = (uint16_t) dataLinkReceive.getReceivedData(12);
cell_max_voltage = (uint16_t) dataLinkReceive.getReceivedData(13);
cell_min_voltage = (uint16_t) dataLinkReceive.getReceivedData(14);
batteryAllowsContactorClosing = (uint16_t) dataLinkReceive.getReceivedData(15);
}
void updateData()
{
// --- update with fresh data
/*
dataLinkReceive.updateData(0,var1);
dataLinkReceive.updateData(1,var2);
dataLinkReceive.updateData(2,var3);
*/
}
/*
* @ 9600bps, assume void manageSerialLinkReceiver()
* is called every 1mS
*/
void manageSerialLinkReceiver()
{
dataLinkReceive.run();
bool readError = dataLinkReceive.checkReadError(true); // check for error & clear error flag
if (dataLinkReceive.checkNewData(true)) // true = clear Flag
{
__getData();
}
#ifdef INVERTER_SEND_NUM_VARIABLES
static bool initLink=false;
static unsigned long updateTime = 0;
if (! initLink)
{
initLink = true;
// sends variables every 5000mS even if no change
dataLinkReceive.setUpdateInterval(5000);
}
unsigned long currentTime = millis();
if (currentTime - updateTime > 100)
{
updateTime = currentTime;
dataLinkReceive.run();
bool sendError = dataLinkReceive.checkTransmissionError(true); // check for error & clear error flag
updateData();
}
#endif
}

View file

@ -0,0 +1,51 @@
// SERIAL-LINK-RECEIVER-FROM-BATTERY.h
#ifndef SERIAL_LINK_RECEIVER_FROM_BATTERY_H
#define SERIAL_LINK_RECEIVER_FROM_BATTERY_H
#include <Arduino.h>
#include "../../USER_SETTINGS.h"
#include "../lib/SerialDataLink/SerialDataLink.h"
// https://github.com/mackelec/SerialDataLink
#define ABSOLUTE_MAX_VOLTAGE \
4040 // 404.4V,if battery voltage goes over this, charging is not possible (goes into forced discharge)
#define ABSOLUTE_MIN_VOLTAGE 3100 // 310.0V if battery voltage goes under this, discharging further is disabled
// These parameters need to be mapped for the inverter
extern uint16_t SOC; //SOC%, 0-100.00 (0-10000)
extern uint16_t StateOfHealth; //SOH%, 0-100.00 (0-10000)
extern uint16_t battery_voltage; //V+1, 0-500.0 (0-5000)
extern uint16_t battery_current; //A+1, Goes thru convert2unsignedint16 function (5.0A = 50, -5.0A = 65485)
extern uint16_t capacity_Wh; //Wh, 0-60000
extern uint16_t remaining_capacity_Wh; //Wh, 0-60000
extern uint16_t max_target_discharge_power; //W, 0-60000
extern uint16_t max_target_charge_power; //W, 0-60000
extern uint16_t bms_status; //Enum, 0-5
extern uint16_t bms_char_dis_status; //Enum, 0-2
extern uint16_t stat_batt_power; //W, Goes thru convert2unsignedint16 function (5W = 5, -5W = 65530)
extern uint16_t temperature_min; //C+1, Goes thru convert2unsignedint16 function (15.0C = 150, -15.0C = 65385)
extern uint16_t temperature_max; //C+1, Goes thru convert2unsignedint16 function (15.0C = 150, -15.0C = 65385)
extern uint16_t cell_max_voltage; //mV, 0-4350
extern uint16_t cell_min_voltage; //mV, 0-4350
extern bool batteryAllowsContactorClosing; //Bool, 1=true, 0=false
void manageSerialLinkReceiver();
#endif