| SourceCode/Bond/BondEq/AxisSettingsDlg.cpp | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| SourceCode/Bond/BondEq/AxisSettingsDlg.h | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| SourceCode/Bond/BondEq/BondEq.rc | 补丁 | 查看 | 原始文档 | blame | 历史 | |
| SourceCode/Bond/BondEq/FileManager/RecipeManager.cpp | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| SourceCode/Bond/BondEq/FileManager/RecipeManager.h | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| SourceCode/Bond/BondEq/Resource.h | 补丁 | 查看 | 原始文档 | blame | 历史 | |
| SourceCode/Bond/BondEq/View/AxisDetailSettingsDlg.cpp | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| SourceCode/Bond/BondEq/View/AxisDetailSettingsDlg.h | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| SourceCode/Bond/BondEq/View/AxisSettingsDlg.cpp | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
SourceCode/Bond/BondEq/AxisSettingsDlg.cpp
ÎļþÒÑɾ³ý SourceCode/Bond/BondEq/AxisSettingsDlg.h
ÎļþÒÑɾ³ý SourceCode/Bond/BondEq/BondEq.rcBinary files differ
SourceCode/Bond/BondEq/FileManager/RecipeManager.cpp
@@ -37,6 +37,8 @@ axisInfo.number = axisNode.attribute("number").value(); axisInfo.description = axisNode.attribute("description").value(); axisInfo.startAddress = axisNode.attribute("start_address").value(); axisInfo.maxPositioningSpeed = axisNode.attribute("maxPositioningSpeed").as_double(); axisInfo.maxManualSpeed = axisNode.attribute("maxManualSpeed").as_double(); // å è½½ ValueRange å¼ axisInfo.jogDistance = ValueRange( @@ -66,7 +68,9 @@ ); // å è½½ PositionRange å¼ axisInfo.positioningPointCount = axisNode.child("Positions").attribute("positioningPointCount").as_int(); for (auto positionNode : axisNode.child("Positions").children("Position")) { bool isEnable = positionNode.attribute("isEnable").as_bool(); std::string description = positionNode.attribute("description").value(); ValueRange positionRange( positionNode.attribute("min").as_double(), @@ -74,7 +78,7 @@ positionNode.attribute("current").as_double() ); axisInfo.positions.emplace_back(PositionRange(description, positionRange)); axisInfo.positions.emplace_back(PositionRange(isEnable, description, positionRange)); } m_axes[axisInfo.id] = axisInfo; @@ -111,6 +115,8 @@ axisNode.append_attribute("number") = axisInfo.number.c_str(); axisNode.append_attribute("description") = axisInfo.description.c_str(); axisNode.append_attribute("start_address") = axisInfo.startAddress.c_str(); axisNode.append_attribute("maxPositioningSpeed") = axisInfo.maxPositioningSpeed; axisNode.append_attribute("maxManualSpeed") = axisInfo.maxManualSpeed; // ä¿å ValueRange å¼ auto jog_distance = axisNode.append_child("jog_distance"); @@ -140,8 +146,10 @@ // ä¿å PositionRange å¼ auto positionsNode = axisNode.append_child("Positions"); positionsNode.append_attribute("positioningPointCount") = axisInfo.positioningPointCount; for (const auto& position : axisInfo.positions) { auto positionNode = positionsNode.append_child("Position"); positionNode.append_attribute("isEnable") = position.isEnable; positionNode.append_attribute("description") = position.description.c_str(); positionNode.append_attribute("min") = position.range.minValue; positionNode.append_attribute("max") = position.range.maxValue; @@ -160,6 +168,9 @@ for (int axisId = 1; axisId <= 12; ++axisId) { AxisInfo axisInfo; axisInfo.id = axisId; axisInfo.positioningPointCount = 25; axisInfo.maxPositioningSpeed = 100.0; axisInfo.maxManualSpeed = 100.0; axisInfo.number = "M100-M" + std::to_string(axisId); axisInfo.description = "Default_Axis" + std::to_string(axisId); axisInfo.startAddress = "ZR" + std::to_string(10000 + (axisId - 1) * 300); @@ -172,10 +183,10 @@ axisInfo.decelerationTime = ValueRange(1.0, 10.0, 1.0); // æ·»å å®ä½ç¹å¹¶è®¾ç½®é»è®¤çæå°å¼åæå¤§å¼ for (int posId = 1; posId <= 25; ++posId) { double minPos = posId * 5.0; double maxPos = posId * 20.0; axisInfo.positions.emplace_back(PositionRange("Position " + std::to_string(posId), ValueRange(minPos, maxPos, posId * 10.0))); for (int posId = 0; posId < axisInfo.positioningPointCount; ++posId) { double minPos = (posId + 1) * 5.0; double maxPos = (posId + 1) * 20.0; axisInfo.positions.emplace_back(PositionRange(TRUE, "Position " + std::to_string(posId + 1), ValueRange(minPos, maxPos, (posId + 1) * 10.0))); } m_axes[axisId] = axisInfo; @@ -195,7 +206,7 @@ } // å¦ææ²¡ææ¾å°è¯¥è½´ï¼è¿åä¸ä¸ªé»è®¤çæ æ AxisInfo return AxisInfo{ -1, "", "", "", ValueRange(), ValueRange(), ValueRange(), ValueRange(), ValueRange(), {} }; return AxisInfo{ -1, 0, 0.0, 0.0, "", "", "", ValueRange(), ValueRange(), ValueRange(), ValueRange(), ValueRange(), {} }; } // æ´æ°è½´ä¿¡æ¯ SourceCode/Bond/BondEq/FileManager/RecipeManager.h
@@ -17,17 +17,21 @@ }; struct PositionRange { BOOL isEnable; // æ¯å¦å¯ç¨ std::string description; // å®ä½ç¹æè¿° ValueRange range; // ä½ç½®çæå°å¼ãæå¤§å¼åå½åå¼ // æé 彿°åå§å PositionRange(const std::string& desc = "", const ValueRange& r = ValueRange()) : description(desc), range(r) {} PositionRange(BOOL b = TRUE, const std::string& desc = "", const ValueRange& r = ValueRange()) :isEnable(b), description(desc), range(r) {} }; // è½´ä¿¡æ¯ç»æä½ struct AxisInfo { int id; // è½´ID int positioningPointCount; // å®ä½ç¹æ° double maxPositioningSpeed; // å®ä½é度ä¸é double maxManualSpeed; // æå¨é度ä¸é std::string number; // è½´ç¼å· std::string description; // è½´æè¿° std::string startAddress; // èµ·å§å°å SourceCode/Bond/BondEq/Resource.hBinary files differ
SourceCode/Bond/BondEq/View/AxisDetailSettingsDlg.cpp
@@ -32,16 +32,70 @@ m_pPLC = pPLC; } void CAxisDetailSettingsDlg::UpdateAxisDetailSettings() { // è·åè½´æ°æ® RecipeManager& recipeManager = RecipeManager::getInstance(); auto axisDetails = recipeManager.getAxis(m_nAxisNO); auto formatDouble = [](double value) -> CString { CString str; str.Format(_T("%.3f"), value); return str; }; auto formatInt = [](int value) -> CString { CString str; str.Format(_T("%d"), value); return str; }; m_staticAxisNO.SetWindowText(CString(axisDetails.number.c_str())); // è½´ç¼å· m_staticAxisDescription.SetWindowText(CString(axisDetails.description.c_str())); // è½´æè¿° m_staticStartAddress.SetWindowText(CString(axisDetails.startAddress.c_str())); // èµ·å§å°å GetDlgItem(IDC_EDIT_AXIS_POSITIONING_SPEED_LIMIT)->SetWindowText(formatDouble(axisDetails.maxPositioningSpeed)); // å®ä½é度ä¸é GetDlgItem(IDC_EDIT_AXIS_JOG_SPEED_LIMIT)->SetWindowText(formatDouble(axisDetails.maxManualSpeed)); // æå¨é度ä¸é GetDlgItem(IDC_EDIT_AXIS_POSITIONING_POINTS)->SetWindowText(formatInt(axisDetails.positioningPointCount)); // å®ä½ç¹æ° // å¾®å¨é GetDlgItem(IDC_EDIT_AXIS_MODITFY_MICROMENTUM_MIN)->SetWindowText(formatDouble(axisDetails.jogDistance.minValue)); GetDlgItem(IDC_EDIT_AXIS_MODITFY_MICROMENTUM)->SetWindowText(formatDouble(axisDetails.jogDistance.currentValue)); GetDlgItem(IDC_EDIT_AXIS_MODITFY_MICROMENTUM_MAX)->SetWindowText(formatDouble(axisDetails.jogDistance.maxValue)); // æå¨é度 GetDlgItem(IDC_EDIT_AXIS_MODITFY_POS_MIN)->SetWindowText(formatDouble(axisDetails.manualSpeed.minValue)); GetDlgItem(IDC_EDIT_AXIS_MODITFY_POS)->SetWindowText(formatDouble(axisDetails.manualSpeed.currentValue)); GetDlgItem(IDC_EDIT_AXIS_MODITFY_POS_MAX)->SetWindowText(formatDouble(axisDetails.manualSpeed.maxValue)); // èªå¨é度 GetDlgItem(IDC_EDIT_AXIS_MODITFY_AUTO_SPEED_MIN)->SetWindowText(formatDouble(axisDetails.autoSpeed.minValue)); GetDlgItem(IDC_EDIT_AXIS_MODITFY_AUTO_SPEED)->SetWindowText(formatDouble(axisDetails.autoSpeed.currentValue)); GetDlgItem(IDC_EDIT_AXIS_MODITFY_AUTO_SPEED_MAX)->SetWindowText(formatDouble(axisDetails.autoSpeed.maxValue)); // å éæ¶é´ GetDlgItem(IDC_EDIT_AXIS_MODITFY_ACCE_TIME_MIN)->SetWindowText(formatDouble(axisDetails.accelerationTime.minValue)); GetDlgItem(IDC_EDIT_AXIS_MODITFY_ACCE_TIME)->SetWindowText(formatDouble(axisDetails.accelerationTime.currentValue)); GetDlgItem(IDC_EDIT_AXIS_MODITFY_ACCE_TIME_MAX)->SetWindowText(formatDouble(axisDetails.accelerationTime.maxValue)); // åéæ¶é´ GetDlgItem(IDC_EDIT_AXIS_MODITFY_DECE_TIME_MIN)->SetWindowText(formatDouble(axisDetails.decelerationTime.minValue)); GetDlgItem(IDC_EDIT_AXIS_MODITFY_DECE_TIME)->SetWindowText(formatDouble(axisDetails.decelerationTime.currentValue)); GetDlgItem(IDC_EDIT_AXIS_MODITFY_DECE_TIME_MAX)->SetWindowText(formatDouble(axisDetails.decelerationTime.maxValue)); } void CAxisDetailSettingsDlg::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); DDX_Control(pDX, IDC_STATIC_AXIS_NUMBER, m_staticAxisNO); DDX_Control(pDX, IDC_STATIC_AXIS_DESCRIP, m_staticAxisDescription); DDX_Control(pDX, IDC_STATIC_START_ADDRESS, m_staticStartAddress); DDX_Control(pDX, IDC_CUSTOM_AXIS_ANCHOR_POINT, m_gridAxisDetailSettings); } BEGIN_MESSAGE_MAP(CAxisDetailSettingsDlg, CDialogEx) ON_BN_CLICKED(IDC_BUTTON_AXIS_DETAIL_SETTINGS_SAVE, &CAxisDetailSettingsDlg::OnBnClickedButtonAxisDetailSettingsSave) END_MESSAGE_MAP() @@ -67,10 +121,14 @@ return FALSE; } m_staticAxisNO.SetWindowText(CString(axisDetails.number.c_str())); // è½´ç¼å· m_staticAxisDescription.SetWindowText(CString(axisDetails.description.c_str())); // è½´æè¿° m_staticStartAddress.SetWindowText(CString(axisDetails.startAddress.c_str())); // èµ·å§å°å UpdateAxisDetailSettings(); return TRUE; // return TRUE unless you set the focus to a control // å¼å¸¸: OCX 屿§é¡µåºè¿å FALSE } void CAxisDetailSettingsDlg::OnBnClickedButtonAxisDetailSettingsSave() { // TODO: 卿¤æ·»å æ§ä»¶éç¥å¤çç¨åºä»£ç EndDialog(IDOK); } SourceCode/Bond/BondEq/View/AxisDetailSettingsDlg.h
@@ -1,5 +1,6 @@ #pragma once #include "afxdialogex.h" #include "GridCtrl.h" // CAxisDetailSettingsDlg å¯¹è¯æ¡ @@ -21,6 +22,10 @@ #endif private: void UpdateAxisDetailSettings(); private: CPLC* m_pPLC; int m_nInitialWidth; int m_nInitialHeight; @@ -31,9 +36,11 @@ // æ§ä»¶ CStatic m_staticAxisNO, m_staticAxisDescription, m_staticStartAddress; CGridCtrl m_gridAxisDetailSettings; protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV æ¯æ virtual BOOL OnInitDialog(); afx_msg void OnBnClickedButtonAxisDetailSettingsSave(); DECLARE_MESSAGE_MAP() }; SourceCode/Bond/BondEq/View/AxisSettingsDlg.cpp
@@ -277,6 +277,7 @@ RecipeManager& recipeManager = RecipeManager::getInstance(); if (m_strRecipeName.IsEmpty() || !recipeManager.loadRecipe(std::string(CT2A(m_strRecipeName)))) { AfxMessageBox(_T("å è½½é æ¹å¤±è´¥ï¼")); recipeManager.saveRecipe(std::string(CT2A(m_strRecipeName))); return; } @@ -353,12 +354,22 @@ // æ¾ç¤ºå®ä½ç¹çå½åä½ç½® CString value; value.Format(_T("%.3f"), position.range.currentValue); if (pPositionCtrl) pPositionCtrl->SetWindowText(value); if (pPositionCtrl) { pPositionCtrl->SetWindowText(value); pPositionCtrl->EnableWindow(position.isEnable); } } else { // æ¸ ç©ºæ§ä»¶å 容 if (pDescriptionCtrl) pDescriptionCtrl->SetWindowText(_T("")); if (pPositionCtrl) pPositionCtrl->SetWindowText(_T("")); if (pDescriptionCtrl) { pDescriptionCtrl->SetWindowText(_T("")); pDescriptionCtrl->EnableWindow(FALSE); } if (pPositionCtrl) { pPositionCtrl->SetWindowText(_T("")); pPositionCtrl->EnableWindow(FALSE); } } } } @@ -455,7 +466,7 @@ if (index < axisData.positions.size()) { // æå»ºæ§ä»¶åç§° CString descriptionName, positionName, minValueName, maxValueName; CString descriptionName, positionName; descriptionName.Format(_T("IDC_EDIT_AXIS_ANCHOR_POINT_DESCRIP%d"), i + 1); positionName.Format(_T("IDC_EDIT_AXIS_ANCHOR_POINT%d"), i + 1); @@ -464,7 +475,7 @@ CEdit* pPositionEdit = (CEdit*)GetDlgItem(FindIDByName(positionName)); if (pDescriptionEdit && pPositionEdit) { CString description, positionValue, minValue, maxValue; CString description, positionValue; // è·åæ§ä»¶ä¸çææ¬ pDescriptionEdit->GetWindowText(description); @@ -770,19 +781,17 @@ m_nBtnsFlashState8 = ((BYTE)pData[b + 4] | (BYTE)pData[b + 5] << 8); m_nBtnsFlashState8 |= ((BYTE)pData[b + 6] << 16 | (BYTE)pData[b + 7] << 24); //AxisInfo axisInfo = RecipeManager::getInstance().getAxis(nAxisId); //axisInfo.autoSpeed.currentValue = m_fAutoSpeed; // èªå¨é度 //axisInfo.manualSpeed.currentValue = m_fManualSpeed; // æå¨é度 //axisInfo.jogDistance.currentValue = CToolUnits::toInt32(&pData[81 * 2]) * 0.001; // å¾®å¨é //axisInfo.accelerationTime.currentValue = CToolUnits::toInt32(&pData[62 * 2]) * 0.001; // å éæ¶é´ //axisInfo.decelerationTime.currentValue = CToolUnits::toInt32(&pData[64 * 2]) * 0.001; // åéæ¶é´ // 读åå®ä½ç¹æ°æ® //for (int i = 0; i < axisInfo.positions.size(); ++i) { // unsigned int positionAddress = 100 + (i * 2); // axisInfo.positions[i].range.currentValue = CToolUnits::toInt32(&pData[positionAddress * 2]) * 0.001; //} //RecipeManager::getInstance().updateAxis(axisInfo); AxisInfo axisInfo = RecipeManager::getInstance().getAxis(nAxisId); for (int i = 0; i < axisInfo.positions.size(); ++i) { if (axisInfo.positions[i].isEnable == FALSE) { unsigned int positionAddress = 100 + (i * 2); //axisInfo.positions[i].range.minValue = CToolUnits::toInt32(&pData[positionAddress * 2]) * 0.001; axisInfo.positions[i].range.currentValue = CToolUnits::toInt32(&pData[positionAddress * 2]) * 0.001; //axisInfo.positions[i].range.maxValue = CToolUnits::toInt32(&pData[positionAddress * 2]) * 0.001; } } RecipeManager::getInstance().updateAxis(axisInfo); PostMessage(ID_MSG_UPDATA_DATA_TO_UI); } @@ -1290,20 +1299,16 @@ if (ret != IDOK) { return; } writeAxisDataToPLC(axisId); //Sleep(2000); //refreshAxisDetails(axisId); //refreshPositionDetails(axisId, m_currentPage); updateDataFromUI(axisId); if (RecipeManager::getInstance().saveRecipe(std::string(CT2A(m_strRecipeName)))) { cstrMessage.Format(_T("ä¿åè½´ [%d] åæ°å°æä»¶æåï¼"), axisId); SystemLogManager::getInstance().log(SystemLogManager::LogType::Operation, std::string(CT2A(cstrMessage))); writeAxisDataToPLC(axisId); updateDataFromUI(axisId); cstrMessage.Format(_T("ä¿åè½´ [%d] åæ°æåï¼"), axisId); SystemLogManager::getInstance().log(SystemLogManager::LogType::Operation, std::string(CT2A(cstrMessage))); } else { cstrMessage.Format(_T("ä¿åè½´ [%d] åæ°å°æä»¶å¤±è´¥ï¼"), axisId); cstrMessage.Format(_T("ä¿åè½´ [%d] åæ°å¤±è´¥ï¼"), axisId); SystemLogManager::getInstance().log(SystemLogManager::LogType::Error, std::string(CT2A(cstrMessage))); } @@ -1335,6 +1340,9 @@ CAxisDetailSettingsDlg dlg(m_strRecipeName, nAxisId, this); dlg.SetPLC(m_pPLC); dlg.DoModal(); refreshAxisDetails(nAxisId); refreshPositionDetails(nAxisId, m_currentPage); } LRESULT CAxisSettingsDlg::OnUpdateDataToUI(WPARAM wParam, LPARAM lParam) @@ -1349,6 +1357,25 @@ // æ´æ°Labelsç¶æ UpdateLabels(); // æ´æ°ä¸å¯åçå®ä½ç¹æ°æ® RecipeManager& recipeManager = RecipeManager::getInstance(); for (int i = 0; i < AXIS_PAGE_SIZE; ++i) { PositionRange position = recipeManager.getPositionByIndex(getCurrentSelectedAxisID(), m_currentPage, AXIS_PAGE_SIZE, 0); if (position.isEnable) { continue; } CString positionName; positionName.Format(_T("IDC_EDIT_AXIS_ANCHOR_POINT%d"), i + 1); CEdit* pPositionEdit = (CEdit*)GetDlgItem(FindIDByName(positionName)); if (pPositionEdit) { CString positionValue; positionValue.Format(_T("%.3f"), position.range.currentValue); pPositionEdit->GetWindowText(positionValue); } } // OPRæé®æ¯å¦è¦éªçæåæ¢éªç // 06.0å08.0