3500/OtherConfig.cpp

583 lines
21 KiB
C++

#include "OtherConfig.h"
#include "ui_OtherConfig.h"
#include <QRegExpValidator>
#include <QSettings>
#include <QTextCodec>
#include <QInputDialog>
#include <QFileDialog>
#include "ftpclient.h"
COtherConfig::COtherConfig(QWidget *parent) :
QWidget(parent),
ui(new Ui::COtherConfig)
{
ui->setupUi(this);
ui->widget->setProperty("flag", "Title");
ui->widget_2->setProperty("flag", "normal");
QRegExp exp("[0-9\\.-]+$");
QValidator *Validator = new QRegExpValidator(exp);
ui->lineEdit_Trigger->setValidator(Validator);
ui->lineEdit_peaktopeak->setValidator(Validator);
ui->radioButton_closeIO->setChecked(1);
LoadWorkingConditionConfig();
get_status = false;
}
COtherConfig::~COtherConfig()
{
delete ui;
}
void COtherConfig::LoadWorkingConditionConfig()
{
#ifdef Q_OS_WIN32
QString fileName = QCoreApplication::applicationDirPath() + "\\config\\TriggerConfig.json";
#endif
#ifdef Q_OS_LINUX
QString fileName = QCoreApplication::applicationDirPath() + "/config/TriggerConfig.json";
#endif
if(!fileName.isEmpty())
{
qDebug() << "打开" << fileName ;
QFile file(fileName);
file.open(QIODevice::ReadOnly | QIODevice::Text);
QString value = file.readAll();
file.close();
QJsonParseError parseJsonErr;
QJsonDocument document = QJsonDocument::fromJson(value.toUtf8(), &parseJsonErr);
if (!(parseJsonErr.error == QJsonParseError::NoError)) {
QMessageBox::about(NULL, "提示", "读取文件错误!");
return;
}
QJsonObject jsonObject = document.object();
if(jsonObject.contains(QStringLiteral("TriggerBuffer"))) {
QJsonObject TriggerBufferObj = jsonObject["TriggerBuffer"].toObject();
QJsonObject TriggerBufferOption = TriggerBufferObj["option"].toObject();
QString strAfterTime = TriggerBufferOption["afterTime"].toString();
QString strBeforeTime = TriggerBufferOption["beforeTime"].toString();
m_strTriggerTime = QString("%1").arg(strAfterTime.toInt() + strBeforeTime.toInt());
ui->lineEdit_Trigger->setText(m_strTriggerTime);
}
}
#ifdef Q_OS_WIN32
fileName = QCoreApplication::applicationDirPath() + "\\config\\ConfidenceDegree.json";
#endif
#ifdef Q_OS_LINUX
fileName = QCoreApplication::applicationDirPath() + "/config/ConfidenceDegree.json";
#endif
if(!fileName.isEmpty())
{
qDebug() << "打开" << fileName ;
QFile file(fileName);
file.open(QIODevice::ReadOnly | QIODevice::Text);
QString value = file.readAll();
file.close();
QJsonParseError parseJsonErr;
QJsonDocument document = QJsonDocument::fromJson(value.toUtf8(), &parseJsonErr);
if (!(parseJsonErr.error == QJsonParseError::NoError)) {
QMessageBox::about(NULL, "提示", "读取文件错误!");
return;
}
QJsonObject jsonObject = document.object();
int confidence_degree = jsonObject["confidence_degree"].toInt();
int section_num = jsonObject["section_num"].toInt();
m_strConfidence = QString("%1").arg(confidence_degree);
m_strSegments = QString("%1").arg(section_num);
}
//读取ini
#ifdef Q_OS_WIN32
QSettings settingsread(QCoreApplication::applicationDirPath() + "\\config\\config.ini",QSettings::IniFormat);
#endif
#ifdef Q_OS_LINUX
QSettings settingsread(QCoreApplication::applicationDirPath() + "/config/config.ini",QSettings::IniFormat);
#endif
settingsread.setIniCodec(QTextCodec::codecForName("UTF8"));
g_strProject = settingsread.value("main/Project").toString();
QTextCodec* codec = QTextCodec::codecForName("UTF-8");//添加编码格式
QTextCodec::setCodecForLocale(codec);
QString str = codec->toUnicode(g_strProject.toLatin1());
qDebug() << "str" << str << QString::fromLocal8Bit(str.toLatin1()) << QString::fromLocal8Bit(g_strProject.toLatin1()) << endl;
qDebug() << "code" << QTextCodec::codecForLocale()->name() << endl;
ui->textEdit_project->setText(str);
ui->textEdit_version->setText(codec->toUnicode(g_strVersion.toLatin1()));
for (int i = 0; i < g_ChannelBaseInfo.size(); i++) {
if(g_ChannelBaseInfo[i].channelType == "TACHOMETER"){
ui->comboBox_ch->addItem(g_ChannelBaseInfo[i].channelName);
}else if(g_ChannelBaseInfo[i].channelType == "PROXIMETER"){
ui->comboBox_ch2->addItem(g_ChannelBaseInfo[i].channelName);
}
}
ui->comboBox_logic->addItem("");
ui->comboBox_logic->addItem("");
#ifdef Q_OS_WIN32
fileName = QCoreApplication::applicationDirPath() + "\\config\\ZeroDrift.json";
#endif
#ifdef Q_OS_LINUX
fileName = QCoreApplication::applicationDirPath() + "/config/ZeroDrift.json";
#endif
if(!fileName.isEmpty())
{
qDebug() << "打开" << fileName ;
QFile file(fileName);
file.open(QIODevice::ReadOnly | QIODevice::Text);
QString value = file.readAll();
file.close();
QJsonParseError parseJsonErr;
QJsonDocument document = QJsonDocument::fromJson(value.toUtf8(), &parseJsonErr);
if (!(parseJsonErr.error == QJsonParseError::NoError)) {
QMessageBox::about(NULL, "提示", "读取文件错误!");
return;
}
QJsonObject jsonObject = document.object();
QJsonObject tachometerObj = jsonObject["tachometerObj"].toObject();
QJsonObject ref_channelObj = jsonObject["ref_channel"].toObject();
int tachometerSlot = tachometerObj["slot"].toInt();
int tachometerChannel = tachometerObj["channel"].toInt();
int ref_channelObjSlot = ref_channelObj["slot"].toInt();
int ref_channelObjChannel = ref_channelObj["channel"].toInt();
double ref_channelObjpeaktopeak = ref_channelObj["peaktopeak"].toDouble();
int logic = jsonObject["logic"].toInt();
int operation = jsonObject["operation"].toInt();
for (int i = 0; i < g_ChannelBaseInfo.size(); i++) {
if(g_ChannelBaseInfo[i].bordNo == tachometerSlot && \
g_ChannelBaseInfo[i].channelNoInBoard == tachometerChannel){
ui->comboBox_ch->setCurrentText(g_ChannelBaseInfo[i].channelName);
}
if(g_ChannelBaseInfo[i].bordNo == ref_channelObjSlot && \
g_ChannelBaseInfo[i].channelNoInBoard == ref_channelObjChannel){
ui->comboBox_ch2->setCurrentText(g_ChannelBaseInfo[i].channelName);
}
}
QString str = QString("%1").arg(ref_channelObjpeaktopeak);
ui->lineEdit_peaktopeak->setText(str);
if(logic){
ui->comboBox_logic->setCurrentText("");
}else{
ui->comboBox_logic->setCurrentText("");
}
if(operation){
ui->radioButton_open->setChecked(1);
ui->radioButton_close->setChecked(0);
}else{
ui->radioButton_open->setChecked(0);
ui->radioButton_close->setChecked(1);
}
}
}
void COtherConfig::on_pushButto_Trigger_clicked()
{
QString str = ui->lineEdit_Trigger->text();
if(str.toInt() > 300 || str.toInt() <= 0){
QMessageBox::information(this, QStringLiteral("提示"), "请填写正确的触发时长!");
ui->lineEdit_Trigger->setText(m_strTriggerTime);
return;
}
m_strTriggerTime = str;
#ifdef Q_OS_WIN32
QString fileName = QCoreApplication::applicationDirPath() + "\\config\\TriggerConfig.json";
#endif
#ifdef Q_OS_LINUX
QString fileName = QCoreApplication::applicationDirPath() + "/config/TriggerConfig.json";
#endif
if(!fileName.isEmpty())
{
qDebug() << "打开" << fileName ;
QFile file(fileName);
file.open(QIODevice::ReadOnly | QIODevice::Text);
QString value = file.readAll();
file.close();
QJsonParseError parseJsonErr;
QJsonDocument document = QJsonDocument::fromJson(value.toUtf8(), &parseJsonErr);
if (!(parseJsonErr.error == QJsonParseError::NoError)) {
QMessageBox::about(NULL, "提示", "读取文件错误!");
return;
}
QJsonObject jsonObject = document.object();
if(jsonObject.contains(QStringLiteral("TriggerBuffer"))) {
int AfterTime = ui->lineEdit_Trigger->text().toInt()/2;
int BeforeTime = ui->lineEdit_Trigger->text().toInt() - AfterTime;
QJsonObject tempObj,optionObj;
tempObj["afterTime"] = QString("%1").arg(AfterTime);
tempObj["beforeTime"] = QString("%1").arg(BeforeTime);
optionObj["option"] = tempObj;
jsonObject["TriggerBuffer"] = optionObj;
}
QJsonDocument jsonDoc;
jsonDoc.setObject(jsonObject);
#ifdef Q_OS_WIN32
QString fileName = QCoreApplication::applicationDirPath() + "\\config\\TriggerConfig.json";
#endif
#ifdef Q_OS_LINUX
QString fileName = QCoreApplication::applicationDirPath() + "/config/TriggerConfig.json";
#endif
file.open(QIODevice::WriteOnly);
file.write(jsonDoc.toJson());
file.close();
}
QString strURL = QString("ftp://%1/CIDW/qtconfig/%2").arg(IP).arg("TriggerConfig.json");
g_FtpClient->SetServerInfo(strURL);
g_FtpClient->SetUserInfo("root","@#cidw!@123456");
g_FtpClient->UpLoadFile(fileName,"TriggerConfig.json");
}
QString COtherConfig::GBK2UTF8(QByteArray inStr)
{
QTextCodec *gbk = QTextCodec::codecForName("gbk");
QTextCodec *utf8 = QTextCodec::codecForName("UTF-8");
char *p = inStr.data();
QString str = gbk->toUnicode(p);
QByteArray utf8_bytes=utf8->fromUnicode(str);
p = utf8_bytes.data();
str = p;
return str;
}
inline QString UTF82GBK(QByteArray &inStr)
{
QTextCodec *gbk = QTextCodec::codecForName("gbk");
QTextCodec *utf8 = QTextCodec::codecForName("UTF-8");
char *p = inStr.data();
QString str = utf8->toUnicode(p);
QByteArray utf8_bytes=gbk->fromUnicode(str);
p = utf8_bytes.data();
str = p;
return str;
}
void COtherConfig::on_pushButton_main_clicked()
{
#ifdef Q_OS_WIN32
QSettings *settings = new QSettings(QCoreApplication::applicationDirPath() + "\\config\\config.ini", QSettings::IniFormat);
#endif
#ifdef Q_OS_LINUX
QSettings *settings = new QSettings(QCoreApplication::applicationDirPath() + "/config/config.ini", QSettings::IniFormat);
#endif
settings->setIniCodec(QTextCodec::codecForName("UTF-8"));
settings->setValue("main/Version", ui->textEdit_version->toPlainText());
settings->setValue("main/Project", ui->textEdit_project->toPlainText());
delete settings;
QMessageBox::information(this, QStringLiteral("提示"), "保存成功!");
}
void COtherConfig::slotNetMgr(QString sAddr, const QVariant &msg)
{
QJsonObject objec = msg.value<QJsonObject>();
if(objec.contains("cmd"))
{
QJsonValue arrays_value = objec.take("cmd");
qDebug()<<"cmd ="<<arrays_value.toString();
if(arrays_value.toString() == "113" && get_status){
ui->pushButton_open_close->setEnabled("true");
bool enable = objec.take("enable").toBool();
if(enable){
ui->radioButton_open_2->setChecked(true);
ui->radioButton_close_2->setChecked(false);
ui->pushButton_open_close->setText("关闭");
}else{
ui->radioButton_open_2->setChecked(false);
ui->radioButton_close_2->setChecked(true);
ui->pushButton_open_close->setText("打开");
}
get_status = false;
}else if(arrays_value.toString() == "61850"){
bool Status = objec.take("success").toBool();
QString strMessage = objec.take("message").toString();
if(Status){
QMessageBox::information(this, QStringLiteral("提示"), strMessage);
QString filepath = QFileDialog::getExistingDirectory(this, tr("选择文件夹"), tr(""));
if(filepath == "")
return;
QString fileName = "SJ90C_IEC61850.icd";
g_NetMgr->RequestDownload(IP, fileName, filepath);
QFileInfo file(filepath + fileName);
qDebug()<<file;
if(file.exists()){
QMessageBox::information(this, QStringLiteral("提示"), "下载成功!");
}
}else{
QMessageBox::question(this, QStringLiteral("提示"), strMessage);
}
}else{
bool Status = objec.take("success").toBool();
QString strMessage = objec.take("message").toString();
if(Status){
QMessageBox::information(this, QStringLiteral("提示"), "保存成功!");
}else{
QMessageBox::information(this, QStringLiteral("提示"), strMessage);
}
}
}
disconnect(g_NetMgr,SIGNAL(sigNetMgr(QString, const QVariant&)), this, SLOT(slotNetMgr(QString,const QVariant&)));
}
void COtherConfig::on_radioButton_open_clicked()
{
//QString fileName = QCoreApplication::applicationDirPath() + "\\config\\ZeroDrift.json";
//if(!fileName.isEmpty())
{
// qDebug() << "打开" << fileName ;
// QFile file(fileName);
// file.open(QIODevice::WriteOnly);
// QString value = file.readAll();
// file.close();
// QJsonParseError parseJsonErr;
// QJsonDocument document = QJsonDocument::fromJson(value.toUtf8(), &parseJsonErr);
// if (!(parseJsonErr.error == QJsonParseError::NoError)) {
// QMessageBox::about(NULL, "提示", "读取文件错误!");
// return;
// }
QJsonObject ZeroDriftObj,tachometerObj,ref_channelObj;
for (int i = 0; i < g_ChannelBaseInfo.size(); i++) {
if(g_ChannelBaseInfo[i].channelName == ui->comboBox_ch->currentText()){
tachometerObj["slot"] = g_ChannelBaseInfo[i].bordNo;
tachometerObj["channel"] = g_ChannelBaseInfo[i].channelNoInBoard;
}
if(g_ChannelBaseInfo[i].channelName == ui->comboBox_ch2->currentText()){
ref_channelObj["slot"] = g_ChannelBaseInfo[i].bordNo;
ref_channelObj["channel"] = g_ChannelBaseInfo[i].channelNoInBoard;
}
}
ref_channelObj["peaktopeak"] = ui->lineEdit_peaktopeak->text().toDouble();
if(ui->comboBox_logic->currentText() == ""){
ZeroDriftObj["logic"] = 1;
}else{
ZeroDriftObj["logic"] = 0;
}
ZeroDriftObj["operation"] = 1;
ZeroDriftObj["tachometer"] = tachometerObj;
ZeroDriftObj["ref_channel"] = ref_channelObj;
QJsonDocument jsonDoc;
jsonDoc.setObject(ZeroDriftObj);
#ifdef Q_OS_WIN32
QString fileName = QCoreApplication::applicationDirPath() + "\\config\\ZeroDrift.json";
#endif
#ifdef Q_OS_LINUX
QString fileName = QCoreApplication::applicationDirPath() + "/config/ZeroDrift.json";
#endif
QFile file(fileName);
file.open(QIODevice::WriteOnly);
file.write(jsonDoc.toJson());
file.close();
QJsonObject allObj;
allObj.insert("cmd", "88");
allObj["cmdBody"] = ZeroDriftObj;
QNetworkRequest req;
QString sUrl = QString("http://%1/cgi-bin/General.cgi/").arg(IP);
req.setUrl(sUrl);
g_NetMgr->PostJson(req,allObj);
connect(g_NetMgr,SIGNAL(sigNetMgr(QString, const QVariant&)), this, SLOT(slotNetMgr(QString,const QVariant&)));
}
ui->comboBox_ch->setEnabled(0);
ui->comboBox_ch2->setEnabled(0);
ui->comboBox_logic->setEnabled(0);
ui->lineEdit_peaktopeak->setEnabled(0);
}
void COtherConfig::on_radioButton_close_clicked()
{
#ifdef Q_OS_WIN32
QString fileName = QCoreApplication::applicationDirPath() + "\\config\\ZeroDrift.json";
#endif
#ifdef Q_OS_LINUX
QString fileName = QCoreApplication::applicationDirPath() + "\\config\\ZeroDrift.json";
#endif
if(!fileName.isEmpty())
{
qDebug() << "打开" << fileName ;
QFile file(fileName);
file.open(QIODevice::ReadOnly | QIODevice::Text);
QString value = file.readAll();
file.close();
QJsonParseError parseJsonErr;
QJsonDocument document = QJsonDocument::fromJson(value.toUtf8(), &parseJsonErr);
if (!(parseJsonErr.error == QJsonParseError::NoError)) {
QMessageBox::about(NULL, "提示", "读取文件错误!");
return;
}
QJsonObject ZeroDriftObj;
ZeroDriftObj["operation"] = 0;
QJsonDocument jsonDoc;
jsonDoc.setObject(ZeroDriftObj);
#ifdef Q_OS_WIN32
QString fileName = QCoreApplication::applicationDirPath() + "\\config\\ZeroDrift.json";
#endif
#ifdef Q_OS_LINUX
QString fileName = QCoreApplication::applicationDirPath() + "\\config\\ZeroDrift.json";
#endif
file.open(QIODevice::WriteOnly);
file.write(jsonDoc.toJson());
file.close();
QJsonObject allObj;
allObj.insert("cmd", "88");
allObj["cmdBody"] = ZeroDriftObj;
QNetworkRequest req;
QString sUrl = QString("http://%1/cgi-bin/General.cgi/").arg(IP);
req.setUrl(sUrl);
g_NetMgr->PostJson(req,allObj);
connect(g_NetMgr,SIGNAL(sigNetMgr(QString, const QVariant&)), this, SLOT(slotNetMgr(QString,const QVariant&)));
}
ui->comboBox_ch->setEnabled(1);
ui->comboBox_ch2->setEnabled(1);
ui->comboBox_logic->setEnabled(1);
ui->lineEdit_peaktopeak->setEnabled(1);
}
void COtherConfig::on_radioButton_openIO_clicked()
{
bool ok;
QString password = QInputDialog::getText(this,
"输入密码",
"Enter Password:",
QLineEdit::Password,
"",
&ok);
if(!ok) {
ui->radioButton_openIO->setChecked(0);
ui->radioButton_closeIO->setChecked(1);
return;
}
#ifdef Q_OS_WIN32
QSettings settingsread(QCoreApplication::applicationDirPath() + "\\config\\config.ini",QSettings::IniFormat);
#endif
#ifdef Q_OS_LINUX
QSettings settingsread(QCoreApplication::applicationDirPath() + "/config/config.ini",QSettings::IniFormat);
#endif
if(password == settingsread.value("main/passwd").toString())
{
g_strIOControl = "1";
}else{
QMessageBox::information(this, QStringLiteral("提示"), "请输入正确的密码!");
}
}
void COtherConfig::on_radioButton_closeIO_clicked()
{
g_strIOControl = "0";
}
void COtherConfig::on_radioButton_open_2_clicked()
{
}
void COtherConfig::on_radioButton_close_2_clicked()
{
}
void COtherConfig::on_pushButton_get_clicked()
{
QJsonObject sendData;
sendData["cmd"] = "113";
sendData["subcmd"] = 0;
QNetworkRequest req;
QString sUrl = QString("http://%1/cgi-bin/General.cgi/").arg(IP);
req.setUrl(sUrl);
g_NetMgr->PostJson(req,sendData);
connect(g_NetMgr,SIGNAL(sigNetMgr(QString, const QVariant&)), this, SLOT(slotNetMgr(QString,const QVariant&)));
get_status = true;
}
void COtherConfig::on_pushButton_open_close_clicked()
{
QMessageBox::StandardButton ret = QMessageBox::question(nullptr, "确认", "是否继续?",
QMessageBox::Yes | QMessageBox::No,
QMessageBox::Yes);
if (ret == QMessageBox::No) {
return;
}
QString btn_text = ui->pushButton_open_close->text();
if(btn_text == "打开"){
QJsonObject sendData;
sendData["cmd"] = "113";
sendData["subcmd"] = 1;
sendData["enable"] = true;
QNetworkRequest req;
QString sUrl = QString("http://%1/cgi-bin/General.cgi/").arg(IP);
req.setUrl(sUrl);
g_NetMgr->PostJson(req,sendData);
connect(g_NetMgr,SIGNAL(sigNetMgr(QString, const QVariant&)), this, SLOT(slotNetMgr(QString,const QVariant&)));
ui->pushButton_open_close->setText("关闭");
}else if(btn_text == "关闭"){
QJsonObject sendData;
sendData["cmd"] = "113";
sendData["subcmd"] = 1;
sendData["enable"] = false;
QNetworkRequest req;
QString sUrl = QString("http://%1/cgi-bin/General.cgi/").arg(IP);
req.setUrl(sUrl);
g_NetMgr->PostJson(req,sendData);
connect(g_NetMgr,SIGNAL(sigNetMgr(QString, const QVariant&)), this, SLOT(slotNetMgr(QString,const QVariant&)));
ui->pushButton_open_close->setText("打开");
}
}
void COtherConfig::on_pushButton_generate_clicked()
{
QJsonObject sendData;
sendData["cmd"] = "61850";
QNetworkRequest req;
QString sUrl = QString("http://%1/cgi-bin/General.cgi/").arg(IP);
req.setUrl(sUrl);
g_NetMgr->PostJson(req,sendData);
connect(g_NetMgr,SIGNAL(sigNetMgr(QString, const QVariant&)), this, SLOT(slotNetMgr(QString,const QVariant&)));
}