mirror of
https://gitee.com/js-yhsec/energy_storage.git
synced 2026-05-27 18:59:26 +08:00
实现策略配置功能
This commit is contained in:
@@ -2,30 +2,55 @@
|
||||
#include "app/Application.h"
|
||||
#include "app/AppData.h"
|
||||
#include "common/JsonN.h"
|
||||
#include "common/Utils.h"
|
||||
|
||||
//const std::string QSS_COMBOX_1 =
|
||||
//"QComboBox {border: 1px solid rgb(18, 251, 255); background-color: rgb(255, 89, 0); border-radius: 3px; color: rgb(30,30,30); font: bold 14px;}"
|
||||
//"QComboBox QAbstractItemView { border: 1px solid gray; background-color: rgba(8, 54, 91); border-radius: 5px; color:white;}"
|
||||
//"QComboBox::drop-down { border-radius: 5px; width: 30px; }"
|
||||
//"QComboBox:disabled { color:rgb(150,150,150);}";
|
||||
//
|
||||
//const std::string QSS_COMBOX_2 =
|
||||
//"QComboBox {border: 1px solid rgb(18, 251, 255); background-color: rgb(255, 255, 0); border-radius: 3px; color: rgb(30,30,30); font: bold 14px;}"
|
||||
//"QComboBox QAbstractItemView { border: 1px solid gray; background-color: rgba(8, 54, 91); border-radius: 5px; color:white;}"
|
||||
//"QComboBox::drop-down { border-radius: 5px; width: 30px; }"
|
||||
//"QComboBox:disabled { color:rgb(150,150,150);}";
|
||||
//
|
||||
//const std::string QSS_COMBOX_3 =
|
||||
//"QComboBox {border: 1px solid rgb(18, 251, 255); background-color: rgb(121, 191, 226); border-radius: 3px; color: rgb(30,30,30); font: bold 14px;}"
|
||||
//"QComboBox QAbstractItemView { border: 1px solid gray; background-color: rgba(8, 54, 91); border-radius: 5px; color:white;}"
|
||||
//"QComboBox::drop-down { border-radius: 5px; width: 30px; }"
|
||||
//"QComboBox:disabled { color:rgb(150,150,150);}";
|
||||
//
|
||||
//const std::string QSS_COMBOX_4 =
|
||||
//"QComboBox {border: 1px solid rgb(18, 251, 255); background-color: rgb(0, 255, 58); border-radius: 3px; color: rgb(30,30,30); font: bold 14px;}"
|
||||
//"QComboBox QAbstractItemView { border: 1px solid gray; background-color: rgba(8, 54, 91); border-radius: 5px; color:white;}"
|
||||
//"QComboBox::drop-down { border-radius: 5px; width: 30px; }"
|
||||
//"QComboBox:disabled { color:rgb(150,150,150);}";
|
||||
|
||||
const std::string QSS_COMBOX_1 =
|
||||
"QComboBox {border: 1px solid rgb(18, 251, 255); background-color: rgb(255, 89, 0); border-radius: 3px; color: rgb(30,30,30); font: bold 14px;}"
|
||||
"QComboBox QAbstractItemView { border: 1px solid gray; background-color: rgba(8, 54, 91); border-radius: 5px; color:white;}"
|
||||
"QComboBox { background-color: transparent; border: 1px solid rgb(255, 89, 0); color: rgb(255, 89, 0); border-radius: 3px; font: bold 14px;}"
|
||||
"QComboBox QAbstractItemView { border: 1px solid gray; background-color: rgba(8, 54, 91); border-radius: 3px; color:white;}"
|
||||
"QComboBox::drop-down { border-radius: 5px; width: 30px; }"
|
||||
"QComboBox:disabled { color:rgb(150,150,150);}";
|
||||
"QComboBox:disabled {border: none; color: gray;}";
|
||||
|
||||
const std::string QSS_COMBOX_2 =
|
||||
"QComboBox {border: 1px solid rgb(18, 251, 255); background-color: rgb(255, 255, 0); border-radius: 3px; color: rgb(30,30,30); font: bold 14px;}"
|
||||
"QComboBox QAbstractItemView { border: 1px solid gray; background-color: rgba(8, 54, 91); border-radius: 5px; color:white;}"
|
||||
"QComboBox { background-color: transparent; border: 1px solid rgb(255, 255, 0); color: rgb(255, 255, 0); border-radius: 3px; font: bold 14px;}"
|
||||
"QComboBox QAbstractItemView { border: 1px solid gray; background-color: rgba(8, 54, 91); border-radius: 3px; color:white;}"
|
||||
"QComboBox::drop-down { border-radius: 5px; width: 30px; }"
|
||||
"QComboBox:disabled { color:rgb(150,150,150);}";
|
||||
"QComboBox:disabled { border: none; color: gray;}";
|
||||
|
||||
const std::string QSS_COMBOX_3 =
|
||||
"QComboBox {border: 1px solid rgb(18, 251, 255); background-color: rgb(121, 191, 226); border-radius: 3px; color: rgb(30,30,30); font: bold 14px;}"
|
||||
"QComboBox QAbstractItemView { border: 1px solid gray; background-color: rgba(8, 54, 91); border-radius: 5px; color:white;}"
|
||||
"QComboBox { background-color: transparent; border: 1px solid rgb(121, 191, 226); color: rgb(121, 191, 226); border-radius: 3px; font: bold 14px;}"
|
||||
"QComboBox QAbstractItemView { border: 1px solid gray; background-color: rgba(8, 54, 91); border-radius: 3px; color:white;}"
|
||||
"QComboBox::drop-down { border-radius: 5px; width: 30px; }"
|
||||
"QComboBox:disabled { color:rgb(150,150,150);}";
|
||||
"QComboBox:disabled { border: none; color: gray;}";
|
||||
|
||||
const std::string QSS_COMBOX_4 =
|
||||
"QComboBox {border: 1px solid rgb(18, 251, 255); background-color: rgb(0, 255, 58); border-radius: 3px; color: rgb(30,30,30); font: bold 14px;}"
|
||||
"QComboBox QAbstractItemView { border: 1px solid gray; background-color: rgba(8, 54, 91); border-radius: 5px; color:white;}"
|
||||
"QComboBox { background-color: transparent; border: 1px solid rgb(0, 255, 58);color: rgb(0, 255, 58); border-radius: 3px; font: bold 14px;}"
|
||||
"QComboBox QAbstractItemView { border: 1px solid gray; background-color: rgba(8, 54, 91); border-radius: 3px; color:white;}"
|
||||
"QComboBox::drop-down { border-radius: 5px; width: 30px; }"
|
||||
"QComboBox:disabled { color:rgb(150,150,150);}";
|
||||
"QComboBox:disabled { border: none; color: gray;}";
|
||||
|
||||
static std::string GetPeriodQss(int v)
|
||||
{
|
||||
@@ -51,182 +76,180 @@ static int GetPeriod(std::string text)
|
||||
else if (text == "低谷") { return 4; }
|
||||
else { return 3; }
|
||||
}
|
||||
PanelPolicyPeak::PanelPolicyPeak(PARAM* p, int parent, int x, int y, int w, int h) : PvObject(p)
|
||||
PanelPolicyPeak::PanelPolicyPeak(PARAM* p, int parent, int ix, int iy, int iw, int ih) : PvObject(p)
|
||||
{
|
||||
data.vecPeriods.resize(12, std::vector<int>(24, 3));
|
||||
ui.parent = parent;
|
||||
ui.widget = PvApp::widget(p, parent, x, y, w, h);
|
||||
pvid = PvApp::widget(p, parent, ix, iy, iw, ih);
|
||||
|
||||
auto& appdata = Application::data();
|
||||
std::vector<std::string> vecPeriods = {"尖峰", "高峰", "平段", "低谷"};
|
||||
|
||||
ui.vecComboxs.resize(12, std::vector<int>(24, PV_ID_NUL));
|
||||
|
||||
int x = 0, y = 10, w = 64, h = 30;
|
||||
for (int row = 0; row<=12; row++)
|
||||
{
|
||||
int parent = ui.widget;
|
||||
int x = 10, y = 180, w = 64, h = 30;
|
||||
for (int row = 0; row<=12; row++)
|
||||
for (int col = 0; col<=24; ++col)
|
||||
{
|
||||
for (int col = 0; col<=24; ++col)
|
||||
std::string text;
|
||||
if (row == 0)
|
||||
{
|
||||
std::string text;
|
||||
if (row == 0)
|
||||
{
|
||||
text = (col == 0) ? "月份" : std::to_string(col-1) + "-" + std::to_string(col) + "时";
|
||||
}
|
||||
else
|
||||
{
|
||||
text = (col == 0) ? std::to_string(row) : "";
|
||||
}
|
||||
if (row == 0 || col == 0)
|
||||
{
|
||||
std::string qssLabel = (row==0) ? qss::label(14, "", "rgb(19, 93, 114)") : "";
|
||||
int label = PvApp::label(p, parent, x+w*col, y+h*row, w, h, text, qssLabel);
|
||||
pvSetAlignment(p, label, AlignCenter);
|
||||
}
|
||||
else
|
||||
{
|
||||
int periodVal = data.vecPeriods[row-1][col-1];
|
||||
int combox = PvApp::combox(p, parent, x+w*col, y+h*row+3, w-3, 24, vecPeriods, periodVal);
|
||||
pvSetStyleSheet(p, combox, GetPeriodQss(periodVal).c_str());
|
||||
ui.vecComboxs[row-1][col-1] = combox;
|
||||
PvApp::bind(p, PvEvent::TEXT_EVENT, combox, [=](std::string text) {
|
||||
pvSetStyleSheet(p, combox, GetPeriodQss(text).c_str());
|
||||
data.vecPeriods[row-1][col-1] = GetPeriod(text);
|
||||
});
|
||||
}
|
||||
|
||||
text = (col == 0) ? "月份" : std::to_string(col-1) + "-" + std::to_string(col) + "时";
|
||||
}
|
||||
else
|
||||
{
|
||||
text = (col == 0) ? std::to_string(row) : "";
|
||||
}
|
||||
if (row == 0 || col == 0)
|
||||
{
|
||||
std::string qssLabel = (row==0) ? qss::label(14, "", "rgb(19, 93, 114)") : "";
|
||||
int label = PvApp::label(p, pvid, x+w*col, y+h*row, w, h, text, qssLabel);
|
||||
pvSetAlignment(p, label, AlignCenter);
|
||||
}
|
||||
else
|
||||
{
|
||||
int periodVal = data.vecPeriods[row-1][col-1];
|
||||
int combox = PvApp::combox(p, pvid, x+w*col, y+h*row+3, w-3, 24, vecPeriods, periodVal-1);
|
||||
pvSetStyleSheet(p, combox, GetPeriodQss(periodVal).c_str());
|
||||
ui.vecComboxs[row-1][col-1] = combox;
|
||||
PvApp::bind(p, PvEvent::TEXT_EVENT, combox, [=](std::string text) {
|
||||
pvSetStyleSheet(p, combox, GetPeriodQss(text).c_str());
|
||||
data.vecPeriods[row-1][col-1] = GetPeriod(text);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
const int H = 24;
|
||||
int labelPolicy = PvApp::label(p, parent, 20, 600, 300, H, "充电策略");
|
||||
ui.radioPolicy1 = PvApp::radioButton(p, labelPolicy, 80, 0, 80, H, "一充一放");
|
||||
ui.radioPolicy2 = PvApp::radioButton(p, labelPolicy, 170, 0, 80, H, "两充两放");
|
||||
|
||||
ui.label1 = PvApp::label(p, parent, 10, 640, 610, 90, "第一次充放电过程", qss::label(14, "", "", "1px solid rgb(49, 130, 141)"));
|
||||
pvSetAlignment(p, ui.label1, AlignLeft | AlignTop);
|
||||
{
|
||||
int y0 = 70;
|
||||
int labelChargeT = PvApp::label(p, ui.label1, 10, 30, 300, H, "充电时间");
|
||||
ui.attr1TimeCharge0 = PvApp::timeEdit(p, labelChargeT, y0, 0, 60, H);
|
||||
PvApp::label(p, labelChargeT, 150, 0, 10, H, "--");
|
||||
ui.attr1TimeCharge1 = PvApp::timeEdit(p, labelChargeT, 170, 0, 60, H);
|
||||
|
||||
int labelDischargeT = PvApp::label(p, ui.label1, 320, 30, 300, H, "放电时间");
|
||||
ui.attr1TimeDischarge0 = PvApp::timeEdit(p, labelDischargeT, y0 = 70, 0, 60, H);
|
||||
PvApp::label(p, labelDischargeT, y0+=70, 0, 10, H, "--");
|
||||
ui.attr1TimeDischarge1 = PvApp::timeEdit(p, labelDischargeT, y0+=20, 0, 60, H);
|
||||
|
||||
int labelPowerIn = PvApp::label(p, ui.label1, 10, 60, 300, H, "充电功率");
|
||||
ui.attr1RadioPowerInAuto = PvApp::radioButton(p, labelPowerIn, y0 = 70, 0, 60, H, "自动");
|
||||
ui.attr1RadioPowerIn = PvApp::radioButton(p, labelPowerIn, y0 += 60, 0, 64, H, "自定义");
|
||||
ui.arrt1LabelPowerIn = PvApp::lineEdit(p, labelPowerIn, y0 += 70, 0, 80, H, "");
|
||||
|
||||
int labelPowerOut = PvApp::label(p, ui.label1, 320, 60, 300, H, "放电功率");
|
||||
ui.attr1RadioPowerOutAuto = PvApp::radioButton(p, labelPowerOut, y0 = 70, 0, 60, H, "自动");
|
||||
ui.attr1RadioPowerOut = PvApp::radioButton(p, labelPowerOut, y0 += 60, 0, 64, H, "自定义");
|
||||
ui.arrt1LabelPowerOut = PvApp::lineEdit(p, labelPowerOut, y0 += 70, 0, 80, H, "");
|
||||
}
|
||||
|
||||
ui.label2 = PvApp::label(p, parent, 630, 640, 610, 90, "第二次充放电过程", qss::label(14, "", "", "1px solid rgb(49, 130, 141)"));
|
||||
pvSetAlignment(p, ui.label2, AlignLeft | AlignTop);
|
||||
{
|
||||
int y0 = 70;
|
||||
int labelChargeT = PvApp::label(p, ui.label2, 10, 30, 300, H, "充电时间");
|
||||
XLOGD() << "labelChargeT=" << labelChargeT;
|
||||
ui.attr2TimeCharge0 = PvApp::timeEdit(p, labelChargeT, y0, 0, 60, H);
|
||||
PvApp::label(p, labelChargeT, 150, 0, 10, H, "--");
|
||||
ui.attr2TimeCharge1 = PvApp::timeEdit(p, labelChargeT, 170, 0, 60, H);
|
||||
|
||||
|
||||
|
||||
|
||||
int labelDischargeT = PvApp::label(p, ui.label2, 320, 30, 300, H, "放电时间");
|
||||
ui.attr2TimeDischarge0 = PvApp::timeEdit(p, labelDischargeT, y0 = 70, 0, 60, H);
|
||||
PvApp::label(p, labelDischargeT, y0 += 70, 0, 10, H, "--");
|
||||
ui.attr2TimeDischarge1 = PvApp::timeEdit(p, labelDischargeT, y0 += 20, 0, 60, H);
|
||||
|
||||
int labelPowerIn = PvApp::label(p, ui.label2, 10, 60, 300, H, "充电功率");
|
||||
ui.attr2RadioPowerInAuto = PvApp::radioButton(p, labelPowerIn, y0 = 70, 0, 60, H, "自动");
|
||||
ui.attr2RadioPowerIn = PvApp::radioButton(p, labelPowerIn, y0 += 60, 0, 64, H, "自定义");
|
||||
ui.arrt2LabelPowerIn = PvApp::lineEdit(p, labelPowerIn, y0 += 70, 0, 80, H, "");
|
||||
|
||||
int labelPowerOut = PvApp::label(p, ui.label2, 320, 60, 300, H, "放电功率");
|
||||
ui.attr2RadioPowerOutAuto = PvApp::radioButton(p, labelPowerOut, y0 = 70, 0, 60, H, "自动");
|
||||
ui.attr2RadioPowerOut = PvApp::radioButton(p, labelPowerOut, y0 += 60, 0, 64, H, "自定义");
|
||||
ui.arrt2LabelPowerOut = PvApp::lineEdit(p, labelPowerOut, y0 += 70, 0, 80, H, "");
|
||||
}
|
||||
|
||||
|
||||
PvApp::bind(p, PvEvent::RADIOBUTTON_EVENT, ui.radioPolicy1, [=](std::string s) {
|
||||
this->data.times = 1;
|
||||
pvHide(p, ui.label2);
|
||||
//setTimeText(ui.attr2TimeCharge0, "");
|
||||
//setTimeText(ui.attr2TimeCharge1, "");
|
||||
//setTimeText(ui.attr2TimeDischarge0, "");
|
||||
//setTimeText(ui.attr2TimeDischarge1, "");
|
||||
//pvSetChecked(p, ui.attr2RadioPowerInAuto, 1);
|
||||
//pvSetChecked(p, ui.attr2RadioPowerOutAuto, 1);
|
||||
//pvSetText(p, ui.arrt2LabelPowerOut, "");
|
||||
//data.attr2.chargePower = data.attr2.dischargePower = 0.0;
|
||||
//data.attr2.chargeTimeStart = data.attr2.chargeTimeEnd = data.attr2.dischargeTimeStart = data.attr2.dischargeTimeEnd = "";
|
||||
});
|
||||
|
||||
PvApp::bind(p, PvEvent::RADIOBUTTON_EVENT, ui.radioPolicy2, [=](std::string s) {
|
||||
this->data.times = 2;
|
||||
pvShow(p, ui.label2);
|
||||
});
|
||||
|
||||
PvApp::bind(p, PvEvent::TEXT_EVENT, ui.attr1TimeCharge0, [=](std::string s) {
|
||||
data.attr1.chargeTimeStart = s.substr(0, 8);
|
||||
});
|
||||
PvApp::bind(p, PvEvent::TEXT_EVENT, ui.attr1TimeCharge1, [=](std::string s) {
|
||||
data.attr1.chargeTimeEnd = s.substr(0, 8);
|
||||
});
|
||||
PvApp::bind(p, PvEvent::TEXT_EVENT, ui.attr1TimeDischarge0, [=](std::string s) {
|
||||
data.attr1.dischargeTimeStart = s.substr(0, 8);
|
||||
});
|
||||
PvApp::bind(p, PvEvent::TEXT_EVENT, ui.attr1TimeDischarge1, [=](std::string s) {
|
||||
data.attr1.dischargeTimeEnd = s.substr(0, 8);
|
||||
});
|
||||
PvApp::bind(p, PvEvent::TEXT_EVENT, ui.attr2TimeCharge0, [=](std::string s) {
|
||||
data.attr2.chargeTimeStart = s.substr(0, 8);
|
||||
});
|
||||
PvApp::bind(p, PvEvent::TEXT_EVENT, ui.attr2TimeCharge1, [=](std::string s) {
|
||||
data.attr2.chargeTimeEnd = s.substr(0, 8);
|
||||
});
|
||||
PvApp::bind(p, PvEvent::TEXT_EVENT, ui.attr2TimeDischarge0, [=](std::string s) {
|
||||
data.attr2.dischargeTimeStart = s.substr(0, 8);
|
||||
});
|
||||
PvApp::bind(p, PvEvent::TEXT_EVENT, ui.attr2TimeDischarge1, [=](std::string s) {
|
||||
data.attr2.dischargeTimeEnd = s.substr(0, 8);
|
||||
});
|
||||
|
||||
{
|
||||
int btn = PvApp::button(p, ui.widget, 10, 750, 100, 30, "DUMP");
|
||||
PvApp::bind(p, PvEvent::BUTTON_EVENT, btn, [=](std::string) {
|
||||
XLOGD() << dumpAttr();
|
||||
});
|
||||
}
|
||||
{
|
||||
int btn = PvApp::button(p, ui.widget, 110, 750, 100, 30, "PARSE1");
|
||||
PvApp::bind(p, PvEvent::BUTTON_EVENT, btn, [=](std::string) {
|
||||
std::string s = R"({"cycle":[{"charge_end":"","charge_power":0.0,"charge_start":"","discharge_end":"","discharge_power":0.0,"discharge_start":""}],
|
||||
"period":[[1,1,1,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3],[3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3],[3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3],[3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3],[3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3],[3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3],[3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3],[3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3],[3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3],[3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3],[3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3],[3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3]],
|
||||
"times":1})";
|
||||
parseAttr(s);
|
||||
});
|
||||
}
|
||||
{
|
||||
int btn = PvApp::button(p, ui.widget, 210, 750, 100, 30, "PARSE2");
|
||||
PvApp::bind(p, PvEvent::BUTTON_EVENT, btn, [=](std::string) {
|
||||
std::string s = R"({"cycle":[{"charge_end":"09:00:00","charge_power":0.0,"charge_start":"00:00:00","discharge_end":"","discharge_power":0.0,"discharge_start":""}],
|
||||
"period":[[1,1,1,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3],[1,1,1,1,1,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3],[3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3],[3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3],[3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3],[3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3],[3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3],[3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3],[3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3],[3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3],[3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3],[3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3]],
|
||||
"times":2})";
|
||||
parseAttr(s);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
const int H = 24;
|
||||
int labelPolicy = PvApp::label(p, pvid, 20, y = 420, 300, H, "充电策略");
|
||||
ui.radioPolicy1 = PvApp::radioButton(p, labelPolicy, 80, 0, 80, H, "一充一放");
|
||||
ui.radioPolicy2 = PvApp::radioButton(p, labelPolicy, 170, 0, 80, H, "两充两放");
|
||||
|
||||
ui.label1 = PvApp::label(p, pvid, 10, y+=30, 610, 90, "第一次充放电过程", qss::label(14, "", "", "1px solid rgb(49, 130, 141)"));
|
||||
pvSetAlignment(p, ui.label1, AlignLeft | AlignTop);
|
||||
{
|
||||
int y0 = 70;
|
||||
int labelChargeT = PvApp::label(p, ui.label1, 10, 30, 300, H, "充电时间");
|
||||
ui.attr1TimeCharge0 = PvApp::timeEdit(p, labelChargeT, y0, 0, 90, H);
|
||||
PvApp::label(p, labelChargeT, y0 += 100, 0, 10, H, "--");
|
||||
ui.attr1TimeCharge1 = PvApp::timeEdit(p, labelChargeT, y0 =+ 20, 0, 90, H);
|
||||
|
||||
int labelDischargeT = PvApp::label(p, ui.label1, 320, 30, 300, H, "放电时间");
|
||||
ui.attr1TimeDischarge0 = PvApp::timeEdit(p, labelDischargeT, y0 = 70, 0, 90, H);
|
||||
PvApp::label(p, labelDischargeT, y0 += 100, 0, 10, H, "--");
|
||||
ui.attr1TimeDischarge1 = PvApp::timeEdit(p, labelDischargeT, y0 += 20, 0, 90, H);
|
||||
|
||||
int labelPowerIn = PvApp::label(p, ui.label1, 10, 60, 300, H, "充电功率");
|
||||
ui.attr1RadioPowerInAuto = PvApp::radioButton(p, labelPowerIn, y0 = 70, 0, 60, H, "自动");
|
||||
ui.attr1RadioPowerIn = PvApp::radioButton(p, labelPowerIn, y0 += 60, 0, 64, H, "自定义");
|
||||
ui.arrt1LabelPowerIn = PvApp::textedit(p, labelPowerIn, y0 += 70, 0, 80, H, "");
|
||||
|
||||
int labelPowerOut = PvApp::label(p, ui.label1, 320, 60, 300, H, "放电功率");
|
||||
ui.attr1RadioPowerOutAuto = PvApp::radioButton(p, labelPowerOut, y0 = 70, 0, 60, H, "自动");
|
||||
ui.attr1RadioPowerOut = PvApp::radioButton(p, labelPowerOut, y0 += 60, 0, 64, H, "自定义");
|
||||
ui.arrt1LabelPowerOut = PvApp::textedit(p, labelPowerOut, y0 += 70, 0, 80, H, "");
|
||||
}
|
||||
|
||||
ui.label2 = PvApp::label(p, pvid, 630, y, 610, 90, "第二次充放电过程", qss::label(14, "", "", "1px solid rgb(49, 130, 141)"));
|
||||
pvSetAlignment(p, ui.label2, AlignLeft | AlignTop);
|
||||
{
|
||||
int y0 = 70;
|
||||
int labelChargeT = PvApp::label(p, ui.label2, 10, 30, 300, H, "充电时间");
|
||||
XLOGD() << "labelChargeT=" << labelChargeT;
|
||||
ui.attr2TimeCharge0 = PvApp::timeEdit(p, labelChargeT, y0, 0, 60, H);
|
||||
PvApp::label(p, labelChargeT, 150, 0, 10, H, "--");
|
||||
ui.attr2TimeCharge1 = PvApp::timeEdit(p, labelChargeT, 170, 0, 60, H);
|
||||
|
||||
int labelDischargeT = PvApp::label(p, ui.label2, 320, 30, 300, H, "放电时间");
|
||||
ui.attr2TimeDischarge0 = PvApp::timeEdit(p, labelDischargeT, y0 = 70, 0, 60, H);
|
||||
PvApp::label(p, labelDischargeT, y0 += 70, 0, 10, H, "--");
|
||||
ui.attr2TimeDischarge1 = PvApp::timeEdit(p, labelDischargeT, y0 += 20, 0, 60, H);
|
||||
|
||||
int labelPowerIn = PvApp::label(p, ui.label2, 10, 60, 300, H, "充电功率");
|
||||
ui.attr2RadioPowerInAuto = PvApp::radioButton(p, labelPowerIn, y0 = 70, 0, 60, H, "自动");
|
||||
ui.attr2RadioPowerIn = PvApp::radioButton(p, labelPowerIn, y0 += 60, 0, 64, H, "自定义");
|
||||
ui.arrt2LabelPowerIn = PvApp::textedit(p, labelPowerIn, y0 += 70, 0, 80, H, "");
|
||||
|
||||
int labelPowerOut = PvApp::label(p, ui.label2, 320, 60, 300, H, "放电功率");
|
||||
ui.attr2RadioPowerOutAuto = PvApp::radioButton(p, labelPowerOut, y0 = 70, 0, 60, H, "自动");
|
||||
ui.attr2RadioPowerOut = PvApp::radioButton(p, labelPowerOut, y0 += 60, 0, 64, H, "自定义");
|
||||
ui.arrt2LabelPowerOut = PvApp::textedit(p, labelPowerOut, y0 += 70, 0, 80, H, "");
|
||||
}
|
||||
|
||||
|
||||
PvApp::bind(p, PvEvent::RADIOBUTTON_EVENT, ui.radioPolicy1, [=](std::string s) {
|
||||
this->data.times = 1;
|
||||
pvHide(p, ui.label2);
|
||||
//setTimeText(ui.attr2TimeCharge0, "");
|
||||
//setTimeText(ui.attr2TimeCharge1, "");
|
||||
//setTimeText(ui.attr2TimeDischarge0, "");
|
||||
//setTimeText(ui.attr2TimeDischarge1, "");
|
||||
//pvSetChecked(p, ui.attr2RadioPowerInAuto, 1);
|
||||
//pvSetChecked(p, ui.attr2RadioPowerOutAuto, 1);
|
||||
//pvSetText(p, ui.arrt2LabelPowerOut, "");
|
||||
//data.attr2.chargePower = data.attr2.dischargePower = 0.0;
|
||||
//data.attr2.chargeTimeStart = data.attr2.chargeTimeEnd = data.attr2.dischargeTimeStart = data.attr2.dischargeTimeEnd = "";
|
||||
});
|
||||
|
||||
PvApp::bind(p, PvEvent::RADIOBUTTON_EVENT, ui.radioPolicy2, [=](std::string s) {
|
||||
this->data.times = 2;
|
||||
pvShow(p, ui.label2);
|
||||
});
|
||||
|
||||
PvApp::bind(p, PvEvent::TEXT_EVENT, ui.attr1TimeCharge0, [=](std::string s) {
|
||||
data.attr1.chargeTimeStart = s.substr(0, 8);
|
||||
});
|
||||
PvApp::bind(p, PvEvent::TEXT_EVENT, ui.attr1TimeCharge1, [=](std::string s) {
|
||||
data.attr1.chargeTimeEnd = s.substr(0, 8);
|
||||
});
|
||||
PvApp::bind(p, PvEvent::TEXT_EVENT, ui.attr1TimeDischarge0, [=](std::string s) {
|
||||
data.attr1.dischargeTimeStart = s.substr(0, 8);
|
||||
});
|
||||
PvApp::bind(p, PvEvent::TEXT_EVENT, ui.attr1TimeDischarge1, [=](std::string s) {
|
||||
data.attr1.dischargeTimeEnd = s.substr(0, 8);
|
||||
});
|
||||
PvApp::bind(p, PvEvent::TEXT_EVENT, ui.attr2TimeCharge0, [=](std::string s) {
|
||||
data.attr2.chargeTimeStart = s.substr(0, 8);
|
||||
});
|
||||
PvApp::bind(p, PvEvent::TEXT_EVENT, ui.attr2TimeCharge1, [=](std::string s) {
|
||||
data.attr2.chargeTimeEnd = s.substr(0, 8);
|
||||
});
|
||||
PvApp::bind(p, PvEvent::TEXT_EVENT, ui.attr2TimeDischarge0, [=](std::string s) {
|
||||
data.attr2.dischargeTimeStart = s.substr(0, 8);
|
||||
});
|
||||
PvApp::bind(p, PvEvent::TEXT_EVENT, ui.attr2TimeDischarge1, [=](std::string s) {
|
||||
data.attr2.dischargeTimeEnd = s.substr(0, 8);
|
||||
});
|
||||
|
||||
// {
|
||||
// int btn = PvApp::button(p, pvid, 10, y+=100, 90, 30, "DUMP");
|
||||
// PvApp::bind(p, PvEvent::BUTTON_EVENT, btn, [=](std::string) {
|
||||
// XLOGD() << dumpAttr();
|
||||
// });
|
||||
// }
|
||||
// {
|
||||
// int btn = PvApp::button(p, pvid, 110, y, 90, 30, "PARSE1");
|
||||
// PvApp::bind(p, PvEvent::BUTTON_EVENT, btn, [=](std::string) {
|
||||
// std::string s = R"({"cycle":[{"charge_end":"","charge_power":0.0,"charge_start":"","discharge_end":"","discharge_power":0.0,"discharge_start":""}],
|
||||
//"period":[[1,1,1,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3],[3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3],[3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3],[3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3],[3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3],[3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3],[3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3],[3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3],[3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3],[3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3],[3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3],[3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3]],
|
||||
//"times":1})";
|
||||
// parseAttr(s);
|
||||
// });
|
||||
// }
|
||||
// {
|
||||
// int btn = PvApp::button(p, pvid, 210, y, 90, 30, "PARSE2");
|
||||
// PvApp::bind(p, PvEvent::BUTTON_EVENT, btn, [=](std::string) {
|
||||
// std::string s = R"({"cycle":[
|
||||
//{"charge_end":"09:00:00","charge_power":0.0,"charge_start":"00:00:00","discharge_end":"","discharge_power":0.0,"discharge_start":""},
|
||||
//{"charge_end":"23:59:00","charge_power":0.0,"charge_start":"20:00:00","discharge_end":"13:00","discharge_power":0.0,"discharge_start":"09:00"}
|
||||
//],
|
||||
//"period":[[1,1,1,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3],[1,1,1,1,1,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3],[3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3],[3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3],[3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3],[3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3],[3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3],[3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3],[3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3],[3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3],[3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3],[3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3]],
|
||||
//"times":2})";
|
||||
// parseAttr(s);
|
||||
// });
|
||||
// }
|
||||
}
|
||||
|
||||
void PanelPolicyPeak::updateUI()
|
||||
@@ -284,7 +307,7 @@ void PanelPolicyPeak::parseAttr(std::string str)
|
||||
periodVal = tmpVal;
|
||||
// 更新UI (时段下拉列表)
|
||||
auto combox = ui.vecComboxs[row][col];
|
||||
pvSetCurrentItem(p, combox, periodVal);
|
||||
pvSetCurrentItem(p, combox, periodVal-1);
|
||||
pvSetStyleSheet(p, combox, GetPeriodQss(periodVal).c_str());
|
||||
}
|
||||
}
|
||||
@@ -333,7 +356,6 @@ void PanelPolicyPeak::parseAttr(std::string str)
|
||||
|
||||
}
|
||||
|
||||
|
||||
std::string PanelPolicyPeak::dumpAttr()
|
||||
{
|
||||
NJsonNode jsonroot;
|
||||
@@ -363,4 +385,117 @@ std::string PanelPolicyPeak::dumpAttr()
|
||||
}
|
||||
jsonroot["cycle"] = nodeCycle;
|
||||
return jsonroot.dump();
|
||||
}
|
||||
|
||||
|
||||
PanelPolicyRequire::PanelPolicyRequire(PARAM* p, int parent, int ix, int iy, int iw, int ih) : PvObject(p)
|
||||
{
|
||||
pvid = PvApp::widget(p, parent, ix, iy, iw, ih);
|
||||
|
||||
int y = 10;
|
||||
const int H = 24;
|
||||
ui.label1 = PvApp::label(p, pvid, 10, y, 600, 80, "响应削峰指令", qss::label(14, "", "", "1px solid rgb(49, 130, 141)"));
|
||||
pvSetAlignment(p, ui.label1, AlignLeft | AlignTop);
|
||||
{
|
||||
ui.dischargeSoc = PvApp::lineTextedit(p, ui.label1, PvRect(10, 40, 270, H), 100, "电池SOC阈值", "");
|
||||
ui.dischargePower = PvApp::lineTextedit(p, ui.label1, PvRect(300, 40, 270, H), 70, "放电功率", "");
|
||||
}
|
||||
|
||||
ui.label2 = PvApp::label(p, pvid, 10, y += 90, 600, 90, "响应填谷指令", qss::label(14, "", "", "1px solid rgb(49, 130, 141)"));
|
||||
pvSetAlignment(p, ui.label2, AlignLeft | AlignTop);
|
||||
{
|
||||
ui.chargeSoc = PvApp::lineTextedit(p, ui.label2, PvRect(10, 40, 270, H), 100, "电池SOC阈值", "");
|
||||
ui.chargePower = PvApp::lineTextedit(p, ui.label2, PvRect(300, 40, 270, H), 70, "充电功率", "");
|
||||
}
|
||||
PvApp::bind(p, PvEvent::TEXT_EVENT, ui.dischargeSoc, [=](std::string s) {
|
||||
data.dischargeSoc = Utils::toInt(s);
|
||||
});
|
||||
PvApp::bind(p, PvEvent::TEXT_EVENT, ui.dischargePower, [=](std::string s) {
|
||||
data.dischargePower = Utils::toInt(s);
|
||||
});
|
||||
PvApp::bind(p, PvEvent::TEXT_EVENT, ui.chargeSoc, [=](std::string s) {
|
||||
data.chargeSoc = Utils::toInt(s);
|
||||
});
|
||||
PvApp::bind(p, PvEvent::TEXT_EVENT, ui.chargePower, [=](std::string s) {
|
||||
data.chargePower = Utils::toInt(s);
|
||||
});
|
||||
}
|
||||
|
||||
void PanelPolicyRequire::parseAttr(std::string str)
|
||||
{
|
||||
NJsonNode jsonroot;
|
||||
bool ret = NJson::parse(str, jsonroot);
|
||||
if (!ret)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
NJson::read(jsonroot, "charge_soc", data.chargeSoc);
|
||||
NJson::read(jsonroot, "charge_power", data.chargePower);
|
||||
NJson::read(jsonroot, "discharge_soc", data.dischargeSoc);
|
||||
NJson::read(jsonroot, "discharge_power", data.dischargePower);
|
||||
|
||||
// 更新UI
|
||||
pvSetText(p, ui.chargeSoc, std::to_string(data.chargeSoc).c_str());
|
||||
pvSetText(p, ui.chargePower, std::to_string(data.chargePower).c_str());
|
||||
pvSetText(p, ui.dischargeSoc, std::to_string(data.dischargeSoc).c_str());
|
||||
pvSetText(p, ui.dischargePower, std::to_string(data.dischargePower).c_str());
|
||||
}
|
||||
|
||||
std::string PanelPolicyRequire::dumpAttr()
|
||||
{
|
||||
NJsonNode jsonroot;
|
||||
jsonroot["discharge_soc"] = data.dischargeSoc;
|
||||
jsonroot["discharge_power"] = data.dischargePower;
|
||||
jsonroot["charge_soc"] = data.chargeSoc;
|
||||
jsonroot["charge_power"] = data.chargePower;
|
||||
return jsonroot.dump();
|
||||
}
|
||||
|
||||
PanelPolicySelf::PanelPolicySelf(PARAM* p, int parent, int ix, int iy, int iw, int ih) : PvObject(p)
|
||||
{
|
||||
pvid = PvApp::widget(p, parent, ix, iy, iw, ih);
|
||||
|
||||
int y = 10;
|
||||
const int H = 24;
|
||||
ui.label1 = PvApp::label(p, pvid, 10, y, 600, 120, "响应削峰指令", qss::label(14, "", "", "1px solid rgb(49, 130, 141)"));
|
||||
pvSetAlignment(p, ui.label1, AlignLeft | AlignTop);
|
||||
{
|
||||
ui.usedSoc = PvApp::lineTextedit(p, ui.label1, PvRect(10, 40, 270, H), 100, "自用电量比值", "");
|
||||
ui.gridSoc = PvApp::lineTextedit(p, ui.label1, PvRect(10, 80, 270, H), 100, "上网电量比值", "");
|
||||
|
||||
ui.chargePower = PvApp::lineTextedit(p, ui.label1, PvRect(320, 40, 250, H), 70, "充电功率", "");
|
||||
ui.dischargePower = PvApp::lineTextedit(p, ui.label1, PvRect(320, 80, 250, H), 70, "放电功率", "");
|
||||
}
|
||||
}
|
||||
|
||||
void PanelPolicySelf::parseAttr(std::string str)
|
||||
{
|
||||
NJsonNode jsonroot;
|
||||
bool ret = NJson::parse(str, jsonroot);
|
||||
if (!ret)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
NJson::read(jsonroot, "used_soc", data.usedSoc);
|
||||
NJson::read(jsonroot, "grid_soc", data.gridSoc);
|
||||
NJson::read(jsonroot, "charge_power", data.chargePower);
|
||||
NJson::read(jsonroot, "discharge_power", data.dischargePower);
|
||||
|
||||
// 更新UI
|
||||
pvSetText(p, ui.usedSoc, std::to_string(data.usedSoc).c_str());
|
||||
pvSetText(p, ui.gridSoc, std::to_string(data.gridSoc).c_str());
|
||||
pvSetText(p, ui.chargePower, std::to_string(data.chargePower).c_str());
|
||||
pvSetText(p, ui.dischargePower, std::to_string(data.dischargePower).c_str());
|
||||
}
|
||||
|
||||
std::string PanelPolicySelf::dumpAttr()
|
||||
{
|
||||
NJsonNode jsonroot;
|
||||
jsonroot["used_soc"] = data.usedSoc;
|
||||
jsonroot["grid_soc"] = data.gridSoc;
|
||||
jsonroot["charge_power"] = data.chargePower;
|
||||
jsonroot["discharge_power"] = data.dischargePower;
|
||||
return jsonroot.dump();
|
||||
}
|
||||
Reference in New Issue
Block a user