主要功能可用
This commit is contained in:
@@ -9,10 +9,10 @@ P401_CuttingPage::P401_CuttingPage(QWidget *parent) :
|
||||
{
|
||||
ui->setupUi(this);
|
||||
|
||||
QTimer::singleShot(10, this, &P401_CuttingPage::WinInit);
|
||||
// QTimer::singleShot(1000, this, &P401_CuttingPage::WinInit);
|
||||
|
||||
// QTimer::singleShot(2000, this, &P401_CuttingPage::Show3D);
|
||||
qDebug()<<"P401_CuttingPage 初始化完成!";
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -25,7 +25,7 @@ void P401_CuttingPage::WinInit(){
|
||||
|
||||
for (int row = 1; row < CutConditionConfigFile.size()-1; ++row)
|
||||
{
|
||||
QString TextObjName = QString("Text_SSConditions_%1").arg(row);
|
||||
QString TextObjName = QString("Cut_SSConditions_%1").arg(row);
|
||||
QLabel* Label = findChild<QLabel*>(TextObjName);
|
||||
if (Label) {
|
||||
QString Text = CutConditionConfigFile.at(row)[1];
|
||||
@@ -37,12 +37,12 @@ void P401_CuttingPage::WinInit(){
|
||||
FalseColor.append(CutConditionConfigFile.at(row)[3]);
|
||||
}
|
||||
|
||||
// 现在 ui->CPW_1 已经是一个 CurvePlotWidget*
|
||||
ui->CPW_1->addSeries("电机电流U", Qt::green);
|
||||
ui->CPW_1->addSeries("电机电流V", Qt::blue);
|
||||
ui->CPW_1->addSeries("电机电流W", Qt::darkCyan);
|
||||
// 现在 ui->CPW_1 已经是一个 CurvePlotWidget*
|
||||
ui->CPW_2->addSeries("电机温度", Qt::green);
|
||||
// 现在 ui->Cut_CPW_1 已经是一个 CurvePlotWidget*
|
||||
ui->Cut_CPW_1->addSeries("电机电流U", Qt::green);
|
||||
ui->Cut_CPW_1->addSeries("电机电流V", Qt::blue);
|
||||
ui->Cut_CPW_1->addSeries("电机电流W", Qt::darkCyan);
|
||||
// 现在 ui->Cut_CPW_1 已经是一个 CurvePlotWidget*
|
||||
ui->Cut_CPW_2->addSeries("电机温度", Qt::green);
|
||||
|
||||
|
||||
//所用定时器初始化
|
||||
@@ -54,7 +54,7 @@ void P401_CuttingPage::WinInit(){
|
||||
//所用定时器初始化
|
||||
QTimer* TrailRefresh_Timer = new QTimer(this);
|
||||
connect(TrailRefresh_Timer, &QTimer::timeout, this, &P401_CuttingPage::TrailRefreshTimeOut);
|
||||
TrailRefresh_Timer->setInterval(ConfigFiles().TrailRefreshTime * 1000); // 设置定时器间隔为 1000 毫秒(1 秒)
|
||||
TrailRefresh_Timer->setInterval(10000); // 设置定时器间隔为 1000 毫秒(1 秒)
|
||||
TrailRefresh_Timer->start();
|
||||
}
|
||||
void P401_CuttingPage::Show3D()
|
||||
@@ -166,85 +166,116 @@ void P401_CuttingPage::SetProgressBar(QProgressBar *PB,QLCDNumber *LCD,const QSt
|
||||
}
|
||||
void P401_CuttingPage::UIRefreshTimeOut()
|
||||
{
|
||||
if(!gPageIndexStr.contains("P401"))
|
||||
if(!gPageIndexStr.contains("P04"))
|
||||
return;
|
||||
/************************************* 电机基本信息 *************************************/
|
||||
// 从OPC节点获取切割设备电机相关的状态数据(32位无符号整数)
|
||||
uint32_t PB_Group1 = getNodeValue("PB_Curr_Cut.PageGroup1").toUInt(); // 电流显示组1数据
|
||||
uint32_t PB_Group2 = getNodeValue("PB_Curr_Cut.PageGroup2").toUInt(); // 电流显示组2数据
|
||||
uint32_t PB_MotorTemp = getNodeValue("PB_Temp_Cut.PageGroup").toUInt(); // 电机温度显示数据
|
||||
uint32_t SSConditions = getNodeValue("StartStopConditions.Cut").toUInt(); // 启停条件状态数据
|
||||
|
||||
// 从32位数据中提取16位百分比值(高16位和低16位拆分)
|
||||
uint16_t PercentageCurU = static_cast<uint16_t>(PB_Group1 >> 16); // U相电流百分比(高16位)
|
||||
uint16_t PercentageCurV = static_cast<uint16_t>(PB_Group1 & 0xFFFF); // V相电流百分比(低16位)
|
||||
uint16_t PercentageCurW = static_cast<uint16_t>(PB_Group2 >> 16); // W相电流百分比(高16位)
|
||||
uint16_t PercentageTmpColor = static_cast<uint16_t>(PB_Group2 & 0xFFFF); // 温度颜色百分比(低16位)
|
||||
uint16_t PercentageMotorTemp= static_cast<uint16_t>(PB_MotorTemp >> 16); // 电机温度百分比(高16位)
|
||||
uint16_t ColorTemp = static_cast<uint16_t>(PB_MotorTemp & 0xFFFF); // 温度颜色值(低16位)
|
||||
|
||||
// 解析颜色值(从百分比中提取个位、十位、百位)
|
||||
uint8_t ColorU = (PercentageTmpColor / 10) % 10; // U相颜色值(十位)
|
||||
uint8_t ColorV = (PercentageTmpColor / 100) % 10; // V相颜色值(百位)
|
||||
uint8_t ColorW = PercentageTmpColor % 10; // W相颜色值(个位)
|
||||
|
||||
// 设置进度条显示(电流和温度)
|
||||
SetProgressBar(ui->PB_Cur_1, PercentageCurU, ColorU, glMotorCurColor); // U相电流进度条
|
||||
SetProgressBar(ui->PB_Cur_2, PercentageCurV, ColorV, glMotorCurColor); // V相电流进度条
|
||||
SetProgressBar(ui->PB_Cur_3, PercentageCurW, ColorW, glMotorCurColor); // W相电流进度条
|
||||
SetProgressBar(ui->PB_Temp, PercentageMotorTemp, ColorTemp, glMotorTempColor); // 电机温度进度条
|
||||
|
||||
// 在LCD上显示实际测量值(电流和温度)
|
||||
ui->LCD_Cur_1->display(getNodeValue("IN_PhaseCut.Filtered30_U").toReal()); // U相电流实际值
|
||||
ui->LCD_Cur_2->display(getNodeValue("IN_PhaseCut.Filtered30_V").toReal()); // V相电流实际值
|
||||
ui->LCD_Cur_3->display(getNodeValue("IN_PhaseCut.Filtered30_W").toReal()); // W相电流实际值
|
||||
ui->LCD_Temp->display(getNodeValue("IN_PhaseCut.Filtered_Temp").toReal()); // 电机温度实际值
|
||||
|
||||
// 更新32个启停条件状态标签的显示样式
|
||||
for (int i = 0; i < 32; ++i)
|
||||
{
|
||||
// 根据索引查找对应的标签控件
|
||||
QLabel* Label = findChild<QLabel*>(QString("Text_SSConditions_%1").arg(i+1));
|
||||
// 如果找到标签
|
||||
if (Label){
|
||||
// 基础样式:默认背景图
|
||||
QString StyleStr = "border-image: url(:/Frames/null.png);\n";
|
||||
|
||||
// 根据状态位设置不同颜色(True/False对应不同样式)
|
||||
StyleStr += getBitOf32Data(SSConditions, i, false) ? TrueColor[i] + "\n" : FalseColor[i] + "\n";
|
||||
// 应用样式到标签
|
||||
|
||||
Label->setStyleSheet(StyleStr);
|
||||
}
|
||||
}
|
||||
/**************************************************************************************/
|
||||
|
||||
|
||||
|
||||
/************************************ 截割油缸压力信息 ***********************************/
|
||||
SetProgressBar(ui->PB_1,ui->LCD_1,"PB_Pressure_Cut.PageGroup","IN_Sersor.Pressure_Cut");
|
||||
/**************************************************************************************/
|
||||
|
||||
/************************************ 掏槽油缸压力信息 ***********************************/
|
||||
SetProgressBar(ui->PB_2,ui->LCD_2,"PB_Pressure_Cutt.PageGroup","IN_Sersor.Pressure_Cutt");
|
||||
/**************************************************************************************/
|
||||
|
||||
/************************************ 截割喷雾压力信息 ***********************************/
|
||||
SetProgressBar(ui->PB_3,ui->LCD_3,"PB_Pressure_CutSpray.PageGroup","IN_Sersor.Pressure_CutSpray");
|
||||
/**************************************************************************************/
|
||||
|
||||
/************************************ 截割喷雾流量信息 ***********************************/
|
||||
SetProgressBar(ui->PB_4,ui->LCD_4,"PB_SprayFlow_Cut.PageGroup","IN_Sersor.SprayFlow_Cut");
|
||||
/**************************************************************************************/
|
||||
|
||||
|
||||
|
||||
// 使用多核心管理器异步获取切割页面数据
|
||||
//MultiCoreManager::instance()->submitTask([this]() {
|
||||
// 准备数据容器
|
||||
QMap<QString, QVariant> cuttingData;
|
||||
|
||||
// 异步读取切割页面数据
|
||||
cuttingData["PB_Group1"] = getNodeValue("PB_Curr_Cut.PageGroup1");
|
||||
cuttingData["PB_Group2"] = getNodeValue("PB_Curr_Cut.PageGroup2");
|
||||
cuttingData["PB_MotorTemp"] = getNodeValue("PB_Temp_Cut.PageGroup");
|
||||
cuttingData["SSConditions"] = getNodeValue("StartStopConditions.Cut");
|
||||
cuttingData["IN_PhaseCut_Filtered30_U"] = getNodeValue("IN_PhaseCut.Filtered30_U");
|
||||
cuttingData["IN_PhaseCut_Filtered30_V"] = getNodeValue("IN_PhaseCut.Filtered30_V");
|
||||
cuttingData["IN_PhaseCut_Filtered30_W"] = getNodeValue("IN_PhaseCut.Filtered30_W");
|
||||
cuttingData["IN_PhaseCut_Filtered_Temp"] = getNodeValue("IN_PhaseCut.Filtered_Temp");
|
||||
cuttingData["PB_Pressure_Cut"] = getNodeValue("PB_Pressure_Cut.PageGroup");
|
||||
cuttingData["IN_Sersor_Pressure_Cut"] = getNodeValue("IN_Sersor.Pressure_Cut");
|
||||
cuttingData["PB_Pressure_Cutt"] = getNodeValue("PB_Pressure_Cutt.PageGroup");
|
||||
cuttingData["IN_Sersor_Pressure_Cutt"] = getNodeValue("IN_Sersor.Pressure_Cutt");
|
||||
cuttingData["PB_Pressure_CutSpray"] = getNodeValue("PB_Pressure_CutSpray.PageGroup");
|
||||
cuttingData["IN_Sersor_Pressure_CutSpray"] = getNodeValue("IN_Sersor.Pressure_CutSpray");
|
||||
cuttingData["PB_SprayFlow_Cut"] = getNodeValue("PB_SprayFlow_Cut.PageGroup");
|
||||
cuttingData["IN_Sersor_SprayFlow_Cut"] = getNodeValue("IN_Sersor.SprayFlow_Cut");
|
||||
|
||||
// 在主线程中更新UI
|
||||
QMetaObject::invokeMethod(this, [this, cuttingData]() {
|
||||
/************************************* 电机基本信息 *************************************/
|
||||
// 从32位数据中提取16位百分比值
|
||||
uint32_t PB_Group1 = cuttingData["PB_Group1"].toUInt();
|
||||
uint32_t PB_Group2 = cuttingData["PB_Group2"].toUInt();
|
||||
uint32_t PB_MotorTemp = cuttingData["PB_MotorTemp"].toUInt();
|
||||
uint32_t SSConditions = cuttingData["SSConditions"].toUInt();
|
||||
|
||||
uint16_t PercentageCurU = static_cast<uint16_t>(PB_Group1 >> 16);
|
||||
uint16_t PercentageCurV = static_cast<uint16_t>(PB_Group1 & 0xFFFF);
|
||||
uint16_t PercentageCurW = static_cast<uint16_t>(PB_Group2 >> 16);
|
||||
uint16_t PercentageTmpColor = static_cast<uint16_t>(PB_Group2 & 0xFFFF);
|
||||
uint16_t PercentageMotorTemp = static_cast<uint16_t>(PB_MotorTemp >> 16);
|
||||
uint16_t ColorTemp = static_cast<uint16_t>(PB_MotorTemp & 0xFFFF);
|
||||
|
||||
uint8_t ColorU = (PercentageTmpColor / 10) % 10;
|
||||
uint8_t ColorV = (PercentageTmpColor / 100) % 10;
|
||||
uint8_t ColorW = PercentageTmpColor % 10;
|
||||
|
||||
// 设置进度条显示
|
||||
SetProgressBar(ui->PB_Cur_1, PercentageCurU, ColorU, glMotorCurColor);
|
||||
SetProgressBar(ui->PB_Cur_2, PercentageCurV, ColorV, glMotorCurColor);
|
||||
SetProgressBar(ui->PB_Cur_3, PercentageCurW, ColorW, glMotorCurColor);
|
||||
SetProgressBar(ui->PB_Temp, PercentageMotorTemp, ColorTemp, glMotorTempColor);
|
||||
|
||||
// 在LCD上显示实际测量值
|
||||
ui->LCD_Cur_1->display(cuttingData["IN_PhaseCut_Filtered30_U"].toReal());
|
||||
ui->LCD_Cur_2->display(cuttingData["IN_PhaseCut_Filtered30_V"].toReal());
|
||||
ui->LCD_Cur_3->display(cuttingData["IN_PhaseCut_Filtered30_W"].toReal());
|
||||
ui->LCD_Temp->display(cuttingData["IN_PhaseCut_Filtered_Temp"].toReal());
|
||||
|
||||
// 更新32个启停条件状态标签的显示样式
|
||||
for (int i = 0; i < 32; ++i)
|
||||
{
|
||||
QLabel* Label = findChild<QLabel*>(QString("Cut_SSConditions_%1").arg(i+1));
|
||||
if (Label) {
|
||||
QString StyleStr = "border-image: url(:/Frames/null.png);\n";
|
||||
StyleStr += getBitOf32Data(SSConditions, i, false) ? TrueColor[i] + "\n" : FalseColor[i] + "\n";
|
||||
Label->setStyleSheet(StyleStr);
|
||||
}
|
||||
}
|
||||
/**************************************************************************************/
|
||||
|
||||
/************************************ 截割油缸压力信息 ***********************************/
|
||||
uint32_t pressureCutGroup = cuttingData["PB_Pressure_Cut"].toUInt();
|
||||
uint16_t pressureCutPercentage = static_cast<uint16_t>(pressureCutGroup >> 16);
|
||||
uint16_t pressureCutColorIndex = static_cast<uint16_t>(pressureCutGroup & 0xFFFF);
|
||||
SetProgressBar(ui->PB_1, pressureCutPercentage, pressureCutColorIndex, glMotorCurColor);
|
||||
ui->LCD_1->display(cuttingData["IN_Sersor_Pressure_Cut"].toReal());
|
||||
/**************************************************************************************/
|
||||
|
||||
/************************************ 掏槽油缸压力信息 ***********************************/
|
||||
uint32_t pressureCuttGroup = cuttingData["PB_Pressure_Cutt"].toUInt();
|
||||
uint16_t pressureCuttPercentage = static_cast<uint16_t>(pressureCuttGroup >> 16);
|
||||
uint16_t pressureCuttColorIndex = static_cast<uint16_t>(pressureCuttGroup & 0xFFFF);
|
||||
SetProgressBar(ui->PB_2, pressureCuttPercentage, pressureCuttColorIndex, glMotorCurColor);
|
||||
ui->LCD_2->display(cuttingData["IN_Sersor_Pressure_Cutt"].toReal());
|
||||
/**************************************************************************************/
|
||||
|
||||
/************************************ 截割喷雾压力信息 ***********************************/
|
||||
uint32_t pressureCutSprayGroup = cuttingData["PB_Pressure_CutSpray"].toUInt();
|
||||
uint16_t pressureCutSprayPercentage = static_cast<uint16_t>(pressureCutSprayGroup >> 16);
|
||||
uint16_t pressureCutSprayColorIndex = static_cast<uint16_t>(pressureCutSprayGroup & 0xFFFF);
|
||||
SetProgressBar(ui->PB_3, pressureCutSprayPercentage, pressureCutSprayColorIndex, glMotorCurColor);
|
||||
ui->LCD_3->display(cuttingData["IN_Sersor_Pressure_CutSpray"].toReal());
|
||||
/**************************************************************************************/
|
||||
|
||||
/************************************ 截割喷雾流量信息 ***********************************/
|
||||
uint32_t sprayFlowCutGroup = cuttingData["PB_SprayFlow_Cut"].toUInt();
|
||||
uint16_t sprayFlowCutPercentage = static_cast<uint16_t>(sprayFlowCutGroup >> 16);
|
||||
uint16_t sprayFlowCutColorIndex = static_cast<uint16_t>(sprayFlowCutGroup & 0xFFFF);
|
||||
SetProgressBar(ui->PB_4, sprayFlowCutPercentage, sprayFlowCutColorIndex, glMotorCurColor);
|
||||
ui->LCD_4->display(cuttingData["IN_Sersor_SprayFlow_Cut"].toReal());
|
||||
/**************************************************************************************/
|
||||
}, Qt::QueuedConnection);
|
||||
// }, "cutting_page_ui_refresh");
|
||||
}
|
||||
|
||||
void P401_CuttingPage::TrailRefreshTimeOut(){
|
||||
ui->CPW_1->appendPoint(0, getNodeValue("IN_PhaseCut.Filtered30_U") .toReal());
|
||||
ui->CPW_1->appendPoint(1, getNodeValue("IN_PhaseCut.Filtered30_V") .toReal());
|
||||
ui->CPW_1->appendPoint(2, getNodeValue("IN_PhaseCut.Filtered30_W") .toReal());
|
||||
ui->CPW_2->appendPoint(0,getNodeValue("IN_PhaseCut.Filtered_Temp") .toDouble());
|
||||
ui->Cut_CPW_1->appendPoint(0, getNodeValue("IN_PhaseCut.Filtered30_U") .toReal());
|
||||
ui->Cut_CPW_1->appendPoint(1, getNodeValue("IN_PhaseCut.Filtered30_V") .toReal());
|
||||
ui->Cut_CPW_1->appendPoint(2, getNodeValue("IN_PhaseCut.Filtered30_W") .toReal());
|
||||
ui->Cut_CPW_2->appendPoint(0,getNodeValue("IN_PhaseCut.Filtered_Temp") .toDouble());
|
||||
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user