From 02a406fb7e3d635dca0ef87914fee54c7fd6bd3c Mon Sep 17 00:00:00 2001
From: chenluhua1980 <Chenluhua@qq.com>
Date: 星期三, 14 一月 2026 11:36:58 +0800
Subject: [PATCH] 1.DVID的界面操作。新增,编辑,删除等
---
SourceCode/Bond/Servo/Servo.vcxproj | 4
SourceCode/Bond/Servo/HsmsPassive.h | 4
SourceCode/Bond/Servo/Servo.vcxproj.filters | 4
SourceCode/Bond/x64/Debug/DataVariableList.txt | 6
SourceCode/Bond/Servo/CPageDataVarialbles.h | 37 +++++
SourceCode/Bond/Servo/HsmsPassive.cpp | 90 ++++++++++++
SourceCode/Bond/Servo/ServoDlg.cpp | 4
SourceCode/Bond/Servo/CPageDataVarialbles.cpp | 220 +++++++++++++++++++++++++++++++
SourceCode/Bond/Servo/ServoDlg.h | 2
9 files changed, 366 insertions(+), 5 deletions(-)
diff --git a/SourceCode/Bond/Servo/CPageDataVarialbles.cpp b/SourceCode/Bond/Servo/CPageDataVarialbles.cpp
new file mode 100644
index 0000000..cd68a1b
--- /dev/null
+++ b/SourceCode/Bond/Servo/CPageDataVarialbles.cpp
@@ -0,0 +1,220 @@
+锘�// CPageDataVarialbles.cpp: 瀹炵幇鏂囦欢
+//
+
+#include "stdafx.h"
+#include "Servo.h"
+#include "CPageDataVarialbles.h"
+#include "afxdialogex.h"
+#include "CVariableEditDlg2.h"
+
+IMPLEMENT_DYNAMIC(CPageDataVarialbles, CHMPropertyPage)
+
+CPageDataVarialbles::CPageDataVarialbles(CWnd* pParent /*=nullptr*/)
+ : CHMPropertyPage(IDD_PAGE_VARIABLE, pParent)
+{
+}
+
+CPageDataVarialbles::~CPageDataVarialbles()
+{
+}
+
+void CPageDataVarialbles::DoDataExchange(CDataExchange* pDX)
+{
+ CHMPropertyPage::DoDataExchange(pDX);
+ DDX_Control(pDX, IDC_LIST1, m_listCtrl);
+}
+
+BEGIN_MESSAGE_MAP(CPageDataVarialbles, CHMPropertyPage)
+ ON_WM_CTLCOLOR()
+ ON_WM_DESTROY()
+ ON_WM_SIZE()
+ ON_NOTIFY(LVN_ITEMCHANGED, IDC_LIST1, &CPageDataVarialbles::OnLvnItemchangedList1)
+END_MESSAGE_MAP()
+
+BOOL CPageDataVarialbles::OnInitDialog()
+{
+ CHMPropertyPage::OnInitDialog();
+
+ // 璇诲嚭鍒楀锛堢嫭绔嬬殑 ini 鍒嗚妭锛岄伩鍏嶄笌 SVID 椤甸潰鍐茬獊锛�
+ CString strIniFile, strItem;
+ strIniFile.Format(_T("%s\\configuration.ini"), (LPTSTR)(LPCTSTR)theApp.m_strAppDir);
+ int width[8] = { 0, 218, 180, 180, 180, 180, 180, 180 };
+ for (int i = 0; i < 8; i++) {
+ strItem.Format(_T("Col_%d_Width"), i);
+ width[i] = GetPrivateProfileInt("PageDataVariableListCtrl", strItem, width[i], strIniFile);
+ }
+
+ DWORD dwStyle = m_listCtrl.GetExtendedStyle();
+ dwStyle |= LVS_EX_FULLROWSELECT;
+ dwStyle |= LVS_EX_GRIDLINES;
+ m_listCtrl.SetExtendedStyle(dwStyle);
+
+ HIMAGELIST imageList = ImageList_Create(24, 24, ILC_COLOR24, 1, 1);
+ ListView_SetImageList(m_listCtrl.GetSafeHwnd(), imageList, LVSIL_SMALL);
+ m_listCtrl.InsertColumn(0, _T(""), LVCFMT_RIGHT, width[0]);
+ m_listCtrl.InsertColumn(1, _T("DV ID"), LVCFMT_LEFT, width[1]);
+ m_listCtrl.InsertColumn(2, _T("DV Name"), LVCFMT_LEFT, width[2]);
+ m_listCtrl.InsertColumn(3, _T("DV Format"), LVCFMT_LEFT, width[3]);
+ m_listCtrl.InsertColumn(4, _T("DV Remark"), LVCFMT_LEFT, width[4]);
+
+ loadDataVariables();
+
+ return TRUE;
+}
+
+HBRUSH CPageDataVarialbles::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
+{
+ return CHMPropertyPage::OnCtlColor(pDC, pWnd, nCtlColor);
+}
+
+void CPageDataVarialbles::OnDestroy()
+{
+ CHMPropertyPage::OnDestroy();
+
+ // 淇濆瓨鍒楀
+ CString strIniFile, strItem, strTemp;
+ strIniFile.Format(_T("%s\\configuration.ini"), (LPTSTR)(LPCTSTR)theApp.m_strAppDir);
+ CHeaderCtrl* pHeader = m_listCtrl.GetHeaderCtrl();
+ for (int i = 0; i < pHeader->GetItemCount(); i++) {
+ RECT rect;
+ pHeader->GetItemRect(i, &rect);
+ strItem.Format(_T("Col_%d_Width"), i);
+ strTemp.Format(_T("%d"), rect.right - rect.left);
+ WritePrivateProfileString("PageDataVariableListCtrl", strItem, strTemp, strIniFile);
+ }
+}
+
+void CPageDataVarialbles::OnSize(UINT nType, int cx, int cy)
+{
+ CHMPropertyPage::OnSize(nType, cx, cy);
+ if (GetDlgItem(IDC_LIST1) == nullptr) return;
+
+ CRect rcClient;
+ GetClientRect(&rcClient);
+ m_listCtrl.MoveWindow(12, 12, rcClient.Width() - 24, rcClient.Height() - 24);
+}
+
+void CPageDataVarialbles::OnApply()
+{
+ __super::OnApply();
+}
+
+void CPageDataVarialbles::loadDataVariables()
+{
+ auto& dvars = theApp.m_model.m_hsmsPassive.getDataVariables();
+ for (auto item : dvars) {
+ int index = m_listCtrl.InsertItem(m_listCtrl.GetItemCount(), _T(""));
+ m_listCtrl.SetItemData(index, (DWORD_PTR)item);
+ m_listCtrl.SetItemText(index, 1, std::to_string(item->getVarialbleId()).c_str());
+ m_listCtrl.SetItemText(index, 2, item->getName().c_str());
+ m_listCtrl.SetItemText(index, 3, SERVO::CVariable::formatToString(item->getFormat()).c_str());
+ m_listCtrl.SetItemText(index, 4, item->getRemark().c_str());
+ }
+}
+
+void CPageDataVarialbles::OnCreateBtns()
+{
+ const int BTN_W = 80;
+ const int BTN_H = 28;
+ CreateBtn(_T("鏂板"), BTN_W, BTN_H, 1001);
+ CreateBtn(_T("鍒犻櫎"), BTN_W, BTN_H, 1002)->EnableWindow(FALSE);
+ CreateBtn(_T("缂栬緫"), BTN_W, BTN_H, 1003)->EnableWindow(FALSE);
+}
+
+void CPageDataVarialbles::OnLvnItemchangedList1(NMHDR* pNMHDR, LRESULT* pResult)
+{
+ LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);
+ int nSelCount = m_listCtrl.GetSelectedCount();
+
+ if (CButton* pDel = GetBtnByName("鍒犻櫎")) {
+ pDel->EnableWindow(nSelCount > 0);
+ }
+ if (CButton* pEdit = GetBtnByName("缂栬緫")) {
+ pEdit->EnableWindow(nSelCount > 0);
+ }
+
+ *pResult = 0;
+}
+
+void CPageDataVarialbles::OnClickedBtn(const char* btnName)
+{
+ ASSERT(btnName);
+ if (_strcmpi(btnName, "鏂板") == 0) {
+ int rc = UX_CanExecute(L"addVarialbles");
+ if (rc != 1) {
+ AfxMessageBox("鎿嶄綔鏉冮檺涓嶈冻锛岃鑱旂郴绠$悊浜哄憳锛�");
+ return;
+ }
+ unsigned int newId = theApp.m_model.m_hsmsPassive.getMaxDataVariableId();
+ int newIdInt = static_cast<int>(newId + 1);
+ CVariableEditDlg2 dlg(_T("鏂板鏁版嵁鍙橀噺"), newIdInt, _T("U1"), _T(""), _T(""), this);
+ if (dlg.DoModal() != IDOK) return;
+ CString name = dlg.GetNameText();
+ CString fmt = dlg.GetTypeText();
+ CString remark = dlg.GetRemark();
+
+ int ret = theApp.m_model.m_hsmsPassive.addDataVariable(CT2A(name), CT2A(fmt), CT2A(remark), newIdInt);
+ if (ret == 0) {
+ UX_RecordAction(L"addVarialbles");
+ m_listCtrl.DeleteAllItems();
+ loadDataVariables();
+ }
+ else {
+ AfxMessageBox(_T("鏂板鏁版嵁鍙橀噺澶辫触锛屾牸寮忔槸鍚︽纭紵(U1/U2/I2/A20/A50/L)"));
+ }
+ }
+ else if (_strcmpi(btnName, "鍒犻櫎") == 0) {
+ POSITION pos = m_listCtrl.GetFirstSelectedItemPosition();
+ if (pos == nullptr) return;
+ int nItem = m_listCtrl.GetNextSelectedItem(pos);
+ auto pVar = reinterpret_cast<SERVO::CDataVariable*>(m_listCtrl.GetItemData(nItem));
+ if (pVar == nullptr) return;
+
+ int rc = UX_CanExecute(L"delVarialbles");
+ if (rc != 1) {
+ AfxMessageBox("鎿嶄綔鏉冮檺涓嶈冻锛岃鑱旂郴绠$悊浜哄憳锛�");
+ return;
+ }
+ int ret = theApp.m_model.m_hsmsPassive.deleteDataVariable(static_cast<int>(pVar->getVarialbleId()));
+ if (ret == 0) {
+ UX_RecordAction(L"delVarialbles");
+ m_listCtrl.DeleteAllItems();
+ loadDataVariables();
+ if (CButton* pDel = GetBtnByName("鍒犻櫎")) pDel->EnableWindow(FALSE);
+ if (CButton* pEdit = GetBtnByName("缂栬緫")) pEdit->EnableWindow(FALSE);
+ }
+ }
+ else if (_strcmpi(btnName, "缂栬緫") == 0) {
+ POSITION pos = m_listCtrl.GetFirstSelectedItemPosition();
+ if (pos == nullptr) return;
+ int nItem = m_listCtrl.GetNextSelectedItem(pos);
+ auto pVar = reinterpret_cast<SERVO::CDataVariable*>(m_listCtrl.GetItemData(nItem));
+ if (pVar == nullptr) return;
+
+ int rc = UX_CanExecute(L"editVarialbles");
+ if (rc != 1) {
+ AfxMessageBox("鎿嶄綔鏉冮檺涓嶈冻锛岃鑱旂郴绠$悊浜哄憳锛�");
+ return;
+ }
+ CVariableEditDlg2 dlg(_T("缂栬緫鏁版嵁鍙橀噺"),
+ pVar->getVarialbleId(),
+ CString(CA2T(SERVO::CVariable::formatToString(pVar->getFormat()).c_str())),
+ CString(CA2T(pVar->getName().c_str())),
+ CString(CA2T(pVar->getRemark().c_str())),
+ this);
+ if (dlg.DoModal() != IDOK) return;
+ CString name = dlg.GetNameText();
+ CString fmt = dlg.GetTypeText();
+ CString remark = dlg.GetRemark();
+
+ int ret = theApp.m_model.m_hsmsPassive.updateDataVariable(static_cast<int>(pVar->getVarialbleId()), CT2A(name), CT2A(fmt), CT2A(remark));
+ if (ret == 0) {
+ UX_RecordAction(L"editVarialbles");
+ m_listCtrl.DeleteAllItems();
+ loadDataVariables();
+ }
+ else {
+ AfxMessageBox(_T("缂栬緫鏁版嵁鍙橀噺澶辫触锛屾牸寮忔槸鍚︽纭紵(U1/U2/I2/A20/A50/L)"));
+ }
+ }
+}
diff --git a/SourceCode/Bond/Servo/CPageDataVarialbles.h b/SourceCode/Bond/Servo/CPageDataVarialbles.h
new file mode 100644
index 0000000..9abcac4
--- /dev/null
+++ b/SourceCode/Bond/Servo/CPageDataVarialbles.h
@@ -0,0 +1,37 @@
+锘�#pragma once
+#include "CHMPropertyPage.h"
+#include "ListCtrlEx.h"
+
+// CPageDataVarialbles 瀵硅瘽妗嗭紙DVID 缂栬緫/鏌ョ湅锛�
+class CPageDataVarialbles : public CHMPropertyPage
+{
+ DECLARE_DYNAMIC(CPageDataVarialbles)
+
+public:
+ CPageDataVarialbles(CWnd* pParent = nullptr);
+ virtual ~CPageDataVarialbles();
+ virtual void OnApply();
+ void loadDataVariables();
+ virtual void OnCreateBtns();
+
+private:
+ CListCtrlEx m_listCtrl;
+
+protected:
+ virtual void OnClickedBtn(const char* btnName) override;
+
+#ifdef AFX_DESIGN_TIME
+ enum { IDD = IDD_PAGE_VARIABLE };
+#endif
+
+protected:
+ virtual void DoDataExchange(CDataExchange* pDX);
+
+ DECLARE_MESSAGE_MAP()
+public:
+ virtual BOOL OnInitDialog();
+ afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor);
+ afx_msg void OnDestroy();
+ afx_msg void OnSize(UINT nType, int cx, int cy);
+ afx_msg void OnLvnItemchangedList1(NMHDR* pNMHDR, LRESULT* pResult);
+};
diff --git a/SourceCode/Bond/Servo/HsmsPassive.cpp b/SourceCode/Bond/Servo/HsmsPassive.cpp
index df2aaeb..28c382c 100644
--- a/SourceCode/Bond/Servo/HsmsPassive.cpp
+++ b/SourceCode/Bond/Servo/HsmsPassive.cpp
@@ -665,6 +665,27 @@
maxId = item->getVarialbleId();
}
}
+ for (auto item : m_dataVariabels) {
+ if (item && item->getVarialbleId() > maxId) {
+ maxId = item->getVarialbleId();
+ }
+ }
+ return maxId;
+}
+
+unsigned int CHsmsPassive::getMaxDataVariableId() const
+{
+ unsigned int maxId = 0;
+ for (auto item : m_variabels) {
+ if (item && item->getVarialbleId() > maxId) {
+ maxId = item->getVarialbleId();
+ }
+ }
+ for (auto item : m_dataVariabels) {
+ if (item && item->getVarialbleId() > maxId) {
+ maxId = item->getVarialbleId();
+ }
+ }
return maxId;
}
@@ -897,6 +918,75 @@
return writeVariablesToFile(filepath);
}
+int CHsmsPassive::deleteDataVariable(int dvid)
+{
+ Lock();
+ auto it = std::find_if(m_dataVariabels.begin(), m_dataVariabels.end(), [=](SERVO::CDataVariable* v) {
+ return v != nullptr && v->getVarialbleId() == (unsigned int)dvid;
+ });
+ if (it == m_dataVariabels.end()) {
+ Unlock();
+ return -1;
+ }
+ delete *it;
+ m_dataVariabels.erase(it);
+ auto filepath = m_strDataVariableFilepath;
+ Unlock();
+
+ if (filepath.empty()) return -2;
+ return writeDataVariablesToFile(filepath);
+}
+
+int CHsmsPassive::addDataVariable(const char* pszName, const char* pszFormat, const char* pszRemark, int& outId)
+{
+ if (pszName == nullptr || pszFormat == nullptr) return -1;
+ std::string fmt = pszFormat;
+ std::transform(fmt.begin(), fmt.end(), fmt.begin(), ::toupper);
+ if (!isValidFormat(fmt)) return -2;
+
+ Lock();
+ int maxId = 0;
+ for (auto v : m_dataVariabels) {
+ if (v != nullptr && static_cast<int>(v->getVarialbleId()) > maxId) {
+ maxId = static_cast<int>(v->getVarialbleId());
+ }
+ }
+ outId = maxId + 1;
+
+ SERVO::CDataVariable* pNew = new SERVO::CDataVariable(std::to_string(outId).c_str(), pszName, fmt.c_str(), pszRemark ? pszRemark : "");
+ m_dataVariabels.push_back(pNew);
+ auto filepath = m_strDataVariableFilepath;
+ Unlock();
+
+ if (filepath.empty()) return -3;
+ return writeDataVariablesToFile(filepath);
+}
+
+int CHsmsPassive::updateDataVariable(int dvid, const char* pszName, const char* pszFormat, const char* pszRemark)
+{
+ if (pszName == nullptr || pszFormat == nullptr) return -1;
+ std::string fmt = pszFormat;
+ std::transform(fmt.begin(), fmt.end(), fmt.begin(), ::toupper);
+ if (!isValidFormat(fmt)) return -2;
+
+ Lock();
+ auto it = std::find_if(m_dataVariabels.begin(), m_dataVariabels.end(), [=](SERVO::CDataVariable* v) {
+ return v != nullptr && v->getVarialbleId() == (unsigned int)dvid;
+ });
+ if (it == m_dataVariabels.end()) {
+ Unlock();
+ return -4;
+ }
+ (*it)->setName(pszName);
+ (*it)->setFormat(fmt.c_str());
+ (*it)->setRemark(pszRemark ? pszRemark : "");
+ auto filepath = m_strDataVariableFilepath;
+ Unlock();
+
+ if (filepath.empty()) return -3;
+ return writeDataVariablesToFile(filepath);
+}
+
int CHsmsPassive::writeVariablesToFile(const std::string& filepath)
{
if (filepath.empty()) return -3;
diff --git a/SourceCode/Bond/Servo/HsmsPassive.h b/SourceCode/Bond/Servo/HsmsPassive.h
index 24815d7..abbe05e 100644
--- a/SourceCode/Bond/Servo/HsmsPassive.h
+++ b/SourceCode/Bond/Servo/HsmsPassive.h
@@ -153,6 +153,7 @@
std::vector<SERVO::CVariable*>& getVariables();
unsigned int getMaxVariableId() const;
std::vector<SERVO::CDataVariable*>& getDataVariables();
+ unsigned int getMaxDataVariableId() const;
// 鍙栧緱鎸囧畾Variable
SERVO::CVariable* getVariable(int variableId);
@@ -164,6 +165,9 @@
int deleteVariable(int variableId);
int addVariable(const char* pszName, const char* pszFormat, const char* pszRemark, int& outId);
int updateVariable(int variableId, const char* pszName, const char* pszFormat, const char* pszRemark);
+ int deleteDataVariable(int dvid);
+ int addDataVariable(const char* pszName, const char* pszFormat, const char* pszRemark, int& outId);
+ int updateDataVariable(int dvid, const char* pszName, const char* pszFormat, const char* pszRemark);
// 璁剧疆鍙橀噺鍊�
void setVariableValue(const char* pszName, __int64 value);
diff --git a/SourceCode/Bond/Servo/Servo.vcxproj b/SourceCode/Bond/Servo/Servo.vcxproj
index 8926423..3f876a1 100644
--- a/SourceCode/Bond/Servo/Servo.vcxproj
+++ b/SourceCode/Bond/Servo/Servo.vcxproj
@@ -248,6 +248,7 @@
<ClInclude Include="CPageProdOverview.h" />
<ClInclude Include="CPageReport.h" />
<ClInclude Include="CPageVarialbles.h" />
+ <ClInclude Include="CPageDataVarialbles.h" />
<ClInclude Include="CPanelProduction.h" />
<ClInclude Include="HmLabel.h" />
<ClInclude Include="ProductionStats.h" />
@@ -475,6 +476,7 @@
<ClCompile Include="CPageProdOverview.cpp" />
<ClCompile Include="CPageReport.cpp" />
<ClCompile Include="CPageVarialbles.cpp" />
+ <ClCompile Include="CPageDataVarialbles.cpp" />
<ClCompile Include="ConfigurationProduction.cpp" />
<ClCompile Include="CPanelProduction.cpp" />
<ClCompile Include="HmLabel.cpp" />
@@ -670,4 +672,4 @@
<Error Condition="!Exists('..\packages\Microsoft.Web.WebView2.1.0.2903.40\build\native\Microsoft.Web.WebView2.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Microsoft.Web.WebView2.1.0.2903.40\build\native\Microsoft.Web.WebView2.targets'))" />
<Error Condition="!Exists('..\packages\Microsoft.Windows.ImplementationLibrary.1.0.240803.1\build\native\Microsoft.Windows.ImplementationLibrary.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Microsoft.Windows.ImplementationLibrary.1.0.240803.1\build\native\Microsoft.Windows.ImplementationLibrary.targets'))" />
</Target>
-</Project>
\ No newline at end of file
+</Project>
diff --git a/SourceCode/Bond/Servo/Servo.vcxproj.filters b/SourceCode/Bond/Servo/Servo.vcxproj.filters
index ece83fa..dd0ee29 100644
--- a/SourceCode/Bond/Servo/Servo.vcxproj.filters
+++ b/SourceCode/Bond/Servo/Servo.vcxproj.filters
@@ -174,6 +174,7 @@
<ClCompile Include="CReport.cpp" />
<ClCompile Include="CVariable.cpp" />
<ClCompile Include="CPageVarialbles.cpp" />
+ <ClCompile Include="CPageDataVarialbles.cpp" />
<ClCompile Include="CPageReport.cpp" />
<ClCompile Include="CPageCollectionEvent.cpp" />
<ClCompile Include="ProcessJob.cpp" />
@@ -423,6 +424,7 @@
<ClInclude Include="CReport.h" />
<ClInclude Include="CVariable.h" />
<ClInclude Include="CPageVarialbles.h" />
+ <ClInclude Include="CPageDataVarialbles.h" />
<ClInclude Include="CPageReport.h" />
<ClInclude Include="CPageCollectionEvent.h" />
<ClInclude Include="ProcessJob.h" />
@@ -571,4 +573,4 @@
<UniqueIdentifier>{885738f6-3122-4bb9-8308-46b7f692fb13}</UniqueIdentifier>
</Filter>
</ItemGroup>
-</Project>
\ No newline at end of file
+</Project>
diff --git a/SourceCode/Bond/Servo/ServoDlg.cpp b/SourceCode/Bond/Servo/ServoDlg.cpp
index 89aaf91..cdc423f 100644
--- a/SourceCode/Bond/Servo/ServoDlg.cpp
+++ b/SourceCode/Bond/Servo/ServoDlg.cpp
@@ -653,6 +653,10 @@
pPage3->Create(IDD_PAGE_VARIABLE);
dlg.addPage(pPage3, "Variable");
+ CPageDataVarialbles* pPage4 = new CPageDataVarialbles();
+ pPage4->Create(IDD_PAGE_VARIABLE);
+ dlg.addPage(pPage4, "DataVariable");
+
dlg.DoModal();
}
diff --git a/SourceCode/Bond/Servo/ServoDlg.h b/SourceCode/Bond/Servo/ServoDlg.h
index 81c5a5f..df4b01d 100644
--- a/SourceCode/Bond/Servo/ServoDlg.h
+++ b/SourceCode/Bond/Servo/ServoDlg.h
@@ -19,6 +19,8 @@
#include "CMyStatusbar.h"
#include "CRobotTaskDlg.h"
#include "CPageGlassList.h"
+#include "CPageVarialbles.h"
+#include "CPageDataVarialbles.h"
// CServoDlg 瀵硅瘽妗�
diff --git a/SourceCode/Bond/x64/Debug/DataVariableList.txt b/SourceCode/Bond/x64/Debug/DataVariableList.txt
index a874466..db4f8a2 100644
--- a/SourceCode/Bond/x64/Debug/DataVariableList.txt
+++ b/SourceCode/Bond/x64/Debug/DataVariableList.txt
@@ -93,6 +93,6 @@
6701,Measurement_PD_Time,A20,Measurement PD: 鏃堕棿
6702,Measurement_PD_Value1,A20,Measurement PD: 娴嬮噺鍊�1
6703,Measurement_PD_Value2,A20,Measurement PD: 娴嬮噺鍊�2
-10200,SlotMap,U2,SlotMap(Scan)
-10201,SlotMapScan,U2,SlotMap(Scan)
-10202,SlotMapDownload,U2,SlotMap(Download)
+10200,SlotMap,U1,SlotMap(Scan)
+10201,SlotMapScan,U1,SlotMap(Scan)
+10202,SlotMapDownload,U1,SlotMap(Download)
--
Gitblit v1.9.3