From 016703bb359382dc1de4ac204da47b6f29c55c81 Mon Sep 17 00:00:00 2001
From: LAPTOP-SNT8I5JK\Boounion <Chenluhua@qq.com>
Date: 星期四, 12 十二月 2024 11:09:10 +0800
Subject: [PATCH] Merge branch 'liuyang' into clh
---
SourceCode/Bond/BondEq/View/AxisSettingsDlg.cpp | 200 +++++++++++++++++++++++++++++++++++++------------
1 files changed, 149 insertions(+), 51 deletions(-)
diff --git a/SourceCode/Bond/BondEq/View/AxisSettingsDlg.cpp b/SourceCode/Bond/BondEq/View/AxisSettingsDlg.cpp
index c240ab3..d8add62 100644
--- a/SourceCode/Bond/BondEq/View/AxisSettingsDlg.cpp
+++ b/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>
@@ -43,8 +44,13 @@
m_bReady = FALSE;
m_bBusy = FALSE;
m_bErr = FALSE;
+
for (int i = 0; i < BTN_MAX; i++) {
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++) {
@@ -67,6 +73,10 @@
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++) {
@@ -92,11 +102,6 @@
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_EDIT_AXIS_MODITFY_POS, m_editManualSpeed);
- DDX_Control(pDX, IDC_EDIT_AXIS_MODITFY_AUTO_SPEED, m_editAutoSpeed);
- DDX_Control(pDX, IDC_EDIT_AXIS_MODITFY_ACCE_TIME, m_editAccelerationTime);
- DDX_Control(pDX, IDC_EDIT_AXIS_MODITFY_DECE_TIME, m_editDecelerationTime);
- DDX_Control(pDX, IDC_EDIT_AXIS_MODITFY_MICROMENTUM, m_editJogDistance);
}
UINT CAxisSettingsDlg::FindIDByName(const CString& strControlID)
@@ -237,6 +242,24 @@
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) {
@@ -276,6 +299,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;
}
@@ -311,14 +335,15 @@
};
// 鏇存柊鎺т欢鏄剧ず
- m_staticAxisNO.SetWindowText(CString(axisDetails.number.c_str())); // 杞寸紪鍙�
- m_staticAxisDescription.SetWindowText(CString(axisDetails.description.c_str())); // 杞存弿杩�
- m_staticStartAddress.SetWindowText(CString(axisDetails.startAddress.c_str())); // 璧峰鍦板潃
- m_editJogDistance.SetWindowText(formatDouble(axisDetails.jogDistance.currentValue)); // 寰姩閲�
- m_editManualSpeed.SetWindowText(formatDouble(axisDetails.manualSpeed.currentValue)); // 鎵嬪姩閫熷害
- m_editAutoSpeed.SetWindowText(formatDouble(axisDetails.autoSpeed.currentValue)); // 鑷姩閫熷害
- m_editAccelerationTime.SetWindowText(formatDouble(axisDetails.accelerationTime.currentValue)); // 鍔犻�熸椂闂�
- m_editDecelerationTime.SetWindowText(formatDouble(axisDetails.decelerationTime.currentValue)); // 鍑忛�熸椂闂�
+ m_staticAxisNO.SetWindowText(CString(axisDetails.number.c_str())); // 杞寸紪鍙�
+ 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("鍑忛�熸椂闂�"));
}
void CAxisSettingsDlg::refreshPositionDetails(int nAxisId, int pageNumber)
@@ -352,12 +377,28 @@
// 鏄剧ず瀹氫綅鐐圭殑褰撳墠浣嶇疆
CString value;
value.Format(_T("%.3f"), position.range.currentValue);
- if (pPositionCtrl) pPositionCtrl->SetWindowText(value);
+ 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);
+ }
+ }
}
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);
+ }
}
}
}
@@ -433,19 +474,19 @@
// 鑾峰彇鐣岄潰涓婄殑淇敼鍙傛暟
CString text;
- m_editManualSpeed.GetWindowText(text);
+ m_pRegexEdit[EDIT_MANUAL_SPEED]->GetWindowText(text);
axisData.manualSpeed.currentValue = _ttof(text);
- m_editAutoSpeed.GetWindowText(text);
+ m_pRegexEdit[EDIT_AUTO_SPEED]->GetWindowText(text);
axisData.autoSpeed.currentValue = _ttof(text);
- m_editAccelerationTime.GetWindowText(text);
+ m_pRegexEdit[EDIT_ACCE_TIME]->GetWindowText(text);
axisData.accelerationTime.currentValue = _ttof(text);
- m_editDecelerationTime.GetWindowText(text);
+ m_pRegexEdit[EDIT_DECE_TIME]->GetWindowText(text);
axisData.decelerationTime.currentValue = _ttof(text);
- m_editJogDistance.GetWindowText(text);
+ m_pRegexEdit[EDIT_MICROMENTUM]->GetWindowText(text);
axisData.jogDistance.currentValue = _ttof(text);
// 鏇存柊瀹氫綅鐐规暟鎹�
@@ -454,7 +495,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 +504,7 @@
CEdit* pPositionEdit = (CEdit*)GetDlgItem(FindIDByName(positionName));
if (pDescriptionEdit && pPositionEdit) {
- CString description, positionValue, minValue, maxValue;
+ CString description, positionValue;
// 鑾峰彇鎺т欢涓殑鏂囨湰
pDescriptionEdit->GetWindowText(description);
@@ -769,17 +810,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 +844,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 +871,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);
@@ -861,6 +895,18 @@
pLabel->SetDynamicFont(TRUE);
}
+ // 鍒濆鍖栫紪杈戞
+ 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);
m_pBlBtns[BTN_PAGE2]->SubclassDlgItem(IDC_BUTTON_AXIS_ANCHOR_POINT_GROUP2, this);
@@ -975,6 +1021,11 @@
CWnd* pWnd = CWnd::FromHandle(pMsg->hwnd);
if (pWnd) {
+ if (pMsg->message == WM_KEYDOWN && pMsg->wParam == VK_RETURN) {
+ // 闃绘鍥炶溅閿粯璁ゅ鐞嗭紝闃叉瀵硅瘽妗嗗叧闂�
+ return TRUE;
+ }
+
// 鍒ゆ柇榧犳爣鏄惁杩涘叆鎸囧畾鎺т欢鍖哄煙
if (pWnd->GetSafeHwnd() == GetDlgItem(IDC_EDIT_AXIS_ANCHOR_POINT_DESCRIP1)->m_hWnd ||
pWnd->GetSafeHwnd() == GetDlgItem(IDC_EDIT_AXIS_ANCHOR_POINT_DESCRIP2)->m_hWnd ||
@@ -1202,7 +1253,7 @@
handleAxisOperation(AxisOperationType::POSITION_1, true);
Sleep(200);
handleAxisOperation(AxisOperationType::POSITION_1, false);
- m_pBlBtns[BTN_POINT1]->Flash(1000);
+ m_pBlBtns[BTN_POINT1]->Flash(500);
}
void CAxisSettingsDlg::OnBnClickedButtonAxisAnchorPoint2()
@@ -1298,6 +1349,7 @@
updateDataFromUI(axisId);
if (RecipeManager::getInstance().saveRecipe(std::string(CT2A(m_strRecipeName)))) {
writeAxisDataToPLC(axisId);
+
cstrMessage.Format(_T("淇濆瓨杞� [%d] 鍙傛暟鎴愬姛锛�"), axisId);
SystemLogManager::getInstance().log(SystemLogManager::LogType::Operation, std::string(CT2A(cstrMessage)));
}
@@ -1307,6 +1359,36 @@
}
AfxMessageBox(cstrMessage);
+}
+
+void CAxisSettingsDlg::OnBnClickedButtonAxisUpdateUi()
+{
+ // TODO: 鍦ㄦ娣诲姞鎺т欢閫氱煡澶勭悊绋嬪簭浠g爜
+ int axisId = getCurrentSelectedAxisID();
+ if (axisId == -1) {
+ AfxMessageBox(_T("璇烽�夋嫨涓�涓湁鏁堢殑杞寸紪鍙凤紒"));
+ return;
+ }
+
+ refreshAxisDetails(axisId);
+ refreshPositionDetails(axisId, m_currentPage);
+}
+
+void CAxisSettingsDlg::OnBnClickedButtonAxisDetailSettings()
+{
+ // TODO: 鍦ㄦ娣诲姞鎺т欢閫氱煡澶勭悊绋嬪簭浠g爜
+ 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)
@@ -1321,16 +1403,32 @@
// 鏇存柊Labels鐘舵��
UpdateLabels();
-
- // 鏇存柊瀹氫綅鐐�
- //refreshPositionDetails(getCurrentSelectedAxisID(), m_currentPage);
+
+ // 鏇存柊涓嶅彲鍐欑殑瀹氫綅鐐规暟鎹�
+ 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
if (m_nBtnsFlashState6 & 0x01) {
// 06.0
if (!m_pBlBtns[BTN_JOG_OPR]->IsFlash()) {
- m_pBlBtns[BTN_JOG_OPR]->Flash(1000);
+ m_pBlBtns[BTN_JOG_OPR]->Flash(500);
}
}
else if (m_nBtnsFlashState8 & 0x01) {
@@ -1346,7 +1444,7 @@
if (m_nBtnsFlashState6 & v) {
if (!m_pBlBtns[BTN_POINT1]->IsFlash()) {
- m_pBlBtns[BTN_POINT1]->Flash(1000);
+ m_pBlBtns[BTN_POINT1]->Flash(500);
}
}
else if (m_nBtnsFlashState8 & v) {
@@ -1357,7 +1455,7 @@
if (m_nBtnsFlashState6 & (v << 1)) {
if (!m_pBlBtns[BTN_POINT2]->IsFlash()) {
- m_pBlBtns[BTN_POINT2]->Flash(1000);
+ m_pBlBtns[BTN_POINT2]->Flash(500);
}
}
else if (m_nBtnsFlashState8 & (v << 1)) {
@@ -1368,7 +1466,7 @@
if (m_nBtnsFlashState6 & (v << 2)) {
if (!m_pBlBtns[BTN_POINT3]->IsFlash()) {
- m_pBlBtns[BTN_POINT3]->Flash(1000);
+ m_pBlBtns[BTN_POINT3]->Flash(500);
}
}
else if (m_nBtnsFlashState8 & (v << 2)) {
@@ -1379,7 +1477,7 @@
if (m_nBtnsFlashState6 & (v << 3)) {
if (!m_pBlBtns[BTN_POINT4]->IsFlash()) {
- m_pBlBtns[BTN_POINT4]->Flash(1000);
+ m_pBlBtns[BTN_POINT4]->Flash(500);
}
}
else if (m_nBtnsFlashState8 & (v << 3)) {
@@ -1390,7 +1488,7 @@
if (m_nBtnsFlashState6 & (v << 4)) {
if (!m_pBlBtns[BTN_POINT5]->IsFlash()) {
- m_pBlBtns[BTN_POINT5]->Flash(1000);
+ m_pBlBtns[BTN_POINT5]->Flash(500);
}
}
else if (m_nBtnsFlashState8 & (v << 4)) {
--
Gitblit v1.9.3