From 375342c11638685d6b7fecc2a979825c56d770f9 Mon Sep 17 00:00:00 2001
From: LAPTOP-SNT8I5JK\Boounion <Chenluhua@qq.com>
Date: 星期一, 14 七月 2025 17:57:15 +0800
Subject: [PATCH] 1.CCollectionEvent,CLoadPort, CVariable类实现; 2.从.txt或csv中加载CVariable列表; 3.添加菜单,准备添加相关查看或编辑 CVariable列表的界面;

---
 SourceCode/Bond/Servo/Servo.vcxproj         |    6 
 SourceCode/Bond/Servo/HsmsPassive.h         |    9 +
 SourceCode/Bond/Servo/CVariable.h           |   36 ++++
 SourceCode/Bond/Servo/resource.h            |    0 
 SourceCode/Bond/Servo/HsmsPassive.cpp       |   61 +++++++
 SourceCode/Bond/Servo/Model.cpp             |    3 
 SourceCode/Bond/Servo/CCollectionEvent.cpp  |   56 +++++++
 SourceCode/Bond/Servo/ServoDlg.cpp          |   12 +
 SourceCode/Bond/x64/Debug/VariableList.txt  |   37 ++++
 SourceCode/Bond/Servo/CCollectionEvent.h    |   23 ++
 SourceCode/Bond/Servo/Servo.vcxproj.filters |    6 
 Document/VariableList.txt                   |   37 ++++
 SourceCode/Bond/Servo/CReport.h             |   23 ++
 SourceCode/Bond/Servo/Servo.rc              |    0 
 SourceCode/Bond/Servo/CVariable.cpp         |   68 ++++++++
 SourceCode/Bond/Servo/CReport.cpp           |   56 +++++++
 SourceCode/Bond/Servo/ServoDlg.h            |    2 
 17 files changed, 435 insertions(+), 0 deletions(-)

diff --git a/Document/VariableList.txt b/Document/VariableList.txt
new file mode 100644
index 0000000..1c92863
--- /dev/null
+++ b/Document/VariableList.txt
@@ -0,0 +1,37 @@
+SVID,SV Name,SV Format,SV Remark
+100,PortTransferState,U1,"0=OutOfService\r\n1=TransferBlocked\r\n2=ReadyToLoad\r\n3=ReadyToUnload\r\n4=InService\r\n5=TransferReady"
+300,AccessMode,U1,"1=Manual\r\n2=Auto"
+500,Clock,A50,
+600,CurrentControlState,U1,"0:Offline:equipment\r\n1:Offline-Attempt\r\n2:Online\r\n3:Offline:host\r\n4:Online:Local\r\n5:Online:Remote"
+601,PreviousControlState,U1,
+700,CurrentProcessState,U1,"0:DOWN\r\n1:IDLE\r\n2.SETUP\r\n3.EXCUTING\r\n4.MAINTAIN\r\n5.ALARM"
+701,PreviousProcessState,U1,
+800,EFEMPPExecName,A20,
+801,EQPPExecName,A20,
+1000,CJobSpace,U1,
+2000,RbRAxisTorque,I2,鏈哄櫒浜篟杞存壄鐭�
+2001,RbLAxisTorque,l2,鏈哄櫒浜篖杞存壄鐭�
+2002,RbZAxisTorque,l2,鏈哄櫒浜篫杞存壄鐭�
+2003,RbTHAxisTorque,l2,鏈哄櫒浜篢H杞存壄鐭�
+2004,RbXAxisTorque,l2,鏈哄櫒浜篨杞存壄鐭�
+2005,AxisX111,l2,X111鐩告満鍓嶇Щ鏍界數鏈烘壄鐭�
+2006,AxisX112,l2,X112鐩告満鍚庣Щ鏍界數鏈烘壄鐭�
+2007,AxisU113,l2,U113浜у搧鏃嬭浆鐢垫満鎵煩
+2008,AxisX114,l2,X114浜у搧宸︽暣鍒楃數鏈烘壄鐭�
+2009,AxisY121,l2,Y121浜у搧鍙虫暣鍒楃數鏈烘壄鐭�
+2010,AxisY122,l2,Y122浜у搧鍓嶆暣鍒楃數鏈烘壄鐭�
+2011,AxisY123,l2,Y123浜у搧鍚庨樀鍒楃數鏈烘壄鐭�
+2012,MainAir,U2,鎬昏繘姘斿帇鍔涘��
+2013,MainVacuum,l2,鎬荤湡绌哄帇鍔涘��
+2014,RbMainVacuum,l2,鏈哄櫒浜虹湡绌哄��
+2015,LPMainVacuum,l2,LP鐪熺┖鍊�#D265
+2016,LPMainAir,U2,LP鍘嬬┖鍊�
+2017,ALVacuum,l2,Aligner鐪熺┖鍊�
+2018,FFU1RPM,U2,FFU1杞��
+2019,FFU2RPM,U2,FFU2杞��
+2020,FFU3RPM,U2,FFU3杞��
+2021,FFU4RPM,U2,FFU4杞��
+2022,ESDValue,I2,闈欑數妫�娴嬪��
+2023,OCREnable,U2,"OCR浣胯兘锛歄:寮�鍚� 1锛氬睆钄�"
+2024,CCDEnable,U2,"CCD浣胯兘锛歄:寮�鍚� 1锛氬睆钄�"
+2025,FFUParameter,U2,FFU璁惧畾鍊�
diff --git a/SourceCode/Bond/Servo/CCollectionEvent.cpp b/SourceCode/Bond/Servo/CCollectionEvent.cpp
new file mode 100644
index 0000000..89095b7
--- /dev/null
+++ b/SourceCode/Bond/Servo/CCollectionEvent.cpp
@@ -0,0 +1,56 @@
+#include "stdafx.h"
+#include "CCollectionEvent.h"
+
+
+namespace SERVO {
+	CCollectionEvent::CCollectionEvent()
+	{
+		m_nCEID = 0;
+	}
+
+	CCollectionEvent::~CCollectionEvent()
+	{
+
+	}
+
+	unsigned int CCollectionEvent::getEventId()
+	{
+		return m_nCEID;
+	}
+
+	BOOL CCollectionEvent::addReport(CReport* pReport)
+	{
+		ASSERT(pReport);
+		if (getReport(pReport->getReportId()) != nullptr) {
+			return FALSE;
+		}
+
+		m_reports.push_back(pReport);
+		return TRUE;
+	}
+
+	BOOL CCollectionEvent::deleteReport(unsigned int nReportId)
+	{
+		BOOL bDelete = FALSE;
+		for (auto iter = m_reports.begin(); iter != m_reports.end(); ++iter) {
+			if (nReportId == (*iter)->getReportId()) {
+				m_reports.erase(iter);
+				bDelete = TRUE;
+				break;
+			}
+		}
+
+		return bDelete;
+	}
+
+	CReport* CCollectionEvent::getReport(unsigned int nReportId)
+	{
+		for (auto item : m_reports) {
+			if (nReportId == item->getReportId()) {
+				return item;
+			}
+		}
+
+		return nullptr;
+	}
+}
diff --git a/SourceCode/Bond/Servo/CCollectionEvent.h b/SourceCode/Bond/Servo/CCollectionEvent.h
new file mode 100644
index 0000000..9bdd993
--- /dev/null
+++ b/SourceCode/Bond/Servo/CCollectionEvent.h
@@ -0,0 +1,23 @@
+#pragma once
+#include "CReport.h"
+#include <vector>
+
+
+namespace SERVO {
+	class CCollectionEvent
+	{
+	public:
+		CCollectionEvent();
+		virtual ~CCollectionEvent();
+
+	public:
+		unsigned int getEventId();
+		BOOL addReport(CReport* pReport);
+		BOOL deleteReport(unsigned int nReportId);
+		CReport* getReport(unsigned int nReportId);
+
+	private:
+		unsigned int m_nCEID;
+		std::vector<CReport*> m_reports;
+	};
+}
diff --git a/SourceCode/Bond/Servo/CReport.cpp b/SourceCode/Bond/Servo/CReport.cpp
new file mode 100644
index 0000000..387bf40
--- /dev/null
+++ b/SourceCode/Bond/Servo/CReport.cpp
@@ -0,0 +1,56 @@
+#include "stdafx.h"
+#include "CReport.h"
+
+
+namespace SERVO {
+	CReport::CReport()
+	{
+
+	}
+
+	CReport::~CReport()
+	{
+
+	}
+
+	unsigned int CReport::getReportId()
+	{
+		return m_nReportId;
+	}
+
+	BOOL CReport::addVariable(CVariable* pVariable)
+	{
+		ASSERT(pVariable);
+		if (getVariable(pVariable->getVarialbleId()) != nullptr) {
+			return FALSE;
+		}
+
+		m_variabels.push_back(pVariable);
+		return TRUE;
+	}
+
+	BOOL CReport::deleteVarialble(unsigned int nVarialbleId)
+	{
+		BOOL bDelete = FALSE;
+		for (auto iter = m_variabels.begin(); iter != m_variabels.end(); ++iter) {
+			if (nVarialbleId == (*iter)->getVarialbleId()) {
+				m_variabels.erase(iter);
+				bDelete = TRUE;
+				break;
+			}
+		}
+
+		return bDelete;
+	}
+
+	CVariable* CReport::getVariable(unsigned int nVarialbleId)
+	{
+		for (auto item : m_variabels) {
+			if (nVarialbleId == item->getVarialbleId()) {
+				return item;
+			}
+		}
+
+		return nullptr;
+	}
+}
diff --git a/SourceCode/Bond/Servo/CReport.h b/SourceCode/Bond/Servo/CReport.h
new file mode 100644
index 0000000..711af0f
--- /dev/null
+++ b/SourceCode/Bond/Servo/CReport.h
@@ -0,0 +1,23 @@
+#pragma once
+#include "CVariable.h"
+#include <vector>
+
+namespace SERVO {
+	class CReport
+	{
+	public:
+		CReport();
+		virtual ~CReport();
+
+	public:
+		unsigned int getReportId();
+		BOOL addVariable(CVariable* pVariable);
+		BOOL deleteVarialble(unsigned int nVarialbleId);
+		CVariable* getVariable(unsigned int nVarialbleId);
+
+	private:
+		unsigned int m_nReportId;
+		std::vector<CVariable*> m_variabels;
+	};
+}
+
diff --git a/SourceCode/Bond/Servo/CVariable.cpp b/SourceCode/Bond/Servo/CVariable.cpp
new file mode 100644
index 0000000..a0c15f0
--- /dev/null
+++ b/SourceCode/Bond/Servo/CVariable.cpp
@@ -0,0 +1,68 @@
+#include "stdafx.h"
+#include "CVariable.h"
+
+
+namespace SERVO {
+	CVariable::CVariable()
+	{
+		m_nVarialbeId = 0;
+		m_format = SVFromat::U1;
+	}
+
+	CVariable::CVariable(const char* pszId, const char* pszName, const char* pszFormat, const char* pszRemark)
+	{
+		m_nVarialbeId = atoi(pszId);
+		m_strName = pszName;
+		m_format = toFormat(pszFormat);
+		m_strRemark = pszRemark;
+		TRACE("CVariable .....%d,%s,%d,%s\n", m_nVarialbeId, m_strName.c_str(),
+			m_format, m_strRemark.c_str());
+
+	}
+
+	CVariable::~CVariable()
+	{
+
+	}
+
+	SVFromat CVariable::toFormat(const char* pszFormat)
+	{
+		if (_strcmpi("U1", pszFormat) == 0) {
+			return SVFromat::U1;
+		}
+		if (_strcmpi("U2", pszFormat) == 0) {
+			return SVFromat::U2;
+		}
+		if (_strcmpi("I2", pszFormat) == 0) {
+			return SVFromat::I2;
+		}
+		if (_strcmpi("A50", pszFormat) == 0) {
+			return SVFromat::A50;
+		}
+		if (_strcmpi("A20", pszFormat) == 0) {
+			return SVFromat::A20;
+		}
+
+		return SVFromat::U1;
+	}
+
+	unsigned int CVariable::getVarialbleId()
+	{
+		return m_nVarialbeId;
+	}
+
+	std::string& CVariable::getName()
+	{
+		return m_strName;
+	}
+
+	SVFromat CVariable::getFormat()
+	{
+		return m_format;
+	}
+
+	std::string& CVariable::getRemark()
+	{
+		return m_strRemark;
+	}
+}
\ No newline at end of file
diff --git a/SourceCode/Bond/Servo/CVariable.h b/SourceCode/Bond/Servo/CVariable.h
new file mode 100644
index 0000000..08e05e7
--- /dev/null
+++ b/SourceCode/Bond/Servo/CVariable.h
@@ -0,0 +1,36 @@
+#pragma once
+#include <string>
+
+
+namespace SERVO {
+	// 变量格式
+	enum class SVFromat {
+		U1 = 0,
+		U2,
+		I2,
+		A20,
+		A50
+	};
+
+	class CVariable
+	{
+	public:
+		CVariable();
+		CVariable(const char* pszId, const char* pszName, const char* pszFormat, const char* pszRemark);
+		~CVariable();
+
+	public:
+		static SVFromat toFormat(const char* pszFormat);
+		unsigned int getVarialbleId();
+		std::string& getName();
+		SVFromat getFormat();
+		std::string& getRemark();
+
+	private:
+		unsigned int m_nVarialbeId;
+		std::string m_strName;
+		SVFromat m_format;
+		std::string m_strRemark;
+	};
+}
+
diff --git a/SourceCode/Bond/Servo/HsmsPassive.cpp b/SourceCode/Bond/Servo/HsmsPassive.cpp
index 5660bf7..edcb481 100644
--- a/SourceCode/Bond/Servo/HsmsPassive.cpp
+++ b/SourceCode/Bond/Servo/HsmsPassive.cpp
@@ -8,6 +8,7 @@
 #include <time.h>  
 #include <stdlib.h>  
 #include <string.h>  
+#include <regex>
 
 
 const char ACK[2] = {0, 1};
@@ -195,6 +196,64 @@
 	return 0;
 }
 
+int CHsmsPassive::loadVarialbleList(const char* pszFilepath)
+{
+	CStdioFile file;
+	if (!file.Open(pszFilepath, CFile::modeRead)) {
+		return -1;
+	}
+
+	std::regex pattern("^\\d+,.*");  // 匹配以数字+逗号开头的字符串
+	std::vector<SERVO::CVariable*> variables;
+	int index, last;
+	CString strLine;
+	CString strId, strName, strFormat, strRemark;
+	while (file.ReadString(strLine)) {
+		if (!std::regex_match((LPTSTR)(LPCTSTR)strLine, pattern)) {
+			continue;
+		}
+
+		last = 0;
+		index = strLine.Find(",", last);
+		if (index < 0) continue;
+		strId = strLine.Left(index);
+		last = index + 1;
+
+		index = strLine.Find(",", last);
+		if (index < 0) continue;
+		strName = strLine.Mid(last, index - last);
+		last = index + 1;
+
+		index = strLine.Find(",", last);
+		if (index < 0) continue;
+		strFormat = strLine.Mid(last, index - last);
+		strRemark = strLine.Right(strLine.GetLength() - index - 1);
+
+		SERVO::CVariable* pVarialble = new SERVO::CVariable(
+			(LPTSTR)(LPCTSTR)strId, (LPTSTR)(LPCTSTR)strName, (LPTSTR)(LPCTSTR)strFormat, (LPTSTR)(LPCTSTR)strRemark);
+		variables.push_back(pVarialble);
+	}
+
+	if (!variables.empty()) {
+		clearAllVariabel();
+		for (auto item : variables) {
+			m_variabels.push_back(item);
+		}
+	}
+
+
+	file.Close();
+	return 0;
+}
+
+void CHsmsPassive::clearAllVariabel()
+{
+	for (auto item : m_variabels) {
+		delete item;
+	}
+	m_variabels.clear();
+}
+
 int CHsmsPassive::init(CModel* pModel, const char* pszName, unsigned int port)
 {
 	m_pModel = pModel;
@@ -326,6 +385,8 @@
 		m_pPassive = NULL;
 	}
 
+	clearAllVariabel();
+
 	return 0;
 }
 
diff --git a/SourceCode/Bond/Servo/HsmsPassive.h b/SourceCode/Bond/Servo/HsmsPassive.h
index 25ce943..f5e8383 100644
--- a/SourceCode/Bond/Servo/HsmsPassive.h
+++ b/SourceCode/Bond/Servo/HsmsPassive.h
@@ -5,6 +5,7 @@
 #include <functional>
 #include <vector>
 #include <map>
+#include "CCollectionEvent.h"
 
 
 #define EQCONSTANT_VALUE_MAX	64
@@ -110,6 +111,10 @@
 	// 取消/删除所有 define report
 	void deleteAllReport();
 
+	// 从文件中加载CVariable列表
+	int loadVarialbleList(const char* pszFilepath);
+
+
 	void setListener(SECSListener listener);
 	unsigned OnCimWork();
 	void OnTimer(UINT nTimerid);
@@ -146,6 +151,7 @@
 	inline void Lock() { EnterCriticalSection(&m_criticalSection); }
 	inline void Unlock() { LeaveCriticalSection(&m_criticalSection); }
 	int onRecvMsg(IMessage* pMessage);
+	void clearAllVariabel();
 
 private:
 	CModel* m_pModel;
@@ -179,5 +185,8 @@
 
 	// VID to Report
 	std::map<unsigned int, VALUE> m_mapValue;
+
+	// CVariable vector
+	std::vector<SERVO::CVariable*> m_variabels;
 };
 
diff --git a/SourceCode/Bond/Servo/Model.cpp b/SourceCode/Bond/Servo/Model.cpp
index 660269c..666e54c 100644
--- a/SourceCode/Bond/Servo/Model.cpp
+++ b/SourceCode/Bond/Servo/Model.cpp
@@ -128,6 +128,9 @@
 	m_hsmsPassive.setListener(listener);
 	m_hsmsPassive.setEquipmentModelType((LPTSTR)(LPCTSTR)strModeType);
 	m_hsmsPassive.setSoftRev((LPTSTR)(LPCTSTR)strSoftRev);
+	CString strVarialbleFile;
+	strVarialbleFile.Format(_T("%s\\VariableList.txt"), (LPTSTR)(LPCTSTR)m_strWorkDir);
+	m_hsmsPassive.loadVarialbleList((LPTSTR)(LPCTSTR)strVarialbleFile);
 	m_hsmsPassive.init(this, "APP", 7000);
 
 
diff --git a/SourceCode/Bond/Servo/Servo.rc b/SourceCode/Bond/Servo/Servo.rc
index 09c1469..211d008 100644
--- a/SourceCode/Bond/Servo/Servo.rc
+++ b/SourceCode/Bond/Servo/Servo.rc
Binary files differ
diff --git a/SourceCode/Bond/Servo/Servo.vcxproj b/SourceCode/Bond/Servo/Servo.vcxproj
index c3e7398..ab9f41e 100644
--- a/SourceCode/Bond/Servo/Servo.vcxproj
+++ b/SourceCode/Bond/Servo/Servo.vcxproj
@@ -200,16 +200,19 @@
   </ItemGroup>
   <ItemGroup>
     <ClInclude Include="CBaseDlg.h" />
+    <ClInclude Include="CCollectionEvent.h" />
     <ClInclude Include="CEquipmentPage3.h" />
     <ClInclude Include="CGlassPool.h" />
     <ClInclude Include="ChangePasswordDlg.h" />
     <ClInclude Include="CMyStatusbar.h" />
     <ClInclude Include="CPageLinkSignal.h" />
+    <ClInclude Include="CReport.h" />
     <ClInclude Include="CRobotCmdContainerDlg.h" />
     <ClInclude Include="CRobotCmdTestDlg.h" />
     <ClInclude Include="CPagePortStatus.h" />
     <ClInclude Include="CPortStatusReport.h" />
     <ClInclude Include="CRobotTaskDlg.h" />
+    <ClInclude Include="CVariable.h" />
     <ClInclude Include="GridControl\CellRange.h" />
     <ClInclude Include="GridControl\GridCell.h" />
     <ClInclude Include="GridControl\GridCellBase.h" />
@@ -342,16 +345,19 @@
   </ItemGroup>
   <ItemGroup>
     <ClCompile Include="CBaseDlg.cpp" />
+    <ClCompile Include="CCollectionEvent.cpp" />
     <ClCompile Include="CEquipmentPage3.cpp" />
     <ClCompile Include="CGlassPool.cpp" />
     <ClCompile Include="ChangePasswordDlg.cpp" />
     <ClCompile Include="CMyStatusbar.cpp" />
     <ClCompile Include="CPageLinkSignal.cpp" />
+    <ClCompile Include="CReport.cpp" />
     <ClCompile Include="CRobotCmdContainerDlg.cpp" />
     <ClCompile Include="CRobotCmdTestDlg.cpp" />
     <ClCompile Include="CPagePortStatus.cpp" />
     <ClCompile Include="CPortStatusReport.cpp" />
     <ClCompile Include="CRobotTaskDlg.cpp" />
+    <ClCompile Include="CVariable.cpp" />
     <ClCompile Include="GridControl\GridCell.cpp" />
     <ClCompile Include="GridControl\GridCellBase.cpp" />
     <ClCompile Include="GridControl\GridCellButton.cpp" />
diff --git a/SourceCode/Bond/Servo/Servo.vcxproj.filters b/SourceCode/Bond/Servo/Servo.vcxproj.filters
index d4ed655..da72ba1 100644
--- a/SourceCode/Bond/Servo/Servo.vcxproj.filters
+++ b/SourceCode/Bond/Servo/Servo.vcxproj.filters
@@ -169,6 +169,9 @@
     <ClCompile Include="InputDialog.cpp" />
     <ClCompile Include="RecipeManager.cpp" />
     <ClCompile Include="RecipeDeviceBindDlg.cpp" />
+    <ClCompile Include="CCollectionEvent.cpp" />
+    <ClCompile Include="CReport.cpp" />
+    <ClCompile Include="CVariable.cpp" />
   </ItemGroup>
   <ItemGroup>
     <ClInclude Include="AlarmManager.h" />
@@ -343,6 +346,9 @@
     <ClInclude Include="InputDialog.h" />
     <ClInclude Include="RecipeManager.h" />
     <ClInclude Include="RecipeDeviceBindDlg.h" />
+    <ClInclude Include="CCollectionEvent.h" />
+    <ClInclude Include="CReport.h" />
+    <ClInclude Include="CVariable.h" />
   </ItemGroup>
   <ItemGroup>
     <ResourceCompile Include="Servo.rc" />
diff --git a/SourceCode/Bond/Servo/ServoDlg.cpp b/SourceCode/Bond/Servo/ServoDlg.cpp
index baeec28..12eed74 100644
--- a/SourceCode/Bond/Servo/ServoDlg.cpp
+++ b/SourceCode/Bond/Servo/ServoDlg.cpp
@@ -118,6 +118,8 @@
 	ON_UPDATE_COMMAND_UI(ID_MENU_FILE_SETTINGS, &CServoDlg::OnUpdateMenuFileSettings)
 	ON_COMMAND(ID_MENU_FILE_SECSTEST, &CServoDlg::OnMenuFileSecsTest)
 	ON_UPDATE_COMMAND_UI(ID_MENU_FILE_SECSTEST, &CServoDlg::OnUpdateMenuFileSecsTest)
+	ON_COMMAND(ID_MENU_PROJECT_VARIABLE_LIST, &CServoDlg::OnMenuProjectVarialbleList)
+	ON_UPDATE_COMMAND_UI(ID_MENU_PROJECT_VARIABLE_LIST, &CServoDlg::OnUpdateMenuProjectVarialbleList)
 	ON_COMMAND(ID_MENU_TEST_MESSAGE_SET, &CServoDlg::OnMenuTestMessageSet)
 	ON_UPDATE_COMMAND_UI(ID_MENU_TEST_MESSAGE_SET, &CServoDlg::OnUpdateMenuTestMessageSet)
 	ON_COMMAND(ID_MENU_TEST_MESSAGE_CLEAR, &CServoDlg::OnMenuTestMessageClear)
@@ -552,6 +554,16 @@
 	pCmdUI->Enable(TRUE);
 }
 
+void CServoDlg::OnMenuProjectVarialbleList()
+{
+	AfxMessageBox("OnMenuProjectVarialbleList");
+}
+
+void CServoDlg::OnUpdateMenuProjectVarialbleList(CCmdUI* pCmdUI)
+{
+	pCmdUI->Enable(TRUE);
+}
+
 void CServoDlg::OnMenuTestMessageSet()
 {
 	SERVO::CEquipment* pEquipment = m_pPanelMaster->GetActiveEquipment();
diff --git a/SourceCode/Bond/Servo/ServoDlg.h b/SourceCode/Bond/Servo/ServoDlg.h
index 454d778..d0ce0f2 100644
--- a/SourceCode/Bond/Servo/ServoDlg.h
+++ b/SourceCode/Bond/Servo/ServoDlg.h
@@ -90,6 +90,8 @@
 	afx_msg void OnUpdateMenuFileSecsTest(CCmdUI* pCmdUI);
 	afx_msg void OnMenuFileExit();
 	afx_msg void OnUpdateMenuFileExit(CCmdUI* pCmdUI);
+	afx_msg void OnMenuProjectVarialbleList();
+	afx_msg void OnUpdateMenuProjectVarialbleList(CCmdUI* pCmdUI);
 	afx_msg void OnMenuTestMessageSet();
 	afx_msg void OnUpdateMenuTestMessageSet(CCmdUI* pCmdUI);
 	afx_msg void OnMenuTestMessageClear();
diff --git a/SourceCode/Bond/Servo/resource.h b/SourceCode/Bond/Servo/resource.h
index e9c234b..c4c9cde 100644
--- a/SourceCode/Bond/Servo/resource.h
+++ b/SourceCode/Bond/Servo/resource.h
Binary files differ
diff --git a/SourceCode/Bond/x64/Debug/VariableList.txt b/SourceCode/Bond/x64/Debug/VariableList.txt
new file mode 100644
index 0000000..1c92863
--- /dev/null
+++ b/SourceCode/Bond/x64/Debug/VariableList.txt
@@ -0,0 +1,37 @@
+SVID,SV Name,SV Format,SV Remark
+100,PortTransferState,U1,"0=OutOfService\r\n1=TransferBlocked\r\n2=ReadyToLoad\r\n3=ReadyToUnload\r\n4=InService\r\n5=TransferReady"
+300,AccessMode,U1,"1=Manual\r\n2=Auto"
+500,Clock,A50,
+600,CurrentControlState,U1,"0:Offline:equipment\r\n1:Offline-Attempt\r\n2:Online\r\n3:Offline:host\r\n4:Online:Local\r\n5:Online:Remote"
+601,PreviousControlState,U1,
+700,CurrentProcessState,U1,"0:DOWN\r\n1:IDLE\r\n2.SETUP\r\n3.EXCUTING\r\n4.MAINTAIN\r\n5.ALARM"
+701,PreviousProcessState,U1,
+800,EFEMPPExecName,A20,
+801,EQPPExecName,A20,
+1000,CJobSpace,U1,
+2000,RbRAxisTorque,I2,鏈哄櫒浜篟杞存壄鐭�
+2001,RbLAxisTorque,l2,鏈哄櫒浜篖杞存壄鐭�
+2002,RbZAxisTorque,l2,鏈哄櫒浜篫杞存壄鐭�
+2003,RbTHAxisTorque,l2,鏈哄櫒浜篢H杞存壄鐭�
+2004,RbXAxisTorque,l2,鏈哄櫒浜篨杞存壄鐭�
+2005,AxisX111,l2,X111鐩告満鍓嶇Щ鏍界數鏈烘壄鐭�
+2006,AxisX112,l2,X112鐩告満鍚庣Щ鏍界數鏈烘壄鐭�
+2007,AxisU113,l2,U113浜у搧鏃嬭浆鐢垫満鎵煩
+2008,AxisX114,l2,X114浜у搧宸︽暣鍒楃數鏈烘壄鐭�
+2009,AxisY121,l2,Y121浜у搧鍙虫暣鍒楃數鏈烘壄鐭�
+2010,AxisY122,l2,Y122浜у搧鍓嶆暣鍒楃數鏈烘壄鐭�
+2011,AxisY123,l2,Y123浜у搧鍚庨樀鍒楃數鏈烘壄鐭�
+2012,MainAir,U2,鎬昏繘姘斿帇鍔涘��
+2013,MainVacuum,l2,鎬荤湡绌哄帇鍔涘��
+2014,RbMainVacuum,l2,鏈哄櫒浜虹湡绌哄��
+2015,LPMainVacuum,l2,LP鐪熺┖鍊�#D265
+2016,LPMainAir,U2,LP鍘嬬┖鍊�
+2017,ALVacuum,l2,Aligner鐪熺┖鍊�
+2018,FFU1RPM,U2,FFU1杞��
+2019,FFU2RPM,U2,FFU2杞��
+2020,FFU3RPM,U2,FFU3杞��
+2021,FFU4RPM,U2,FFU4杞��
+2022,ESDValue,I2,闈欑數妫�娴嬪��
+2023,OCREnable,U2,"OCR浣胯兘锛歄:寮�鍚� 1锛氬睆钄�"
+2024,CCDEnable,U2,"CCD浣胯兘锛歄:寮�鍚� 1锛氬睆钄�"
+2025,FFUParameter,U2,FFU璁惧畾鍊�

--
Gitblit v1.9.3