#include "DiagnosisPage.h" #include "../common/JQCommon.h" DiagnosisPage::DiagnosisPage(QWidget *parent) : QWidget(parent) { ui.setupUi(this); Init(); } DiagnosisPage::~DiagnosisPage() {} void DiagnosisPage::Init() { this->setAttribute(Qt::WA_DeleteOnClose); ui.axisSwitchTabPage->tabBar()->hide(); ui.axisSwitchTabPage->setCurrentIndex(0); ui.axisListTree->setHeaderHidden(true); ui.axisListTree->setEditTriggers(QAbstractItemView::NoEditTriggers); ns_module::CViewInterface* pCViewInterface = ns_module::CViewInterface::GetInstance(); if (pCViewInterface) { m_veCAxis = pCViewInterface->GetViewMotion()->GetAxisList(); // 创建模型 m_model = new QStandardItemModel(this); QString strModeA; QStandardItem* pModeType = nullptr; QStandardItem* rooto = m_model->invisibleRootItem(); QStandardItem* root1 = new QStandardItem(tr("Diagnosis Page", "诊断页面")); rooto->appendRow(root1); root1->setFlags(root1->flags() | Qt::ItemIsEnabled); for (auto a: m_veCAxis) { QString strMode = QString::fromLocal8Bit(a->GetModuleType().c_str()); if (strModeA != strMode) { pModeType = new QStandardItem(strMode); root1->appendRow(pModeType); strModeA = strMode; } // 添加二级节点 QStandardItem* pAisType = new QStandardItem(QString::fromLocal8Bit(a->GetStringAxisType().c_str())); pModeType->appendRow(pAisType); } ui.axisListTree->setModel(m_model); ui.axisListTree->expandAll(); } // 控件状态 JQCommon::SetQLineEditLimit(ui.negLineEdit); JQCommon::SetQLineEditLimit(ui.posLineEdit); JQCommon::SetQLineEditLimit(ui.speedLineEdit); } void DiagnosisPage::SwitchOperationAxisPage(bool isSwitch) { if (isSwitch) { QString strMode = QString::fromLocal8Bit(m_pCurrOpenCAxis->GetAxisName().c_str()); ui.titleLable->setText(strMode); // 设置状态 m_IsDriveEnabled = m_pCurrOpenCAxis->JIsDriveEnabled(); ui.xAxisEnabledRadioBut->setChecked(m_IsDriveEnabled); // 获取正负限位是否打开 bool bEnabledNeg, bEnabledPos; m_pCurrOpenCAxis->JGetSoftLimitEnableStatus(bEnabledNeg, bEnabledPos); if (bEnabledNeg && bEnabledPos) { double dSoftLimitNeg, dSoftLimitPos, dSoftTravelRange; m_pCurrOpenCAxis->JGetSoftLimit(dSoftLimitNeg, dSoftLimitPos, dSoftTravelRange); ui.negLineEdit->setText(QString::number(dSoftLimitNeg,'f',2)); ui.posLineEdit->setText(QString::number(dSoftLimitPos,'f',2)); } //ui.speedLineEdit->setText(QString::number(0)); // 设置定时获取速度 const int nRunTime = 300; //所有新开的定时器都用这个 m_nTimerID = startTimer(nRunTime); } else { killTimer(m_nTimerID); m_nTimerID = 0; ui.axisSwitchTabPage->setCurrentIndex(0); } } void DiagnosisPage::timerEvent(QTimerEvent* event) { if (m_nTimerID == event->timerId()) { if (m_pCurrOpenCAxis) { double doPos = 0.0; m_pCurrOpenCAxis->GetActualPos(doPos); ui.xPositionLineEdit->setText(QString::number(doPos, 'f', 2)); } } } void DiagnosisPage::on_axisListTree_doubleClicked(const QModelIndex& index) { if (index.isValid()) { QString itemName = index.data().toString(); if (!m_model->hasChildren(index)) // 没有子节点 { // 表示想要切换到轴控制 QModelIndex parentIndex = index.parent(); QString currentItem = parentIndex.data().toString(); currentItem += "_"; currentItem += itemName; // 给轴窗口 ui.axisSwitchTabPage->setCurrentIndex(1); for (auto& a : m_veCAxis) { QString strMode = QString::fromLocal8Bit(a->GetAxisName().c_str()); if (strMode == currentItem) { //m_pCurrOpenCAxis.reset(a); m_pCurrOpenCAxis = a; SwitchOperationAxisPage(true); break; } } } } } void DiagnosisPage::on_xAxisDisable_clicked() { QString strText = tr("Disable", "关使能"); if (m_IsDriveEnabled) { m_pCurrOpenCAxis->AxisOff(); strText = tr("Enable", "开使能"); } else { m_pCurrOpenCAxis->AxisOn(); } ui.xAxisDisable->setText(strText); } void DiagnosisPage::on_xAxisHomeBut_clicked() { m_pCurrOpenCAxis->Home(); } void DiagnosisPage::on_setPosBut_clicked() { double xNeg = ui.negLineEdit->text().toDouble(); double xPos = ui.posLineEdit->text().toDouble(); m_pCurrOpenCAxis->JSetSoftLimit(xNeg, xPos); } void DiagnosisPage::on_setNegBut_clicked() { double xNeg = ui.negLineEdit->text().toDouble(); double xPos = ui.posLineEdit->text().toDouble(); m_pCurrOpenCAxis->JSetSoftLimit(xNeg, xPos); } void DiagnosisPage::on_setSpeedBut_clicked() { double doSpeed = ui.speedLineEdit->text().toDouble(); m_pCurrOpenCAxis->JSetTargetVel(doSpeed); } void DiagnosisPage::on_retBut_clicked() { SwitchOperationAxisPage(false); }