GrpcPrint/PrintS/Config/bean/PowerCompensate.cpp

103 lines
2.5 KiB
C++
Raw Normal View History

2024-06-27 10:56:50 +08:00
#include "PowerCompensate.h"
2024-06-27 14:39:53 +08:00
#include "../DataManage/RWData.h"
#include "../utils/ConverType.hpp"
2024-03-19 17:45:12 +08:00
PowerCompensate::PowerCompensate()
{
}
PowerCompensate::~PowerCompensate()
{
}
void PowerCompensate::Generate(int cno,vector<string>& ins)
{
char buffer[256];
string strtemp = "INSERT INTO %s(%s,%s,%s,%s,%s) VALUES(%d,";
sprintf_s(buffer, sizeof(buffer), strtemp.c_str(),
TABLE_NAME.c_str(),
FIELD_CNO.c_str(),
FIELD_PERCENT.c_str(),
FIELD_VALUE.c_str(),
FIELD_VALUE_MIN.c_str(),
FIELD_VALUE_MAX.c_str(),
cno
);
string strsql = string(buffer) + "%d,%f,%f,%f)";
for (int i = 5; i <= 100;i+=5) {
sprintf_s(buffer, sizeof(buffer), strsql.c_str(),i,1.0f,0.0f,3.0f);
ins.push_back(buffer);
}
}
2024-06-27 10:56:50 +08:00
void PowerCompensate::SetPowerComp(stream::PowerCompensate* cp) {
cp->set_cno(m_cno);
cp->set_percent(m_percent);
cp->set_value(m_value);
cp->set_value_min(m_value_min);
cp->set_value_max(m_value_max);
}
2024-03-19 17:45:12 +08:00
const string PowerCompensate::TABLE_NAME="PowerCompensate";
const string PowerCompensate::FIELD_CNO = "cno";
const string PowerCompensate::FIELD_PERCENT="percent";
const string PowerCompensate::FIELD_VALUE="value";
const string PowerCompensate::FIELD_VALUE_MIN="value_min";
const string PowerCompensate::FIELD_VALUE_MAX="value_max";
PowerCompensateCfg::PowerCompensateCfg() {
}
PowerCompensateCfg::~PowerCompensateCfg() {
for (size_t i = 0; i < m_pcs.size();++i) {
delete m_pcs[i];
}
m_pcs.clear();
}
float PowerCompensateCfg::CalcPowerCompensate(float power)
{
float rel = power;
for (size_t i = 0; i < m_pcs.size();++i) {
if (power <= m_pcs[i]->m_percent) {
if (i !=0) {
if ((m_pcs[i]->m_value != m_pcs[i-1]->m_value) && (m_pcs[i]->m_percent != m_pcs[i - 1]->m_percent)) {
float k = (m_pcs[i]->m_percent - m_pcs[i-1]->m_percent) / (m_pcs[i]->m_value - m_pcs[i-1]->m_value);
float b = m_pcs[i]->m_percent - m_pcs[i]->m_value*k;
rel = (power-b)/k*power;
}
else {
rel = power*m_pcs[i]->m_value;
}
}
break;
}
}
return rel;
}
2024-07-05 15:51:30 +08:00
void PowerCompensateCfg::Update(const ReadData& rd, const list<Item>& lst) {
auto start = lst.begin();
while (start != lst.end()) {
2024-06-27 14:39:53 +08:00
int percent = ConverType::TryToI(start->nameKey);
for (auto it = m_pcs.begin(); it != m_pcs.end(); ++it) {
if ((*it)->m_percent == percent) {
(*it)->m_value = ConverType::TryToF(start->strValue);
break;
}
}
++start;
}
}
2024-03-19 17:45:12 +08:00
bool PowerCompensateLess(const PowerCompensate * m1, const PowerCompensate * m2) {
return m1->m_percent < m2->m_percent;
}