| | |
| | | #include <cctype> |
| | | #include <algorithm> |
| | | |
| | | #define COLOR_GREEN_ON RGB(0, 255, 0) // 正常状态绿色 |
| | | #define COLOR_GREEN_OFF RGB(0, 180, 0) // 偏绿状态 |
| | | #define COLOR_RED RGB(255, 0, 0) // 错误状态红色 |
| | | |
| | | #define TIMER_INIT 1 |
| | | #define TIMER_READ_PLC_DATA 2 |
| | | |
| | |
| | | for (int i = 0; i < BTN_MAX; i++) { |
| | | m_pBlBtns[i] = new CBlButton(); |
| | | } |
| | | for (int i = 0; i < 6; i++) { |
| | | |
| | | for (int i = 0; i < LABEL_MAX; i++) { |
| | | m_pBlLabels[i] = new CBLLabel(); |
| | | } |
| | | |
| | | m_nBtnsFlashState6 = 0; |
| | | m_nBtnsFlashState8 = 0; |
| | | } |
| | |
| | | delete m_pBlBtns[i]; |
| | | } |
| | | |
| | | for (int i = 0; i < 6; i++) { |
| | | for (int i = 0; i < LABEL_MAX; i++) { |
| | | delete m_pBlLabels[i]; |
| | | } |
| | | } |
| | |
| | | label.UpdateWindow(); // 立即刷新 |
| | | } |
| | | |
| | | void CAxisSettingsDlg::SetLabelColorBasedOnState(CBLLabel& label, BOOL bState, COLORREF colorTrue, COLORREF colorFalse) { |
| | | SetLabelColor(label, bState ? colorTrue : colorFalse); |
| | | } |
| | | |
| | | void CAxisSettingsDlg::UpdateLabels() { |
| | | SetLabelColorBasedOnState(*m_pBlLabels[LABEL_FLS], m_bFLS, COLOR_GREEN_ON, COLOR_GREEN_OFF); |
| | | SetLabelColorBasedOnState(*m_pBlLabels[LABEL_DOG], m_bDOG, COLOR_GREEN_ON, COLOR_GREEN_OFF); |
| | | SetLabelColorBasedOnState(*m_pBlLabels[LABEL_RLS], m_bRLS, COLOR_GREEN_ON, COLOR_GREEN_OFF); |
| | | SetLabelColorBasedOnState(*m_pBlLabels[LABEL_READY], m_bReady, COLOR_GREEN_ON, COLOR_GREEN_OFF); |
| | | SetLabelColorBasedOnState(*m_pBlLabels[LABEL_BUSY], m_bBusy, COLOR_GREEN_ON, COLOR_GREEN_OFF); |
| | | SetLabelColorBasedOnState(*m_pBlLabels[LABEL_ERR], m_bErr, COLOR_RED, COLOR_GREEN_OFF); |
| | | } |
| | | |
| | | void CAxisSettingsDlg::updatePageButtonStates() |
| | | { |
| | | for (int i = 0; i < 5; ++i) { |
| | | for (int i = 0; i < AXIS_PAGE_SIZE; ++i) { |
| | | BOOL bSelect = (i + 1 == m_currentPage); |
| | | m_pBlBtns[i]->SetFaceColor(bSelect ? |
| | | BTN_PAGE_FACE_SELECT_COLOR: BTN_PAGE_FACE_NORMAL_COLOR); |
| | |
| | | { |
| | | RecipeManager& recipeManager = RecipeManager::getInstance(); |
| | | // 每页显示的定位点数量 |
| | | const int pageSize = 5; |
| | | const int pageSize = AXIS_PAGE_SIZE; |
| | | |
| | | // 获取定位点数据 |
| | | auto positions = recipeManager.getPositions(nAxisId, pageNumber, pageSize); |
| | |
| | | |
| | | void CAxisSettingsDlg::updateDataFromUI(int nAxisId) |
| | | { |
| | | const int pageSize = 5; // 每页显示 5 个定位点 |
| | | const int pageSize = AXIS_PAGE_SIZE; // 每页显示 5 个定位点 |
| | | |
| | | RecipeManager& recipeManager = RecipeManager::getInstance(); |
| | | auto axisData = recipeManager.getAxis(nAxisId); |
| | |
| | | |
| | | // 写入定位点数据 |
| | | int positionStartAddress = startAddress + 100; |
| | | for (size_t i = 0; i < axisData.positions.size(); ++i) { |
| | | for (int i = 0; i < axisData.positions.size(); ++i) { |
| | | const auto& position = axisData.positions[i]; |
| | | unsigned int positionAddress = positionStartAddress + (i * 2); |
| | | |
| | |
| | | { |
| | | // 从 RecipeManager 获取轴数据 |
| | | RecipeManager& recipeManager = RecipeManager::getInstance(); |
| | | auto axisData = recipeManager.getAxis(nAxisId); |
| | | AxisInfo axisData = recipeManager.getAxis(nAxisId); |
| | | |
| | | MC::SOFT_COMPONENT component; |
| | | int startAddress, endAddress, readSize; |
| | |
| | | endAddress = startAddress + 300; |
| | | readSize = (endAddress - startAddress + 1) * 2; |
| | | |
| | | auto funOnReadData = [&, startAddress, readSize](IMcChannel* pChannel, int addr, char* pData, unsigned int nDataSize, int flag) -> void { |
| | | auto funOnReadData = [this, nAxisId, startAddress, readSize](IMcChannel* pChannel, int addr, char* pData, unsigned int nDataSize, int flag) -> void { |
| | | if (nDataSize == readSize && flag == 0 && ::IsWindow(m_hWnd)) { |
| | | m_fCurPos = CToolUnits::toInt32(&pData[20 * 2]) * 0.001; |
| | | m_fManualSpeed = CToolUnits::toInt32(&pData[82 * 2]) * 0.001; |
| | |
| | | m_nBtnsFlashState6 |= ((BYTE)pData[b + 2] << 16 | (BYTE)pData[b + 3] << 24); |
| | | 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); |
| | | |
| | | PostMessage(ID_MSG_UPDATA_DATA_TO_UI); |
| | | } |
| | |
| | | } |
| | | |
| | | // 设置测试状态 |
| | | m_pBlLabels[0]->SubclassDlgItem(IDC_STATIC_AXIS_TEST_FLS, this); |
| | | m_pBlLabels[1]->SubclassDlgItem(IDC_STATIC_AXIS_TEST_DOG, this); |
| | | m_pBlLabels[2]->SubclassDlgItem(IDC_STATIC_AXIS_TEST_RLS, this); |
| | | m_pBlLabels[3]->SubclassDlgItem(IDC_STATIC_AXIS_TEST_READY, this); |
| | | m_pBlLabels[4]->SubclassDlgItem(IDC_STATIC_AXIS_TEST_BUSY, this); |
| | | m_pBlLabels[5]->SubclassDlgItem(IDC_STATIC_AXIS_TEST_ERR, this); |
| | | m_pBlLabels[LABEL_FLS]->SubclassDlgItem(IDC_STATIC_AXIS_TEST_FLS, this); |
| | | m_pBlLabels[LABEL_DOG]->SubclassDlgItem(IDC_STATIC_AXIS_TEST_DOG, this); |
| | | m_pBlLabels[LABEL_RLS]->SubclassDlgItem(IDC_STATIC_AXIS_TEST_RLS, this); |
| | | m_pBlLabels[LABEL_READY]->SubclassDlgItem(IDC_STATIC_AXIS_TEST_READY, this); |
| | | m_pBlLabels[LABEL_BUSY]->SubclassDlgItem(IDC_STATIC_AXIS_TEST_BUSY, this); |
| | | m_pBlLabels[LABEL_ERR]->SubclassDlgItem(IDC_STATIC_AXIS_TEST_ERR, this); |
| | | |
| | | for (auto pLabel : m_pBlLabels) { |
| | | pLabel->SetBkColor(RGB(0, 180, 0)); |
| | |
| | | m_pBlBtns[BTN_POINT1 + i]->SetBkgndColor(BS_HOVER, BTN_POINT_BKGND_HOVER); |
| | | m_pBlBtns[BTN_POINT1 + i]->SetBkgndColor(BS_PRESS, BTN_POINT_BKGND_PRESS); |
| | | } |
| | | |
| | | |
| | | // 初始化当前页面为第一页 |
| | | m_currentPage = 1; |
| | |
| | | return CDialogEx::PreTranslateMessage(pMsg); |
| | | } |
| | | |
| | | PositionRange& position = recipeManager.getPositionByIndex(getCurrentSelectedAxisID(), m_currentPage, 5, currentIndex); |
| | | PositionRange& position = recipeManager.getPositionByIndex(getCurrentSelectedAxisID(), m_currentPage, AXIS_PAGE_SIZE, currentIndex); |
| | | if (pMsg->message == WM_LBUTTONDOWN || pMsg->message == WM_LBUTTONDBLCLK) { |
| | | // 处理鼠标点击事件 |
| | | // 设置鼠标为箭头光标 |
| | |
| | | SetDlgItemInt(IDC_EDIT_AXIS_CURR_ERROR_NUMBER, m_nErrCode); |
| | | SetDlgItemInt(IDC_EDIT_AXIS_CURR_ALARM_NUMBER, m_nAlarmCode); |
| | | |
| | | //OPR 信号 |
| | | if (m_bFLS) { |
| | | SetLabelColor(*m_pBlLabels[0], RGB(0, 255, 0)); |
| | | } |
| | | else { |
| | | SetLabelColor(*m_pBlLabels[0], RGB(0, 180, 0)); |
| | | } |
| | | |
| | | if (m_bDOG) { |
| | | SetLabelColor(*m_pBlLabels[1], RGB(0, 255, 0)); |
| | | } |
| | | else { |
| | | SetLabelColor(*m_pBlLabels[1], RGB(0, 180, 0)); |
| | | } |
| | | |
| | | if (m_bRLS) { |
| | | SetLabelColor(*m_pBlLabels[2], RGB(0, 255, 0)); |
| | | } |
| | | else { |
| | | SetLabelColor(*m_pBlLabels[2], RGB(0, 180, 0)); |
| | | } |
| | | |
| | | if (m_bReady) { |
| | | SetLabelColor(*m_pBlLabels[3], RGB(0, 255, 0)); |
| | | } |
| | | else { |
| | | SetLabelColor(*m_pBlLabels[3], RGB(0, 180, 0)); |
| | | } |
| | | |
| | | if (m_bBusy) { |
| | | SetLabelColor(*m_pBlLabels[4], RGB(0, 255, 0)); |
| | | } |
| | | else { |
| | | SetLabelColor(*m_pBlLabels[4], RGB(0, 180, 0)); |
| | | } |
| | | |
| | | if (m_bErr) { |
| | | SetLabelColor(*m_pBlLabels[5], RGB(255, 0, 0)); |
| | | } |
| | | else { |
| | | SetLabelColor(*m_pBlLabels[5], RGB(0, 180, 0)); |
| | | } |
| | | |
| | | |
| | | // 更新Labels状态 |
| | | UpdateLabels(); |
| | | |
| | | // 更新定位点 |
| | | //refreshPositionDetails(getCurrentSelectedAxisID(), m_currentPage); |
| | | |
| | | // OPR按钮是否要闪烁或停止闪烁 |
| | | // 06.0和08.0 |
| | | TRACE("m_nBtnsFlashState6 %x %x\n", m_nBtnsFlashState6, m_nBtnsFlashState8); |
| | | if (m_nBtnsFlashState6 & 0x01) { |
| | | // 06.0 |
| | | if (!m_pBlBtns[BTN_JOG_OPR]->IsFlash()) { |