From 02c39baf5375f1588e9c20dc06d89a0605077672 Mon Sep 17 00:00:00 2001
From: LAPTOP-SNT8I5JK\Boounion <Chenluhua@qq.com>
Date: 星期一, 10 二月 2025 10:41:44 +0800
Subject: [PATCH] Merge branch 'liuyang' into clh
---
SourceCode/Bond/BoounionPLC/AxisSettingsDlg.cpp | 205 +++++++++++++++++++++++++++++++++++---------------
1 files changed, 143 insertions(+), 62 deletions(-)
diff --git a/SourceCode/Bond/BoounionPLC/AxisSettingsDlg.cpp b/SourceCode/Bond/BoounionPLC/AxisSettingsDlg.cpp
index d98b9b8..2d66d4c 100644
--- a/SourceCode/Bond/BoounionPLC/AxisSettingsDlg.cpp
+++ b/SourceCode/Bond/BoounionPLC/AxisSettingsDlg.cpp
@@ -8,6 +8,7 @@
#include "AxisDetailSettingsDlg.h"
#include "ToolUnits.h"
#include <cctype>
+#include <regex>
#define COLOR_GREEN_ON RGB(0, 255, 0) // 姝e父鐘舵�佺豢鑹�
@@ -53,10 +54,6 @@
m_pBlBtns[i] = new CBlButton();
}
- for (int i = 0; i < EDIT_MAX; i++) {
- m_pRegexEdit[i] = new CRegexEdit();
- }
-
for (int i = 0; i < LABEL_MAX; i++) {
m_pBlLabels[i] = new CBLLabel();
}
@@ -73,10 +70,6 @@
{
for (int i = 0; i < BTN_MAX; i++) {
delete m_pBlBtns[i];
- }
-
- for (int i = 0; i < EDIT_MAX; i++) {
- delete m_pRegexEdit[i];
}
for (int i = 0; i < LABEL_MAX; i++) {
@@ -179,24 +172,6 @@
SetLabelColorBasedOnState(*m_pBlLabels[LABEL_ERR], m_bErr, COLOR_RED, COLOR_GREEN_OFF);
}
-void CAxisSettingsDlg::UpdateRegexEdit(CRegexEdit* pRegexEdit, const ValueRange& range, const CString& title)
-{
- auto formatDouble = [](double value) -> CString {
- CString str;
- str.Format(_T("%.3f"), value);
- return str;
- };
-
- pRegexEdit->SetWindowText(formatDouble(range.currentValue));
- pRegexEdit->SetRegexType(RegexType::Decimal);
- pRegexEdit->SetValueRange(range.minValue, range.maxValue);
- pRegexEdit->SetInvalidInputCallback([title, range]() {
- CString strError;
- strError.Format(_T("%s鐨勫�煎繀椤诲湪 %.3f 鍜� %.3f 涔嬮棿锛�"), title, range.minValue, range.maxValue);
- AfxMessageBox(strError);
- });
-}
-
void CAxisSettingsDlg::UpdatePageButtonStates()
{
for (int i = 0; i < AXIS_PAGE_SIZE; ++i) {
@@ -271,11 +246,11 @@
m_staticAxisDescription.SetWindowText(CString(axisDetails.description.c_str())); // 杞存弿杩�
m_staticStartAddress.SetWindowText(CString(axisDetails.startAddress.c_str())); // 璧峰鍦板潃
- UpdateRegexEdit(m_pRegexEdit[EDIT_MICROMENTUM], axisDetails.jogDistance, _T("寰姩閲�"));
- UpdateRegexEdit(m_pRegexEdit[EDIT_MANUAL_SPEED], axisDetails.manualSpeed, _T("鎵嬪姩閫熷害"));
- UpdateRegexEdit(m_pRegexEdit[EDIT_AUTO_SPEED], axisDetails.autoSpeed, _T("鑷姩閫熷害"));
- UpdateRegexEdit(m_pRegexEdit[EDIT_ACCE_TIME], axisDetails.accelerationTime, _T("鍔犻�熸椂闂�"));
- UpdateRegexEdit(m_pRegexEdit[EDIT_DECE_TIME], axisDetails.decelerationTime, _T("鍑忛�熸椂闂�"));
+ GetDlgItem(IDC_EDIT_AXIS_MODITFY_MANUAL_SPEED)->SetWindowText(formatDouble(axisDetails.manualSpeed.currentValue));
+ GetDlgItem(IDC_EDIT_AXIS_MODITFY_AUTO_SPEED)->SetWindowText(formatDouble(axisDetails.autoSpeed.currentValue));
+ GetDlgItem(IDC_EDIT_AXIS_MODITFY_ACCE_TIME)->SetWindowText(formatDouble(axisDetails.accelerationTime.currentValue));
+ GetDlgItem(IDC_EDIT_AXIS_MODITFY_DECE_TIME)->SetWindowText(formatDouble(axisDetails.decelerationTime.currentValue));
+ GetDlgItem(IDC_EDIT_AXIS_MODITFY_MICROMENTUM)->SetWindowText(formatDouble(axisDetails.jogDistance.currentValue));
}
void CAxisSettingsDlg::RefreshPositionDetails(int nAxisId, int pageNumber)
@@ -309,13 +284,16 @@
CString value;
value.Format(_T("%.3f"), position.range.currentValue);
if (pPositionCtrl) {
- pPositionCtrl->SetWindowText(value);
pPositionCtrl->EnableWindow(position.isEnable);
-
if (position.isEnable) {
- CString strError;
- strError.Format(_T("瀹氫綅鐐�%d"), i + 1);
- UpdateRegexEdit((CRegexEdit*)pPositionCtrl, position.range, strError);
+ if (!IsFloatInRange((LPTSTR)(LPCTSTR)value, position.range.minValue, position.range.maxValue)) {
+ CString strError;
+ strError.Format(_T("瀹氫綅鐐�%d鍊煎繀椤诲湪 %.3f 鍜� %.3f 涔嬮棿锛�"), i + 1, position.range.minValue, position.range.maxValue);
+ ShowTipText(strError, 5);
+ }
+ else {
+ pPositionCtrl->SetWindowText(value);
+ }
}
}
}
@@ -364,8 +342,8 @@
// 鍒ゆ柇杈撳叆鐨勫�兼槸鍚﹀湪鍚堟硶鑼冨洿鍐�
if (enteredValue < minValue || enteredValue > maxValue) {
CString strError;
- strError.Format(_T("瀹氫綅鐐圭殑鍊煎繀椤诲湪 %f 鍜� %f 涔嬮棿锛�"), minValue, maxValue);
- pDescriptionCtrl->SetWindowText(strError);
+ strError.Format(_T("瀹氫綅鐐�%d鐨勫�煎繀椤诲湪 %f 鍜� %f 涔嬮棿锛�"), currentIndex + 1, minValue, maxValue);
+ ShowTipText(strError, 5);
}
else {
position.range.currentValue = enteredValue;
@@ -403,19 +381,19 @@
// 鑾峰彇鐣岄潰涓婄殑淇敼鍙傛暟
CString text;
- m_pRegexEdit[EDIT_MANUAL_SPEED]->GetWindowText(text);
+ GetDlgItem(IDC_EDIT_AXIS_MODITFY_MANUAL_SPEED)->GetWindowText(text);
axisData.manualSpeed.currentValue = _ttof(text);
- m_pRegexEdit[EDIT_AUTO_SPEED]->GetWindowText(text);
+ GetDlgItem(IDC_EDIT_AXIS_MODITFY_AUTO_SPEED)->GetWindowText(text);
axisData.autoSpeed.currentValue = _ttof(text);
- m_pRegexEdit[EDIT_ACCE_TIME]->GetWindowText(text);
+ GetDlgItem(IDC_EDIT_AXIS_MODITFY_ACCE_TIME)->GetWindowText(text);
axisData.accelerationTime.currentValue = _ttof(text);
- m_pRegexEdit[EDIT_DECE_TIME]->GetWindowText(text);
+ GetDlgItem(IDC_EDIT_AXIS_MODITFY_DECE_TIME)->GetWindowText(text);
axisData.decelerationTime.currentValue = _ttof(text);
- m_pRegexEdit[EDIT_MICROMENTUM]->GetWindowText(text);
+ GetDlgItem(IDC_EDIT_AXIS_MODITFY_MICROMENTUM)->GetWindowText(text);
axisData.jogDistance.currentValue = _ttof(text);
// 鏇存柊瀹氫綅鐐规暟鎹�
@@ -774,11 +752,15 @@
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_EN_KILLFOCUS(IDC_EDIT_AXIS_MODITFY_MANUAL_SPEED, &CAxisSettingsDlg::OnKillfocusEditAxisModitfyManualSpeed)
+ ON_EN_KILLFOCUS(IDC_EDIT_AXIS_MODITFY_AUTO_SPEED, &CAxisSettingsDlg::OnKillfocusEditAxisModitfyAutoSpeed)
+ ON_EN_KILLFOCUS(IDC_EDIT_AXIS_MODITFY_DECE_TIME, &CAxisSettingsDlg::OnKillfocusEditAxisModitfyDeceTime)
+ ON_EN_KILLFOCUS(IDC_EDIT_AXIS_MODITFY_ACCE_TIME, &CAxisSettingsDlg::OnKillfocusEditAxisModitfyAcceTime)
+ ON_EN_KILLFOCUS(IDC_EDIT_AXIS_MODITFY_MICROMENTUM, &CAxisSettingsDlg::OnEnKillfocusEditAxisModitfyMicromentum)
ON_WM_SIZE()
ON_WM_TIMER()
ON_WM_CLOSE()
ON_WM_CTLCOLOR()
- ON_EN_KILLFOCUS(IDC_EDIT_AXIS_MODITFY_MICROMENTUM, &CAxisSettingsDlg::OnEnKillfocusEditAxisModitfyMicromentum)
END_MESSAGE_MAP()
@@ -826,18 +808,6 @@
AdjustLabelFont(*pLabel);
}
-
- // 鍒濆鍖栫紪杈戞
- m_pRegexEdit[EDIT_MANUAL_SPEED]->SubclassDlgItem(IDC_EDIT_AXIS_MODITFY_MANUAL_SPEED, this);
- m_pRegexEdit[EDIT_AUTO_SPEED]->SubclassDlgItem(IDC_EDIT_AXIS_MODITFY_AUTO_SPEED, this);
- m_pRegexEdit[EDIT_ACCE_TIME]->SubclassDlgItem(IDC_EDIT_AXIS_MODITFY_ACCE_TIME, this);
- m_pRegexEdit[EDIT_DECE_TIME]->SubclassDlgItem(IDC_EDIT_AXIS_MODITFY_DECE_TIME, this);
- m_pRegexEdit[EDIT_MICROMENTUM]->SubclassDlgItem(IDC_EDIT_AXIS_MODITFY_MICROMENTUM, this);
- m_pRegexEdit[EDIT_ANCHOR_POINT1]->SubclassDlgItem(IDC_EDIT_AXIS_ANCHOR_POINT1, this);
- m_pRegexEdit[EDIT_ANCHOR_POINT2]->SubclassDlgItem(IDC_EDIT_AXIS_ANCHOR_POINT2, this);
- m_pRegexEdit[EDIT_ANCHOR_POINT3]->SubclassDlgItem(IDC_EDIT_AXIS_ANCHOR_POINT3, this);
- m_pRegexEdit[EDIT_ANCHOR_POINT4]->SubclassDlgItem(IDC_EDIT_AXIS_ANCHOR_POINT4, this);
- m_pRegexEdit[EDIT_ANCHOR_POINT5]->SubclassDlgItem(IDC_EDIT_AXIS_ANCHOR_POINT5, this);
// 鎸夐挳鍒濆鍖�
m_pBlBtns[BTN_PAGE1]->SubclassDlgItem(IDC_BUTTON_AXIS_ANCHOR_POINT_GROUP1, this);
@@ -1385,6 +1355,110 @@
return 0;
}
+void CAxisSettingsDlg::OnKillfocusEditAxisModitfyManualSpeed()
+{
+ // TODO: 鍦ㄦ娣诲姞鎺т欢閫氱煡澶勭悊绋嬪簭浠g爜
+ int nAxisId = GetCurrentSelectedAxisID();
+ if (nAxisId == -1) {
+ AfxMessageBox(_T("璇烽�夋嫨涓�涓湁鏁堢殑杞寸紪鍙凤紒"));
+ return;
+ }
+ auto axisDetails = m_pAxisManager->GetAxis(nAxisId);
+ auto dMinValue = axisDetails.manualSpeed.minValue;
+ auto dMaxValue = axisDetails.manualSpeed.maxValue;
+
+ CString strText;
+ GetDlgItemText(IDC_EDIT_AXIS_MODITFY_MANUAL_SPEED, strText);
+ if (!IsFloatInRange((LPTSTR)(LPCTSTR)strText, dMinValue, dMaxValue)) {
+ CString strError;
+ strError.Format(_T("鎵嬪姩閫熷害鍊煎繀椤诲湪 %.3f 鍜� %.3f 涔嬮棿锛�"), dMinValue, dMaxValue);
+ ShowTipText(strError, 5);
+ }
+}
+
+void CAxisSettingsDlg::OnKillfocusEditAxisModitfyAutoSpeed()
+{
+ // TODO: 鍦ㄦ娣诲姞鎺т欢閫氱煡澶勭悊绋嬪簭浠g爜
+ int nAxisId = GetCurrentSelectedAxisID();
+ if (nAxisId == -1) {
+ AfxMessageBox(_T("璇烽�夋嫨涓�涓湁鏁堢殑杞寸紪鍙凤紒"));
+ return;
+ }
+ auto axisDetails = m_pAxisManager->GetAxis(nAxisId);
+ auto dMinValue = axisDetails.autoSpeed.minValue;
+ auto dMaxValue = axisDetails.autoSpeed.maxValue;
+
+ CString strText;
+ GetDlgItemText(IDC_EDIT_AXIS_MODITFY_AUTO_SPEED, strText);
+ if (!IsFloatInRange((LPTSTR)(LPCTSTR)strText, dMinValue, dMaxValue)) {
+ CString strError;
+ strError.Format(_T("鑷姩閫熷害鍊煎繀椤诲湪 %.3f 鍜� %.3f 涔嬮棿锛�"), dMinValue, dMaxValue);
+ ShowTipText(strError, 5);
+ }
+}
+
+void CAxisSettingsDlg::OnKillfocusEditAxisModitfyAcceTime()
+{
+ // TODO: 鍦ㄦ娣诲姞鎺т欢閫氱煡澶勭悊绋嬪簭浠g爜
+ int nAxisId = GetCurrentSelectedAxisID();
+ if (nAxisId == -1) {
+ AfxMessageBox(_T("璇烽�夋嫨涓�涓湁鏁堢殑杞寸紪鍙凤紒"));
+ return;
+ }
+ auto axisDetails = m_pAxisManager->GetAxis(nAxisId);
+ auto dMinValue = axisDetails.accelerationTime.minValue;
+ auto dMaxValue = axisDetails.accelerationTime.maxValue;
+
+ CString strText;
+ GetDlgItemText(IDC_EDIT_AXIS_MODITFY_ACCE_TIME, strText);
+ if (!IsFloatInRange((LPTSTR)(LPCTSTR)strText, dMinValue, dMaxValue)) {
+ CString strError;
+ strError.Format(_T("鍔犻�熸椂闂村�煎繀椤诲湪 %.3f 鍜� %.3f 涔嬮棿锛�"), dMinValue, dMaxValue);
+ ShowTipText(strError, 5);
+ }
+}
+
+void CAxisSettingsDlg::OnKillfocusEditAxisModitfyDeceTime()
+{
+ // TODO: 鍦ㄦ娣诲姞鎺т欢閫氱煡澶勭悊绋嬪簭浠g爜
+ int nAxisId = GetCurrentSelectedAxisID();
+ if (nAxisId == -1) {
+ AfxMessageBox(_T("璇烽�夋嫨涓�涓湁鏁堢殑杞寸紪鍙凤紒"));
+ return;
+ }
+ auto axisDetails = m_pAxisManager->GetAxis(nAxisId);
+ auto dMinValue = axisDetails.decelerationTime.minValue;
+ auto dMaxValue = axisDetails.decelerationTime.maxValue;
+
+ CString strText;
+ GetDlgItemText(IDC_EDIT_AXIS_MODITFY_DECE_TIME, strText);
+ if (!IsFloatInRange((LPTSTR)(LPCTSTR)strText, dMinValue, dMaxValue)) {
+ CString strError;
+ strError.Format(_T("鍑忛�熸椂闂村�煎繀椤诲湪 %.3f 鍜� %.3f 涔嬮棿锛�"), dMinValue, dMaxValue);
+ ShowTipText(strError, 5);
+ }
+}
+
+void CAxisSettingsDlg::OnEnKillfocusEditAxisModitfyMicromentum()
+{
+ int nAxisId = GetCurrentSelectedAxisID();
+ if (nAxisId == -1) {
+ AfxMessageBox(_T("璇烽�夋嫨涓�涓湁鏁堢殑杞寸紪鍙凤紒"));
+ return;
+ }
+ auto axisDetails = m_pAxisManager->GetAxis(nAxisId);
+ auto dMinValue = axisDetails.jogDistance.minValue;
+ auto dMaxValue = axisDetails.jogDistance.maxValue;
+
+ CString strText;
+ GetDlgItemText(IDC_EDIT_AXIS_MODITFY_MICROMENTUM, strText);
+ if (!IsFloatInRange((LPTSTR)(LPCTSTR)strText, dMinValue, dMaxValue)) {
+ CString strError;
+ strError.Format(_T("寰姩閲忓�煎繀椤诲湪 %.3f 鍜� %.3f 涔嬮棿锛�"), dMinValue, dMaxValue);
+ ShowTipText(strError, 5);
+ }
+}
+
void CAxisSettingsDlg::OnTimer(UINT_PTR nIDEvent)
{
if (TIMER_READ_PLC_DATA == nIDEvent) {
@@ -1455,12 +1529,19 @@
GetDlgItem(IDC_LABEL_TIP)->ShowWindow(SW_HIDE);
}
-void CAxisSettingsDlg::OnEnKillfocusEditAxisModitfyMicromentum()
+bool CAxisSettingsDlg::IsFloatInRange(const std::string& strInput, double fLowerBound, double fUpperBound)
{
- CString strText;
- GetDlgItemText(IDC_EDIT_AXIS_MODITFY_MICROMENTUM, strText);
- double value = atof(strText);
- if (value < 0.0 || value > 0.1) {
- ShowTipText("寰姩閲忓�煎繀椤诲湪0.0 ~ 0.1涔嬮棿", 5);
+ // 鏄惁涓哄悎娉曟诞鐐规暟
+ std::regex floatRegex(R"([-+]?\d*\.?\d+([eE][-+]?\d+)?)");
+ if (!std::regex_match(strInput, floatRegex)) {
+ return false;
+ }
+
+ try {
+ double value = std::stod(strInput);
+ return value >= fLowerBound && value <= fUpperBound;
+ }
+ catch (const std::exception&) {
+ return false;
}
}
--
Gitblit v1.9.3