#include "P01_MianPage.h" #include "ui_P01_MianPage.h" #include #include #include #include #include #include #include #include #include #include #include int TransportPosMaxX = 0; int TransportPosMaxY = 0; int OldRollerPos[2][2]={{0,0},{0,0}}; QImage Brush[2]; QElapsedTimer TmpTime; P01_MianPage::P01_MianPage(QWidget *parent) : QWidget(parent), ui(new Ui::P01_MianPage), mObjLoader(nullptr), m_workerThread(nullptr), m_workerLoader(nullptr), m_loadingStep(0), UIRefresh_Timer(nullptr), TrailRefresh_Timer(nullptr) { ui->setupUi(this); QTimer::singleShot(10, this, &P01_MianPage::PageInit); // QTimer::singleShot(1000, this, &P01_MianPage::Show3D); } qint64 JgTime; void P01_MianPage::PageInit() { TmpTime.start(); QPixmap pix(":/Icos/Icos/Sursor.png"); QCursor custom(pix, pix.width()/2, pix.height()/2); setCursor(custom); setWindowFlag(Qt::FramelessWindowHint); // 设置窗口无边框,设置后窗口无法移动 uiInitTransportPos(85,85); QMovie *MLoading = new QMovie(ConfigurationPath + "Gif动画/Radar.gif"); //qDebug() << "当前工作文件夹:" << QDir::currentPath(); ui->Gif_Radar->setMovie(MLoading); // 1. 设置要显示的 GIF 动画图片 ui->Gif_Radar->setScaledContents(true); MLoading->start(); // 2. 启动动画 ui->Gif_Radar->show(); //所用定时器初始化 UIRefresh_Timer = new QTimer(this); connect(UIRefresh_Timer, &QTimer::timeout, this, &P01_MianPage::UIRefreshTimeOut); UIRefresh_Timer->setInterval(100); // 设置定时器间隔为 1000 毫秒(1 秒) UIRefresh_Timer->start(); //所用定时器初始化 TrailRefresh_Timer = new QTimer(this); connect(TrailRefresh_Timer, &QTimer::timeout, this, &P01_MianPage::TrailRefreshTimeOut); TrailRefresh_Timer->setInterval(1000); // 设置定时器间隔为 1000 毫秒(1 秒) TrailRefresh_Timer->start(); qDebug()<<"初始化执行完成后,消耗时间"<isRunning()) { m_workerThread->quit(); m_workerThread->wait(1000); // 等待1秒 if (m_workerThread->isRunning()) { m_workerThread->terminate(); // 强制终止 } m_workerThread->deleteLater(); m_workerThread = nullptr; } // 清理ObjLoader对象 if (mObjLoader) { mObjLoader->deleteLater(); mObjLoader = nullptr; } if (m_workerLoader) { m_workerLoader->deleteLater(); m_workerLoader = nullptr; } // 清理PageInit中创建的定时器 if (UIRefresh_Timer) { UIRefresh_Timer->stop(); UIRefresh_Timer->deleteLater(); UIRefresh_Timer = nullptr; } if (TrailRefresh_Timer) { TrailRefresh_Timer->stop(); TrailRefresh_Timer->deleteLater(); TrailRefresh_Timer = nullptr; } // 清理QMovie对象 if (ui->Gif_Radar->movie()) { ui->Gif_Radar->movie()->stop(); delete ui->Gif_Radar->movie(); ui->Gif_Radar->setMovie(nullptr); } delete ui; } void P01_MianPage::Show3D() { // 初始化加载状态 m_loadingStep = 0; m_modelPreprocessResults.clear(); // 初始化3D加载器 DevName3D = "整机装配"; mObjLoader = new ObjLoader(); mObjLoader->setEnDebug(true); mObjLoader->init3DScene(ui->Frame_Dev3D); mObjLoader->setCameraSpeed(200.0, 200.0); // 修复:正确初始化QStringList(移除错误的=号赋值方式) m_pendingDevices << "整机装配" << "运输机" << "截割部" << "左装载机" << "右装载机" << "滚筒"; // 创建工作线程用于预处理 m_workerThread = new QThread(this); m_workerLoader = new ObjLoader(); m_workerLoader->moveToThread(m_workerThread); // 连接预处理完成信号(使用现代信号槽语法) connect(m_workerLoader, &ObjLoader::preprocessDone, this, &P01_MianPage::onPreprocessResult); // 处理单个设备预处理完成 connect(this, &P01_MianPage::preprocessFinished, this, &P01_MianPage::onPreprocessFinished); // 设置相机位置 Qt3DRender::QCamera* cam = mObjLoader->getCamera(); if (cam) { //"相机位置: (X: 15.0894, Y: 12.8326, Z: 13.1512)" //"看向位置: (X: 3.9284, Y: 0.3222, Z: 0.0456)" //"视野角度: 25.0°" cam->setPosition(QVector3D(15.0894, 12.8326, 13.1512)); cam->setViewCenter(QVector3D(3.9284,0.3222, 0.0456)); } // 所有设备加载完成 connect(this, &P01_MianPage::allDevicesLoaded, this, [=]() { // 清理工作线程 if (m_workerThread && m_workerThread->isRunning()) { m_workerThread->quit(); m_workerThread->wait(1000); // 等待1秒 if (m_workerThread->isRunning()) { m_workerThread->terminate(); // 强制终止 } m_workerThread->deleteLater(); m_workerThread = nullptr; } // 清理工作加载器 if (m_workerLoader) { m_workerLoader->deleteLater(); m_workerLoader = nullptr; } // 启动旋转定时器 QTimer *RotateDev_Timer = new QTimer(this); connect(RotateDev_Timer, &QTimer::timeout, this, &P01_MianPage::RotateDev); RotateDev_Timer->setInterval(33); RotateDev_Timer->start(); }); // 启动工作线程并开始预处理 m_workerThread->start(); QMetaObject::invokeMethod(m_workerLoader, "preprocessDevices", Qt::QueuedConnection, Q_ARG(QStringList, m_pendingDevices), Q_ARG(QString, ConfigurationPath + "3D模型文件/掘锚一体机/本体/")); } // 新增:接收预处理结果的槽函数 void P01_MianPage::onPreprocessResult(const QString& deviceName, QVector3D center, float radius) { m_modelPreprocessResults[deviceName] = QPair(center, radius); emit preprocessFinished(deviceName); } void P01_MianPage::onPreprocessFinished(const QString& deviceName) { // 检查是否是当前需要加载的设备 if (m_loadingStep >= m_pendingDevices.size()) return; if (m_pendingDevices[m_loadingStep] != deviceName) return; // 获取预处理结果 auto result = m_modelPreprocessResults[deviceName]; QVector3D modelCenter = result.first; float modelRadius = result.second; QString filePath = ConfigurationPath + "3D模型文件/掘锚一体机/本体/" + deviceName + ".obj"; // 关键优化:使用定时器将加载操作拆分为小步骤,避免阻塞主线程 QTimer::singleShot(10, this, [=]() { bool LoaderOK = false; // 第一步:只执行最核心的加载操作(创建实体) switch (m_loadingStep) { case 0: // 整机装配 LoaderOK = mObjLoader->loadDevice(deviceName, filePath, QVector3D(0, 0, 0)); if (LoaderOK) { mObjLoader->getDevice(deviceName)->modelCenter = modelCenter; } break; case 1: // 运输机 LoaderOK = mObjLoader->loadChildDevice(deviceName, filePath, "整机装配", QVector3D(0,0,0), QColor(0,255,0,80)); if (LoaderOK) { mObjLoader->getDevice(deviceName)->modelCenter = modelCenter; } break; case 2: // 截割部 LoaderOK = mObjLoader->loadChildDevice(deviceName, filePath, "整机装配", QVector3D(0,0,0), QColor(0,255,0,80)); if (LoaderOK) { mObjLoader->getDevice(deviceName)->modelCenter = modelCenter; } break; case 3: // 左装载机 LoaderOK = mObjLoader->loadChildDevice(deviceName, filePath, "整机装配", QVector3D(0,0,0), QColor(46, 47, 48,80)); if (LoaderOK) { mObjLoader->getDevice(deviceName)->modelCenter = modelCenter; } break; case 4: // 右装载机 LoaderOK = mObjLoader->loadChildDevice(deviceName, filePath, "整机装配", QVector3D(0,0,0), QColor(46, 47, 48,80)); if (LoaderOK) { mObjLoader->getDevice(deviceName)->modelCenter = modelCenter; } break; case 5: // 滚筒 LoaderOK = mObjLoader->loadChildDevice(deviceName, filePath, "截割部", QVector3D(0,0,0), QColor(46, 47, 48,80)); if (LoaderOK) { mObjLoader->getDevice(deviceName)->modelCenter = modelCenter; } break; } if (!LoaderOK) { // 加载失败处理 m_loadingStep++; return; } // 第二步:延迟执行缩放操作(10ms后) QTimer::singleShot(10, this, [=]() { switch (m_loadingStep) { case 0: mObjLoader->scaleDevice(deviceName, 0.001f); break; case 1: mObjLoader->scaleDevice(deviceName, 0.001f); break; case 2: mObjLoader->scaleDevice(deviceName, 0.001f); break; case 3: mObjLoader->scaleDevice(deviceName, 0.001f); break; case 4: mObjLoader->scaleDevice(deviceName, 0.001f); break; case 5: mObjLoader->scaleDevice(deviceName, 0.001f); break; } // 第三步:延迟执行坐标轴和位置设置(再10ms后) QTimer::singleShot(10, this, [=]() { switch (m_loadingStep) { case 0: // 整机装配 //mObjLoader->addAxisGizmo(nullptr, 5.0f); //mObjLoader->addAxisGizmo(mObjLoader->getDevice(deviceName)->entity, 3.0f); mObjLoader->setParentDevicePosition(deviceName, QVector3D(-33.394, 1021.68, 190.52)); mObjLoader->moveArmLocalOriginTo(deviceName, QVector3D(0, 0, 0)); break; case 1: // 运输机 //mObjLoader->addAxisGizmo(mObjLoader->getDevice(deviceName)->entity, 3.0f); mObjLoader->setParentDevicePosition(deviceName, QVector3D(0,617.183, 95239.7)); mObjLoader->moveArmLocalOriginTo(deviceName, QVector3D(0,1,96.48)); mObjLoader->adjustChildDeviceOffset(deviceName, QVector3D(-3.61, 1.25, 0.25)); mObjLoader->rotateArmToAbsoluteYAngle(deviceName, 90); break; case 2: // 截割部 //mObjLoader->addAxisGizmo(mObjLoader->getDevice(deviceName)->entity, 5.0f); mObjLoader->setParentDevicePosition(deviceName, QVector3D(0, -3633.7, 4141.31)); mObjLoader->moveArmLocalOriginTo(deviceName, QVector3D(0, -2.9800, 1.3800)); mObjLoader->adjustChildDeviceOffset(deviceName, QVector3D(0.5000, 0.7100, 0.2500)); mObjLoader->rotateArmToAbsoluteYAngle(deviceName, 90); break; case 3: // 左装载机 //mObjLoader->addAxisGizmo(mObjLoader->getDevice(deviceName)->entity, 5.0f); mObjLoader->setParentDevicePosition(deviceName, QVector3D(33.5, -42.4635, -11.9246)); mObjLoader->moveArmLocalOriginTo(deviceName, QVector3D(0, 0, 0)); mObjLoader->setParentDevicePosition(deviceName, QVector3D(4.0300, -0.3500, 1.5400)); mObjLoader->rotateArmToAbsoluteZAngle(deviceName, 45); break; case 4: // 右装载机 //mObjLoader->addAxisGizmo(mObjLoader->getDevice(deviceName)->entity, 5.0f); mObjLoader->setParentDevicePosition(deviceName, QVector3D(33.5, -42.4635, 11.9246)); mObjLoader->moveArmLocalOriginTo(deviceName, QVector3D(0, 0, 0)); mObjLoader->setParentDevicePosition(deviceName, QVector3D(4.0300, -0.3500, -0.9300)); mObjLoader->rotateArmToAbsoluteZAngle(deviceName, 45); break; case 5: // 滚筒 mObjLoader->rotateDevice(deviceName,10260,0,0); //mObjLoader->addAxisGizmo(mObjLoader->getDevice(deviceName)->entity, 10.0f); mObjLoader->setParentDevicePosition(deviceName, QVector3D(-0.927338, 2800, 1.00699)); mObjLoader->moveArmLocalOriginTo(deviceName, QVector3D(1.0050, 4.2200, 0.5000)); mObjLoader->adjustChildDeviceOffset(deviceName, QVector3D(0, 0, 0)); mObjLoader->moveArmLocalOriginTo(deviceName, QVector3D(0, -10, 0)); mObjLoader->rotateArmToAbsoluteZAngle(deviceName, 90); mObjLoader->adjustChildDeviceOffset(deviceName, QVector3D(4.2000, -1.600, 5.0000)); mObjLoader->rotateArmToAbsoluteXAngle(deviceName, 1); break; } // 延迟加载下一个设备,给主线程足够时间处理UI事件 QTimer::singleShot(100, this, [=]() { m_loadingStep++; if (m_loadingStep < m_pendingDevices.size()) { QString nextDevice = m_pendingDevices[m_loadingStep]; QMetaObject::invokeMethod(m_workerLoader, "preprocessSingleDevice", Qt::QueuedConnection, Q_ARG(QString, nextDevice), Q_ARG(QString, ConfigurationPath + "3D模型文件/掘锚一体机/本体/")); } else { emit allDevicesLoaded(); } }); }); }); }); } uint32_t TCount =0 ; void P01_MianPage::UIRefreshTimeOut() { if(gPageIndexStr != "P01") return; uint32_t TmpBools[10]; TmpBools[0] = getNodeValue("PageBOOLS.B0") .toUInt(); TmpBools[1] = getNodeValue("PageBOOLS.B1") .toUInt(); TmpBools[2] = getNodeValue("PageBOOLS.B2") .toUInt(); TmpBools[3] = getNodeValue("PageBOOLS.B3") .toUInt(); TmpBools[4] = getNodeValue("PageBOOLS.B4") .toUInt(); TmpBools[5] = getNodeValue("PageBOOLS.B5") .toUInt(); TmpBools[6] = getNodeValue("PageBOOLS.B6") .toUInt(); TmpBools[7] = getNodeValue("PageBOOLS.B7") .toUInt(); TmpBools[8] = getNodeValue("PageBOOLS.B8") .toUInt(); TmpBools[9] = getNodeValue("PageBOOLS.B9") .toUInt(); //杂进度条显示 QStringList LevelCor = {"color: #ef4444","color: #f59e0b","#22c55e","color: rgb(0, 233, 253)"}; ProgressBar_LCD(ui->PB_SpareTemp,ui->LCD_SpareTemp,"PB_SpareTemp.PageGroup","IN_Sersor.SpareTemp",glMotorTempColor); ProgressBar_LCD(ui->PB_OilLevel,ui->LCD_OilLevel,"PB_OilLevel.PageGroup","IN_Sersor.OilLevel",LevelCor); ProgressBar_LCD(ui->PB_OilTemp,ui->LCD_OilTemp,"PB_OilTemp.PageGroup","IN_Sersor.OilTemp",glMotorTempColor); QStringList NullColor = {"color: rgb(0, 233, 253)","color: rgb(0, 233, 253)","color: rgb(0, 233, 253)","color: rgb(0, 233, 253)"}; ProgressBar_LCD(ui->PB_PressurePump_1,ui->LCD_PressurePump_1,"PB_PressurePump1.PageGroup","IN_Sersor.Pressure_Pump1",NullColor); ProgressBar_LCD(ui->PB_PressurePump_2,ui->LCD_PressurePump_2,"PB_PressurePump2.PageGroup","IN_Sersor.Pressure_Pump2",NullColor); ProgressBar_LCD(ui->PB_PressurePump_3,ui->LCD_PressurePump_3,"PB_PressurePump3.PageGroup","IN_Sersor.Pressure_Pump3",NullColor); // 编码器数值显示 ui->LCD_EncoderL->display(QString::number(getNodeValue("IN_Encoder.EncoderL") .toUInt())); ui->LCD_EncoderR->display(QString::number(getNodeValue("IN_Encoder.EncoderR") .toUInt())); // 急停的显示 for (uint8_t i=0;i<12;i++) { QString TextObjName = QString("Led_EStop_%1").arg(i); QLabel* Label = findChild(TextObjName); if (Label) { SetStyleStr(Label,getBitOf32Data(TmpBools[0], i,false),"color: #ef4444","color: #22c55e"); } } // ESR状态显示 SetStyleStr(ui->Status_IESR_1,getBitOf32Data(TmpBools[0], 12,false),"border-image: url(:/Icos/Icos/LED2_Green.png);","border-image: url(:/Icos/Icos/LED1_Rad.png);"); SetStyleStr(ui->Status_IESR_2,getBitOf32Data(TmpBools[0], 13,false),"border-image: url(:/Icos/Icos/LED2_Green.png);","border-image: url(:/Icos/Icos/LED1_Rad.png);"); SetStyleStr(ui->Status_QESR_1,getBitOf32Data(TmpBools[0], 14,false),"border-image: url(:/Icos/Icos/LED2_Green.png);","border-image: url(:/Icos/Icos/LED3_Rad (2).png);"); SetStyleStr(ui->Status_QESR_2,getBitOf32Data(TmpBools[0], 15,false),"border-image: url(:/Icos/Icos/LED2_Green.png);","border-image: url(:/Icos/Icos/LED3_Rad (2).png);"); //传感器及阀控模块输出的显示 SetStyleStr(ui->Status_P1_1,getBitOf32Data(TmpBools[2], 1,false),"color: #22c55e",""); SetStyleStr(ui->Status_P1_2,getBitOf32Data(TmpBools[2], 3,false),"color: #22c55e",""); SetStyleStr(ui->Status_P1_3,getBitOf32Data(TmpBools[2], 5,false),"color: #22c55e",""); SetStyleStr(ui->Status_P1_4,getBitOf32Data(TmpBools[2], 4,false),"color: #22c55e",""); SetStyleStr(ui->Status_P1_5,getBitOf32Data(TmpBools[1], 23,false),"color: #22c55e",""); SetStyleStr(ui->Status_P1_6,getBitOf32Data(TmpBools[2], 0,false),"color: #22c55e",""); SetStyleStr(ui->Status_P2_1,getBitOf32Data(TmpBools[1], 22,false),"color: #22c55e",""); SetStyleStr(ui->Status_P2_2,getBitOf32Data(TmpBools[1], 30,false),"color: #22c55e",""); SetStyleStr(ui->Status_P2_3,getBitOf32Data(TmpBools[1], 21,false),"color: #22c55e",""); SetStyleStr(ui->Status_P2_4,getBitOf32Data(TmpBools[1], 20,false),"color: #22c55e",""); SetStyleStr(ui->Status_P2_5,getBitOf32Data(TmpBools[1], 29,false),"color: #22c55e",""); SetStyleStr(ui->Status_P3_1,getBitOf32Data(TmpBools[1], 24,false),"color: #22c55e",""); SetStyleStr(ui->Status_P3_2,getBitOf32Data(TmpBools[1], 25,false),"color: #22c55e",""); SetStyleStr(ui->Status_P3_3,getBitOf32Data(TmpBools[1], 26,false),"color: #22c55e",""); SetStyleStr(ui->Status_P3_4,getBitOf32Data(TmpBools[1], 27,false),"color: #22c55e",""); SetStyleStr(ui->Status_P3_5,getBitOf32Data(TmpBools[1], 28,false),"color: #22c55e",""); //油缸伸缩状态显示 QStringList OilCylindStyle = {"","border-image: url(:/Icos/Icos/icon_stretch.png);","border-image: url(:/Icos/Icos/icon_shorten.png);"}; SetStyleStr(ui->Status_Oil_1, getBitOf32Data(TmpBools[3], 24,false),getBitOf32Data(TmpBools[3], 25,false),OilCylindStyle); SetStyleStr(ui->Status_Oil_2, getBitOf32Data(TmpBools[1], 12,false),getBitOf32Data(TmpBools[1], 13,false),OilCylindStyle); SetStyleStr(ui->Status_Oil_3, getBitOf32Data(TmpBools[1], 14,false),getBitOf32Data(TmpBools[1], 15,false),OilCylindStyle); SetStyleStr(ui->Status_Oil_4, getBitOf32Data(TmpBools[3], 26,false),getBitOf32Data(TmpBools[3], 27,false),OilCylindStyle); SetStyleStr(ui->Status_Oil_5, getBitOf32Data(TmpBools[1], 8 ,false),getBitOf32Data(TmpBools[1], 9 ,false),OilCylindStyle); SetStyleStr(ui->Status_Oil_6, getBitOf32Data(TmpBools[1], 0 ,false),getBitOf32Data(TmpBools[1], 1 ,false),OilCylindStyle); SetStyleStr(ui->Status_Oil_7, getBitOf32Data(TmpBools[1], 10,false),getBitOf32Data(TmpBools[1], 11,false),OilCylindStyle); SetStyleStr(ui->Status_Oil_8, getBitOf32Data(TmpBools[1], 2 ,false),getBitOf32Data(TmpBools[1], 3 ,false),OilCylindStyle); SetStyleStr(ui->Status_Oil_9, getBitOf32Data(TmpBools[1], 16,false),getBitOf32Data(TmpBools[1], 17,false),OilCylindStyle); SetStyleStr(ui->Status_Oil_10,getBitOf32Data(TmpBools[1], 18,false),getBitOf32Data(TmpBools[1], 19,false),OilCylindStyle); SetStyleStr(ui->Status_Oil_11,getBitOf32Data(TmpBools[1], 4 ,false),getBitOf32Data(TmpBools[1], 5 ,false),OilCylindStyle); SetStyleStr(ui->Status_Oil_12,getBitOf32Data(TmpBools[1], 6 ,false),getBitOf32Data(TmpBools[1], 7 ,false),OilCylindStyle); SetStyleStr(ui->Status_Oil_13,getBitOf32Data(TmpBools[3], 28,false),getBitOf32Data(TmpBools[3], 29,false),OilCylindStyle); //电机温度电流,进度条和LCD的显示 PB_Refresh("Pump"); PB_Refresh("Cut"); PB_Refresh("LoaderL"); PB_Refresh("LoaderR"); PB_Refresh("TransportL"); PB_Refresh("TransportR"); PB_Refresh("Standby"); } void P01_MianPage::ProgressBar_LCD(QProgressBar *QPB,QLCDNumber *QLCD,QString NodeID_Bar,QString NodeID_Value,QStringList Colors){ uint32_t PB_Group1 = getNodeValue(NodeID_Bar) .toUInt(); float Value = getNodeValue(NodeID_Value) .toFloat(); uint16_t PValue= static_cast(PB_Group1 >> 16); // 高 16 位 uint16_t PColor = static_cast(PB_Group1 & 0xFFFF);// 低 16 位 SetProgressBar(QPB,PValue,PColor,Colors); QLCD->display(QString::number(Value,'f',2)); } void P01_MianPage::PB_Refresh(QString Dev){ uint32_t PB_Group1 = getNodeValue("PB_Curr_"+Dev+".PageGroup1") .toUInt(); uint32_t PB_Group2 = getNodeValue("PB_Curr_"+Dev+".PageGroup2") .toUInt(); uint32_t PB_MotorTemp = getNodeValue("PB_Temp_"+Dev+".PageGroup") .toUInt(); uint16_t PercentageCurU = static_cast(PB_Group1 >> 16); // 高 16 位 uint16_t PercentageCurV = static_cast(PB_Group1 & 0xFFFF);// 低 16 位 uint16_t PercentageCurW = static_cast(PB_Group2 >> 16); // 高 16 位 uint16_t PercentageTmpColor = static_cast(PB_Group2 & 0xFFFF);// 低 16 位 uint8_t ColorU = (PercentageTmpColor / 10) % 10; uint8_t ColorV = (PercentageTmpColor / 100) % 10; uint8_t ColorW = PercentageTmpColor % 10; uint16_t PercentageMotorTemp = static_cast(PB_MotorTemp >> 16); // 高 16 位 uint16_t ColorTemp = static_cast(PB_MotorTemp & 0xFFFF);// 低 16 位 qreal CurrU = getNodeValue("IN_Phase"+Dev+".Filtered30_U") .toReal(); qreal CurrV = getNodeValue("IN_Phase"+Dev+".Filtered30_V") .toReal(); qreal CurrW = getNodeValue("IN_Phase"+Dev+".Filtered30_W") .toReal(); qreal Temp = getNodeValue("IN_Phase"+Dev+".Filtered_Temp") .toReal(); qreal Curr = fmax(CurrU,fmax(CurrV,CurrW)); qreal Rated; if (Dev == "LoaderL" || Dev == "LoaderR" ) Rated = getNodeValue("PS.gRatedCur_Loader") .toReal(); else if(Dev == "TransportL" || Dev == "TransportR" ) Rated = getNodeValue("PS.gRatedCur_Transport") .toReal(); else{ Rated = getNodeValue("PS.gRatedCur_"+Dev) .toReal(); } QProgressBar* CurPB_1 = findChild("PB_Cur"+Dev+"_1"); QProgressBar* CurPB_2 = findChild("PB_Cur"+Dev+"_2"); QProgressBar* CurPB_3 = findChild("PB_Cur"+Dev+"_3"); QProgressBar* TempPB = findChild("PB_Temp"+Dev); QLCDNumber* CurLCD_1 = findChild("LCD_Cur"+Dev+"_1"); QLCDNumber* CurLCD_2 = findChild("LCD_Cur"+Dev+"_2"); QLCDNumber* CurLCD_3 = findChild("LCD_Cur"+Dev+"_3"); QLCDNumber* CurLCD = findChild("LCD_Cur"+Dev); QLCDNumber* TempLCD = findChild("LCD_Temp"+Dev); QLabel* CurRated_Label = findChild("Label_UnitCur"+Dev); SetProgressBar(CurPB_1,PercentageCurU,ColorU,glMotorCurColor); SetProgressBar(CurPB_2,PercentageCurV,ColorV,glMotorCurColor); SetProgressBar(CurPB_3,PercentageCurW,ColorW,glMotorCurColor); SetProgressBar(TempPB,PercentageMotorTemp,ColorTemp,glMotorTempColor); CurLCD_1->display(QString::number(CurrU,'f',2)); CurLCD_2->display(QString::number(CurrV,'f',2)); CurLCD_3->display(QString::number(CurrW,'f',2)); CurLCD->display(QString::number(Curr,'f',2)); TempLCD->display(QString::number(Temp,'f',2)); CurRated_Label->setText("A/"+QString::number(Rated,'f',1)+"A"); } void P01_MianPage::SetProgressBar(QProgressBar *PB,uint16_t Value,uint8_t ColorIndex,QStringList Color){ if(Value > PB->maximum()) Value = PB->maximum(); PB->setValue(Value); if(ColorIndex < Color.length()){ QString Style = "QProgressBar {\n background-color: transparent;\n border: 2px solid #888888;\n border-radius: 3px;\n}\nQProgressBar::chunk {\n background-color:"+Color[ColorIndex]+";\n}"; if(PB->styleSheet() != Style){ PB->setStyleSheet(Style); } } } uint16_t OldRoller_Length = 0; void P01_MianPage::TrailRefreshTimeOut(){ if(gPageIndexStr != "P01") return; // 画板的显示 uint32_t Diameter = getNodeValue("RollerPosition.Diameter") .toUInt(); uint32_t LengthHeight = getNodeValue("RollerPosition.LengthHeight") .toUInt(); uint32_t SideView = getNodeValue("RollerPosition.SideView") .toUInt(); uint32_t FaceView = getNodeValue("RollerPosition.FaceView") .toUInt(); uint32_t TransPos = getNodeValue("RollerPosition.TransportPos") .toUInt(); uint32_t TmpHaul = getNodeValue("RollerPosition.ShowHaulSpeed") .toUInt(); float CenterHeight = getNodeValue("RollerPosition.CenterHeight") .toFloat(); int16_t Roller_SideX = static_cast(SideView >> 16); // 高 16 位 int16_t Roller_SideY = static_cast(SideView & 0xFFFF);// 低 16 位 int16_t Roller_FaceX = static_cast(FaceView >> 16); // 高 16 位 int16_t Roller_FaceY = static_cast(FaceView & 0xFFFF);// 低 16 位 int16_t Roller_Length = static_cast(LengthHeight >> 16); // 高 16 位 int16_t TransPos_SideX = static_cast(TransPos >> 16); // 高 16 位 int16_t TransPos_SideY = static_cast(TransPos & 0xFFFF);// 低 16 位 int16_t TmpSpeedL = static_cast(TmpHaul >> 16); // 高 16 位 int16_t TmpSpeedR = static_cast(TmpHaul & 0xFFFF);// 低 16 位 uint16_t Roller_Diameter_Img = static_cast(Diameter >> 16); // 高 16 位 uint16_t Roller_Diameter_mm = static_cast(Diameter & 0xFFFF); // 低 16 位 if(Brush[0].isNull()){ Brush[0] = QImage(":/Devices/Devices/ICO_Cutting1.png"); Brush[0] = Brush[0].scaled(Roller_Diameter_Img, Roller_Diameter_Img, Qt::KeepAspectRatio, Qt::SmoothTransformation); ui->TrailDisplay_1->setBrushImage(Brush[0]); } if(Brush[1].isNull() || OldRoller_Length != Roller_Length){ Brush[1] = QImage(Roller_Length, Roller_Diameter_Img, QImage::Format_ARGB32); Brush[1].fill(Qt::green); ui->TrailDisplay_2->setBrushImage(Brush[1]); OldRoller_Length = Roller_Length; } uiRollerPosition(0,Roller_SideX,Roller_SideY); uiRollerPosition(1,Roller_FaceX,Roller_FaceY); uiSetTransportPos(TransPos_SideX,TransPos_SideY); uiSetHaulSpeed(TmpSpeedL,TmpSpeedR); // 采高卧底的显示 uiSetMining(CenterHeight,Roller_Diameter_mm); } void P01_MianPage::uiRollerPosition(uint8_t Index,uint16_t aX,uint16_t aY){ //qDebug()<TrailDisplay_1->moveBrush(localPos); else ui->TrailDisplay_2->moveBrush(localPos); } OldRollerPos[Index][0] = aX; OldRollerPos[Index][1] = aY; } void P01_MianPage::uiInitHaulSpeed(int Max){ ui->Slider_Haul_L->setMinimum(0-Max); ui->Slider_Haul_L->setMaximum(Max); ui->Slider_Haul_R->setMinimum(0-Max); ui->Slider_Haul_R->setMaximum(Max); } void P01_MianPage::uiInitMining(int Max,int Min){ ui->Slider_Mining->setMinimum(Min); ui->Slider_Mining->setMaximum(Max); } void P01_MianPage::uiInitTransportPos(int MaxX,int MaxY){ TransportPosMaxX = MaxX; TransportPosMaxY = MaxY; } void P01_MianPage::uiSetHaulSpeed(int SpeedL,int SpeedR){ if(gPageIndexStr != "P01") return; ui->Slider_Haul_L->setValue(SpeedL); ui->LCD_MainHaul_L->display(QString::number(SpeedL)); ui->Slider_Haul_R->setValue(SpeedR); ui->LCD_MainHaul_R->display(QString::number(SpeedR)); } void P01_MianPage::uiSetMining(float CenterHeight,uint16_t Roller_Diameter_mm){ if(gPageIndexStr != "P01") return; int16_t CH = CenterHeight*1000; ui->Slider_Mining->setValue(CH); ui->LCD_MiningB1->display(QString::number(CenterHeight - Roller_Diameter_mm * 0.001, 'f', 2)); ui->LCD_MiningT1->display(QString::number(CenterHeight + Roller_Diameter_mm * 0.001, 'f', 2)); } void P01_MianPage::uiSetTransportPos(int rx,int ry){ if(gPageIndexStr != "P01") return; int NewRX = 29+(130/2)+rx; int NewRY = -6+(130/2)+ry; //qDebug()<Label_TransportPos->move(NewRX,NewRY); } void P01_MianPage::SetStyleStr(QLabel *L,bool Status,QString TStr,QString FStr){ if(L == nullptr) return; QString Style = ""; if(Status){ Style = TStr; }else{ Style = FStr; } if(L->styleSheet() != Style) L->setStyleSheet(Style); } void P01_MianPage::SetStyleStr(QLabel *L,bool B1,bool B2,QStringList StyStr){ if(L == nullptr) return; QString Style = ""; if(B1 && ! B2){ Style = StyStr[1]; }else if(!B1 && B2){ Style = StyStr[2]; }else if(!B1 && !B2){ Style = StyStr[0]; }else{ Style = ""; } if(L->styleSheet() != Style) L->setStyleSheet(Style); } void P01_MianPage::RotateDev(){ if(gPageIndexStr != "P01") return; mAngle = mAngle + 1; if(mAngle > 360) mAngle =0; //mObjLoader->rotateArmToAbsoluteYAngle(DevName3D, jd); }