2025-01-11 06:30:12 +00:00
|
|
|
|
#include "mainwindow.h"
|
|
|
|
|
#include "ui_mainwindow.h"
|
|
|
|
|
|
|
|
|
|
#include<QGridLayout>
|
|
|
|
|
#include<QFileDialog>
|
|
|
|
|
#include<QPushButton>
|
|
|
|
|
#include <QDebug>
|
|
|
|
|
#include <QMessageBox>
|
2025-01-20 09:45:00 +00:00
|
|
|
|
#include <QThread>
|
2025-01-22 10:09:41 +00:00
|
|
|
|
#include <QtConcurrent/QtConcurrent>
|
|
|
|
|
|
|
|
|
|
|
2025-01-11 06:30:12 +00:00
|
|
|
|
|
|
|
|
|
MainWindow::MainWindow(QWidget *parent)
|
|
|
|
|
: QMainWindow(parent)
|
|
|
|
|
, ui(new Ui::MainWindow)
|
|
|
|
|
{
|
|
|
|
|
ui->setupUi(this);
|
|
|
|
|
|
|
|
|
|
Init();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
MainWindow::~MainWindow()
|
|
|
|
|
{
|
|
|
|
|
delete ui;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void MainWindow::openFile()
|
|
|
|
|
{
|
2025-01-16 01:10:46 +00:00
|
|
|
|
if (ui->openFile->text() == "打开文件") {
|
|
|
|
|
//选择导入的文件路径
|
|
|
|
|
loadpath = QFileDialog::getOpenFileName(this,"选择文件","/", "Files(*.json)");
|
|
|
|
|
qDebug() << loadpath << endl;
|
|
|
|
|
|
|
|
|
|
if(loadpath.isEmpty()) return;
|
|
|
|
|
jsonModel->loadJson(loadpath);
|
|
|
|
|
ui->treeView->expandAll();
|
|
|
|
|
|
|
|
|
|
ui->openFile->setText("保存文件");
|
|
|
|
|
|
|
|
|
|
openFileFlag = true;
|
|
|
|
|
|
|
|
|
|
if (openFileFlag && openSerialPortFlag) {
|
|
|
|
|
ui->readConfigFile->setEnabled(true);
|
|
|
|
|
ui->writeConfigFile->setEnabled(true);
|
|
|
|
|
} else {
|
|
|
|
|
ui->readConfigFile->setEnabled(false);
|
|
|
|
|
ui->writeConfigFile->setEnabled(false);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
if(loadpath.isEmpty()) return;
|
|
|
|
|
jsonModel->dumpJson(loadpath);
|
|
|
|
|
}
|
2025-01-11 06:30:12 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void MainWindow::scanSerialPort()
|
|
|
|
|
{
|
|
|
|
|
/* 查找可用串口 */
|
|
|
|
|
foreach (const QSerialPortInfo &info, QSerialPortInfo::availablePorts()) {
|
|
|
|
|
// ui->SerialPort->addItem(info.portName());
|
|
|
|
|
ui->SerialPort->addItem(info.portName() + ":" +info.description());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void MainWindow::parityItemInit()
|
|
|
|
|
{
|
|
|
|
|
QList <QString> list;
|
|
|
|
|
list<<"None"<<"Even"<<"Odd"<<"Space"<<"Mark";
|
|
|
|
|
for (int i = 0; i < 5; i++) {
|
|
|
|
|
ui->comboBox_4->addItem(list[i]);
|
|
|
|
|
}
|
|
|
|
|
ui->comboBox_4->setCurrentIndex(0);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void MainWindow::Init()
|
|
|
|
|
{
|
2025-01-16 01:10:46 +00:00
|
|
|
|
ui->readConfigFile->setEnabled(false);
|
|
|
|
|
ui->writeConfigFile->setEnabled(false);
|
|
|
|
|
|
2025-01-11 06:30:12 +00:00
|
|
|
|
scanSerialPort();
|
|
|
|
|
parityItemInit();
|
|
|
|
|
serialPort = new QSerialPort(this);
|
|
|
|
|
|
2025-01-16 01:10:46 +00:00
|
|
|
|
jsonModel = new JsonTreeModel(this);
|
|
|
|
|
ui->treeView->setModel(jsonModel);
|
|
|
|
|
|
|
|
|
|
openSerialPortFlag = false;
|
|
|
|
|
openFileFlag = false;
|
|
|
|
|
|
|
|
|
|
|
2025-01-11 06:30:12 +00:00
|
|
|
|
connect(ui->openFile,SIGNAL(clicked()),this,SLOT(openFile()));
|
2025-01-16 01:10:46 +00:00
|
|
|
|
|
2025-01-11 06:30:12 +00:00
|
|
|
|
connect(ui->SerialPortPushButton,SIGNAL(clicked())
|
|
|
|
|
,this,SLOT(openSerialPortPushButtonClicked()));
|
2025-01-16 01:10:46 +00:00
|
|
|
|
connect(ui->readConfigFile,SIGNAL(clicked())
|
|
|
|
|
,this,SLOT(readCfgFile()));
|
|
|
|
|
connect(ui->writeConfigFile,SIGNAL(clicked())
|
|
|
|
|
,this,SLOT(writeCfgFile()));
|
2025-01-11 06:30:12 +00:00
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
2025-01-20 09:45:00 +00:00
|
|
|
|
uint16_t MainWindow::modbusCrc(uint8_t *arr_buff, uint8_t len)
|
|
|
|
|
{
|
|
|
|
|
uint16_t crc=0xFFFF;
|
|
|
|
|
uint16_t i, j;
|
|
|
|
|
|
|
|
|
|
for ( j=0; j<len; j++){
|
|
|
|
|
crc=crc ^*arr_buff++;
|
|
|
|
|
for ( i=0; i<8; i++){
|
|
|
|
|
if( ( crc&0x0001) >0){
|
|
|
|
|
crc=crc>>1;
|
|
|
|
|
crc=crc^ 0xa001;
|
|
|
|
|
}else{
|
|
|
|
|
crc=crc>>1;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return crc;
|
|
|
|
|
}
|
|
|
|
|
|
2025-01-11 06:30:12 +00:00
|
|
|
|
void MainWindow::openSerialPortPushButtonClicked()
|
|
|
|
|
{
|
|
|
|
|
if (ui->SerialPortPushButton->text() == "打开串口") {
|
|
|
|
|
/* 设置串口名 */
|
|
|
|
|
// serialPort->setPortName(ui->SerialPort->currentText());
|
|
|
|
|
serialPort->setPort((const QSerialPortInfo)(ui->SerialPort->currentText().section(':', 0, 0)));
|
|
|
|
|
|
|
|
|
|
/* 设置波特率 */
|
|
|
|
|
serialPort->setBaudRate(ui->comboBox_2->currentText().toInt());
|
|
|
|
|
|
|
|
|
|
/* 设置数据位数 */
|
|
|
|
|
switch (ui->comboBox_3->currentText().toInt()) {
|
|
|
|
|
case 5:
|
|
|
|
|
serialPort->setDataBits(QSerialPort::Data5);
|
|
|
|
|
break;
|
|
|
|
|
case 6:
|
|
|
|
|
serialPort->setDataBits(QSerialPort::Data6);
|
|
|
|
|
break;
|
|
|
|
|
case 7:
|
|
|
|
|
serialPort->setDataBits(QSerialPort::Data7);
|
|
|
|
|
break;
|
|
|
|
|
case 8:
|
|
|
|
|
serialPort->setDataBits(QSerialPort::Data8);
|
|
|
|
|
break;
|
|
|
|
|
default: break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* 设置奇偶校验 */
|
|
|
|
|
switch (ui->comboBox_4->currentIndex()) {
|
|
|
|
|
case 0:
|
|
|
|
|
serialPort->setParity(QSerialPort::NoParity);
|
|
|
|
|
break;
|
|
|
|
|
case 1:
|
|
|
|
|
serialPort->setParity(QSerialPort::EvenParity);
|
|
|
|
|
break;
|
|
|
|
|
case 2:
|
|
|
|
|
serialPort->setParity(QSerialPort::OddParity);
|
|
|
|
|
break;
|
|
|
|
|
case 3:
|
|
|
|
|
serialPort->setParity(QSerialPort::SpaceParity);
|
|
|
|
|
break;
|
|
|
|
|
case 4:
|
|
|
|
|
serialPort->setParity(QSerialPort::MarkParity);
|
|
|
|
|
break;
|
|
|
|
|
default: break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* 设置停止位 */
|
|
|
|
|
switch (ui->comboBox_5->currentText().toInt()) {
|
|
|
|
|
case 1:
|
|
|
|
|
serialPort->setStopBits(QSerialPort::OneStop);
|
|
|
|
|
break;
|
|
|
|
|
case 2:
|
|
|
|
|
serialPort->setStopBits(QSerialPort::TwoStop);
|
|
|
|
|
break;
|
|
|
|
|
default: break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* 设置流控制 */
|
|
|
|
|
serialPort->setFlowControl(QSerialPort::NoFlowControl);
|
|
|
|
|
if (!serialPort->open(QIODevice::ReadWrite))
|
|
|
|
|
QMessageBox::about(NULL, "错误",
|
|
|
|
|
"串口无法打开!可能串口已经被占用!");
|
|
|
|
|
else {
|
|
|
|
|
ui->SerialPort->setEnabled(false);
|
|
|
|
|
ui->comboBox_2->setEnabled(false);
|
|
|
|
|
ui->comboBox_3->setEnabled(false);
|
|
|
|
|
ui->comboBox_4->setEnabled(false);
|
|
|
|
|
ui->comboBox_5->setEnabled(false);
|
|
|
|
|
|
|
|
|
|
ui->SerialPortPushButton->setText("关闭串口");
|
|
|
|
|
ui->label_6->setStyleSheet("color: red;");
|
|
|
|
|
// pushButton[0]->setEnabled(true);
|
2025-01-16 01:10:46 +00:00
|
|
|
|
|
|
|
|
|
openSerialPortFlag = true;
|
|
|
|
|
|
|
|
|
|
if (openFileFlag && openSerialPortFlag) {
|
|
|
|
|
ui->readConfigFile->setEnabled(true);
|
|
|
|
|
ui->writeConfigFile->setEnabled(true);
|
|
|
|
|
} else {
|
|
|
|
|
ui->readConfigFile->setEnabled(false);
|
|
|
|
|
ui->writeConfigFile->setEnabled(false);
|
|
|
|
|
}
|
2025-01-11 06:30:12 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
serialPort->close();
|
|
|
|
|
ui->SerialPort->setEnabled(true);
|
|
|
|
|
ui->comboBox_2->setEnabled(true);
|
|
|
|
|
ui->comboBox_3->setEnabled(true);
|
|
|
|
|
ui->comboBox_4->setEnabled(true);
|
|
|
|
|
ui->comboBox_5->setEnabled(true);
|
|
|
|
|
ui->label_6->setStyleSheet("color: block;");
|
|
|
|
|
ui->SerialPortPushButton->setText("打开串口");
|
2025-01-16 01:10:46 +00:00
|
|
|
|
|
|
|
|
|
openSerialPortFlag = false;
|
|
|
|
|
|
|
|
|
|
if (openFileFlag && openSerialPortFlag) {
|
|
|
|
|
ui->readConfigFile->setEnabled(true);
|
|
|
|
|
ui->writeConfigFile->setEnabled(true);
|
|
|
|
|
} else {
|
|
|
|
|
ui->readConfigFile->setEnabled(false);
|
|
|
|
|
ui->writeConfigFile->setEnabled(false);
|
|
|
|
|
}
|
2025-01-11 06:30:12 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
2025-01-16 01:10:46 +00:00
|
|
|
|
|
|
|
|
|
void MainWindow::readCfgFile()
|
|
|
|
|
{
|
|
|
|
|
qDebug(" in readCfgFile ");
|
2025-01-20 09:45:00 +00:00
|
|
|
|
|
|
|
|
|
uint8_t readCfgBuf[256];
|
|
|
|
|
uint8_t *readCfgPoint = readCfgBuf;
|
|
|
|
|
|
|
|
|
|
/* 起始标志 */
|
|
|
|
|
*readCfgPoint = 'S';
|
|
|
|
|
readCfgPoint += 1;
|
|
|
|
|
*readCfgPoint = 'L';
|
|
|
|
|
readCfgPoint += 1;
|
|
|
|
|
|
|
|
|
|
/* 唯一ID */
|
|
|
|
|
// QJsonDocument json_doc;
|
|
|
|
|
|
|
|
|
|
// 判断是否解析失败
|
|
|
|
|
// if (jsonModel->readJson() != true || !json_doc.isNull()) {
|
|
|
|
|
// if (!jsonModel->readJson() || !jsonModel->json_doc.isNull()) {
|
|
|
|
|
// qDebug() << "Json格式错误!" ;
|
|
|
|
|
// return;
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* 唯一ID */
|
|
|
|
|
bool flag = jsonModel->readJson();
|
|
|
|
|
if (!flag) {
|
|
|
|
|
qDebug() << "Json格式错误1!" ;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (jsonModel->json_doc.isNull()) {
|
|
|
|
|
qDebug() << "Json格式错误2!" ;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* 获取根 { } */
|
|
|
|
|
// QJsonObject rootObj = json_doc.object();
|
|
|
|
|
|
|
|
|
|
if (!jsonModel->json_doc.isObject()) {
|
|
|
|
|
qDebug() << "json_doc.isObject()" ;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
QJsonValue tempValue = jsonModel->json_doc.object().value("充电控制盒配置文件");
|
|
|
|
|
// QJsonValue tempValue = rootObj.value("充电控制盒配置文件");
|
|
|
|
|
// QJsonValue tempValue = rootObj.value("chargeControlCfgFile");
|
|
|
|
|
QJsonObject tempObject;
|
|
|
|
|
QJsonObject rootObj;
|
|
|
|
|
if (tempValue.isObject()) {
|
|
|
|
|
rootObj = tempValue.toObject();
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
qDebug() << "充电控制盒配置文件 error" << tempValue.type() ;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tempValue = rootObj.value("设备的唯一地址");
|
|
|
|
|
if (tempValue.isObject()) {
|
|
|
|
|
tempObject = tempValue.toObject();
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
qDebug() << "onlyID object error" << tempValue.type() ;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
tempValue = tempObject.value("unique_Device_ID");
|
|
|
|
|
QJsonArray tempArray;
|
|
|
|
|
if (tempValue.isArray()) {
|
|
|
|
|
tempArray = tempValue.toArray();
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
qDebug() << "onlyID object error" << tempValue.type() ;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
QString tempString = tempArray.at(0).toString();
|
|
|
|
|
tempString.remove("0x");
|
|
|
|
|
// 将字符串转换为整数(基数为 16)
|
|
|
|
|
bool ok;
|
|
|
|
|
*readCfgPoint = tempString.toInt(&ok, 16);
|
|
|
|
|
readCfgPoint += 1;
|
|
|
|
|
// readCfgBuf[2] = tempString.toInt(&ok, 16);
|
|
|
|
|
if (!ok) {
|
|
|
|
|
qDebug() << "转换失败!";
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
tempString = tempArray.at(1).toString();
|
|
|
|
|
tempString.remove("0x");
|
|
|
|
|
// 将字符串转换为整数(基数为 16)
|
|
|
|
|
// readCfgBuf[3] = tempString.toInt(&ok, 16);
|
|
|
|
|
*readCfgPoint = tempString.toInt(&ok, 16);
|
|
|
|
|
readCfgPoint += 1;
|
|
|
|
|
if (!ok) {
|
|
|
|
|
qDebug() << "转换失败!";
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
tempString = tempArray.at(2).toString();
|
|
|
|
|
tempString.remove("0x");
|
|
|
|
|
// 将字符串转换为整数(基数为 16)
|
|
|
|
|
// readCfgBuf[4] = tempString.toInt(&ok, 16);
|
|
|
|
|
*readCfgPoint = tempString.toInt(&ok, 16);
|
|
|
|
|
readCfgPoint += 1;
|
|
|
|
|
if (!ok) {
|
|
|
|
|
qDebug() << "转换失败!";
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
tempString = tempArray.at(3).toString();
|
|
|
|
|
tempString.remove("0x");
|
|
|
|
|
// 将字符串转换为整数(基数为 16)
|
|
|
|
|
// readCfgBuf[5] = tempString.toInt(&ok, 16);
|
|
|
|
|
*readCfgPoint = tempString.toInt(&ok, 16);
|
|
|
|
|
readCfgPoint += 1;
|
|
|
|
|
if (!ok) {
|
|
|
|
|
qDebug() << "转换失败!";
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
tempString = tempArray.at(4).toString();
|
|
|
|
|
tempString.remove("0x");
|
|
|
|
|
// 将字符串转换为整数(基数为 16)
|
|
|
|
|
// readCfgBuf[6] = tempString.toInt(&ok, 16);
|
|
|
|
|
*readCfgPoint = tempString.toInt(&ok, 16);
|
|
|
|
|
readCfgPoint += 1;
|
|
|
|
|
if (!ok) {
|
|
|
|
|
qDebug() << "转换失败!";
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
tempString = tempArray.at(5).toString();
|
|
|
|
|
tempString.remove("0x");
|
|
|
|
|
// 将字符串转换为整数(基数为 16)
|
|
|
|
|
// readCfgBuf[7] = tempString.toInt(&ok, 16);
|
|
|
|
|
*readCfgPoint = tempString.toInt(&ok, 16);
|
|
|
|
|
readCfgPoint += 1;
|
|
|
|
|
if (!ok) {
|
|
|
|
|
qDebug() << "转换失败!";
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
tempString = tempArray.at(6).toString();
|
|
|
|
|
tempString.remove("0x");
|
|
|
|
|
// 将字符串转换为整数(基数为 16)
|
|
|
|
|
// readCfgBuf[8] = tempString.toInt(&ok, 16);
|
|
|
|
|
*readCfgPoint = tempString.toInt(&ok, 16);
|
|
|
|
|
readCfgPoint += 1;
|
|
|
|
|
if (!ok) {
|
|
|
|
|
qDebug() << "转换失败!";
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// qDebug(" 0x%x ", readCfgBuf[0]);
|
|
|
|
|
// qDebug(" 0x%x ", readCfgBuf[1]);
|
|
|
|
|
// qDebug(" 0x%x ", readCfgBuf[2]);
|
|
|
|
|
// qDebug(" 0x%x ", readCfgBuf[3]);
|
|
|
|
|
// qDebug(" 0x%x ", readCfgBuf[4]);
|
|
|
|
|
// qDebug(" 0x%x ", readCfgBuf[5]);
|
|
|
|
|
// qDebug(" 0x%x ", readCfgBuf[6]);
|
|
|
|
|
// qDebug(" 0x%x ", readCfgBuf[7]);
|
|
|
|
|
// qDebug(" 0x%x ", readCfgBuf[8]);
|
|
|
|
|
/* 功能码 */
|
|
|
|
|
// readCfgBuf[9] = 0xD1;
|
|
|
|
|
*readCfgPoint = 0xD1;
|
|
|
|
|
readCfgPoint += 1;
|
|
|
|
|
|
|
|
|
|
/* 数据长度 */
|
2025-01-21 10:01:06 +00:00
|
|
|
|
*readCfgPoint = 60 >> 8;
|
2025-01-20 09:45:00 +00:00
|
|
|
|
readCfgPoint += 1;
|
2025-01-21 10:01:06 +00:00
|
|
|
|
*readCfgPoint = 60;
|
2025-01-20 09:45:00 +00:00
|
|
|
|
readCfgPoint += 1;
|
|
|
|
|
|
|
|
|
|
/* 数据内容 */
|
|
|
|
|
*readCfgPoint = (uint8_t)(0x0000 >> 8);
|
|
|
|
|
readCfgPoint += 1;
|
|
|
|
|
*readCfgPoint = (uint8_t)0x0000;
|
|
|
|
|
readCfgPoint += 1;
|
|
|
|
|
|
|
|
|
|
*readCfgPoint = (uint8_t)(0x0001 >> 8);
|
|
|
|
|
readCfgPoint += 1;
|
|
|
|
|
*readCfgPoint = (uint8_t)0x0001;
|
|
|
|
|
readCfgPoint += 1;
|
|
|
|
|
|
|
|
|
|
*readCfgPoint = (uint8_t)(0x0002 >> 8);
|
|
|
|
|
readCfgPoint += 1;
|
|
|
|
|
*readCfgPoint = (uint8_t)0x0002;
|
|
|
|
|
readCfgPoint += 1;
|
|
|
|
|
|
|
|
|
|
*readCfgPoint = (uint8_t)(0x0100 >> 8);
|
|
|
|
|
readCfgPoint += 1;
|
|
|
|
|
*readCfgPoint = (uint8_t)0x0100;
|
|
|
|
|
readCfgPoint += 1;
|
|
|
|
|
|
|
|
|
|
*readCfgPoint = (uint8_t)(0x0101 >> 8);
|
|
|
|
|
readCfgPoint += 1;
|
|
|
|
|
*readCfgPoint = (uint8_t)0x0101;
|
|
|
|
|
readCfgPoint += 1;
|
|
|
|
|
|
|
|
|
|
*readCfgPoint = (uint8_t)(0x0102 >> 8);
|
|
|
|
|
readCfgPoint += 1;
|
|
|
|
|
*readCfgPoint = (uint8_t)0x0102;
|
|
|
|
|
readCfgPoint += 1;
|
|
|
|
|
|
|
|
|
|
*readCfgPoint = (uint8_t)(0x0103 >> 8);
|
|
|
|
|
readCfgPoint += 1;
|
|
|
|
|
*readCfgPoint = (uint8_t)0x0103;
|
|
|
|
|
readCfgPoint += 1;
|
|
|
|
|
|
|
|
|
|
*readCfgPoint = (uint8_t)(0x0104 >> 8);
|
|
|
|
|
readCfgPoint += 1;
|
|
|
|
|
*readCfgPoint = (uint8_t)0x0104;
|
|
|
|
|
readCfgPoint += 1;
|
|
|
|
|
|
|
|
|
|
*readCfgPoint = (uint8_t)(0x0105 >> 8);
|
|
|
|
|
readCfgPoint += 1;
|
|
|
|
|
*readCfgPoint = (uint8_t)0x0105;
|
|
|
|
|
readCfgPoint += 1;
|
|
|
|
|
|
|
|
|
|
*readCfgPoint = (uint8_t)(0x0106 >> 8);
|
|
|
|
|
readCfgPoint += 1;
|
|
|
|
|
*readCfgPoint = (uint8_t)0x0106;
|
|
|
|
|
readCfgPoint += 1;
|
|
|
|
|
|
|
|
|
|
*readCfgPoint = (uint8_t)(0x0107 >> 8);
|
|
|
|
|
readCfgPoint += 1;
|
|
|
|
|
*readCfgPoint = (uint8_t)0x0107;
|
|
|
|
|
readCfgPoint += 1;
|
|
|
|
|
|
|
|
|
|
*readCfgPoint = (uint8_t)(0x0108 >> 8);
|
|
|
|
|
readCfgPoint += 1;
|
|
|
|
|
*readCfgPoint = (uint8_t)0x0108;
|
|
|
|
|
readCfgPoint += 1;
|
|
|
|
|
|
|
|
|
|
*readCfgPoint = (uint8_t)(0x0109 >> 8);
|
|
|
|
|
readCfgPoint += 1;
|
|
|
|
|
*readCfgPoint = (uint8_t)0x0109;
|
|
|
|
|
readCfgPoint += 1;
|
|
|
|
|
|
|
|
|
|
*readCfgPoint = (uint8_t)(0x010A >> 8);
|
|
|
|
|
readCfgPoint += 1;
|
|
|
|
|
*readCfgPoint = (uint8_t)0x010A;
|
|
|
|
|
readCfgPoint += 1;
|
|
|
|
|
|
|
|
|
|
*readCfgPoint = (uint8_t)(0x010B >> 8);
|
|
|
|
|
readCfgPoint += 1;
|
|
|
|
|
*readCfgPoint = (uint8_t)0x010B;
|
|
|
|
|
readCfgPoint += 1;
|
|
|
|
|
|
|
|
|
|
*readCfgPoint = (uint8_t)(0x010C >> 8);
|
|
|
|
|
readCfgPoint += 1;
|
|
|
|
|
*readCfgPoint = (uint8_t)0x010C;
|
|
|
|
|
readCfgPoint += 1;
|
|
|
|
|
|
|
|
|
|
*readCfgPoint = (uint8_t)(0x010D >> 8);
|
|
|
|
|
readCfgPoint += 1;
|
|
|
|
|
*readCfgPoint = (uint8_t)0x010D;
|
|
|
|
|
readCfgPoint += 1;
|
|
|
|
|
|
|
|
|
|
*readCfgPoint = (uint8_t)(0x010E >> 8);
|
|
|
|
|
readCfgPoint += 1;
|
|
|
|
|
*readCfgPoint = (uint8_t)0x010E;
|
|
|
|
|
readCfgPoint += 1;
|
|
|
|
|
|
|
|
|
|
*readCfgPoint = (uint8_t)(0x010F >> 8);
|
|
|
|
|
readCfgPoint += 1;
|
|
|
|
|
*readCfgPoint = (uint8_t)0x010F;
|
|
|
|
|
readCfgPoint += 1;
|
|
|
|
|
|
|
|
|
|
*readCfgPoint = (uint8_t)(0x0110 >> 8);
|
|
|
|
|
readCfgPoint += 1;
|
|
|
|
|
*readCfgPoint = (uint8_t)0x0110;
|
|
|
|
|
readCfgPoint += 1;
|
|
|
|
|
|
|
|
|
|
*readCfgPoint = (uint8_t)(0x0111 >> 8);
|
|
|
|
|
readCfgPoint += 1;
|
|
|
|
|
*readCfgPoint = (uint8_t)0x0111;
|
|
|
|
|
readCfgPoint += 1;
|
|
|
|
|
|
|
|
|
|
*readCfgPoint = (uint8_t)(0x0112 >> 8);
|
|
|
|
|
readCfgPoint += 1;
|
|
|
|
|
*readCfgPoint = (uint8_t)0x0112;
|
|
|
|
|
readCfgPoint += 1;
|
|
|
|
|
|
|
|
|
|
*readCfgPoint = (uint8_t)(0x0113 >> 8);
|
|
|
|
|
readCfgPoint += 1;
|
|
|
|
|
*readCfgPoint = (uint8_t)0x0113;
|
|
|
|
|
readCfgPoint += 1;
|
|
|
|
|
|
|
|
|
|
*readCfgPoint = (uint8_t)(0x0114 >> 8);
|
|
|
|
|
readCfgPoint += 1;
|
|
|
|
|
*readCfgPoint = (uint8_t)0x0114;
|
|
|
|
|
readCfgPoint += 1;
|
|
|
|
|
|
|
|
|
|
*readCfgPoint = (uint8_t)(0x0115 >> 8);
|
|
|
|
|
readCfgPoint += 1;
|
|
|
|
|
*readCfgPoint = (uint8_t)0x0115;
|
|
|
|
|
readCfgPoint += 1;
|
|
|
|
|
|
|
|
|
|
*readCfgPoint = (uint8_t)(0x0116 >> 8);
|
|
|
|
|
readCfgPoint += 1;
|
|
|
|
|
*readCfgPoint = (uint8_t)0x0116;
|
|
|
|
|
readCfgPoint += 1;
|
|
|
|
|
|
|
|
|
|
*readCfgPoint = (uint8_t)(0x0117 >> 8);
|
|
|
|
|
readCfgPoint += 1;
|
|
|
|
|
*readCfgPoint = (uint8_t)0x0117;
|
|
|
|
|
readCfgPoint += 1;
|
|
|
|
|
|
|
|
|
|
*readCfgPoint = (uint8_t)(0x0118 >> 8);
|
|
|
|
|
readCfgPoint += 1;
|
|
|
|
|
*readCfgPoint = (uint8_t)0x0118;
|
|
|
|
|
readCfgPoint += 1;
|
|
|
|
|
|
|
|
|
|
*readCfgPoint = (uint8_t)(0x0119 >> 8);
|
|
|
|
|
readCfgPoint += 1;
|
|
|
|
|
*readCfgPoint = (uint8_t)0x0119;
|
|
|
|
|
readCfgPoint += 1;
|
|
|
|
|
|
2025-01-21 10:01:06 +00:00
|
|
|
|
*readCfgPoint = (uint8_t)(0x011A >> 8);
|
|
|
|
|
readCfgPoint += 1;
|
|
|
|
|
*readCfgPoint = (uint8_t)0x011A;
|
|
|
|
|
readCfgPoint += 1;
|
|
|
|
|
|
2025-01-20 09:45:00 +00:00
|
|
|
|
/* crc校验 */
|
|
|
|
|
uint16_t tempU16 = 0;
|
2025-01-21 10:01:06 +00:00
|
|
|
|
tempU16 = modbusCrc(readCfgBuf, (60 + 12));
|
2025-01-20 09:45:00 +00:00
|
|
|
|
*readCfgPoint = (uint8_t)(tempU16 >> 8);
|
|
|
|
|
readCfgPoint += 1;
|
|
|
|
|
*readCfgPoint = (uint8_t)tempU16;
|
|
|
|
|
readCfgPoint += 1;
|
|
|
|
|
|
|
|
|
|
/* 结束标志 */
|
|
|
|
|
*readCfgPoint = 0x16;
|
|
|
|
|
|
|
|
|
|
// for (int i = 0; i < 29 * 2 + 12 + 3; i++) {
|
|
|
|
|
// qDebug(" 0x%x ", readCfgBuf[i]);
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
// /* 设备的唯一地址 */
|
|
|
|
|
// tempValue = rootObj.value("设备的唯一地址");
|
|
|
|
|
// if (tempValue.isObject()) {
|
|
|
|
|
// tempObject = tempValue.toObject();
|
|
|
|
|
// }
|
|
|
|
|
// else {
|
|
|
|
|
// qDebug() << "设备的唯一地址 error" << tempValue.type() ;
|
|
|
|
|
// return;
|
|
|
|
|
// }
|
|
|
|
|
// tempValue = tempObject.value("类型");
|
|
|
|
|
// if (tempValue.isString()) {
|
|
|
|
|
// tempString = tempValue.toString();
|
|
|
|
|
// }
|
|
|
|
|
// else {
|
|
|
|
|
// qDebug() << "设备的唯一地址 error" << tempValue.type() ;
|
|
|
|
|
// return;
|
|
|
|
|
// }
|
|
|
|
|
// tempString.remove("H");
|
|
|
|
|
// // 将字符串转换为整数(基数为 16)
|
|
|
|
|
//// readCfgBuf[11] = tempString.toInt(&ok, 16);
|
|
|
|
|
// *readCfgPoint = tempString.toInt(&ok, 16);
|
|
|
|
|
// readCfgPoint += 1;
|
|
|
|
|
// if (!ok) {
|
|
|
|
|
// qDebug() << "转换失败!";
|
|
|
|
|
// return;
|
|
|
|
|
// }
|
|
|
|
|
// readCfgBuf[10] = 0;
|
|
|
|
|
// readCfgBuf[10]++;
|
|
|
|
|
//// qDebug(" 0x%x ", readCfgBuf[11]);
|
|
|
|
|
|
|
|
|
|
// /* 对上通讯波特率 */
|
|
|
|
|
// tempValue = rootObj.value("SL协议对上通信波特率");
|
|
|
|
|
// if (tempValue.isObject()) {
|
|
|
|
|
// tempObject = tempValue.toObject();
|
|
|
|
|
// }
|
|
|
|
|
// else {
|
|
|
|
|
// qDebug() << "SL协议对上通信波特率error" << tempValue.type() ;
|
|
|
|
|
// return;
|
|
|
|
|
// }
|
|
|
|
|
// tempValue = tempObject.value("类型");
|
|
|
|
|
// if (tempValue.isString()) {
|
|
|
|
|
// tempString = tempValue.toString();
|
|
|
|
|
// }
|
|
|
|
|
// else {
|
|
|
|
|
// qDebug() << "SL协议对上通信波特率类型 error" << tempValue.type() ;
|
|
|
|
|
// return;
|
|
|
|
|
// }
|
|
|
|
|
// tempString.remove("H");
|
|
|
|
|
// // 将字符串转换为整数(基数为 16)
|
|
|
|
|
// readCfgBuf[11] = tempString.toInt(&ok, 16);
|
|
|
|
|
// if (!ok) {
|
|
|
|
|
// qDebug() << "转换失败!";
|
|
|
|
|
// return;
|
|
|
|
|
// }
|
|
|
|
|
// readCfgBuf[10]++;
|
|
|
|
|
//// qDebug(" 0x%x ", readCfgBuf[11]);
|
|
|
|
|
|
|
|
|
|
// /* SL协议对下通信波特率 */
|
|
|
|
|
// tempValue = rootObj.value("SL协议对下通信波特率");
|
|
|
|
|
// if (tempValue.isObject()) {
|
|
|
|
|
// tempObject = tempValue.toObject();
|
|
|
|
|
// }
|
|
|
|
|
// else {
|
|
|
|
|
// qDebug() << "SL协议对下通信波特率 error" << tempValue.type() ;
|
|
|
|
|
// return;
|
|
|
|
|
// }
|
|
|
|
|
// tempValue = tempObject.value("类型");
|
|
|
|
|
// if (tempValue.isString()) {
|
|
|
|
|
// tempString = tempValue.toString();
|
|
|
|
|
// }
|
|
|
|
|
// else {
|
|
|
|
|
// qDebug() << "SL协议对下通信波特率 error" << tempValue.type() ;
|
|
|
|
|
// return;
|
|
|
|
|
// }
|
|
|
|
|
// tempString.remove("H");
|
|
|
|
|
// // 将字符串转换为整数(基数为 16)
|
|
|
|
|
// readCfgBuf[11] = tempString.toInt(&ok, 16);
|
|
|
|
|
// if (!ok) {
|
|
|
|
|
// qDebug() << "转换失败!";
|
|
|
|
|
// return;
|
|
|
|
|
// }
|
|
|
|
|
// readCfgBuf[10]++;
|
|
|
|
|
|
2025-01-22 10:09:41 +00:00
|
|
|
|
// ui->SerialPortPushButton->setDisabled(true);
|
|
|
|
|
// ui->readConfigFile->setDisabled(true);
|
|
|
|
|
// ui->writeConfigFile->setDisabled(true);
|
2025-01-20 09:45:00 +00:00
|
|
|
|
|
2025-01-21 10:01:06 +00:00
|
|
|
|
serialPort->write(reinterpret_cast<const char*>(readCfgBuf), (60 + 12 + 3));
|
2025-01-20 09:45:00 +00:00
|
|
|
|
|
2025-01-22 10:09:41 +00:00
|
|
|
|
QTimer::singleShot(1500, [this]() {
|
|
|
|
|
QByteArray data = serialPort->readAll();
|
|
|
|
|
// serialPort->write("hello world");
|
|
|
|
|
for (int i = 0; i < data.length(); i++) {
|
|
|
|
|
qDebug() << QString::asprintf("0x%x", static_cast<unsigned char>(data.at(i)));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
uint16_t crc16;
|
|
|
|
|
uint8_t *repData = (uint8_t *)data.data();
|
|
|
|
|
uint16_t tempU16;
|
|
|
|
|
uint8_t *analysisCfgData = repData + 12;
|
|
|
|
|
|
|
|
|
|
/* 起始标志 */
|
|
|
|
|
if (*repData != 'S' || *(repData + 1) != 'L') {
|
|
|
|
|
qDebug() << "start flag error";
|
|
|
|
|
goto error;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* 功能码 */
|
|
|
|
|
if (*(repData + 9) != 0xD1) {
|
|
|
|
|
qDebug() << "function Code error";
|
|
|
|
|
goto error;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
tempU16 = (*(repData + 10) << 8) | (*(repData + 11));
|
|
|
|
|
qDebug() << "len" << tempU16;
|
|
|
|
|
crc16 = (*(repData + 12 + tempU16) << 8) | (*(repData + 13 + tempU16));
|
|
|
|
|
|
|
|
|
|
/* crc校验 */
|
|
|
|
|
if (crc16 != modbusCrc(repData, tempU16 + 12)) {
|
|
|
|
|
qDebug() << "crc error";
|
|
|
|
|
qDebug() << QString::asprintf("0x%x", static_cast<uint16_t>(crc16));
|
|
|
|
|
qDebug() << QString::asprintf("0x%x", static_cast<uint16_t>(modbusCrc(repData, tempU16 + 12)));
|
|
|
|
|
goto error;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* 结束标志 */
|
|
|
|
|
if (*(repData + 14 + tempU16) != 0x16) {
|
|
|
|
|
qDebug() << "end flag error";
|
|
|
|
|
goto error;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
while (analysisCfgData != NULL && analysisCfgData != (repData + 12 + tempU16)) {
|
|
|
|
|
analysisCfgData = analysisReadCfgData(&analysisCfgData);
|
|
|
|
|
}
|
|
|
|
|
if (analysisCfgData != (repData + 12 + tempU16)) {
|
|
|
|
|
qDebug() << "analysisCfgData error";
|
|
|
|
|
goto error;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
jsonModel->refreshJson();
|
|
|
|
|
|
|
|
|
|
QMessageBox::information(this,
|
|
|
|
|
tr("配置文件"),
|
|
|
|
|
tr("读取配置文件成功"),
|
|
|
|
|
QMessageBox::Ok,
|
|
|
|
|
QMessageBox::Ok);
|
|
|
|
|
// reply = QMessageBox::information(this, "写入成功",
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
error:
|
|
|
|
|
QMessageBox::information(this,
|
|
|
|
|
tr("配置文件"),
|
|
|
|
|
tr("读取配置文件失败"),
|
|
|
|
|
QMessageBox::Ok,
|
|
|
|
|
QMessageBox::Ok);
|
|
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
// /* 延时1.5S */
|
|
|
|
|
// QThread::msleep(1500);
|
|
|
|
|
// QByteArray data = serialPort->readAll();
|
|
|
|
|
|
|
|
|
|
// ui->SerialPortPushButton->setEnabled(true);
|
|
|
|
|
// ui->readConfigFile->setEnabled(true);
|
|
|
|
|
// ui->writeConfigFile->setEnabled(true);
|
|
|
|
|
|
|
|
|
|
// uint16_t crc16;
|
|
|
|
|
// uint8_t *repData = (uint8_t *)data.data();
|
|
|
|
|
//// QMessageBox::standardButton reply;
|
2025-01-20 09:45:00 +00:00
|
|
|
|
|
2025-01-21 10:01:06 +00:00
|
|
|
|
// if (data.length() < 17) {
|
2025-01-20 09:45:00 +00:00
|
|
|
|
// goto error;
|
|
|
|
|
// }
|
|
|
|
|
|
2025-01-22 10:09:41 +00:00
|
|
|
|
// /* 起始标志 */
|
|
|
|
|
// if (*repData != 'S' || *(repData + 1) != 'L') {
|
2025-01-20 09:45:00 +00:00
|
|
|
|
// goto error;
|
|
|
|
|
// }
|
|
|
|
|
|
2025-01-22 10:09:41 +00:00
|
|
|
|
//// /* 地址 */
|
|
|
|
|
//// if (data.at(0) != 'S' || data.at(1) != 'L') {
|
|
|
|
|
//// goto error;
|
|
|
|
|
//// }
|
2025-01-21 10:01:06 +00:00
|
|
|
|
|
2025-01-22 10:09:41 +00:00
|
|
|
|
// if (*(repData + 9) != 0xD0) {
|
|
|
|
|
// goto error;
|
|
|
|
|
// }
|
2025-01-21 10:01:06 +00:00
|
|
|
|
|
2025-01-22 10:09:41 +00:00
|
|
|
|
// crc16 = (*(repData + 14) << 8) | *(repData + 15);
|
|
|
|
|
// if (crc16 != modbusCrc(repData, 14)) {
|
|
|
|
|
// goto error;
|
|
|
|
|
// }
|
2025-01-20 09:45:00 +00:00
|
|
|
|
|
2025-01-22 10:09:41 +00:00
|
|
|
|
// if (*(repData + 12) != 0xAA) {
|
|
|
|
|
// goto error;
|
|
|
|
|
// }
|
2025-01-20 09:45:00 +00:00
|
|
|
|
|
2025-01-22 10:09:41 +00:00
|
|
|
|
// QMessageBox::information(this,
|
|
|
|
|
// tr("Information消息框标题"),
|
|
|
|
|
// tr("这是Information消息框的内容。"),
|
|
|
|
|
// QMessageBox::Ok | QMessageBox::Cancel,
|
|
|
|
|
// QMessageBox::Ok);
|
|
|
|
|
//// reply = QMessageBox::information(this, "写入成功",
|
|
|
|
|
// return;
|
2025-01-20 09:45:00 +00:00
|
|
|
|
|
2025-01-22 10:09:41 +00:00
|
|
|
|
//error:
|
|
|
|
|
// QMessageBox::information(this,
|
|
|
|
|
// tr("Information消息框标题error"),
|
|
|
|
|
// tr("这是Information消息框的内容error。"),
|
|
|
|
|
// QMessageBox::Ok | QMessageBox::Cancel,
|
|
|
|
|
// QMessageBox::Ok);
|
2025-01-20 09:45:00 +00:00
|
|
|
|
|
2025-01-16 01:10:46 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void MainWindow::writeCfgFile()
|
|
|
|
|
{
|
|
|
|
|
qDebug(" in writeCfgFile ");
|
2025-01-20 09:45:00 +00:00
|
|
|
|
uint8_t writeCfgBuf[256];
|
|
|
|
|
uint8_t *writeCfgPoint = writeCfgBuf;
|
|
|
|
|
|
|
|
|
|
/* 起始标志 */
|
|
|
|
|
*writeCfgPoint = 'S';
|
|
|
|
|
writeCfgPoint += 1;
|
|
|
|
|
*writeCfgPoint = 'L';
|
|
|
|
|
writeCfgPoint += 1;
|
|
|
|
|
|
|
|
|
|
/* 唯一ID */
|
|
|
|
|
// QJsonDocument json_doc;
|
|
|
|
|
|
|
|
|
|
// 判断是否解析失败
|
|
|
|
|
// if (jsonModel->readJson() != true || !json_doc.isNull()) {
|
|
|
|
|
// if (!jsonModel->readJson() || !jsonModel->json_doc.isNull()) {
|
|
|
|
|
// qDebug() << "Json格式错误!" ;
|
|
|
|
|
// return;
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* 唯一ID */
|
|
|
|
|
bool flag = jsonModel->readJson();
|
|
|
|
|
if (!flag) {
|
|
|
|
|
qDebug() << "Json格式错误1!" ;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (jsonModel->json_doc.isNull()) {
|
|
|
|
|
qDebug() << "Json格式错误2!" ;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* 获取根 { } */
|
|
|
|
|
// QJsonObject rootObj = json_doc.object();
|
|
|
|
|
|
|
|
|
|
if (!jsonModel->json_doc.isObject()) {
|
|
|
|
|
qDebug() << "json_doc.isObject()" ;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
QJsonValue tempValue = jsonModel->json_doc.object().value("充电控制盒配置文件");
|
|
|
|
|
// QJsonValue tempValue = rootObj.value("充电控制盒配置文件");
|
|
|
|
|
// QJsonValue tempValue = rootObj.value("chargeControlCfgFile");
|
|
|
|
|
QJsonObject tempObject;
|
|
|
|
|
QJsonObject rootObj;
|
|
|
|
|
if (tempValue.isObject()) {
|
|
|
|
|
rootObj = tempValue.toObject();
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
qDebug() << "充电控制盒配置文件 error" << tempValue.type() ;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tempValue = rootObj.value("设备的唯一地址");
|
|
|
|
|
if (tempValue.isObject()) {
|
|
|
|
|
tempObject = tempValue.toObject();
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
qDebug() << "onlyID object error" << tempValue.type() ;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
tempValue = tempObject.value("unique_Device_ID");
|
|
|
|
|
QJsonArray tempArray;
|
|
|
|
|
if (tempValue.isArray()) {
|
|
|
|
|
tempArray = tempValue.toArray();
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
qDebug() << "onlyID object error" << tempValue.type() ;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
QString tempString = tempArray.at(0).toString();
|
|
|
|
|
tempString.remove("0x");
|
|
|
|
|
// 将字符串转换为整数(基数为 16)
|
|
|
|
|
bool ok;
|
|
|
|
|
*writeCfgPoint = tempString.toInt(&ok, 16);
|
|
|
|
|
writeCfgPoint += 1;
|
|
|
|
|
// readCfgBuf[2] = tempString.toInt(&ok, 16);
|
|
|
|
|
if (!ok) {
|
|
|
|
|
qDebug() << "转换失败!";
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
tempString = tempArray.at(1).toString();
|
|
|
|
|
tempString.remove("0x");
|
|
|
|
|
// 将字符串转换为整数(基数为 16)
|
|
|
|
|
// readCfgBuf[3] = tempString.toInt(&ok, 16);
|
|
|
|
|
*writeCfgPoint = tempString.toInt(&ok, 16);
|
|
|
|
|
writeCfgPoint += 1;
|
|
|
|
|
if (!ok) {
|
|
|
|
|
qDebug() << "转换失败!";
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
tempString = tempArray.at(2).toString();
|
|
|
|
|
tempString.remove("0x");
|
|
|
|
|
// 将字符串转换为整数(基数为 16)
|
|
|
|
|
// readCfgBuf[4] = tempString.toInt(&ok, 16);
|
|
|
|
|
*writeCfgPoint = tempString.toInt(&ok, 16);
|
|
|
|
|
writeCfgPoint += 1;
|
|
|
|
|
if (!ok) {
|
|
|
|
|
qDebug() << "转换失败!";
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
tempString = tempArray.at(3).toString();
|
|
|
|
|
tempString.remove("0x");
|
|
|
|
|
// 将字符串转换为整数(基数为 16)
|
|
|
|
|
// readCfgBuf[5] = tempString.toInt(&ok, 16);
|
|
|
|
|
*writeCfgPoint = tempString.toInt(&ok, 16);
|
|
|
|
|
writeCfgPoint += 1;
|
|
|
|
|
if (!ok) {
|
|
|
|
|
qDebug() << "转换失败!";
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
tempString = tempArray.at(4).toString();
|
|
|
|
|
tempString.remove("0x");
|
|
|
|
|
// 将字符串转换为整数(基数为 16)
|
|
|
|
|
// readCfgBuf[6] = tempString.toInt(&ok, 16);
|
|
|
|
|
*writeCfgPoint = tempString.toInt(&ok, 16);
|
|
|
|
|
writeCfgPoint += 1;
|
|
|
|
|
if (!ok) {
|
|
|
|
|
qDebug() << "转换失败!";
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
tempString = tempArray.at(5).toString();
|
|
|
|
|
tempString.remove("0x");
|
|
|
|
|
// 将字符串转换为整数(基数为 16)
|
|
|
|
|
// readCfgBuf[7] = tempString.toInt(&ok, 16);
|
|
|
|
|
*writeCfgPoint = tempString.toInt(&ok, 16);
|
|
|
|
|
writeCfgPoint += 1;
|
|
|
|
|
if (!ok) {
|
|
|
|
|
qDebug() << "转换失败!";
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
tempString = tempArray.at(6).toString();
|
|
|
|
|
tempString.remove("0x");
|
|
|
|
|
// 将字符串转换为整数(基数为 16)
|
|
|
|
|
// readCfgBuf[8] = tempString.toInt(&ok, 16);
|
|
|
|
|
*writeCfgPoint = tempString.toInt(&ok, 16);
|
|
|
|
|
writeCfgPoint += 1;
|
|
|
|
|
if (!ok) {
|
|
|
|
|
qDebug() << "转换失败!";
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* 功能码 */
|
|
|
|
|
*writeCfgPoint = 0xD0;
|
|
|
|
|
writeCfgPoint += 1;
|
|
|
|
|
|
|
|
|
|
/* 帧编号 */
|
|
|
|
|
*writeCfgPoint = 1;
|
|
|
|
|
writeCfgPoint += 1;
|
|
|
|
|
|
|
|
|
|
/* 总帧数 */
|
|
|
|
|
*writeCfgPoint = 1;
|
|
|
|
|
writeCfgPoint += 1;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* 数据长度 */
|
|
|
|
|
uint16_t dataLen = 0;
|
|
|
|
|
writeCfgPoint += 2;
|
|
|
|
|
|
|
|
|
|
/* 数据内容 */
|
|
|
|
|
/* 更改设备的唯一地址 */
|
|
|
|
|
tempValue = rootObj.value("更改设备的唯一地址");
|
|
|
|
|
/*
|
|
|
|
|
if (tempValue.isObject()) {
|
|
|
|
|
tempObject = tempValue.toObject();
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
qDebug() << "更改设备的唯一地址 error" << tempValue.type() ;
|
|
|
|
|
return;
|
|
|
|
|
}*/
|
|
|
|
|
tempValue = tempObject.value("类型");
|
|
|
|
|
if (tempValue.isString()) {
|
|
|
|
|
tempString = tempValue.toString();
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
qDebug() << "更改设备的唯一地址 error" << tempValue.type() ;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
tempString.remove("H");
|
|
|
|
|
// 将字符串转换为整数(基数为 16)
|
|
|
|
|
uint16_t tempU16 = tempString.toInt(&ok, 16);
|
|
|
|
|
if (!ok) {
|
|
|
|
|
qDebug() << "转换失败!";
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
*writeCfgPoint = (uint8_t)(tempU16 >> 8);
|
|
|
|
|
writeCfgPoint += 1;
|
|
|
|
|
*writeCfgPoint = (uint8_t)tempU16;
|
|
|
|
|
writeCfgPoint += 1;
|
|
|
|
|
dataLen += 2;
|
|
|
|
|
|
|
|
|
|
tempValue = rootObj.value("更改设备的唯一地址");
|
|
|
|
|
tempValue = tempObject.value("unique_Device_ID");
|
|
|
|
|
if (tempValue.isArray()) {
|
|
|
|
|
tempArray = tempValue.toArray();
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
qDebug() << "更改设备的唯一地址 error" << tempValue.type() ;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
tempString = tempArray.at(0).toString();
|
|
|
|
|
tempString.remove("0x");
|
|
|
|
|
*writeCfgPoint = tempString.toInt(&ok, 16);
|
|
|
|
|
writeCfgPoint += 1;
|
|
|
|
|
if (!ok) {
|
|
|
|
|
qDebug() << "转换失败!";
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
tempString = tempArray.at(1).toString();
|
|
|
|
|
tempString.remove("0x");
|
|
|
|
|
// 将字符串转换为整数(基数为 16)
|
|
|
|
|
// readCfgBuf[3] = tempString.toInt(&ok, 16);
|
|
|
|
|
*writeCfgPoint = tempString.toInt(&ok, 16);
|
|
|
|
|
writeCfgPoint += 1;
|
|
|
|
|
if (!ok) {
|
|
|
|
|
qDebug() << "转换失败!";
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
tempString = tempArray.at(2).toString();
|
|
|
|
|
tempString.remove("0x");
|
|
|
|
|
// 将字符串转换为整数(基数为 16)
|
|
|
|
|
// readCfgBuf[4] = tempString.toInt(&ok, 16);
|
|
|
|
|
*writeCfgPoint = tempString.toInt(&ok, 16);
|
|
|
|
|
writeCfgPoint += 1;
|
|
|
|
|
if (!ok) {
|
|
|
|
|
qDebug() << "转换失败!";
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
tempString = tempArray.at(3).toString();
|
|
|
|
|
tempString.remove("0x");
|
|
|
|
|
// 将字符串转换为整数(基数为 16)
|
|
|
|
|
// readCfgBuf[5] = tempString.toInt(&ok, 16);
|
|
|
|
|
*writeCfgPoint = tempString.toInt(&ok, 16);
|
|
|
|
|
writeCfgPoint += 1;
|
|
|
|
|
if (!ok) {
|
|
|
|
|
qDebug() << "转换失败!";
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
tempString = tempArray.at(4).toString();
|
|
|
|
|
tempString.remove("0x");
|
|
|
|
|
// 将字符串转换为整数(基数为 16)
|
|
|
|
|
// readCfgBuf[6] = tempString.toInt(&ok, 16);
|
|
|
|
|
*writeCfgPoint = tempString.toInt(&ok, 16);
|
|
|
|
|
writeCfgPoint += 1;
|
|
|
|
|
if (!ok) {
|
|
|
|
|
qDebug() << "转换失败!";
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
tempString = tempArray.at(5).toString();
|
|
|
|
|
tempString.remove("0x");
|
|
|
|
|
// 将字符串转换为整数(基数为 16)
|
|
|
|
|
// readCfgBuf[7] = tempString.toInt(&ok, 16);
|
|
|
|
|
*writeCfgPoint = tempString.toInt(&ok, 16);
|
|
|
|
|
writeCfgPoint += 1;
|
|
|
|
|
if (!ok) {
|
|
|
|
|
qDebug() << "转换失败!";
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
tempString = tempArray.at(6).toString();
|
|
|
|
|
tempString.remove("0x");
|
|
|
|
|
// 将字符串转换为整数(基数为 16)
|
|
|
|
|
// readCfgBuf[8] = tempString.toInt(&ok, 16);
|
|
|
|
|
*writeCfgPoint = tempString.toInt(&ok, 16);
|
|
|
|
|
writeCfgPoint += 1;
|
|
|
|
|
if (!ok) {
|
|
|
|
|
qDebug() << "转换失败!";
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
dataLen += 7;
|
|
|
|
|
|
|
|
|
|
/* SL协议对上通信波特率 */
|
|
|
|
|
tempValue = rootObj.value("SL协议对上通信波特率");
|
|
|
|
|
if (tempValue.isObject()) {
|
|
|
|
|
tempObject = tempValue.toObject();
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
qDebug() << "SL协议对上通信波特率 error" << tempValue.type() ;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
tempValue = tempObject.value("类型");
|
|
|
|
|
if (tempValue.isString()) {
|
|
|
|
|
tempString = tempValue.toString();
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
qDebug() << "更改设备的唯一地址 error" << tempValue.type() ;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
tempString.remove("H");
|
|
|
|
|
// 将字符串转换为整数(基数为 16)
|
|
|
|
|
tempU16 = tempString.toInt(&ok, 16);
|
|
|
|
|
if (!ok) {
|
|
|
|
|
qDebug() << "转换失败!";
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
*writeCfgPoint = (uint8_t)(tempU16 >> 8);
|
|
|
|
|
writeCfgPoint += 1;
|
|
|
|
|
*writeCfgPoint = (uint8_t)tempU16;
|
|
|
|
|
writeCfgPoint += 1;
|
|
|
|
|
dataLen += 2;
|
|
|
|
|
|
|
|
|
|
tempValue = rootObj.value("SL协议对上通信波特率");
|
|
|
|
|
tempValue = tempObject.value("SL_Protocol_Communication_Baud_Rate_Up");
|
|
|
|
|
if (tempValue.isString()) {
|
|
|
|
|
tempString = tempValue.toString();
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
qDebug() << "SL_Protocol_Communication_Baud_Rate_Up error" << tempValue.type() ;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
tempString.remove("0x");
|
|
|
|
|
*writeCfgPoint = tempString.toInt(&ok, 16);
|
|
|
|
|
writeCfgPoint += 1;
|
|
|
|
|
dataLen += 1;
|
|
|
|
|
|
|
|
|
|
/* SL协议对下通信波特率 */
|
|
|
|
|
tempValue = rootObj.value("SL协议对下通信波特率");
|
|
|
|
|
if (tempValue.isObject()) {
|
|
|
|
|
tempObject = tempValue.toObject();
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
qDebug() << "SL协议对下通信波特率 error" << tempValue.type() ;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
tempValue = tempObject.value("类型");
|
|
|
|
|
if (tempValue.isString()) {
|
|
|
|
|
tempString = tempValue.toString();
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
qDebug() << "类型 error" << tempValue.type() ;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
tempString.remove("H");
|
|
|
|
|
// 将字符串转换为整数(基数为 16)
|
|
|
|
|
tempU16 = tempString.toInt(&ok, 16);
|
|
|
|
|
if (!ok) {
|
|
|
|
|
qDebug() << "转换失败!";
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
*writeCfgPoint = (uint8_t)(tempU16 >> 8);
|
|
|
|
|
writeCfgPoint += 1;
|
|
|
|
|
*writeCfgPoint = (uint8_t)tempU16;
|
|
|
|
|
writeCfgPoint += 1;
|
|
|
|
|
dataLen += 2;
|
|
|
|
|
|
|
|
|
|
tempValue = rootObj.value("SL协议对下通信波特率");
|
|
|
|
|
tempValue = tempObject.value("SL_Protocol_Communication_Baud_Rate_Down");
|
|
|
|
|
if (tempValue.isString()) {
|
|
|
|
|
tempString = tempValue.toString();
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
qDebug() << "SL_Protocol_Communication_Baud_Rate_Down error" << tempValue.type() ;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
tempString.remove("0x");
|
|
|
|
|
*writeCfgPoint = tempString.toInt(&ok, 16);
|
|
|
|
|
writeCfgPoint += 1;
|
|
|
|
|
dataLen += 1;
|
|
|
|
|
|
|
|
|
|
/* 电源盒类型 */
|
|
|
|
|
tempValue = rootObj.value("电源盒类型");
|
|
|
|
|
if (tempValue.isObject()) {
|
|
|
|
|
tempObject = tempValue.toObject();
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
qDebug() << "电源盒类型 error" << tempValue.type() ;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
tempValue = tempObject.value("类型");
|
|
|
|
|
if (tempValue.isString()) {
|
|
|
|
|
tempString = tempValue.toString();
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
qDebug() << "类型 error" << tempValue.type() ;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
tempString.remove("H");
|
|
|
|
|
// 将字符串转换为整数(基数为 16)
|
|
|
|
|
tempU16 = tempString.toInt(&ok, 16);
|
|
|
|
|
if (!ok) {
|
|
|
|
|
qDebug() << "转换失败!";
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
*writeCfgPoint = (uint8_t)(tempU16 >> 8);
|
|
|
|
|
writeCfgPoint += 1;
|
|
|
|
|
*writeCfgPoint = (uint8_t)tempU16;
|
|
|
|
|
writeCfgPoint += 1;
|
|
|
|
|
dataLen += 2;
|
|
|
|
|
|
|
|
|
|
tempValue = rootObj.value("电源盒类型");
|
|
|
|
|
tempValue = tempObject.value("power_Box_Type");
|
|
|
|
|
if (tempValue.isString()) {
|
|
|
|
|
tempString = tempValue.toString();
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
qDebug() << "power_Box_Type error" << tempValue.type() ;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
tempString.remove("0x");
|
|
|
|
|
*writeCfgPoint = tempString.toInt(&ok, 16);
|
|
|
|
|
writeCfgPoint += 1;
|
|
|
|
|
dataLen += 1;
|
|
|
|
|
|
|
|
|
|
/* 恒压充电阈值电压 */
|
|
|
|
|
tempValue = rootObj.value("恒压充电阈值电压");
|
|
|
|
|
if (tempValue.isObject()) {
|
|
|
|
|
tempObject = tempValue.toObject();
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
qDebug() << "恒压充电阈值电压 error" << tempValue.type() ;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
tempValue = tempObject.value("类型");
|
|
|
|
|
if (tempValue.isString()) {
|
|
|
|
|
tempString = tempValue.toString();
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
qDebug() << "类型 error" << tempValue.type() ;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
tempString.remove("H");
|
|
|
|
|
// 将字符串转换为整数(基数为 16)
|
|
|
|
|
tempU16 = tempString.toInt(&ok, 16);
|
|
|
|
|
if (!ok) {
|
|
|
|
|
qDebug() << "转换失败!";
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
*writeCfgPoint = (uint8_t)(tempU16 >> 8);
|
|
|
|
|
writeCfgPoint += 1;
|
|
|
|
|
*writeCfgPoint = (uint8_t)tempU16;
|
|
|
|
|
writeCfgPoint += 1;
|
|
|
|
|
dataLen += 2;
|
|
|
|
|
|
|
|
|
|
tempValue = rootObj.value("恒压充电阈值电压");
|
|
|
|
|
tempValue = tempObject.value("constant_Voltage_V");
|
2025-01-23 10:06:11 +00:00
|
|
|
|
float tempFloat;
|
2025-01-20 09:45:00 +00:00
|
|
|
|
if (tempValue.isString()) {
|
|
|
|
|
tempString = tempValue.toString();
|
2025-01-23 10:06:11 +00:00
|
|
|
|
tempFloat = tempString.toFloat(&ok);
|
|
|
|
|
if (!ok) {
|
|
|
|
|
qDebug() << "转换失败!";
|
|
|
|
|
return;
|
|
|
|
|
}
|
2025-01-20 09:45:00 +00:00
|
|
|
|
}
|
2025-01-23 10:06:11 +00:00
|
|
|
|
else if (tempValue.isDouble()) {
|
|
|
|
|
tempFloat = tempValue.toDouble();
|
2025-01-20 09:45:00 +00:00
|
|
|
|
}
|
2025-01-23 10:06:11 +00:00
|
|
|
|
else {
|
|
|
|
|
qDebug() << "constant_Voltage_V error" << tempValue.type();
|
2025-01-20 09:45:00 +00:00
|
|
|
|
return;
|
|
|
|
|
}
|
2025-01-23 10:06:11 +00:00
|
|
|
|
|
|
|
|
|
qDebug() << "constant_Voltage_V:" << tempFloat;
|
|
|
|
|
tempU16 = (uint16_t)(tempFloat * 10 + 0.5f);
|
2025-01-20 09:45:00 +00:00
|
|
|
|
*writeCfgPoint = (uint8_t)(tempU16 >> 8);
|
|
|
|
|
writeCfgPoint += 1;
|
|
|
|
|
*writeCfgPoint = (uint8_t)tempU16;
|
|
|
|
|
writeCfgPoint += 1;
|
|
|
|
|
dataLen += 2;
|
|
|
|
|
|
|
|
|
|
/* 浮充充电阈值电流 */
|
|
|
|
|
tempValue = rootObj.value("浮充充电阈值电流");
|
|
|
|
|
if (tempValue.isObject()) {
|
|
|
|
|
tempObject = tempValue.toObject();
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
qDebug() << "浮充充电阈值电流 error" << tempValue.type() ;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
tempValue = tempObject.value("类型");
|
|
|
|
|
if (tempValue.isString()) {
|
|
|
|
|
tempString = tempValue.toString();
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
qDebug() << "类型 error" << tempValue.type() ;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
tempString.remove("H");
|
|
|
|
|
// 将字符串转换为整数(基数为 16)
|
|
|
|
|
tempU16 = tempString.toInt(&ok, 16);
|
|
|
|
|
if (!ok) {
|
|
|
|
|
qDebug() << "转换失败!";
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
*writeCfgPoint = (uint8_t)(tempU16 >> 8);
|
|
|
|
|
writeCfgPoint += 1;
|
|
|
|
|
*writeCfgPoint = (uint8_t)tempU16;
|
|
|
|
|
writeCfgPoint += 1;
|
|
|
|
|
dataLen += 2;
|
|
|
|
|
|
|
|
|
|
tempValue = rootObj.value("浮充充电阈值电流");
|
|
|
|
|
tempValue = tempObject.value("float_I");
|
|
|
|
|
if (tempValue.isString()) {
|
|
|
|
|
tempString = tempValue.toString();
|
2025-01-23 10:06:11 +00:00
|
|
|
|
tempFloat = tempString.toFloat(&ok);
|
|
|
|
|
if (!ok) {
|
|
|
|
|
qDebug() << "转换失败!";
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else if (tempValue.isDouble()) {
|
|
|
|
|
tempFloat = tempValue.toDouble();
|
2025-01-20 09:45:00 +00:00
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
qDebug() << "float_I error" << tempValue.type() ;
|
|
|
|
|
return;
|
|
|
|
|
}
|
2025-01-23 10:06:11 +00:00
|
|
|
|
// tempFloat = tempString.toFloat(&ok);
|
|
|
|
|
// if (!ok) {
|
|
|
|
|
// qDebug() << "转换失败!";
|
|
|
|
|
// return;
|
|
|
|
|
// }
|
|
|
|
|
tempU16 = (uint16_t)(tempFloat * 10 + 0.5f);
|
2025-01-20 09:45:00 +00:00
|
|
|
|
*writeCfgPoint = (uint8_t)(tempU16 >> 8);
|
|
|
|
|
writeCfgPoint += 1;
|
|
|
|
|
*writeCfgPoint = (uint8_t)tempU16;
|
|
|
|
|
writeCfgPoint += 1;
|
|
|
|
|
dataLen += 2;
|
|
|
|
|
|
|
|
|
|
/* 启动充电太阳能板开路电压 */
|
|
|
|
|
tempValue = rootObj.value("启动充电太阳能板开路电压");
|
|
|
|
|
if (tempValue.isObject()) {
|
|
|
|
|
tempObject = tempValue.toObject();
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
qDebug() << "启动充电太阳能板开路电压 error" << tempValue.type() ;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
tempValue = tempObject.value("类型");
|
|
|
|
|
if (tempValue.isString()) {
|
|
|
|
|
tempString = tempValue.toString();
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
qDebug() << "类型 error" << tempValue.type() ;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
tempString.remove("H");
|
|
|
|
|
// 将字符串转换为整数(基数为 16)
|
|
|
|
|
tempU16 = tempString.toInt(&ok, 16);
|
|
|
|
|
if (!ok) {
|
|
|
|
|
qDebug() << "转换失败!";
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
*writeCfgPoint = (uint8_t)(tempU16 >> 8);
|
|
|
|
|
writeCfgPoint += 1;
|
|
|
|
|
*writeCfgPoint = (uint8_t)tempU16;
|
|
|
|
|
writeCfgPoint += 1;
|
|
|
|
|
dataLen += 2;
|
|
|
|
|
|
|
|
|
|
tempValue = rootObj.value("启动充电太阳能板开路电压");
|
|
|
|
|
tempValue = tempObject.value("start_Solar_Open_Circuit_V");
|
2025-01-23 10:06:11 +00:00
|
|
|
|
|
2025-01-20 09:45:00 +00:00
|
|
|
|
if (tempValue.isString()) {
|
|
|
|
|
tempString = tempValue.toString();
|
2025-01-23 10:06:11 +00:00
|
|
|
|
tempFloat = tempString.toFloat(&ok);
|
|
|
|
|
if (!ok) {
|
|
|
|
|
qDebug() << "转换失败!";
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else if (tempValue.isDouble()) {
|
|
|
|
|
tempFloat = tempValue.toDouble();
|
2025-01-20 09:45:00 +00:00
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
qDebug() << "start_Solar_Open_Circuit_V error" << tempValue.type() ;
|
|
|
|
|
return;
|
|
|
|
|
}
|
2025-01-23 10:06:11 +00:00
|
|
|
|
// tempFloat = tempString.toFloat(&ok);
|
|
|
|
|
// if (!ok) {
|
|
|
|
|
// qDebug() << "转换失败!";
|
|
|
|
|
// return;
|
|
|
|
|
// }
|
|
|
|
|
tempU16 = (uint16_t)(tempFloat * 10 + 0.5f);
|
2025-01-20 09:45:00 +00:00
|
|
|
|
*writeCfgPoint = (uint8_t)(tempU16 >> 8);
|
|
|
|
|
writeCfgPoint += 1;
|
|
|
|
|
*writeCfgPoint = (uint8_t)tempU16;
|
|
|
|
|
writeCfgPoint += 1;
|
|
|
|
|
dataLen += 2;
|
|
|
|
|
|
|
|
|
|
/* 停止充电太阳能板输出电压 */
|
|
|
|
|
tempValue = rootObj.value("停止充电太阳能板输出电压");
|
|
|
|
|
if (tempValue.isObject()) {
|
|
|
|
|
tempObject = tempValue.toObject();
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
qDebug() << "停止充电太阳能板输出电压 error" << tempValue.type() ;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
tempValue = tempObject.value("类型");
|
|
|
|
|
if (tempValue.isString()) {
|
|
|
|
|
tempString = tempValue.toString();
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
qDebug() << "类型 error" << tempValue.type() ;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
tempString.remove("H");
|
|
|
|
|
// 将字符串转换为整数(基数为 16)
|
|
|
|
|
tempU16 = tempString.toInt(&ok, 16);
|
|
|
|
|
if (!ok) {
|
|
|
|
|
qDebug() << "转换失败!";
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
*writeCfgPoint = (uint8_t)(tempU16 >> 8);
|
|
|
|
|
writeCfgPoint += 1;
|
|
|
|
|
*writeCfgPoint = (uint8_t)tempU16;
|
|
|
|
|
writeCfgPoint += 1;
|
|
|
|
|
dataLen += 2;
|
|
|
|
|
|
|
|
|
|
tempValue = rootObj.value("停止充电太阳能板输出电压");
|
2025-01-23 10:06:11 +00:00
|
|
|
|
tempValue = tempObject.value("stop_Solar_Output_Circuit_V");
|
2025-01-20 09:45:00 +00:00
|
|
|
|
if (tempValue.isString()) {
|
|
|
|
|
tempString = tempValue.toString();
|
2025-01-23 10:06:11 +00:00
|
|
|
|
tempFloat = tempString.toFloat(&ok);
|
|
|
|
|
if (!ok) {
|
|
|
|
|
qDebug() << "转换失败!";
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else if (tempValue.isDouble()) {
|
|
|
|
|
tempFloat = tempValue.toDouble();
|
2025-01-20 09:45:00 +00:00
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
qDebug() << "stop_Solar_Output_Circuit_V error" << tempValue.type() ;
|
|
|
|
|
return;
|
|
|
|
|
}
|
2025-01-23 10:06:11 +00:00
|
|
|
|
// tempFloat = tempString.toFloat(&ok);
|
|
|
|
|
// if (!ok) {
|
|
|
|
|
// qDebug() << "转换失败!";
|
|
|
|
|
// return;
|
|
|
|
|
// }
|
|
|
|
|
tempU16 = (uint16_t)(tempFloat * 10 + 0.5f);
|
2025-01-20 09:45:00 +00:00
|
|
|
|
*writeCfgPoint = (uint8_t)(tempU16 >> 8);
|
|
|
|
|
writeCfgPoint += 1;
|
|
|
|
|
*writeCfgPoint = (uint8_t)tempU16;
|
|
|
|
|
writeCfgPoint += 1;
|
|
|
|
|
dataLen += 2;
|
|
|
|
|
|
|
|
|
|
/* 启动时开路电压检测间隔 */
|
|
|
|
|
tempValue = rootObj.value("启动时开路电压检测间隔");
|
|
|
|
|
if (tempValue.isObject()) {
|
|
|
|
|
tempObject = tempValue.toObject();
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
qDebug() << "启动时开路电压检测间隔 error" << tempValue.type() ;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
tempValue = tempObject.value("类型");
|
|
|
|
|
if (tempValue.isString()) {
|
|
|
|
|
tempString = tempValue.toString();
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
qDebug() << "类型 error" << tempValue.type() ;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
tempString.remove("H");
|
|
|
|
|
// 将字符串转换为整数(基数为 16)
|
|
|
|
|
tempU16 = tempString.toInt(&ok, 16);
|
|
|
|
|
if (!ok) {
|
|
|
|
|
qDebug() << "转换失败!";
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
*writeCfgPoint = (uint8_t)(tempU16 >> 8);
|
|
|
|
|
writeCfgPoint += 1;
|
|
|
|
|
*writeCfgPoint = (uint8_t)tempU16;
|
|
|
|
|
writeCfgPoint += 1;
|
|
|
|
|
dataLen += 2;
|
|
|
|
|
|
|
|
|
|
tempValue = rootObj.value("启动时开路电压检测间隔");
|
|
|
|
|
tempValue = tempObject.value("check_Can_Start_Time");
|
|
|
|
|
if (tempValue.isString()) {
|
|
|
|
|
tempString = tempValue.toString();
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
qDebug() << "check_Can_Start_Time error" << tempValue.type() ;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
tempU16 = tempString.toInt(&ok);
|
|
|
|
|
if (!ok) {
|
|
|
|
|
qDebug() << "转换失败!";
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
*writeCfgPoint = (uint8_t)(tempU16 >> 8);
|
|
|
|
|
writeCfgPoint += 1;
|
|
|
|
|
*writeCfgPoint = (uint8_t)tempU16;
|
|
|
|
|
writeCfgPoint += 1;
|
|
|
|
|
dataLen += 2;
|
|
|
|
|
|
|
|
|
|
/* 短路判断延时 */
|
|
|
|
|
tempValue = rootObj.value("短路判断延时");
|
|
|
|
|
if (tempValue.isObject()) {
|
|
|
|
|
tempObject = tempValue.toObject();
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
qDebug() << "短路判断延时 error" << tempValue.type() ;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
tempValue = tempObject.value("类型");
|
|
|
|
|
if (tempValue.isString()) {
|
|
|
|
|
tempString = tempValue.toString();
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
qDebug() << "类型 error" << tempValue.type() ;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
tempString.remove("H");
|
|
|
|
|
// 将字符串转换为整数(基数为 16)
|
|
|
|
|
tempU16 = tempString.toInt(&ok, 16);
|
|
|
|
|
if (!ok) {
|
|
|
|
|
qDebug() << "转换失败!";
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
*writeCfgPoint = (uint8_t)(tempU16 >> 8);
|
|
|
|
|
writeCfgPoint += 1;
|
|
|
|
|
*writeCfgPoint = (uint8_t)tempU16;
|
|
|
|
|
writeCfgPoint += 1;
|
|
|
|
|
dataLen += 2;
|
|
|
|
|
|
|
|
|
|
tempValue = rootObj.value("短路判断延时");
|
|
|
|
|
tempValue = tempObject.value("short_Circuit_Judgment_Delay");
|
|
|
|
|
if (tempValue.isString()) {
|
|
|
|
|
tempString = tempValue.toString();
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
qDebug() << "short_Circuit_Judgment_Delay error" << tempValue.type() ;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
tempU16 = tempString.toInt(&ok);
|
|
|
|
|
if (!ok) {
|
|
|
|
|
qDebug() << "转换失败!";
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
*writeCfgPoint = (uint8_t)(tempU16 >> 8);
|
|
|
|
|
writeCfgPoint += 1;
|
|
|
|
|
*writeCfgPoint = (uint8_t)tempU16;
|
|
|
|
|
writeCfgPoint += 1;
|
|
|
|
|
dataLen += 2;
|
|
|
|
|
|
|
|
|
|
/* 前端输入功率不足判断延时 */
|
|
|
|
|
tempValue = rootObj.value("前端输入功率不足判断延时");
|
|
|
|
|
if (tempValue.isObject()) {
|
|
|
|
|
tempObject = tempValue.toObject();
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
qDebug() << "前端输入功率不足判断延时 error" << tempValue.type() ;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
tempValue = tempObject.value("类型");
|
|
|
|
|
if (tempValue.isString()) {
|
|
|
|
|
tempString = tempValue.toString();
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
qDebug() << "类型 error" << tempValue.type() ;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
tempString.remove("H");
|
|
|
|
|
// 将字符串转换为整数(基数为 16)
|
|
|
|
|
tempU16 = tempString.toInt(&ok, 16);
|
|
|
|
|
if (!ok) {
|
|
|
|
|
qDebug() << "转换失败!";
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
*writeCfgPoint = (uint8_t)(tempU16 >> 8);
|
|
|
|
|
writeCfgPoint += 1;
|
|
|
|
|
*writeCfgPoint = (uint8_t)tempU16;
|
|
|
|
|
writeCfgPoint += 1;
|
|
|
|
|
dataLen += 2;
|
|
|
|
|
|
|
|
|
|
tempValue = rootObj.value("前端输入功率不足判断延时");
|
|
|
|
|
tempValue = tempObject.value("input_Power_Low_Judgment_Delay");
|
|
|
|
|
if (tempValue.isString()) {
|
|
|
|
|
tempString = tempValue.toString();
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
qDebug() << "input_Power_Low_Judgment_Delay error" << tempValue.type() ;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
tempU16 = tempString.toInt(&ok);
|
|
|
|
|
if (!ok) {
|
|
|
|
|
qDebug() << "转换失败!";
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
*writeCfgPoint = (uint8_t)(tempU16 >> 8);
|
|
|
|
|
writeCfgPoint += 1;
|
|
|
|
|
*writeCfgPoint = (uint8_t)tempU16;
|
|
|
|
|
writeCfgPoint += 1;
|
|
|
|
|
dataLen += 2;
|
|
|
|
|
|
|
|
|
|
/* 前端输入功率不足后再次输出延时 */
|
|
|
|
|
tempValue = rootObj.value("前端输入功率不足后再次输出延时");
|
|
|
|
|
if (tempValue.isObject()) {
|
|
|
|
|
tempObject = tempValue.toObject();
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
qDebug() << "前端输入功率不足后再次输出延时 error" << tempValue.type() ;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
tempValue = tempObject.value("类型");
|
|
|
|
|
if (tempValue.isString()) {
|
|
|
|
|
tempString = tempValue.toString();
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
qDebug() << "类型 error" << tempValue.type() ;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
tempString.remove("H");
|
|
|
|
|
// 将字符串转换为整数(基数为 16)
|
|
|
|
|
tempU16 = tempString.toInt(&ok, 16);
|
|
|
|
|
if (!ok) {
|
|
|
|
|
qDebug() << "转换失败!";
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
*writeCfgPoint = (uint8_t)(tempU16 >> 8);
|
|
|
|
|
writeCfgPoint += 1;
|
|
|
|
|
*writeCfgPoint = (uint8_t)tempU16;
|
|
|
|
|
writeCfgPoint += 1;
|
|
|
|
|
dataLen += 2;
|
|
|
|
|
|
|
|
|
|
tempValue = rootObj.value("前端输入功率不足后再次输出延时");
|
|
|
|
|
tempValue = tempObject.value("input_Power_Low_Again_Output_Delay");
|
|
|
|
|
if (tempValue.isString()) {
|
|
|
|
|
tempString = tempValue.toString();
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
qDebug() << "input_Power_Low_Again_Output_Delay error" << tempValue.type() ;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
tempU16 = tempString.toInt(&ok);
|
|
|
|
|
if (!ok) {
|
|
|
|
|
qDebug() << "转换失败!";
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
*writeCfgPoint = (uint8_t)(tempU16 >> 8);
|
|
|
|
|
writeCfgPoint += 1;
|
|
|
|
|
*writeCfgPoint = (uint8_t)tempU16;
|
|
|
|
|
writeCfgPoint += 1;
|
|
|
|
|
dataLen += 2;
|
|
|
|
|
|
|
|
|
|
/* 第一段保护延时 */
|
|
|
|
|
tempValue = rootObj.value("第一段保护延时");
|
|
|
|
|
if (tempValue.isObject()) {
|
|
|
|
|
tempObject = tempValue.toObject();
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
qDebug() << "第一段保护延时 error" << tempValue.type() ;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
tempValue = tempObject.value("类型");
|
|
|
|
|
if (tempValue.isString()) {
|
|
|
|
|
tempString = tempValue.toString();
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
qDebug() << "类型 error" << tempValue.type() ;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
tempString.remove("H");
|
|
|
|
|
// 将字符串转换为整数(基数为 16)
|
|
|
|
|
tempU16 = tempString.toInt(&ok, 16);
|
|
|
|
|
if (!ok) {
|
|
|
|
|
qDebug() << "转换失败!";
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
*writeCfgPoint = (uint8_t)(tempU16 >> 8);
|
|
|
|
|
writeCfgPoint += 1;
|
|
|
|
|
*writeCfgPoint = (uint8_t)tempU16;
|
|
|
|
|
writeCfgPoint += 1;
|
|
|
|
|
dataLen += 2;
|
|
|
|
|
|
|
|
|
|
tempValue = rootObj.value("第一段保护延时");
|
|
|
|
|
tempValue = tempObject.value("first_Stage_Protection_Delay");
|
|
|
|
|
if (tempValue.isString()) {
|
|
|
|
|
tempString = tempValue.toString();
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
qDebug() << "first_Stage_Protection_Delay error" << tempValue.type() ;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
tempU16 = tempString.toInt(&ok);
|
|
|
|
|
if (!ok) {
|
|
|
|
|
qDebug() << "转换失败!";
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
*writeCfgPoint = (uint8_t)(tempU16 >> 8);
|
|
|
|
|
writeCfgPoint += 1;
|
|
|
|
|
*writeCfgPoint = (uint8_t)tempU16;
|
|
|
|
|
writeCfgPoint += 1;
|
|
|
|
|
dataLen += 2;
|
|
|
|
|
|
|
|
|
|
/* 第一段保护的电流 */
|
|
|
|
|
tempValue = rootObj.value("第一段保护的电流");
|
|
|
|
|
if (tempValue.isObject()) {
|
|
|
|
|
tempObject = tempValue.toObject();
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
qDebug() << "第一段保护的电流 error" << tempValue.type() ;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
tempValue = tempObject.value("类型");
|
|
|
|
|
if (tempValue.isString()) {
|
|
|
|
|
tempString = tempValue.toString();
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
qDebug() << "类型 error" << tempValue.type() ;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
tempString.remove("H");
|
|
|
|
|
// 将字符串转换为整数(基数为 16)
|
|
|
|
|
tempU16 = tempString.toInt(&ok, 16);
|
|
|
|
|
if (!ok) {
|
|
|
|
|
qDebug() << "转换失败!";
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
*writeCfgPoint = (uint8_t)(tempU16 >> 8);
|
|
|
|
|
writeCfgPoint += 1;
|
|
|
|
|
*writeCfgPoint = (uint8_t)tempU16;
|
|
|
|
|
writeCfgPoint += 1;
|
|
|
|
|
dataLen += 2;
|
|
|
|
|
|
|
|
|
|
tempValue = rootObj.value("第一段保护的电流");
|
|
|
|
|
tempValue = tempObject.value("first_Stage_Protection_Curr");
|
|
|
|
|
if (tempValue.isString()) {
|
|
|
|
|
tempString = tempValue.toString();
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
qDebug() << "first_Stage_Protection_Curr error" << tempValue.type() ;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
tempFloat = tempString.toFloat(&ok);
|
|
|
|
|
if (!ok) {
|
|
|
|
|
qDebug() << "转换失败!";
|
|
|
|
|
return;
|
|
|
|
|
}
|
2025-01-23 10:06:11 +00:00
|
|
|
|
tempU16 = (uint16_t)(tempFloat * 10 + 0.5f);
|
2025-01-20 09:45:00 +00:00
|
|
|
|
*writeCfgPoint = (uint8_t)(tempU16 >> 8);
|
|
|
|
|
writeCfgPoint += 1;
|
|
|
|
|
*writeCfgPoint = (uint8_t)tempU16;
|
|
|
|
|
writeCfgPoint += 1;
|
|
|
|
|
dataLen += 2;
|
|
|
|
|
|
|
|
|
|
/* 第二段保护延时 */
|
|
|
|
|
tempValue = rootObj.value("第二段保护延时");
|
|
|
|
|
if (tempValue.isObject()) {
|
|
|
|
|
tempObject = tempValue.toObject();
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
qDebug() << "第二段保护延时 error" << tempValue.type() ;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
tempValue = tempObject.value("类型");
|
|
|
|
|
if (tempValue.isString()) {
|
|
|
|
|
tempString = tempValue.toString();
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
qDebug() << "类型 error" << tempValue.type() ;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
tempString.remove("H");
|
|
|
|
|
// 将字符串转换为整数(基数为 16)
|
|
|
|
|
tempU16 = tempString.toInt(&ok, 16);
|
|
|
|
|
if (!ok) {
|
|
|
|
|
qDebug() << "转换失败!";
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
*writeCfgPoint = (uint8_t)(tempU16 >> 8);
|
|
|
|
|
writeCfgPoint += 1;
|
|
|
|
|
*writeCfgPoint = (uint8_t)tempU16;
|
|
|
|
|
writeCfgPoint += 1;
|
|
|
|
|
dataLen += 2;
|
|
|
|
|
|
|
|
|
|
tempValue = rootObj.value("第二段保护延时");
|
|
|
|
|
tempValue = tempObject.value("second_Stage_Protection_Delay");
|
|
|
|
|
if (tempValue.isString()) {
|
|
|
|
|
tempString = tempValue.toString();
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
qDebug() << "second_Stage_Protection_Delay error" << tempValue.type() ;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
tempU16 = tempString.toInt(&ok);
|
|
|
|
|
if (!ok) {
|
|
|
|
|
qDebug() << "转换失败!";
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
*writeCfgPoint = (uint8_t)(tempU16 >> 8);
|
|
|
|
|
writeCfgPoint += 1;
|
|
|
|
|
*writeCfgPoint = (uint8_t)tempU16;
|
|
|
|
|
writeCfgPoint += 1;
|
|
|
|
|
dataLen += 2;
|
|
|
|
|
|
|
|
|
|
/* 第二段保护的电流 */
|
|
|
|
|
tempValue = rootObj.value("第二段保护的电流");
|
|
|
|
|
if (tempValue.isObject()) {
|
|
|
|
|
tempObject = tempValue.toObject();
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
qDebug() << "第二段保护的电流 error" << tempValue.type() ;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
tempValue = tempObject.value("类型");
|
|
|
|
|
if (tempValue.isString()) {
|
|
|
|
|
tempString = tempValue.toString();
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
qDebug() << "类型 error" << tempValue.type() ;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
tempString.remove("H");
|
|
|
|
|
// 将字符串转换为整数(基数为 16)
|
|
|
|
|
tempU16 = tempString.toInt(&ok, 16);
|
|
|
|
|
if (!ok) {
|
|
|
|
|
qDebug() << "转换失败!";
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
*writeCfgPoint = (uint8_t)(tempU16 >> 8);
|
|
|
|
|
writeCfgPoint += 1;
|
|
|
|
|
*writeCfgPoint = (uint8_t)tempU16;
|
|
|
|
|
writeCfgPoint += 1;
|
|
|
|
|
dataLen += 2;
|
|
|
|
|
|
|
|
|
|
tempValue = rootObj.value("第二段保护的电流");
|
|
|
|
|
tempValue = tempObject.value("second_Stage_Protection_Curr");
|
|
|
|
|
if (tempValue.isString()) {
|
|
|
|
|
tempString = tempValue.toString();
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
qDebug() << "second_Stage_Protection_Curr error" << tempValue.type() ;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
tempFloat = tempString.toFloat(&ok);
|
|
|
|
|
if (!ok) {
|
|
|
|
|
qDebug() << "转换失败!";
|
|
|
|
|
return;
|
|
|
|
|
}
|
2025-01-23 10:06:11 +00:00
|
|
|
|
tempU16 = (uint16_t)(tempFloat * 10 + 0.5f);
|
2025-01-20 09:45:00 +00:00
|
|
|
|
*writeCfgPoint = (uint8_t)(tempU16 >> 8);
|
|
|
|
|
writeCfgPoint += 1;
|
|
|
|
|
*writeCfgPoint = (uint8_t)tempU16;
|
|
|
|
|
writeCfgPoint += 1;
|
|
|
|
|
dataLen += 2;
|
|
|
|
|
|
|
|
|
|
/* 第三段保护延时 */
|
|
|
|
|
tempValue = rootObj.value("第三段保护延时");
|
|
|
|
|
if (tempValue.isObject()) {
|
|
|
|
|
tempObject = tempValue.toObject();
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
qDebug() << "第三段保护延时 error" << tempValue.type() ;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
tempValue = tempObject.value("类型");
|
|
|
|
|
if (tempValue.isString()) {
|
|
|
|
|
tempString = tempValue.toString();
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
qDebug() << "类型 error" << tempValue.type() ;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
tempString.remove("H");
|
|
|
|
|
// 将字符串转换为整数(基数为 16)
|
|
|
|
|
tempU16 = tempString.toInt(&ok, 16);
|
|
|
|
|
if (!ok) {
|
|
|
|
|
qDebug() << "转换失败!";
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
*writeCfgPoint = (uint8_t)(tempU16 >> 8);
|
|
|
|
|
writeCfgPoint += 1;
|
|
|
|
|
*writeCfgPoint = (uint8_t)tempU16;
|
|
|
|
|
writeCfgPoint += 1;
|
|
|
|
|
dataLen += 2;
|
|
|
|
|
|
|
|
|
|
tempValue = rootObj.value("第三段保护延时");
|
|
|
|
|
tempValue = tempObject.value("third_Stage_Protection_Delay");
|
|
|
|
|
if (tempValue.isString()) {
|
|
|
|
|
tempString = tempValue.toString();
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
qDebug() << "third_Stage_Protection_Delay error" << tempValue.type() ;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
uint32_t tempU32 = tempString.toInt(&ok);
|
|
|
|
|
if (!ok) {
|
|
|
|
|
qDebug() << "转换失败!";
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
*writeCfgPoint = (uint8_t)(tempU32 >> 24);
|
|
|
|
|
writeCfgPoint += 1;
|
|
|
|
|
*writeCfgPoint = (uint8_t)(tempU32 >> 16);
|
|
|
|
|
writeCfgPoint += 1;
|
|
|
|
|
*writeCfgPoint = (uint8_t)(tempU32 >> 8);
|
|
|
|
|
writeCfgPoint += 1;
|
|
|
|
|
*writeCfgPoint = (uint8_t)tempU32;
|
|
|
|
|
writeCfgPoint += 1;
|
|
|
|
|
dataLen += 4;
|
|
|
|
|
|
|
|
|
|
/* 第三段保护的电流 */
|
|
|
|
|
tempValue = rootObj.value("第三段保护的电流");
|
|
|
|
|
if (tempValue.isObject()) {
|
|
|
|
|
tempObject = tempValue.toObject();
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
qDebug() << "第三段保护的电流 error" << tempValue.type() ;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
tempValue = tempObject.value("类型");
|
|
|
|
|
if (tempValue.isString()) {
|
|
|
|
|
tempString = tempValue.toString();
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
qDebug() << "类型 error" << tempValue.type() ;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
tempString.remove("H");
|
|
|
|
|
// 将字符串转换为整数(基数为 16)
|
|
|
|
|
tempU16 = tempString.toInt(&ok, 16);
|
|
|
|
|
if (!ok) {
|
|
|
|
|
qDebug() << "转换失败!";
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
*writeCfgPoint = (uint8_t)(tempU16 >> 8);
|
|
|
|
|
writeCfgPoint += 1;
|
|
|
|
|
*writeCfgPoint = (uint8_t)tempU16;
|
|
|
|
|
writeCfgPoint += 1;
|
|
|
|
|
dataLen += 2;
|
|
|
|
|
|
|
|
|
|
tempValue = rootObj.value("第三段保护的电流");
|
|
|
|
|
tempValue = tempObject.value("third_Stage_Protection_Curr");
|
|
|
|
|
if (tempValue.isString()) {
|
|
|
|
|
tempString = tempValue.toString();
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
qDebug() << "third_Stage_Protection_Curr error" << tempValue.type() ;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
tempFloat = tempString.toFloat(&ok);
|
|
|
|
|
if (!ok) {
|
|
|
|
|
qDebug() << "转换失败!";
|
|
|
|
|
return;
|
|
|
|
|
}
|
2025-01-23 10:06:11 +00:00
|
|
|
|
tempU16 = (uint16_t)(tempFloat * 10 + 0.5f);
|
2025-01-20 09:45:00 +00:00
|
|
|
|
*writeCfgPoint = (uint8_t)(tempU16 >> 8);
|
|
|
|
|
writeCfgPoint += 1;
|
|
|
|
|
*writeCfgPoint = (uint8_t)tempU16;
|
|
|
|
|
writeCfgPoint += 1;
|
|
|
|
|
dataLen += 2;
|
|
|
|
|
|
|
|
|
|
/* 前端输入功率不足检测延时 */
|
|
|
|
|
tempValue = rootObj.value("前端输入功率不足检测延时");
|
|
|
|
|
if (tempValue.isObject()) {
|
|
|
|
|
tempObject = tempValue.toObject();
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
qDebug() << "前端输入功率不足检测延时 error" << tempValue.type() ;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
tempValue = tempObject.value("类型");
|
|
|
|
|
if (tempValue.isString()) {
|
|
|
|
|
tempString = tempValue.toString();
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
qDebug() << "类型 error" << tempValue.type() ;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
tempString.remove("H");
|
|
|
|
|
// 将字符串转换为整数(基数为 16)
|
|
|
|
|
tempU16 = tempString.toInt(&ok, 16);
|
|
|
|
|
if (!ok) {
|
|
|
|
|
qDebug() << "转换失败!";
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
*writeCfgPoint = (uint8_t)(tempU16 >> 8);
|
|
|
|
|
writeCfgPoint += 1;
|
|
|
|
|
*writeCfgPoint = (uint8_t)tempU16;
|
|
|
|
|
writeCfgPoint += 1;
|
|
|
|
|
dataLen += 2;
|
|
|
|
|
|
|
|
|
|
tempValue = rootObj.value("前端输入功率不足检测延时");
|
|
|
|
|
tempValue = tempObject.value("input_Power_Low_Detection_Delay");
|
|
|
|
|
if (tempValue.isString()) {
|
|
|
|
|
tempString = tempValue.toString();
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
qDebug() << "input_Power_Low_Detection_Delay error" << tempValue.type() ;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
tempU16 = tempString.toInt(&ok);
|
|
|
|
|
if (!ok) {
|
|
|
|
|
qDebug() << "转换失败!";
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
*writeCfgPoint = (uint8_t)(tempU16 >> 8);
|
|
|
|
|
writeCfgPoint += 1;
|
|
|
|
|
*writeCfgPoint = (uint8_t)tempU16;
|
|
|
|
|
writeCfgPoint += 1;
|
|
|
|
|
dataLen += 2;
|
|
|
|
|
|
|
|
|
|
/* 前端输入功率不足检测电压 */
|
|
|
|
|
tempValue = rootObj.value("前端输入功率不足检测电压");
|
|
|
|
|
if (tempValue.isObject()) {
|
|
|
|
|
tempObject = tempValue.toObject();
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
qDebug() << "前端输入功率不足检测电压 error" << tempValue.type() ;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
tempValue = tempObject.value("类型");
|
|
|
|
|
if (tempValue.isString()) {
|
|
|
|
|
tempString = tempValue.toString();
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
qDebug() << "类型 error" << tempValue.type() ;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
tempString.remove("H");
|
|
|
|
|
// 将字符串转换为整数(基数为 16)
|
|
|
|
|
tempU16 = tempString.toInt(&ok, 16);
|
|
|
|
|
if (!ok) {
|
|
|
|
|
qDebug() << "转换失败!";
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
*writeCfgPoint = (uint8_t)(tempU16 >> 8);
|
|
|
|
|
writeCfgPoint += 1;
|
|
|
|
|
*writeCfgPoint = (uint8_t)tempU16;
|
|
|
|
|
writeCfgPoint += 1;
|
|
|
|
|
dataLen += 2;
|
|
|
|
|
|
|
|
|
|
tempValue = rootObj.value("前端输入功率不足检测电压");
|
|
|
|
|
tempValue = tempObject.value("input_Power_Low_Detection_Volt");
|
|
|
|
|
if (tempValue.isString()) {
|
|
|
|
|
tempString = tempValue.toString();
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
qDebug() << "input_Power_Low_Detection_Volt error" << tempValue.type() ;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
tempFloat = tempString.toFloat(&ok);
|
|
|
|
|
if (!ok) {
|
|
|
|
|
qDebug() << "转换失败!";
|
|
|
|
|
return;
|
|
|
|
|
}
|
2025-01-23 10:06:11 +00:00
|
|
|
|
tempU16 = (uint16_t)(tempFloat * 10 + 0.5f);
|
2025-01-20 09:45:00 +00:00
|
|
|
|
*writeCfgPoint = (uint8_t)(tempU16 >> 8);
|
|
|
|
|
writeCfgPoint += 1;
|
|
|
|
|
*writeCfgPoint = (uint8_t)tempU16;
|
|
|
|
|
writeCfgPoint += 1;
|
|
|
|
|
dataLen += 2;
|
|
|
|
|
|
|
|
|
|
/* 最大太阳能板输出电压 */
|
|
|
|
|
tempValue = rootObj.value("最大太阳能板输出电压");
|
|
|
|
|
if (tempValue.isObject()) {
|
|
|
|
|
tempObject = tempValue.toObject();
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
qDebug() << "最大太阳能板输出电压 error" << tempValue.type() ;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
tempValue = tempObject.value("类型");
|
|
|
|
|
if (tempValue.isString()) {
|
|
|
|
|
tempString = tempValue.toString();
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
qDebug() << "类型 error" << tempValue.type() ;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
tempString.remove("H");
|
|
|
|
|
// 将字符串转换为整数(基数为 16)
|
|
|
|
|
tempU16 = tempString.toInt(&ok, 16);
|
|
|
|
|
if (!ok) {
|
|
|
|
|
qDebug() << "转换失败!";
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
*writeCfgPoint = (uint8_t)(tempU16 >> 8);
|
|
|
|
|
writeCfgPoint += 1;
|
|
|
|
|
*writeCfgPoint = (uint8_t)tempU16;
|
|
|
|
|
writeCfgPoint += 1;
|
|
|
|
|
dataLen += 2;
|
|
|
|
|
|
|
|
|
|
tempValue = rootObj.value("最大太阳能板输出电压");
|
|
|
|
|
tempValue = tempObject.value("max_Open_Solar_Output_Circuit_V");
|
|
|
|
|
if (tempValue.isString()) {
|
|
|
|
|
tempString = tempValue.toString();
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
qDebug() << "max_Open_Solar_Output_Circuit_V error" << tempValue.type() ;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
tempFloat = tempString.toFloat(&ok);
|
|
|
|
|
if (!ok) {
|
|
|
|
|
qDebug() << "转换失败!";
|
|
|
|
|
return;
|
|
|
|
|
}
|
2025-01-23 10:06:11 +00:00
|
|
|
|
tempU16 = (uint16_t)(tempFloat * 10 + 0.5f);
|
2025-01-20 09:45:00 +00:00
|
|
|
|
*writeCfgPoint = (uint8_t)(tempU16 >> 8);
|
|
|
|
|
writeCfgPoint += 1;
|
|
|
|
|
*writeCfgPoint = (uint8_t)tempU16;
|
|
|
|
|
writeCfgPoint += 1;
|
|
|
|
|
dataLen += 2;
|
|
|
|
|
|
|
|
|
|
/* 最大充电电流 */
|
|
|
|
|
tempValue = rootObj.value("最大充电电流");
|
|
|
|
|
if (tempValue.isObject()) {
|
|
|
|
|
tempObject = tempValue.toObject();
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
qDebug() << "最大充电电流 error" << tempValue.type() ;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
tempValue = tempObject.value("类型");
|
|
|
|
|
if (tempValue.isString()) {
|
|
|
|
|
tempString = tempValue.toString();
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
qDebug() << "类型 error" << tempValue.type() ;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
tempString.remove("H");
|
|
|
|
|
// 将字符串转换为整数(基数为 16)
|
|
|
|
|
tempU16 = tempString.toInt(&ok, 16);
|
|
|
|
|
if (!ok) {
|
|
|
|
|
qDebug() << "转换失败!";
|
|
|
|
|
return;
|
|
|
|
|
}
|
2025-01-23 10:06:11 +00:00
|
|
|
|
qDebug() << "最大充电电流 类型" << tempU16;
|
2025-01-20 09:45:00 +00:00
|
|
|
|
*writeCfgPoint = (uint8_t)(tempU16 >> 8);
|
|
|
|
|
writeCfgPoint += 1;
|
|
|
|
|
*writeCfgPoint = (uint8_t)tempU16;
|
|
|
|
|
writeCfgPoint += 1;
|
|
|
|
|
dataLen += 2;
|
|
|
|
|
|
|
|
|
|
tempValue = rootObj.value("最大充电电流");
|
|
|
|
|
tempValue = tempObject.value("max_Charg_Curr");
|
|
|
|
|
if (tempValue.isString()) {
|
|
|
|
|
tempString = tempValue.toString();
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
qDebug() << "max_Charg_Curr error" << tempValue.type() ;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
tempFloat = tempString.toFloat(&ok);
|
|
|
|
|
if (!ok) {
|
|
|
|
|
qDebug() << "转换失败!";
|
|
|
|
|
return;
|
|
|
|
|
}
|
2025-01-23 10:06:11 +00:00
|
|
|
|
qDebug() << "最大充电电流" << tempFloat;
|
|
|
|
|
qDebug() << "最大充电电流" << tempU16;
|
|
|
|
|
tempU16 = (uint16_t)(tempFloat * 10 + 0.5f);
|
2025-01-20 09:45:00 +00:00
|
|
|
|
*writeCfgPoint = (uint8_t)(tempU16 >> 8);
|
|
|
|
|
writeCfgPoint += 1;
|
|
|
|
|
*writeCfgPoint = (uint8_t)tempU16;
|
|
|
|
|
writeCfgPoint += 1;
|
|
|
|
|
dataLen += 2;
|
|
|
|
|
|
|
|
|
|
/* 检测回路阻抗时的最小充电电流 */
|
|
|
|
|
tempValue = rootObj.value("检测回路阻抗时的最小充电电流");
|
|
|
|
|
if (tempValue.isObject()) {
|
|
|
|
|
tempObject = tempValue.toObject();
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
qDebug() << "检测回路阻抗时的最小充电电流 error" << tempValue.type() ;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
tempValue = tempObject.value("类型");
|
|
|
|
|
if (tempValue.isString()) {
|
|
|
|
|
tempString = tempValue.toString();
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
qDebug() << "类型 error" << tempValue.type() ;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
tempString.remove("H");
|
|
|
|
|
// 将字符串转换为整数(基数为 16)
|
|
|
|
|
tempU16 = tempString.toInt(&ok, 16);
|
|
|
|
|
if (!ok) {
|
|
|
|
|
qDebug() << "转换失败!";
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
*writeCfgPoint = (uint8_t)(tempU16 >> 8);
|
|
|
|
|
writeCfgPoint += 1;
|
|
|
|
|
*writeCfgPoint = (uint8_t)tempU16;
|
|
|
|
|
writeCfgPoint += 1;
|
|
|
|
|
dataLen += 2;
|
|
|
|
|
|
|
|
|
|
tempValue = rootObj.value("检测回路阻抗时的最小充电电流");
|
|
|
|
|
tempValue = tempObject.value("min_Check_Loop_Impedance_Charg_Curr");
|
|
|
|
|
if (tempValue.isString()) {
|
|
|
|
|
tempString = tempValue.toString();
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
qDebug() << "min_Check_Loop_Impedance_Charg_Curr error" << tempValue.type() ;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
tempFloat = tempString.toFloat(&ok);
|
|
|
|
|
if (!ok) {
|
|
|
|
|
qDebug() << "转换失败!";
|
|
|
|
|
return;
|
|
|
|
|
}
|
2025-01-23 10:06:11 +00:00
|
|
|
|
tempU16 = (uint16_t)(tempFloat * 10 + 0.5f);
|
2025-01-20 09:45:00 +00:00
|
|
|
|
*writeCfgPoint = (uint8_t)(tempU16 >> 8);
|
|
|
|
|
writeCfgPoint += 1;
|
|
|
|
|
*writeCfgPoint = (uint8_t)tempU16;
|
|
|
|
|
writeCfgPoint += 1;
|
|
|
|
|
dataLen += 2;
|
|
|
|
|
|
|
|
|
|
/* 全功率输出温度 */
|
|
|
|
|
tempValue = rootObj.value("全功率输出温度");
|
|
|
|
|
if (tempValue.isObject()) {
|
|
|
|
|
tempObject = tempValue.toObject();
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
qDebug() << "全功率输出温度 error" << tempValue.type() ;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
tempValue = tempObject.value("类型");
|
|
|
|
|
if (tempValue.isString()) {
|
|
|
|
|
tempString = tempValue.toString();
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
qDebug() << "类型 error" << tempValue.type() ;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
tempString.remove("H");
|
|
|
|
|
// 将字符串转换为整数(基数为 16)
|
|
|
|
|
tempU16 = tempString.toInt(&ok, 16);
|
|
|
|
|
if (!ok) {
|
|
|
|
|
qDebug() << "转换失败!";
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
*writeCfgPoint = (uint8_t)(tempU16 >> 8);
|
|
|
|
|
writeCfgPoint += 1;
|
|
|
|
|
*writeCfgPoint = (uint8_t)tempU16;
|
|
|
|
|
writeCfgPoint += 1;
|
|
|
|
|
dataLen += 2;
|
|
|
|
|
|
|
|
|
|
tempValue = rootObj.value("全功率输出温度");
|
|
|
|
|
tempValue = tempObject.value("full_Power_Output_Temperature");
|
|
|
|
|
if (tempValue.isString()) {
|
|
|
|
|
tempString = tempValue.toString();
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
qDebug() << "full_Power_Output_Temperature error" << tempValue.type() ;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
tempFloat = tempString.toFloat(&ok);
|
|
|
|
|
if (!ok) {
|
|
|
|
|
qDebug() << "转换失败!";
|
|
|
|
|
return;
|
|
|
|
|
}
|
2025-01-23 10:06:11 +00:00
|
|
|
|
tempU16 = (uint16_t)(tempFloat * 10 + 0.5f);
|
2025-01-20 09:45:00 +00:00
|
|
|
|
*writeCfgPoint = (uint8_t)(tempU16 >> 8);
|
|
|
|
|
writeCfgPoint += 1;
|
|
|
|
|
*writeCfgPoint = (uint8_t)tempU16;
|
|
|
|
|
writeCfgPoint += 1;
|
|
|
|
|
dataLen += 2;
|
|
|
|
|
|
|
|
|
|
/* 降功率输出温度 */
|
|
|
|
|
tempValue = rootObj.value("降功率输出温度");
|
|
|
|
|
if (tempValue.isObject()) {
|
|
|
|
|
tempObject = tempValue.toObject();
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
qDebug() << "降功率输出温度 error" << tempValue.type() ;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
tempValue = tempObject.value("类型");
|
|
|
|
|
if (tempValue.isString()) {
|
|
|
|
|
tempString = tempValue.toString();
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
qDebug() << "类型 error" << tempValue.type() ;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
tempString.remove("H");
|
|
|
|
|
// 将字符串转换为整数(基数为 16)
|
|
|
|
|
tempU16 = tempString.toInt(&ok, 16);
|
|
|
|
|
if (!ok) {
|
|
|
|
|
qDebug() << "转换失败!";
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
*writeCfgPoint = (uint8_t)(tempU16 >> 8);
|
|
|
|
|
writeCfgPoint += 1;
|
|
|
|
|
*writeCfgPoint = (uint8_t)tempU16;
|
|
|
|
|
writeCfgPoint += 1;
|
|
|
|
|
dataLen += 2;
|
|
|
|
|
|
|
|
|
|
tempValue = rootObj.value("降功率输出温度");
|
|
|
|
|
tempValue = tempObject.value("reduce_Power_Output_Temperature");
|
|
|
|
|
if (tempValue.isString()) {
|
|
|
|
|
tempString = tempValue.toString();
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
qDebug() << "reduce_Power_Output_Temperature error" << tempValue.type() ;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
tempFloat = tempString.toFloat(&ok);
|
|
|
|
|
if (!ok) {
|
|
|
|
|
qDebug() << "转换失败!";
|
|
|
|
|
return;
|
|
|
|
|
}
|
2025-01-23 10:06:11 +00:00
|
|
|
|
tempU16 = (uint16_t)(tempFloat * 10 + 0.5f);
|
2025-01-20 09:45:00 +00:00
|
|
|
|
*writeCfgPoint = (uint8_t)(tempU16 >> 8);
|
|
|
|
|
writeCfgPoint += 1;
|
|
|
|
|
*writeCfgPoint = (uint8_t)tempU16;
|
|
|
|
|
writeCfgPoint += 1;
|
|
|
|
|
dataLen += 2;
|
|
|
|
|
|
|
|
|
|
/* 停止输出温度 */
|
|
|
|
|
tempValue = rootObj.value("停止输出温度");
|
|
|
|
|
if (tempValue.isObject()) {
|
|
|
|
|
tempObject = tempValue.toObject();
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
qDebug() << "停止输出温度 error" << tempValue.type() ;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
tempValue = tempObject.value("类型");
|
|
|
|
|
if (tempValue.isString()) {
|
|
|
|
|
tempString = tempValue.toString();
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
qDebug() << "类型 error" << tempValue.type() ;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
tempString.remove("H");
|
|
|
|
|
// 将字符串转换为整数(基数为 16)
|
|
|
|
|
tempU16 = tempString.toInt(&ok, 16);
|
|
|
|
|
if (!ok) {
|
|
|
|
|
qDebug() << "转换失败!";
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
*writeCfgPoint = (uint8_t)(tempU16 >> 8);
|
|
|
|
|
writeCfgPoint += 1;
|
|
|
|
|
*writeCfgPoint = (uint8_t)tempU16;
|
|
|
|
|
writeCfgPoint += 1;
|
|
|
|
|
dataLen += 2;
|
|
|
|
|
|
|
|
|
|
tempValue = rootObj.value("停止输出温度");
|
|
|
|
|
tempValue = tempObject.value("stop_PowerOutput_Temperature");
|
|
|
|
|
if (tempValue.isString()) {
|
|
|
|
|
tempString = tempValue.toString();
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
qDebug() << "stop_PowerOutput_Temperature error" << tempValue.type() ;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
tempFloat = tempString.toFloat(&ok);
|
|
|
|
|
if (!ok) {
|
|
|
|
|
qDebug() << "转换失败!";
|
|
|
|
|
return;
|
|
|
|
|
}
|
2025-01-23 10:06:11 +00:00
|
|
|
|
tempU16 = (uint16_t)(tempFloat * 10 + 0.5f);
|
2025-01-20 09:45:00 +00:00
|
|
|
|
*writeCfgPoint = (uint8_t)(tempU16 >> 8);
|
|
|
|
|
writeCfgPoint += 1;
|
|
|
|
|
*writeCfgPoint = (uint8_t)tempU16;
|
|
|
|
|
writeCfgPoint += 1;
|
|
|
|
|
dataLen += 2;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* 恒压充电时的输出电压 */
|
|
|
|
|
tempValue = rootObj.value("恒压充电时的输出电压");
|
|
|
|
|
if (tempValue.isObject()) {
|
|
|
|
|
tempObject = tempValue.toObject();
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
qDebug() << "恒压充电时的输出电压 error" << tempValue.type() ;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
tempValue = tempObject.value("类型");
|
|
|
|
|
if (tempValue.isString()) {
|
|
|
|
|
tempString = tempValue.toString();
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
qDebug() << "类型 error" << tempValue.type() ;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
tempString.remove("H");
|
|
|
|
|
// 将字符串转换为整数(基数为 16)
|
|
|
|
|
tempU16 = tempString.toInt(&ok, 16);
|
|
|
|
|
if (!ok) {
|
|
|
|
|
qDebug() << "转换失败!";
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
*writeCfgPoint = (uint8_t)(tempU16 >> 8);
|
|
|
|
|
writeCfgPoint += 1;
|
|
|
|
|
*writeCfgPoint = (uint8_t)tempU16;
|
|
|
|
|
writeCfgPoint += 1;
|
|
|
|
|
dataLen += 2;
|
|
|
|
|
|
|
|
|
|
tempValue = rootObj.value("恒压充电时的输出电压");
|
|
|
|
|
tempValue = tempObject.value("constant_Voltage_Charge_V");
|
|
|
|
|
if (tempValue.isString()) {
|
|
|
|
|
tempString = tempValue.toString();
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
qDebug() << "constant_Voltage_Charge_V error" << tempValue.type() ;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
tempFloat = tempString.toFloat(&ok);
|
2025-01-23 10:06:11 +00:00
|
|
|
|
qDebug() << "constant_Voltage_Charge_V" << tempFloat;
|
2025-01-20 09:45:00 +00:00
|
|
|
|
if (!ok) {
|
|
|
|
|
qDebug() << "转换失败!";
|
|
|
|
|
return;
|
|
|
|
|
}
|
2025-01-23 10:06:11 +00:00
|
|
|
|
tempU16 = (uint16_t)(tempFloat * 10 + 0.5f);
|
|
|
|
|
// qDebug() << "constant_Voltage_Charge_V * 10" << tempU16;
|
2025-01-20 09:45:00 +00:00
|
|
|
|
*writeCfgPoint = (uint8_t)(tempU16 >> 8);
|
|
|
|
|
writeCfgPoint += 1;
|
|
|
|
|
*writeCfgPoint = (uint8_t)tempU16;
|
|
|
|
|
writeCfgPoint += 1;
|
|
|
|
|
dataLen += 2;
|
|
|
|
|
|
|
|
|
|
/* 浮充充电时的输出电压 */
|
|
|
|
|
tempValue = rootObj.value("浮充充电时的输出电压");
|
|
|
|
|
if (tempValue.isObject()) {
|
|
|
|
|
tempObject = tempValue.toObject();
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
qDebug() << "浮充充电时的输出电压 error" << tempValue.type() ;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
tempValue = tempObject.value("类型");
|
|
|
|
|
if (tempValue.isString()) {
|
|
|
|
|
tempString = tempValue.toString();
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
qDebug() << "类型 error" << tempValue.type() ;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
tempString.remove("H");
|
|
|
|
|
// 将字符串转换为整数(基数为 16)
|
|
|
|
|
tempU16 = tempString.toInt(&ok, 16);
|
|
|
|
|
if (!ok) {
|
|
|
|
|
qDebug() << "转换失败!";
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
*writeCfgPoint = (uint8_t)(tempU16 >> 8);
|
|
|
|
|
writeCfgPoint += 1;
|
|
|
|
|
*writeCfgPoint = (uint8_t)tempU16;
|
|
|
|
|
writeCfgPoint += 1;
|
|
|
|
|
dataLen += 2;
|
|
|
|
|
|
|
|
|
|
tempValue = rootObj.value("浮充充电时的输出电压");
|
|
|
|
|
tempValue = tempObject.value("float_ChargeV");
|
|
|
|
|
if (tempValue.isString()) {
|
|
|
|
|
tempString = tempValue.toString();
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
qDebug() << "float_ChargeV error" << tempValue.type() ;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
tempFloat = tempString.toFloat(&ok);
|
|
|
|
|
if (!ok) {
|
|
|
|
|
qDebug() << "转换失败!";
|
|
|
|
|
return;
|
|
|
|
|
}
|
2025-01-23 10:06:11 +00:00
|
|
|
|
tempU16 = (uint16_t)(tempFloat * 10 + 0.5f);
|
2025-01-20 09:45:00 +00:00
|
|
|
|
*writeCfgPoint = (uint8_t)(tempU16 >> 8);
|
|
|
|
|
writeCfgPoint += 1;
|
|
|
|
|
*writeCfgPoint = (uint8_t)tempU16;
|
|
|
|
|
writeCfgPoint += 1;
|
|
|
|
|
dataLen += 2;
|
|
|
|
|
|
|
|
|
|
/* 充电时开路电压采集间隔 */
|
|
|
|
|
tempValue = rootObj.value("充电时开路电压采集间隔");
|
|
|
|
|
if (tempValue.isObject()) {
|
|
|
|
|
tempObject = tempValue.toObject();
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
qDebug() << "充电时开路电压采集间隔 error" << tempValue.type() ;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
tempValue = tempObject.value("类型");
|
|
|
|
|
if (tempValue.isString()) {
|
|
|
|
|
tempString = tempValue.toString();
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
qDebug() << "类型 error" << tempValue.type() ;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
tempString.remove("H");
|
|
|
|
|
// 将字符串转换为整数(基数为 16)
|
|
|
|
|
tempU16 = tempString.toInt(&ok, 16);
|
|
|
|
|
if (!ok) {
|
|
|
|
|
qDebug() << "转换失败!";
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
*writeCfgPoint = (uint8_t)(tempU16 >> 8);
|
|
|
|
|
writeCfgPoint += 1;
|
|
|
|
|
*writeCfgPoint = (uint8_t)tempU16;
|
|
|
|
|
writeCfgPoint += 1;
|
|
|
|
|
dataLen += 2;
|
|
|
|
|
|
|
|
|
|
tempValue = rootObj.value("充电时开路电压采集间隔");
|
|
|
|
|
tempValue = tempObject.value("collect_OpenCircuit_Voltage_Time");
|
|
|
|
|
if (tempValue.isString()) {
|
|
|
|
|
tempString = tempValue.toString();
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
qDebug() << "collect_OpenCircuit_Voltage_Time error" << tempValue.type() ;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
tempU16 = tempString.toInt(&ok);
|
|
|
|
|
if (!ok) {
|
|
|
|
|
qDebug() << "转换失败!";
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
*writeCfgPoint = (uint8_t)(tempU16 >> 8);
|
|
|
|
|
writeCfgPoint += 1;
|
|
|
|
|
*writeCfgPoint = (uint8_t)tempU16;
|
|
|
|
|
writeCfgPoint += 1;
|
|
|
|
|
dataLen += 2;
|
|
|
|
|
|
|
|
|
|
/* 数据长度 */
|
|
|
|
|
writeCfgBuf[12] = (uint8_t)(dataLen >> 8);
|
|
|
|
|
writeCfgBuf[13] = (uint8_t)dataLen;
|
|
|
|
|
|
|
|
|
|
/* modbusCrc校验 */
|
|
|
|
|
tempU16 = modbusCrc(writeCfgBuf, dataLen + 14);
|
|
|
|
|
*writeCfgPoint = (uint8_t)(tempU16 >> 8);
|
|
|
|
|
writeCfgPoint += 1;
|
|
|
|
|
*writeCfgPoint = (uint8_t)tempU16;
|
|
|
|
|
writeCfgPoint += 1;
|
|
|
|
|
|
|
|
|
|
*writeCfgPoint = 0x16;
|
|
|
|
|
|
|
|
|
|
// for (int i = 0; i < dataLen + 17; i++) {
|
|
|
|
|
// qDebug(" 0x%x ", writeCfgBuf[i]);
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
serialPort->write(reinterpret_cast<const char*>(writeCfgBuf), (dataLen + 17));
|
2025-01-22 10:09:41 +00:00
|
|
|
|
|
|
|
|
|
QTimer::singleShot(1500, [this]() {
|
|
|
|
|
QByteArray data = serialPort->readAll();
|
|
|
|
|
// serialPort->write("hello world");
|
|
|
|
|
for (int i = 0; i < data.length(); i++) {
|
|
|
|
|
qDebug() << QString::asprintf("0x%x", static_cast<unsigned char>(data.at(i)));
|
|
|
|
|
}
|
|
|
|
|
uint16_t crc16;
|
|
|
|
|
uint8_t *repData = (uint8_t *)data.data();
|
|
|
|
|
// QMessageBox::standardButton reply;
|
|
|
|
|
|
|
|
|
|
if (data.length() < 16) {
|
|
|
|
|
qDebug() << "len is error";
|
|
|
|
|
goto error;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* 起始标志 */
|
|
|
|
|
if (*repData != 'S' || *(repData + 1) != 'L') {
|
|
|
|
|
qDebug() << "start flag error";
|
|
|
|
|
goto error;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// /* 地址 */
|
|
|
|
|
// if (data.at(0) != 'S' || data.at(1) != 'L') {
|
|
|
|
|
// goto error;
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
if (*(repData + 9) != 0xD0) {
|
|
|
|
|
qDebug() << "function code error";
|
|
|
|
|
goto error;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
crc16 = (*(repData + 13) << 8) | *(repData + 14);
|
|
|
|
|
if (crc16 != modbusCrc(repData, 13)) {
|
|
|
|
|
qDebug() << "crc error";
|
|
|
|
|
goto error;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (*(repData + 12) != 0xAA) {
|
|
|
|
|
qDebug() << "data error";
|
|
|
|
|
goto error;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
QMessageBox::information(this,
|
|
|
|
|
tr("配置文件"),
|
|
|
|
|
tr("写入配置文件成功"),
|
|
|
|
|
QMessageBox::Ok,
|
|
|
|
|
QMessageBox::Ok);
|
|
|
|
|
// reply = QMessageBox::information(this, "写入成功",
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
error:
|
|
|
|
|
QMessageBox::information(this,
|
|
|
|
|
tr("配置文件"),
|
|
|
|
|
tr("写入配置文件失败"),
|
|
|
|
|
QMessageBox::Ok,
|
|
|
|
|
QMessageBox::Ok);
|
|
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// /* 延时1.5S */
|
|
|
|
|
// QThread::msleep(1500);
|
|
|
|
|
// QByteArray data = serialPort->readAll();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// serialPort->write("hello world");
|
|
|
|
|
|
|
|
|
|
//// ui->SerialPortPushButton->setEnabled(true);
|
|
|
|
|
//// ui->readConfigFile->setEnabled(true);
|
|
|
|
|
//// ui->writeConfigFile->setEnabled(true);
|
|
|
|
|
// for (int i = 0; i < data.length(); i++) {
|
|
|
|
|
// qDebug() << QString::asprintf("0x%x", data.at(i));
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// uint16_t crc16;
|
|
|
|
|
// uint8_t *repData = (uint8_t *)data.data();
|
|
|
|
|
//// QMessageBox::standardButton reply;
|
|
|
|
|
|
|
|
|
|
// if (data.length() < 17) {
|
|
|
|
|
// goto error;
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
// /* 起始标志 */
|
|
|
|
|
// if (*repData != 'S' || *(repData + 1) != 'L') {
|
|
|
|
|
// goto error;
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
//// /* 地址 */
|
|
|
|
|
//// if (data.at(0) != 'S' || data.at(1) != 'L') {
|
|
|
|
|
//// goto error;
|
|
|
|
|
//// }
|
|
|
|
|
|
|
|
|
|
// if (*(repData + 9) != 0xD0) {
|
|
|
|
|
// goto error;
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
// crc16 = (*(repData + 14) << 8) | *(repData + 15);
|
|
|
|
|
// if (crc16 != modbusCrc(repData, 14)) {
|
|
|
|
|
// goto error;
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
// if (*(repData + 12) != 0xAA) {
|
|
|
|
|
// goto error;
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
// QMessageBox::information(this,
|
|
|
|
|
// tr("配置文件"),
|
|
|
|
|
// tr("写入配置文件成功"),
|
|
|
|
|
// QMessageBox::Ok,
|
|
|
|
|
// QMessageBox::Ok);
|
|
|
|
|
//// reply = QMessageBox::information(this, "写入成功",
|
|
|
|
|
// return;
|
|
|
|
|
|
|
|
|
|
//error:
|
|
|
|
|
// QMessageBox::information(this,
|
|
|
|
|
// tr("配置文件"),
|
|
|
|
|
// tr("写入配置文件失败"),
|
|
|
|
|
// QMessageBox::Ok,
|
|
|
|
|
// QMessageBox::Ok);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
uint8_t *MainWindow::analysisReadCfgData(uint8_t **cfgData)
|
|
|
|
|
{
|
|
|
|
|
QJsonValue tempValue = jsonModel->json_doc.object().value("充电控制盒配置文件");
|
|
|
|
|
QJsonObject rootObj;
|
|
|
|
|
QJsonObject tempObject;
|
|
|
|
|
rootObj = tempValue.toObject();
|
|
|
|
|
|
|
|
|
|
uint16_t dataType;
|
|
|
|
|
dataType = (**cfgData << 8) | *(*cfgData + 1);
|
|
|
|
|
|
|
|
|
|
/* 唯一ID */
|
|
|
|
|
if (dataType == 0x0000) {
|
|
|
|
|
tempValue = rootObj.value("更改设备的唯一地址");
|
|
|
|
|
tempObject = tempValue.toObject();
|
|
|
|
|
tempValue = tempObject.value("unique_Device_ID");
|
|
|
|
|
|
|
|
|
|
QJsonArray tempArray = tempValue.toArray();
|
|
|
|
|
|
|
|
|
|
// tempArray.replace(0, QString::asprintf("0x%x", (*(*cfgData + 2))));
|
|
|
|
|
// tempArray.replace(1, QString::asprintf("0x%x", (*(*cfgData + 3))));
|
|
|
|
|
// tempArray.replace(2, QString::asprintf("0x%x", (*(*cfgData + 4))));
|
|
|
|
|
// tempArray.replace(3, QString::asprintf("0x%x", (*(*cfgData + 5))));
|
|
|
|
|
// tempArray.replace(4, QString::asprintf("0x%x", (*(*cfgData + 6))));
|
|
|
|
|
// tempArray.replace(5, QString::asprintf("0x%x", (*(*cfgData + 7))));
|
|
|
|
|
// tempArray.replace(6, QString::asprintf("0x%x", (*(*cfgData + 8))));
|
|
|
|
|
|
|
|
|
|
// tempObject["unique_Device_ID"] = tempArray;
|
|
|
|
|
|
|
|
|
|
return (*cfgData + 9);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* 对上通信波特率 */
|
|
|
|
|
if (dataType == 0x0001) {
|
|
|
|
|
tempValue = rootObj.value("SL协议对上通信波特率");
|
|
|
|
|
tempObject = tempValue.toObject();
|
|
|
|
|
|
|
|
|
|
tempObject["SL_Protocol_Communication_Baud_Rate_Up"] = QString::asprintf("0x%x", (*(*cfgData + 2)));
|
|
|
|
|
// tempObject["SL_Protocol_Communication_Baud_Rate_Up"] = "0x03";
|
|
|
|
|
|
|
|
|
|
rootObj["SL协议对上通信波特率"] = tempObject;
|
|
|
|
|
QJsonObject jsonDocObj = jsonModel->json_doc.object();
|
|
|
|
|
jsonDocObj["充电控制盒配置文件"] = rootObj;
|
|
|
|
|
jsonModel->json_doc.setObject(jsonDocObj);
|
|
|
|
|
|
|
|
|
|
return (*cfgData + 3);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* 对下通信波特率 */
|
|
|
|
|
if (dataType == 0x0002) {
|
|
|
|
|
tempValue = rootObj.value("SL协议对下通信波特率");
|
|
|
|
|
tempObject = tempValue.toObject();
|
|
|
|
|
|
|
|
|
|
tempObject["SL_Protocol_Communication_Baud_Rate_Down"] = QString::asprintf("0x%x", (*(*cfgData + 2)));
|
|
|
|
|
|
|
|
|
|
rootObj["SL协议对下通信波特率"] = tempObject;
|
|
|
|
|
QJsonObject jsonDocObj = jsonModel->json_doc.object();
|
|
|
|
|
jsonDocObj["充电控制盒配置文件"] = rootObj;
|
|
|
|
|
jsonModel->json_doc.setObject(jsonDocObj);
|
|
|
|
|
|
|
|
|
|
return (*cfgData + 3);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* 电源盒类型 */
|
|
|
|
|
if (dataType == 0x0100) {
|
|
|
|
|
tempValue = rootObj.value("电源盒类型");
|
|
|
|
|
tempObject = tempValue.toObject();
|
|
|
|
|
tempObject["power_Box_Type"] = QString::asprintf("0x%x", (*(*cfgData + 2)));
|
|
|
|
|
|
|
|
|
|
rootObj["电源盒类型"] = tempObject;
|
|
|
|
|
QJsonObject jsonDocObj = jsonModel->json_doc.object();
|
|
|
|
|
jsonDocObj["充电控制盒配置文件"] = rootObj;
|
|
|
|
|
jsonModel->json_doc.setObject(jsonDocObj);
|
|
|
|
|
|
|
|
|
|
return (*cfgData + 3);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* 恒压充电阈值电压 */
|
|
|
|
|
if (dataType == 0x0101) {
|
|
|
|
|
tempValue = rootObj.value("恒压充电阈值电压");
|
|
|
|
|
tempObject = tempValue.toObject();
|
|
|
|
|
float tempF = (float)((*(*cfgData + 2)) | (*(*cfgData + 3))) / 10.0f;
|
|
|
|
|
tempObject["constant_Voltage_V"] = tempF;
|
|
|
|
|
|
|
|
|
|
rootObj["恒压充电阈值电压"] = tempObject;
|
|
|
|
|
QJsonObject jsonDocObj = jsonModel->json_doc.object();
|
|
|
|
|
jsonDocObj["充电控制盒配置文件"] = rootObj;
|
|
|
|
|
jsonModel->json_doc.setObject(jsonDocObj);
|
|
|
|
|
|
|
|
|
|
return (*cfgData + 4);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* 浮充充电阈值电流 */
|
|
|
|
|
if (dataType == 0x0102) {
|
|
|
|
|
tempValue = rootObj.value("浮充充电阈值电流");
|
|
|
|
|
tempObject = tempValue.toObject();
|
|
|
|
|
float tempF = (float)((*(*cfgData + 2) << 8) | (*(*cfgData + 3))) / 10.0f;
|
|
|
|
|
tempObject["float_I"] = tempF;
|
|
|
|
|
|
|
|
|
|
rootObj["浮充充电阈值电流"] = tempObject;
|
|
|
|
|
QJsonObject jsonDocObj = jsonModel->json_doc.object();
|
|
|
|
|
jsonDocObj["充电控制盒配置文件"] = rootObj;
|
|
|
|
|
jsonModel->json_doc.setObject(jsonDocObj);
|
|
|
|
|
|
|
|
|
|
return (*cfgData + 4);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* 启动充电太阳能板开路电压 */
|
|
|
|
|
if (dataType == 0x0103) {
|
|
|
|
|
tempValue = rootObj.value("启动充电太阳能板开路电压");
|
|
|
|
|
tempObject = tempValue.toObject();
|
|
|
|
|
float tempF = (float)((*(*cfgData + 2) << 8) | (*(*cfgData + 3))) / 10.0f;
|
|
|
|
|
tempObject["start_Solar_Open_Circuit_V"] = tempF;
|
|
|
|
|
|
|
|
|
|
rootObj["启动充电太阳能板开路电压"] = tempObject;
|
|
|
|
|
QJsonObject jsonDocObj = jsonModel->json_doc.object();
|
|
|
|
|
jsonDocObj["充电控制盒配置文件"] = rootObj;
|
|
|
|
|
jsonModel->json_doc.setObject(jsonDocObj);
|
|
|
|
|
|
|
|
|
|
return (*cfgData + 4);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* 停止充电太阳能板输出电压 */
|
|
|
|
|
if (dataType == 0x0104) {
|
|
|
|
|
tempValue = rootObj.value("停止充电太阳能板输出电压");
|
|
|
|
|
tempObject = tempValue.toObject();
|
|
|
|
|
float tempF = (float)((*(*cfgData + 2) << 8) | (*(*cfgData + 3))) / 10.0f;
|
|
|
|
|
tempObject["stop_Solar_Output_Circuit_V"] = tempF;
|
|
|
|
|
|
|
|
|
|
rootObj["停止充电太阳能板输出电压"] = tempObject;
|
|
|
|
|
QJsonObject jsonDocObj = jsonModel->json_doc.object();
|
|
|
|
|
jsonDocObj["充电控制盒配置文件"] = rootObj;
|
|
|
|
|
jsonModel->json_doc.setObject(jsonDocObj);
|
|
|
|
|
|
|
|
|
|
return (*cfgData + 4);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* 启动时开路电压检测间隔 */
|
|
|
|
|
if (dataType == 0x0105) {
|
|
|
|
|
tempValue = rootObj.value("启动时开路电压检测间隔");
|
|
|
|
|
tempObject = tempValue.toObject();
|
|
|
|
|
uint16_t tempU16 = (*(*cfgData + 2) << 8) | (*(*cfgData + 3));
|
|
|
|
|
tempObject["check_Can_Start_Time"] = tempU16;
|
|
|
|
|
|
|
|
|
|
rootObj["启动时开路电压检测间隔"] = tempObject;
|
|
|
|
|
QJsonObject jsonDocObj = jsonModel->json_doc.object();
|
|
|
|
|
jsonDocObj["充电控制盒配置文件"] = rootObj;
|
|
|
|
|
jsonModel->json_doc.setObject(jsonDocObj);
|
|
|
|
|
|
|
|
|
|
return (*cfgData + 4);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* 短路判断延时 */
|
|
|
|
|
if (dataType == 0x0106) {
|
|
|
|
|
tempValue = rootObj.value("短路判断延时");
|
|
|
|
|
tempObject = tempValue.toObject();
|
|
|
|
|
uint16_t tempU16 = (*(*cfgData + 2) << 8) | (*(*cfgData + 3));
|
|
|
|
|
tempObject["short_Circuit_Judgment_Delay"] = tempU16;
|
|
|
|
|
|
|
|
|
|
rootObj["短路判断延时"] = tempObject;
|
|
|
|
|
QJsonObject jsonDocObj = jsonModel->json_doc.object();
|
|
|
|
|
jsonDocObj["充电控制盒配置文件"] = rootObj;
|
|
|
|
|
jsonModel->json_doc.setObject(jsonDocObj);
|
|
|
|
|
|
|
|
|
|
return (*cfgData + 4);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* 前端输入功率不足判断延时 */
|
|
|
|
|
if (dataType == 0x0107) {
|
|
|
|
|
tempValue = rootObj.value("前端输入功率不足判断延时");
|
|
|
|
|
tempObject = tempValue.toObject();
|
|
|
|
|
uint16_t tempU16 = (*(*cfgData + 2) << 8) | (*(*cfgData + 3));
|
|
|
|
|
tempObject["input_Power_Low_Judgment_Delay"] = tempU16;
|
|
|
|
|
|
|
|
|
|
rootObj["前端输入功率不足判断延时"] = tempObject;
|
|
|
|
|
QJsonObject jsonDocObj = jsonModel->json_doc.object();
|
|
|
|
|
jsonDocObj["充电控制盒配置文件"] = rootObj;
|
|
|
|
|
jsonModel->json_doc.setObject(jsonDocObj);
|
|
|
|
|
|
|
|
|
|
return (*cfgData + 4);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* 前端输入功率不足后再次输出延时 */
|
|
|
|
|
if (dataType == 0x0108) {
|
|
|
|
|
tempValue = rootObj.value("前端输入功率不足后再次输出延时");
|
|
|
|
|
tempObject = tempValue.toObject();
|
|
|
|
|
uint16_t tempU16 = (*(*cfgData + 2) << 8) | (*(*cfgData + 3));
|
|
|
|
|
tempObject["input_Power_Low_Again_Output_Delay"] = tempU16;
|
|
|
|
|
|
|
|
|
|
rootObj["前端输入功率不足后再次输出延时"] = tempObject;
|
|
|
|
|
QJsonObject jsonDocObj = jsonModel->json_doc.object();
|
|
|
|
|
jsonDocObj["充电控制盒配置文件"] = rootObj;
|
|
|
|
|
jsonModel->json_doc.setObject(jsonDocObj);
|
|
|
|
|
|
|
|
|
|
return (*cfgData + 4);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* 第一段保护延时 */
|
|
|
|
|
if (dataType == 0x0109) {
|
|
|
|
|
tempValue = rootObj.value("第一段保护延时");
|
|
|
|
|
tempObject = tempValue.toObject();
|
|
|
|
|
uint16_t tempU16 = (*(*cfgData + 2) << 8) | (*(*cfgData + 3));
|
|
|
|
|
tempObject["first_Stage_Protection_Delay"] = tempU16;
|
|
|
|
|
|
|
|
|
|
rootObj["第一段保护延时"] = tempObject;
|
|
|
|
|
QJsonObject jsonDocObj = jsonModel->json_doc.object();
|
|
|
|
|
jsonDocObj["充电控制盒配置文件"] = rootObj;
|
|
|
|
|
jsonModel->json_doc.setObject(jsonDocObj);
|
|
|
|
|
|
|
|
|
|
return (*cfgData + 4);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* 第一段保护的电流 */
|
|
|
|
|
if (dataType == 0x010A) {
|
|
|
|
|
tempValue = rootObj.value("第一段保护的电流");
|
|
|
|
|
tempObject = tempValue.toObject();
|
|
|
|
|
float tempF = (float)((*(*cfgData + 2) << 8) | (*(*cfgData + 3))) / 10.0f;
|
|
|
|
|
tempObject["first_Stage_Protection_Curr"] = tempF;
|
|
|
|
|
|
|
|
|
|
rootObj["第一段保护的电流"] = tempObject;
|
|
|
|
|
QJsonObject jsonDocObj = jsonModel->json_doc.object();
|
|
|
|
|
jsonDocObj["充电控制盒配置文件"] = rootObj;
|
|
|
|
|
jsonModel->json_doc.setObject(jsonDocObj);
|
|
|
|
|
|
|
|
|
|
return (*cfgData + 4);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* 第二段保护延时 */
|
|
|
|
|
if (dataType == 0x010B) {
|
|
|
|
|
tempValue = rootObj.value("第二段保护延时");
|
|
|
|
|
tempObject = tempValue.toObject();
|
|
|
|
|
uint16_t tempU16 = (*(*cfgData + 2) << 8) | (*(*cfgData + 3));
|
|
|
|
|
tempObject["second_Stage_Protection_Delay"] = tempU16;
|
|
|
|
|
|
|
|
|
|
rootObj["第二段保护延时"] = tempObject;
|
|
|
|
|
QJsonObject jsonDocObj = jsonModel->json_doc.object();
|
|
|
|
|
jsonDocObj["充电控制盒配置文件"] = rootObj;
|
|
|
|
|
jsonModel->json_doc.setObject(jsonDocObj);
|
|
|
|
|
|
|
|
|
|
return (*cfgData + 4);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* 第二段保护的电流 */
|
|
|
|
|
if (dataType == 0x010C) {
|
|
|
|
|
tempValue = rootObj.value("第二段保护的电流");
|
|
|
|
|
tempObject = tempValue.toObject();
|
|
|
|
|
float tempF = (float)((*(*cfgData + 2) << 8) | (*(*cfgData + 3))) / 10.0f;
|
|
|
|
|
tempObject["second_Stage_Protection_Curr"] = tempF;
|
|
|
|
|
|
|
|
|
|
rootObj["第二段保护的电流"] = tempObject;
|
|
|
|
|
QJsonObject jsonDocObj = jsonModel->json_doc.object();
|
|
|
|
|
jsonDocObj["充电控制盒配置文件"] = rootObj;
|
|
|
|
|
jsonModel->json_doc.setObject(jsonDocObj);
|
|
|
|
|
|
|
|
|
|
return (*cfgData + 4);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* 第三段保护延时 */
|
|
|
|
|
if (dataType == 0x010D) {
|
|
|
|
|
tempValue = rootObj.value("第三段保护延时");
|
|
|
|
|
tempObject = tempValue.toObject();
|
|
|
|
|
int tempU32 = (*(*cfgData + 2) << 24) | (*(*cfgData + 3) << 16) | (*(*cfgData + 4) << 8) | (*(*cfgData + 5));
|
|
|
|
|
tempObject["third_Stage_Protection_Delay"] = tempU32;
|
|
|
|
|
|
|
|
|
|
rootObj["第三段保护延时"] = tempObject;
|
|
|
|
|
QJsonObject jsonDocObj = jsonModel->json_doc.object();
|
|
|
|
|
jsonDocObj["充电控制盒配置文件"] = rootObj;
|
|
|
|
|
jsonModel->json_doc.setObject(jsonDocObj);
|
|
|
|
|
|
|
|
|
|
return (*cfgData + 6);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* 第三段保护的电流 */
|
|
|
|
|
if (dataType == 0x010E) {
|
|
|
|
|
tempValue = rootObj.value("第三段保护的电流");
|
|
|
|
|
tempObject = tempValue.toObject();
|
|
|
|
|
float tempF = (float)((*(*cfgData + 2) << 8) | (*(*cfgData + 3))) / 10.0f;
|
|
|
|
|
tempObject["third_Stage_Protection_Curr"] = tempF;
|
|
|
|
|
|
|
|
|
|
rootObj["第三段保护的电流"] = tempObject;
|
|
|
|
|
QJsonObject jsonDocObj = jsonModel->json_doc.object();
|
|
|
|
|
jsonDocObj["充电控制盒配置文件"] = rootObj;
|
|
|
|
|
jsonModel->json_doc.setObject(jsonDocObj);
|
|
|
|
|
|
|
|
|
|
return (*cfgData + 4);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* 前端输入功率不足检测延时 */
|
|
|
|
|
if (dataType == 0x010F) {
|
|
|
|
|
tempValue = rootObj.value("前端输入功率不足检测延时");
|
|
|
|
|
tempObject = tempValue.toObject();
|
|
|
|
|
uint16_t tempU16 = (*(*cfgData + 2) << 8) | (*(*cfgData + 3));
|
|
|
|
|
tempObject["input_Power_Low_Detection_Delay"] = tempU16;
|
|
|
|
|
|
|
|
|
|
rootObj["前端输入功率不足检测延时"] = tempObject;
|
|
|
|
|
QJsonObject jsonDocObj = jsonModel->json_doc.object();
|
|
|
|
|
jsonDocObj["充电控制盒配置文件"] = rootObj;
|
|
|
|
|
jsonModel->json_doc.setObject(jsonDocObj);
|
|
|
|
|
|
|
|
|
|
return (*cfgData + 4);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* 前端输入功率不足检测电压 */
|
|
|
|
|
if (dataType == 0x0110) {
|
|
|
|
|
tempValue = rootObj.value("前端输入功率不足检测电压");
|
|
|
|
|
tempObject = tempValue.toObject();
|
|
|
|
|
float tempF = (float)((*(*cfgData + 2) << 8) | (*(*cfgData + 3))) / 10.0f;
|
|
|
|
|
tempObject["input_Power_Low_Detection_Volt"] = tempF;
|
|
|
|
|
|
|
|
|
|
rootObj["前端输入功率不足检测电压"] = tempObject;
|
|
|
|
|
QJsonObject jsonDocObj = jsonModel->json_doc.object();
|
|
|
|
|
jsonDocObj["充电控制盒配置文件"] = rootObj;
|
|
|
|
|
jsonModel->json_doc.setObject(jsonDocObj);
|
|
|
|
|
|
|
|
|
|
return (*cfgData + 4);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* 最大太阳能板输出电压 */
|
|
|
|
|
if (dataType == 0x0111) {
|
|
|
|
|
tempValue = rootObj.value("最大太阳能板输出电压");
|
|
|
|
|
tempObject = tempValue.toObject();
|
|
|
|
|
float tempF = (float)((*(*cfgData + 2) << 8) | (*(*cfgData + 3))) / 10.0f;
|
|
|
|
|
tempObject["max_Open_Solar_Output_Circuit_V"] = tempF;
|
|
|
|
|
|
|
|
|
|
rootObj["最大太阳能板输出电压"] = tempObject;
|
|
|
|
|
QJsonObject jsonDocObj = jsonModel->json_doc.object();
|
|
|
|
|
jsonDocObj["充电控制盒配置文件"] = rootObj;
|
|
|
|
|
jsonModel->json_doc.setObject(jsonDocObj);
|
|
|
|
|
|
|
|
|
|
return (*cfgData + 4);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* 最大充电电流 */
|
|
|
|
|
if (dataType == 0x0112) {
|
|
|
|
|
tempValue = rootObj.value("最大充电电流");
|
|
|
|
|
tempObject = tempValue.toObject();
|
|
|
|
|
float tempF = (float)((*(*cfgData + 2) << 8) | (*(*cfgData + 3))) / 10.0f;
|
|
|
|
|
tempObject["max_Charg_Curr"] = tempF;
|
|
|
|
|
|
|
|
|
|
rootObj["最大充电电流"] = tempObject;
|
|
|
|
|
QJsonObject jsonDocObj = jsonModel->json_doc.object();
|
|
|
|
|
jsonDocObj["充电控制盒配置文件"] = rootObj;
|
|
|
|
|
jsonModel->json_doc.setObject(jsonDocObj);
|
|
|
|
|
|
|
|
|
|
return (*cfgData + 4);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* 检测回路阻抗时的最小充电电流 */
|
|
|
|
|
if (dataType == 0x0113) {
|
|
|
|
|
tempValue = rootObj.value("检测回路阻抗时的最小充电电流");
|
|
|
|
|
tempObject = tempValue.toObject();
|
|
|
|
|
float tempF = (float)((*(*cfgData + 2) << 8) | (*(*cfgData + 3))) / 10.0f;
|
|
|
|
|
tempObject["min_Check_Loop_Impedance_Charg_Curr"] = tempF;
|
|
|
|
|
|
|
|
|
|
rootObj["检测回路阻抗时的最小充电电流"] = tempObject;
|
|
|
|
|
QJsonObject jsonDocObj = jsonModel->json_doc.object();
|
|
|
|
|
jsonDocObj["充电控制盒配置文件"] = rootObj;
|
|
|
|
|
jsonModel->json_doc.setObject(jsonDocObj);
|
|
|
|
|
|
|
|
|
|
return (*cfgData + 4);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* 全功率输出温度 */
|
|
|
|
|
if (dataType == 0x0114) {
|
|
|
|
|
tempValue = rootObj.value("全功率输出温度");
|
|
|
|
|
tempObject = tempValue.toObject();
|
|
|
|
|
float tempF = (float)((*(*cfgData + 2) << 8) | (*(*cfgData + 3))) / 10.0f;
|
|
|
|
|
tempObject["full_Power_Output_Temperature"] = tempF;
|
|
|
|
|
|
|
|
|
|
rootObj["全功率输出温度"] = tempObject;
|
|
|
|
|
QJsonObject jsonDocObj = jsonModel->json_doc.object();
|
|
|
|
|
jsonDocObj["充电控制盒配置文件"] = rootObj;
|
|
|
|
|
jsonModel->json_doc.setObject(jsonDocObj);
|
|
|
|
|
|
|
|
|
|
return (*cfgData + 4);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* 降功率输出温度 */
|
|
|
|
|
if (dataType == 0x0115) {
|
|
|
|
|
tempValue = rootObj.value("降功率输出温度");
|
|
|
|
|
tempObject = tempValue.toObject();
|
|
|
|
|
float tempF = (float)((*(*cfgData + 2) << 8) | (*(*cfgData + 3))) / 10.0f;
|
|
|
|
|
tempObject["reduce_Power_Output_Temperature"] = tempF;
|
|
|
|
|
|
|
|
|
|
rootObj["降功率输出温度"] = tempObject;
|
|
|
|
|
QJsonObject jsonDocObj = jsonModel->json_doc.object();
|
|
|
|
|
jsonDocObj["充电控制盒配置文件"] = rootObj;
|
|
|
|
|
jsonModel->json_doc.setObject(jsonDocObj);
|
|
|
|
|
|
|
|
|
|
return (*cfgData + 4);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* 停止输出温度 */
|
|
|
|
|
if (dataType == 0x0116) {
|
|
|
|
|
tempValue = rootObj.value("停止输出温度");
|
|
|
|
|
tempObject = tempValue.toObject();
|
|
|
|
|
float tempF = (float)((*(*cfgData + 2) << 8) | (*(*cfgData + 3))) / 10.0f;
|
|
|
|
|
tempObject["stop_PowerOutput_Temperature"] = tempF;
|
|
|
|
|
|
|
|
|
|
rootObj["停止输出温度"] = tempObject;
|
|
|
|
|
QJsonObject jsonDocObj = jsonModel->json_doc.object();
|
|
|
|
|
jsonDocObj["充电控制盒配置文件"] = rootObj;
|
|
|
|
|
jsonModel->json_doc.setObject(jsonDocObj);
|
|
|
|
|
|
|
|
|
|
return (*cfgData + 4);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* 恒压充电时的输出电压 */
|
|
|
|
|
if (dataType == 0x0117) {
|
|
|
|
|
tempValue = rootObj.value("恒压充电时的输出电压");
|
|
|
|
|
tempObject = tempValue.toObject();
|
|
|
|
|
float tempF = (float)((*(*cfgData + 2) << 8) | (*(*cfgData + 3))) / 10.0f;
|
|
|
|
|
tempObject["constant_Voltage_Charge_V"] = tempF;
|
|
|
|
|
|
|
|
|
|
rootObj["恒压充电时的输出电压"] = tempObject;
|
|
|
|
|
QJsonObject jsonDocObj = jsonModel->json_doc.object();
|
|
|
|
|
jsonDocObj["充电控制盒配置文件"] = rootObj;
|
|
|
|
|
jsonModel->json_doc.setObject(jsonDocObj);
|
|
|
|
|
|
|
|
|
|
return (*cfgData + 4);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* 浮充充电时的输出电压 */
|
|
|
|
|
if (dataType == 0x0118) {
|
|
|
|
|
tempValue = rootObj.value("浮充充电时的输出电压");
|
|
|
|
|
tempObject = tempValue.toObject();
|
|
|
|
|
float tempF = (float)((*(*cfgData + 2) << 8) | (*(*cfgData + 3))) / 10.0f;
|
|
|
|
|
tempObject["float_ChargeV"] = tempF;
|
|
|
|
|
|
|
|
|
|
rootObj["浮充充电时的输出电压"] = tempObject;
|
|
|
|
|
QJsonObject jsonDocObj = jsonModel->json_doc.object();
|
|
|
|
|
jsonDocObj["充电控制盒配置文件"] = rootObj;
|
|
|
|
|
jsonModel->json_doc.setObject(jsonDocObj);
|
|
|
|
|
|
|
|
|
|
return (*cfgData + 4);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* 充电时开路电压采集间隔 */
|
|
|
|
|
if (dataType == 0x0119) {
|
|
|
|
|
tempValue = rootObj.value("充电时开路电压采集间隔");
|
|
|
|
|
tempObject = tempValue.toObject();
|
|
|
|
|
uint16_t tempU16 = (*(*cfgData + 2) << 8) | (*(*cfgData + 3));
|
|
|
|
|
tempObject["collect_OpenCircuit_Voltage_Time"] = tempU16;
|
|
|
|
|
|
|
|
|
|
rootObj["充电时开路电压采集间隔"] = tempObject;
|
|
|
|
|
QJsonObject jsonDocObj = jsonModel->json_doc.object();
|
|
|
|
|
jsonDocObj["充电控制盒配置文件"] = rootObj;
|
|
|
|
|
jsonModel->json_doc.setObject(jsonDocObj);
|
|
|
|
|
|
|
|
|
|
return (*cfgData + 4);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* 反向充电保护电流 */
|
|
|
|
|
if (dataType == 0x011A) {
|
|
|
|
|
tempValue = rootObj.value("反向充电保护电流");
|
|
|
|
|
tempObject = tempValue.toObject();
|
|
|
|
|
float tempF = (float)((*(*cfgData + 2) << 8) | (*(*cfgData + 3))) / 10.0f;
|
|
|
|
|
tempObject["reverse_Charge_Protection_Curr"] = tempF;
|
|
|
|
|
|
|
|
|
|
rootObj["反向充电保护电流"] = tempObject;
|
|
|
|
|
QJsonObject jsonDocObj = jsonModel->json_doc.object();
|
|
|
|
|
jsonDocObj["充电控制盒配置文件"] = rootObj;
|
|
|
|
|
jsonModel->json_doc.setObject(jsonDocObj);
|
|
|
|
|
|
|
|
|
|
return (*cfgData + 4);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
qDebug() << "analysisCfgData error" << dataType;
|
|
|
|
|
return NULL;
|
2025-01-16 01:10:46 +00:00
|
|
|
|
}
|