From f540130ba442e39f981d2d37796c6460db8a00ed Mon Sep 17 00:00:00 2001
From: LAPTOP-T815PCOQ\25526 <mr.liuyang@126.com>
Date: 星期一, 13 一月 2025 18:07:57 +0800
Subject: [PATCH] 1. 添加PLC信息界面

---
 SourceCode/Bond/BoounionPLC/BoounionPLC.rc              |    0 
 SourceCode/Bond/BoounionPLC/BoounionPLCDlg.cpp          |   20 ++--
 SourceCode/Bond/BoounionPLC/AddPLCInfo.cpp              |  124 +++++++++++++++++++++++++++++++
 SourceCode/Bond/BoounionPLC/AddPLCInfo.h                |   43 ++++++++++
 SourceCode/Bond/BoounionPLC/Resource.h                  |    0 
 SourceCode/Bond/BoounionPLC/BoounionPLC.vcxproj.filters |    6 +
 SourceCode/Bond/BoounionPLC/BoounionPLC.vcxproj         |    2 
 7 files changed, 186 insertions(+), 9 deletions(-)

diff --git a/SourceCode/Bond/BoounionPLC/AddPLCInfo.cpp b/SourceCode/Bond/BoounionPLC/AddPLCInfo.cpp
new file mode 100644
index 0000000..c9a8095
--- /dev/null
+++ b/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: 鍦ㄦ娣诲姞鎺т欢閫氱煡澶勭悊绋嬪簭浠g爜
+	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();
+}
diff --git a/SourceCode/Bond/BoounionPLC/AddPLCInfo.h b/SourceCode/Bond/BoounionPLC/AddPLCInfo.h
new file mode 100644
index 0000000..89ff176
--- /dev/null
+++ b/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;
+};
diff --git a/SourceCode/Bond/BoounionPLC/BoounionPLC.rc b/SourceCode/Bond/BoounionPLC/BoounionPLC.rc
index e661b4b..66d1463 100644
--- a/SourceCode/Bond/BoounionPLC/BoounionPLC.rc
+++ b/SourceCode/Bond/BoounionPLC/BoounionPLC.rc
Binary files differ
diff --git a/SourceCode/Bond/BoounionPLC/BoounionPLC.vcxproj b/SourceCode/Bond/BoounionPLC/BoounionPLC.vcxproj
index 4c023ff..edc7445 100644
--- a/SourceCode/Bond/BoounionPLC/BoounionPLC.vcxproj
+++ b/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" />
diff --git a/SourceCode/Bond/BoounionPLC/BoounionPLC.vcxproj.filters b/SourceCode/Bond/BoounionPLC/BoounionPLC.vcxproj.filters
index 96bd33d..fc03e00 100644
--- a/SourceCode/Bond/BoounionPLC/BoounionPLC.vcxproj.filters
+++ b/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">
diff --git a/SourceCode/Bond/BoounionPLC/BoounionPLCDlg.cpp b/SourceCode/Bond/BoounionPLC/BoounionPLCDlg.cpp
index 70c30d3..1f8db8c 100644
--- a/SourceCode/Bond/BoounionPLC/BoounionPLCDlg.cpp
+++ b/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) {
diff --git a/SourceCode/Bond/BoounionPLC/Resource.h b/SourceCode/Bond/BoounionPLC/Resource.h
index 9dfbd5d..d3ec31a 100644
--- a/SourceCode/Bond/BoounionPLC/Resource.h
+++ b/SourceCode/Bond/BoounionPLC/Resource.h
Binary files differ

--
Gitblit v1.9.3