From f6e82f09bb6fb4727da61366c195cb99f3474e49 Mon Sep 17 00:00:00 2001
From: LAPTOP-SNT8I5JK\Boounion <Chenluhua@qq.com>
Date: 星期五, 13 六月 2025 16:30:12 +0800
Subject: [PATCH] 1.将Port的配置数据从.dat文件驳离到ini文件中。

---
 SourceCode/Bond/Servo/CPagePortProperty.cpp |    2 
 SourceCode/Bond/Servo/Configuration.h       |    2 +
 SourceCode/Bond/Servo/Model.h               |    1 
 SourceCode/Bond/Servo/CLoadPort.h           |    6 +++
 SourceCode/Bond/Servo/CMaster.cpp           |   14 +++++++
 SourceCode/Bond/Servo/Configuration.cpp     |   22 +++++++++++
 SourceCode/Bond/Servo/CMaster.h             |    2 +
 SourceCode/Bond/Servo/Model.cpp             |   12 ++++++
 SourceCode/Bond/Servo/CLoadPort.cpp         |   54 +++++++++++++++++++++------
 SourceCode/Bond/Servo/ServoDlg.cpp          |    1 
 10 files changed, 103 insertions(+), 13 deletions(-)

diff --git a/SourceCode/Bond/Servo/CLoadPort.cpp b/SourceCode/Bond/Servo/CLoadPort.cpp
index 75353d3..9e51641 100644
--- a/SourceCode/Bond/Servo/CLoadPort.cpp
+++ b/SourceCode/Bond/Servo/CLoadPort.cpp
@@ -378,23 +378,23 @@
 
 		if (ar.IsStoring()) {
 			ar << m_nIndex;
-			ar << (int)m_portType;
-			ar << (int)m_portMode;
-			ar << (int)m_cassetteType;
-			ar << (int)m_transferMode;
-			ar << m_bEnable;
-			ar << m_bAutoChangeEnable;
+			//ar << (int)m_portType;
+			//ar << (int)m_portMode;
+			//ar << (int)m_cassetteType;
+			//ar << (int)m_transferMode;
+			//ar << m_bEnable;
+			//ar << m_bAutoChangeEnable;
 			m_portStatusReport.serialize(ar);
 		}
 		else {
 			int temp;
 			ar >> m_nIndex;
-			ar >> temp; m_portType = (PortType)temp;
-			ar >> temp; m_portMode = (PortMode)temp;
-			ar >> temp; m_cassetteType = (CassetteType)temp;
-			ar >> temp; m_transferMode = (TransferMode)temp;
-			ar >> m_bEnable;
-			ar >> m_bAutoChangeEnable;
+			//ar >> temp; m_portType = (PortType)temp;
+			//ar >> temp; m_portMode = (PortMode)temp;
+			//ar >> temp; m_cassetteType = (CassetteType)temp;
+			//ar >> temp; m_transferMode = (TransferMode)temp;
+			//ar >> m_bEnable;
+			//ar >> m_bAutoChangeEnable;
 			m_portStatusReport.serialize(ar);
 		}
 	}
@@ -1077,6 +1077,36 @@
 		return 0;
 	}
 
+	void CLoadPort::localEanblePort(BOOL bEnable)
+	{
+		m_bEnable = bEnable;
+	}
+
+	void CLoadPort::localSetPortType(PortType type)
+	{
+		m_portType = type;
+	}
+
+	void CLoadPort::localSetPortMode(PortMode mode)
+	{
+		m_portMode = mode;
+	}
+
+	void CLoadPort::localSetCessetteType(CassetteType type)
+	{
+		m_cassetteType = type;
+	}
+
+	void CLoadPort::localSetTransferMode(TransferMode mode)
+	{
+		m_transferMode = mode;
+	}
+
+	void CLoadPort::localAutoChangeEnable(BOOL bEnable)
+	{
+		m_bAutoChangeEnable = bEnable;
+	}
+
 	/*
 	 * 生成测试用的玻璃列表
 	 */
diff --git a/SourceCode/Bond/Servo/CLoadPort.h b/SourceCode/Bond/Servo/CLoadPort.h
index 7bc8702..e0e42d0 100644
--- a/SourceCode/Bond/Servo/CLoadPort.h
+++ b/SourceCode/Bond/Servo/CLoadPort.h
@@ -31,6 +31,12 @@
 		int setCassetteType(CassetteType type, ONWRITED onWritedBlock = nullptr);
 		int setTransferMode(TransferMode mode, ONWRITED onWritedBlock = nullptr);
 		int eableAutoChange(BOOL bEnable, ONWRITED onWritedBlock = nullptr);
+		void localEanblePort(BOOL bEnable);
+		void localSetPortType(PortType type);
+		void localSetPortMode(PortMode mode);
+		void localSetCessetteType(CassetteType type);
+		void localSetTransferMode(TransferMode mode);
+		void localAutoChangeEnable(BOOL bEnable);
 
 	public:
 		void setIndex(unsigned int index);
diff --git a/SourceCode/Bond/Servo/CMaster.cpp b/SourceCode/Bond/Servo/CMaster.cpp
index 6f60f8c..21d96bc 100644
--- a/SourceCode/Bond/Servo/CMaster.cpp
+++ b/SourceCode/Bond/Servo/CMaster.cpp
@@ -1338,4 +1338,18 @@
 
 		return 0;
 	}
+
+	void CMaster::setPortType(unsigned int index, BOOL enable, int type, int mode,
+		int cassetteType, int transferMode, BOOL autoChangeEnable)
+	{
+		ASSERT(index < 4);
+		int eqid[] = { EQ_ID_LOADPORT1, EQ_ID_LOADPORT2, EQ_ID_LOADPORT3, EQ_ID_LOADPORT4};
+		CLoadPort* pPort = (CLoadPort*)getEquipment(eqid[index]);
+		pPort->localEanblePort(enable);
+		pPort->localSetPortType((SERVO::PortType)type);
+		pPort->localSetPortMode((SERVO::PortMode)mode);
+		pPort->localSetCessetteType((SERVO::CassetteType)cassetteType);
+		pPort->localSetTransferMode((SERVO::TransferMode)transferMode);
+		pPort->localAutoChangeEnable(autoChangeEnable);
+	}
 }
diff --git a/SourceCode/Bond/Servo/CMaster.h b/SourceCode/Bond/Servo/CMaster.h
index 2288d79..6d2e380 100644
--- a/SourceCode/Bond/Servo/CMaster.h
+++ b/SourceCode/Bond/Servo/CMaster.h
@@ -64,6 +64,8 @@
         CEquipment* getEquipment(int id);
         void setCacheFilepath(const char* pszFilepath);
         int abortCurrentTask();
+        void setPortType(unsigned int index, BOOL enable, int type, int mode,
+            int cassetteType, int transferMode, BOOL autoChangeEnable);
 
     private:
         inline void lock() { EnterCriticalSection(&m_criticalSection); }
diff --git a/SourceCode/Bond/Servo/CPagePortProperty.cpp b/SourceCode/Bond/Servo/CPagePortProperty.cpp
index 2cdc999..92fc3a2 100644
--- a/SourceCode/Bond/Servo/CPagePortProperty.cpp
+++ b/SourceCode/Bond/Servo/CPagePortProperty.cpp
@@ -57,7 +57,7 @@
 	CComboBox* pComboBox;
 	std::string strTemp;
 
-	
+	((CButton*)GetDlgItem(IDC_CHECK_ENABLE))->SetCheck(m_pPort->isEnable() ? BST_CHECKED : BST_UNCHECKED);
 	pComboBox = (CComboBox*)GetDlgItem(IDC_COMBO_PORT_TYPE);
 	for (int i = 1; i <= 7; i++) {
 		pComboBox->InsertString(i - 1, SERVO::CLoadPort::getPortTypeDescription((SERVO::PortType)i, strTemp).c_str());
diff --git a/SourceCode/Bond/Servo/Configuration.cpp b/SourceCode/Bond/Servo/Configuration.cpp
index b8529b6..d24527a 100644
--- a/SourceCode/Bond/Servo/Configuration.cpp
+++ b/SourceCode/Bond/Servo/Configuration.cpp
@@ -103,3 +103,25 @@
 		std::to_string(second).c_str(), m_strFilepath);
 }
 
+BOOL CConfiguration::getPortParms(unsigned int index, BOOL& bEnable, int& type, int& mode,
+	int& cassetteType, int& transferMode, BOOL& bAutoChangeEnable)
+{
+	if (index >= 4) return FALSE;
+
+	static char* pszSection[] = {"Port1", "Port2", "Port3", "Port4"};
+	bEnable = GetPrivateProfileInt(pszSection[index], _T("Enable"), 0, m_strFilepath) == 1;
+	type = GetPrivateProfileInt(pszSection[index], _T("Type"), 0, m_strFilepath);
+	mode = GetPrivateProfileInt(pszSection[index], _T("Mode"), 0, m_strFilepath);
+	cassetteType = GetPrivateProfileInt(pszSection[index], _T("CassetteType"), 0, m_strFilepath);
+	transferMode = GetPrivateProfileInt(pszSection[index], _T("TransferMode"), 0, m_strFilepath);
+	bAutoChangeEnable = GetPrivateProfileInt(pszSection[index], _T("AutoChangeEnable"), 0, m_strFilepath) == 1;
+
+	// type, mode, cassetteType, transferMode 范围检查
+	type = max(1, min(type, 7));
+	mode = max(0, min(mode, 5));
+	cassetteType = max(1, min(cassetteType, 3));
+	transferMode = max(1, min(transferMode, 3));
+
+	return TRUE;
+}
+
diff --git a/SourceCode/Bond/Servo/Configuration.h b/SourceCode/Bond/Servo/Configuration.h
index 95d00e2..78fde46 100644
--- a/SourceCode/Bond/Servo/Configuration.h
+++ b/SourceCode/Bond/Servo/Configuration.h
@@ -20,6 +20,8 @@
 	void setLogcatIncludeRegex(BOOL bRegex);
 	BOOL isLogcatIncludeRegex();
 	int getCustomLogcatIncludeTexts(std::vector<std::string>& texts);
+	BOOL getPortParms(unsigned int index, BOOL& bEnable, int& type, int& mode,
+		int& cassetteType, int& transferMode, BOOL& bAutoChangeEnable);
 
 public:
 	void setP2RemoteEqReconnectInterval(int second);
diff --git a/SourceCode/Bond/Servo/Model.cpp b/SourceCode/Bond/Servo/Model.cpp
index f68d9cc..04cf046 100644
--- a/SourceCode/Bond/Servo/Model.cpp
+++ b/SourceCode/Bond/Servo/Model.cpp
@@ -40,6 +40,18 @@
 	m_strWorkDir = pszWorkDir;
 }
 
+void CModel::loadPortParams()
+{
+	BOOL portEnable, autoChangeEnable;
+	int portType, portMode, cassetteType, transferMode;
+	for (int i = 0; i < 4; i++) {
+		m_configuration.getPortParms(i, portEnable, portType, portMode,
+			cassetteType, transferMode, autoChangeEnable);
+		m_master.setPortType(i, portEnable, portType, portMode, cassetteType,
+			transferMode, autoChangeEnable);
+	}
+}
+
 int CModel::init()
 {
 	CString strIniFile;
diff --git a/SourceCode/Bond/Servo/Model.h b/SourceCode/Bond/Servo/Model.h
index a9e5369..d2c4e0c 100644
--- a/SourceCode/Bond/Servo/Model.h
+++ b/SourceCode/Bond/Servo/Model.h
@@ -14,6 +14,7 @@
 	IObservable* getObservable();
 	SERVO::CMaster& getMaster();
 	void setWorkDir(const char* pszWorkDir);
+	void loadPortParams();
 	int init();
 	int term();
 
diff --git a/SourceCode/Bond/Servo/ServoDlg.cpp b/SourceCode/Bond/Servo/ServoDlg.cpp
index b8c863c..5fd7af6 100644
--- a/SourceCode/Bond/Servo/ServoDlg.cpp
+++ b/SourceCode/Bond/Servo/ServoDlg.cpp
@@ -349,6 +349,7 @@
 
 	// 相当于延时调用master的初始化
 	theApp.m_model.m_master.init();
+	theApp.m_model.loadPortParams();
 
 
 	// 初始化master以后需要控件绑定数据

--
Gitblit v1.9.3