LAPTOP-T815PCOQ\25526
2025-01-13 f540130ba442e39f981d2d37796c6460db8a00ed
1. 添加PLC信息界面
已添加2个文件
已修改5个文件
195 ■■■■■ 文件已修改
SourceCode/Bond/BoounionPLC/AddPLCInfo.cpp 124 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/BoounionPLC/AddPLCInfo.h 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/BoounionPLC/BoounionPLC.rc 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/BoounionPLC/BoounionPLC.vcxproj 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/BoounionPLC/BoounionPLC.vcxproj.filters 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/BoounionPLC/BoounionPLCDlg.cpp 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/BoounionPLC/Resource.h 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/BoounionPLC/AddPLCInfo.cpp
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,124 @@
// AddPLCInfo.cpp: å®žçŽ°æ–‡ä»¶
//
#include "stdafx.h"
#include "BoounionPLC.h"
#include "afxdialogex.h"
#include "AddPLCInfo.h"
// CAddPLCInfo å¯¹è¯æ¡†
IMPLEMENT_DYNAMIC(CAddPLCInfo, CDialogEx)
CAddPLCInfo::CAddPLCInfo(CWnd* pParent /*=nullptr*/)
    : CDialogEx(IDD_DIALOG_ADD_PLC_INFO, pParent)
{
}
CAddPLCInfo::~CAddPLCInfo()
{
}
CString CAddPLCInfo::GetPLCName() { return m_strPLCName; }
CString CAddPLCInfo::GetIP() { return m_strIP; }
CString CAddPLCInfo::GetPort() { return m_strPort; }
bool CAddPLCInfo::IsValidPort(const CString& strPort)
{
    // åˆ¤æ–­æ˜¯å¦ä¸ºæ•°å­—
    for (int i = 0; i < strPort.GetLength(); ++i) {
        if (!_istdigit(strPort[i])) {
            return false; // éžæ•°å­—
        }
    }
    // è½¬æ¢ä¸ºæ•´æ•°å¹¶åˆ¤æ–­èŒƒå›´
    int nPort = _ttoi(strPort);
    return nPort >= 1 && nPort <= 65535;
}
bool CAddPLCInfo::IsValidIPAddress(const CString& strIP1, const CString& strIP2, const CString& strIP3, const CString& strIP4)
{
    // æ ¡éªŒæ¯ä¸€æ®µæ˜¯å¦æ˜¯æ•°å­—并在范围内
    return IsValidIPSegment(strIP1) &&
        IsValidIPSegment(strIP2) &&
        IsValidIPSegment(strIP3) &&
        IsValidIPSegment(strIP4);
}
bool CAddPLCInfo::IsValidIPSegment(const CString& strSegment)
{
    // åˆ¤æ–­æ˜¯å¦ä¸ºæ•°å­—
    for (int i = 0; i < strSegment.GetLength(); ++i) {
        if (!_istdigit(strSegment[i])) {
            return false; // éžæ•°å­—
        }
    }
    // è½¬æ¢ä¸ºæ•´æ•°å¹¶åˆ¤æ–­èŒƒå›´
    int nSegment = _ttoi(strSegment);
    return nSegment >= 0 && nSegment <= 255;
}
void CAddPLCInfo::DoDataExchange(CDataExchange* pDX)
{
    CDialogEx::DoDataExchange(pDX);
    DDX_Control(pDX, IDC_EDIT_PLC_NAME, m_editPLCName);
    DDX_Control(pDX, IDC_EDIT_PORT, m_editPort);
}
BEGIN_MESSAGE_MAP(CAddPLCInfo, CDialogEx)
    ON_BN_CLICKED(IDOK, &CAddPLCInfo::OnBnClickedOk)
END_MESSAGE_MAP()
// CAddPLCInfo æ¶ˆæ¯å¤„理程序
void CAddPLCInfo::OnBnClickedOk()
{
    // TODO: åœ¨æ­¤æ·»åŠ æŽ§ä»¶é€šçŸ¥å¤„ç†ç¨‹åºä»£ç 
    CString strIPAddr1;
    CString strIPAddr2;
    CString strIPAddr3;
    CString strIPAddr4;
    m_editPLCName.GetWindowText(m_strPLCName);
    if (m_strPLCName.IsEmpty()) {
        AfxMessageBox(_T("PLC åç§°ä¸èƒ½ä¸ºç©ºï¼"));
        return;
    }
    // æ ¡éªŒç«¯å£å·
    m_editPort.GetWindowText(m_strPort);
    if (!IsValidPort(m_strPort)) {
        AfxMessageBox(_T("端口号不合法!请输入 1 åˆ° 65535 ä¹‹é—´çš„æ•°å­—。"));
        return;
    }
    // æ ¡éªŒIP地址
    GetDlgItem(IDC_EDIT_IP_ADDR1)->GetWindowText(strIPAddr1);
    GetDlgItem(IDC_EDIT_IP_ADDR2)->GetWindowText(strIPAddr2);
    GetDlgItem(IDC_EDIT_IP_ADDR3)->GetWindowText(strIPAddr3);
    GetDlgItem(IDC_EDIT_IP_ADDR4)->GetWindowText(strIPAddr4);
    if (strIPAddr1.IsEmpty() || strIPAddr2.IsEmpty() || strIPAddr3.IsEmpty() || strIPAddr4.IsEmpty()) {
        AfxMessageBox(_T("IP åœ°å€ä¸åˆæ³•!每段不能为空。"));
        return;
    }
    if (!IsValidIPAddress(strIPAddr1, strIPAddr2, strIPAddr3, strIPAddr4)) {
        AfxMessageBox(_T("IP åœ°å€ä¸åˆæ³•!每段必须是 0 åˆ° 255 çš„æ•°å­—。"));
        return;
    }
    // æ‹¼æŽ¥IP地址
    m_strIP.Format(_T("%s.%s.%s.%s"), strIPAddr1, strIPAddr2, strIPAddr3, strIPAddr4);
    CDialogEx::OnOK();
}
SourceCode/Bond/BoounionPLC/AddPLCInfo.h
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,43 @@
#pragma once
#include "afxdialogex.h"
// CAddPLCInfo å¯¹è¯æ¡†
class CAddPLCInfo : public CDialogEx
{
    DECLARE_DYNAMIC(CAddPLCInfo)
public:
    CAddPLCInfo(CWnd* pParent = nullptr);   // æ ‡å‡†æž„造函数
    virtual ~CAddPLCInfo();
    // èŽ·å–plc名称\ip\端口
    CString GetPLCName();
    CString GetIP();
    CString GetPort();
// å¯¹è¯æ¡†æ•°æ®
#ifdef AFX_DESIGN_TIME
    enum { IDD = IDD_DIALOG_ADD_PLC_INFO };
#endif
protected:
    virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV æ”¯æŒ
    afx_msg void OnBnClickedOk();
    DECLARE_MESSAGE_MAP()
private:
    bool IsValidPort(const CString& strPort);
    bool IsValidIPAddress(const CString& strIP1, const CString& strIP2, const CString& strIP3, const CString& strIP4);
    bool IsValidIPSegment(const CString& strSegment);
    // æ•°æ®
    CString m_strPLCName;
    CString m_strIP;
    CString m_strPort;
    // æŽ§ä»¶
    CEdit m_editPLCName;
    CEdit m_editPort;
};
SourceCode/Bond/BoounionPLC/BoounionPLC.rc
Binary files differ
SourceCode/Bond/BoounionPLC/BoounionPLC.vcxproj
@@ -193,6 +193,7 @@
  </ItemGroup>
  <ItemGroup>
    <ClInclude Include="..\BondEq\HorizontalLine.h" />
    <ClInclude Include="AddPLCInfo.h" />
    <ClInclude Include="Alarm.h" />
    <ClInclude Include="AlarmMonitor.h" />
    <ClInclude Include="AlarmPopupDlg.h" />
@@ -239,6 +240,7 @@
  </ItemGroup>
  <ItemGroup>
    <ClCompile Include="..\BondEq\HorizontalLine.cpp" />
    <ClCompile Include="AddPLCInfo.cpp" />
    <ClCompile Include="Alarm.cpp" />
    <ClCompile Include="AlarmMonitor.cpp" />
    <ClCompile Include="AlarmPopupDlg.cpp" />
SourceCode/Bond/BoounionPLC/BoounionPLC.vcxproj.filters
@@ -156,6 +156,9 @@
    <ClInclude Include="CBaseDlg.h">
      <Filter>头文件</Filter>
    </ClInclude>
    <ClInclude Include="AddPLCInfo.h">
      <Filter>头文件</Filter>
    </ClInclude>
  </ItemGroup>
  <ItemGroup>
    <ClCompile Include="BoounionPLC.cpp">
@@ -278,6 +281,9 @@
    <ClCompile Include="CBaseDlg.cpp">
      <Filter>源文件</Filter>
    </ClCompile>
    <ClCompile Include="AddPLCInfo.cpp">
      <Filter>源文件</Filter>
    </ClCompile>
  </ItemGroup>
  <ItemGroup>
    <ResourceCompile Include="BoounionPLC.rc">
SourceCode/Bond/BoounionPLC/BoounionPLCDlg.cpp
@@ -10,6 +10,7 @@
#include "PlcView.h"
#include "Log.h"
#include "InputDialog.h"
#include "AddPLCInfo.h"
#include "AxisManager.h"
#include "IOManager.h"
@@ -502,24 +503,25 @@
{
    int id = (int)lParam;
    if (id == IDC_BUTTON_ADD) {
        CInputDialog inputDialog(_T("新建设备"), _T("请输入设备名称:"));
        if (inputDialog.DoModal() != IDOK) {
            AfxMessageBox(_T("取消验证!"));
        CAddPLCInfo dlgAddPLCInfo;
        if (dlgAddPLCInfo.DoModal() != IDOK) {
            return 0;
        }
        CString strName;
        strName = inputDialog.GetInputText();
        if (!strName.IsEmpty()) {
            theApp.m_model.addPlc((LPTSTR)(LPCTSTR)strName, "192.168.1.188", 1001);
        CString strPLCName = dlgAddPLCInfo.GetPLCName();
        CString strIP = dlgAddPLCInfo.GetIP();
        CString strPort = dlgAddPLCInfo.GetPort();
        if (!strPLCName.IsEmpty() && !strIP.IsEmpty() && !strPort.IsEmpty()) {
            theApp.m_model.addPlc((LPTSTR)(LPCTSTR)strPLCName, (LPTSTR)(LPCTSTR)strIP, std::stoi((LPTSTR)(LPCTSTR)strPort));
            // æ–°å»ºè½´æ–‡ä»¶
            AxisManager axisManager;
            axisManager.SaveAxis((LPTSTR)(LPCTSTR)strName);
            axisManager.SaveAxis((LPTSTR)(LPCTSTR)strPLCName);
            // æ–°å»ºIO文件
            IOManager ioManager;
            ioManager.SaveToFile((LPTSTR)(LPCTSTR)strName);
            ioManager.SaveToFile((LPTSTR)(LPCTSTR)strPLCName);
        }
    }
    else if (id == IDC_BUTTON_DELETE) {
SourceCode/Bond/BoounionPLC/Resource.h
Binary files differ