1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
#pragma once
#include "afxdialogex.h"
#include "BlButton.h"
#include "BLLabel.h"
#include "CPLC.h"
 
// 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;
 
    // 按下标识
    BOOL m_bJogAddPressed;
    BOOL m_bJogSubPressed;
 
    // 控件
    CBlButton* m_pBlBtns[9];
    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<int, CRect> m_mapCtrlLayouts;
    std::map<int, CFont*> 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()
};