From f6f12fd688599e1abb1b9a7400b5f6a2936ecfa5 Mon Sep 17 00:00:00 2001
From: LAPTOP-SNT8I5JK\Boounion <Chenluhua@qq.com>
Date: 星期一, 10 二月 2025 11:43:20 +0800
Subject: [PATCH] 1.初充提交

---
 SourceCode/Bond/Servo/TerminalDisplayDlg.h       |   57 +++
 .gitignore                                       |    5 
 SourceCode/Bond/x64/Debug/Res/TeminalMsg.html    |   24 +
 SourceCode/Bond/Servo/Servo.vcxproj.user         |    6 
 SourceCode/Bond/Servo/TerminalDisplayDlg.cpp     |  274 ++++++++++++++++++
 SourceCode/Bond/x64/Debug/Recipe/Default.xml     |  533 +++++++++++++++++++++++++++++++++++
 SourceCode/Bond/x64/Debug/Res/close_white_24.ico |    0 
 SourceCode/Bond/x64/Debug/Res/Servo001_back.bmp  |    0 
 8 files changed, 899 insertions(+), 0 deletions(-)

diff --git a/.gitignore b/.gitignore
index 0688f72..8304e96 100644
--- a/.gitignore
+++ b/.gitignore
@@ -39,3 +39,8 @@
 SourceCode/Bond/x64/Release/Bonder.dat
 SourceCode/Bond/Servo/x64/
 SourceCode/Bond/BoounionPLC/x64/
+Document/HSMS_Demo/.vs/
+*.db
+SourceCode/Bond/.vs/
+SourceCode/Bond/packages/
+SourceCode/Bond/x64/Debug/Servo.exe.WebView2/
diff --git a/SourceCode/Bond/Servo/Servo.vcxproj.user b/SourceCode/Bond/Servo/Servo.vcxproj.user
new file mode 100644
index 0000000..ef958f5
--- /dev/null
+++ b/SourceCode/Bond/Servo/Servo.vcxproj.user
@@ -0,0 +1,6 @@
+锘�<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <RESOURCE_FILE>Servo.rc</RESOURCE_FILE>
+  </PropertyGroup>
+</Project>
\ No newline at end of file
diff --git a/SourceCode/Bond/Servo/TerminalDisplayDlg.cpp b/SourceCode/Bond/Servo/TerminalDisplayDlg.cpp
new file mode 100644
index 0000000..8db94d2
--- /dev/null
+++ b/SourceCode/Bond/Servo/TerminalDisplayDlg.cpp
@@ -0,0 +1,274 @@
+// TerminalDisplayDlg.cpp : 实现文件
+//
+
+#include "stdafx.h"
+#include "Servo.h"
+#include "TerminalDisplayDlg.h"
+#include "afxdialogex.h"
+
+
+#define TIMER_ID_HIDE		1
+
+
+// CTerminalDisplayDlg 对话框
+
+IMPLEMENT_DYNAMIC(CTerminalDisplayDlg, CDialogEx)
+
+CTerminalDisplayDlg::CTerminalDisplayDlg(CWnd* pParent /*=NULL*/)
+	: CDialogEx(IDD_DIALOG_TERMINAL_DISPLAY, pParent)
+{
+	m_crBkgnd = RGB(0x3d, 0x0, 0xd0);
+	m_hbrBkgnd = nullptr;
+}
+
+CTerminalDisplayDlg::~CTerminalDisplayDlg()
+{
+}
+
+void CTerminalDisplayDlg::DoDataExchange(CDataExchange* pDX)
+{
+	CDialogEx::DoDataExchange(pDX);
+	DDX_Control(pDX, IDC_BUTTON_CLOSE, m_btnClose);	
+}
+
+
+BEGIN_MESSAGE_MAP(CTerminalDisplayDlg, CDialogEx)
+	ON_WM_CTLCOLOR()
+	ON_WM_DESTROY()
+	ON_WM_SIZE()
+	ON_WM_CREATE()
+	ON_WM_TIMER()
+	ON_BN_CLICKED(IDC_BUTTON_CLOSE, &CTerminalDisplayDlg::OnBnClickedButtonClose)
+	ON_WM_NCHITTEST()
+END_MESSAGE_MAP()
+
+
+// CTerminalDisplayDlg 消息处理程序
+
+void CTerminalDisplayDlg::SetTemplateHtml(const char* pszFilepath)
+{
+	m_strFilepath = pszFilepath;
+}
+
+BOOL CTerminalDisplayDlg::OnInitDialog()
+{
+	CDialogEx::OnInitDialog();
+
+	CString strIcon1;
+	strIcon1.Format(_T("%s\\Res\\close_white_24.ico"), theApp.m_strAppDir);
+	HICON hIcon = (HICON)::LoadImage(AfxGetInstanceHandle(),
+		strIcon1, IMAGE_ICON, 24, 24,
+		LR_LOADFROMFILE | LR_DEFAULTCOLOR | LR_CREATEDIBSECTION | LR_DEFAULTSIZE);
+	m_btnClose.SetIcon(hIcon, hIcon, 24);
+	m_btnClose.SetBkgndColor(BS_HOVER, RGB(232, 17, 35));
+	m_btnClose.SetBkgndColor(BS_PRESS, RGB(162, 34, 44));
+	UpdateCloseBtn();
+
+	return TRUE;  // return TRUE unless you set the focus to a control
+				  // 异常: OCX 属性页应返回 FALSE
+}
+
+
+HBRUSH CTerminalDisplayDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
+{
+	HBRUSH hbr = CDialogEx::OnCtlColor(pDC, pWnd, nCtlColor);
+
+	if (nCtlColor == CTLCOLOR_STATIC) {
+		pDC->SetBkColor(m_crBkgnd);
+	}
+
+	if (m_hbrBkgnd == nullptr) {
+		m_hbrBkgnd = CreateSolidBrush(m_crBkgnd);
+	}
+
+	return m_hbrBkgnd;
+}
+
+
+void CTerminalDisplayDlg::OnDestroy()
+{
+	CDialogEx::OnDestroy();
+
+	if (m_hbrBkgnd != nullptr) {
+		::DeleteObject(m_hbrBkgnd);
+	}
+}
+
+
+void CTerminalDisplayDlg::OnSize(UINT nType, int cx, int cy)
+{
+	CDialogEx::OnSize(nType, cx, cy);
+	if (m_webviewController == nullptr) return;
+	Resize();
+}
+
+void CTerminalDisplayDlg::Resize()
+{
+	CWnd* pItem;
+	CRect rcClient, rcItem;
+	GetClientRect(&rcClient);
+	rcClient.top += 38;
+	m_webviewController->put_Bounds(rcClient);
+	m_btnClose.MoveWindow(rcClient.right - 38, 0, 38, 38);
+}
+
+void CTerminalDisplayDlg::ShowText(const char* pszText, unsigned int duration/* = -1*/)
+{
+	if (m_webWiew == nullptr) return;
+	std::string strMsg = pszText;
+	std::wstring wstrMsg(strMsg.begin(), strMsg.end());
+	size_t size = (wstrMsg.size() + 1) * sizeof(wchar_t);
+	wchar_t* memory = (wchar_t*)CoTaskMemAlloc(size);
+	if (memory == nullptr) return;
+	wcsncpy_s(memory, wstrMsg.size() + 1, wstrMsg.c_str(), wstrMsg.size());
+	wil::unique_cotaskmem_string message(memory);
+	m_webWiew->PostWebMessageAsString(message.get());
+	ShowWindow(SW_SHOW);
+	m_webviewController->put_IsVisible(TRUE);
+	SetTimer(TIMER_ID_HIDE, duration, nullptr);
+}
+
+int CTerminalDisplayDlg::OnCreate(LPCREATESTRUCT lpCreateStruct)
+{
+	if (CDialogEx::OnCreate(lpCreateStruct) == -1)
+		return -1;
+
+	HWND hWnd = this->m_hWnd;
+
+	// Step 3 - Create a single WebView within the parent window
+	// Locate the browser and set up the environment for WebView
+	CreateCoreWebView2EnvironmentWithOptions(nullptr, nullptr, nullptr,
+		Callback<ICoreWebView2CreateCoreWebView2EnvironmentCompletedHandler>(
+			[hWnd, this](HRESULT result, ICoreWebView2Environment* env) -> HRESULT {
+
+				// Create a CoreWebView2Controller and get the associated CoreWebView2 whose parent is the main window hWnd
+				env->CreateCoreWebView2Controller(hWnd, Callback<ICoreWebView2CreateCoreWebView2ControllerCompletedHandler>(
+					[hWnd, this](HRESULT result, ICoreWebView2Controller* controller) -> HRESULT {
+						if (controller != nullptr) {
+							this->m_webviewController = controller;
+							this->m_webviewController->get_CoreWebView2(&this->m_webWiew);
+						}
+						// Add a few settings for the webview
+						// The demo step is redundant since the values are the default settings
+						wil::com_ptr<ICoreWebView2Settings> settings;
+						this->m_webWiew->get_Settings(&settings);
+						settings->put_IsScriptEnabled(TRUE);
+						settings->put_AreDefaultScriptDialogsEnabled(TRUE);
+						settings->put_IsWebMessageEnabled(TRUE);
+
+						// Resize WebView to fit the bounds of the parent window
+						RECT bounds;
+						::GetClientRect(hWnd, &bounds);
+						this->m_webviewController->put_Bounds(bounds);
+						Resize();
+
+						EventRegistrationToken token;
+
+						// Step 5 - Scripting
+						// Schedule an async task to add initialization script that freezes the Object object
+						this->m_webWiew->AddScriptToExecuteOnDocumentCreated(L"Object.freeze(Object);", nullptr);
+						// Schedule an async task to get the document URL
+						this->m_webWiew->ExecuteScript(L"window.document.URL;", Callback<ICoreWebView2ExecuteScriptCompletedHandler>(
+							[](HRESULT errorCode, LPCWSTR resultObjectAsJson) -> HRESULT {
+								LPCWSTR URL = resultObjectAsJson;
+								return S_OK;
+							}).Get());
+
+
+						// Step 6 - Communication between host and web content
+						// Set an event handler for the host to return received message back to the web content
+						this->m_webWiew->add_WebMessageReceived(Callback<ICoreWebView2WebMessageReceivedEventHandler>(
+							[this](ICoreWebView2* webview, ICoreWebView2WebMessageReceivedEventArgs* args) -> HRESULT {
+								wil::unique_cotaskmem_string message;
+								args->TryGetWebMessageAsString(&message);
+								this->ProcessWebViewMessage(message);
+								return S_OK;
+							}).Get(), &token);
+
+						if (!m_strFilepath.empty()) {
+							wchar_t url[512];
+							swprintf(url, 512, L"file:///%hs", m_strFilepath.c_str());
+							m_webWiew->Navigate(url);
+						}
+
+						return S_OK;
+					}).Get());
+				return S_OK;
+			}).Get());
+
+	return 0;
+}
+
+
+void CTerminalDisplayDlg::OnTimer(UINT_PTR nIDEvent)
+{
+	// TODO: 在此添加消息处理程序代码和/或调用默认值
+	if (TIMER_ID_HIDE == nIDEvent) {
+		KillTimer(TIMER_ID_HIDE);
+		ShowWindow(SW_HIDE);
+	}
+
+	CDialogEx::OnTimer(nIDEvent);
+}
+
+void CTerminalDisplayDlg::OnBnClickedButtonClose()
+{
+	ShowWindow(SW_HIDE);
+}
+
+LRESULT CTerminalDisplayDlg::OnNcHitTest(CPoint point)
+{
+	return HTCAPTION;
+	return CDialogEx::OnNcHitTest(point);
+}
+
+void CTerminalDisplayDlg::ProcessWebViewMessage(wil::unique_cotaskmem_string& message)
+{
+	// 转换为CString
+	LPCWSTR wideStr = message.get();
+	int bufferSize = WideCharToMultiByte(CP_UTF8, 0, wideStr, -1, nullptr, 0, nullptr, nullptr);
+	if (bufferSize == 0)return;
+	char* charStr = new char[bufferSize];
+	WideCharToMultiByte(CP_UTF8, 0, wideStr, -1, charStr, bufferSize, nullptr, nullptr);
+	CString strMsg = charStr;
+	delete[] charStr;
+
+
+	// 取header, body
+	CString strHeader, strBody;
+	int n = strMsg.Find(":");
+	if (n < 0) return;
+	strHeader = strMsg.Left(n);
+	strBody = strMsg.Right(strMsg.GetLength() - n - 1);
+
+
+	// 背景色
+	if (strHeader.CompareNoCase("backgroundColor") == 0) {
+		int n1 = strBody.Find("rgb(");
+		int n2 = strBody.Find(",");
+		int n3 = strBody.Find(",", n2+1);
+		int n4 = strBody.Find(")");
+		if (n1 >= 0 && n2 > 0 && n3 > 0 && n4 > 0) {
+			CString strRed, strGreen, strBlue;
+			strRed = strBody.Mid(n1 + 4, n2 - n1 - 4);
+			strGreen = strBody.Mid(n2 + 1, n3 - n2 - 1);
+			strBlue = strBody.Mid(n3 + 1, n4 - n3 - 1);
+			m_crBkgnd = RGB(atoi(strRed), atoi(strGreen), atoi(strBlue));
+			if (m_hbrBkgnd != nullptr) {
+				::DeleteObject(m_hbrBkgnd);
+				m_hbrBkgnd = nullptr;
+				Invalidate();
+			}
+			UpdateCloseBtn();
+		}
+	}
+}
+
+void CTerminalDisplayDlg::UpdateCloseBtn()
+{
+	m_btnClose.SetFrameColor(BS_NORMAL, m_crBkgnd);
+	m_btnClose.SetFrameColor(BS_HOVER, m_crBkgnd);
+	m_btnClose.SetFrameColor(BS_PRESS, m_crBkgnd);
+	m_btnClose.SetBkgndColor(BS_NORMAL, m_crBkgnd);
+	m_btnClose.Invalidate();
+}
\ No newline at end of file
diff --git a/SourceCode/Bond/Servo/TerminalDisplayDlg.h b/SourceCode/Bond/Servo/TerminalDisplayDlg.h
new file mode 100644
index 0000000..8fc3f21
--- /dev/null
+++ b/SourceCode/Bond/Servo/TerminalDisplayDlg.h
@@ -0,0 +1,57 @@
+#pragma once
+#include <iostream>
+#include <wrl.h>
+#include <wil/com.h>
+#include "WebView2.h"
+#include "BlButton.h"
+
+using namespace Microsoft::WRL;
+
+
+// CTerminalDisplayDlg 对话框
+
+class CTerminalDisplayDlg : public CDialogEx
+{
+	DECLARE_DYNAMIC(CTerminalDisplayDlg)
+
+public:
+	CTerminalDisplayDlg(CWnd* pParent = NULL);   // 标准构造函数
+	virtual ~CTerminalDisplayDlg();
+
+public:
+	void SetTemplateHtml(const char* pszFilepath);
+	void ShowText(const char* pszText, unsigned int duration = -1);
+
+private:
+	void Resize();
+	void ProcessWebViewMessage(wil::unique_cotaskmem_string& message);
+	void UpdateCloseBtn();
+
+private:
+	wil::com_ptr<ICoreWebView2Controller> m_webviewController;
+	wil::com_ptr<ICoreWebView2> m_webWiew;
+	std::string m_strFilepath;
+	COLORREF m_crBkgnd;
+	HBRUSH m_hbrBkgnd;
+	CBlButton m_btnClose;
+
+
+// 对话框数据
+#ifdef AFX_DESIGN_TIME
+	enum { IDD = IDD_DIALOG_TERMINAL_DISPLAY };
+#endif
+
+protected:
+	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持
+
+	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 int OnCreate(LPCREATESTRUCT lpCreateStruct);
+	afx_msg void OnTimer(UINT_PTR nIDEvent);
+	afx_msg void OnBnClickedButtonClose();
+	afx_msg LRESULT OnNcHitTest(CPoint point);
+};
diff --git a/SourceCode/Bond/x64/Debug/Recipe/Default.xml b/SourceCode/Bond/x64/Debug/Recipe/Default.xml
new file mode 100644
index 0000000..bc321af
--- /dev/null
+++ b/SourceCode/Bond/x64/Debug/Recipe/Default.xml
@@ -0,0 +1,533 @@
+<?xml version="1.0"?>
+<Recipe>
+	<Axes>
+		<Axis id="1" number="M100-M1" description="Default_Axis1" start_address="ZR10000">
+			<jog_distance min="1" />
+			<jog_distance max="10" />
+			<jog_distance current="1" />
+			<manual_speed min="1" />
+			<manual_speed max="100" />
+			<manual_speed current="10" />
+			<auto_speed min="5" />
+			<auto_speed max="200" />
+			<auto_speed current="50" />
+			<acceleration_time min="1" />
+			<acceleration_time max="10" />
+			<acceleration_time current="1" />
+			<deceleration_time min="1" />
+			<deceleration_time max="10" />
+			<deceleration_time current="1" />
+			<Positions>
+				<Position description="Position 1" min="5" max="20" current="10" />
+				<Position description="Position 2" min="10" max="40" current="20" />
+				<Position description="Position 3" min="15" max="60" current="30" />
+				<Position description="Position 4" min="20" max="80" current="40" />
+				<Position description="Position 5" min="25" max="100" current="50" />
+				<Position description="Position 6" min="30" max="120" current="60" />
+				<Position description="Position 7" min="35" max="140" current="70" />
+				<Position description="Position 8" min="40" max="160" current="80" />
+				<Position description="Position 9" min="45" max="180" current="90" />
+				<Position description="Position 10" min="50" max="200" current="100" />
+				<Position description="Position 11" min="55" max="220" current="110" />
+				<Position description="Position 12" min="60" max="240" current="120" />
+				<Position description="Position 13" min="65" max="260" current="130" />
+				<Position description="Position 14" min="70" max="280" current="140" />
+				<Position description="Position 15" min="75" max="300" current="150" />
+				<Position description="Position 16" min="80" max="320" current="160" />
+				<Position description="Position 17" min="85" max="340" current="170" />
+				<Position description="Position 18" min="90" max="360" current="180" />
+				<Position description="Position 19" min="95" max="380" current="190" />
+				<Position description="Position 20" min="100" max="400" current="200" />
+				<Position description="Position 21" min="105" max="420" current="210" />
+				<Position description="Position 22" min="110" max="440" current="220" />
+				<Position description="Position 23" min="115" max="460" current="230" />
+				<Position description="Position 24" min="120" max="480" current="240" />
+				<Position description="Position 25" min="125" max="500" current="250" />
+			</Positions>
+		</Axis>
+		<Axis id="2" number="M100-M2" description="Default_Axis2" start_address="ZR10300">
+			<jog_distance min="1" />
+			<jog_distance max="10" />
+			<jog_distance current="1" />
+			<manual_speed min="1" />
+			<manual_speed max="100" />
+			<manual_speed current="10" />
+			<auto_speed min="5" />
+			<auto_speed max="200" />
+			<auto_speed current="50" />
+			<acceleration_time min="1" />
+			<acceleration_time max="10" />
+			<acceleration_time current="1" />
+			<deceleration_time min="1" />
+			<deceleration_time max="10" />
+			<deceleration_time current="1" />
+			<Positions>
+				<Position description="Position 1" min="5" max="20" current="10" />
+				<Position description="Position 2" min="10" max="40" current="20" />
+				<Position description="Position 3" min="15" max="60" current="30" />
+				<Position description="Position 4" min="20" max="80" current="40" />
+				<Position description="Position 5" min="25" max="100" current="50" />
+				<Position description="Position 6" min="30" max="120" current="60" />
+				<Position description="Position 7" min="35" max="140" current="70" />
+				<Position description="Position 8" min="40" max="160" current="80" />
+				<Position description="Position 9" min="45" max="180" current="90" />
+				<Position description="Position 10" min="50" max="200" current="100" />
+				<Position description="Position 11" min="55" max="220" current="110" />
+				<Position description="Position 12" min="60" max="240" current="120" />
+				<Position description="Position 13" min="65" max="260" current="130" />
+				<Position description="Position 14" min="70" max="280" current="140" />
+				<Position description="Position 15" min="75" max="300" current="150" />
+				<Position description="Position 16" min="80" max="320" current="160" />
+				<Position description="Position 17" min="85" max="340" current="170" />
+				<Position description="Position 18" min="90" max="360" current="180" />
+				<Position description="Position 19" min="95" max="380" current="190" />
+				<Position description="Position 20" min="100" max="400" current="200" />
+				<Position description="Position 21" min="105" max="420" current="210" />
+				<Position description="Position 22" min="110" max="440" current="220" />
+				<Position description="Position 23" min="115" max="460" current="230" />
+				<Position description="Position 24" min="120" max="480" current="240" />
+				<Position description="Position 25" min="125" max="500" current="250" />
+			</Positions>
+		</Axis>
+		<Axis id="3" number="M100-M3" description="Default_Axis3" start_address="ZR10600">
+			<jog_distance min="1" />
+			<jog_distance max="10" />
+			<jog_distance current="1" />
+			<manual_speed min="1" />
+			<manual_speed max="100" />
+			<manual_speed current="10" />
+			<auto_speed min="5" />
+			<auto_speed max="200" />
+			<auto_speed current="50" />
+			<acceleration_time min="1" />
+			<acceleration_time max="10" />
+			<acceleration_time current="1" />
+			<deceleration_time min="1" />
+			<deceleration_time max="10" />
+			<deceleration_time current="1" />
+			<Positions>
+				<Position description="Position 1" min="5" max="20" current="10" />
+				<Position description="Position 2" min="10" max="40" current="20" />
+				<Position description="Position 3" min="15" max="60" current="30" />
+				<Position description="Position 4" min="20" max="80" current="40" />
+				<Position description="Position 5" min="25" max="100" current="50" />
+				<Position description="Position 6" min="30" max="120" current="60" />
+				<Position description="Position 7" min="35" max="140" current="70" />
+				<Position description="Position 8" min="40" max="160" current="80" />
+				<Position description="Position 9" min="45" max="180" current="90" />
+				<Position description="Position 10" min="50" max="200" current="100" />
+				<Position description="Position 11" min="55" max="220" current="110" />
+				<Position description="Position 12" min="60" max="240" current="120" />
+				<Position description="Position 13" min="65" max="260" current="130" />
+				<Position description="Position 14" min="70" max="280" current="140" />
+				<Position description="Position 15" min="75" max="300" current="150" />
+				<Position description="Position 16" min="80" max="320" current="160" />
+				<Position description="Position 17" min="85" max="340" current="170" />
+				<Position description="Position 18" min="90" max="360" current="180" />
+				<Position description="Position 19" min="95" max="380" current="190" />
+				<Position description="Position 20" min="100" max="400" current="200" />
+				<Position description="Position 21" min="105" max="420" current="210" />
+				<Position description="Position 22" min="110" max="440" current="220" />
+				<Position description="Position 23" min="115" max="460" current="230" />
+				<Position description="Position 24" min="120" max="480" current="240" />
+				<Position description="Position 25" min="125" max="500" current="250" />
+			</Positions>
+		</Axis>
+		<Axis id="4" number="M100-M4" description="Default_Axis4" start_address="ZR10900">
+			<jog_distance min="1" />
+			<jog_distance max="10" />
+			<jog_distance current="1" />
+			<manual_speed min="1" />
+			<manual_speed max="100" />
+			<manual_speed current="10" />
+			<auto_speed min="5" />
+			<auto_speed max="200" />
+			<auto_speed current="50" />
+			<acceleration_time min="1" />
+			<acceleration_time max="10" />
+			<acceleration_time current="1" />
+			<deceleration_time min="1" />
+			<deceleration_time max="10" />
+			<deceleration_time current="1" />
+			<Positions>
+				<Position description="Position 1" min="5" max="20" current="10" />
+				<Position description="Position 2" min="10" max="40" current="20" />
+				<Position description="Position 3" min="15" max="60" current="30" />
+				<Position description="Position 4" min="20" max="80" current="40" />
+				<Position description="Position 5" min="25" max="100" current="50" />
+				<Position description="Position 6" min="30" max="120" current="60" />
+				<Position description="Position 7" min="35" max="140" current="70" />
+				<Position description="Position 8" min="40" max="160" current="80" />
+				<Position description="Position 9" min="45" max="180" current="90" />
+				<Position description="Position 10" min="50" max="200" current="100" />
+				<Position description="Position 11" min="55" max="220" current="110" />
+				<Position description="Position 12" min="60" max="240" current="120" />
+				<Position description="Position 13" min="65" max="260" current="130" />
+				<Position description="Position 14" min="70" max="280" current="140" />
+				<Position description="Position 15" min="75" max="300" current="150" />
+				<Position description="Position 16" min="80" max="320" current="160" />
+				<Position description="Position 17" min="85" max="340" current="170" />
+				<Position description="Position 18" min="90" max="360" current="180" />
+				<Position description="Position 19" min="95" max="380" current="190" />
+				<Position description="Position 20" min="100" max="400" current="200" />
+				<Position description="Position 21" min="105" max="420" current="210" />
+				<Position description="Position 22" min="110" max="440" current="220" />
+				<Position description="Position 23" min="115" max="460" current="230" />
+				<Position description="Position 24" min="120" max="480" current="240" />
+				<Position description="Position 25" min="125" max="500" current="250" />
+			</Positions>
+		</Axis>
+		<Axis id="5" number="M100-M5" description="Default_Axis5" start_address="ZR11200">
+			<jog_distance min="1" />
+			<jog_distance max="10" />
+			<jog_distance current="1" />
+			<manual_speed min="1" />
+			<manual_speed max="100" />
+			<manual_speed current="10" />
+			<auto_speed min="5" />
+			<auto_speed max="200" />
+			<auto_speed current="50" />
+			<acceleration_time min="1" />
+			<acceleration_time max="10" />
+			<acceleration_time current="1" />
+			<deceleration_time min="1" />
+			<deceleration_time max="10" />
+			<deceleration_time current="1" />
+			<Positions>
+				<Position description="Position 1" min="5" max="20" current="10" />
+				<Position description="Position 2" min="10" max="40" current="20" />
+				<Position description="Position 3" min="15" max="60" current="30" />
+				<Position description="Position 4" min="20" max="80" current="40" />
+				<Position description="Position 5" min="25" max="100" current="50" />
+				<Position description="Position 6" min="30" max="120" current="60" />
+				<Position description="Position 7" min="35" max="140" current="70" />
+				<Position description="Position 8" min="40" max="160" current="80" />
+				<Position description="Position 9" min="45" max="180" current="90" />
+				<Position description="Position 10" min="50" max="200" current="100" />
+				<Position description="Position 11" min="55" max="220" current="110" />
+				<Position description="Position 12" min="60" max="240" current="120" />
+				<Position description="Position 13" min="65" max="260" current="130" />
+				<Position description="Position 14" min="70" max="280" current="140" />
+				<Position description="Position 15" min="75" max="300" current="150" />
+				<Position description="Position 16" min="80" max="320" current="160" />
+				<Position description="Position 17" min="85" max="340" current="170" />
+				<Position description="Position 18" min="90" max="360" current="180" />
+				<Position description="Position 19" min="95" max="380" current="190" />
+				<Position description="Position 20" min="100" max="400" current="200" />
+				<Position description="Position 21" min="105" max="420" current="210" />
+				<Position description="Position 22" min="110" max="440" current="220" />
+				<Position description="Position 23" min="115" max="460" current="230" />
+				<Position description="Position 24" min="120" max="480" current="240" />
+				<Position description="Position 25" min="125" max="500" current="250" />
+			</Positions>
+		</Axis>
+		<Axis id="6" number="M100-M6" description="Default_Axis6" start_address="ZR11500">
+			<jog_distance min="1" />
+			<jog_distance max="10" />
+			<jog_distance current="1" />
+			<manual_speed min="1" />
+			<manual_speed max="100" />
+			<manual_speed current="10" />
+			<auto_speed min="5" />
+			<auto_speed max="200" />
+			<auto_speed current="50" />
+			<acceleration_time min="1" />
+			<acceleration_time max="10" />
+			<acceleration_time current="1" />
+			<deceleration_time min="1" />
+			<deceleration_time max="10" />
+			<deceleration_time current="1" />
+			<Positions>
+				<Position description="Position 1" min="5" max="20" current="10" />
+				<Position description="Position 2" min="10" max="40" current="20" />
+				<Position description="Position 3" min="15" max="60" current="30" />
+				<Position description="Position 4" min="20" max="80" current="40" />
+				<Position description="Position 5" min="25" max="100" current="50" />
+				<Position description="Position 6" min="30" max="120" current="60" />
+				<Position description="Position 7" min="35" max="140" current="70" />
+				<Position description="Position 8" min="40" max="160" current="80" />
+				<Position description="Position 9" min="45" max="180" current="90" />
+				<Position description="Position 10" min="50" max="200" current="100" />
+				<Position description="Position 11" min="55" max="220" current="110" />
+				<Position description="Position 12" min="60" max="240" current="120" />
+				<Position description="Position 13" min="65" max="260" current="130" />
+				<Position description="Position 14" min="70" max="280" current="140" />
+				<Position description="Position 15" min="75" max="300" current="150" />
+				<Position description="Position 16" min="80" max="320" current="160" />
+				<Position description="Position 17" min="85" max="340" current="170" />
+				<Position description="Position 18" min="90" max="360" current="180" />
+				<Position description="Position 19" min="95" max="380" current="190" />
+				<Position description="Position 20" min="100" max="400" current="200" />
+				<Position description="Position 21" min="105" max="420" current="210" />
+				<Position description="Position 22" min="110" max="440" current="220" />
+				<Position description="Position 23" min="115" max="460" current="230" />
+				<Position description="Position 24" min="120" max="480" current="240" />
+				<Position description="Position 25" min="125" max="500" current="250" />
+			</Positions>
+		</Axis>
+		<Axis id="7" number="M100-M7" description="Default_Axis7" start_address="ZR11800">
+			<jog_distance min="1" />
+			<jog_distance max="10" />
+			<jog_distance current="1" />
+			<manual_speed min="1" />
+			<manual_speed max="100" />
+			<manual_speed current="10" />
+			<auto_speed min="5" />
+			<auto_speed max="200" />
+			<auto_speed current="50" />
+			<acceleration_time min="1" />
+			<acceleration_time max="10" />
+			<acceleration_time current="1" />
+			<deceleration_time min="1" />
+			<deceleration_time max="10" />
+			<deceleration_time current="1" />
+			<Positions>
+				<Position description="Position 1" min="5" max="20" current="10" />
+				<Position description="Position 2" min="10" max="40" current="20" />
+				<Position description="Position 3" min="15" max="60" current="30" />
+				<Position description="Position 4" min="20" max="80" current="40" />
+				<Position description="Position 5" min="25" max="100" current="50" />
+				<Position description="Position 6" min="30" max="120" current="60" />
+				<Position description="Position 7" min="35" max="140" current="70" />
+				<Position description="Position 8" min="40" max="160" current="80" />
+				<Position description="Position 9" min="45" max="180" current="90" />
+				<Position description="Position 10" min="50" max="200" current="100" />
+				<Position description="Position 11" min="55" max="220" current="110" />
+				<Position description="Position 12" min="60" max="240" current="120" />
+				<Position description="Position 13" min="65" max="260" current="130" />
+				<Position description="Position 14" min="70" max="280" current="140" />
+				<Position description="Position 15" min="75" max="300" current="150" />
+				<Position description="Position 16" min="80" max="320" current="160" />
+				<Position description="Position 17" min="85" max="340" current="170" />
+				<Position description="Position 18" min="90" max="360" current="180" />
+				<Position description="Position 19" min="95" max="380" current="190" />
+				<Position description="Position 20" min="100" max="400" current="200" />
+				<Position description="Position 21" min="105" max="420" current="210" />
+				<Position description="Position 22" min="110" max="440" current="220" />
+				<Position description="Position 23" min="115" max="460" current="230" />
+				<Position description="Position 24" min="120" max="480" current="240" />
+				<Position description="Position 25" min="125" max="500" current="250" />
+			</Positions>
+		</Axis>
+		<Axis id="8" number="M100-M8" description="Default_Axis8" start_address="ZR12100">
+			<jog_distance min="1" />
+			<jog_distance max="10" />
+			<jog_distance current="1" />
+			<manual_speed min="1" />
+			<manual_speed max="100" />
+			<manual_speed current="10" />
+			<auto_speed min="5" />
+			<auto_speed max="200" />
+			<auto_speed current="50" />
+			<acceleration_time min="1" />
+			<acceleration_time max="10" />
+			<acceleration_time current="1" />
+			<deceleration_time min="1" />
+			<deceleration_time max="10" />
+			<deceleration_time current="1" />
+			<Positions>
+				<Position description="Position 1" min="5" max="20" current="10" />
+				<Position description="Position 2" min="10" max="40" current="20" />
+				<Position description="Position 3" min="15" max="60" current="30" />
+				<Position description="Position 4" min="20" max="80" current="40" />
+				<Position description="Position 5" min="25" max="100" current="50" />
+				<Position description="Position 6" min="30" max="120" current="60" />
+				<Position description="Position 7" min="35" max="140" current="70" />
+				<Position description="Position 8" min="40" max="160" current="80" />
+				<Position description="Position 9" min="45" max="180" current="90" />
+				<Position description="Position 10" min="50" max="200" current="100" />
+				<Position description="Position 11" min="55" max="220" current="110" />
+				<Position description="Position 12" min="60" max="240" current="120" />
+				<Position description="Position 13" min="65" max="260" current="130" />
+				<Position description="Position 14" min="70" max="280" current="140" />
+				<Position description="Position 15" min="75" max="300" current="150" />
+				<Position description="Position 16" min="80" max="320" current="160" />
+				<Position description="Position 17" min="85" max="340" current="170" />
+				<Position description="Position 18" min="90" max="360" current="180" />
+				<Position description="Position 19" min="95" max="380" current="190" />
+				<Position description="Position 20" min="100" max="400" current="200" />
+				<Position description="Position 21" min="105" max="420" current="210" />
+				<Position description="Position 22" min="110" max="440" current="220" />
+				<Position description="Position 23" min="115" max="460" current="230" />
+				<Position description="Position 24" min="120" max="480" current="240" />
+				<Position description="Position 25" min="125" max="500" current="250" />
+			</Positions>
+		</Axis>
+		<Axis id="9" number="M100-M9" description="Default_Axis9" start_address="ZR12400">
+			<jog_distance min="1" />
+			<jog_distance max="10" />
+			<jog_distance current="1" />
+			<manual_speed min="1" />
+			<manual_speed max="100" />
+			<manual_speed current="10" />
+			<auto_speed min="5" />
+			<auto_speed max="200" />
+			<auto_speed current="50" />
+			<acceleration_time min="1" />
+			<acceleration_time max="10" />
+			<acceleration_time current="1" />
+			<deceleration_time min="1" />
+			<deceleration_time max="10" />
+			<deceleration_time current="1" />
+			<Positions>
+				<Position description="Position 1" min="5" max="20" current="10" />
+				<Position description="Position 2" min="10" max="40" current="20" />
+				<Position description="Position 3" min="15" max="60" current="30" />
+				<Position description="Position 4" min="20" max="80" current="40" />
+				<Position description="Position 5" min="25" max="100" current="50" />
+				<Position description="Position 6" min="30" max="120" current="60" />
+				<Position description="Position 7" min="35" max="140" current="70" />
+				<Position description="Position 8" min="40" max="160" current="80" />
+				<Position description="Position 9" min="45" max="180" current="90" />
+				<Position description="Position 10" min="50" max="200" current="100" />
+				<Position description="Position 11" min="55" max="220" current="110" />
+				<Position description="Position 12" min="60" max="240" current="120" />
+				<Position description="Position 13" min="65" max="260" current="130" />
+				<Position description="Position 14" min="70" max="280" current="140" />
+				<Position description="Position 15" min="75" max="300" current="150" />
+				<Position description="Position 16" min="80" max="320" current="160" />
+				<Position description="Position 17" min="85" max="340" current="170" />
+				<Position description="Position 18" min="90" max="360" current="180" />
+				<Position description="Position 19" min="95" max="380" current="190" />
+				<Position description="Position 20" min="100" max="400" current="200" />
+				<Position description="Position 21" min="105" max="420" current="210" />
+				<Position description="Position 22" min="110" max="440" current="220" />
+				<Position description="Position 23" min="115" max="460" current="230" />
+				<Position description="Position 24" min="120" max="480" current="240" />
+				<Position description="Position 25" min="125" max="500" current="250" />
+			</Positions>
+		</Axis>
+		<Axis id="10" number="M100-M10" description="Default_Axis10" start_address="ZR12700">
+			<jog_distance min="1" />
+			<jog_distance max="10" />
+			<jog_distance current="1" />
+			<manual_speed min="1" />
+			<manual_speed max="100" />
+			<manual_speed current="10" />
+			<auto_speed min="5" />
+			<auto_speed max="200" />
+			<auto_speed current="50" />
+			<acceleration_time min="1" />
+			<acceleration_time max="10" />
+			<acceleration_time current="1" />
+			<deceleration_time min="1" />
+			<deceleration_time max="10" />
+			<deceleration_time current="1" />
+			<Positions>
+				<Position description="Position 1" min="5" max="20" current="10" />
+				<Position description="Position 2" min="10" max="40" current="20" />
+				<Position description="Position 3" min="15" max="60" current="30" />
+				<Position description="Position 4" min="20" max="80" current="40" />
+				<Position description="Position 5" min="25" max="100" current="50" />
+				<Position description="Position 6" min="30" max="120" current="60" />
+				<Position description="Position 7" min="35" max="140" current="70" />
+				<Position description="Position 8" min="40" max="160" current="80" />
+				<Position description="Position 9" min="45" max="180" current="90" />
+				<Position description="Position 10" min="50" max="200" current="100" />
+				<Position description="Position 11" min="55" max="220" current="110" />
+				<Position description="Position 12" min="60" max="240" current="120" />
+				<Position description="Position 13" min="65" max="260" current="130" />
+				<Position description="Position 14" min="70" max="280" current="140" />
+				<Position description="Position 15" min="75" max="300" current="150" />
+				<Position description="Position 16" min="80" max="320" current="160" />
+				<Position description="Position 17" min="85" max="340" current="170" />
+				<Position description="Position 18" min="90" max="360" current="180" />
+				<Position description="Position 19" min="95" max="380" current="190" />
+				<Position description="Position 20" min="100" max="400" current="200" />
+				<Position description="Position 21" min="105" max="420" current="210" />
+				<Position description="Position 22" min="110" max="440" current="220" />
+				<Position description="Position 23" min="115" max="460" current="230" />
+				<Position description="Position 24" min="120" max="480" current="240" />
+				<Position description="Position 25" min="125" max="500" current="250" />
+			</Positions>
+		</Axis>
+		<Axis id="11" number="M100-M11" description="Default_Axis11" start_address="ZR13000">
+			<jog_distance min="1" />
+			<jog_distance max="10" />
+			<jog_distance current="1" />
+			<manual_speed min="1" />
+			<manual_speed max="100" />
+			<manual_speed current="10" />
+			<auto_speed min="5" />
+			<auto_speed max="200" />
+			<auto_speed current="50" />
+			<acceleration_time min="1" />
+			<acceleration_time max="10" />
+			<acceleration_time current="1" />
+			<deceleration_time min="1" />
+			<deceleration_time max="10" />
+			<deceleration_time current="1" />
+			<Positions>
+				<Position description="Position 1" min="5" max="20" current="10" />
+				<Position description="Position 2" min="10" max="40" current="20" />
+				<Position description="Position 3" min="15" max="60" current="30" />
+				<Position description="Position 4" min="20" max="80" current="40" />
+				<Position description="Position 5" min="25" max="100" current="50" />
+				<Position description="Position 6" min="30" max="120" current="60" />
+				<Position description="Position 7" min="35" max="140" current="70" />
+				<Position description="Position 8" min="40" max="160" current="80" />
+				<Position description="Position 9" min="45" max="180" current="90" />
+				<Position description="Position 10" min="50" max="200" current="100" />
+				<Position description="Position 11" min="55" max="220" current="110" />
+				<Position description="Position 12" min="60" max="240" current="120" />
+				<Position description="Position 13" min="65" max="260" current="130" />
+				<Position description="Position 14" min="70" max="280" current="140" />
+				<Position description="Position 15" min="75" max="300" current="150" />
+				<Position description="Position 16" min="80" max="320" current="160" />
+				<Position description="Position 17" min="85" max="340" current="170" />
+				<Position description="Position 18" min="90" max="360" current="180" />
+				<Position description="Position 19" min="95" max="380" current="190" />
+				<Position description="Position 20" min="100" max="400" current="200" />
+				<Position description="Position 21" min="105" max="420" current="210" />
+				<Position description="Position 22" min="110" max="440" current="220" />
+				<Position description="Position 23" min="115" max="460" current="230" />
+				<Position description="Position 24" min="120" max="480" current="240" />
+				<Position description="Position 25" min="125" max="500" current="250" />
+			</Positions>
+		</Axis>
+		<Axis id="12" number="M100-M12" description="Default_Axis12" start_address="ZR13300">
+			<jog_distance min="1" />
+			<jog_distance max="10" />
+			<jog_distance current="1" />
+			<manual_speed min="1" />
+			<manual_speed max="100" />
+			<manual_speed current="10" />
+			<auto_speed min="5" />
+			<auto_speed max="200" />
+			<auto_speed current="50" />
+			<acceleration_time min="1" />
+			<acceleration_time max="10" />
+			<acceleration_time current="1" />
+			<deceleration_time min="1" />
+			<deceleration_time max="10" />
+			<deceleration_time current="1" />
+			<Positions>
+				<Position description="Position 1" min="5" max="20" current="10" />
+				<Position description="Position 2" min="10" max="40" current="20" />
+				<Position description="Position 3" min="15" max="60" current="30" />
+				<Position description="Position 4" min="20" max="80" current="40" />
+				<Position description="Position 5" min="25" max="100" current="50" />
+				<Position description="Position 6" min="30" max="120" current="60" />
+				<Position description="Position 7" min="35" max="140" current="70" />
+				<Position description="Position 8" min="40" max="160" current="80" />
+				<Position description="Position 9" min="45" max="180" current="90" />
+				<Position description="Position 10" min="50" max="200" current="100" />
+				<Position description="Position 11" min="55" max="220" current="110" />
+				<Position description="Position 12" min="60" max="240" current="120" />
+				<Position description="Position 13" min="65" max="260" current="130" />
+				<Position description="Position 14" min="70" max="280" current="140" />
+				<Position description="Position 15" min="75" max="300" current="150" />
+				<Position description="Position 16" min="80" max="320" current="160" />
+				<Position description="Position 17" min="85" max="340" current="170" />
+				<Position description="Position 18" min="90" max="360" current="180" />
+				<Position description="Position 19" min="95" max="380" current="190" />
+				<Position description="Position 20" min="100" max="400" current="200" />
+				<Position description="Position 21" min="105" max="420" current="210" />
+				<Position description="Position 22" min="110" max="440" current="220" />
+				<Position description="Position 23" min="115" max="460" current="230" />
+				<Position description="Position 24" min="120" max="480" current="240" />
+				<Position description="Position 25" min="125" max="500" current="250" />
+			</Positions>
+		</Axis>
+	</Axes>
+</Recipe>
diff --git a/SourceCode/Bond/x64/Debug/Res/Servo001_back.bmp b/SourceCode/Bond/x64/Debug/Res/Servo001_back.bmp
new file mode 100644
index 0000000..024cf3b
--- /dev/null
+++ b/SourceCode/Bond/x64/Debug/Res/Servo001_back.bmp
Binary files differ
diff --git a/SourceCode/Bond/x64/Debug/Res/TeminalMsg.html b/SourceCode/Bond/x64/Debug/Res/TeminalMsg.html
new file mode 100644
index 0000000..b50223c
--- /dev/null
+++ b/SourceCode/Bond/x64/Debug/Res/TeminalMsg.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<html class="">
+    <head>
+        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+        <meta http-equiv="X-UA-Compatible" content="IE=edge">
+        <meta name="referrer" content="always">
+        <title>瀹嬭瘝锛堜腑鍥芥枃瀛︼級_鐧惧害鐧剧</title>
+        <script>
+            window.onload = function() {
+                var body = document.body;
+                var computedStyle = window.getComputedStyle(body);
+                var backgroundColor = computedStyle.backgroundColor;
+                window.chrome.webview.postMessage("backgroundColor:" + backgroundColor.toString())
+            };
+            window.chrome.webview.addEventListener("message", (e) => {
+                document.getElementById("eap-msg").innerHTML = e.data;
+            })
+        </script>
+    </head>
+    <body style="background-color:#3d29a0;">
+        <h1 style="font-size:16px; color:#888888">鏉ヨ嚜EAP鐨勬秷鎭�</h1>
+        <div id="eap-msg" style="font-size:22px; color:#C8C8C8">ABCDEFG</div>
+    </body>
+</html>
\ No newline at end of file
diff --git a/SourceCode/Bond/x64/Debug/Res/close_white_24.ico b/SourceCode/Bond/x64/Debug/Res/close_white_24.ico
new file mode 100644
index 0000000..4224914
--- /dev/null
+++ b/SourceCode/Bond/x64/Debug/Res/close_white_24.ico
Binary files differ

--
Gitblit v1.9.3