From 09a0bd46861c8df221983f4ea1458a36c5d8a7c2 Mon Sep 17 00:00:00 2001
From: LAPTOP-SNT8I5JK\Boounion <Chenluhua@qq.com>
Date: 星期五, 13 十二月 2024 11:58:21 +0800
Subject: [PATCH] 1.工具条增加“警告”按钮
---
SourceCode/Bond/BondEq/View/AxisSettingsDlg.cpp | 175 +++++++++++++++++++++++++++++++++++++++++-----------------
1 files changed, 124 insertions(+), 51 deletions(-)
diff --git a/SourceCode/Bond/BondEq/View/AxisSettingsDlg.cpp b/SourceCode/Bond/BondEq/View/AxisSettingsDlg.cpp
index 0a60bd2..d8add62 100644
--- a/SourceCode/Bond/BondEq/View/AxisSettingsDlg.cpp
+++ b/SourceCode/Bond/BondEq/View/AxisSettingsDlg.cpp
@@ -44,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++) {
@@ -68,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++) {
@@ -93,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)
@@ -238,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) {
@@ -277,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;
}
@@ -312,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)
@@ -353,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);
+ }
}
}
}
@@ -434,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);
// 鏇存柊瀹氫綅鐐规暟鎹�
@@ -455,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);
@@ -464,7 +504,7 @@
CEdit* pPositionEdit = (CEdit*)GetDlgItem(FindIDByName(positionName));
if (pDescriptionEdit && pPositionEdit) {
- CString description, positionValue, minValue, maxValue;
+ CString description, positionValue;
// 鑾峰彇鎺т欢涓殑鏂囨湰
pDescriptionEdit->GetWindowText(description);
@@ -770,19 +810,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);
}
@@ -857,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);
@@ -971,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 ||
@@ -1198,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()
@@ -1290,20 +1345,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 +1386,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,13 +1403,32 @@
// 鏇存柊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
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) {
@@ -1371,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) {
@@ -1382,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)) {
@@ -1393,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)) {
@@ -1404,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)) {
@@ -1415,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