SourceCode/Bond/BondEq/View/AxisSettingsDlg.cpp
@@ -5,6 +5,7 @@
#include "BondEq.h"
#include "afxdialogex.h"
#include "AxisSettingsDlg.h"
#include "AxisDetailSettingsDlg.h"
#include "ToolUnits.h"
#include <cctype>
#include <algorithm>
@@ -276,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;
   }
@@ -352,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);
         }
      }
   }
}
@@ -454,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);
@@ -463,7 +475,7 @@
         CEdit* pPositionEdit = (CEdit*)GetDlgItem(FindIDByName(positionName));
         if (pDescriptionEdit && pPositionEdit) {
            CString description, positionValue, minValue, maxValue;
            CString description, positionValue;
            // 获取控件中的文本
            pDescriptionEdit->GetWindowText(description);
@@ -769,17 +781,15 @@
         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;      // 减速时间
         // 读取定位点数据
         AxisInfo axisInfo = RecipeManager::getInstance().getAxis(nAxisId);
         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;
            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);
@@ -805,15 +815,17 @@
   ON_BN_CLICKED(IDC_BUTTON_AXIS_ANCHOR_POINT5, &CAxisSettingsDlg::OnBnClickedButtonAxisAnchorPoint5)
   ON_BN_CLICKED(IDC_BUTTON_AXIS_TEST_OPR, &CAxisSettingsDlg::OnBnClickedButtonAxisTestOpr)
   ON_BN_CLICKED(IDC_BUTTON_AXIS_TEST_STOP, &CAxisSettingsDlg::OnBnClickedButtonAxisTestStop)
   ON_BN_CLICKED(IDC_BUTTON_AXIS_SEV, &CAxisSettingsDlg::OnBnClickedButtonAxisSev)
   ON_CBN_SELCHANGE(IDC_COMBO_AXIS_NAME, &CAxisSettingsDlg::OnSelchangeComboAxisName)
   ON_BN_CLICKED(IDC_BUTTON_AXIS_SAVE, &CAxisSettingsDlg::OnBnClickedButtonAxisSave)
   ON_BN_CLICKED(IDC_BUTTON_AXIS_UPDATE_UI, &CAxisSettingsDlg::OnBnClickedButtonAxisUpdateUi)
   ON_BN_CLICKED(IDC_BUTTON_AXIS_DETAIL_SETTINGS, &CAxisSettingsDlg::OnBnClickedButtonAxisDetailSettings)
   ON_MESSAGE(ID_MSG_UPDATA_DATA_TO_UI, &CAxisSettingsDlg::OnUpdateDataToUI)
   ON_WM_SIZE()
   ON_WM_CTLCOLOR()
   ON_WM_SIZING()
   ON_WM_TIMER()
   ON_WM_CLOSE()
   ON_BN_CLICKED(IDC_BUTTON_AXIS_SEV, &CAxisSettingsDlg::OnBnClickedButtonAxisSev)
END_MESSAGE_MAP()
@@ -830,20 +842,13 @@
   SetWindowText(strTitle);
   // 隐藏光标
   //HideEditCursor(IDC_EDIT_AXIS_CURR_POS);
   HideEditCursor(IDC_EDIT_AXIS_CURR_POS);
   HideEditCursor(IDC_EDIT_AXIS_CURR_MANUAL_SPEED);
   HideEditCursor(IDC_EDIT_AXIS_CURR_AUTO_SPEED);
   HideEditCursor(IDC_EDIT_AXIS_CURR_ROTA_SPEED);
   HideEditCursor(IDC_EDIT_AXIS_CURR_LOAD);
   HideEditCursor(IDC_EDIT_AXIS_CURR_ERROR_NUMBER);
   HideEditCursor(IDC_EDIT_AXIS_CURR_ALARM_NUMBER);
   // 测试
   {
      CEdit* pEdit = (CEdit*)GetDlgItem(IDC_EDIT_AXIS_CURR_POS);
      pEdit->EnableWindow(TRUE);
      pEdit->SetReadOnly(FALSE);
   }
   // 设置测试状态
   m_pBlLabels[LABEL_FLS]->SubclassDlgItem(IDC_STATIC_AXIS_TEST_FLS, this);
@@ -1294,24 +1299,50 @@
   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)));
   }
   AfxMessageBox(cstrMessage);
}
void CAxisSettingsDlg::OnBnClickedButtonAxisUpdateUi()
{
   // TODO: 在此添加控件通知处理程序代码
   int axisId = getCurrentSelectedAxisID();
   if (axisId == -1) {
      AfxMessageBox(_T("请选择一个有效的轴编号!"));
      return;
   }
   refreshAxisDetails(axisId);
   refreshPositionDetails(axisId, m_currentPage);
}
void CAxisSettingsDlg::OnBnClickedButtonAxisDetailSettings()
{
   // TODO: 在此添加控件通知处理程序代码
   int nAxisId = getCurrentSelectedAxisID();
   if (nAxisId == -1) {
      AfxMessageBox(_T("请选择一个有效的轴编号!"));
      return;
   }
   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)
@@ -1326,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