#pragma once #include "afxdialogex.h" #include "BlButton.h" #include "BLLabel.h" #include "CPLC.h" #define BTN_MAX 10 #define BTN_PAGE1 0 #define BTN_PAGE2 1 #define BTN_PAGE3 2 #define BTN_PAGE4 3 #define BTN_PAGE5 4 #define BTN_JOG_ADD 5 #define BTN_JOG_SUB 6 #define BTN_JOG_SEV 7 #define BTN_JOG_STOP 8 #define BTN_JOG_OPR 9 // CAxisSettingsDlg 对话框 enum class AxisOperationType { OPR = 0, // 回原点 JOG_ADD, // 正向点动 JOG_SUB, // 反向点动 STOP, // 停止操作 SEV_ON, // 使能 POSITION_1, // 定位点1 POSITION_2, // 定位点2 POSITION_3, // 定位点3 POSITION_4, // 定位点4 POSITION_5 // 定位点5 }; class CAxisSettingsDlg : public CDialogEx { DECLARE_DYNAMIC(CAxisSettingsDlg) public: CAxisSettingsDlg(CWnd* pParent = nullptr); // 标准构造函数 virtual ~CAxisSettingsDlg(); public: void SetPLC(CPLC* pPLC); void SetRecipeName(const CString& strRecipeName); // 对话框数据 #ifdef AFX_DESIGN_TIME enum { IDD = IDD_DIALOG_AXIS_SETTINGS }; #endif private: UINT FindIDByName(const CString& strControlID); CFont* GetOrCreateFont(int nFontSize); void SetDefaultFont(); void AdjustControls(float dScaleX, float dScaleY); void AdjustControlFont(CWnd* pWnd, int nWidth, int nHeight); void AdjustLabelFont(CBLLabel& label); void SetLabelColor(CBLLabel& label, COLORREF color); void updatePageButtonStates(); void HideEditCursor(int nCtrlID); int getCurrentSelectedAxisID(); void initializeAxisIDCombo(); void refreshAxisDetails(int nAxisId); void refreshPositionDetails(int nAxisId, int pageNumber); void UpdatePositionRange(PositionRange& position, int pageNumber, int pageSize, int currentIndex); void updateAxisSelection(int offset); void updateDataFromUI(int nAxisId); void switchToPage(int targetPage); bool ParsePLCAddress(const CString& address, MC::SOFT_COMPONENT& component, int& addr); void writeAxisDataToPLC(int nAxisId); void handleAxisOperation(AxisOperationType eOpType, bool bPressed); void readPLCDataToUI(int nAxisId); private: CPLC* m_pPLC; int m_nInitialWidth; int m_nInitialHeight; // 当前选中的定位页面索引 int m_currentPage; // 配方名称 CString m_strRecipeName; // 控件 CBlButton* m_pBlBtns[BTN_MAX]; CBLLabel* m_pBlLabels[6]; CComboBox m_comboAxisNO; CStatic m_staticAxisNO, m_staticAxisDescription, m_staticStartAddress; CEdit m_editManualSpeed, m_editAutoSpeed, m_editAccelerationTime, m_editDecelerationTime, m_editJogDistance; std::map m_mapCtrlLayouts; std::map m_mapFonts; // 读到的数据 BOOL m_bSEV; double m_fCurPos; double m_fManualSpeed; double m_fAutoSpeed; double m_fPrm; int m_nLoad; int m_nErrCode; int m_nAlarmCode; BOOL m_bFLS; BOOL m_bDOG; BOOL m_bRLS; BOOL m_bReady; BOOL m_bBusy; BOOL m_bErr; protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持 virtual BOOL OnInitDialog(); virtual BOOL PreTranslateMessage(MSG* pMsg); afx_msg void OnSize(UINT nType, int cx, int cy); afx_msg void OnSizing(UINT fwSide, LPRECT pRect); afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor); afx_msg void OnBnClickedButtonAxisLast(); afx_msg void OnBnClickedButtonAxisNext(); afx_msg void OnBnClickedButtonAxisAnchorPointGroup1(); afx_msg void OnBnClickedButtonAxisAnchorPointGroup2(); afx_msg void OnBnClickedButtonAxisAnchorPointGroup3(); afx_msg void OnBnClickedButtonAxisAnchorPointGroup4(); afx_msg void OnBnClickedButtonAxisAnchorPointGroup5(); afx_msg void OnBnClickedButtonAxisAnchorPoint1(); afx_msg void OnBnClickedButtonAxisAnchorPoint2(); afx_msg void OnBnClickedButtonAxisAnchorPoint3(); afx_msg void OnBnClickedButtonAxisAnchorPoint4(); afx_msg void OnBnClickedButtonAxisAnchorPoint5(); afx_msg void OnBnClickedButtonAxisTestOpr(); afx_msg void OnBnClickedButtonAxisTestStop(); afx_msg void OnBnClickedButtonAxisSev(); afx_msg void OnSelchangeComboAxisName(); afx_msg void OnBnClickedButtonAxisSave(); afx_msg LRESULT OnUpdateDataToUI(WPARAM wParam, LPARAM lParam); afx_msg void OnTimer(UINT_PTR nIDEvent); afx_msg void OnClose(); DECLARE_MESSAGE_MAP() };