You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1105 lines
39 KiB
C++

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#include "AdvanceSetupWidget.h"
#include "ui_AdvanceSetupWidget.h"
#include "Common.h"
#include <QRegExpValidator>
#include "frame/Frame.h"
#include <QFileDialog>
#include <QDoubleValidator>
#include <QMessageBox>
#include "device/DeviceManager.h"
#include "logger/LogManager.h"
#include "data/DateTimeData.h"
#include "data/StringData.h"
//#include "data/StructData.h"
#include "data/TorqueModeStructData.h"
#include "data/BoltModeStructData.h"
#include "data/AngleModeStructData.h"
#include "data/GearModeStructData.h"
#include "data/SensorModeStructData.h"
#include "data/FallbackStructData.h"
#include "SetupService.h"
#include "Utils.h"
#include <Qtxlsx>
#include "TmsKey.h"
extern double gZoomValue;
extern unsigned char m_currType; // 当前类型 23.8.30
static QString BsBoltDiameterToStr(QString diameter)
{
QString strDiameter;
if(diameter.compare("14") == 0) { strDiameter = "1/4"; }
else if(diameter.compare("516") == 0) { strDiameter = "5/16"; }
else if(diameter.compare("38") == 0) { strDiameter = "3/8"; }
else if(diameter.compare("716") == 0) { strDiameter = "7/16"; }
else if(diameter.compare("½") == 0) { strDiameter = "1/2"; }
else if(diameter.compare("⁹/1₆") == 0) { strDiameter = "9/16"; }
else if(diameter.compare("") == 0) { strDiameter = "5/8"; }
else if(diameter.compare("¾") == 0) { strDiameter = "3/4"; }
else if(diameter.compare("") == 0) { strDiameter = "7/8"; }
else if(diameter.compare("1") == 0) { strDiameter = "1"; }
else if(diameter.compare("1⅛") == 0) { strDiameter = "1_1/8"; }
else if(diameter.compare("") == 0) { strDiameter = "1_1/4"; }
else if(diameter.compare("1⅜") == 0) { strDiameter = "1_3/8"; }
else if(diameter.compare("") == 0) { strDiameter = "1_1/2"; }
else if(diameter.compare("") == 0) { strDiameter = "1_3/4"; }
else if(diameter.compare("2") == 0) { strDiameter = "2"; }
else if(diameter.compare("") == 0) { strDiameter = "2_1/4"; }
else if(diameter.compare("") == 0) { strDiameter = "2_1/2"; }
else if(diameter.compare("") == 0) { strDiameter = "2_3/4"; }
else if(diameter.compare("3") == 0) { strDiameter = "3"; }
else if(diameter.compare("") == 0) { strDiameter = "3_1/4"; }
else if(diameter.compare("") == 0) { strDiameter = "3_1/2"; }
else if(diameter.compare("") == 0) { strDiameter = "3_3/4"; }
else if(diameter.compare("4") == 0) { strDiameter = "4"; }
else { strDiameter = diameter; }
return strDiameter;
}
AdvanceSetupWidget::AdvanceSetupWidget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::AdvanceSetupWidget)
, m_fallbackAngle("")
, m_fallbackAmpere("")
, m_fallbackAmpere_2("")
{
ui->setupUi(this);
init();
//showType1();
// 测试:
#ifdef _HOME_TEST_
ui->lineEditTorqueModeSettingsFilePath->setText("D:/06_yinuo/MyWork/博霆科技/电动扳手/02设计/扳手扭矩模式.xlsx");
ui->lineEditBoltModeSettingsFilePath->setText("D:/06_yinuo/MyWork/博霆科技/电动扳手/02设计/扳手螺栓模式.xlsx");
ui->lineEditAngleModeSettingsFilePath->setText("D:/06_yinuo/MyWork/博霆科技/电动扳手/02设计/扳手角度模式.xlsx");
ui->lineEditGearPresetModeSettingsFilePath->setText("D:/06_yinuo/MyWork/博霆科技/电动扳手/02设计/扳手档位模式.xlsx");
ui->lineEditSensorModeSettingsFilePath->setText("D:/06_yinuo/MyWork/博霆科技/电动扳手/02设计/扳手传感器模式.xlsx");
#endif
#ifdef _YN_TEST_
ui->lineEditTorqueModeSettingsFilePath->setText("E:/MyWork/博霆科技/电动扳手/02设计/扳手扭矩模式.xlsx");
ui->lineEditBoltModeSettingsFilePath->setText("E:/MyWork/博霆科技/电动扳手/02设计/扳手螺栓模式.xlsx");
ui->lineEditAngleModeSettingsFilePath->setText("E:/MyWork/博霆科技/电动扳手/02设计/扳手角度模式.xlsx");
ui->lineEditGearPresetModeSettingsFilePath->setText("E:/MyWork/博霆科技/电动扳手/02设计/扳手档位模式.xlsx");
ui->lineEditSensorModeSettingsFilePath->setText("E:/MyWork/博霆科技/电动扳手/02设计/扳手传感器模式.xlsx");
#endif
}
AdvanceSetupWidget::~AdvanceSetupWidget()
{
delete ui;
}
//
// 初始化高级功能区域
//
void AdvanceSetupWidget::init()
{
// 控件大小
int nLabelWidth = 150 * gZoomValue;
int nLabelHeight = gnDefaultLabelHeight * gZoomValue;
ui->labelTorqueModeSettings->setFixedSize(nLabelWidth, nLabelHeight);
ui->labelBoltModeSettings->setFixedSize(nLabelWidth, nLabelHeight);
ui->labelAngleModeSettings->setFixedSize(nLabelWidth, nLabelHeight);
ui->labelGearPresetModeSettings->setFixedSize(nLabelWidth, nLabelHeight);
ui->labelSensorModeSettings->setFixedSize(nLabelWidth, nLabelHeight);
ui->labelFallbackSettings->setFixedSize(nLabelWidth, nLabelHeight);
ui->labelFallbackAngle->setFixedSize(68 * gZoomValue, nLabelHeight);
ui->labelFallbackAnglecoefficient->setFixedSize(52 * gZoomValue, nLabelHeight);
ui->labelFallbackAnglecoefficient_2->setFixedSize(53 * gZoomValue, nLabelHeight);
ui->labelFallbackAngleUnit->setFixedSize(10 * gZoomValue, nLabelHeight);
//ui->labelFallbackAmpereUnit->setFixedSize(10 * gZoomValue, nLabelHeight);
ui->labelMenuInterfaceSettings->setFixedSize(nLabelWidth, nLabelHeight);
ui->labelToolsLockSettings->setFixedSize(nLabelWidth, nLabelHeight);
ui->labelUsageCount->setFixedSize(68 * gZoomValue, nLabelHeight);
ui->labelPassword->setFixedSize(50 * gZoomValue, nLabelHeight);
int nLineEditHeight = gnDefaultLineEditHeight * gZoomValue;
int nWidgetHeight = nLineEditHeight;
ui->widgetTorqueModeSettings->setFixedHeight(nWidgetHeight);
ui->widgetBoltModeSettings->setFixedHeight(nWidgetHeight);
ui->widgetAngleModeSettings->setFixedHeight(nWidgetHeight);
ui->widgetGearPresetModeSettings->setFixedHeight(nWidgetHeight);
ui->widgetSensorModeSettings->setFixedHeight(nWidgetHeight);
ui->widgetMenuInterfaceSettings->setFixedHeight(nWidgetHeight);
ui->widgetFallbackSettings->setFixedHeight(nWidgetHeight);
ui->widgetFallbackAngleSettings->setFixedHeight(nWidgetHeight);
ui->widgetFallbackAnglecoefficientSettings->setFixedHeight(nWidgetHeight);
ui->widgetToolsLockSettings->setFixedHeight(nWidgetHeight);
ui->widgetUsageCount->setFixedHeight(nWidgetHeight);
ui->widgetPassword->setFixedHeight(nWidgetHeight);
ui->lineEditTorqueModeSettingsFilePath->setFixedHeight(nLineEditHeight);
ui->lineEditBoltModeSettingsFilePath->setFixedHeight(nLineEditHeight);
ui->lineEditAngleModeSettingsFilePath->setFixedHeight(nLineEditHeight);
ui->lineEditGearPresetModeSettingsFilePath->setFixedHeight(nLineEditHeight);
ui->lineEditSensorModeSettingsFilePath->setFixedHeight(nLineEditHeight);
ui->lineEditMenuInterfaceSettingsFilePath->setFixedHeight(nLineEditHeight);
ui->lineEditFallbackAngle->setFixedHeight(nLineEditHeight);
ui->lineEditFallbackAnglecoefficient->setFixedHeight(nLineEditHeight);
ui->lineEditFallbackAnglecoefficient_2->setFixedHeight(nLineEditHeight);
ui->lineEditUsageCount->setFixedHeight(nLineEditHeight);
ui->lineEditPassword->setFixedHeight(nLineEditHeight);
int nPushButtonOpenFileWidth = nLineEditHeight;
int nPushButtonOpenFileHeight = nLineEditHeight;
ui->pushButtonTorqueModeSettingsOpenFile->setFixedSize(nPushButtonOpenFileWidth, nPushButtonOpenFileHeight);
ui->pushButtonBoltModeSettingsOpenFile->setFixedSize(nPushButtonOpenFileWidth, nPushButtonOpenFileHeight);
ui->pushButtonAngleModeSettingsOpenFile->setFixedSize(nPushButtonOpenFileWidth, nPushButtonOpenFileHeight);
ui->pushButtonGearPresetModeSettingsOpenFile->setFixedSize(nPushButtonOpenFileWidth, nPushButtonOpenFileHeight);
ui->pushButtonSensorModeSettingsOpenFile->setFixedSize(nPushButtonOpenFileWidth, nPushButtonOpenFileHeight);
ui->pushButtonMenuInterfaceSettingsOpenFile->setFixedSize(nPushButtonOpenFileWidth, nPushButtonOpenFileHeight);
int nPushButtonWidth = 100 * gZoomValue;
int nPushButtonHeight = gnDefaultPushButtonHeight * gZoomValue;
ui->pushButtonTorqueModeSettings->setFixedSize(nPushButtonWidth, nPushButtonHeight);
ui->pushButtonBoltModeSettings->setFixedSize(nPushButtonWidth, nPushButtonHeight);
ui->pushButtonAngleModeSettings->setFixedSize(nPushButtonWidth, nPushButtonHeight);
ui->pushButtonGearPresetModeSettings->setFixedSize(nPushButtonWidth, nPushButtonHeight);
ui->pushButtonSensorModeSettings->setFixedSize(nPushButtonWidth, nPushButtonHeight);
ui->pushButtonMenuInterfaceSettings->setFixedSize(nPushButtonWidth, nPushButtonHeight);
ui->pushButtonFallbackSettings->setFixedSize(nPushButtonWidth, nPushButtonHeight);
ui->pushButtonToolsLockSettings->setFixedSize(nPushButtonWidth, nPushButtonHeight);
// 控件字体
QString strStyleSheet = gstrStyleSheet.arg(gnFontSize * gZoomValue);
ui->lineEditTorqueModeSettingsFilePath->setStyleSheet(strStyleSheet);
ui->lineEditBoltModeSettingsFilePath->setStyleSheet(strStyleSheet);
ui->lineEditAngleModeSettingsFilePath->setStyleSheet(strStyleSheet);
ui->lineEditGearPresetModeSettingsFilePath->setStyleSheet(strStyleSheet);
ui->lineEditSensorModeSettingsFilePath->setStyleSheet(strStyleSheet);
ui->lineEditMenuInterfaceSettingsFilePath->setStyleSheet(strStyleSheet);
ui->lineEditFallbackAngle->setStyleSheet(strStyleSheet);
ui->lineEditFallbackAnglecoefficient->setStyleSheet(strStyleSheet);
ui->lineEditFallbackAnglecoefficient_2->setStyleSheet(strStyleSheet);
ui->lineEditUsageCount->setStyleSheet(strStyleSheet);
ui->lineEditPassword->setStyleSheet(strStyleSheet);
// 定义只能输入数字的正则表达式
QRegExp regx("[0-9]+$");
QValidator *validator = new QRegExpValidator(regx);
// 设置密码最多输入8位密码
ui->lineEditPassword->setMaxLength(8);
ui->lineEditPassword->setValidator(validator);
// 设置使用次数最多99999999
ui->lineEditUsageCount->setValidator(new QIntValidator(0, 99999999));
// // 回退角度0-360度
// ui->lineEditFallbackAngle->setValidator(new QIntValidator(0, 999));
// // 回退电流0.1-10A
// QDoubleValidator* v = new QDoubleValidator(0, 10, 1);
// v->setRange(0, 10);
// v->setNotation(QDoubleValidator::StandardNotation);
// ui->lineEditFallbackAmpere->setValidator(v);
// 扭矩模式
connect(ui->pushButtonTorqueModeSettingsOpenFile, SIGNAL(clicked()), this, SLOT(slot_pushButtonTorqueModeSettingsOpenFile_clicked()));
connect(ui->pushButtonTorqueModeSettings, SIGNAL(clicked()), this, SLOT(slot_pushButtonTorqueModeSettings_clicked()));
// 螺栓模式
connect(ui->pushButtonBoltModeSettingsOpenFile, SIGNAL(clicked()), this, SLOT(slot_pushButtonBoltModeSettingsOpenFile_clicked()));
connect(ui->pushButtonBoltModeSettings, SIGNAL(clicked()), this, SLOT(slot_pushButtonBoltModeSettings_clicked()));
// 角度模式
connect(ui->pushButtonAngleModeSettingsOpenFile, SIGNAL(clicked()), this, SLOT(slot_pushButtonAngleModeSettingsOpenFile_clicked()));
connect(ui->pushButtonAngleModeSettings, SIGNAL(clicked()), this, SLOT(slot_pushButtonAngleModeSettings_clicked()));
// 档位预设模式
connect(ui->pushButtonGearPresetModeSettingsOpenFile, SIGNAL(clicked()), this, SLOT(slot_pushButtonGearPresetModeSettingsOpenFile_clicked()));
connect(ui->pushButtonGearPresetModeSettings, SIGNAL(clicked()), this, SLOT(slot_pushButtonGearPresetModeSettings_clicked()));
// 传感器模式
connect(ui->pushButtonSensorModeSettingsOpenFile, SIGNAL(clicked()), this, SLOT(slot_pushButtonSensorModeSettingsOpenFile_clicked()));
connect(ui->pushButtonSensorModeSettings, SIGNAL(clicked()), this, SLOT(slot_pushButtonSensorModeSettings_clicked()));
// 菜单界面设置
connect(ui->pushButtonMenuInterfaceSettingsOpenFile, SIGNAL(clicked()), this, SLOT(slot_pushButtonMenuInterfaceSettingsOpenFile_clicked()));
connect(ui->pushButtonMenuInterfaceSettings, SIGNAL(clicked()), this, SLOT(slot_pushButtonMenuInterfaceSettings_clicked()));
// 回退设置
connect(ui->pushButtonFallbackSettings, SIGNAL(clicked()), this, SLOT(slot_pushButtonFallbackSettings_clicked()));
// 工具锁定设置
connect(ui->pushButtonToolsLockSettings, SIGNAL(clicked()), this, SLOT(slot_pushButtonToolsLockSettings_clicked()));
}
//
// 扭矩模式 -- 打开文件按钮点击事件
//
void AdvanceSetupWidget::slot_pushButtonTorqueModeSettingsOpenFile_clicked()
{
QString fileName = QFileDialog::getOpenFileName(
this,
tr("打开文件(open a file)"),
"C:/",
tr("Excel files(*.xls *.xlsx);;text files(*.csv);;All files(*.*)"));
ui->lineEditTorqueModeSettingsFilePath->setText(fileName);
}
//
// 扭矩模式 -- 确定按钮点击事件
//
void AdvanceSetupWidget::slot_pushButtonTorqueModeSettings_clicked()
{
QString fileName = ui->lineEditTorqueModeSettingsFilePath->text();
if (fileName.isEmpty())
{
QMessageBox::warning(this, "Warning!", "请选择文件!");
return;
}
QFileInfo file(fileName);
if(file.exists()==false)
{
QMessageBox::warning(this, "Warning!", "文件不存在!");
return;
}
QXlsx::Document xlsx(fileName);
QXlsx::Workbook *workBook = xlsx.workbook();
QXlsx::Worksheet *workSheet = static_cast<QXlsx::Worksheet*>(workBook->sheet(0));
int nRows = workSheet->dimension().rowCount();
int nCols = workSheet->dimension().columnCount();
#ifdef _DEBUG
logDebug(tr("行数:%1, 列数:%2").arg(nRows).arg(nCols));
#endif
TorqueModeParam_t tParam;
// 从第二行开始读取前两列Excel索引从1开始
for(int i=2; i<=nRows; i++)
{
if(workSheet->cellAt(i, 1) == nullptr||workSheet->cellAt(i, 2) == nullptr||workSheet->cellAt(i, 3) == nullptr)
{
QMessageBox::warning(this, "Warning!", "文件格式错误!", QMessageBox::Ok, QMessageBox::Ok);
return;
}
std::string name = workSheet->cellAt(i, 1)->value().toString().toStdString();
int value = workSheet->cellAt(i, 2)->value().toString().toDouble() * 10000; // 扭矩系数值乘以10000后取整传递
unsigned short valueAmpere;
if(m_type == 4||m_type == 8)
valueAmpere = workSheet->cellAt(i, 3)->value().toString().toDouble(); //液压与气动扳手
else
valueAmpere = workSheet->cellAt(i, 3)->value().toString().toDouble() * 1000; // 电流值乘以1000后取整传递
if(name.length() > 0)
{
#ifdef _DEBUG
logDebug(tr("Name:%1, Value:%2, ValueAmpere:%3")
.arg(workSheet->cellAt(i, 1)->value().toString())
.arg(workSheet->cellAt(i, 2)->value().toString())
.arg(workSheet->cellAt(i, 3)->value().toString()));
#endif
//param.datas.insert(std::make_pair(name, value)); // std::map
TorqueModeParam param(name, value, valueAmpere);
tParam.datas.push_back(param);
}
}
// 设置参数
#if 0
TorqueModeStructData *data = new TorqueModeStructData(&tParam);
#else
TorqueModeStructData *data = new TorqueModeStructData();
data->setData(tParam);
#endif
// 设置参数数据可能会比较多。按照1条数据100毫秒来设置接收数据超时时间
// 超时时间范围为1秒至30秒
int msec = 100 * tParam.datas.size();
msec = msec > 1000 ? msec : 1000;
msec = msec < 30000 ? msec : 30000;
SetupService::GetInstance()->SendData(FRAME_CMD_SET_PARAM_TORQUE, data->toByteStr(), msec);
}
//
// 螺栓模式 -- 打开文件按钮点击事件
//
void AdvanceSetupWidget::slot_pushButtonBoltModeSettingsOpenFile_clicked()
{
QString fileName = QFileDialog::getOpenFileName(
this,
tr("打开文件(open a file)"),
"C:/",
tr("Excel files(*.xls *.xlsx);;text files(*.csv);;All files(*.*)"));
ui->lineEditBoltModeSettingsFilePath->setText(fileName);
}
//
// 螺栓模式 -- 确定按钮点击事件
//
void AdvanceSetupWidget::slot_pushButtonBoltModeSettings_clicked()
{
QString fileName = ui->lineEditBoltModeSettingsFilePath->text();
if (fileName.isEmpty())
{
QMessageBox::warning(this, "Warning!", "请选择文件!");
return;
}
QFileInfo file(fileName);
if(file.exists()==false)
{
QMessageBox::warning(this, "Warning!", "文件不存在!");
return;
}
QXlsx::Document xlsx(fileName);
QXlsx::Workbook *workBook = xlsx.workbook();
BoltModeParam_t *param = new BoltModeParam_t();
// 默认第一个sheet为公制第二个sheet为英制
for(int fmtIndex=0; fmtIndex<2; fmtIndex++)
{
QXlsx::Worksheet *workSheet = static_cast<QXlsx::Worksheet*>(workBook->sheet(fmtIndex));
int nRows = workSheet->dimension().rowCount();
int nCols = workSheet->dimension().columnCount();
#ifdef _DEBUG
logDebug(tr("行数:%1, 列数:%2").arg(nRows).arg(nCols));
#endif
// 读取扳手名称
if(workSheet->cellAt(5, 1) == nullptr||workSheet->cellAt(1, 3) == nullptr)
{
QMessageBox::warning(this, "Warning!", "文件格式错误!", QMessageBox::Ok, QMessageBox::Ok);
delete param;
param = nullptr;
return;
}
param->name = workSheet->cellAt(5, 1)->value().toString().toStdString();
// 制式
QString strFormat = workSheet->cellAt(1, 3)->value().toString();
if(workSheet->cellAt(1, 3) == nullptr)
{
QMessageBox::warning(this, "Warning!", "文件格式错误!", QMessageBox::Ok, QMessageBox::Ok);
delete param;
param = nullptr;
return;
}
//param->format = (format->dynamicCall("Value").toString().compare("公制") == 0) ? 0 : 1;
unsigned char format = (strFormat.compare("公制") == 0) ? 0 : 1;
//QMessageBox::warning(this, "Warning!", strFormat, QMessageBox::Ok, QMessageBox::Ok);
// 判断直径数量
unsigned char diameterCount = 0;
while(1)
{
// if(5 + diameterCount >= nRows)
// {
// break;
// }
if(workSheet->cellAt(5 + diameterCount, 3) == nullptr)
{
break;
}
QString strDiameter = workSheet->cellAt(5 + diameterCount, 3)->value().toString();
if(strDiameter.isEmpty())
{
break;
}
std::string strDiameter1 = strDiameter. toStdString();
if(format == 1)
{
strDiameter1 = BsBoltDiameterToStr(strDiameter).toStdString();
}
param->format[fmtIndex].diameterList.push_back(strDiameter1);
diameterCount++;
}
// 判断强度等级数量
unsigned char typeCount = 0;
while(1)
{
// if(4 + 2 * typeCount >= nCols)
// {
// break;
// }
if(workSheet->cellAt(2, 4 + 2 * typeCount) == nullptr)
{
break;
}
QString strType = workSheet->cellAt(2, 4 + 2 * typeCount)->value().toString();
if(strType.isEmpty())
{
break;
}
param->format[fmtIndex].typeList.push_back(strType.remove(QRegExp("\\s")).toStdString()); // 去除其中空格
typeCount++;
}
// 扭矩
for(int j=0; j<typeCount; j++)
{
for(int i=0; i<diameterCount; i++)
{
// 取N.m
param->format[fmtIndex].torqueList.push_back(workSheet->cellAt(5+i, 4 + 2 * j + 1)->value().toInt());
}
}
}
/////////
// 测试打印
// QString str;
// for(int i=0; i<2; i++)
// {
// str.append(tr("name : %1\n").arg(QString::fromStdString(param->name)));
// //str.append(tr("format : %1\n").arg(param->format));
// str.append(tr("format : %1\n").arg(i));
// str.append(tr("diameterCount : %1\n").arg(param->format[i].diameterList.size()));
// std::list<std::string>::iterator diameterIter = param->format[i].diameterList.begin();
// while(diameterIter != param->format[i].diameterList.end())
// {
// str.append(tr("%1,").arg(QString::fromStdString(*diameterIter)));
// diameterIter++;
// }
// str.append(tr("\n"));
// str.append(tr("typeCount : %1\n").arg(param->format[i].typeList.size()));
// std::list<std::string>::iterator typeIter = param->format[i].typeList.begin();
// while(typeIter != param->format[i].typeList.end())
// {
// str.append(tr("%1,").arg(QString::fromStdString(*typeIter)));
// typeIter++;
// }
// str.append(tr("\n"));
// std::list<int>::iterator torqueIter = param->format[i].torqueList.begin();
// while(torqueIter != param->format[i].torqueList.end())
// {
// str.append(tr("%1,").arg(*torqueIter));
// torqueIter++;
// }
// str.append(tr("\n"));
// }
// QMessageBox::warning(this, "Warning!", str, QMessageBox::Ok, QMessageBox::Ok);
//
BoltModeStructData *data = new BoltModeStructData();
data->setData(param);
// 超时时间设置为5秒
SetupService::GetInstance()->SendData(FRAME_CMD_SET_PARAM_BOLT, data, 5000);
}
//
// 角度模式
//
void AdvanceSetupWidget::slot_pushButtonAngleModeSettingsOpenFile_clicked()
{
QString fileName = QFileDialog::getOpenFileName(
this,
tr("打开文件(open a file)"),
"C:/",
tr("Excel files(*.xls *.xlsx);;text files(*.csv);;All files(*.*)"));
ui->lineEditAngleModeSettingsFilePath->setText(fileName);
}
//
// 角度模式
//
void AdvanceSetupWidget::slot_pushButtonAngleModeSettings_clicked()
{
QString fileName = ui->lineEditAngleModeSettingsFilePath->text();
if (fileName.isEmpty())
{
QMessageBox::warning(this, "Warning!", "请选择文件!");
return;
}
QFileInfo file(fileName);
if(file.exists()==false)
{
QMessageBox::warning(this, "Warning!", "文件不存在!");
return;
}
QXlsx::Document xlsx(fileName);
QXlsx::Workbook *workBook = xlsx.workbook();
QXlsx::Worksheet *workSheet = static_cast<QXlsx::Worksheet*>(workBook->sheet(0));
int nRows = workSheet->dimension().rowCount();
int nCols = workSheet->dimension().columnCount();
#ifdef _DEBUG
logDebug(tr("行数:%1, 列数:%2").arg(nRows).arg(nCols));
#endif
if(workSheet->cellAt(2, 1) == nullptr)
{
QMessageBox::warning(this, "Warning!", "文件格式错误!", QMessageBox::Ok, QMessageBox::Ok);
logInfo("文件格式错误!");
return;
}
std::list<short> param;
param.push_back( workSheet->cellAt(2, 1)->value().toInt());
if(workSheet->cellAt(3, 1) != nullptr)
{
param.push_back( workSheet->cellAt(3, 1)->value().toInt());
}
/////////
// 测试打印
// QString str;
// str.append(tr("angle : %1\n").arg(param));
// QMessageBox::warning(this, "Warning!", str, QMessageBox::Ok, QMessageBox::Ok);
//
AngleModeStructData *data = new AngleModeStructData();
data->setData(param);
// 超时时间设置为1秒
SetupService::GetInstance()->SendData(FRAME_CMD_SET_PARAM_ANGLE, data->toByteStr(), 2000);
}
//
// 档位模式
//
void AdvanceSetupWidget::slot_pushButtonGearPresetModeSettingsOpenFile_clicked()
{
QString fileName = QFileDialog::getOpenFileName(
this,
tr("打开文件(open a file)"),
"C:/",
tr("Excel files(*.xls *.xlsx);;text files(*.csv);;All files(*.*)"));
ui->lineEditGearPresetModeSettingsFilePath->setText(fileName);
}
//
// 档位预设模式确认按钮点击
//
void AdvanceSetupWidget::slot_pushButtonGearPresetModeSettings_clicked()
{
QString fileName = ui->lineEditGearPresetModeSettingsFilePath->text();
if (fileName.isEmpty())
{
QMessageBox::warning(this, "Warning!", "请选择文件!");
return;
}
QFileInfo file(fileName);
if(file.exists()==false)
{
QMessageBox::warning(this, "Warning!", "文件不存在!");
return;
}
QXlsx::Document xlsx(fileName);
QXlsx::Workbook *workBook = xlsx.workbook();
QXlsx::Worksheet *workSheet = static_cast<QXlsx::Worksheet*>(workBook->sheet(0));
int nRows = workSheet->dimension().rowCount();
int nCols = workSheet->dimension().columnCount();
#ifdef _DEBUG
logDebug(tr("行数:%1, 列数:%2").arg(nRows).arg(nCols));
#endif
GearModeParam_t *param = new GearModeParam_t();
int nLevelIndex = 0;
while(1)
{
if(workSheet->cellAt(2 + nLevelIndex, 1) == nullptr || workSheet->cellAt(2 + nLevelIndex, 2) == nullptr)
{
break;
}
QString strLevel = workSheet->cellAt(2 + nLevelIndex, 1)->value().toString();
QString strValue = workSheet->cellAt(2 + nLevelIndex, 2)->value().toString();
if(strLevel.isEmpty() || strValue.isEmpty())
{
break;
}
unsigned int nLevel = (unsigned char)strLevel.toUInt();
if(nLevel > 255)
{
QMessageBox::warning(this, "Warning!", tr("数据错误!"), QMessageBox::Ok, QMessageBox::Ok);
delete param;
param = nullptr;
return;
}
unsigned int nValue = strValue.toDouble() * 10000; // 档位值需乘以10000
GearModeParam gearModeParam((unsigned char)nLevel, nValue);
param->datas.push_back(gearModeParam);
if(m_currType != 2 && workSheet->cellAt(2 + nLevelIndex, 3) != nullptr) //m_currType = 2是充电扳手 23.8.30
{
QString strValue1;
unsigned int nValue1 = 0;
strValue1 = workSheet->cellAt(2 + nLevelIndex, 3)->value().toString();
nValue1=strValue1.toDouble()*10000;
GearModeParam gearModeParam1((unsigned char)nLevel, nValue1);
param->datas.push_back(gearModeParam1);
}
nLevelIndex++;
}
GearModeStructData *data = new GearModeStructData(param);
// 超时时间设置为2秒
SetupService::GetInstance()->SendData(FRAME_CMD_SET_PARAM_GEAR, data, 2000);
}
//
// 传感器模式打开文件按钮点击
//
void AdvanceSetupWidget::slot_pushButtonSensorModeSettingsOpenFile_clicked()
{
QString fileName = QFileDialog::getOpenFileName(
this,
tr("打开文件(open a file)"),
"C:/",
tr("Excel files(*.xls *.xlsx);;text files(*.csv);;All files(*.*)"));
ui->lineEditSensorModeSettingsFilePath->setText(fileName);
}
//
// 传感器模式确认按钮点击
//
void AdvanceSetupWidget::slot_pushButtonSensorModeSettings_clicked()
{
QString fileName = ui->lineEditSensorModeSettingsFilePath->text();
if (fileName.isEmpty())
{
QMessageBox::warning(this, "Warning!", "请选择文件!");
return;
}
QFileInfo file(fileName);
if(file.exists()==false)
{
QMessageBox::warning(this, "Warning!", "文件不存在!");
return;
}
QXlsx::Document xlsx(fileName);
QXlsx::Workbook *workBook = xlsx.workbook();
QXlsx::Worksheet *workSheet = static_cast<QXlsx::Worksheet*>(workBook->sheet(0));
int nRows = workSheet->dimension().rowCount();
int nCols = workSheet->dimension().columnCount();
#ifdef _DEBUG
logDebug(tr("行数:%1, 列数:%2").arg(nRows).arg(nCols));
#endif
SensorModeParam_t tParam;
// 从第二行开始读取前两列Excel索引从1开始
for(int i=2; i<=nRows; i++)
{
if(workSheet->cellAt(i, 1) == nullptr || workSheet->cellAt(i, 2) == nullptr)
{
QMessageBox::warning(this, "Warning!", "文件格式错误!", QMessageBox::Ok, QMessageBox::Ok);
return;
}
QString strName = workSheet->cellAt(i, 1)->value().toString();
QString strValue = workSheet->cellAt(i, 2)->value().toString();
std::string name = strName.toStdString();
int value = strValue.toInt();
if(name.length() > 0)
{
#ifdef _DEBUG
logDebug(tr("%1:%2")
.arg(strName)
.arg(strValue));
#endif
//param.datas.insert(std::make_pair(name, value)); // std::map
SensorModeParam param(name, value);
tParam.datas.push_back(param);
}
}
// 设置参数
SensorModeStructData *data = new SensorModeStructData();
data->setData(tParam);
// 超时时间范围为2秒
SetupService::GetInstance()->SendData(FRAME_CMD_SET_PARAM_SENSOR, data, 2000);
}
//
//
//
void AdvanceSetupWidget::slot_pushButtonMenuInterfaceSettingsOpenFile_clicked()
{
QString fileName = QFileDialog::getOpenFileName(
this,
tr("打开文件(open a file)"),
"C:/",
tr("Excel files(*.xls *.xlsx);;text files(*.csv);;All files(*.*)"));
ui->lineEditMenuInterfaceSettingsFilePath->setText(fileName);
}
//
//
//
void AdvanceSetupWidget::slot_pushButtonMenuInterfaceSettings_clicked()
{
}
void AdvanceSetupWidget::slot_pushButtonFallbackSettings_clicked()
{
FallbackParam_t tParam;
tParam.angle = ui->lineEditFallbackAngle->text().toUShort();
tParam.ampere = (unsigned int)(ui->lineEditFallbackAnglecoefficient->text().toDouble()*100);
tParam.ampere2 = (unsigned int)(ui->lineEditFallbackAnglecoefficient_2->text().toDouble()*100);
// 设置参数
FallbackStructData *data = new FallbackStructData();
data->setData(tParam);
// 超时时间范围为1秒
SetupService::GetInstance()->SendData(FRAME_CMD_SET_PARAM_FALLBACK, data, 1000);
}
//
// 等待空闲
//
void AdvanceSetupWidget::waitForIdle()
{
while(SetupService::GetInstance()->currStatus() == SYS_STATUS_BUSY)
{
Utils::Sleep(10);
}//{QThread::msleep(5); }
}
//
// 工具锁定设置确定按钮包含三个指令1. 使用次数设置、密码设置、工具锁定设置
//
void AdvanceSetupWidget::slot_pushButtonToolsLockSettings_clicked()
{
logInfo(tr("请求设置使用次数..."));
SetupService::GetInstance()->SendData(FRAME_CMD_SET_USAGE_COUNT, Utils::intToByteStr(ui->lineEditUsageCount->text().toInt()));
waitForIdle();
logInfo(tr("请求设置密码..."));
SetupService::GetInstance()->SendData(FRAME_CMD_SET_PASSWORD, ui->lineEditPassword->text().toStdString());
waitForIdle();
logInfo(tr("请求设置锁定..."));
char c[2] = {0};
c[0] = 0x01; // 0x00 解锁0x01加锁
c[1] = '\0';
std::string s;
s.append(c, 1);
// 锁定不需要密码,本地也没有保存密码
//s.append(ui->lineEditToolsUnlock->text().toStdString());
SetupService::GetInstance()->SendData(FRAME_CMD_SET_LOCK_STATUS, s);
}
void AdvanceSetupWidget::slot_recvData(QString portName, unsigned char cmd, QByteArray recvData)
{
//QMessageBox::warning(this, "Warning!", "AdvanceSetupWidget::slot_recvData", QMessageBox::Ok, QMessageBox::Ok);
#ifdef _DEBUG
logInfo(tr("PORT:%1 >> Recv Data: CMD=[%2]%3").arg(portName).arg(cmd).arg(QString::fromStdString(getCmdName(cmd))));
#else
logInfo(tr("PORT:%1 >> Recv Data: CMD=%2").arg(portName).arg(QString::fromStdString(getCmdName(cmd))));
#endif
switch(cmd)
{
case FRAME_CMD_SET_LOCK_STATUS : processSetLockStatusRsp(portName, recvData); break;
case FRAME_CMD_SET_PASSWORD : processSetPasswordRsp(portName, recvData); break;
case FRAME_CMD_SET_USAGE_COUNT : processSetUsageCountRsp(portName, recvData); break;
case FRAME_CMD_SET_PARAM_FALLBACK: processSetParamFallbackRsp(portName, recvData); break;
case FRAME_CMD_SET_PARAM_TORQUE : processSetParamTorqueRsp(portName, recvData); break;
case FRAME_CMD_SET_PARAM_BOLT : processSetParamBoltRsp(portName, recvData); break;
case FRAME_CMD_SET_PARAM_ANGLE : processSetParamAngleRsp(portName, recvData); break;
case FRAME_CMD_SET_PARAM_GEAR : processSetParamGearRsp(portName, recvData); break;
case FRAME_CMD_SET_PARAM_SENSOR : processSetParamSensorRsp(portName, recvData); break;
default:
logInfo(tr("PORT:%1 >> Unsupported CMD Of Advance Setup[%2]!").arg(portName).arg(cmd));
break;
}
}
//
// 设置密码响应
//
void AdvanceSetupWidget::processSetPasswordRsp(QString portName, QByteArray data)
{
#ifdef _DEBUG
logDebug(tr("PORT:%1 >> SET PASSWORD SUCCESS[%2]").arg(portName).arg(Utils::strToHexStr(data.toStdString()).c_str()));
#else
logInfo(tr("PORT:%1 >> SET PASSWORD SUCCESS").arg(portName));
#endif
}
//
// 设置使用次数响应
//
void AdvanceSetupWidget::processSetUsageCountRsp(QString portName, QByteArray data)
{
#ifdef _DEBUG
logDebug(tr("PORT:%1 >> SET USAGE COUNT SUCCESS[%2]").arg(portName).arg(Utils::strToHexStr(data.toStdString()).c_str()));
#else
logInfo(tr("PORT:%1 >> SET USAGE COUNT SUCCESS").arg(portName));
#endif
}
//
// 设置参数响应
//
void AdvanceSetupWidget::processSetParamRsp(QString portName, QByteArray data)
{
#ifdef _DEBUG
logDebug(tr("PORT:%1 >> SET PARAM SUCCESS[%2]").arg(portName).arg(Utils::strToHexStr(data.toStdString()).c_str()));
#else
logInfo(tr("PORT:%1 >> SET PARAM SUCCESS").arg(portName));
#endif
}
void AdvanceSetupWidget::processSetParamTorqueRsp(QString portName, QByteArray data)
{
#ifdef _DEBUG
logDebug(tr("PORT:%1 >> SET PARAM TORQUE SUCCESS[%2]").arg(portName).arg(Utils::strToHexStr(data.toStdString()).c_str()));
#else
logInfo(tr("PORT:%1 >> SET PARAM TORQUE SUCCESS").arg(portName));
#endif
}
void AdvanceSetupWidget::processSetParamBoltRsp(QString portName, QByteArray data)
{
#ifdef _DEBUG
logDebug(tr("PORT:%1 >> SET PARAM BOLT SUCCESS[%2]").arg(portName).arg(Utils::strToHexStr(data.toStdString()).c_str()));
#else
logInfo(tr("PORT:%1 >> SET PARAM BOLT SUCCESS").arg(portName));
#endif
}
void AdvanceSetupWidget::processSetParamAngleRsp(QString portName, QByteArray data)
{
#ifdef _DEBUG
logDebug(tr("PORT:%1 >> SET PARAM ANGLE SUCCESS[%2]").arg(portName).arg(Utils::strToHexStr(data.toStdString()).c_str()));
#else
logInfo(tr("PORT:%1 >> SET PARAM ANGLE SUCCESS").arg(portName));
#endif
}
void AdvanceSetupWidget::processSetParamGearRsp(QString portName, QByteArray data)
{
#ifdef _DEBUG
logDebug(tr("PORT:%1 >> SET PARAM GEAR SUCCESS[%2]").arg(portName).arg(Utils::strToHexStr(data.toStdString()).c_str()));
#else
logInfo(tr("PORT:%1 >> SET PARAM GEAR SUCCESS").arg(portName));
#endif
}
void AdvanceSetupWidget::processSetParamSensorRsp(QString portName, QByteArray data)
{
#ifdef _DEBUG
logDebug(tr("PORT:%1 >> SET PARAM SENSOR SUCCESS[%2]").arg(portName).arg(Utils::strToHexStr(data.toStdString()).c_str()));
#else
logInfo(tr("PORT:%1 >> SET PARAM SENSOR SUCCESS").arg(portName));
#endif
}
void AdvanceSetupWidget::processSetParamFallbackRsp(QString portName, QByteArray data)
{
#ifdef _DEBUG
logDebug(tr("PORT:%1 >> SET PARAM FALLBACK SUCCESS[%2]").arg(portName).arg(Utils::strToHexStr(data.toStdString()).c_str()));
#else
logInfo(tr("PORT:%1 >> SET PARAM FALLBACK SUCCESS").arg(portName));
#endif
}
//
// 设置锁状态响应
//
void AdvanceSetupWidget::processSetLockStatusRsp(QString portName, QByteArray data)
{
#ifdef _DEBUG
logDebug(tr("PORT:%1 >> SET LOCK STATUS SUCCESS[%2]").arg(portName).arg(Utils::strToHexStr(data.toStdString()).c_str()));
#else
logInfo(tr("PORT:%1 >> SET LOCK STATUS SUCCESS").arg(portName));
#endif
}
void AdvanceSetupWidget::showTypeDefault()
{
ui->labelMenuInterfaceSettings->show();
ui->widgetMenuInterfaceSettings->show();
ui->pushButtonMenuInterfaceSettings->show();
ui->labelFallbackSettings->hide();
ui->widgetFallbackSettings->hide();
ui->pushButtonFallbackSettings->hide();
}
void AdvanceSetupWidget::showType1()
{
ui->labelMenuInterfaceSettings->hide();
ui->widgetMenuInterfaceSettings->hide();
ui->pushButtonMenuInterfaceSettings->hide();
ui->labelFallbackSettings->show();
ui->widgetFallbackSettings->show();
ui->pushButtonFallbackSettings->show();
}
void AdvanceSetupWidget::showType2()
{
ui->labelMenuInterfaceSettings->hide();
ui->widgetMenuInterfaceSettings->hide();
ui->pushButtonMenuInterfaceSettings->hide();
ui->labelFallbackSettings->show();
ui->widgetFallbackSettings->show();
ui->pushButtonFallbackSettings->show();
}
void AdvanceSetupWidget::showType4()
{
showTypeDefault();
}
void AdvanceSetupWidget::showType8()
{
showTypeDefault();
}
void AdvanceSetupWidget::setType(int type)
{
if(type == 1)
{
showType1();
}
else if(type == 2)
{
showType2();
}
else if(type == 4)
{
showType4();
}
else if(type == 8)
{
showType8();
}
m_type = type;
}
void AdvanceSetupWidget::on_lineEditFallbackAngle_textChanged(const QString &arg1)
{
if(arg1.isEmpty())
{
m_fallbackAngle = "";
}
else
{
if(arg1.contains(QRegExp("^\\d+$"))) // 纯数字
{
if(arg1.toInt() >= 0 && arg1.toInt() <= 360)
{
if(arg1.length() > 1 && arg1.at(0).toLatin1() == '0')
{
m_fallbackAngle = arg1.right(arg1.length() - 1);
ui->lineEditFallbackAngle->setText(m_fallbackAngle);
}
else
{
m_fallbackAngle = arg1;
}
}
else
{
ui->lineEditFallbackAngle->setText(m_fallbackAngle); // 恢复原样
}
}
else
{
ui->lineEditFallbackAngle->setText(m_fallbackAngle); // 恢复原样
}
}
}
void AdvanceSetupWidget::on_lineEditFallbackAnglecoefficient_textChanged(const QString &arg1)
{
if(arg1.isEmpty())
{
m_fallbackAmpere = "";
}
else
{
//if(arg1.contains(QRegExp("^(0?[0-9]|1[0-9])(\.([0-9]{1})?)?$")))
//if(arg1.contains(QRegExp("^(0?[0-9]|[0-9][0-9]|[0-9][0-9][0-9]|[0-9][0-9][0-9][0-9]|1[0-9][0-9][0-9][0-9])(\.([0-9]{1})?)?$")))
if(arg1.contains(QRegExp("^(0?[0-9]{1,4}|1[0-9][0-9][0-9][0-9])(\.([0-9]{0,2})?)?$")))
{
if(arg1.toDouble() >= 0.0 && arg1.toDouble() <= 10000.0)
{
m_fallbackAmpere = arg1;
}
else
{
ui->lineEditFallbackAnglecoefficient->setText(m_fallbackAmpere); // 恢复原样
}
}
else
{
ui->lineEditFallbackAnglecoefficient->setText(m_fallbackAmpere); // 恢复原样
}
}
}
void AdvanceSetupWidget::on_lineEditFallbackAnglecoefficient_2_textChanged(const QString &arg1)
{
if(arg1.isEmpty())
{
m_fallbackAmpere_2 = "";
}
else
{
//if(arg1.contains(QRegExp("^(0?[0-9]|1[0-9])(\.([0-9]{1})?)?$")))
//if(arg1.contains(QRegExp("^(0?[0-9]|[0-9][0-9]|[0-9][0-9][0-9]|[0-9][0-9][0-9][0-9]|1[0-9][0-9][0-9][0-9])(\.([0-9]{1})?)?$")))
if(arg1.contains(QRegExp("^(0?[0-9]{1,4}|1[0-9][0-9][0-9][0-9])(\.([0-9]{0,2})?)?$")))
{
if(arg1.toDouble() >= 0.0 && arg1.toDouble() <= 10000.0)
{
m_fallbackAmpere_2 = arg1;
}
else
{
ui->lineEditFallbackAnglecoefficient_2->setText(m_fallbackAmpere_2); // 恢复原样
}
}
else
{
ui->lineEditFallbackAnglecoefficient_2->setText(m_fallbackAmpere_2); // 恢复原样
}
}
}