diff --git a/.doc/CSM-Design.drawio b/.doc/CSM-Design.drawio
index 958c22c24..ae50916cf 100644
--- a/.doc/CSM-Design.drawio
+++ b/.doc/CSM-Design.drawio
@@ -40,13 +40,13 @@
-
+
-
+
-
+
@@ -73,13 +73,13 @@
-
+
-
+
-
+
@@ -94,13 +94,13 @@
-
+
-
+
-
+
@@ -127,13 +127,13 @@
-
+
-
+
-
+
@@ -148,13 +148,13 @@
-
+
-
+
-
+
diff --git a/.doc/Syntax.md b/.doc/Syntax.md
index 0daf4a97c..bc790bf78 100644
--- a/.doc/Syntax.md
+++ b/.doc/Syntax.md
@@ -21,6 +21,12 @@
// Register Source Module's status to Handler Module
Status@Source Module >> API@Handler Module ->
+ // Register Source Module's interrupt as status and link to Handler Module’s API
+ Interrupt@Source Module >> API@Handler Module ->
+
+ // Register Source Module's status as interrupt and link to Handler Module’s API
+ Status@Source Module >> API@Handler Module ->
+
// Unregister Source Module's status
Status@Source Module >> API@Handler Module ->
@@ -29,4 +35,5 @@
UI: Initialize // This initializes the UI
// Another comment line
+
```
\ No newline at end of file
diff --git a/.github/workflows/Build_VIPM_Library.yml b/.github/workflows/Build_VIPM_Library.yml
index 09de061da..96d65d599 100644
--- a/.github/workflows/Build_VIPM_Library.yml
+++ b/.github/workflows/Build_VIPM_Library.yml
@@ -6,6 +6,8 @@ name: Build_VIPM_Library
on:
# Triggers the workflow on push or pull request events but only for the main branch
push:
+ branches-ignore:
+ - '**testcase**'
paths-ignore:
- '**.md'
- '**.txt'
@@ -18,8 +20,8 @@ on:
- 'src/_TEST/**'
pull_request:
- branches:
- - main
+ branches-ignore:
+ - '**testcase**'
types: [closed]
paths-ignore:
- '**.md'
@@ -59,23 +61,24 @@ jobs:
with:
LabVIEW_Version: 2017
VipbPath: ${{ github.workspace }}
- timeout-minutes: 20
+ timeout-minutes: 30
continue-on-error: true
- name: Retry BuildDailyVIP if failed
+ id: retry-build-vip
if: ${{ steps.build-vip.outcome == 'failure' }}
uses: NEVSTOP-LAB/vipm-BuildViPackage@main
with:
LabVIEW_Version: 2017
VipbPath: ${{ github.workspace }}
- timeout-minutes: 20
+ timeout-minutes: 30
- name: Upload a Build Artifact
uses: actions/upload-artifact@v4.3.2
with:
# Artifact name
- name: ${{ steps.build-vip.outputs.vipName }}
- path: ${{ steps.build-vip.outputs.vipPathName }}
+ name: ${{ steps.retry-build-vip.outputs.vipName || steps.build-vip.outputs.vipName }}
+ path: ${{ steps.retry-build-vip.outputs.vipPathName || steps.build-vip.outputs.vipPathName }}
# The desired behavior if no files are found using the provided path.
if-no-files-found: warn
retention-days: 90
diff --git a/.github/workflows/Run Testcases.yml b/.github/workflows/Run Testcases.yml
index 746adbff9..d359d70c6 100644
--- a/.github/workflows/Run Testcases.yml
+++ b/.github/workflows/Run Testcases.yml
@@ -49,4 +49,4 @@ jobs:
LabVIEW_Version: 2017
Operation: StartVITester
Parameter1: ${{ github.workspace }}\Communicable State Machine(CSM).lvproj
- timeout-minutes: 10
+ timeout-minutes: 30
diff --git a/.gitignore b/.gitignore
index 1ff2cac78..d0b3dcdbc 100644
--- a/.gitignore
+++ b/.gitignore
@@ -8,4 +8,6 @@
/*.lvcsm
/.ignore
*.$*.bkp
+*.zip
+*.7z
/src/user.lib/_NEVSTOP/Communicable State Machine(CSM)/_popupMenuPlugin/_support/Default with Image/*
diff --git a/.markdownlint.json b/.markdownlint.json
index ec77d5180..738430faf 100644
--- a/.markdownlint.json
+++ b/.markdownlint.json
@@ -2,5 +2,9 @@
"MD033": false,
"MD013": false,
"MD032": false,
- "MD028": false
+ "MD028": false,
+ "MD024": false,
+ "MD007": false,
+ "MD022": false,
+ "MD040": false
}
\ No newline at end of file
diff --git a/.vscode/settings.json b/.vscode/settings.json
index 3d678c115..20bd9c6d7 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -1,19 +1,30 @@
{
"cSpell.words": [
"Cacher",
+ "cloneable",
"csmdoc",
"csmlog",
"CSMLS",
"CSMP",
"CSMQ",
+ "DQMH",
+ "ERRSTR",
"Evnt",
"Gevt",
"HEXSTR",
"lvclass",
+ "Massdata",
+ "modulename",
"ogtk",
+ "rcpacini",
"Refnum",
+ "SAFESTR",
"Splite",
+ "Stru",
"Struct",
+ "unregistration",
+ "Unwired",
"usecase"
- ]
+ ],
+ "files.autoGuessEncoding": true
}
\ No newline at end of file
diff --git a/CONTRIBUTING(zh-cn).md b/CONTRIBUTING(zh-cn).md
index ec17c3169..f803d0079 100644
--- a/CONTRIBUTING(zh-cn).md
+++ b/CONTRIBUTING(zh-cn).md
@@ -12,7 +12,7 @@
### :two: 代码开发
-请通过 PR 的方式,提交对于 CSM 框架的代码修改。请注意以下几点:
+请通过 PR 的方式,提交对于 CSM 框架的代码修改。请注意以下几点:
1. PR 需要关联某个 ISSUE,或者清晰描述 PR 的目的及修改内容。
2. 若修改内容与已有 ISSUE 无关,请先创建 ISSUE,再提交 PR。
@@ -29,7 +29,7 @@ CSM 的 Wiki 是一个开放的知识库,欢迎大家参与维护。你可以
## 鸣谢(Acknowledgement)
-感谢以下贡献者对 CSM 的贡献,排名按时间顺序:
+感谢以下贡献者对 CSM 的贡献,排名按时间顺序:
- @Leo452379([GitHub](https://github.com/Leo452379)) 参与CSM原型的设计和开发。
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 328a7e123..f99f8cc1c 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -61,4 +61,4 @@ Thanks to the following contributors for their contributions to CSM, in chronolo
- @基友湖渔夫([Zhihu](https://www.zhihu.com/people/heng-yi-56-31)) Proposed CSM Attributes requirements that were adopted.
-- @小橙子([Zhihu](https://www.zhihu.com/people/45-59-95-79)) Reported issues with CSM INI Variable Addon examples that were adopted.
\ No newline at end of file
+- @小橙子([Zhihu](https://www.zhihu.com/people/45-59-95-79)) Reported issues with CSM INI Variable Addon examples that were adopted.
diff --git a/Communicable State Machine(CSM).lvproj b/Communicable State Machine(CSM).lvproj
index e712bf03b..e7dd45791 100644
--- a/Communicable State Machine(CSM).lvproj
+++ b/Communicable State Machine(CSM).lvproj
@@ -23,9 +23,61 @@
true
true
false
- -
- true
- 0
+
-
+
-
+
-
+
-
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
-
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+
+
-
true
@@ -33,9 +85,6 @@
-
true
- -
- true
-
-
true
@@ -72,6 +121,22 @@
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -82,11 +147,14 @@
+ -
+ true
+
+
-
-
@@ -180,6 +248,24 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -463,18 +549,11 @@
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
@@ -496,9 +575,7 @@
-
-
-
+
-
-
@@ -546,26 +623,25 @@
csm-module(lvlibp).lvlibp
true
true
- ../src/Example/4. Advance Examples/8. CSM in lvlibp/lvlibp
- relativeToProject
+ /D
true
{A773672D-72C6-49FC-BE22-A7D7C7D3F661}
- 3
+ 4
1
csm-module(lvlibp).lvlibp
- ../src/Example/4. Advance Examples/8. CSM in lvlibp/lvlibp/csm-module(lvlibp).lvlibp
- relativeToProject
+ /D/csm-module(lvlibp).lvlibp
+ <none>
true
App
Support Directory
- ../src/Example/4. Advance Examples/8. CSM in lvlibp/lvlibp
- relativeToProject
+ /D
+ <none>
2
true
- {F882F0FD-80A5-4753-8517-441711B39D09}
+ {DB7E31B9-80A7-4C7A-BC27-A90EEF82D280}
Container
0
- /My Computer/Example/4. Advance Examples/8. CSM in lvlibp/Source Code/csm-module.lvlib
+
true
true
true
diff --git a/Communicable State Machine(CSM).vipb b/Communicable State Machine(CSM).vipb
index aeb241cbb..6c1c08137 100644
--- a/Communicable State Machine(CSM).vipb
+++ b/Communicable State Machine(CSM).vipb
@@ -1,7 +1,7 @@
-
+
NEVSTOP_lib_Communicable_State_Machine
- 2025.9.0.1
+ 2025.10.0.1
false
src
vip
@@ -69,7 +69,24 @@ For information on NEVSTOP-LAB, visit: <color=blue><u><i>https
[fix] #499 fix critical Error Occurred when csm module is built into lvlibp and ran asyncly.
[update] #504 do not use global variable as changing flag.
[update] #501 Use ErrString for Critical Error
-[update] Improve palette/doc
+[update] #545 ErrStr now support warning, which will be ignored and converted to empty string.
+[update] Improve palette/doc
+[fix] #533 CSM Attribute should be case insensitive.
+[fix] #535 Fix CSM Attribute TagDVR cache error
+[fix] #540 Fix "VI Reference" is not allowed in Chain Mode by default.
+[add] #543 add CSM - Resolve Module Name.vi to get module name from worker/chain node name
+[fix] #549 reset CSM - Module VI Reference.vi cache after topmost VI is restarted.
+[add] #552 Add "CSM - Drop Broadcast Registry.vi" to clear all registration relationships
+[fix] #560 #556 management API should work for worker mode and chain mode
+[update] #555 When CSM start to process Macro: Exit state, it will not process any message anymore.
+[add] #561 Add <Logger Thread Exit> log and show the number of logs left.
+[add] #520 Show call-chain of CSM module in "module created " log
+[fix] #548 fix CSM - Remove Module in Broadcast Registry.vi
+[fix] #557 fix remove internal registry rules for chain/worker
+[add] #596 add message log type for csm global log.
+[update] #498 SafeString now start with <SafeStr> argument type.
+[update] #461 Logviewer use queue of global log event.
+[add] #496 add script running function in debug console
@@ -80,7 +97,7 @@ For information on NEVSTOP-LAB, visit: <color=blue><u><i>https
false
true
-
+ <application>\examples
false
@@ -138,12 +155,6 @@ For information on NEVSTOP-LAB, visit: <color=blue><u><i>https
false
0
-
- Example
- 1
- false
- 0
-
templates
5
@@ -243,6 +254,7 @@ For information on NEVSTOP-LAB, visit: <color=blue><u><i>https
true
true
false
+ false
true
diff --git a/README(zh-cn).md b/README(zh-cn).md
index cc8483430..c35902635 100644
--- a/README(zh-cn).md
+++ b/README(zh-cn).md
@@ -6,7 +6,7 @@
[](https://www.vipm.io/package/nevstop_lib_communicable_state_machine/)
[](https://github.com/NEVSTOP-LAB/Communicable-State-Machine/releases)
-可通信状态机(CSM)是一个基于JKI状态机(JKISM)的LabVIEW应用框架。它遵循JKISM的设计模式,扩展了关键词以描述模块间的消息通信机制,包括同步消息、异步消息、状态订阅/取消订阅等关键概念——这些都是创建可重用代码模块不可或缺的要素。更多信息请访问CSM Wiki页面:
+可通信状态机(CSM)是一个基于JKI状态机(JKISM)的LabVIEW应用框架。它遵循JKISM的设计模式,扩展了关键词以描述模块间的消息通信机制,包括同步消息、异步消息、状态订阅/取消订阅等关键概念——这些都是创建可重用代码模块不可或缺的要素。更多信息请访问CSM Wiki页面:
- 了解更多关于 JKI State Machine(JKISM) 的信息,请访问:
- 了解更多关于 NEVSTOP-LAB 的信息,请访问:
@@ -17,10 +17,10 @@ _**CSM 函数面板**_

-CSM 代码模板介绍:
+CSM 代码模板介绍:
[English](src/help/NEVSTOP/Communicable%20State%20Machine(CSM)/Template%20Description(EN).md) | [中文](src/help/NEVSTOP/Communicable%20State%20Machine(CSM)/Template%20Description(zh-cn).md)
-CSM API 介绍:
+CSM API 介绍:
[English](src/help/NEVSTOP/Communicable%20State%20Machine(CSM)/VI%20Description(EN).md) | [中文](src/help/NEVSTOP/Communicable%20State%20Machine(CSM)/VI%20Description(zh-cn).md)
## 创建基于 CSM 的可重用模块
@@ -49,10 +49,10 @@ CSM API 介绍:
// 无应答异步调用示例
API: xxxx >> 参数 ->| TargetModule
- // 广播正常状态:
+ // 广播正常状态:
Status >> StatusArguments ->
- // 广播中断状态:
+ // 广播中断状态:
Interrupt >> StatusArguments ->
// 将源模块的状态注册到处理程序模块
@@ -67,7 +67,7 @@ CSM API 介绍:
// Another comment line
```
-更多语法信息请访问:[Syntax.md](https://github.com/NEVSTOP-LAB/Communicable-State-Machine/tree/main/.doc/Syntax.md)
+更多语法信息请访问: [Syntax.md](https://github.com/NEVSTOP-LAB/Communicable-State-Machine/tree/main/.doc/Syntax.md)
可参考示例 _**/Example/2. Caller is CSM Scenario**_。
diff --git a/src/API Tree.vi b/src/API Tree.vi
index 31c1e2d84..0f516f80d 100644
Binary files a/src/API Tree.vi and b/src/API Tree.vi differ
diff --git a/src/Example/0. Base Concepts/Arguments - Complex Data As Arguments.vi b/src/Example/0. Base Concepts/Arguments - Complex Data As Arguments.vi
deleted file mode 100644
index 67b48f3ea..000000000
Binary files a/src/Example/0. Base Concepts/Arguments - Complex Data As Arguments.vi and /dev/null differ
diff --git a/src/Example/0. Base Concepts/Arguments - Error As Arguments.vi b/src/Example/0. Base Concepts/Arguments - Error As Arguments.vi
deleted file mode 100644
index 20a061710..000000000
Binary files a/src/Example/0. Base Concepts/Arguments - Error As Arguments.vi and /dev/null differ
diff --git a/src/Example/0. Base Concepts/Arguments - Safe Arguments if it contains key words of CSM.vi b/src/Example/0. Base Concepts/Arguments - Safe Arguments if it contains key words of CSM.vi
deleted file mode 100644
index 1614c2588..000000000
Binary files a/src/Example/0. Base Concepts/Arguments - Safe Arguments if it contains key words of CSM.vi and /dev/null differ
diff --git a/src/Example/0. Base Concepts/CSM Data Type.vi b/src/Example/0. Base Concepts/CSM Data Type.vi
deleted file mode 100644
index 370c8bf80..000000000
Binary files a/src/Example/0. Base Concepts/CSM Data Type.vi and /dev/null differ
diff --git a/src/Example/0. Base Concepts/JKISM vs CSM.vi b/src/Example/0. Base Concepts/JKISM vs CSM.vi
deleted file mode 100644
index 94f642692..000000000
Binary files a/src/Example/0. Base Concepts/JKISM vs CSM.vi and /dev/null differ
diff --git a/src/Example/0. Base Concepts/Message Helper VI and Equivalent String.vi b/src/Example/0. Base Concepts/Message Helper VI and Equivalent String.vi
deleted file mode 100644
index 09e54628b..000000000
Binary files a/src/Example/0. Base Concepts/Message Helper VI and Equivalent String.vi and /dev/null differ
diff --git a/src/Example/0. Base Concepts/Module Attributes.vi b/src/Example/0. Base Concepts/Module Attributes.vi
deleted file mode 100644
index 8d3f9d013..000000000
Binary files a/src/Example/0. Base Concepts/Module Attributes.vi and /dev/null differ
diff --git a/src/Example/0. Base Concepts/Module Naming Rules.vi b/src/Example/0. Base Concepts/Module Naming Rules.vi
deleted file mode 100644
index c916496cf..000000000
Binary files a/src/Example/0. Base Concepts/Module Naming Rules.vi and /dev/null differ
diff --git a/src/Example/0. Base Concepts/System-Level Module.vi b/src/Example/0. Base Concepts/System-Level Module.vi
deleted file mode 100644
index 067c078e5..000000000
Binary files a/src/Example/0. Base Concepts/System-Level Module.vi and /dev/null differ
diff --git a/src/Example/1. Create a reuse Module/CSM Reuse Module.vi b/src/Example/1. Create a reuse Module/CSM Reuse Module.vi
deleted file mode 100644
index 5fee01402..000000000
Binary files a/src/Example/1. Create a reuse Module/CSM Reuse Module.vi and /dev/null differ
diff --git a/src/Example/2. Caller is CSM Scenario/CSM Example - Caller is a CSM.vi b/src/Example/2. Caller is CSM Scenario/CSM Example - Caller is a CSM.vi
deleted file mode 100644
index 40f89e9ea..000000000
Binary files a/src/Example/2. Caller is CSM Scenario/CSM Example - Caller is a CSM.vi and /dev/null differ
diff --git a/src/Example/3. Caller is Other Framework Scenario/CSM Example - Caller is NOT a CSM.vi b/src/Example/3. Caller is Other Framework Scenario/CSM Example - Caller is NOT a CSM.vi
deleted file mode 100644
index c8e473be0..000000000
Binary files a/src/Example/3. Caller is Other Framework Scenario/CSM Example - Caller is NOT a CSM.vi and /dev/null differ
diff --git a/src/Example/4. Advance Examples/1. Action Workers Example/Action Worker Mode Example.vi b/src/Example/4. Advance Examples/1. Action Workers Example/Action Worker Mode Example.vi
deleted file mode 100644
index a20e24ba3..000000000
Binary files a/src/Example/4. Advance Examples/1. Action Workers Example/Action Worker Mode Example.vi and /dev/null differ
diff --git a/src/Example/4. Advance Examples/1. Action Workers Example/Action Worker.vi b/src/Example/4. Advance Examples/1. Action Workers Example/Action Worker.vi
deleted file mode 100644
index 83b131aee..000000000
Binary files a/src/Example/4. Advance Examples/1. Action Workers Example/Action Worker.vi and /dev/null differ
diff --git a/src/Example/4. Advance Examples/2. Chain of Responsiblility Example/Chain of Responsiblility Example.vi b/src/Example/4. Advance Examples/2. Chain of Responsiblility Example/Chain of Responsiblility Example.vi
deleted file mode 100644
index 812e362de..000000000
Binary files a/src/Example/4. Advance Examples/2. Chain of Responsiblility Example/Chain of Responsiblility Example.vi and /dev/null differ
diff --git a/src/Example/4. Advance Examples/2. Chain of Responsiblility Example/ChainNode A.vi b/src/Example/4. Advance Examples/2. Chain of Responsiblility Example/ChainNode A.vi
deleted file mode 100644
index 62527b9b4..000000000
Binary files a/src/Example/4. Advance Examples/2. Chain of Responsiblility Example/ChainNode A.vi and /dev/null differ
diff --git a/src/Example/4. Advance Examples/2. Chain of Responsiblility Example/ChainNode B.vi b/src/Example/4. Advance Examples/2. Chain of Responsiblility Example/ChainNode B.vi
deleted file mode 100644
index 12bf2c516..000000000
Binary files a/src/Example/4. Advance Examples/2. Chain of Responsiblility Example/ChainNode B.vi and /dev/null differ
diff --git a/src/Example/4. Advance Examples/2. Chain of Responsiblility Example/ChainNode C.vi b/src/Example/4. Advance Examples/2. Chain of Responsiblility Example/ChainNode C.vi
deleted file mode 100644
index 89c4c99e1..000000000
Binary files a/src/Example/4. Advance Examples/2. Chain of Responsiblility Example/ChainNode C.vi and /dev/null differ
diff --git a/src/Example/4. Advance Examples/3. Build-in Error Handling Framework/Error Module.vi b/src/Example/4. Advance Examples/3. Build-in Error Handling Framework/Error Module.vi
deleted file mode 100644
index 4862d24eb..000000000
Binary files a/src/Example/4. Advance Examples/3. Build-in Error Handling Framework/Error Module.vi and /dev/null differ
diff --git a/src/Example/4. Advance Examples/3. Build-in Error Handling Framework/Topmost VI who Registers all Errors.vi b/src/Example/4. Advance Examples/3. Build-in Error Handling Framework/Topmost VI who Registers all Errors.vi
deleted file mode 100644
index 568b7c529..000000000
Binary files a/src/Example/4. Advance Examples/3. Build-in Error Handling Framework/Topmost VI who Registers all Errors.vi and /dev/null differ
diff --git a/src/Example/4. Advance Examples/4. Global Log Filter Example/Global Log Filter Example - Filter From Source(Event).vi b/src/Example/4. Advance Examples/4. Global Log Filter Example/Global Log Filter Example - Filter From Source(Event).vi
deleted file mode 100644
index d36796d5f..000000000
Binary files a/src/Example/4. Advance Examples/4. Global Log Filter Example/Global Log Filter Example - Filter From Source(Event).vi and /dev/null differ
diff --git a/src/Example/4. Advance Examples/4. Global Log Filter Example/Global Log Filter Example - Filter From Source(Queue).vi b/src/Example/4. Advance Examples/4. Global Log Filter Example/Global Log Filter Example - Filter From Source(Queue).vi
deleted file mode 100644
index 2f948484b..000000000
Binary files a/src/Example/4. Advance Examples/4. Global Log Filter Example/Global Log Filter Example - Filter From Source(Queue).vi and /dev/null differ
diff --git a/src/Example/4. Advance Examples/4. Global Log Filter Example/Global Log Filter Example - Filter From Subscriber(Event).vi b/src/Example/4. Advance Examples/4. Global Log Filter Example/Global Log Filter Example - Filter From Subscriber(Event).vi
deleted file mode 100644
index 4271085d8..000000000
Binary files a/src/Example/4. Advance Examples/4. Global Log Filter Example/Global Log Filter Example - Filter From Subscriber(Event).vi and /dev/null differ
diff --git a/src/Example/4. Advance Examples/4. Global Log Filter Example/Global Log Filter Example - Filter From Subscriber(Queue).vi b/src/Example/4. Advance Examples/4. Global Log Filter Example/Global Log Filter Example - Filter From Subscriber(Queue).vi
deleted file mode 100644
index f768c89df..000000000
Binary files a/src/Example/4. Advance Examples/4. Global Log Filter Example/Global Log Filter Example - Filter From Subscriber(Queue).vi and /dev/null differ
diff --git a/src/Example/4. Advance Examples/5. Multi-Loop Module Example/Main - Call and Monitor TCP Traffic.vi b/src/Example/4. Advance Examples/5. Multi-Loop Module Example/Main - Call and Monitor TCP Traffic.vi
deleted file mode 100644
index f1d62d679..000000000
Binary files a/src/Example/4. Advance Examples/5. Multi-Loop Module Example/Main - Call and Monitor TCP Traffic.vi and /dev/null differ
diff --git a/src/Example/4. Advance Examples/5. Multi-Loop Module Example/TCP Server Module(Multi-Loop Support).vi b/src/Example/4. Advance Examples/5. Multi-Loop Module Example/TCP Server Module(Multi-Loop Support).vi
deleted file mode 100644
index c8940be80..000000000
Binary files a/src/Example/4. Advance Examples/5. Multi-Loop Module Example/TCP Server Module(Multi-Loop Support).vi and /dev/null differ
diff --git a/src/Example/4. Advance Examples/6. Global Log Handling Capability/Global Log Handling Capability Example.vi b/src/Example/4. Advance Examples/6. Global Log Handling Capability/Global Log Handling Capability Example.vi
deleted file mode 100644
index db89d6c5b..000000000
Binary files a/src/Example/4. Advance Examples/6. Global Log Handling Capability/Global Log Handling Capability Example.vi and /dev/null differ
diff --git a/src/Example/4. Advance Examples/6. Global Log Handling Capability/Module to Generate Flood of Logs.vi b/src/Example/4. Advance Examples/6. Global Log Handling Capability/Module to Generate Flood of Logs.vi
deleted file mode 100644
index c6aaaab17..000000000
Binary files a/src/Example/4. Advance Examples/6. Global Log Handling Capability/Module to Generate Flood of Logs.vi and /dev/null differ
diff --git a/src/Example/4. Advance Examples/7. Register State as Status Example/Register State as Status Example.vi b/src/Example/4. Advance Examples/7. Register State as Status Example/Register State as Status Example.vi
deleted file mode 100644
index 6693d97f2..000000000
Binary files a/src/Example/4. Advance Examples/7. Register State as Status Example/Register State as Status Example.vi and /dev/null differ
diff --git a/src/Example/4. Advance Examples/7. Register State as Status Example/SubModule.vi b/src/Example/4. Advance Examples/7. Register State as Status Example/SubModule.vi
deleted file mode 100644
index 47067dff7..000000000
Binary files a/src/Example/4. Advance Examples/7. Register State as Status Example/SubModule.vi and /dev/null differ
diff --git a/src/Example/Addons - Logger/CSM Application Running Log Example.vi b/src/Example/Addons - Logger/CSM Application Running Log Example.vi
deleted file mode 100644
index 76de37915..000000000
Binary files a/src/Example/Addons - Logger/CSM Application Running Log Example.vi and /dev/null differ
diff --git a/src/Example/Addons - Loop Support/CSMLS - Continuous Loop in CSM Example.vi b/src/Example/Addons - Loop Support/CSMLS - Continuous Loop in CSM Example.vi
deleted file mode 100644
index d3d82600e..000000000
Binary files a/src/Example/Addons - Loop Support/CSMLS - Continuous Loop in CSM Example.vi and /dev/null differ
diff --git a/src/_TEST/Wrapper for all VIs.vi b/src/_TEST/Wrapper for all VIs.vi
index 6af8a187d..33e8f7aca 100644
Binary files a/src/_TEST/Wrapper for all VIs.vi and b/src/_TEST/Wrapper for all VIs.vi differ
diff --git a/src/_TEST/_backup_example/7. vs DQMH/My JKI State Machine Module.vi b/src/_TEST/_backup_example/7. vs DQMH/My JKI State Machine Module.vi
index d26cbd31f..229b361f5 100644
Binary files a/src/_TEST/_backup_example/7. vs DQMH/My JKI State Machine Module.vi and b/src/_TEST/_backup_example/7. vs DQMH/My JKI State Machine Module.vi differ
diff --git a/src/_TEST/_backup_example/7. vs DQMH/Test My JKI State Machine API.vi b/src/_TEST/_backup_example/7. vs DQMH/Test My JKI State Machine API.vi
index 4586792d0..f978b7713 100644
Binary files a/src/_TEST/_backup_example/7. vs DQMH/Test My JKI State Machine API.vi and b/src/_TEST/_backup_example/7. vs DQMH/Test My JKI State Machine API.vi differ
diff --git a/src/_TEST/_backup_example/Action Worker Mode Example(Sync).vi b/src/_TEST/_backup_example/Action Worker Mode Example(Sync).vi
index c2ec2958b..993211b23 100644
Binary files a/src/_TEST/_backup_example/Action Worker Mode Example(Sync).vi and b/src/_TEST/_backup_example/Action Worker Mode Example(Sync).vi differ
diff --git a/src/_TEST/_backup_example/CSM Example - As Message-Queue Framework.vi b/src/_TEST/_backup_example/CSM Example - As Message-Queue Framework.vi
index b5dee3e5d..ebec18bd2 100644
Binary files a/src/_TEST/_backup_example/CSM Example - As Message-Queue Framework.vi and b/src/_TEST/_backup_example/CSM Example - As Message-Queue Framework.vi differ
diff --git a/src/_TEST/_backup_example/CSM Example - State Machine Steps Executed on Sub-Module.vi b/src/_TEST/_backup_example/CSM Example - State Machine Steps Executed on Sub-Module.vi
index 5d25643a0..46ac01bc8 100644
Binary files a/src/_TEST/_backup_example/CSM Example - State Machine Steps Executed on Sub-Module.vi and b/src/_TEST/_backup_example/CSM Example - State Machine Steps Executed on Sub-Module.vi differ
diff --git a/src/_TEST/_backup_example/CSM Example - Top Main.vi b/src/_TEST/_backup_example/CSM Example - Top Main.vi
index e78c33729..ad620eceb 100644
Binary files a/src/_TEST/_backup_example/CSM Example - Top Main.vi and b/src/_TEST/_backup_example/CSM Example - Top Main.vi differ
diff --git a/src/_TEST/_backup_example/CSM Example - Worker Module.vi b/src/_TEST/_backup_example/CSM Example - Worker Module.vi
index c9d933200..a8ba600ba 100644
Binary files a/src/_TEST/_backup_example/CSM Example - Worker Module.vi and b/src/_TEST/_backup_example/CSM Example - Worker Module.vi differ
diff --git a/src/_TEST/_backup_example/Register Status Change Event/Register Dynamic Status Change Event.vi b/src/_TEST/_backup_example/Register Status Change Event/Register Dynamic Status Change Event.vi
index d663292e0..73a47f918 100644
Binary files a/src/_TEST/_backup_example/Register Status Change Event/Register Dynamic Status Change Event.vi and b/src/_TEST/_backup_example/Register Status Change Event/Register Dynamic Status Change Event.vi differ
diff --git a/src/_TEST/_backup_example/Register Status Change Event/Register Status Change Event.vi b/src/_TEST/_backup_example/Register Status Change Event/Register Status Change Event.vi
index 6a86edb0c..d0db178c2 100644
Binary files a/src/_TEST/_backup_example/Register Status Change Event/Register Status Change Event.vi and b/src/_TEST/_backup_example/Register Status Change Event/Register Status Change Event.vi differ
diff --git a/src/_TEST/_pipeline/#197-CSM-BUG/#197-Caller flow of async message.vi b/src/_TEST/_pipeline/#197-CSM-BUG/#197-Caller flow of async message.vi
deleted file mode 100644
index 944b84f05..000000000
Binary files a/src/_TEST/_pipeline/#197-CSM-BUG/#197-Caller flow of async message.vi and /dev/null differ
diff --git a/src/_TEST/_pipeline/#197-CSM-BUG/#197-Caller.vi b/src/_TEST/_pipeline/#197-CSM-BUG/#197-Caller.vi
deleted file mode 100644
index d4d6bb5e7..000000000
Binary files a/src/_TEST/_pipeline/#197-CSM-BUG/#197-Caller.vi and /dev/null differ
diff --git a/src/_TEST/_pipeline/#197-CSM-BUG/#197-Module.vi b/src/_TEST/_pipeline/#197-CSM-BUG/#197-Module.vi
deleted file mode 100644
index 37837effb..000000000
Binary files a/src/_TEST/_pipeline/#197-CSM-BUG/#197-Module.vi and /dev/null differ
diff --git a/src/_TEST/_pipeline/#197-CSM-BUG/197-Caller flow of async message.vi b/src/_TEST/_pipeline/#197-CSM-BUG/197-Caller flow of async message.vi
new file mode 100644
index 000000000..5d4648e58
Binary files /dev/null and b/src/_TEST/_pipeline/#197-CSM-BUG/197-Caller flow of async message.vi differ
diff --git a/src/_TEST/_pipeline/#197-CSM-BUG/197-Caller.vi b/src/_TEST/_pipeline/#197-CSM-BUG/197-Caller.vi
new file mode 100644
index 000000000..d0370a209
Binary files /dev/null and b/src/_TEST/_pipeline/#197-CSM-BUG/197-Caller.vi differ
diff --git a/src/_TEST/_pipeline/#197-CSM-BUG/197-Module.vi b/src/_TEST/_pipeline/#197-CSM-BUG/197-Module.vi
new file mode 100644
index 000000000..29247011d
Binary files /dev/null and b/src/_TEST/_pipeline/#197-CSM-BUG/197-Module.vi differ
diff --git a/src/_TEST/_pipeline/#199/#199-SyncMessages.vi b/src/_TEST/_pipeline/#199/#199-SyncMessages.vi
deleted file mode 100644
index 2153fc7db..000000000
Binary files a/src/_TEST/_pipeline/#199/#199-SyncMessages.vi and /dev/null differ
diff --git a/src/_TEST/_pipeline/#199/#199.vi b/src/_TEST/_pipeline/#199/#199.vi
deleted file mode 100644
index 383c0552b..000000000
Binary files a/src/_TEST/_pipeline/#199/#199.vi and /dev/null differ
diff --git a/src/_TEST/_pipeline/#199/199-SyncMessages.vi b/src/_TEST/_pipeline/#199/199-SyncMessages.vi
new file mode 100644
index 000000000..52494aa91
Binary files /dev/null and b/src/_TEST/_pipeline/#199/199-SyncMessages.vi differ
diff --git a/src/_TEST/_pipeline/#199/199.vi b/src/_TEST/_pipeline/#199/199.vi
new file mode 100644
index 000000000..bb497a685
Binary files /dev/null and b/src/_TEST/_pipeline/#199/199.vi differ
diff --git a/src/_TEST/_pipeline/#242/#242.vi b/src/_TEST/_pipeline/#242/#242.vi
deleted file mode 100644
index add12139c..000000000
Binary files a/src/_TEST/_pipeline/#242/#242.vi and /dev/null differ
diff --git a/src/_TEST/_pipeline/#242/242.vi b/src/_TEST/_pipeline/#242/242.vi
new file mode 100644
index 000000000..e2b650c15
Binary files /dev/null and b/src/_TEST/_pipeline/#242/242.vi differ
diff --git a/src/_TEST/_pipeline/#242/master242.vi b/src/_TEST/_pipeline/#242/master242.vi
index ae1ba83e9..412328121 100644
Binary files a/src/_TEST/_pipeline/#242/master242.vi and b/src/_TEST/_pipeline/#242/master242.vi differ
diff --git a/src/_TEST/_pipeline/#242/slave242.vi b/src/_TEST/_pipeline/#242/slave242.vi
index 192b0f308..faaaeb5dd 100644
Binary files a/src/_TEST/_pipeline/#242/slave242.vi and b/src/_TEST/_pipeline/#242/slave242.vi differ
diff --git a/src/_TEST/_pipeline/#291/#291(work with CSMLS - Continuous Loop in CSM Example.vi).vi b/src/_TEST/_pipeline/#291/#291(work with CSMLS - Continuous Loop in CSM Example.vi).vi
deleted file mode 100644
index 243ea0a8a..000000000
Binary files a/src/_TEST/_pipeline/#291/#291(work with CSMLS - Continuous Loop in CSM Example.vi).vi and /dev/null differ
diff --git a/src/_TEST/_pipeline/#291/291(work with CSMLS - Continuous Loop in CSM Example.vi).vi b/src/_TEST/_pipeline/#291/291(work with CSMLS - Continuous Loop in CSM Example.vi).vi
new file mode 100644
index 000000000..95183e93b
Binary files /dev/null and b/src/_TEST/_pipeline/#291/291(work with CSMLS - Continuous Loop in CSM Example.vi).vi differ
diff --git a/src/_TEST/_pipeline/#459/#459.vi b/src/_TEST/_pipeline/#459/#459.vi
deleted file mode 100644
index bdf9e50ac..000000000
Binary files a/src/_TEST/_pipeline/#459/#459.vi and /dev/null differ
diff --git a/src/_TEST/_pipeline/#459/459.vi b/src/_TEST/_pipeline/#459/459.vi
new file mode 100644
index 000000000..107f4e432
Binary files /dev/null and b/src/_TEST/_pipeline/#459/459.vi differ
diff --git a/src/_TEST/_pipeline/#479/Message Generator.vi b/src/_TEST/_pipeline/#479/Message Generator.vi
index 68d640493..3485ddbf7 100644
Binary files a/src/_TEST/_pipeline/#479/Message Generator.vi and b/src/_TEST/_pipeline/#479/Message Generator.vi differ
diff --git a/src/_TEST/_pipeline/Checking Allowed Message Example/CSM with allowed message list.vi b/src/_TEST/_pipeline/Checking Allowed Message Example/CSM with allowed message list.vi
index 1c9734424..91f44c772 100644
Binary files a/src/_TEST/_pipeline/Checking Allowed Message Example/CSM with allowed message list.vi and b/src/_TEST/_pipeline/Checking Allowed Message Example/CSM with allowed message list.vi differ
diff --git a/src/_TEST/_pipeline/Checking Allowed Message Example/Checking Allowed Message Example(CSM).vi b/src/_TEST/_pipeline/Checking Allowed Message Example/Checking Allowed Message Example(CSM).vi
index d509e6330..2b7b375ee 100644
Binary files a/src/_TEST/_pipeline/Checking Allowed Message Example/Checking Allowed Message Example(CSM).vi and b/src/_TEST/_pipeline/Checking Allowed Message Example/Checking Allowed Message Example(CSM).vi differ
diff --git a/src/_TEST/_pipeline/Worker Mode Status Example/Worker Mode Status Example.vi b/src/_TEST/_pipeline/Worker Mode Status Example/Worker Mode Status Example.vi
index 48d292989..54e3e060c 100644
Binary files a/src/_TEST/_pipeline/Worker Mode Status Example/Worker Mode Status Example.vi and b/src/_TEST/_pipeline/Worker Mode Status Example/Worker Mode Status Example.vi differ
diff --git a/src/_TEST/backup documentation 1.vi b/src/_TEST/backup documentation 1.vi
index 064023249..59fcee923 100644
Binary files a/src/_TEST/backup documentation 1.vi and b/src/_TEST/backup documentation 1.vi differ
diff --git a/src/_TEST/test register module.vi b/src/_TEST/test register module.vi
new file mode 100644
index 000000000..148d0e379
Binary files /dev/null and b/src/_TEST/test register module.vi differ
diff --git a/src/_obsolete/CSM - Debug Console - DebugTool(CSM).vi b/src/_obsolete/CSM - Debug Console - DebugTool(CSM).vi
deleted file mode 100644
index 63adbccb6..000000000
Binary files a/src/_obsolete/CSM - Debug Console - DebugTool(CSM).vi and /dev/null differ
diff --git a/src/_obsolete/CSM - Post Message(SimMode).vi b/src/_obsolete/CSM - Post Message(SimMode).vi
deleted file mode 100644
index 9c7e2d334..000000000
Binary files a/src/_obsolete/CSM - Post Message(SimMode).vi and /dev/null differ
diff --git a/src/_obsolete/CSM - Refesh More Template Palette.vi b/src/_obsolete/CSM - Refesh More Template Palette.vi
index e98827d81..c69d60139 100644
Binary files a/src/_obsolete/CSM - Refesh More Template Palette.vi and b/src/_obsolete/CSM - Refesh More Template Palette.vi differ
diff --git a/src/_obsolete/CSM - Running Log - DebugTool.2025.12.23.vi b/src/_obsolete/CSM - Running Log - DebugTool.2025.12.23.vi
new file mode 100644
index 000000000..83713da4b
Binary files /dev/null and b/src/_obsolete/CSM - Running Log - DebugTool.2025.12.23.vi differ
diff --git a/src/_obsolete/CSM - Send Message and Wait for Reply(SimMode).vi b/src/_obsolete/CSM - Send Message and Wait for Reply(SimMode).vi
deleted file mode 100644
index b54aa62b8..000000000
Binary files a/src/_obsolete/CSM - Send Message and Wait for Reply(SimMode).vi and /dev/null differ
diff --git a/src/_obsolete/CSM - State Dashboard - DebugTool.vi b/src/_obsolete/CSM - State Dashboard - DebugTool.vi
index 6a7e4a468..583078fc1 100644
Binary files a/src/_obsolete/CSM - State Dashboard - DebugTool.vi and b/src/_obsolete/CSM - State Dashboard - DebugTool.vi differ
diff --git a/src/_obsolete/CSM - State Table - DebugTool.vi b/src/_obsolete/CSM - State Table - DebugTool.vi
index 0fe799250..05c381133 100644
Binary files a/src/_obsolete/CSM - State Table - DebugTool.vi and b/src/_obsolete/CSM - State Table - DebugTool.vi differ
diff --git a/src/_obsolete/Command Editor Dialog _202503.vi b/src/_obsolete/Command Editor Dialog _202503.vi
index ff2e67940..6c13b7b3b 100644
Binary files a/src/_obsolete/Command Editor Dialog _202503.vi and b/src/_obsolete/Command Editor Dialog _202503.vi differ
diff --git a/src/_obsolete/_CSM Message Communication Panel.vi b/src/_obsolete/_CSM Message Communication Panel.vi
deleted file mode 100644
index 9e81c7317..000000000
Binary files a/src/_obsolete/_CSM Message Communication Panel.vi and /dev/null differ
diff --git a/src/_obsolete/_CSM Module Switcher.vi b/src/_obsolete/_CSM Module Switcher.vi
deleted file mode 100644
index c0f712482..000000000
Binary files a/src/_obsolete/_CSM Module Switcher.vi and /dev/null differ
diff --git a/src/_vipm/Pre-Build Custom Action.vi b/src/_vipm/Pre-Build Custom Action.vi
index 840df6ec3..83009b07f 100644
Binary files a/src/_vipm/Pre-Build Custom Action.vi and b/src/_vipm/Pre-Build Custom Action.vi differ
diff --git a/src/_vipm/Pre-Uninstall Custom Action.vi b/src/_vipm/Pre-Uninstall Custom Action.vi
index c9f8bef50..e0357ee73 100644
Binary files a/src/_vipm/Pre-Uninstall Custom Action.vi and b/src/_vipm/Pre-Uninstall Custom Action.vi differ
diff --git a/src/examples/NEVSTOP/Communicable State Machine(CSM)/0. Base Concepts/1. JKISM vs CSM.vi b/src/examples/NEVSTOP/Communicable State Machine(CSM)/0. Base Concepts/1. JKISM vs CSM.vi
new file mode 100644
index 000000000..0223006dc
Binary files /dev/null and b/src/examples/NEVSTOP/Communicable State Machine(CSM)/0. Base Concepts/1. JKISM vs CSM.vi differ
diff --git a/src/examples/NEVSTOP/Communicable State Machine(CSM)/0. Base Concepts/2. Module Naming Rules.vi b/src/examples/NEVSTOP/Communicable State Machine(CSM)/0. Base Concepts/2. Module Naming Rules.vi
new file mode 100644
index 000000000..f818e4543
Binary files /dev/null and b/src/examples/NEVSTOP/Communicable State Machine(CSM)/0. Base Concepts/2. Module Naming Rules.vi differ
diff --git a/src/examples/NEVSTOP/Communicable State Machine(CSM)/0. Base Concepts/3. Message Helper VI and Equivalent String.vi b/src/examples/NEVSTOP/Communicable State Machine(CSM)/0. Base Concepts/3. Message Helper VI and Equivalent String.vi
new file mode 100644
index 000000000..b1418f94f
Binary files /dev/null and b/src/examples/NEVSTOP/Communicable State Machine(CSM)/0. Base Concepts/3. Message Helper VI and Equivalent String.vi differ
diff --git a/src/examples/NEVSTOP/Communicable State Machine(CSM)/0. Base Concepts/4.1 Arguments - Complex Data As Arguments.vi b/src/examples/NEVSTOP/Communicable State Machine(CSM)/0. Base Concepts/4.1 Arguments - Complex Data As Arguments.vi
new file mode 100644
index 000000000..fad5d2c05
Binary files /dev/null and b/src/examples/NEVSTOP/Communicable State Machine(CSM)/0. Base Concepts/4.1 Arguments - Complex Data As Arguments.vi differ
diff --git a/src/examples/NEVSTOP/Communicable State Machine(CSM)/0. Base Concepts/4.2 Arguments - Error As Arguments.vi b/src/examples/NEVSTOP/Communicable State Machine(CSM)/0. Base Concepts/4.2 Arguments - Error As Arguments.vi
new file mode 100644
index 000000000..1bd719315
Binary files /dev/null and b/src/examples/NEVSTOP/Communicable State Machine(CSM)/0. Base Concepts/4.2 Arguments - Error As Arguments.vi differ
diff --git a/src/examples/NEVSTOP/Communicable State Machine(CSM)/0. Base Concepts/4.3 Arguments - Safe Arguments if it contains key words of CSM.vi b/src/examples/NEVSTOP/Communicable State Machine(CSM)/0. Base Concepts/4.3 Arguments - Safe Arguments if it contains key words of CSM.vi
new file mode 100644
index 000000000..08d72e437
Binary files /dev/null and b/src/examples/NEVSTOP/Communicable State Machine(CSM)/0. Base Concepts/4.3 Arguments - Safe Arguments if it contains key words of CSM.vi differ
diff --git a/src/examples/NEVSTOP/Communicable State Machine(CSM)/0. Base Concepts/5. CSM Data Type.vi b/src/examples/NEVSTOP/Communicable State Machine(CSM)/0. Base Concepts/5. CSM Data Type.vi
new file mode 100644
index 000000000..e1137ef8e
Binary files /dev/null and b/src/examples/NEVSTOP/Communicable State Machine(CSM)/0. Base Concepts/5. CSM Data Type.vi differ
diff --git a/src/examples/NEVSTOP/Communicable State Machine(CSM)/0. Base Concepts/6. Module Attributes.vi b/src/examples/NEVSTOP/Communicable State Machine(CSM)/0. Base Concepts/6. Module Attributes.vi
new file mode 100644
index 000000000..2c1bd7794
Binary files /dev/null and b/src/examples/NEVSTOP/Communicable State Machine(CSM)/0. Base Concepts/6. Module Attributes.vi differ
diff --git a/src/examples/NEVSTOP/Communicable State Machine(CSM)/0. Base Concepts/7. System-Level Module.vi b/src/examples/NEVSTOP/Communicable State Machine(CSM)/0. Base Concepts/7. System-Level Module.vi
new file mode 100644
index 000000000..54d6f6006
Binary files /dev/null and b/src/examples/NEVSTOP/Communicable State Machine(CSM)/0. Base Concepts/7. System-Level Module.vi differ
diff --git a/src/Example/1. Create a reuse Module/1. Create a reuse Module.lvlib b/src/examples/NEVSTOP/Communicable State Machine(CSM)/1. Create a reuse Module/1. Create a reuse Module.lvlib
similarity index 94%
rename from src/Example/1. Create a reuse Module/1. Create a reuse Module.lvlib
rename to src/examples/NEVSTOP/Communicable State Machine(CSM)/1. Create a reuse Module/1. Create a reuse Module.lvlib
index d429afe69..b6ba34dce 100644
--- a/src/Example/1. Create a reuse Module/1. Create a reuse Module.lvlib
+++ b/src/examples/NEVSTOP/Communicable State Machine(CSM)/1. Create a reuse Module/1. Create a reuse Module.lvlib
@@ -3,5 +3,6 @@
&Q#!!!!!!!)!"1!&!!!-!%!!!@````]!!!!"!!%!!!(]!!!*Q(C=\>7R=2MR%!81N=?"5X<A91P<!FNA#^M#5Y6M96NA"R[WM#WQ"<9A0ZYR'E?G!WPM1$AN>@S(!ZZQG&0%VLZ'@)H8:_X\<^P(^7@8H\4Y;"`NX\;8JZPUX@@MJXC]C.3I6K5S(F/^DHTE)R`ZS%@?]J;XP/5N<XH*3V\SEJ?]Z#F0?=J4HP+5<Y=]Z#%0/>+9@%QU"BU$D-YI-4[':XC':XB]D?%:HO%:HO(2*9:H?):H?)<(<4%]QT-]QT-]BNIEMRVSHO%R@$20]T20]T30+;.Z'K".VA:OAW"%O^B/GK>ZGM>J.%`T.%`T.)`,U4T.UTT.UTROW6;F.]XDE0-9*IKH?)KH?)L(U&%]R6-]R6-]JIPC+:[#+"/7Q2'CX&1[F#`&5TR_2@%54`%54`'YN$WBWF<GI8E==J\E3:\E3:\E-51E4`)E4`)EDW%D?:)H?:)H?5Q6S:-]S:-A;6,42RIMX:A[J3"Z`'S\*<?HV*MENS.C<>Z9GT,7:IOVC7*NDFA00><$D0719CV_L%7.N6CR&C(7(R=,(1M4;Z*9.T][RNXH46X62:X632X61?X6\H(L8_ZYP^`D>LP&^8K.S_53Z`-Z4K>4()`(/"Q/M>`P9\@<P<U'PDH?8AA`XUMPTP_EXOF`[8`Q<IT0]?OYVOA(5/(_Z!!!!!!
385908736
1.0.0.0
+ true
diff --git a/src/examples/NEVSTOP/Communicable State Machine(CSM)/1. Create a reuse Module/CSM Reuse Module.vi b/src/examples/NEVSTOP/Communicable State Machine(CSM)/1. Create a reuse Module/CSM Reuse Module.vi
new file mode 100644
index 000000000..c4ee8e589
Binary files /dev/null and b/src/examples/NEVSTOP/Communicable State Machine(CSM)/1. Create a reuse Module/CSM Reuse Module.vi differ
diff --git a/src/examples/NEVSTOP/Communicable State Machine(CSM)/2. Caller is CSM Scenario/CSM Example - Caller is a CSM.vi b/src/examples/NEVSTOP/Communicable State Machine(CSM)/2. Caller is CSM Scenario/CSM Example - Caller is a CSM.vi
new file mode 100644
index 000000000..d850c3a82
Binary files /dev/null and b/src/examples/NEVSTOP/Communicable State Machine(CSM)/2. Caller is CSM Scenario/CSM Example - Caller is a CSM.vi differ
diff --git a/src/examples/NEVSTOP/Communicable State Machine(CSM)/3. Caller is Other Framework Scenario/CSM Example - Caller is NOT a CSM.vi b/src/examples/NEVSTOP/Communicable State Machine(CSM)/3. Caller is Other Framework Scenario/CSM Example - Caller is NOT a CSM.vi
new file mode 100644
index 000000000..a62a504bd
Binary files /dev/null and b/src/examples/NEVSTOP/Communicable State Machine(CSM)/3. Caller is Other Framework Scenario/CSM Example - Caller is NOT a CSM.vi differ
diff --git a/src/Example/4. Advance Examples/1. Action Workers Example/Action Worker Mode Example.lvlib b/src/examples/NEVSTOP/Communicable State Machine(CSM)/4. Advance Examples/1. Action Workers Example/Action Worker Mode Example.lvlib
similarity index 89%
rename from src/Example/4. Advance Examples/1. Action Workers Example/Action Worker Mode Example.lvlib
rename to src/examples/NEVSTOP/Communicable State Machine(CSM)/4. Advance Examples/1. Action Workers Example/Action Worker Mode Example.lvlib
index 09a28c678..1a19caebc 100644
--- a/src/Example/4. Advance Examples/1. Action Workers Example/Action Worker Mode Example.lvlib
+++ b/src/examples/NEVSTOP/Communicable State Machine(CSM)/4. Advance Examples/1. Action Workers Example/Action Worker Mode Example.lvlib
@@ -3,8 +3,9 @@
&Q#!!!!!!!)!"1!&!!!-!%!!!@````]!!!!"!!%!!!(]!!!*Q(C=\>8"<2MR%!813:!!O;K$1#V-#WJ",5Q,OPKI&K9&N;!7JA7VI";=JQVBZ"4F%#-ZG/O26X_ZZ$/87%>M\6P%FXB^VL\_NHV=@X<^39O0^N(_<8NZOEH@@=^_CM?,3)VK63LD->8LS%=_]J'0@/1N<XH,7^\SFJ?]Z#5P?=F,HP+5JTTF+5`Z>MB$(P+1)YX*RU2DU$(![)Q3YW.YBG>YBM@8'*\B':\B'2Z>9HC':XC':XD=&M-T0--T0-.DK%USWS(H'2\$2`-U4`-U4`/9-JKH!>JE<?!W#%;UC_WE?:KH?:R']T20]T20]\A=T>-]T>-]T?/7<66[UTQ//9^BIHC+JXC+JXA-(=640-640-6DOCC?YCG)-G%:(#(+4;6$_6)]R?.8&%`R&%`R&)^,WR/K<75?GM=BZUG?Z%G?Z%E?1U4S*%`S*%`S'$;3*XG3*XG3RV320-G40!G3*D6^J-(3D;F4#J,(T\:<=HN+P5FS/S,7ZIWV+7.NNFC<+.<GC0819TX-7!]JVO,(7N29CR6L%7,^=<(1M4#R*IFV][.DX(X?V&6>V&G>V&%>V&\N(L@_Z9\X_TVONVN=L^?Y8#ZR0J`D>$L&]8C-Q_%1_`U_>LP>WWPAO_0NB@$TP@4C`%`KH@[8`A@PRPA=PYZLD8Y![_ML^!!!!!!
385908736
1.0.0.0
+ true
-
-
+
-
diff --git a/src/examples/NEVSTOP/Communicable State Machine(CSM)/4. Advance Examples/1. Action Workers Example/Action Worker Mode Example.vi b/src/examples/NEVSTOP/Communicable State Machine(CSM)/4. Advance Examples/1. Action Workers Example/Action Worker Mode Example.vi
new file mode 100644
index 000000000..146c1643f
Binary files /dev/null and b/src/examples/NEVSTOP/Communicable State Machine(CSM)/4. Advance Examples/1. Action Workers Example/Action Worker Mode Example.vi differ
diff --git a/src/examples/NEVSTOP/Communicable State Machine(CSM)/4. Advance Examples/1. Action Workers Example/SubModules/Action Worker.vi b/src/examples/NEVSTOP/Communicable State Machine(CSM)/4. Advance Examples/1. Action Workers Example/SubModules/Action Worker.vi
new file mode 100644
index 000000000..6b3d500a3
Binary files /dev/null and b/src/examples/NEVSTOP/Communicable State Machine(CSM)/4. Advance Examples/1. Action Workers Example/SubModules/Action Worker.vi differ
diff --git a/src/Example/4. Advance Examples/2. Chain of Responsiblility Example/Chain of Responsiblility Example.lvlib b/src/examples/NEVSTOP/Communicable State Machine(CSM)/4. Advance Examples/2. Chain of Responsiblility Example/Chain of Responsibility Example.lvlib
similarity index 75%
rename from src/Example/4. Advance Examples/2. Chain of Responsiblility Example/Chain of Responsiblility Example.lvlib
rename to src/examples/NEVSTOP/Communicable State Machine(CSM)/4. Advance Examples/2. Chain of Responsiblility Example/Chain of Responsibility Example.lvlib
index 7437e30a0..645b5ba3f 100644
--- a/src/Example/4. Advance Examples/2. Chain of Responsiblility Example/Chain of Responsiblility Example.lvlib
+++ b/src/examples/NEVSTOP/Communicable State Machine(CSM)/4. Advance Examples/2. Chain of Responsiblility Example/Chain of Responsibility Example.lvlib
@@ -3,12 +3,13 @@
&Q#!!!!!!!)!"1!&!!!-!%!!!@````]!!!!"!!%!!!(]!!!*Q(C=\>7R=2MR%!81N=?"5X<A91M</W-,<'&<9+K1,7Q,<)%N<!NMA3X)DW?-RJ(JQ"I\%%Z,(@`BA#==ZB3RN;]28_,V7@P_W`:R`>HV*SU_WE@\N_XF[3:^^TX\+2YP)D7K6;G-RV3P)R`ZS%=_]J'XP/5N<XH,7V\SEJ?]Z#5P?=J4HP+5JTTFWS%0?=B$DD1G(R/.1==!IT.+D)`B':\B'2Z@9XC':XC':XBUC?%:HO%:HO&R7QT0]!T0]!S0I4<*<)?=:XA-(]X40-X40-VDSGC?"GC4N9(<)"D2,L;4ZGG?ZH%;T>-]T>-]T?.S.%`T.%`T.)^<NF8J4@-YZ$S'C?)JHO)JHO)R>"20]220]230[;*YCK=ASI2F=)1I.Z5/Z5PR&)^@54T&5TT&5TQO<5_INJ6Z;"[(H#>ZEC>ZEC>Z$"(*ETT*ETT*9^B)HO2*HO2*(F.&]C20]C2)GN4UE1:,.[:/+5A?0^NOS?UJ^3<*\9B9GT@7JISVW7*NIFC<)^:$D`5Q9TWE7)M@;V&D,6;M29DVR]6#R],%GC47T9_/=@>Z5V>V57>V5E>V5(OV?^T[FTP?\`?YX7ZRP6\D=LH%_8S/U_E5R_-R$I>$\0@\W/VW<[_"<Y[X&],0^^+,]T_J>`J@_B_]'_.T`$KO.@I"O[^NF!!!!!!
385908736
1.0.0.0
+ true
-
-
-
-
+
+
+
-
-
+
diff --git a/src/examples/NEVSTOP/Communicable State Machine(CSM)/4. Advance Examples/2. Chain of Responsiblility Example/Chain of Responsibility Example.vi b/src/examples/NEVSTOP/Communicable State Machine(CSM)/4. Advance Examples/2. Chain of Responsiblility Example/Chain of Responsibility Example.vi
new file mode 100644
index 000000000..a4e44b17e
Binary files /dev/null and b/src/examples/NEVSTOP/Communicable State Machine(CSM)/4. Advance Examples/2. Chain of Responsiblility Example/Chain of Responsibility Example.vi differ
diff --git a/src/examples/NEVSTOP/Communicable State Machine(CSM)/4. Advance Examples/2. Chain of Responsiblility Example/SubModules/ChainNode A.vi b/src/examples/NEVSTOP/Communicable State Machine(CSM)/4. Advance Examples/2. Chain of Responsiblility Example/SubModules/ChainNode A.vi
new file mode 100644
index 000000000..5c97ff694
Binary files /dev/null and b/src/examples/NEVSTOP/Communicable State Machine(CSM)/4. Advance Examples/2. Chain of Responsiblility Example/SubModules/ChainNode A.vi differ
diff --git a/src/examples/NEVSTOP/Communicable State Machine(CSM)/4. Advance Examples/2. Chain of Responsiblility Example/SubModules/ChainNode B.vi b/src/examples/NEVSTOP/Communicable State Machine(CSM)/4. Advance Examples/2. Chain of Responsiblility Example/SubModules/ChainNode B.vi
new file mode 100644
index 000000000..1063d3382
Binary files /dev/null and b/src/examples/NEVSTOP/Communicable State Machine(CSM)/4. Advance Examples/2. Chain of Responsiblility Example/SubModules/ChainNode B.vi differ
diff --git a/src/examples/NEVSTOP/Communicable State Machine(CSM)/4. Advance Examples/2. Chain of Responsiblility Example/SubModules/ChainNode C.vi b/src/examples/NEVSTOP/Communicable State Machine(CSM)/4. Advance Examples/2. Chain of Responsiblility Example/SubModules/ChainNode C.vi
new file mode 100644
index 000000000..f8e0f8bc3
Binary files /dev/null and b/src/examples/NEVSTOP/Communicable State Machine(CSM)/4. Advance Examples/2. Chain of Responsiblility Example/SubModules/ChainNode C.vi differ
diff --git a/src/Example/4. Advance Examples/3. Build-in Error Handling Framework/Build-in Error Handling Framework.lvlib b/src/examples/NEVSTOP/Communicable State Machine(CSM)/4. Advance Examples/3. Build-in Error Handling Framework/Build-in Error Handling Framework.lvlib
similarity index 94%
rename from src/Example/4. Advance Examples/3. Build-in Error Handling Framework/Build-in Error Handling Framework.lvlib
rename to src/examples/NEVSTOP/Communicable State Machine(CSM)/4. Advance Examples/3. Build-in Error Handling Framework/Build-in Error Handling Framework.lvlib
index 4f068f95a..3154f6896 100644
--- a/src/Example/4. Advance Examples/3. Build-in Error Handling Framework/Build-in Error Handling Framework.lvlib
+++ b/src/examples/NEVSTOP/Communicable State Machine(CSM)/4. Advance Examples/3. Build-in Error Handling Framework/Build-in Error Handling Framework.lvlib
@@ -5,7 +5,7 @@
1.0.0.0
true
-
-
+
-
diff --git a/src/examples/NEVSTOP/Communicable State Machine(CSM)/4. Advance Examples/3. Build-in Error Handling Framework/SubModules/Error Module.vi b/src/examples/NEVSTOP/Communicable State Machine(CSM)/4. Advance Examples/3. Build-in Error Handling Framework/SubModules/Error Module.vi
new file mode 100644
index 000000000..ef061f710
Binary files /dev/null and b/src/examples/NEVSTOP/Communicable State Machine(CSM)/4. Advance Examples/3. Build-in Error Handling Framework/SubModules/Error Module.vi differ
diff --git a/src/examples/NEVSTOP/Communicable State Machine(CSM)/4. Advance Examples/3. Build-in Error Handling Framework/Topmost VI who Registers all Errors.vi b/src/examples/NEVSTOP/Communicable State Machine(CSM)/4. Advance Examples/3. Build-in Error Handling Framework/Topmost VI who Registers all Errors.vi
new file mode 100644
index 000000000..d116fb9cb
Binary files /dev/null and b/src/examples/NEVSTOP/Communicable State Machine(CSM)/4. Advance Examples/3. Build-in Error Handling Framework/Topmost VI who Registers all Errors.vi differ
diff --git a/src/examples/NEVSTOP/Communicable State Machine(CSM)/4. Advance Examples/4. Global Log Filter Example/CSM Global Log Filter Example.lvlib b/src/examples/NEVSTOP/Communicable State Machine(CSM)/4. Advance Examples/4. Global Log Filter Example/CSM Global Log Filter Example.lvlib
new file mode 100644
index 000000000..728e1728a
--- /dev/null
+++ b/src/examples/NEVSTOP/Communicable State Machine(CSM)/4. Advance Examples/4. Global Log Filter Example/CSM Global Log Filter Example.lvlib
@@ -0,0 +1,11 @@
+
+
+ &Q#!!!!!!!)!"1!&!!!-!%!!!@````]!!!!"!!%!!!(]!!!*Q(C=\>8"=>MQ%!8143;(8.6"2CVM#WJ",7Q,SN&(N<!NK!7VM#WI"<8A0$%94UZ2$P%E"Y.?G@I%A7=11U>M\7P%FXB^VL\`NHV=@X<^39O0^N(_<8NZOEH@@=^_CM?,3)VK63LD->8LS%=_]J'0@/1N<XH,7^\SFJ?]Z#5P?=F,HP+5JTTF+5`Z>MB$(P+1)YX*RU2DU$(![)Q3YW.YBG>YBM@8'*\B':\B'2Z>9HC':XC':XD=&M-T0--T0-.DK%USWS(H'2\$2`-U4`-U4`/9-JKH!>JE<?!W#%;UC_WE?:KH?:R']T20]T20]\A=T>-]T>-]T?/7<66[UTQ//9^BIHC+JXC+JXA-(=640-640-6DOCC?YCG)-G%:(#(+4;6$_6)]R?.8&%`R&%`R&)^,WR/K<75?GM=BZUG?Z%G?Z%E?1U4S*%`S*%`S'$;3*XG3*XG3RV320-G40!G3*D6^J-(3D;F4#J,(T\:<=HN+P5FS/S,7ZIWV+7.NNFC<+.<GC0819TX-7!]JVO,(7N29CR6L%7,^=<(1M4#R*IFV][.DX(X?V&6>V&G>V&%>V&\N(L@_Z9\X_TVONVN=L^?Y8#ZR0J`D>$L&]8C-Q_%1_`U_>LP>WWPAG_0NB@$TP@4C`%`KH@[8`A@PRPA=PYZLD8Y!#/7SO!!!!!!
+ 385908736
+ 1.0.0.0
+ true
+
+
+
+
+
diff --git a/src/examples/NEVSTOP/Communicable State Machine(CSM)/4. Advance Examples/4. Global Log Filter Example/Filter From Source(Event).vi b/src/examples/NEVSTOP/Communicable State Machine(CSM)/4. Advance Examples/4. Global Log Filter Example/Filter From Source(Event).vi
new file mode 100644
index 000000000..a6819078a
Binary files /dev/null and b/src/examples/NEVSTOP/Communicable State Machine(CSM)/4. Advance Examples/4. Global Log Filter Example/Filter From Source(Event).vi differ
diff --git a/src/examples/NEVSTOP/Communicable State Machine(CSM)/4. Advance Examples/4. Global Log Filter Example/Filter From Source(Queue).vi b/src/examples/NEVSTOP/Communicable State Machine(CSM)/4. Advance Examples/4. Global Log Filter Example/Filter From Source(Queue).vi
new file mode 100644
index 000000000..c25cd338d
Binary files /dev/null and b/src/examples/NEVSTOP/Communicable State Machine(CSM)/4. Advance Examples/4. Global Log Filter Example/Filter From Source(Queue).vi differ
diff --git a/src/examples/NEVSTOP/Communicable State Machine(CSM)/4. Advance Examples/4. Global Log Filter Example/Filter From Subscriber(Event).vi b/src/examples/NEVSTOP/Communicable State Machine(CSM)/4. Advance Examples/4. Global Log Filter Example/Filter From Subscriber(Event).vi
new file mode 100644
index 000000000..a72bf3e54
Binary files /dev/null and b/src/examples/NEVSTOP/Communicable State Machine(CSM)/4. Advance Examples/4. Global Log Filter Example/Filter From Subscriber(Event).vi differ
diff --git a/src/examples/NEVSTOP/Communicable State Machine(CSM)/4. Advance Examples/4. Global Log Filter Example/Filter From Subscriber(Queue).vi b/src/examples/NEVSTOP/Communicable State Machine(CSM)/4. Advance Examples/4. Global Log Filter Example/Filter From Subscriber(Queue).vi
new file mode 100644
index 000000000..7efccb5d6
Binary files /dev/null and b/src/examples/NEVSTOP/Communicable State Machine(CSM)/4. Advance Examples/4. Global Log Filter Example/Filter From Subscriber(Queue).vi differ
diff --git a/src/examples/NEVSTOP/Communicable State Machine(CSM)/4. Advance Examples/5. Multi-Loop Module Example/Main - Call and Monitor TCP Traffic.vi b/src/examples/NEVSTOP/Communicable State Machine(CSM)/4. Advance Examples/5. Multi-Loop Module Example/Main - Call and Monitor TCP Traffic.vi
new file mode 100644
index 000000000..c026cf85c
Binary files /dev/null and b/src/examples/NEVSTOP/Communicable State Machine(CSM)/4. Advance Examples/5. Multi-Loop Module Example/Main - Call and Monitor TCP Traffic.vi differ
diff --git a/src/Example/4. Advance Examples/5. Multi-Loop Module Example/Multi-Loop Module Example.lvlib b/src/examples/NEVSTOP/Communicable State Machine(CSM)/4. Advance Examples/5. Multi-Loop Module Example/Multi-Loop Module Example.lvlib
similarity index 100%
rename from src/Example/4. Advance Examples/5. Multi-Loop Module Example/Multi-Loop Module Example.lvlib
rename to src/examples/NEVSTOP/Communicable State Machine(CSM)/4. Advance Examples/5. Multi-Loop Module Example/Multi-Loop Module Example.lvlib
diff --git a/src/Example/4. Advance Examples/5. Multi-Loop Module Example/Simple TCP - Client.vi b/src/examples/NEVSTOP/Communicable State Machine(CSM)/4. Advance Examples/5. Multi-Loop Module Example/Simple TCP - Client.vi
similarity index 83%
rename from src/Example/4. Advance Examples/5. Multi-Loop Module Example/Simple TCP - Client.vi
rename to src/examples/NEVSTOP/Communicable State Machine(CSM)/4. Advance Examples/5. Multi-Loop Module Example/Simple TCP - Client.vi
index e1785f034..fbee43762 100644
Binary files a/src/Example/4. Advance Examples/5. Multi-Loop Module Example/Simple TCP - Client.vi and b/src/examples/NEVSTOP/Communicable State Machine(CSM)/4. Advance Examples/5. Multi-Loop Module Example/Simple TCP - Client.vi differ
diff --git a/src/examples/NEVSTOP/Communicable State Machine(CSM)/4. Advance Examples/5. Multi-Loop Module Example/TCP Server Module(Multi-Loop Support).vi b/src/examples/NEVSTOP/Communicable State Machine(CSM)/4. Advance Examples/5. Multi-Loop Module Example/TCP Server Module(Multi-Loop Support).vi
new file mode 100644
index 000000000..91a4f68da
Binary files /dev/null and b/src/examples/NEVSTOP/Communicable State Machine(CSM)/4. Advance Examples/5. Multi-Loop Module Example/TCP Server Module(Multi-Loop Support).vi differ
diff --git a/src/Example/4. Advance Examples/5. Multi-Loop Module Example/_Clear Network 56 Error.vi b/src/examples/NEVSTOP/Communicable State Machine(CSM)/4. Advance Examples/5. Multi-Loop Module Example/_Clear Network 56 Error.vi
similarity index 100%
rename from src/Example/4. Advance Examples/5. Multi-Loop Module Example/_Clear Network 56 Error.vi
rename to src/examples/NEVSTOP/Communicable State Machine(CSM)/4. Advance Examples/5. Multi-Loop Module Example/_Clear Network 56 Error.vi
diff --git a/src/Example/4. Advance Examples/6. Global Log Handling Capability/Global Log Handling Capability Example.lvlib b/src/examples/NEVSTOP/Communicable State Machine(CSM)/4. Advance Examples/6. Global Log Handling Capability/Global Log Handling Capability Example.lvlib
similarity index 96%
rename from src/Example/4. Advance Examples/6. Global Log Handling Capability/Global Log Handling Capability Example.lvlib
rename to src/examples/NEVSTOP/Communicable State Machine(CSM)/4. Advance Examples/6. Global Log Handling Capability/Global Log Handling Capability Example.lvlib
index 29b112870..8d35180f1 100644
--- a/src/Example/4. Advance Examples/6. Global Log Handling Capability/Global Log Handling Capability Example.lvlib
+++ b/src/examples/NEVSTOP/Communicable State Machine(CSM)/4. Advance Examples/6. Global Log Handling Capability/Global Log Handling Capability Example.lvlib
@@ -5,7 +5,7 @@
1.0.0.0
true
-
-
+
-
diff --git a/src/examples/NEVSTOP/Communicable State Machine(CSM)/4. Advance Examples/6. Global Log Handling Capability/Global Log Handling Capability Example.vi b/src/examples/NEVSTOP/Communicable State Machine(CSM)/4. Advance Examples/6. Global Log Handling Capability/Global Log Handling Capability Example.vi
new file mode 100644
index 000000000..be9f19d73
Binary files /dev/null and b/src/examples/NEVSTOP/Communicable State Machine(CSM)/4. Advance Examples/6. Global Log Handling Capability/Global Log Handling Capability Example.vi differ
diff --git a/src/examples/NEVSTOP/Communicable State Machine(CSM)/4. Advance Examples/6. Global Log Handling Capability/SubModules/Module to Generate Flood of Logs.vi b/src/examples/NEVSTOP/Communicable State Machine(CSM)/4. Advance Examples/6. Global Log Handling Capability/SubModules/Module to Generate Flood of Logs.vi
new file mode 100644
index 000000000..65f8d8ee0
Binary files /dev/null and b/src/examples/NEVSTOP/Communicable State Machine(CSM)/4. Advance Examples/6. Global Log Handling Capability/SubModules/Module to Generate Flood of Logs.vi differ
diff --git a/src/Example/4. Advance Examples/7. Register State as Status Example/Register State as Status Example.lvlib b/src/examples/NEVSTOP/Communicable State Machine(CSM)/4. Advance Examples/7. Register State as Status Example/Register State as Status Example.lvlib
similarity index 92%
rename from src/Example/4. Advance Examples/7. Register State as Status Example/Register State as Status Example.lvlib
rename to src/examples/NEVSTOP/Communicable State Machine(CSM)/4. Advance Examples/7. Register State as Status Example/Register State as Status Example.lvlib
index 94c071151..b59ff372a 100644
--- a/src/Example/4. Advance Examples/7. Register State as Status Example/Register State as Status Example.lvlib
+++ b/src/examples/NEVSTOP/Communicable State Machine(CSM)/4. Advance Examples/7. Register State as Status Example/Register State as Status Example.lvlib
@@ -6,7 +6,7 @@
true
3
-
-
+
-
diff --git a/src/examples/NEVSTOP/Communicable State Machine(CSM)/4. Advance Examples/7. Register State as Status Example/Register State as Status Example.vi b/src/examples/NEVSTOP/Communicable State Machine(CSM)/4. Advance Examples/7. Register State as Status Example/Register State as Status Example.vi
new file mode 100644
index 000000000..c63759476
Binary files /dev/null and b/src/examples/NEVSTOP/Communicable State Machine(CSM)/4. Advance Examples/7. Register State as Status Example/Register State as Status Example.vi differ
diff --git a/src/examples/NEVSTOP/Communicable State Machine(CSM)/4. Advance Examples/7. Register State as Status Example/SubModules/State Register Example Submodule.vi b/src/examples/NEVSTOP/Communicable State Machine(CSM)/4. Advance Examples/7. Register State as Status Example/SubModules/State Register Example Submodule.vi
new file mode 100644
index 000000000..865c57f1e
Binary files /dev/null and b/src/examples/NEVSTOP/Communicable State Machine(CSM)/4. Advance Examples/7. Register State as Status Example/SubModules/State Register Example Submodule.vi differ
diff --git a/src/examples/NEVSTOP/Communicable State Machine(CSM)/4. Advance Examples/8. CSM in lvlibp.7z b/src/examples/NEVSTOP/Communicable State Machine(CSM)/4. Advance Examples/8. CSM in lvlibp.7z
new file mode 100644
index 000000000..53201d461
Binary files /dev/null and b/src/examples/NEVSTOP/Communicable State Machine(CSM)/4. Advance Examples/8. CSM in lvlibp.7z differ
diff --git a/src/examples/NEVSTOP/Communicable State Machine(CSM)/Addons - Logger/CSM Application Running Log Example.vi b/src/examples/NEVSTOP/Communicable State Machine(CSM)/Addons - Logger/CSM Application Running Log Example.vi
new file mode 100644
index 000000000..8d7153c41
Binary files /dev/null and b/src/examples/NEVSTOP/Communicable State Machine(CSM)/Addons - Logger/CSM Application Running Log Example.vi differ
diff --git a/src/examples/NEVSTOP/Communicable State Machine(CSM)/Addons - Loop Support/CSMLS - Continuous Loop in CSM Example.vi b/src/examples/NEVSTOP/Communicable State Machine(CSM)/Addons - Loop Support/CSMLS - Continuous Loop in CSM Example.vi
new file mode 100644
index 000000000..43714bfc1
Binary files /dev/null and b/src/examples/NEVSTOP/Communicable State Machine(CSM)/Addons - Loop Support/CSMLS - Continuous Loop in CSM Example.vi differ
diff --git a/src/help/NEVSTOP/Communicable State Machine(CSM)/Examples/CSM Advance Example(en-us).md b/src/help/NEVSTOP/Communicable State Machine(CSM)/Examples/CSM Advance Example(en-us).md
new file mode 100644
index 000000000..7dae1f379
--- /dev/null
+++ b/src/help/NEVSTOP/Communicable State Machine(CSM)/Examples/CSM Advance Example(en-us).md
@@ -0,0 +1,456 @@
+# CSM Advance Example Description
+
+## Worker Mode Example
+
+### Caller Program (Action Worker Mode Example.vi)
+
+#### Overview
+
+Demonstrates the Worker Mode within the CSM framework. In this example, four workers run in the background, collectively forming a CSM module in Worker Mode.
+
+#### Introduction
+
+This example demonstrates the Worker Mode within the CSM framework. In Worker Mode, multiple cloneable CSM instances run as nodes. To avoid naming conflicts, the module name is appended with a "#" suffix, informing the CSM framework that this is a worker module. When a message is sent to the workers, the message is handled using a fair queuing mechanism, where the first available worker module processes the message. From an external perspective, the system behaves as if only a single module is running, and all CSM concepts, such as synchronous, asynchronous, and broadcast, remain unchanged.
+
+In this example, four workers run in the background.
+
+#### Steps
+
+- Step1: Use the Advanced VI to mark the CSM module as Worker Mode (adding `#` as a suffix). If you are familiar with CSM rules, you can also type the correct name suffix directly without using this VI. Then, asynchronously call the 4 worker CSM modules without waiting for a reply. Alternatively, you can call the 4 worker CSM modules synchronously, or even asynchronously with a reply (refer to the code in the Disabled cases).
+- Step2: This loop is the main program module, named `WorkerModeExample`.
+- Step3: Use a While Loop to retrieve status information for all running CSM modules, including names, modes, instance counts, and the number of message queues to be processed. Use the Advanced VI to stop the While Loop. Once the caller/main CSM module exits, the While Loop will stop.
+- Step4:
+ - Step4.1: UI Event Handling. After the user clicks any of the following six user buttons, an inter-module message is sent to the first available worker CSM module.
+ - "DoSth: DoA -> Worker"
+ - "DoSth: DoA -@ Worker"
+ - "DoSth: Error -> Worker"
+ - "DoSth: Error -@ Worker"
+ - "Macro: Exit -@ Worker"
+ - "Macro: Exit -> Worker"
+ - Step4.2: Add a Response Source Manager indicator to the UI to handle "Async Response" and "Response" cases.
+- Step5: Module Exit. In the `Macro: Exit` message, use the CSM - Build Exit Messages of CSMs VI to create synchronous `Macro: Exit` messages for all running CSM worker modules. You can also manually type the inter-module messages, but be aware of how many worker modules are running. One message is required for each running worker instance. Then, send the local message `Macro: Exit` to the caller/main CSM module. All CSM modules will then exit sequentially.
+
+### Worker Mode Module Implementation (Action Worker.vi)
+
+#### Overview
+
+This example is the implementation of the CSM module node in Worker Mode. It is called by `Action Worker Mode Example.vi`, which instantiates multiple nodes that collectively form a CSM module in Worker Mode. To run simultaneously, the VI of the CSM worker module must be set to Reentrant.
+
+#### Introduction
+
+This example shows the implementation of a CSM module node in Worker Mode. It provides the following two methods:
+
+- `DoSth: DoA`: No actual operation. Used for demonstration only.
+- `DoSth: Error`: No actual operation; generates an error with Code=12345. Used for demonstration only.
+
+To allow Worker Mode nodes to run simultaneously, the VI execution property is set to Reentrant.
+
+#### Steps
+
+- Step1: Add the "DoSth: DoA" method.
+- Step2: Add the "DoSth: Error" method.
+- Step3: Set the VI execution property to Reentrant.
+
+## Chain of Responsibility Example
+
+### Caller Program (Chain of Responsibility Example.vi)
+
+#### Overview
+
+This example demonstrates the responsibility chain design pattern implemented within the CSM framework. By clicking buttons on the front panel, you can observe how the responsibility chain processes allowed messages in a defined order. Each message is passed from the lowest-order module to the highest-order module. When a module successfully processes the message, processing stops, and the message is not forwarded to subsequent modules. If no module in the chain can handle the message, this example returns an error.
+
+#### Instructions
+
+1. Run this VI.
+2. Click any button on the front panel, such as Action: action 1 -> Chain. You can then see which chain module processed which message.
+3. Click the Macro: Exit -> Chain or Macro: Exit -@ Chain button, and you will see the chain modules shut down in order.
+
+#### Introduction
+
+This example demonstrates the responsibility chain pattern in the CSM framework. Responsibility chain CSM modules must always be marked with a "$" suffix and followed by an integer, such as "CSMName$1", "CSMName$2", etc.
+
+A group of responsibility chain CSM modules process messages sequentially based on permissions:
+
+- Each individual chain module can only process specifically allowed messages.
+- If a message is allowed by multiple chain modules, the lowest-order chain module processes the message, and the message is not processed by any higher-order chain modules.
+
+#### Steps
+
+- Step1: Add special allowed messages for each CSM submodule marked as Chain Mode. For example, in this case, "Action: action 1" and "Action: action 2" for the "Chain$1" CSM submodule.
+- Step2: This loop is the main program module, named `ChainModeExample`.
+- Step3: Create Boolean buttons on the UI, such as "Action: action 1 -> Chain", to simulate inter-module message transmission.
+- Step4: Use a While Loop to retrieve status information for all running CSM modules, including names, modes, instance counts, and the number of message queues to be processed. Use the Advanced VI to stop the While Loop. Once the caller/main CSM module exits, the While Loop will stop.
+- Step5: Use the Global Log API to calculate and monitor real-time logging capabilities. For more details, refer to *4. Advance Examples\6. Global Log Handling Capability*.
+
+### Chain Mode Module Implementation (ChainNode A.vi)
+
+#### Overview
+
+This example implements a CSM module node in the chain of responsibility mode. This VI is called by `Chain of Responsibility Example.vi`.
+
+#### Introduction
+
+This example implements a CSM module node for the chain of responsibility mode. The "Allowed Messages" parameter defines the message names that the node can process, such as "Action: action 1" and "Action: action 2" messages.
+
+### Chain Mode Module Implementation (ChainNode B.vi)
+
+#### Overview
+
+This example implements a CSM module node in the chain of responsibility mode. This VI is called by `Chain of Responsibility Example.vi`
+
+#### Introduction
+
+This example implements a CSM module node for the chain of responsibility mode. The "Allowed Messages" parameter defines the message names that this node can process, such as "Action: action 2", "Action: action 3", "Action: action 4", and "Action: action 5" messages.
+
+### Chain Mode Module Implementation (ChainNode C.vi)
+
+#### Overview
+
+This example implements a CSM module node in the chain of responsibility mode. This VI is called by `Chain of Responsibility Example.vi`.
+
+#### Introduction
+
+This example implements a CSM module node for the chain of responsibility mode. The "Allowed Messages" parameter defines the message names that this node can process, such as "Action: action 4", "Action: action 5", and "Action: action 6" messages.
+
+## Global Error Handling Mechanism Example
+
+### Main Program (Topmost VI who Registers all Errors.vi)
+
+#### Overview
+
+Demonstrates how to use the status subscription mechanism to implement a global error handling mechanism. The main program also acts as an error handling module, where errors from all CSM submodules can be captured and handled within the main program.
+
+#### Introduction
+
+This example demonstrates how to use the status subscription mechanism to implement a global error handling mechanism. The main program also acts as an error handling module, where errors from all CSM submodules can be captured and handled within the main program. Every CSM module automatically broadcasts an `Error Occurred` status update when an error occurs. By adding an inter-module message string in the main program to register for this broadcast, errors from all CSM submodules can be captured.
+
+If the caller VI is not a CSM module, you can use the Non-CSM Caller Support VI to implement functionality to subscribe to CSM module errors.
+
+#### Steps
+
+- Step1: The core of the main program is a CSM module named `GlobalErrorHandlingExample`.
+- Step2: Synchronously call two other CSM modules. These two submodules can generate predetermined errors when buttons are clicked.
+- Step3: Register for the "Error Occurred" broadcast event at startup: `"Error Occurred@* >> Error Handler ->"`. This event triggers the "Error Handler" of `GlobalErrorHandlingExample` to process the captured event whenever any CSM submodule broadcasts an `Error Occurred` status change.
+- Step4: (Optional) In the exit logic, use `CSM - Filter Messages to Non-Existing Modules.vi` to filter out messages to non-existent CSM modules to avoid triggering errors during exit.
+
+### Simulated Error Generation Module (Error Module.vi)
+
+#### Overview
+
+A CSM example module used to generate predetermined errors when a button is clicked.
+
+#### Introduction
+
+This example is a submodule for the global error handling mechanism, used to generate predetermined errors when a button is clicked. This CSM module is set to Reentrant, allowing multiple instances to run simultaneously. The front panel opens automatically upon startup. Clicking the Generate Error button creates a simulated error. Through the state machine transition, this error runs into the "Error Handler" state and broadcasts the error via the `Error Occurred` status. Any module subscribed to this module's `Error Occurred` status can capture and handle this error.
+
+#### Steps
+
+- Step1: Generate a simulated error and pass it into the module via the error wire. This represents a typical error scenario.
+- Step2: This error information triggers the CSM module to transition to the `Error Handler` state. This behavior is consistent with the JKI State Machine (JKISM).
+- Step3: In the `Error Handler` state, the error information is broadcast via the `Error Occurred` status.
+
+## Global Log Filtering Example
+
+### Event-Based Source Filtering (Filter From Source(Event).vi)
+
+#### Overview
+
+Demonstrates using the CSM Global Log API to record state change events for debugging and monitoring. This example is based on the User Event mechanism and configures source-side filtering rules.
+
+#### Introduction
+
+This example demonstrates using the CSM Global Log API to record state change events for debugging and monitoring. This example is based on the User Event mechanism and configures source-side filtering rules.
+
+#### Steps
+
+- Step1: Use an Event Structure to retrieve the CSM global log and display it on the interface.
+ - Step1.1: Obtain the CSM Global Status User Event refnum and register it.
+ - Step1.2: Set source-side global filtering rules. The first rule is for global filtering, and the second is for a specific CSM module. For example, filtering out all logs from Module2 (Global) and the "State Change" LogType from Module1 (Module-Specific).
+ - Step1.3: In the `` case, handle the CSM global log event and print it to the LabVIEW UI.
+ - Step1.4: During the program exit process, unregister the CSM Global Status User Event refnum.
+- Step2: Synchronously call `1. Create a reuse Module\CSM Reuse Module.vi` to create four running CSM module instances.
+ - Step2.1: Create four running CSM module instances.
+ - Step2.2: Once global log handling is ready, send the "API:start" message to start all modules.
+ - Step2.3: Observe the running log information. You can see that the relevant logs defined in the rules have been filtered.
+ - Step2.4: Upon program exit, send the "Macro: Exit" message to synchronously exit all running CSM modules.
+
+### Queue-Based Source Filtering (Filter From Source(Queue).vi)
+
+#### Overview
+
+Demonstrates using the CSM Global Log API to record state change events for debugging and monitoring. This example is based on the User Event mechanism and configures source-side filtering rules.
+
+#### Introduction
+
+This example demonstrates using the CSM Global Log API to record state change events for debugging and monitoring. This example is based on a queue-based mechanism and configures source-side filtering rules.
+
+#### Steps
+
+- Step1: Use an Event Structure to retrieve the CSM global log and display it on the interface.
+ - Step1.1: Obtain the CSM Global Status Queue refnum and register it.
+ - Step1.2: Set source-side global filtering rules. The first rule is for global filtering and the second is for a specific CSM module. For example, filtering out all logs from Module2 (Global) and the "State Change" LogType from Module1 (Module-Specific).
+ - Step1.3: Query the queue status and calculate metrics such as log processing speed.
+ - Step1.4: Use a Dequeue structure to handle CSM global log events and print them to the LabVIEW UI.
+ - Step1.5: During the program exit process, unregister/release the CSM Global Status Queue refnum.
+- Step2: Synchronously call `1. Create a reuse Module\CSM Reuse Module.vi` to create four running CSM module instances.
+ - Step2.1: Create four running CSM module instances.
+ - Step2.2: Once global log handling is ready, send the "API:start" message to start all modules.
+ - Step2.3: Observe the running Log information; you can see that the relevant logs defined in the rules have been filtered.
+ - Step2.4: Upon program exit, send the "Macro: Exit" message to synchronously exit all running CSM modules.
+
+### Event-Based Subscriber Filtering (Filter From Subscriber(Event).vi)
+
+#### Overview
+
+Demonstrates using the CSM Global Log API to record state change events for debugging and monitoring. This example is based on the User Event mechanism and configures subscriber-side filtering rules. Subscriber-side rule settings only affect logs received by that specific subscriber and do not affect other subscribers or global logs.
+
+#### Introduction
+
+This example demonstrates using the CSM Global Log API to record state change events for debugging and monitoring. This example is based on the User Event mechanism and configures subscriber-side filtering rules. Subscriber-side rule settings only affect logs received by that specific subscriber and do not affect other subscribers or global logs.
+
+#### Steps
+
+- Step1: Use an Event Structure to retrieve the CSM global log and display it on the interface.
+ - Step1.1: Obtain the CSM Global Status User Event refnum and register it.
+ - Step1.2: Set subscriber-side global filtering rules. The first rule is for global filtering, and the second is for a specific CSM module. For example, filtering out all logs from Module2 (Global) and the "State Change" LogType from Module1 (Module-Specific).
+ - Step1.3: In the `` case, handle the CSM global log event and print it to the LabVIEW UI.
+ - Step1.4: During the program exit process, unregister the CSM Global Status User Event refnum.
+- Step2: Synchronously call `1. Create a reuse Module\CSM Reuse Module.vi` to create four running CSM module instances.
+ - Step2.1: Create four running CSM module instances.
+ - Step2.2: Once global log handling is ready, send the "API:start" message to start all modules.
+ - Step2.3: Observe the running Log information. You can see that the relevant logs defined in the rules have been filtered.
+ - Step2.4: Upon program exit, send the "Macro: Exit" message to synchronously exit all running CSM modules.
+
+### Queue-Based Subscriber Filtering (Filter From Subscriber(Queue).vi)
+
+#### Overview
+
+Demonstrates using the CSM Global Log API to record state change events for debugging and monitoring. This example is based on the User Event mechanism and configures subscriber-side filtering rules. Subscriber-side rule settings only affect logs received by that specific subscriber and do not affect other subscribers or global logs.
+
+#### Introduction
+
+This example demonstrates using the CSM Global Log API to record state change events for debugging and monitoring. This example is based on a queue-based mechanism and configures subscriber-side filtering rules. Subscriber-side rule settings only affect logs received by that specific subscriber and do not affect other subscribers or global logs.
+
+#### Steps
+
+- Step1: Use an Event Structure to retrieve the CSM global log and display it on the interface.
+ - Step1.1: Obtain the CSM Global Status Queue refnum and register it.
+ - Step1.2: Set subscriber-side global filtering rules. The first rule is for global filtering, and the second is for a specific CSM module. For example, filtering out all logs from Module2 (Global) and the "State Change" LogType from Module1 (Module-Specific).
+ - Step1.3: Query the queue status and calculate metrics such as log processing speed.
+ - Step1.4: Use a Dequeue structure to handle CSM global log events and print them to the LabVIEW UI.
+ - Step1.5: During the program exit process, unregister/release the CSM Global Status Queue refnum.
+- Step2: Synchronously call `1. Create a reuse Module\CSM Reuse Module.vi` to create four running CSM module instances.
+ - Step2.1: Create four running CSM module instances.
+ - Step2.2: Once global log handling is ready, send the "API:start" message to start all modules.
+ - Step2.3: Observe the running Log information; you can see that the relevant logs defined in the rules have been filtered.
+ - Step2.4: Upon program exit, send the "Macro: Exit" message to synchronously exit all running CSM modules.
+
+## Multi-Loop Module Example (Main - Call and Monitor TCP Traffic.vi)
+
+### Multi-Loop Module (TCP Server Module(Multi-Loop Support).vi)
+
+#### Overview
+
+This example demonstrates how to create a CSM module with a side loop. In some scenarios, implementing logic outside the CSM loop is much simpler. In such cases, you can use the side-loop support API to integrate your logic with the CSM loop, forming a submodule.
+
+This example creates a simple TCP Server submodule that is intuitive and easy to understand, while fully leveraging the advantages of CSM as an interface.
+
+#### Instructions
+
+1. Run this VI.
+2. Run `Simple TCP - Client.vi`.
+3. Modify the string controls on the front panel of both VIs to observe log information.
+4. You can restart `Simple TCP - Client.vi` to view the logs.
+
+#### Introduction
+
+The CSM loop acts as an interface, allowing you to use "TCP: Send" to send messages via TCP and "TCP: Receive" to handle received messages. This example displays only the messages. By combining the CSM loop with a side TCP loop, this module functions as a TCP service for sending and receiving messages with a client via a TCP connection.
+
+This development approach makes it convenient to adapt existing code, using CSM as a communication interface to interact with other modules. Multi-loop design is suited for timing-critical scenarios that require timed loops.
+
+#### Steps
+
+- Step1: CSM loop acts as a communication interface.
+ - Step1.1: Create the `TCP: Send` interface to handle sending TCP data packets.
+ - Step1.2: Create the `TCP: Receive` interface to handle receiving TCP data packets.
+ - Step1.3: Broadcast received TCP data packets via a "TCP Received" status change.
+- Step2: TCP side loop.
+ - Step2.1: TCP Listen. Hardcoded port number.
+ - Step2.2: Broadcast "TCP Connected" status upon initial TCP connection.
+ - Step2.3: Monitor the TCP connection for incoming messages.
+ - Step2.4: Clear Error 56, as it indicates the TCP connection is idle.
+ - Step2.5: Call the side loop API: `CSM Module Turns Invalid.vi` to ensure the side loop exits along with the CSM loop.
+ - Step2.6: Stop the inner loop.
+ - Step2.7: Close the TCP refnum.
+ - Step2.8: Broadcast "TCP Disconnected" status when the TCP connection is broken.
+ - Step2.9: Stop the outer loop.
+
+### TCP Server Program (Main - Call and Monitor TCP Traffic.vi)
+
+#### Overview
+
+Implements a TCP server program based on calling `TCP Server Module(Multi-Loop Support).vi`. From the outside, the interaction with this module is identical to that of a standard CSM module. Internally, however, the module's status changes are broadcast via the side loop.
+
+#### Instructions
+
+1. Run this VI.
+2. Run `Simple TCP - Client.vi`.
+3. Modify the string controls on the front panel of both VIs to observe communication logs.
+4. Restart `Simple TCP - Client.vi` as needed to observe reconnection logs.
+
+#### Introduction
+
+Without using the CSM framework directly, this example implements a TCP server program by calling `TCP Server Module(Multi-Loop Support).vi`. From the outside, the interaction with this module is identical to that of a standard CSM module. Internally, however, the module's status changes are broadcast via the side loop.
+
+#### Steps
+
+- Step1: Initialize UI.
+- Step2: Asynchronously call `TCP Server Module(Multi-Loop Support).vi` to start a CSM module named "TCPServer".
+- Step3: Subscribe to the status change events of the TCPServer module.
+- Step4: Modify the string control on the client VI to observe communication logs.
+- Step5: Run `Simple TCP - Client.vi` and click the send button on the VI to send a TCP message to the server.
+- Step6: Any received TCP message is broadcast by the TCPServer as a "TCP Received" status change. Therefore, this status can be handled in the status handling event, and this program displays it on the interface.
+- Step7: After modifying the content of the string control and pressing Enter, this program sends it as a TCP message to the Client.
+- Step8: Upon program exit, unsubscribe from the TCPServer module's status change events.
+- Step9: Send the "Macro: Exit" message to synchronously exit the TCPServer module.
+
+## Global Log Handling Capability (Global Log Handling Capability Example.vi)
+
+### Overview
+
+Demonstrates the global log handling capabilities of CSM. This example calls 30 submodules that continuously generate events. The main VI captures these events and uses the Global Log API to compute and display key processing metrics, such as `LogInQ`, change speed, and processing speed.
+
+Use this example to benchmark CSM global log performance and as a reference for custom implementations.
+
+### Introduction
+
+This example demonstrates the global log handling capabilities of CSM. This example calls 30 submodules that continuously generate events. The main VI captures these events and uses the Global Log API to calculate and display key processing metrics, such as `LogInQ`, change speed, and processing speed.
+
+Use this example to benchmark CSM global log performance and as a reference for custom implementations.
+
+### Steps
+
+- Step1: Asynchronously call 30 CSM submodules, each of which subsequently generates events continuously.
+- Step2: Start the CSM Watchdog thread to ensure all asynchronously launched CSM modules exit properly after the main program exits.
+- Step3: Use CSM's built-in Global Log API to capture and calculate typical logging capability data.
+- Step4: Exit the caller and all other running CSM modules.
+
+## State Subscription Example
+
+### State Subscription Example Submodule (State Register Example Submodule.vi)
+
+#### Overview
+
+This example is the submodule for the Register State as Status Example. It is called by `Register State as Status Example.vi`.
+
+#### Introduction
+
+This example is the submodule for the Register State as Status Example. It is called by `Register State as Status Example.vi`. When you click a button on the front panel of this example, the state corresponding to the button name is executed.
+
+### State Subscription Main Program (Register State as Status Example.vi)
+
+#### Overview
+
+Demonstrates how to use the state registration feature.
+
+Compared to status, the advantages of state registration are as follows:
+
+- There is no need to explicitly publish a status. As long as execution reaches a particular state and that state has subscribers, it will automatically trigger and pass the state’s Response as parameters to the subscribers.
+- It is easy to implement the observer pattern without intruding into the original code.
+- It supports chained registrations, but you must avoid creating registration loops, which would result in infinite recursion.
+
+#### Introduction
+
+This example demonstrates how to use the state registration feature. Click buttons in the example UI to view corresponding responses. You can also change the registration strings in the example UI to see further custom responses.
+
+There is no difference in syntax between state registration and status. The difference is that a status needs to be explicitly broadcast via API, whereas state changes allow you to subscribe to any state within a CSM module.
+
+The following is what this example does:
+
+```
+// After the "Macro: Initialize" state of any module completes, trigger "Echo: Echo1" in the main CSM module (default).
+Macro: Initialize@* >> Echo: Echo1 ->
+// After the "API: API1" state of any module completes, trigger "Echo: Echo1" in the main CSM module (default).
+API: API1@* >> Echo: Echo1->
+// After the "API: API2" state of "SubModule1" completes, trigger "Echo: Echo2" in the Main CSM module (default).
+API: API2@SubModule1 >> Echo: Echo2 ->
+// After the "Echo: Echo2" state of the main module completes, trigger "API: API1" in "SubModule1".
+Echo: Echo2@main >> API: API1@submodule1 ->
+// After the "Exit" state of "SubModule1" completes, trigger "Echo: Echo1" in the main CSM module (default).
+Exit@submodule1 >> Echo: Echo1 ->
+// After the "Macro: Exit" state of "SubModule2" completes, trigger "Echo: Echo1" in the main CSM module (default).
+Macro: Exit@submodule2 >> Echo: Echo1 ->
+```
+
+After `Echo: Echo2` in the `main` module executes, it triggers the `API: API1` state in `SubModule1`. According to the zero-first rule, after the `API: API1` state completes, it triggers `Echo: Echo1` in the main CSM module (default). This is a chained registration scenario.
+
+#### Steps
+
+- Step1: Based on the global log template, create a monitoring loop to observe state changes in all modules within the system.
+- Step2: Asynchronously call two CSM submodules. Wait for 1 second before calling submodules to achieve better UI display order. You can click buttons on the front panel to trigger state changes of submodules.
+- Step3: Implement a CSM main program module named `main` using the template.
+ - Step3.1: Clicking buttons on the main program interface triggers its state changes. The button name is used directly as the state name to reduce coding.
+ - Step3.2: When the main module starts, it automatically registers the preset state registration rules.
+ - Step3.3: In the "Echo: Echo1" state, parameters and other information are displayed as a pop-up. The execution of this state is also recorded in the global log.
+- Step4: You can click buttons on the main interface or submodule interfaces to trigger the corresponding logic, view the global log, and verify that the state registration is effective.
+
+# Addons - Logger
+
+## CSM Application Running Log Example.vi
+
+### Overview
+
+Demonstrates how to use the CSM Logger VIs to implement global CSM event file logging.
+
+### Introduction
+
+This example demonstrates how to use the CSM Logger VIs to implement global CSM event file logging. Use the CSM-Start File Logger VI, found under LabVIEW Palette -> CSM -> Addons -> Logger, to quickly implement global CSM event file logging.
+
+In this example, two instances of the CSM-Start File Logger VI are placed in sequence, the log file path and name are manually set , and global rule filters are enabled for each instance separately. After running this example, you can locate and view the corresponding log files to deepen your understanding. If you add/call more CSM modules later, you do not need to change any code here to achieve logging functionality. In summary, a single high-level CSM Addon Logger VI is sufficient to quickly realize a global logging mechanism.
+
+### Steps
+
+- Step1: This is a simple CSM module named `RunningLogExample`.
+- Step2: Any button click will run into the "API: Button Click" state and broadcast a status change of the same name, with the button name as the parameter.
+- Step3: In `API: Button Click`, nothing needs to be done because the goal is to observe the log file.
+- Step4: After the program starts, two background logging threads for log files are launched. These logging threads will exit as the program exits.
+- Step5: After running the program, check the directory where the example VI is located for two log files.
+ - Step5.1: `CSM Application Running Log Example.csmlog` records all logs.
+ - Step5.2: `CSM Application Running Log Example.no-state.csmlog` records logs without state change records.
+
+# Addons - Loop Support
+
+## CSMLS - Continuous Loop in CSM Example.vi
+
+### Overview
+
+A loop is the basic unit of operation for a state machine, executing continuously while the state machine is running. Users can define loop conditions via logic or use the CSM Loop-Support VIs. The advantage of the Loop-Support VIs is that the loop can continue to respond to other events while running, without blocking the state machine's operation. This is similar to a continuous looping mechanism in a While Loop. You do not need to manually embed a While Loop. Instead, you can use the CSM Loop-Support VIs to define, append, and terminate loops. The CSM Loop-Support VIs accomplish this function by analyzing the state queue.
+
+This example demonstrates continuous DAQ acquisition within the CSM framework. Click Start to begin continuous acquisition, and click Stop, or trigger a high-priority error, to end the loop. For comparison, click DAQ: Once to run a single acquisition. A low-priority error does not stop the loop.
+
+### Instructions
+
+1. Run the VI and click DAQ: Once to perform a single DAQ acquisition.
+2. Click Start to begin continuous acquisition. The waveform graph and log history update in real-time.
+3. Click Stop or High-Priority Error to terminate the loop.
+4. While the loop is running, click Low-Priority Error. The error is ignored, and the loop continues to run.
+
+### Introduction
+
+This example demonstrates how to use CSM Loop-Support VIs to implement the functionality of a continuous DAQ acquisition While Loop. Click Start to begin continuous acquisition, and click Stop, or trigger a high-priority error, to end the loop. For comparison, click DAQ: Once to run a single acquisition.
+
+### Steps
+
+- Step1: UI Event Handling Loop.
+ - Step1.1: If UI events become very complex, it is recommended to use the CSM DQMH-Style Template so that you can handle UI logic separately from other CSM-related logic. You can find this template under LabVIEW Palette -> CSM -> More Templates.
+ - Step1.2: Additionally, the Multi-Loop Module Support API is used to forward states from the DQMH loop to the CSM main loop. For example, after the user clicks the Start button, the "Macro:DAQ continuous" message can be forwarded to the CSM main loop for further logic processing.
+- Step2: Use `CSM-Addon Logger Start File Logger.vi` to quickly implement CSM global event file logging.
+- Step3: CSM Loop that is used to handle interface operations and external responses, and implement specific operational logic.
+ - Step3.1: In the DAQ group, perform the specific operational logic for DAQ acquisition.
+- Step4: Use CSM Loop-Support VIs to implement the While Loop.
+ - Step4.1: `Define Loop States(s).vi`: Define continuous states, marking the loop check state with `->` so that the message string is processed continuously.
+ - Step4.2: `Append Continuous States.vi`: Append the next round of states and continue adding the loop check state to the state queue via parameters.
+ - Step4.3: `Remove Loop Tag to Break.vi`: Use this VI to remove the `` tag to break the loop state. States related to the current loop iteration can be processed normally.
+ - Step4.4: `Remove Loop Tag and Previous States to Break.vi`: Remove the `` tag and all previous states to break the loop state. States related to the current loop iteration are removed.
+ - Step4.5: A delay function needs to be added to control the loop rate.
+- Step5: As a result, the same states can be used to implement a standard single acquisition.
diff --git a/src/help/NEVSTOP/Communicable State Machine(CSM)/Examples/CSM Advance Example(zh-cn).md b/src/help/NEVSTOP/Communicable State Machine(CSM)/Examples/CSM Advance Example(zh-cn).md
new file mode 100644
index 000000000..f9d6fc38d
--- /dev/null
+++ b/src/help/NEVSTOP/Communicable State Machine(CSM)/Examples/CSM Advance Example(zh-cn).md
@@ -0,0 +1,455 @@
+# CSM Advance Example Description
+
+## 工作者模式范例
+
+### 调用程序(Action Worker Mode Example.vi)
+
+#### Overview
+
+本示例演示CSM框架中的工作者模式(Worker Mode)。在本示例中,四个worker在后台运行,共同组成了一个处于工作者模式的CSM模块。
+
+#### Introduction
+
+本示例演示CSM框架中的工作者模式(Worker Mode)。在工作者模式中,多个可克隆的CSM实例作为node 运行。为避免命名冲突,使用附加“#”后缀的模块名称,告知CSM框架这是一个工作者模块。当消息发送给工作者时,将使用公平队列机制处理它,第一个空闲的模块将会处理这个消息。从外部看,系统表现得好像只有一个模块在运行,所有CSM 概念(例如同步、异步和广播)都保持不变。
+
+在本示例中,四个worker在后台运行。
+
+#### Steps
+
+- Step1: 使用高级VI将CSM模块标标记为worker模式(添加#作为后缀),如果您熟悉CSM规则,也可以只键入正确的名称后缀,而不使用此VI。 然后异步调用4个工作者CSM模块,无需等待回复。或者,您也可以同步调用4个工作者CSM模块,甚至异步调用并带回复,请参阅禁用case中的代码。
+- Step2: 此循环为主程序模块,模块名称是WorkerModeExample。
+- Step3: 使用While循环来获取所有正在运行的CSM模块的状态信息,包括名称、模式、实例数和要处理的消息队列数。使用高级VI停止While循环,即一旦调用者/主CSM模块退出,While循环将停止。
+- Step4:
+ - Step4.1: UI事件处理,在用户单击以下六个用户按钮中的任何一个后,将向第一个空闲的工作者 CSM模块发送一条模块间消息。
+ - "DoSth: DoA -> Worker"
+ - "DoSth: DoA -@ Worker"
+ - "DoSth: Error -> Worker"
+ - "DoSth: Error -@ Worker"
+ - "Macro: Exit -@ Worker"
+ - "Macro: Exit -> Worker"
+ - Step4.2 然后在 UI 中添加一个Response Source Manager指示器,以处理"Async Response"和 "Response" case
+- Step5: 模块退出。在`Macro: Exit`消息中,使用CSM - Build Exit Messages of CSMs VI创建所有正在运行的 CSM 工作者模块发送`Macro:Exit`的同步消息(您也可以手动键入模块间消息,注意有多少个正在运行的工作者模块。每个正在运行的工作者模式都需要一条消息),并向调用者/主CSM模块发送本地消息`Macro:Exit`。然后所有CSM模块将按顺序退出。
+
+### 工作者模式模块实现(Action Worker.vi)
+
+#### Overview
+
+本示例为工作者模式中CSM模块节点的实现。它被`Action Worker Mode Example.vi`调用,实例化出多个节点,共同组成了一个处于工作者模式的CSM模块。为了能够同时运行,CSM工作者模块的VI,必须设置为可重入。
+
+#### Introduction
+
+本示例为工作者模式中CSM模块节点的实现。提供以下两个方法:
+
+- DoSth: DoA: 无实际操作,仅用于演示。
+- DoSth: Error: 无实际操作,会产生一个Code=12345的错误,仅用于演示。
+
+为了工作者模式的node能够同时运行,VI执行属性设置为可重入。
+
+#### Steps
+
+- Step1: 添加 "DoSth: DoA" 方法。
+- Step2: 添加 "DoSth: Error" 方法。
+- Step3: 设置VI执行属性为可重入。
+
+## 责任链模式范例
+
+### 调用程序(Chain of Responsibility Example.vi)
+
+#### Overview
+
+演示CSM框架中实现的责任链(responsibility chain)设计模式。通过单击前面板上的按钮,您可以观察责任链如何按定义的顺序处理允许的消息。每条消息都从最低顺序的模块传递到最高顺序的模块。当一个模块成功处理该消息时,处理停止,并且该消息不会转发到后续模块。如果链中没有模块可以处理该消息,本示例将返回一个错误。
+
+#### Instructions
+
+1. 运行此 VI。
+2. 单击前面板上的任何按钮,例如Action: action 1 -> Chain,然后您可以看到哪个链模块处理了哪条消息。
+3. 单击Macro: Exit -> Chain或Macro: Exit -@ Chain按钮,然后您可以看到链模块将按顺序启动。
+
+#### Introduction
+
+本示例演示CSM框架中的责任链模式。责任链CSM模块应始终以后缀“$”和整数标记,例如 "CSMName$1"、"CSMName$2"等。
+
+一组责任链CSM模块以允许的方式并按顺序处理消息:
+
+- 每个单独的链模块只能处理特别允许的消息。
+- 如果一条消息被多个链模块允许,则顺序最低的链模块将处理该消息,并且该消息不会再被更高顺序的链模块处理。
+
+#### Steps
+
+- Step1: 为每个将标记为链模式的CSM子模块添加特殊允许的消息,例如本示例中"Chain$1" CSM子模块的"Action: action 1"和"Action: action 2"。
+- Step2: 此循环为主程序模块,模块名称是`ChainModeExample`。
+- Step3: 在 UI 中创建布尔按钮,例如 "Action: action 1 -> Chain" 等,以模拟模块间消息传输。
+- Step4: 使用While循环来获取所有正在运行的CSM模块的状态信息,包括名称、模式、实例数和要处理的消息队列数。使用高级 VI 停止While 循环,即一旦调用者/主 CSM 模块退出,While循环将停止。
+- Step5: 使用全局日志API计算和监控实时日志记录能力,更多详情请参阅4. Advance Examples\6. Global Log Handling Capability。
+
+### 责任链模式模块实现(ChainNode A.vi)
+
+#### Overview
+
+本示例为责任链模式中CSM模块节点的实现。它被`Chain of Responsibility Example.vi`调用。
+
+#### Introduction
+
+本示例为责任链模式中CSM模块节点的实现。通过"Allowed Messages"参数,定义了该节点可以处理的消息名称。例如,本CSM模块的"Action: action 1" 和 "Action: action 2"消息。
+
+### 责任链模式模块实现(ChainNode B.vi)
+
+#### Overview
+
+本示例为责任链模式中CSM模块节点的实现。它被`Chain of Responsibility Example.vi`调用。
+
+#### Introduction
+
+本示例为责任链模式中CSM模块节点的实现。通过"Allowed Messages"参数,定义了该节点可以处理的消息名称。例如,本CSM模块的"Action: action 2", "Action: action 3", "Action: action 4", "Action: action 5"消息。
+
+### 责任链模式模块实现(ChainNode C.vi)
+
+#### Overview
+
+本示例为责任链模式中CSM模块节点的实现。它被`Chain of Responsibility Example.vi`调用。
+
+#### Introduction
+
+本示例为责任链模式中CSM模块节点的实现。通过"Allowed Messages"参数,定义了该节点可以处理的消息名称。例如,本CSM 模块的"Action: action 4", "Action: action 5", "Action: action 6"消息。
+
+## 全局错误处理机制示例
+
+### 主程序(Topmost VI who Registers all Errors.vi)
+
+#### Overview
+
+演示如何使用状态订阅机制,实现全局的错误处理机制,主程序也兼职错误处理模块,所有CSM子模块的错误都可以在主程序中捕获并处理。
+
+#### Introduction
+
+
+演示如何使用状态订阅机制,实现全局的错误处理机制,主程序也兼职错误处理模块,所有CSM子模块的错误都可以在主程序中捕获并处理。每个CSM模块在发生错误时,会自动广播Error Occurred状态更新。通过在主程序中添加一个模块间消息字符串以注册该广播,即可捕获所有CSM子模块的错误。
+
+如果调用者VI不是CSM模块,您可以使用Non-CSM Caller Support VI实现订阅CSM模块错误的功能。
+
+#### Steps
+
+- Step1: 主程序核心为一个名为`GlobalErrorHandlingExample`的CSM模块。
+- Step2: 同步调用另外两个CSM模块,这两个子模块可以通过点击按钮产生一些预定的错误。
+- Step3: 启动时就注册"Error Occurred"广播事件,"Error Occurred@* >> Error Handler ->". 该事件在任何CSM子模块抛出Error Occurred状态变化时,会触发 GlobalErrorHandlingExample的 "Error Handler", 处理捕获的事件。
+- Step4: (Optional)退出逻辑中,通过`CSM - Filter Messages to Non-Existing Modules.vi`过滤掉所有不存在的CSM模块的消息,以避免在退出时触发错误。
+
+### 模拟错误生成模块(Error Module.vi)
+
+#### Overview
+
+一个CSM示例模块,用于在点击按钮时产生预定的错误。
+
+#### Introduction
+
+本示例为全局错误处理机制的一个子模块,用于在点击按钮时产生预定的错误。这个CSM模块被设置为可重入,可以同时运行多个实例。启动后面板被自动打开。点击界面上上的产生错误按钮,会生成一个模拟的错误。这个错误通过状态机的轮转,会运行至“Error handler” 状态,并将此错误通过Error Occurred状态抛出。任何订阅该模块Error Occurred状态的模块,可以捕获并处理此错误。
+
+#### Steps
+
+- Step1: 产生一个模拟的错误,通过错误线传递到模块中,这也是通常我们会遇到的错误场景。
+- Step2: 这个错误信息会触发CSM模块轮转到Error Handler状态, 这个行为和JKISM一致。
+- Step3: 在Error handler状态中,会将错误信息通过Error Occurred状态抛出。
+
+## 全局日志过滤示例
+
+### 基于事件的源过滤示例(Filter From Source(Event).vi)
+
+#### Overview
+
+演示使用CSM全局日志API记录状态更改事件以进行调试和监控。本示例基于用户事件机制,并设置了源端过滤规则。
+
+#### Introduction
+
+本示例演示使用CSM全局日志API记录状态更改事件以进行调试和监控。本示例基于用户事件机制,并设置了源端过滤规则。
+
+
+#### Steps
+
+- Step1: 使用事件结构获取CSM全局日志,并显示在界面。
+ - Step1.1: 获取CSM全局状态用户事件句柄,并注册它。
+ - Step1.2: 设置源端全局过滤规则。第一个用于全局过滤,第二个用于特定的 CSM 模块。例如,过滤掉来自Module2的所有日志(全局)以及Module1的"State Change" LogType(特定模块日志)。
+ - Step1.3: 在中,处理CSM全局日志事件,将其打印到LabVIEW UI。
+ - Step1.4: 程序退出过程中,注销CSM全局状态用户事件句柄。
+- Step2: 同步调用`1. Create a reuse Module\CSM Reuse Module.vi`, 创建四个运行的CSM模块实例。
+ - Step2.1: 创建四个运行的CSM模块实例。
+ - Step2.2: 在全局日志处理准备好后,发送 "API:start" 消息,让所有的模块开始运行。
+ - Step2.3: 观测运行中的Log信息,可以看到规则中下相关日志已经被过滤。
+ - Step2.4: 程序开始退出后,发送“Macro: Exit"消息,以同步退出所有正在运行的CSM模块。
+
+### 基于队列的源过滤示例(Filter From Source(Queue).vi)
+
+#### Overview
+
+演示使用CSM全局日志API记录状态更改事件以进行调试和监控。本示例基于用户事件机制,并设置了源端过滤规则。
+
+#### Introduction
+
+本示例演示使用CSM全局日志API记录状态更改事件以进行调试和监控。本示例基于基于队列(queue-based)的机制,并设置了源端过滤规则。
+
+#### Steps
+
+- Step1: 使用事件结构获取CSM全局日志,并显示在界面。
+ - Step1.1: 获取CSM全局状态队列句柄,并注册它。
+ - Step1.2: 设置源端全局过滤规则。第一个用于全局过滤,第二个用于特定的CSM模块。例如,过滤掉来自Module2的所有日志(全局)以及Module1的 "State Change" LogType(特定模块日志)。
+ - Step1.3: 查询队列状态,并计算日志处理速度等指标。
+ - Step1.4: 使用出队结构,处理CSM全局日志事件,将其打印到 LabVIEW UI。
+ - Step1.5: 程序退出过程中,注销CSM全局状态队列句柄。
+- Step2: 同步调用`1. Create a reuse Module\CSM Reuse Module.vi`, 创建四个运行的CSM模块实例。
+ - Step2.1: 创建四个运行的CSM模块实例。
+ - Step2.2: 在全局日志处理准备好后,发送"API:start"消息,让所有的模块开始运行。
+ - Step2.3: 观测运行中的Log信息,可以看到规则中下相关日志已经被过滤。
+ - Step2.4: 程序开始退出后,发送“Macro: Exit"消息,以同步退出所有正在运行的CSM模块。
+
+### 基于事件的订阅端过滤示例(Filter From Subscriber(Event).vi)
+
+#### Overview
+
+演示使用CSM全局日志API记录状态更改事件以进行调试和监控。本示例基于用户事件机制,并设置了订阅端过滤规则。订阅端规则的设置,只影响订阅端接收到的日志,不会影响其他订阅端或全局日志。
+
+#### Introduction
+
+本示例演示使用CSM全局日志API记录状态更改事件以进行调试和监控。本示例基于用户事件机制,并设置了订阅端过滤规则。订阅端规则的设置,只影响订阅端接收到的日志,不会影响其他订阅端或全局日志。
+
+#### Steps
+
+- Step1: 使用事件结构获取CSM全局日志,并显示在界面。
+ - Step1.1: 获取CSM全局状态用户事件句柄,并注册它。
+ - Step1.2: 设置订阅端全局过滤规则。第一个用于全局过滤,第二个用于特定的CSM 模块。例如,过滤掉来自Module2的所有日志(全局)以及Module1的"State Change" LogType(特定模块日志)。
+ - Step1.3: 在中,处理CSM全局日志事件,将其打印到LabVIEW UI。
+ - Step1.4: 程序退出过程中,注销CSM全局状态用户事件句柄。
+- Step2: 同步调用 `1. Create a reuse Module\CSM Reuse Module.vi`, 创建四个运行的CSM模块实例。
+ - Step2.1: 创建四个运行的CSM模块实例。
+ - Step2.2: 在全局日志处理准备好后,发送"API:start"消息,让所有的模块开始运行。
+ - Step2.3: 观测运行中的Log信息,可以看到规则中下相关日志已经被过滤。
+ - Step2.4: 程序开始退出后,发送“Macro: Exit"消息,以同步退出所有正在运行的CSM模块。
+
+### 基于队列的订阅端过滤示例(Filter From Subscriber(Queue).vi)
+
+#### Overview
+
+演示使用CSM全局日志API记录状态更改事件以进行调试和监控。本示例基于用户事件机制,并设置了订阅端过滤规则。订阅端规则的设置,只影响订阅端接收到的日志,不会影响其他订阅端或全局日志。
+
+#### Introduction
+
+本示例演示使用CSM全局日志API记录状态更改事件以进行调试和监控。本示例基于基于队列(queue-based)的机制,并设置了订阅端过滤规则。订阅端规则的设置,只影响订阅端接收到的日志,不会影响其他订阅端或全局日志。
+
+#### Steps
+
+- Step1: 使用事件结构获取CSM全局日志,并显示在界面。
+ - Step1.1: 获取CSM全局状态队列句柄,并注册它。
+ - Step1.2: 设置订阅端全局过滤规则。第一个用于全局过滤,第二个用于特定的CSM模块。例如,过滤掉来自Module2的所有日志(全局)以及Module1的 "State Change" LogType(特定模块日志)。
+ - Step1.3: 查询队列状态,并计算日志处理速度等指标。
+ - Step1.4: 使用出队结构,处理CSM全局日志事件,将其打印到LabVIEW UI。
+ - Step1.5: 程序退出过程中,注销CSM全局状态队列句柄。
+- Step2: 同步调用 `1. Create a reuse Module\CSM Reuse Module.vi`, 创建四个运行的CSM模块实例。
+ - Step2.1: 创建四个运行的CSM模块实例。
+ - Step2.2: 在全局日志处理准备好后,发送"API:start"消息,让所有的模块开始运行。
+ - Step2.3: 观测运行中的Log信息,可以看到规则中下相关日志已经被过滤。
+ - Step2.4: 程序开始退出后,发送“Macro: Exit"消息,以同步退出所有正在运行的CSM模块。
+
+## 多循环模块示例(Main - Call and Monitor TCP Traffic.vi)
+
+### 多循环模块(TCP Server Module(Multi-Loop Support).vi)
+
+#### Overview
+
+本示例演示如何创建一个带有旁路循环的CSM模块。在某些场景下,将逻辑放在CSM循环之外实现会简单得多。此时,您可以利用旁路循环支持API,将您的逻辑与CSM循环集成,从而构成一个子模块。
+
+本示例创建了一个简单的TCP服务器子模块,直观易懂,并充分利用了CSM作为接口的优势。
+
+#### Instructions
+
+1. 运行此VI。
+2. 运行`Simple TCP - Client.vi`。
+3. 修改此前面板和客户端上的string控件,观察日志信息。
+4. 您可以重新启动`Simple TCP - Client.vi`来查看日志。
+
+#### Introduction
+
+CSM循环作为接口,允许您使用“TCP: Send”通过TCP发送消息,“TCP: Receive”用于处理接收到的消息。本示例中仅将消息显示出来。通过将CSM循环与旁路TCP循环结合,该模块可作为TCP服务,用于与客户端之间通过TCP连接收发消息。
+
+可以看出,这种编写方式,可以很方便的改造已有的代码,将CSM作为通讯接口,与其他模块进行交互。 尤其在一些对定时要求高的场景,需要使用定时循环,多循环模式就是一种很好的选择。
+
+#### Steps
+
+- step1: CSM循环作作为通讯接口。
+ - step1.1: 创建TCP: Send接口,用于处理发送TCP数据包。
+ - step1.2: 创建TCP: Receive接口,用于处理接收TCP数据包。
+ - step1.3: 将接收到的TCP数据包通过“TCP Received”状态变化抛出。
+- step2: TCP旁路循环
+ - step2.1: TCP监听。硬编码端口号。
+ - step2.2: 当TCP首次连接时广播“TCP Connected”状态。
+ - step2.3: 监控TCP连接是否有消息传入。
+ - step2.4: 清除错误56,因为它表示TCP空闲。
+ - step2.5: 调用旁路循环API: "CSM Module Turns Invalid.vi"使旁路循环随CSM循环一起退出。
+ - step2.6: 停止内部循环。
+ - step2.7: 关闭TCP引用句柄。
+ - step2.8: 当TCP连接断开时广播"TCP Disconnected"状态。
+ - step2.9: 停止外部循环。
+
+### TCP 服务器程序(Main - Call and Monitor TCP Traffic.vi)
+
+#### Overview
+
+基于调用`TCP Server Module(Multi-Loop Support).vi`实现一个TCP服务器程序。可以看出,从外部看,该模块的交互与标准CSM模块的交互相同,只是在内部,该模块的状态变化是通过旁路循环抛出的。
+
+#### Instructions
+
+1. 运行本VI。
+2. 运行`Simple TCP - Client.vi`。
+3. 在本VI和客户端VI上修改字符串控件,观察通信日志。
+4. 根据需要重新启动Simple TCP - Client.vi,观察重连日志。
+
+#### Introduction
+
+不使用CSM框架,调用`TCP Server Module(Multi-Loop Support).vi`实现一个TCP服务器程序。可以看出,从外部看,该模块的交互与标准CSM模块的交互相同,只是在内部,该模块的状态变化是通过旁路循环抛出的。
+
+#### Steps
+
+- Step1: 初始化UI。
+- Step2: 异步调用 `TCP Server Module(Multi-Loop Support).vi`, 启动名称为 TCPServer的CSM模块。
+- step3: 订阅TCPServer模块的状态变化事件。
+- step4: 在客户端VI上修改字符串控件,观察通信日志。
+- Step5: 运行`Simple TCP - Client.vi`,在这个VI上点击发送按钮,发送一条TCP消息到服务器。
+- step6: 任何收到的TCP消息,会被TCPServer以“TCP Received”状态变化抛出,因此在状态处理事件中可以处理此状态,本程序将其显示在界面上。
+- step7: String控件修改内容并键入回车后,本程序将其作为TCP消息发送到Client。
+- step8: 程序开始退出后,取消订阅TCPServer模块的状态变化事件。
+- step9: 发送“Macro: Exit”消息,以同步退出TCPServer模块。
+
+## Global Log Handling Capability(Global Log Handling Capability Example.vi)
+
+### Overview
+
+演示CSM的全局日志处理能力。本示例调用30个持续生成事件的子模块。主VI捕获这些事件,并使用全局日志API来计算和显示关键处理指标,例如LogInQ、更改速度和处理速度。
+
+使用此示例来基准测试CSM的全局日志性能,并作为自定义实现的参考。
+
+### Introduction
+
+本示例演示CSM的全局日志处理能力。本示例调用30个持续生成事件的子模块。主VI捕获这些事件,并使用全局日志API来计算和显示关键处理指标,例如LogInQ、更改速度和处理速度。
+
+使用此示例来基准测试CSM的全局日志性能,并作为自定义实现的参考。
+
+### Steps
+
+- Step1: 异步调用30个CSM子模块,每个子模块随后将持续生成事件。
+- Step2: 启动CSM看门狗 (Watchdog) 线程,以确保所有异步启动的CSM模块在主程序退出后都能正常退出。
+- Step3: 使用CSM的内置全局日志API捕获和计算一些典型的日志记录能力数据。
+- Step4: 退出调用者和所有其他正在运行的CSM模块。
+
+## State订阅范例
+
+### State订阅范例子模块(State Register Example Submodule.vi)
+
+#### Overview
+
+本示例为状态订阅的子模块。它被State订阅范例主程序(`Register State as Status Example.vi`)调用。
+
+#### Introduction
+
+本示例为状态订阅的子模块。它被State订阅范例主程序(`Register State as Status Example.vi`)调用。本程序界面按钮点击时,会运行按钮名称上的状态。
+
+### State订阅范例主程序(Register State as Status Example.vi)
+
+#### Overview
+
+本范例主要演示了如何使用状态订阅功能。和信号广播(Status)相比,状态订阅的优势在于:
+
+- 不需要显示的发布信号广播(Status),只要运行到某个状态,只要被订阅,就会自动触发,并将状态的Response作为参数传递给订阅者。
+- 可以很容易的不侵入原先代码,实现观察者模式。
+- 可以实现链式的订阅,但是要注意逻辑上不要形成循环订阅,否则会导致死循环。
+
+#### Introduction
+
+本示例演示如何使用状态订阅功能。单击示例UI中的按钮,查看相应的响应。您还可以在示例 UI中更改注册字符串,以查看进一步的自定义响应。
+
+状态订阅和信号广播(Status)的订阅语法上没有任何不同,区别在于信号广播(Status)需要通过API显示抛出,而状态变化可以订阅CSM任意一个状态。
+
+以本范例为例:
+
+```
+//任意模块的Macro: Initialize状态执行完毕后,都会触发主程序CSM模块(缺省)的Echo: Echo1
+Macro: Initialize@* >> Echo: Echo1 ->
+//任意模块的API: API1状态执行完毕后,都会触发主程序CSM模块(缺省)的Echo: Echo1
+API: API1@* >> Echo: Echo1->
+//SubModule1的API: API2状态执行完毕后,都会触发主程序CSM模块(缺省)的Echo: Echo2
+API: API2@SubModule1 >> Echo: Echo2 ->
+//Main模块的Echo: Echo2状态执行完毕后,都会触发SubModule1的API: API1
+Echo: Echo2@main >> API: API1@submodule1 ->
+//SubModule1的Exit状态执行完毕后,都会触发主程序CSM模块(缺省)的Echo: Echo1
+Exit@submodule1 >> Echo: Echo1 ->
+//SubModule2的Macro: Exit状态执行完毕后,都会触发主程序CSM模块(缺省)的Echo: Echo1
+Macro: Exit@submodule2 >> Echo: Echo1 ->
+```
+
+其中,main模块Echo: Echo2执行后,触发SubModule1的API: API1状态; 根据零一条规则,API: API1 状态执行完毕后,会触发主程序CSM模块(缺省)的Echo: Echo1。这是一个链式订阅的场景。
+
+#### Steps
+- Step1: 根据全局日志模板,创建一个监控循环,用于观测系统中所有模块的状态变化。
+- Step2: 异步调用两个CSM子模块(在调用子模块前等待1秒,以获得更好的UI显示顺序)子模块可以通过点击界面按钮,触发其状态变化。
+- Step3: 通过模板实现一个CSM主程序模块,名字叫做main.
+ - Step3.1: 主程序界面按钮的点击,会触发其状态发生变化。逻辑上将按钮的名称作为状态,用于减少代码编写。
+ - Step3.2: 主程序启动时,自动订阅预设的状态订阅规则。
+ - Step3.3: "Echo: Echo1"状态中,会将参数等信息以弹窗的形式显示出来。这个状态的运行,同时会在全局日志中有记录。
+- Step4: 可以点击主界面的按钮,或子模块界面的按钮,触发对应的逻辑,查看全局日志,验证状态订阅是否生效。
+
+# Addons - Logger
+
+## CSM Application Running Log Example.vi
+
+### Overview
+
+演示如何使用CSM Logger VIs来实现全局CSM事件文件记录功能。
+
+### Introduction
+
+本示例演示如何使用CSM Logger VIs来实现全局CSM事件文件记录功能。使用CSM-Start File Logger VI(此VI可以在LabVIEW选板 -> CSM -> Addons -> Logger下找到)来快速实现全局CSM事件文件记录功能。
+
+例如,我们按顺序放置两个这样的VI,手动设置日志记录的文件路径和名称,并分别启用全局规则过滤器。运行此示例后,您还可以找到并查看相应的日志文件,以加深理解。如果以后要添加/调用更多CSM模块,您无需更改此处的任何代码以实现日志记录功能。总之,您只需要这样一个高级CSM附加组件日志记录器 VI 即可快速实现全局日志记录功能。
+
+### Steps
+
+- Step1: 这是一个简单的CSM模块,名称为`RunningLogExample`。
+- Setp2: 任何的一个按钮,都会运行到"API: Button Click"状态, 并抛出同名的一个状态变化,他们的参数都是按钮的名称。
+- step3: 在API: Button Click中,不需要做任何事情,因为我们要观察的是日志文件。
+- step4: 程序启动后,会启动两个log文件的后台记录线程,他们会随着程序的退出而退出。
+- Step5: 运行完程序后,在范例VI所在目录,检查是否存在两个日志文件。
+ - Step5.1: `CSM Application Running Log Example.csmlog`记录了所有的日志。
+ - Step5.2: `CSM Application Running Log Example.no-state.csmlog`所记录的日志,没有状态变化记录。
+
+# Addons - Loop Support
+
+## CSMLS - Continuous Loop in CSM Example.vi
+
+### Overview
+
+循环是状态机运行的基本单位,它会在状态机运行时不断地执行。用户可以自己通过逻辑来定义循环的条件,也可以使用CSM推荐的循环支持API来定义循环。它的优势是可以在循环运行时,依然响应其他事件,而不会阻塞状态机的运行。这类似于 While循环的连续循环机制。您无需手动嵌入While 循环,而是可以使用CSM Loop-Support VI 来定义、附加和终止循环。这组API通过对状态队列的分析来完成此功能。
+
+本示例展示了CSM框架内的连续DAQ采集。单击Start开始连续采集,单击Stop(或触发高优先级错误)结束循环。作为比较,单击DAQ: Once运行单次采集。低优先级错误不会停止循环。
+
+### Instructions
+
+1. 运行VI并单击DAQ: Once以执行单次DAQ采集。
+2. 单击Start开始连续采集。波形图和日志历史记录会实时更新。
+3. 单击Stop或High-Priority Error终止循环。
+4. 循环运行时,单击Low-Priority Error。错误被忽略,循环仍会运行。
+
+### Introduction
+
+本示例演示如何使用CSM Loop-Support VIs来实现While循环的连续DAQ采集的功能。单击Start开始连续采集,单击Stop(或触发高优先级错误)结束循环。作为比较,单击DAQ: Once运行单次采集。
+
+### Steps
+
+- Step1: 界面事件处理循环。
+ - Step1.1: 如果UI事件变得非常复杂,建议使用CSM DQMH-Style Template,可以将UI逻辑与其他CSM相关逻辑分开处理。您可以在LabVIEW 选板 -> CSM -> More Templates下找到此模板。
+ - Step1.2: 此外,已使用多循环支持API将状态从DQMH循环转发到CSM主循环。例如,在用户单击Start按钮后,"Macro:DAQ continuous"消息可以被转发到CSM主循环中进行进一步的逻辑处理。
+- Step2: 使用`CSM-Addon Logger Start File Logger.vi`来快速实现CSM全局事件文件记录功能。
+- Step3: CSM循环,用于处理界面的操作,及外部的响应,并实现具体的操作逻辑。
+ - Step3.1: 在DAQ分组中,实现对DAQ采集的具体操作逻辑。
+- Step4: 使用CSM Loop-Support VIs来实现While循环。
+ - Step4.1: `Define Loop States(s).vi`: 定义连续的状态,用"->"标记该循环检查状态,以便该消息字符串被连续处理。
+ - Step4.2: `Append Continuous States.vi`: 添加下一轮的状态,并通过参数将状态检查循环继续添加到状态队列中。
+ - Step4.3: `Remove Loop Tag to Break.vi`: 使用此VI移除标签,以便退出循环状态,本次循环相关的状态可以被正常处理。
+ - Step4.4: `Remove Loop Tag and Previous States to Break.vi`: 移除 标签,以及之前的所有状态,以便退出循环状态,本次循环相关的状态被移除。
+ - Step4.5: 需要添加延迟函数,控制循环的速率。
+- Step5: 可以看出,可以使用相同的状态,实现普通的单次采集。
diff --git a/src/help/NEVSTOP/Communicable State Machine(CSM)/Examples/CSM Basic Example(en-us).md b/src/help/NEVSTOP/Communicable State Machine(CSM)/Examples/CSM Basic Example(en-us).md
new file mode 100644
index 000000000..8838030e5
--- /dev/null
+++ b/src/help/NEVSTOP/Communicable State Machine(CSM)/Examples/CSM Basic Example(en-us).md
@@ -0,0 +1,338 @@
+# CSM Basic Example Description
+
+## Basic Concepts
+
+### 1. JKISM vs CSM.vi
+
+#### Overview
+
+CSM is a LabVIEW development framework designed according to the logic of the JKI State Machine (JKISM). Both frameworks use string-based message queues to implement core logic. This example demonstrates the extensions CSM builds upon JKISM.
+
+#### Introduction
+
+This example compares the code between the JKISM framework and the CSM framework. Both frameworks use string-based message queues to implement the core state machine.
+
+#### Steps
+
+Based on JKISM, CSM includes the following major extended features:
+
+- Step 1: CSM is a program framework, so it requires a module name.
+- Step 2: CSM redesigns the core string parsing engine.
+ - Step 2.1: JKISM uses `Parse State Queue.vi`, which only outputs the next state queue and its corresponding arguments (located after `>>`), primarily functioning as a "Dequeue Element" operation.
+ - Step 2.2: CSM uses `Parse State Queue++.vi`, which adds the following major features:
+ - Automatically creates/handles/destroys the queue/user event mechanism based on the state queue input, so the user only needs to provide the corresponding high-level string messages.
+ - Enables Inter-module/Inter-VI message transmission.
+ - Includes additional inputs, such as Dequeue Timeout, Response Timeout, and Allowed Messages, to implement more advanced functionality.
+- Step 3: CSM adds an internal state debugging log, `history.vi`, for better debugging and recording. The state history can be displayed directly on the front panel.
+- Step 4: CSM defines a series of string syntaxes to implement local/inter-module message transmission, such as synchronous messages, asynchronous messages, state creation/registration/unregistration, etc.
+ - Step 4.1: JKISM only defines local state transitions. It can carry an argument and comment.
+ - Step 4.2: CSM is a software framework, so it defines modules and message communication between modules.
+- Step 5: CSM defines some base states to handle the logical behavior of communication between modules.
+ - Step 5.1: "Critical Error" is used to handle unrecoverable errors.
+ - Step 5.2: "Target Timeout Error" is used to handle module message communication timeout errors.
+ - Step 5.3: "Target Error" is used to handle errors where the target module does not exist.
+ - Step 5.4: "Async Response" is used to handle replies to asynchronous messages.
+ - Step 5.5: "Response" is used to handle replies to synchronous messages.
+ - Step 5.6: "Async Message Posted" is used to handle operations after an asynchronous message is sent.
+ - Step 5.7: (Optional) Message events used in "Events: Register" and "Events: Unregister" are used to trigger a CSM module with an event structure to exit the structure.
+ - Step 5.8: (Optional) `` works with Step 5.7 to break out of the event structure and wait when an external message arrives.
+ - Step 5.9: (Optional) CSM recommends using API groups to provide external interfaces, but in reality, all cases can be called using messages.
+- Step 6: CSM additionally defines "Msg/Rsp's CSM" to locate the source module of external messages and states.
+- Step 7: Additional message information, such as the source message name and source arguments of a response, can be obtained here.
+- Step 8: CSM has preset message returns.
+- Step 9: CSM extends debugging tools. For details, please refer to the palette CSM -> CSM Debug Tools.
+
+### 2. Module Naming Rules.vi
+
+#### Overview
+
+Demonstrates the basic string naming rules for CSM modules. A valid CSM module name is a string that should not contain any of the following special characters: `~!@%^&*()\[\]{}+=|\\/?'"<>,.\t\r\n`. These characters are keywords reserved for other purposes within the CSM framework.
+
+#### Introduction
+
+This example demonstrates what constitutes a valid CSM module name by analyzing different scenarios.
+
+#### Steps
+
+- Step1: Regular module name.
+- Step2: Valid name containing spaces.
+- Step3: Name containing a colon (`:`).
+- Step4: Name containing a hash (`#`). In this case, the module name is valid, and the corresponding module operates in Worker Mode.
+- Step5: Name containing an underscore (`_`).
+- Step6: Name containing a hyphen (`-`).
+- Step7: Examples of invalid names containing reserved characters.
+- Step8: Name beginning with a dot (`.`). In this case, the module name is valid, and the corresponding module operates in System-Level Mode.
+- Step9: Shows a case where a dot (`.`) serves as an internal separator. In this case, the module name is valid and can be logically viewed as a Submodule.
+- Step10: Shows a case containing a dollar sign (`$`) followed by a number. In this case, the module name is valid, and the corresponding module operates in Chain Mode.
+
+### 3. Message Helper VI and Equivalent String.vi
+
+#### Overview
+
+Demonstrates the string syntax format for message communication within the CSM framework.
+
+#### Introduction
+
+This example explains the syntax format for inter-module message communication in CSM. You can use LabVIEW APIs to build these strings. If you are familiar with the message rules, you can create them manually. The syntax defined by CSM is as follows:
+
+```
+ //--- CSM State Syntax ---
+ // Local Message Example
+ DoSth: DoA >> Arguments
+
+ // Synchronous Call Example
+ API: xxxx >> Arguments -@ TargetModule
+
+ // Asynchronous Call Example
+ API: xxxx >> Arguments -> TargetModule
+
+ // Asynchronous Call (No Reply) Example
+ API: xxxx >> Arguments ->| TargetModule
+
+ // Broadcast Normal Status:
+ Status >> StatusArguments ->
+
+ // Broadcast Interrupt Status:
+ Interrupt >> StatusArguments ->
+
+ // Register Source Module's State to Handler Module
+ Status@Source Module >> API@Handler Module ->
+
+ // Unregister Source Module's State
+ Status@Source Module >> API@Handler Module ->
+
+ //--- CSM Comments ---
+ // To add a comment, use "//". All text to the right will be ignored.
+ UI: Initialize // Initialize UI
+ // Another comment line
+```
+
+#### Steps
+
+- Step1: Synchronous message. The sender waits in place for a reply until a timeout occurs or a reply is received.
+- Step2: Asynchronous message with reply. The sender continues to execute subsequent operations without waiting for a reply. After the receiver processes the message, it replies to the sender.
+- Step3: Asynchronous message without reply. The sender continues to execute subsequent operations without waiting for a reply. After the receiver processes the message, it does not reply to the sender.
+- Step4: Broadcast a normal status string.
+- Step5: Broadcast an interrupt or high-priority status string.
+- Step6: Register a state. When the state changes, the registered handler module message is automatically triggered.
+- Step7: Unregister a state. Cancels the message trigger upon state change.
+
+### 4.1 Arguments - Complex Data As Arguments.vi
+
+#### Overview
+
+This example demonstrates how other data types are converted to HEXSTR and passed as arguments.
+
+#### Introduction
+
+CSM arguments can only be represented as String types. The HEXSTR (0-9, A-F) format is the string representation used within the CSM framework to pass complex data types. It allows any data type to be used as an argument without interfering with CSM message string parsing. Additionally, `CSM - Argument Type.vi` retrieves the argument tag, which in this case is `HEXSTR`.
+
+The internal conversion logic involves converting any data type to a Variant, and then converting the memory content of the Variant into the HEXSTR format.
+
+Application scenarios include lossless transfer of any data type, such as clusters, arrays, structures, etc. However, large data volumes will result in excessively long message strings, affecting performance. Therefore, it is not suitable for scenarios like transferring large arrays or waveform data.
+
+#### Steps
+
+- Step1: Demonstrate converting a cluster to HEXSTR and restoring it.
+- Step2: Demonstrate converting a small data array to HEXSTR and restoring it.
+
+### 4.2 Arguments - Error As Arguments.vi
+
+#### Overview
+
+This example demonstrates how LabVIEW errors are passed as CSM arguments.
+
+#### Introduction
+
+This example converts a LabVIEW error cluster into a CSM-compatible error string. This allows the CSM core parsing engine to handle LabVIEW errors from the message queue and facilitates logging internal errors. The converted error string uses the following format: `[Error: error-code] error-description-As-safe-argument-string`. Additionally, `CSM - Argument Type.vi` retrieves the argument tag, which in this case is `ErrStr`.
+
+Application Scenario: Passing LabVIEW errors.
+
+#### Steps
+
+- Step1: Demonstrate converting an error to ErrStr and restoring it.
+- Step2: (Forward Compatibility) Demonstrate converting a previous ErrStr back to an error cluster.
+- Step3: Demonstrate converting a previous ErrStr back to an error cluster and obtaining the CSM-Argument Type.
+
+### 4.3 Arguments - Safe Arguments if it contains key words of CSM.vi
+
+#### Overview
+
+Demonstrates how to pass strings containing special characters as arguments.
+
+#### Introduction
+
+Since CSM uses text descriptions as arguments, parsing errors occur if the argument contains reserved CSM keywords. To solve this, CSM provides APIs to convert special characters in unsafe strings into safe strings for use in arguments.
+
+Application Scenario: Passing strings containing special characters.
+
+#### Steps
+
+- Step1: Demonstrate converting an unsafe string to a safe string and obtaining the CSM-Argument Type.
+- Step2: Demonstrate using a Windows file path as an argument.
+- Step3: Demonstrate using a URL as an argument.
+
+### 5. CSM Data Type.vi
+
+#### Overview
+
+Demonstrates the data type descriptions recommended by CSM.
+
+#### Introduction
+
+In the CSM framework, arguments can only be passed in the form of String types. To support various data types, data usually needs to go through a process of packing, transmission, and unpacking. For example, CSM internally provides support for the HEXSTR argument type, and users can also provide custom data type conversions via addons to suit their application scenarios.
+
+To support different data types, you sometimes need to pass data type descriptions to handle logic branches for different data types at the decoding stage. This example demonstrates the data type description method recommended by CSM and the corresponding APIs.
+
+### 6. Module Attributes.vi
+
+#### Overview
+
+Demonstrates how to use CSM Attributes. CSM Attribute is a mechanism within the CSM framework for storing module configurations. It is used to:
+
+- Provide a configuration method that does not require message access. External entities can directly read/write module attribute values via Module Name, Attribute Name, and Data Type.
+- Provide a data sharing mechanism for internal nodes of modules in Worker Mode and Chain Mode. Different nodes share the same Attribute space and can share data by reading/writing Attributes.
+
+#### Introduction
+
+This example demonstrates how to dynamically interact with CSM module attributes using VIs outside the CSM framework. The core function of this example is to dynamically set a random numeric value to a CSM module from outside that module, and then retrieve that value from the CSM module and display it on the UI.
+
+#### Steps
+
+- Step1: This is a CSM module created from a template, named "CSM".
+- Step2: Add a new state string line after `Macro:Initialize`, specifically `API: Define ABC Attribute`.
+- Step3: In `API: Define ABC Attribute`, set the module attribute: `abc` as the attribute and a random number as the value.
+- Step4: Set the module attribute from outside the CSM module: `abc` as the attribute and a random number as the value.
+- Step5: Read the module attribute from outside the CSM module: `abc` as the attribute.
+- Step6: Send a synchronous message from outside the CSM module to stop the CSM module.
+
+### 7. System-Level Module.vi
+
+#### Overview
+
+Demonstrates how to create a system-level module and explains the difference between system-level modules and regular CSM modules when listing all active modules.
+
+#### Introduction
+
+System-level modules have a "." added as a prefix to their name, marking them as system-level modules. Functionally, system-level modules are identical to regular modules and can perform message communication and state registration. The difference is that system-level modules are not automatically listed in the active module list. This means that in normal logic scheduling, system-level modules will not be directly called and can only be triggered by explicit message transmission.
+
+Therefore, system-level modules are typically used to implement global background functions, such as scheduling modules in TCP programs.
+
+This example demonstrates this distinction.
+
+#### Steps
+
+- Step1: Use the Advanced VIs to create a system-level module name by adding "." as a prefix to the CSM name. If you are familiar with the rules, you can also enter the corresponding name string and rule symbol directly without calling this API.
+- Step2: Synchronously call several "regular"/non-system-level CSM modules.
+- Step3: (Optional) Check if the CSM module name is valid. For more details, refer to the code of another example named `Module Naming Rules.vi`.
+- Step4: Wait for 1 second to ensure all modules finish starting.
+- Step5: List all active CSM modules. By default, system-level modules are not listed. By using the Advanced VIs, you can separate system-level modules from other regular modules for more efficient code development, debugging, etc.
+- Step6: Use unified logic to send the "Macro:Exit" message to all active regular CSM modules to stop them.
+- Step7: You can still send messages to system-level modules, such as sending the "Macro:Exit" message, to stop the system-level module.
+
+## Create a reuse Module
+
+### CSM Reuse Module.vi
+
+#### Overview
+
+In the CSM framework, creating a reusable module usually does not require message interaction with other modules. You only need to provide external interfaces and publish the module's state changes. Therefore, as long as these two aspects are clearly described, the reusable module can be called even without knowledge of its internal implementation details. This example demonstrates how to create a reusable module that checks if random data exceeds a user-defined threshold.
+
+In a CSM module, all case branches can be considered callable messages, but it is recommended to use API groups as external interfaces. When state updates need to be sent, Status or Interrupt Status can be sent to notify external modules of internal state changes.
+
+#### Introduction
+
+This example demonstrates a CSM module whose function is to generate a random number every second and compare that number with a user-defined threshold. When the generated random number exceeds the threshold, an update is broadcast.
+
+#### Steps
+
+- Step1: Drag and drop the CSM Template from the palette.
+- Step2: Add Level to Internal Data. The default value is 0.5.
+- Step3: Create "DoSth: Check If Greater than 0.5" to implement the core functionality.
+ - Step3.1: Compare random data and update the UI.
+ - Step3.2: Publish the "Status Changed" status when random data exceeds the level.
+- Step4: Change the Timeout to a shift register. It will be used to start/stop timeout events. Wire Timeout in every case.
+- Step5: In the Timeout Event, add "DoSth: Check If Greater than 0.5" to the State Queue.
+- Step6: Create APIs for this module.
+ - Step6.1: Create "API: Start" to change the timeout to 0.5, which will trigger "DoSth: Check If Greater than 0.5" every second. In this case, broadcast the "Check Started" status.
+ - Step6.2: Create "API: Stop" to change the timeout to -1, which will stop the checking. The "Check Stopped" status will be broadcast.
+ - Step6.3: Create "API: Set Level" to change the Level setting.
+ - Step6.4: Create "API: Get Level" to retrieve the current Level from the outside.
+- Step7: Create local test buttons/controls.
+ - Step7.1: Create a Level control and call "API: Set Level" to change the level setting locally.
+ - Step7.2: Create a Start button and call "API: Start" to begin checking locally.
+ - Step7.3: Create a Stop button and call "API: Stop" to stop checking locally.
+- Step8: Correctly update the UI where appropriate.
+ - Step8.1: Initialize the UI at startup.
+ - Step8.2: Comment out `UI: Front Panel State >> Open` in "Macro: Initialize". When working as a submodule, the UI will automatically hide instead of popping up.
+
+## Caller is CSM Scenario
+
+### CSM Example - Caller is a CSM.vi
+
+#### Overview
+
+Demonstrates how to call a CSM module within the CSM framework. This example synchronously calls two instances of the CSM Reuse Module VI, implementing dynamic state subscription and module control via API.
+
+#### Introduction
+
+Demonstrates how to call a CSM module within the CSM framework. In this example, inter-module communication is performed via message string queue operations. You can use the Build Message with Arguments++ VI to generate message strings. If you are familiar with the format, you can also use message description strings directly.
+
+This example synchronously calls two instances of the CSM Reuse Module VI, implementing dynamic state subscription and module control via API.
+
+#### Steps
+
+- Step1: Drag and drop a CSM User Interface (UI) Module Template from the LabVIEW palette and change the CSM Name to "CSMScenarioExample".
+- Step2: Synchronously call CSM Reuse Module VI twice, naming them SubModule0 and SubModule1, respectively. For more details on creating such reusable CSM modules, refer to CSM example named `1. Create a reuse Module`.
+- Step3: Add a new custom message string line, "Macro: Switch Active Module", as the last line to the existing standard string queue under the "Macro:Initialize" case so that you can switch between different submodules.
+- Step4: Add a string constant SubModule0 for internal data initialization. You can add more code here for further custom internal data initialization.
+- Step5: Add a string control (Combo Box) in the UI to switch and display the active/target module.
+ - Step5.1: Under the "'Target Module': Value Change" UI event, set the string control to the active module internal data.
+ - Step5.2: Use "Macro: Switch Active Module" again to update the active module.
+- Step6: Under the "Macro: Switch Active Module" case, use the Advanced VIs to send an inter-module synchronous message "API: Get Level -@ modulename" to the active submodule. Alternatively, if you are familiar with CSM string syntax rules, you can manually type the string constant.
+- Step7: Now the state queue is empty, and the CSM state machine is waiting in the Timeout UI event under ''", "Event Structure", "Idle". The next step depends on the user-provided UI interaction.
+- Step8: Create local test buttons/controls in the UI as follows:
+ - Step8.1: Create an API:Start button. When the user clicks this button, an asynchronous no-reply message "API: Start -> modulename" will be sent to start the active submodule.
+ - Step8.2: Create a Register All Status Change button. When the user clicks this button, this CSM module will register the following broadcast/interrupt message from the active submodule: "Status Changed@* >> Action: Status Change Handler ->\".
+ - Step8.3: Create an Unregister All Status Change button. When the user clicks this button, this CSM module will unregister the following broadcast/interrupt message from the active submodule: "Status Changed@* >> Action: Status Change Handler ->\".
+ - Step8.4: This is used to break out of the event structure when a message is received to handle state changes.
+ - Step8.5: Create an API:Stop button. When the user clicks this button, an asynchronous no-reply message "API: Stop -> modulename" will be sent to stop the active submodule.
+ - Step8.6: Create a Level DBL control. When the user changes the value, an asynchronous message "API: Set Level >> 0.3 ->| modulename" will be sent to the active submodule.
+ - Step8.7: Create an API: Get Level(Async) button. When the user clicks this button, an asynchronous message "API: Get Level -> modulename" will be sent to the active submodule. The "Async Message Posted" and "Async Response" cases will be processed accordingly. In this example, the Level display will be updated.
+ - Step8.8: Create a UI: create Front Panel State >> Open button. When the user clicks this button, an asynchronous message with no reply "UI: Front Panel State >> Open ->| modulename" will be sent to the active submodule.
+ - Step8.9: Create a UI: create Front Panel State >> Close button. When the user clicks this button, an asynchronous message with no reply "UI: Front Panel State >> Close ->| modulename" will be sent to the active submodule.
+- Step9: Under the "Panel Close?" UI event, add two new string messages before "Macro:Exit": "Macro: Exit -@ SubModule0" and "Macro: Exit -@ SubModule1", so that you can safely close all CSM submodules before finally closing the CSM caller/main module.
+
+## Caller is Other Framework Scenario
+
+### CSM Example - Caller is NOT a CSM.vi
+
+#### Overview
+
+Demonstrates how to call a CSM module from another framework application. This example asynchronously calls two instances of the CSM Reuse Module VI, implementing dynamic message subscription and module control via API.
+
+#### Introduction
+
+Demonstrates how to call a CSM module from another framework application. In this example, inter-module communication is implemented using the Post/Send Message API and module state change user events.
+
+This example asynchronously calls two instances of the CSM Reuse Module VI, implementing dynamic message subscription and module control via API.
+
+#### Steps
+
+- Step1: In the 100ms-UI event timeout, check if any CSM modules are running/existing.
+- Step2: Start and stop CSM submodules.
+ - Step2.1: Asynchronously call the selected CSM submodule.
+ - Step2.2: Send an asynchronous message (no reply) to the selected CSM submodule to stop/exit the CSM submodule. This API can be found under LabVIEW Palette -> Communicable State Machine(CSM) -> API -> Non-CSM Caller Support.
+- Step3: Register and unregister state changes.
+ - Step3.1: Get the state change event refnum from the selected submodule and register it. This API can be found under LabVIEW Palette -> Communicable State Machine(CSM) -> API -> Non-CSM Caller Support.
+ - Step3.2: Unregister User Event. Use the Non-CSM Caller Support API to destroy and release the State Change Event Refnum. This API can be found under LabVIEW Palette -> Communicable State Machine(CSM) -> API -> Non-CSM Caller Support.
+- Step4: API Calls.
+ - Step4.1: Send an asynchronous message (no reply) to the selected submodule: "API:start". This Advanced API can be found under LabVIEW Palette -> Communicable State Machine(CSM) -> API -> Non-CSM Caller Support.
+ - Step4.2: Send an asynchronous message (no reply) to the selected submodule: "API:stop".
+ - Step4.3: Send an asynchronous message (no reply) to the selected submodule: "UI: Front Panel State >> Open". This Advanced API can be found under LabVIEW Palette -> Communicable State Machine(CSM) -> API -> Non-CSM Caller Support.
+ - Step4.4: Send an asynchronous message (no reply) to the selected submodule: "UI: Front Panel State >> Close".
+ - Step4.5: Send a synchronous message and wait for the return message, in this case, the level value: "API: Get Level". This Advanced API can be found under LabVIEW Palette -> Communicable State Machine(CSM) -> API -> Non-CSM Caller Support.
+ - Step4.6: Send a synchronous message and wait for the return message: "API: Set Level >> value". This Advanced API can be found under LabVIEW Palette -> Communicable State Machine(CSM) -> API -> Non-CSM Caller Support.
+- Step5: Handle submodule state change events.
+ - Step5.1: After registering the state change event, you can handle this event here. For example, printing the user event data to the state history, which is also displayed directly on the UI.
+- Step6: Program Exit. In the "Panel close?" UI event, send a synchronous message "Macro: Exit" to all submodules and wait for all submodules to exit.
diff --git a/src/help/NEVSTOP/Communicable State Machine(CSM)/Examples/CSM Basic Example(zh-cn).md b/src/help/NEVSTOP/Communicable State Machine(CSM)/Examples/CSM Basic Example(zh-cn).md
new file mode 100644
index 000000000..f248f40e4
--- /dev/null
+++ b/src/help/NEVSTOP/Communicable State Machine(CSM)/Examples/CSM Basic Example(zh-cn).md
@@ -0,0 +1,360 @@
+# CSM Basic Example Description
+
+## Basic Concepts
+
+### 1. JKISM vs CSM.vi
+
+#### Overview
+
+CSM是仿照JKISM逻辑设计的LabVIEW程序开发框架,两个框架都使用基于字符串的消息队列来实现核心逻辑。本示例用于演示CSM基于JKISM的拓展。
+
+#### Introduction
+
+本示例比较JKISM框架和CSM框架之间的代码。两个框架都使用基于字符串的消息队列来实现核心状态机。
+
+#### Steps
+
+基于JKISM,CSM具有以下主要扩展功能:
+
+- Step1: CSM是一个程序框架因此它需要模块的名称。
+- Step2: 重新设计了核心字符串解析引擎。
+ - Step2.1: JKISM使用Parse State Queue.vi,它只输出下一个状态队列及其对应的参数(位于 >> 之后),主要用作“出队元素”。
+ - Step2.2: CSM 使用Parse State Queue++.vi额外添加了以下主要功能:
+ \- 基于状态队列输入自动创建/处理/销毁队列/用户事件机制,因此用户只需给出相应的高级字符串消息。
+ \- 模块间/VI 间的消息可以被传输。
+ \- 额外的输入,如Dequeue Timeout、Response Timeout 和 Allowed Messages,用于实现更高级的功能。
+
+- Step3: CSM添加了一个内部状态调试日志`history.vi`用于更好的调试和记录,状态历史可以直接显示在前面板上。
+- Step4: CSM定义了一系列字符串语法来实现本地/模块间消息传输,例如同步消息、异步消息、状态创建/注册/注销等。
+ - Step4.1: JKISM只定义了本地状态的轮转。它可以携带一个参数以及注释。
+ - Step4.2: CSM是一个软件框架,因此它定义了模块。以及模块之间的消息通讯。
+
+- Step5: CSM定义了一些基础的状态,用于处理模块之间通讯的逻辑行为。
+ - Step5.1: "Critical Error"用于处理一些无法恢复的错误。
+ - Step5.2: "Target Timeout Error"用于处理模块消息通讯超时的错误。
+ - Step5.3: "Target Error"用于处理模块不存在的错误。
+ - STEP5.4: "Async Response"用于处理异步消息的回复。
+ - Step5.5: ”Response"用于处理同步消息的回复。
+ - Step5.6: "Async Message Posted"用于处理异步消息发送后的操作。
+ - Step5.7: (Optional)"Events: Register"和"Events: Unregister"中使用的消息事件,用于触发带有Event Structure的CSM模块跳出。
+ - Step5.8: (Optional)""配合Step5.7实现在外部消息到来后,跳出事件结构等待
+ - Step5.9: (Optional)CSM推荐使用API分组提供对外的接口,但是实际上所有的分支都可以使用消息调用。
+
+- Step6: CSM额外定义了"Msg/Rsp's CSM"用于定位外部消息、状态的来源模块
+- Step7: 额外的消息信息,如Response的源消息名称、源参数等,可以由此获得。
+- Step8: CSM预置了消息返回.
+- Step9: CSM扩展了调试工具,详情请参阅选板 CSM->CSM Debug Tools。
+
+### 2. Module Naming Rules.vi
+
+#### Overview
+
+演示CSM模块名称的基本字符串命名规则。一个有效的CSM模块名称是一个字符串,不应包含以下任何特殊字符: `~!@%^&*()\[\]{}+=|\\/?'"<>,.\t\r\n`。这些字符是CSM框架内保留用于其他目的的关键字。
+
+#### Introduction
+
+通过不同情况的分析,展示一个有效的CSM模块名称是怎样的.
+
+#### Steps
+
+- Step1: 展示普通模块名称的情况。
+- Step2: 展示有空格模块的情况。
+- Step3: 这是有: 的情况。
+- Step4: 展示有#的情况。这个时候是模块名称是正确的,这个时候对应模块工作在worker模式。
+- Step5: 展示有_的情况。
+- Step6: 展示有-的情况。
+- Step7: 展示几种包含特殊字符的错误情况。
+- Step8: 展示以.开头的情况,这个时候是模块名称是正确的,这个时候对应的模块工作在系统级别模式
+- Step9: 展示.在内部起分隔符的情况,这个时候是模块名称是正确的,从逻辑上可以看作是一个子模块。
+- Step10: 展示包含$且之后是数字的情况,这个时候是模块名称是正确的,这个时候对应的模块工作在Chain模式。
+
+### 3. Message Helper VI and Equivalent String.vi
+
+#### Overview
+
+演示CSM框架内消息通信的字符串语法格式。
+
+#### Introduction
+
+本示例解释了CSM模块间消息通信的语法格式,您可以使用LabVIEW API来构建这些字符串,或者如果您熟悉消息规则,也可以手动创建这些字符串。CSM定义的语法如下:
+
+```
+ //--- CSM 状态语法 ---
+ // 本地消息示例
+ DoSth: DoA >> 参数
+
+ // 同步调用示例
+ API: xxxx >> 参数 -@ TargetModule
+
+ // 异步调用示例
+ API: xxxx >> 参数 -> TargetModule
+
+ // 无应答异步调用示例
+ API: xxxx >> 参数 ->| TargetModule
+
+ // 广播正常状态:
+ Status >> StatusArguments ->
+
+ // 广播中断状态:
+ Interrupt >> StatusArguments ->
+
+ // 将源模块的状态注册到处理程序模块
+ Status@Source Module >> API@Handler Module ->
+
+ // 取消注册源模块的状态
+ Status@Source Module >> API@Handler Module ->
+
+ //--- CSM 注释 ---
+ // 要添加注释,请使用 "//",右边的所有文本将被忽略。
+ UI: Initialize // 初始化 UI
+ // Another comment line
+```
+
+#### Steps
+
+- Step1: 同步消息。发送方会原地等待回复,直到超时或收到回复。
+- Step2: 带回复的异步消息。发送方会继续执行后续操作,而不会等待回复;接收方处理完消息后,会回复发送方。
+- Step3: 不带回复的异步消息。发送方会继续执行后续操作,而不会等待回复;接收方处理完消息后,不会回复发送方。
+- Step4: 广播一个正常的状态字符串。
+- Step5: 广播一个中断或高优先级的状态字符串
+- Step6: 注册一个状态, 当状态发生变化时, 会自动触发所注册的处理程序模块的消息。
+- Step7: 注销一个状态,取消注册状态变化触发的消息。
+
+
+
+### 4.1 Arguments - Complex Data As Arguments.vi
+
+#### Overview
+
+本范例用于展示其他的数据类型如何转换为HEXSTR作为参数传递。
+
+#### Introduction
+
+CSM的参数表现形式只能为String类型。HEXSTR (0-9, A-F)格式是CSM框架内用于传递复杂数据类型的字符串表示形式。 它可以将任意数据类型作为参数使用,而不会干扰CSM消息字符串的解析。此外,CSM-Argument Type.vi获取参数标记,在本例中为`HEXSTR`。
+
+内部的转换逻辑为: 将任意数据类型转换为变体(variant),然后将变体的内存内容转换为HEXSTR格式。
+
+应用场景: 任意数据类型的无损传递,例如: 簇、数组、结构体等。但是数据量较大时,会导致消息字符串过长,影响性能,因此不适用于传递大数组或波形数据等场景。
+
+#### Steps
+
+- Step1: 展示将簇转换为HEXSTR并还原。
+- Step2: 展示将少量数据的数组,转换为HEXSTR并还原。
+
+
+
+### 4.2 Arguments - Error As Arguments.vi
+
+#### Overview
+
+本范例用于展示LabVIEW错误如何作为CSM参数传递。
+
+#### Introduction
+
+本示例将LabVIEW错误簇转换为CSM兼容的错误字符串,这允许CSM核心解析引擎处理来自消息队列的LabVIEW错误,也便于在日志中记录内部发生的错误。转换后的错误字符串使用以下格式: `[Error: error-code] error-description-As-safe-argument-string`。此外,`CSM-Argument Type.vi`获取参数标记,在本例中为 `ErrStr`。
+
+应用场景: 传递LabVIEW 错误。
+
+#### Steps
+
+- Step1: 展示将错误转换为 ErrStr 并还原。
+- Step2: (向前兼容)展示将之前的 ErrStr 转换为错误簇。
+- Step3: 展示将将之前的ErrStr转换为错误簇,并获取CSM-Argument Type。
+
+
+
+### 4.3 Arguments - Safe Arguments if it contains key words of CSM.vi
+
+#### Overview
+
+演示如何将包含特殊字符的字符串作为参数传递。
+
+#### Introduction
+
+由于CSM使用文本描述作为参数,因此如果参数中包含CSM的保留关键字,就会导致解析错误。为了解决这个问题,CSM会提供API将不安全的字符串中的特殊字符转换为安全的字符串,用于参数中的传递。
+
+应用场景: 传递包含特殊字符的字符串。
+
+#### Steps
+
+- Step1: 展示将不安全的字符串转换为安全的字符串,并获取CSM-Argument Type。
+- Step2: 展示Windows文件路径作为参数的情况。
+- Step3: 展示网址作为参数的情况。
+
+
+
+
+### 5. CSM Data Type.vi
+
+#### Overview
+
+展示CSM推荐的数据类型描述。
+
+#### Introduction
+
+CSM框架中,参数的只能以String类型的表现形式进行传递。为了支持各种不同的数据类型,通常数据都需要经过打包、传递、解包的过程。例如CSM内部就提供了 HEXSTR格式的参数类型支持,用户也可以通过addon 的形式,提供符合应用场景的自定义数据类型转换。
+
+为了支持不同的数据类型,有的时候需要传递数据类型描述,用于在解码处处理不同数据类型的的逻辑分支。本示例展示了CSM推荐的数据类型描述方式即对应的API.
+
+
+
+### 6. Module Attributes.vi
+
+#### Overview
+
+演示CSM Attribute的使用方法。CSM Attribute是CSM框架内用于存储模块配置的一种机制。它被用于:
+
+- 提供一种无需消息访问的配置方法,外部通过模块名称、属性名称、数据类型即可直接读写模块的属性值。
+- 提供一种Worker模式、Chain模式模块内部节点数据共享的机制。不同的节点共享同一个Attribute空间,节点可以通过读写Attribute来实现数据共享。
+
+#### Introduction
+
+本示例演示如何使用CSM框架之外的VI动态地与CSM模块属性交互。本示例的核心功能是从CSM模块外部动态设置另一个随机数值到CSM模块,然后从CSM模块获取该值并在UI上显示。
+
+#### Steps
+
+- Step1: 这是一个从模板建立的CSM模块,名称为“CSM”。
+- Step2: 在Macro:Initialize之后添加一行新的状态字符串,即API: Define ABC Attribute。
+- Step3: API: Define ABC Attribute中设置模块属性: abc 作为属性,一个随机数作为值。
+- Step4: 从CSM模块外部可以设置模块属性: abc作为属性,一个随机数作为值。
+- Step5: 从CSM模块外部可以读取模块属性: abc作为属性。
+- Step6: 从CSM模块外部发送同步消息以停止CSM模块。
+
+
+
+### 7. System-Level Module.vi
+
+#### Overview
+
+演示如何创建系统级模块,并说明在列出所有活动模块时,系统级模块与常规CSM模块之间的区别。
+
+#### Introduction
+
+系统级(SystemLevel)模块系统级模块的名称前会添加一个“.”作为前缀,标记为系统级模块。功能上与普通模块无异,可以进行消息通讯和状态订阅。他们之间的区别在于系统级的模块,不会自动被列出在活动模块列表中。这样在普通的逻辑调度中,系统级模块不会被直接调用,只能通过显式的消息发送,才能被触发。
+
+因此系统级模块通常用于实现一些全局的后台功能,例如 TCP程序中的调度模块等。
+
+本范例就用于展示这个区别。
+
+#### Steps
+
+- Step1: 使用高级API VI创建一个系统级模块名称(在CSM名称前添加“.”作为前缀,标记为系统级模块)。如果您熟悉规则,也可以直接输入相应的名称字符串和规则符号,而无需调用此API。
+- Step2: 同步调用几个“普通”/非系统级的CSM模块。
+- Step3: (Optional) 检查CSM模块名称是否有效,更多详情请参阅另一个名为Module Naming Rules.vi的示例代码。
+- Step4: 等待1s, 确保所有模块完成启动。
+- Step5: 列出所有活动的CSM模块,默认情况下不会列出系统级模块。通过使用这种高级 VI,我们可以将系统级模块与其他常规模块分开,以便更好地进行代码开发、调试等。
+- Step6: 使用统一的逻辑,发送“Macro:Exit”消息给所有活动的普通CSM模块,以停止所有这些模块。
+- Step7: 依然可以使用发送消息给系统级模块,例如发送Macro:Exit消息,以停止系统级模块。
+
+
+
+## Create a reuse Module
+
+### CSM Reuse Module.vi
+
+#### Overview
+
+CSM框架中,创建一个可重用模块通常不需要与其他模块进行消息交互,只需提供外部接口并发布模块的状态变化。因此,只要这两个方面描述清晰,即使不了解内部实现细节,也能调用该可重用模块。本范例用于展示如何创建一个可重用模块,该模块用于检查随机数据是否超过用户定义的阈值。
+
+在CSM模块中,所有case分支都可被视为可调用的消息,但建议使用API分组作为外部接口。当需要发送状态更新时,可以通过发送Status或Interrupt Status来通知外部模块内部的状态变化。
+
+#### Introduction
+
+本示例描述编写的一个CSM模块,它的功能是每秒生成一个随机数,并将该数字与用户定义的阈值进行比较。当生成的随机数超过阈值时,广播一个更新。
+
+#### Steps
+
+- Step1: 从选板拖放CSM模板。
+- Step2: 将Level添加到Internal Data中。默认值为0.5。
+- Step3: 创建"DoSth: Check If Greater than 0.5"。在此实现核心功能。
+ - Step3.1: 比较随机数据并更新UI。
+ - Step3.2: 当随机数据超过level时,发布 "Status Changed" 状态。
+- Step4: 将Timeout更改为移位寄存器。它将用于启动/停止超时事件。在每种情况下连接Timeout的连线。
+- Step5: 在Timeout Event中,将"DoSth: Check If Greater than 0.5"添加到 State Queue。
+- Step6: 为此模块创建API。
+ - Step6.1: 创建"API: Start"将Timeout更改为0.5 s,这将每秒触发一次"DoSth: Check If Greater than 0.5"。在这种情况下,将广播"Check Started"状态。
+ - Step6.2: 创建"API: Stop"将Timeout更改为-1,这将停止检查。"Check Stopped"状态将被广播。
+ - Step6.3: 创建"API: Set Level"以更改Level设置。
+ - Step6.4: 创建"API: Get Level"以从外部获取当前Level。
+- Step7: 创建本地测试按钮/控件
+ - Step7.1: 创建Level控件,调用"API: Set Level"以在本地更改level设置。
+ - Step7.2: 创建Start按钮,调用"API: Start"以在本地开始检查。
+ - Step7.3: 创建Stop按钮,调用"API: Stop"以在本地开始检查。
+- Step8: 在适当的情况下正确更新UI。
+ - Step8.1: 启动时初始化UI。
+ - Step8.2: 注释掉"Macro: Initialize"中的`UI: Front Panel State >> Open`。当它作为子模块工作时,UI将自动隐藏而不是弹出。
+
+
+
+## Caller is CSM Scenario
+
+### CSM Example - Caller is a CSM.vi
+
+#### Overview
+
+演示如何在CSM框架内调用CSM模块。本示例同步调用CSM Reuse Module VI的两个实例,通过API实现动态状态订阅和模块控制。
+
+#### Introduction
+
+演示如何在CSM框架内调用CSM模块。在本示例中,模块间通信通过消息字符串队列操作执行。您可以使用Build Message with Arguments++ VI 生成消息字符串,或者如果您熟悉格式,也可以直接使用消息描述字符串。
+
+本示例同步调用CSM Reuse Module VI的两个实例,通过API实现动态状态订阅和模块控制。
+
+#### Steps
+
+- Step1: 从LabVIEW选板拖放一个CSM User Interface (UI) Module Template,将CSM名称更改为"CSMScenarioExample"。
+- Step2: 同步调用CSM Reuse Module VI两次,并分别命名为SubModule0和SubModule1。有关如何创建此类可重用CSM模块的更多详细信息,请参阅另一个名为`1. Create a reuse Module`的CSM示例。
+- Step3: 在"Macro:Initialize"case下的现有标准字符串队列中添加一行新的自定义消息字符串,即"Macro: Switch Active Module",作为最后一行,以便在不同的子模块之间切换。
+- Step4: 为内部数据初始化添加一个字符串常量SubModule0。对于更多自定义的内部数据初始化,您可以在此处添加更多代码。
+- Step5: 在UI中添加一个字符串控件(Combo Box),用于切换和显示活动/目标模块。
+ - Step5.1: 在" 'Target Module': Value Change" UI事件下,将字符串控件设置为活动模块内部数据。
+ - Step5.2: 同样使用“Macro: Switch Active Module”,更新活动模块。
+- Step6: 在"Macro: Switch Active Module" case下,使用高级VI向活动子模块发送模块间同步消息"API: Get Level -@ modulename"。或者,如果您熟悉CSM字符串语法规则,也可以手动键入字符串常量。
+- Step7: 现在状态队列为空,CSM 状态机正在' "", "Event Structure", "Idle" '下的超时UI事件中等待。下一步取决于用户提供的UI交互。
+- Step8: 在UI中创建本地测试按钮/控件如下:
+ - Step8.1: 创建API:Start按钮,当用户单击此按钮时,将发送一条异步无回复消息"API: Start -> modulename"以启动活动的子模块。
+ - Step8.2: 创建Register All Status Change按钮,当用户单击此按钮时,此CSM模块将从活动子模块注册以下广播/中断消息"Status Changed@* >> Action: Status Change Handler ->\"。
+ - Step8.3: 创建Unregister All Status Change按钮,当用户单击此按钮时,此CSM模块将从活动子模块注销以下广播/中断消息"Status Changed@* >> Action: Status Change Handler ->\"。
+ - Step8.4: 此处用于收到消息时跳出事件结构,以处理状态更改。
+ - Step8.5: 创建API:Stop按钮,当用户单击此按钮时,将发送一条异步无回复消息"API: Stop -> modulename"以停止活动的子模块。
+ - Step8.6: 创建Level DBL控件,当用户更改值时,将向活动子模块发送一条异步消息"API: Set Level >> 0.3 ->| modulename"。
+ - Step8.7: 创建API: Get Level(Async)按钮,当用户单击此按钮时,将向活动子模块发送一条异步消息"API: Get Level -> modulename"。相应地处理"Async Message Posted"和"Async Response" case,在本示例中Level显示将被更新。
+ - Step8.8: 创建UI: create Front Panel State >> Open按钮,当用户单击该按钮时,将向活动子模块发送一条带无回复的异步消息"UI: Front Panel State >> Open ->| modulename"。
+ - Step8.9: 创建UI: create Front Panel State >> Close按钮,当用户单击该按钮时,将向活动子模块发送一条带无回复的异步消息"UI: Front Panel State >> Close ->| modulename"。
+- Step9: 在"Panel Close?" UI事件下,在"Macro:Exit"之前添加两个新的字符串消息: "Macro: Exit -@ SubModule0"和"Macro: Exit -@ SubModule1",以便在最终关闭CSM 调用者/主模块之前安全地关闭所有CSM子模块。
+
+
+
+## Caller is Other Framework Scenario
+
+### CSM Example - Caller is NOT a CSM.vi
+
+#### Overview
+
+演示如何从另一个框架应用程序调用CSM模块。本示例异步调用CSM Reuse Module VI的两个实例,通过API实现动态消息订阅和模块控制。
+
+#### Introduction
+
+演示如何从另一个框架应用程序调用CSM模块。在本示例中,模块间通信是使用Post/Send Message API和模块状态更改用户事件来实现的。
+
+本示例异步调用CSM Reuse Module VI的两个实例,通过API实现动态消息订阅和模块控制。
+
+#### Steps
+
+- Step1: 在100ms-UI事件超时中,检查是否有任何CSM模块正在运行/存在。
+- Step2: 启动和停止CSM子模块。
+ - Step2.1: 异步调用选定的CSM子模块。
+ - Step2.2: 向选定的CSM 子模块发送异步消息(无回复)以停止/退出CSM子模块。该高级API可在LabVIEW选板 -> Communicable State Machine(CSM) -> API -> Non-CSM Caller Support下找到。
+- Step3: 注册和注销状态更改。
+ - Step3.1: 从所选子模块获取状态更改事件句柄并注册它。该高级API可在LabVIEW选板 -> Communicable State Machine(CSM) -> API -> Non-CSM Caller Support下找到。
+ - Step3.2: 注销用户事件,销毁并释放状态更改事件句柄。该高级API可在LabVIEW选板 -> Communicable State Machine(CSM) -> API -> Non-CSM Caller Support下找到。
+- Step4. API 调用。
+ - Step4.1: 向所选子模块发送异步消息(无回复): "API:start"。该高级API可在LabVIEW 选板 -> Communicable State Machine(CSM) -> API -> Non-CSM Caller Support下找到。
+ - Step4.2: 向所选子模块发送异步消息(无回复): "API:stop"。
+ - Step4.3: 向所选子模块发送异步消息(无回复): "UI: Front Panel State >> Open"。该高级API可在LabVIEW选板 -> Communicable State Machine(CSM) -> API -> Non-CSM Caller Support下找到。
+ - Step4.4: 向所选子模块发送异步消息(无回复): "UI: Front Panel State >> Close"。
+ - Step4.5: 发送同步消息并等待返回消息,在本例中为level值: "API: Get Level"。该高级API可在LabVIEW选板 -> Communicable State Machine(CSM) -> API -> Non-CSM Caller Support下找到。
+ - Step4.6: 发送同步消息并等待返回消息: "API: Set Level >> value"。该高级API可在LabVIEW选板 -> Communicable State Machine(CSM) -> API -> Non-CSM Caller Support下找到。
+- Step5: 处理子模块的状态更改事件。
+ - Step5.1: 注册状态更改事件后,您可以在此处处理此事件。例如,将用户事件数据打印到状态历史记录中,该历史记录也直接显示在UI上。
+- Step6: 程序退出。在"Panel close?" UI事件中,给所有的子模块发送同步消息Macro: Exit, 等待所有子模块退出。
diff --git a/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description(en)/VI Description(en) - 01. Templates.md b/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description(en)/VI Description(en) - 01. Templates.md
deleted file mode 100644
index 69b2151f5..000000000
--- a/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description(en)/VI Description(en) - 01. Templates.md
+++ /dev/null
@@ -1,117 +0,0 @@
-# CSM API
-
-## Templates
-
-> [!NOTE] CSM Name Rules
-> - The CSM module name must be unique to avoid entering the "Critical Error" state.
-> - If the input is "", a UUID will be used as the module name. This module will operate in independent mode and will not be listed in the module list.
-> - If the input ends with '#', the module will run in work mode. Modules with the same name will share the same message queue. External messages will be handled by the idle module.
-
-> [!NOTE] CSM Initialization State
-> - The default value is "Macro: Initialize", consistent with the JKISM state machine.
-> - This state is typically not modified and is provided to facilitate external programmatic changes to the initialization state.
-
-### CSM Module Template.vi
-
-Creates a template for a CSM module without a user interface.
-
-> Ref: CSM Name Rules
-> Ref: CSM Initialization State
-
--- Controls --
-- Name("" to use uuid): CSM Module Name
-- Init State("Macro: Initialize"): Initialization State, default is "Macro: Initialize"
-
-### CSM User Interface(UI) Module Template.vi
-
-Creates a template for a CSM module with a user interface, including a user event structure to respond to user actions.
-
-> Ref: CSM Name Rules
-> Ref: CSM Initialization State
-
--- Controls --
-- Name("" to use uuid): CSM Module Name
-- Init State("Macro: Initialize"): Initialization State, default is "Macro: Initialize"
-
-### CSM Module Template - Tiny.vi
-
-Creates a compact template for a CSM module without a user interface.
-
-> Ref: CSM Name Rules
-> Ref: CSM Initialization State
-
--- Controls --
-- Name("" to use uuid): CSM Module Name
-- Init State("Macro: Initialize"): Initialization State, default is "Macro: Initialize"
-
-### CSM User Interface(UI) Module Template - Tiny.vi
-
-Creates a compact template for a CSM module with a user interface, including a user event structure to respond to user actions.
-
-> Ref: CSM Name Rules
-> Ref: CSM Initialization State
-
--- Controls --
-- Name("" to use uuid): CSM Module Name
-- Init State("Macro: Initialize"): Initialization State, default is "Macro: Initialize"
-
-### Template Support VIs
-
-#### CSM - Get New State Notifier Event.vi
-
-Obtains the user event handle for CSM modules with an event structure. This event interrupts the wait in the event structure when a new message is received, allowing execution to continue.
-
--- Controls --
-- Name("" to use uuid) in: CSM Module Name
-
--- Indicators --
-- New State Notifier Event: User event handle to interrupt the wait in the event structure when a message is received
-
-#### Timeout Selector.vi
-
-Used in templates with a user event structure.
-
--- Controls --
-- Timeout Expected: Expected timeout setting
-- Remaining States: Outputs 0 if there are remaining states; otherwise, outputs the expected value
-
--- Indicators --
-- Timeout: Timeout setting after arbitration
-
-#### Error Handler for Templates
-
-##### CSM Critical Error.vi
-
-Generates a critical error message for the CSM module, usually due to a duplicate module name.
-
--- Controls --
-- Arguments(as Reason): Reason for the error
-- CSM Name: CSM Module Name
-
-##### CSM No Target Error.vi
-
-Generates a target module not found error message for the CSM module when a CSM Module Name is required but an empty string is input.
-
-##### CSM Target Error.vi
-
-Generates a target module not found error message for the CSM module.
-
--- Controls --
-- Arguments(as CSM Name): Connection parameters, passing the target module name
-
-##### CSM Target Timeout Error.vi
-
-Generates a timeout error message for the target module of the CSM.
-
--- Controls --
-- Arguments(as CSM Name): Connection parameters, passing the target module name
-
-##### CSM Unhandled State Error.vi
-
-Generates an unhandled state error message for the CSM module. Possible scenarios:
-- An error occurs when an undefined state is used in the internal message rotation (consistent with JKISM behavior).
-- An error occurs when an undefined state is received from an external source.
-
--- Controls --
-- Undefined State: Undefined State
-- CSM Name: CSM Module Name
diff --git a/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description(en)/VI Description(en) - 02. Core Functions.md b/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description(en)/VI Description(en) - 02. Core Functions.md
deleted file mode 100644
index 4102997cc..000000000
--- a/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description(en)/VI Description(en) - 02. Core Functions.md
+++ /dev/null
@@ -1,371 +0,0 @@
-# CSM API
-
-## Core Functions
-
-> [!NOTE] CSM Message Format Parsing
-> [CSM Message String] >> [Arguments] [Message Symbol ->|,->,-@] [Target Module] // [Comments]
-> - CSM Message String: CSM messages must not contain CSM keywords or newline characters.
-> - " >> ": Separator between CSM Message String and Arguments.
-> - Arguments: Parameters of the CSM message, must not contain CSM keywords or newline characters.
-> - Message Symbol: Symbols to identify message types, including synchronous call (-@), asynchronous call (->), and asynchronous no-wait call (->|).
-> - Target Module: The target module to which the message is sent. If empty, the message will be processed by the current module. The message symbol must not exist if the target module is empty.
-> - Comments: Information that will not be parsed.
-
-> [!NOTE] CSM Operation Message Format Parsing
-> [CSM Operation String] >> [Arguments] -> <[Operation Type]> // [Comments]
-> TODO #329
-
-### Parse State Queue++.vi
-
-Parses the CSM state queue and returns the next current state to be executed, along with parameters and other information.
-
-Controls
-- State Queue: The entire state queue is connected to this input. This should come from the CSM's shift register.
-- Previous Error: The error cluster from the CSM is connected to this input. If an error occurs and appears at this input, the current state output will return the "Error Handler" state.
-- Name ("" to use uuid): CSM module name.
-- Response Timeout(-2 using Global Settings): Response timeout setting for synchronous calls, If -2 is specified, the global setting will be used. You can use "CSM - Set TMO of Sync-Reply.vi" to change the global setting.
-- Dequeue Timeout (0ms): Timeout setting for checking the CSM message queue, default is 0, meaning no wait.
-- Response Arguments: Response parameters from the previous state. It should be connected to the CSM's shift register to pass return values from external calls.
-
-Indicators
-- Remaining States: All concatenated states and parameters.
-- Arguments: Returns any parameters that may be used in the current state string. These parameters are located after the ">>" character. Note: Argument variables must not contain any non-printable characters, such as newline or carriage return.
-- Current State: The next current state to be executed.
-- Name Used: The actual name assigned to this CSM module.
-- Argument - State: If it is a built-in state defined by CSM, this parameter indicates the previous state of this state.
-- From Who: If Current State is sent by an external source, this is the source CSM module name.
-
-### Build State String with Arguments++.vi
-
-This VI is used to build a CSM message string (including state, arguments, target module, message type, etc.) to be sent to other CSM modules.
-
-> NOTE
-> This VI cannot concatenate asynchronous messages with "no-wait" return, it is hidden in the function panel. It is recommended to use Build Message with Arguments++.vi instead of this VI.
-
-- Example:
-
-When sending to the local state machine, Target Module ("") should be empty.
-
- If State = A and there are no arguments, then State with Arguments = A
- If State = A, Arguments = B then State with Arguments = A >> B
-
-When sending to other CSMs, assuming the name of Target Module ("") is "Target":
-
-- Synchronous call, the message is sent and waits for a return:
-
- If State = A and there are no arguments, then State with Arguments = A -@target
- If State = A, Arguments = B then State with Arguments = A >> B -@target
-
-- Asynchronous call, the message is sent, and it will enter the "Async Message Posted" state. When the external module completes processing, the local module will receive the "Async Response" message:
-
- If State = A and there are no arguments, then State with Arguments = A ->target
- If State = A, Arguments = B then State with Arguments = A >> B ->target
-
-Controls
-- State: State or message name string.
-- Arguments (""): Arguments for State.
-- Target Module (""): The name of the target CSM module to which this message is sent.
-- Sync-Call(-@) T By Default/Async-Call(->) F: Synchronous call input "TRUE"; Asynchronous call input "FALSE".
-
-Indicators
-- CSM Message String: The concatenated CSM message string.
-
-### Build Message with Arguments++.vi
-
-This VI is used to build CSM message strings and operation strings.
-
-> [!NOTE] Message Concatenation API
-> This type of API does not directly send messages, it only concatenates message strings. The strings need to be incorporated into the CSM's state queue and then sent and executed in Parse State Queue++.vi.
-> If you are familiar with CSM rules, you can skip using this type of API and directly type the corresponding message strings and operation strings in the text.
-
-> [!NOTE] Polymorphic VI Options:
-> - Build Message with Arguments (Auto Check).vi
-> - Build Asynchronous Message with Arguments.vi
-> - Build No-Reply Asynchronous Message with Arguments.vi
-> - Build Synchronous Message with Arguments.vi
-> - Build Interrupt Status Message.vi
-> - Build Normal Status Message.vi
-> - Build Register Status Message.vi
-> - Build Unregister Status Message.vi
-> - CSM - Replace Substitution Marks in Messages.vi
-
-#### Build Message with Arguments(Auto Check).vi
-
-Concatenates a CSM message string, and the message type symbol will be automatically detected based on the input State with Arguments.
-
-> Ref: Message Concatenation API
-
-Controls
-- State with Arguments: CSM state string, which can include arguments and target module information.
-- Arguments (""): Argument information. Arguments included in State with Arguments will be replaced.
-- Target Module (""): Target module. If empty, the default module in State with Arguments will be used.
-
-Indicators
-- CSM Message String: The concatenated CSM message string.
-
-#### Build Synchronous Message with Arguments.vi
-
-Concatenates a CSM synchronous message string, with the message type symbol "-@", for example:
-
- Message >> Arguments -@ Target
-
-> Ref: Message Concatenation API
-
-Controls
-- State with Arguments: CSM state string.
-- Arguments (""): Argument information. Arguments included in State with Arguments will be replaced.
-- Target Module (""): Target module. If empty, the default module in State with Arguments will be used.
-
-Indicators
-- CSM Message String: The concatenated CSM message string.
-
-#### Build Asynchronous Message with Arguments.vi
-
-Concatenates a CSM asynchronous message string, with the message type symbol "->", for example:
-
- Message >> Arguments -> Target
-
-> Ref: Message Concatenation API
-
-Controls
-- State with Arguments: CSM state string.
-- Arguments (""): Argument information. Arguments included in State with Arguments will be replaced.
-- Target Module (""): Target module. If empty, the default module in State with Arguments will be used.
-
-Indicators
-- CSM Message String: The concatenated CSM message string.
-
-#### Build No-Reply Asynchronous Message with Arguments.vi
-
-Concatenates a CSM asynchronous message string, with the message type symbol "->|", for example:
-
- Message >> Arguments ->| Target
-
-> Ref: Message Concatenation API
-
-Controls
-- State with Arguments: CSM state string.
-- Arguments (""): Argument information. Arguments included in State with Arguments will be replaced.
-- Target Module (""): Target module. If empty, the default module in State with Arguments will be used.
-
-Indicators
-- CSM Message String: The concatenated CSM message string.
-
-#### Build Normal Status Message.vi
-
-Concatenates a normal status message string, with the following format:
-
- Status >> Arguments ->
- // The following strings are equivalent operations, defined for easier typing and memory:
- Status >> Arguments ->
- Status >> Arguments ->
-
-> Ref: Message Concatenation API
-
-Controls
-- State with Arguments: CSM normal status message string.
-- Arguments (""): Argument information. Arguments included in State with Arguments will be replaced.
-
-Indicators
-- CSM Message String: The concatenated CSM message string.
-
-#### Build Interrupt Status Message.vi
-
-Concatenates an interrupt status message. The format is as follows:
-
- Status >> Arguments ->
-
-> Ref: Message Concatenation API
-
-Controls
-- State with Arguments: CSM interrupt status message string.
-- Arguments (""): Argument information. Arguments included in State with Arguments will be replaced.
-
-Indicators
-- CSM Message String: The concatenated CSM message string.
-
-#### Build Register Status Message.vi
-
-Concatenates a register status operation message string, with the following format:
-
- //[source-state]@[source-module] >> [response-message]@[response-module] ->
- status @ Source >> API @ Target ->
-
-Example: Add the download completion message of the downloader module, binding it to the start play API of the player module.
-
- // Bind the download completion message of the downloader module to the start play API of the player module.
- DownloadFinished@Downloader >> StartPlay@Player ->
- // When executing the message in the player module, Player can be omitted.
- DownloadFinished@Downloader >> StartPlay ->
- // When multiple modules have download completion messages, use * to indicate that all modules' messages are bound to the start play API of the player module.
- DownloadFinished@* >> StartPlay@Player ->
-
-> Ref: Message Concatenation API
-
-Controls
-- Target CSM: The name of the CSM module subscribing to the status.
-- Source CSM (* as Default): The name of the CSM module issuing the status.
-- Status: The registered status.
-- API (if "", same as Status): The API name that the subscribing status module responds to.
-
-Indicators
-- CSM Message String: The concatenated CSM message string.
-
-#### Build Unregister Status Message.vi
-
-Concatenates an unregister status operation message string, with the following format:
-
- //[source-state]@[source-module] >> [response-message]@[response-module] ->
- status @ Source >> API @ Target ->
-
-Example: Unbind the download completion message of the downloader module from the start play API of the player module.
-
- // Unbind the download completion message of the downloader module from the start play API of the player module.
- DownloadFinished@Downloader >> StartPlay@Player ->
- // When executing the message in the player module, Player can be omitted.
- DownloadFinished@Downloader >> StartPlay ->
-
-> Ref: Message Concatenation API
-
-Controls
-- Target CSM: The name of the CSM module subscribing to the status.
-- Source CSM (* as Default): The name of the CSM module issuing the status.
-- Status: The registered status.
-
-Indicators
-- CSM Message String: The concatenated CSM message string.
-
-#### CSM - Replace Substitution Marks in Messages.vi
-
-Provides a batch replacement function for editing multiple CSM message strings conveniently. There are 4 markers that can be replaced:
-- Marker: Usually represents the same parameter.
-- Marker: Usually represents the same target.
-- <1> Marker: Represents custom marker 1.
-- <2> Marker: Represents custom marker 2.
-
-Example: The terminal is connected to the string "DAQDevice", and the States with Replace Token string is:
-
- ``` text
- Initialize -@
- Configure -@
- Read -@
- Close -@
- ```
-
-States output is:
-
- ``` text
- Initialize -@ DAQDevice
- Configure -@ DAQDevice
- Read -@ DAQDevice
- Close -@ DAQDevice
- ```
-
-> Ref: Message Concatenation API
-
-Controls
-- States with Replace Token: CSM state string with replacement markers.
-- : Marker: Usually represents the same parameter.
-- : Marker: Usually represents the same target.
-- <1>: Custom marker 1.
-- <2>: Custom marker 2.
-
-Indicators
-- States: The replaced states.
-
-### CSM - Broadcast Status Change.vi
-
-Broadcasts a status change to the system. CSM modules with registered statuses will receive the status change. For example:
-
- // Broadcast status change
- Status >> Arguments ->
-
-> [!NOTE] CSM State Queue Operation API
-> This type of API does not directly send messages, it only concatenates message strings. Messages are sent and executed in Parse State Queue++.vi.
-> Unlike the Message Concatenation API, this type of API includes the CSM state queue string input, equivalent to inserting messages into the state queue.
-
-Controls
-- Status with Arguments: The status and arguments to be broadcasted, supports multiple lines, each line status will be added with "->".
-- State Queue (""): The entire state queue is connected to this input.
-- Broadcast (T): Control switch input for broadcasting.
-
-Indicators
-- Remaining States: All concatenated states and parameters.
-
-### Add State(s) to Queue By BOOL++.vi
-
-Incorporates CSM message strings into the CSM message queue. Provides TRUE/FALSE state string options to avoid using conditional structures, improving code readability and programming efficiency.
-
-> Ref: CSM State Queue Operation API
-
-> [!NOTE] Polymorphic VI Options:
-> - add State(s) to Queue By BOOL (Element).vi
-> - add State(s) to Queue By BOOL (Array Left).vi
-> - add State(s) to Queue By BOOL (Array Right).vi
-> - add State(s) to Queue By BOOL (Array All).vi
-
-#### Add State(s) to Queue By BOOL(Element).vi
-
-Incorporates CSM message strings into the CSM message queue. Provides TRUE/FALSE state string options to avoid using conditional structures, improving code readability and programming efficiency.
-
-> Ref: CSM State Queue Operation API
-
-Controls
-- State Queue (""): The entire state queue is connected to this input.
-- TRUE (""): State string inserted when Condition is True.
-- FALSE (""): State string inserted when Condition is False.
-- Condition: Flag to select the state string connected to the TRUE terminal or the FALSE terminal.
-- High Priority (FALSE): If True, the state will be inserted at the front of State Queue (""). If False, it is appended to the end.
-
-Indicators
-- Remaining States: All concatenated states and parameters.
-
-#### Add State(s) to Queue By BOOL(Array Left).vi
-
-Incorporates CSM message strings into the CSM message queue. Provides TRUE/FALSE state string options to avoid using conditional structures, improving code readability and programming efficiency.
-
-> Ref: CSM State Queue Operation API
-
-Controls
-- State Queue (""): The entire state queue is connected to this input.
-- TRUE (""): State string inserted when Condition is True.
-- FALSE (""): State string inserted when Condition is False.
-- Condition: Flag to select the state string connected to the TRUE terminal or the FALSE terminal.
-- High Priority (FALSE): If True, the state will be inserted at the front of State Queue (""). If False, it is appended to the end.
-
-Indicators
-- Remaining States: All concatenated states and parameters.
-
-#### Add State(s) to Queue By BOOL(Array Right).vi
-
-Incorporates CSM message strings into the CSM message queue. Provides TRUE/FALSE state string options to avoid using conditional structures, improving code readability and programming efficiency.
-
-> Ref: CSM State Queue Operation API
-
-Controls
-- State Queue (""): The entire state queue is connected to this input.
-- TRUE (""): State string inserted when Condition is True.
-- FALSE (""): State string inserted when Condition is False.
-- Condition: Flag to select the state string connected to the TRUE terminal or the FALSE terminal.
-- High Priority (FALSE): If True, the state will be inserted at the front of State Queue (""). If False, it is appended to the end.
-
-Indicators
-- Remaining States: All concatenated states and parameters.
-
-#### Add State(s) to Queue By BOOL(Array All).vi
-
-Based on high priority and Bool input, this VI generates TRUE/False and remaining states concatenated states.
-The High Priority input determines whether to concatenate the TRUE or FALSE string before or after the remaining states.
-The Bool input determines whether the TRUE or FALSE string is concatenated.
-
-> Ref: CSM State Queue Operation API
-
-Controls
-- State Queue (""): The entire state queue is connected to this input.
-- TRUE (""): State string inserted when Condition is True.
-- FALSE (""): State string inserted when Condition is False.
-- Condition: Flag to select the state string connected to the TRUE terminal or the FALSE terminal.
-- High Priority (FALSE): If True, the state will be inserted at the front of State Queue (""). If False, it is appended to the end.
-
-Indicators
-- Remaining States: All concatenated states and parameters.
diff --git a/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description(en)/VI Description(en) - 03. Arguments.md b/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description(en)/VI Description(en) - 03. Arguments.md
deleted file mode 100644
index 9d9988ea8..000000000
--- a/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description(en)/VI Description(en) - 03. Arguments.md
+++ /dev/null
@@ -1,99 +0,0 @@
-# CSM API
-
-## Arguments
-
-> [!NOTE] CSM Message Keywords
-> Includes: '->','->|','-@','-&','<-", "\r", "\n", "//", ">>", ">>>", ">>>>", ";", ","
-
-> [!NOTE] CSM HEXSTR Format Parameters
-> To pass any data type in CSM parameters, CSM provides a default parameter format called HEXSTR for passing any data type.
-> HEXSTR: Converts any LabVIEW data type to a variant, then represents this variant's memory format as a hexadecimal string for passing in CSM parameters.
-> HEXSTR can be safely used as a state parameter without disrupting the parsing of CSM message strings.
-
-> [!NOTE] CSM ERROR Parameters
-> LabVIEW error cluster information typically contains carriage returns and may include CSM message keywords, so it usually cannot be directly passed as a CSM parameter.
-> Although the error cluster information can be converted to HEXSTR format, it is not readable and cannot be intuitively read in logs.
-> Therefore, to pass LabVIEW error information in CSM parameters, a standard CSM error parameter format is provided. It can be safely used as a state parameter without disrupting the parsing of CSM message strings.
-> Its format is: "[Error: error-code] error-description-As-safe-argument-string"
-
-### CSM - Keywords.vi
-
-List of keywords in CSM messages.
-
-> Ref: CSM Message Keywords
-
--- Indicators --
-- keywords: List of CSM keywords
-- keywords(%Hex format): List of CSM keywords in %Hex format
-
-### CSM - Make String Arguments Safe.vi
-
-Converts CSM keywords in the argument string to %Hex format to ensure they do not affect the parsing of CSM message strings.
-
-> Ref: CSM Message Keywords
-
--- Controls --
-- Argument String: String argument
-
--- Indicators --
-- Safe Argument String: Safe string argument
-
-### CSM - Revert Arguments-Safe String.vi
-
-Converts CSM keywords in %Hex format back to their normal format in the safe string argument.
-
-> Ref: CSM Message Keywords
-
--- Controls --
-- Safe Argument String: Safe string argument
-
--- Indicators --
-- Origin Argument String: Original string argument
-
-### CSM - Convert Data to HexStr.vi
-
-Converts any LabVIEW data type to a HEXSTR format parameter string.
-
-> Ref: CSM HEXSTR Format Parameters
-
--- Controls --
-- Variant: LabVIEW data, supports any data type through variants
-
--- Indicators --
-- HEXSTR: CSM HEXSTR format parameter
-
-### CSM - Convert HexStr to Data.vi
-
-Converts a hexadecimal string parameter back to variant data.
-
-> Ref: CSM HEXSTR Format Parameters
-
--- Controls --
-- HEXSTR: CSM HEXSTR format parameter
-
--- Indicators --
-- Variant: LabVIEW data, supports any data type through variants
-
-### CSM - Convert Error to Argument.vi
-
-Converts a LabVIEW error cluster to a CSM error parameter format.
-
-> Ref: CSM ERROR Parameters
-
--- Controls --
-- error: LabVIEW error cluster
-
--- Indicators --
-- Argument: CSM error parameter format
-
-### CSM - Convert Argument to Error.vi
-
-Converts a CSM error parameter format back to a LabVIEW error cluster.
-
-> Ref: CSM ERROR Parameters
-
--- Controls --
-- Argument: CSM error parameter format
-
--- Indicators --
-- error: LabVIEW error cluster
diff --git a/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description(en)/VI Description(en) - 04 .Management API.md b/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description(en)/VI Description(en) - 04 .Management API.md
deleted file mode 100644
index 09a47053d..000000000
--- a/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description(en)/VI Description(en) - 04 .Management API.md
+++ /dev/null
@@ -1,67 +0,0 @@
-# CSM API
-
-## Management API
-
-> [!NOTE] CSM Working Modes
-> 1. Stand-alone: Independent working mode. If no module name is provided, a random ID will be generated to identify the module.
-> 2. CSM: Regular CSM module.
-> 3. Action Worker: Worker mode. Add "#" after the module name to mark this module as a worker, sharing the same message queue with other workers of the same name.
-> 4. Chain Node: Chain node. Add "$" after the module name to mark this module as a chain node. Messages on the same chain will be passed sequentially until a node processes the message.
-
-### CSM - Start Async Call.vi
-
-VI snippet for asynchronous call template code
-
-### CSM - Synchronized Call.vi
-
-VI snippet for synchronous call template code
-
-### CSM - Module VI Reference.vi
-
-Query and obtain the VI reference of the CSM module by sending a "VI Reference" synchronous message.
-
--- Controls --
-- CSM Name: CSM module name
-- Current Module("" to generate an ID): Identifier of the CSM module to query. If empty, a unique ID will be generated.
-- Response Timeout(-2 using Global Settings): Response timeout setting for synchronous calls, If -2 is specified, the global setting will be used. You can use "CSM - Set TMO of Sync-Reply.vi" to change the global setting.
-
--- Indicators --
-- CSM Module VIRef: VI reference of the CSM module
-
-### CSM - Check If Module Exists.vi
-
-Check if the CSM module exists
-
--- Controls --
-- CSM Name: CSM module name
-
--- Indicators --
-- Exist?: Returns whether the module exists
-- CSM Name(dup): Returns CSM Name
-
-### CSM - List Modules.vi
-
-List all active CSM modules.
-
-> Ref: CSM Working Modes
-
--- Controls --
-- Exclude Standalone CSM(T): Whether to include modules in standalone working mode
-
--- Indicators --
-- Module Names: List of CSM module names
-
-### CSM - Module Status.vi
-
-Get the status of the CSM module, including: working mode, number of workers, and the number of pending messages in the message queue.
-
-> Ref: CSM Working Modes
-
--- Controls --
-- CSM Name: CSM module name
-
--- Indicators --
-- Mode: Returns the working mode of the module
-- #As Worker: Number of workers in worker mode for this module
-- #msg to be processed: Number of pending messages in the CSM message queue
-- CSM Name(dup): Returns CSM Name
diff --git a/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description(en)/VI Description(en) - 05. Module Operation API.md b/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description(en)/VI Description(en) - 05. Module Operation API.md
deleted file mode 100644
index 746c905a9..000000000
--- a/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description(en)/VI Description(en) - 05. Module Operation API.md
+++ /dev/null
@@ -1,130 +0,0 @@
-# CSM API
-
-## Module Operation API
-
-### CSM - Wait for Module to Be Alive.vi
-
-Wait for the CSM module to come online within the specified timeout period.
-
--- Controls --
-- CSM Name: CSM module name
-- Wait(5000ms): Wait timeout, default is 5s
-
--- Indicators --
-- CSM Name(dup): CSM module name
-- Waited(ms): Time waited
-
-### CSM - Wait for All Modules to be Alive.vi
-
-Wait for a group of CSM modules to come online within the specified timeout period.
-
--- Controls --
-- CSM Names: CSM module names
-- Timeout(5000ms): Wait timeout, default is 5s
-
--- Indicators --
-- CSMs Left: CSM modules that did not come online within the timeout period
-- Waited(ms): Time waited
-
-### CSM - Wait for All Modules to Exit.vi
-
-Wait for a group of CSM modules to go offline within the specified timeout period, usually used for program exit.
-
--- Controls --
-- CSM Names: CSM module names
-- Timeout(5000ms): Wait timeout, default is 5s
-
--- Indicators --
-- CSMs Left: CSM modules that did not go offline within the timeout period
-- Waited(ms): Time waited
-
-### CSM - Post Message.vi
-
-Send an asynchronous message to the CSM without waiting for a return, and continue executing the subsequent code.
-
--- Controls --
-- CSM Name: CSM module name
-- State: Message string
-- Arguments(""): Message parameters
-- Current Module("" to generate an ID): Current module name. If not provided, a temporary ID is generated for debugging purposes.
-
-### CSM - Wait and Post Message.vi
-
-Send an asynchronous message to the CSM without waiting for a return, and continue executing the subsequent code. If the CSM module is not online, it will wait for the specified time.
-
--- Controls --
-- CSM Name: CSM module name
-- State: Message string
-- Arguments(""): Message parameters
-- Current Module("" to generate an ID): Current module name. If not provided, a temporary ID is generated for debugging purposes.
-- Wait(5000ms): Wait timeout, default is 5s
-
-### CSM - Send Message and Wait for Reply.vi
-
-Send a synchronous message to the CSM and wait for a return message. If the return message is not received within the timeout period, a timeout error is returned.
-
--- Controls --
-- Target Module: Target CSM module name
-- State: Message string
-- Arguments(""): Message parameters
-- Response Timeout(-2 using Global Settings): Response timeout setting for synchronous calls, If -2 is specified, the global setting will be used. You can use "CSM - Set TMO of Sync-Reply.vi" to change the global setting.
-
--- Indicators --
-- Response: Returned response
-
-### CSM - Wait and Send Message for Reply.vi
-
-Send a synchronous message to the CSM and wait for a return message. If the return message is not received within the timeout period, a timeout error is returned. If the CSM module is not online, it will wait for the specified time.
-
--- Controls --
-- CSM Name: CSM module name
-- State: Message string
-- Arguments(""): Message parameters
-- Response Timeout(-2 using Global Settings): Response timeout setting for synchronous calls, If -2 is specified, the global setting will be used. You can use "CSM - Set TMO of Sync-Reply.vi" to change the global setting.
-- Current Module("" to generate an ID): Current module name. If not provided, a temporary ID is generated for debugging purposes.
-- Wait(5000ms): Wait timeout, default is 5s
-
--- Indicators --
-- Response: Returned response
-- Source CSM: Source CSM module name of the returned response
-
-### CSM - Run Script.vi
-
-Run a CSM script. Multiple message instructions can be executed at once.
-
--- Controls --
-- CSM Scripts: Scripts to be run
-- Response Timeout(-2 using Global Settings): Response timeout setting for synchronous calls, If -2 is specified, the global setting will be used. You can use "CSM - Set TMO of Sync-Reply.vi" to change the global setting.
-- Continue If Error?(F): Whether to continue execution if an error occurs
-- Current Module("" to generate an ID): Current module name. If not provided, a temporary ID is generated for debugging purposes.
-- Wait(5000ms): Wait timeout, default is 5s
-
--- Indicators --
-- Scripts Left: Remaining scripts that were not executed
-
-### CSM - Status Change Event.vi
-
-Get the CSM status change event handle.
-
--- Controls --
-- CSM Module: CSM module name
-
--- Indicators --
-- Status Change Event: CSM status change event handle
-
-### CSM - Destroy Status Change Event.vi
-
-Release the CSM status change event handle.
-
--- Controls --
-- Status Change Event: CSM status change event handle
-
-### CSM - Module Exit Event.vi
-
-Get the CSM module exit event handle.
-
--- Controls --
-- CSM Module: CSM module name
-
--- Indicators --
-- CSM Exit Event: CSM module exit event handle
diff --git a/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description(en)/VI Description(en) - 06. Status Registration.md b/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description(en)/VI Description(en) - 06. Status Registration.md
deleted file mode 100644
index 436bb5526..000000000
--- a/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description(en)/VI Description(en) - 06. Status Registration.md
+++ /dev/null
@@ -1,75 +0,0 @@
-# CSM API
-
-## Status Subscription Management (״̬Ĺ)
-
-### CSM - Register Status Change.vi
-
-Register to receive notifications of status changes from other CSM modules. If "Response Message" is not connected or the input is empty, the same Status name will be used as the response message.
-
--- Controls --
-- CSM Name: Name of the CSM module.
-- Source CSM Name ('*' as Default): The CSM module generating the status. You can use "*" to denote all modules generating the same status.
-- Status: Status string.
-- API (if "", same as Status): After registration, this message will be received if the status changes.
-- Priority (T: As Status, F: As Interrupt): If the response message is False, it will be inserted at the front of the status queue; otherwise, it will be appended to the end of the queue.
-
--- Indicators --
-- CSM Name (dup): Returns CSM Name.
-
-### CSM - Unregister Status Change.vi
-
-Unregister notifications of status changes from other CSM modules.
-
--- Controls --
-- CSM Name: Name of the CSM module.
-- Source CSM Name: The CSM module generating the status. You can use "*" to denote all modules generating the same status.
-- Status: Status string.
-
--- Indicators --
-- CSM Name (dup): Returns CSM Name.
-
-### CSM - List All Status Registration.vi
-
--- Indicators --
-- Status Array:
-
-### CSM - List Mapping Relationships in Broadcast Registry.vi
-
--- Indicators --
-- Mapping Relationships:
-
-### CSM - List Rules in Broadcast Registry.vi
-
--- Indicators --
-- Rules:
-
-### CSM - List Status in Broadcast Registry.vi
-
--- Indicators --
-- Status in Registry:
-
-### CSM - Check Mapping Relationship in Broadcast Registry.vi
-
--- Controls --
-- CSM Name:
-- Broadcast state:
-
--- Indicators --
-- Array:
-
-### CSM - Check Status Registration.vi
-
--- Controls --
-- CSM Name:
-- Broadcast state:
-
--- Indicators --
-- Array:
-
-### CSM - Remove Module in Broadcast Registry.vi
-
--- Controls --
-- CSM Name:
-
--- Indicators --
-- CSM Name(dup):
\ No newline at end of file
diff --git a/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description(en)/VI Description(en) - 07. Global Log.md b/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description(en)/VI Description(en) - 07. Global Log.md
deleted file mode 100644
index 5e835c0fe..000000000
--- a/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description(en)/VI Description(en) - 07. Global Log.md
+++ /dev/null
@@ -1,72 +0,0 @@
-# CSM API
-
-## Global Log
-
-> [!NOTE] CSM Global Log Function
-> The CSM Global Log function is used to record global state change events for debugging, monitoring, and other scenarios.
->
-> The information that can be recorded includes:
-> 1. State changes of the CSM state machine
-> 2. Message communication between CSM modules, including data returns
-> 3. State publishing of CSM modules
-> 4. Creation and destruction of CSM modules
-> 5. Subscription and unsubscription of CSM module states
-> 6. Error information handled by CSM modules
-> 7. User-defined events
->
-> The debugging tools are mainly developed based on the Global Log function API. Users can develop debugging tools according to their needs.
-
-### CSM - Global Log Event.vi
-
-Get the CSM global state user event handle
-
-> Ref: CSM Global Log Function
-
--- Output Control --
-- CSM Global Log Event: CSM global state user event handle
-
-### CSM - Destroy Global Log Event.vi
-
-Release the CSM global state user event handle
-
-> Ref: CSM Global Log Function
-
--- Input Control --
-- CSM Global Log Event: CSM global state user event handle
-
-### CSM - Generate User Global Log.vi
-
-Generate user global events for debugging and other scenarios.
-
--- Input Control --
-- Log: Event name
-- Arguments: Event parameters
-- From Who: Source
-- ModuleName: Module name
-
-### CSM - Global Log Error Handler.vi
-
-CSM error handling function. If an error occurs, the error information will be published through the CSM Global Log and can be recorded in debugging tools and background logs.
-
--- Input Control --
-- Place("" to use VI's Name): Mark the location where the error occurred
-- Clear Error(T): Whether to clear the error, default is to clear
-
-### CSM - Set Log Filter Rules.vi
-
-Set global filter rules. This rule is applied at the sending source. When the log meets the filter rules, it will not be sent from the source, so no tool will be able to detect this log record.
-
-### CSM - List Log Filter Rules As Strings.vi
-
-List global filter rules.
-
--- Output Control --
-- Rule Strings: Filter rule strings
-
-### CSM - Convert Filter Rules.vi
-
-Convert the filter rule cluster list to filter rule class instances.
-
-### CSM - Filter Global Log.vi
-
-Determine whether the log is filtered according to the rules. The filtering judgment of this VI occurs at the subscription end, so it does not affect the subscription of other tools.
diff --git a/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description(en)/VI Description(en) - 08. Advance Modes.md b/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description(en)/VI Description(en) - 08. Advance Modes.md
deleted file mode 100644
index 3e0e53b5f..000000000
--- a/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description(en)/VI Description(en) - 08. Advance Modes.md
+++ /dev/null
@@ -1,136 +0,0 @@
-# CSM API
-
-> [!NOTE] Name Concatenation API
-> This VI only operates on the module name string and has no actual functionality. Therefore, once familiar with CSM rules, you can directly input the corresponding name string and rule symbols without necessarily calling this API.
-
-## Worker Mode API
-
-> [!NOTE] CSM Worker Mode
->
-> A CSM module, by instantiating multiple instances, appends "#" to the requested name and shares the same message queue to achieve worker mode.
-> - From an external call perspective, these instances together form a composite module named Worker Agent.
-> - Each instance is named Worker.
->
-> Behavior:
-> External callers can consider Worker Agent as a CSM module that can perform message communication, state registration, and other operations.
-> Internally, idle Workers will fetch messages from the Worker Agent message queue and process them. Therefore, the Worker mode can achieve concurrent message processing for a CSM module.
->
-> Example:
-> // Request module name as module#, module is the Worker Agent name, instantiate 4 instances, the names of these four instances might be:
-> // - module#59703F3AD837
-> // - module#106A470BA5EC
-> // Cannot communicate directly with workers, need to communicate with Worker Agent, for example:
-> csm message >> arguments -@ module // synchronous message, idle worker will process this message
-> csm message >> arguments -> module // synchronous message, idle worker will process this message
->
-> Application Scenarios:
-> 1. Customer service representative scenario
-> 2. Concurrent downloader scenario
-> 3. Concurrent compiler scenario
-> 4. TCP Server handling multiple client connections
-
-### CSM - Mark As Worker Module.vi
-
-Add "#" to the CSM name to mark this module as operating in worker mode.
-
-> Ref: Name Concatenation API
-> Ref: CSM Worker Mode
-
--- Controls --
-- CSM Name: CSM module name
-
--- Indicators --
-- CSM Name (marked as worker): CSM module name with "#" mark
-
-## Chain of Responsibility Mode API - To Be Completed
-
-> [!NOTE] CSM Chain of Responsibility Mode
->
-> Multiple CSM modules, with names appended with "$", form a chain to handle transactions, creating a complete module through the chain of responsibility mode.
-
-> - From an external call perspective, these instances together form a composite module named Chain.
-> - Each instance is named chain node.
->
-> Behavior:
-> External callers can consider Chain as a CSM module that can perform message communication, state registration, and other operations.
-> Internally, nodes will attempt to process messages in sequence. When a node has the capability to handle the current message, the message is processed and not passed further.
->
-> Example:
-> // Request module name as module$, module is the chain name, instantiate 4 instances, the names of these four instances might be:
-> // - module$1
-> // - module$2
-> // - module$3
-> // - module$4
-> // The Chain sequence is module$1 >> module$2 >> module$3 >> module$4
-> // Suppose module$3 and module$4 can handle "csm message"
-> csm message >> arguments -@ module
-> // This message will be handled by module$3, module$4 will not respond
->
-> Application Scenarios:
-> 1. Approval process, where higher-level managers can approve more events according to their position level
-> 2. Function concatenation, where different modules perform different tasks, and concatenation can complete combinations of different functional sets
-> 3. Function override, achieving OOP overloading through override
-
-### CSM - Mark As Chain Module.vi
-
-[!WARNING] This set of functions has not been fully verified, please use with caution.
-
-> Ref: CSM Chain of Responsibility Mode
-> Ref: Name Concatenation API
-
--- Controls --
-- CSM Name: CSM module name
-- Order: Order in the chain of responsibility mode
-
--- Indicators --
-- CSM Name (marked as Chain): CSM module name with "$" mark
-
-## Side-Loop Support
-
-### CSM - Request CSM to Post Message.vi
-
-Request CSM to send a message. Typically used for functional loops running in parallel with CSM, these loops complete the full module functionality together with CSM.
-
--- Controls --
-- Module Name: CSM sending the status
-- Status: Status to be broadcasted
-- Arguments (""): Parameters of the status to be broadcasted
-- Target Module: Target module
-
-### CSM - Request CSM to Broadcast Status Change.vi
-
-Request CSM to publish status. Typically used for functional loops running in parallel with CSM, these loops complete the full module functionality together with CSM.
-
--- Controls --
-- Module Name: CSM sending the status
-- Status: Status to be broadcasted
-- Arguments (""): Parameters of the status to be broadcasted
-- Broadcast (T): Control switch input for broadcasting
-
-### CSM - Module Turns Invalid.vi
-
-Check if CSM has exited. Typically used for functional loops running in parallel with CSM, these loops complete the full module functionality together with CSM. This VI is used as the exit condition for parallel loops.
-
--- Controls --
-- CSM Name: Module name
-
--- Indicators --
-- Turn Invalid (Exit)?: Whether it has exited
-
-### CSM - Flood of Events Handler Side Loop.vi
-
-### CSM - Forward States to CSM.vi
-
--- Controls --
-- High Priority(T):
-- Module Name: Returns any argument(s) that may be used in the current state string. These arguments come after the ">>" characters
-- State(s) in (""): Wire the existing states to this input. The default is an empty string.
-
-### CSM - Forward UI Operations to CSM.vi
-
--- Controls --
-- Name("" to use uuid):
-- State(s) in (""):
-
--- Indicators --
-- States Out:
\ No newline at end of file
diff --git a/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description(en)/VI Description(en) - 09. Build-in Addons.md b/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description(en)/VI Description(en) - 09. Build-in Addons.md
deleted file mode 100644
index 881ba2f03..000000000
--- a/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description(en)/VI Description(en) - 09. Build-in Addons.md
+++ /dev/null
@@ -1,148 +0,0 @@
-# CSM API
-
-## Built-in Addons
-
-### CSM WatchDog
-
-> [!NOTE] Principle of CSM WatchDog
-> When a LabVIEW VI exits, it automatically releases all queue, event, and other handle resources. Therefore, we can create a WatchDog thread to monitor a queue resource created by the main program VI. When this queue resource is released after the main VI exits, the WatchDog thread triggers and sends "Macro: Exit" to the still-running CSM modules, ensuring they exit properly.
-
-#### CSM - Start Watchdog to Ensure All Modules Exit.vi
-
-Starts the CSM Watchdog thread to ensure that all asynchronously started CSM modules exit properly after the main program exits.
-
-> Ref: Principle of CSM WatchDog
-
-#### CSM Watchdog Thread.vi
-
-The CSM Watchdog thread ensures that all asynchronously started CSM modules exit properly after the main program exits.
-
-> Ref: Principle of CSM WatchDog
-
--- Controls --
-- WatchdogQ: Watchdog queue resource
-
-### CSM File Logger
-
-> [!NOTE] Principle of CSM File Logger
-> By subscribing to the CSM's Global Log Event, all CSM activity information in the application can be recorded for later analysis and error localization.
-> The file is a text file with the extension .csmlog, which can be opened with Notepad or other text editing tools.
-
-#### CSM - Start File Logger.vi
-
-Starts the CSM event file logging function.
-
-> Ref: Principle of CSM File Logger
-
--- Controls --
-- Log File Path: Path to the log file
-- Enable? (T): Enable or not
-- log limit: Log file limit
-- Timestamp format: Timestamp format
-- WatchDog? (T): Enable WatchDog or not
-- Filter Rules: Time filter rules
-- Exit When All Module Exist?(F): Exit after all CSM modules exit or not
-
--- Indicators --
-- LogFile: CSM log file path
-- WatchDogQueue: WatchDog resource handle
-
-#### CSM-Logger-Thread.vi
-
-Starts the CSM Global Log file logging thread VI.
-
-> Ref: Principle of CSM File Logger
-
--- Controls --
-- Log File Path: Path to the log file
-- log limit: Log file limit
-- Timestamp format: Timestamp format
-- WatchDogQ: WatchDog resource for detecting if the main program has exited
-- GlobalLogFilter.lvclass: Event filter object
-- Exit When All Module Exist?(F): Exit after all CSM modules exit or not
-
-### CSM Loop Support
-
-> [!NOTE] Reason for CSM LOOP Design
-> JKISM/CSM is a state machine framework, and completing loop work is a common scenario. There is no good solution for implementing loops.
-> - Using a loop in a Case branch can cause the state machine to get stuck in that state, unable to switch normally, and unable to respond to external messages.
-> - Inserting the next loop state at the end of the state loop also makes it difficult to respond to external messages and is not intuitive.
-> Therefore, this addon provides a standard way to implement loops, solving the above problems.
-
-#### CSMLS - Add Exit State(s) with Loop Check.vi
-
-Checks the loop when exiting.
-
--- Controls --
-- States Queue: The entire state queue is connected to this input
-- Exiting States: States required for exit
-
--- Indicators --
-- Remaining States: Remaining message queue
-
-#### CSMLS - Append Continuous State.vi
-
-Adds a loop state.
-
--- Controls --
-- States Queue: The entire state queue is connected to this input
-- Loop State(s) and Arguments: Loop states
-- Continuous State: Loop state name
-- Continuous Arguments (""): Loop state arguments
-- Append(T): Append or not
-
--- Indicators --
-- Remaining States: Remaining message queue
-
-#### CSMLS - Define Loop State(s).vi
-
-Defines loop operations.
-
--- Controls --
-- States Queue: The entire state queue is connected to this input
-- Loop State(s) and Arguments: Loop states
-
--- Indicators --
-- Remaining States: Remaining message queue
-
-#### CSMLS - Remove Loop Tag and previous State(s) to Break.vi
-
-Stops the loop by removing the tag and all states before the tag.
-
-Example:
-
-If the CSM message queue contains the following messages, executing this API will remove the messages where the comments are located:
-
- DAQ: Acquire //Will be removed
- DAQ: Continuous Check -> //Will be removed
- DAQ: Stop
- DAQ: Release
-
-This means no DAQ operations will be performed, and it will immediately proceed to stop and release.
-
--- Controls --
-- States Queue: The entire state queue is connected to this input
-
--- Indicators --
-- Remaining States: Remaining message queue
-
-#### CSMLS - Remove Loop Tag to Break.vi
-
-Stops the loop by removing the tag.
-
-Example:
-
-If the CSM message queue contains the following messages, executing this API will remove the messages where the comments are located:
-
- DAQ: Acquire
- DAQ: Continuous Check -> //Will be removed
- DAQ: Stop
- DAQ: Release
-
-This means the current DAQ operation will still be performed, then it will proceed to stop and release.
-
--- Controls --
-- States Queue: The entire state queue is connected to this input
-
--- Indicators --
-- Remaining States: Remaining message queue
diff --git a/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description(en)/VI Description(en) - 10. Utility VIs.md b/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description(en)/VI Description(en) - 10. Utility VIs.md
deleted file mode 100644
index cfa91be3a..000000000
--- a/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description(en)/VI Description(en) - 10. Utility VIs.md
+++ /dev/null
@@ -1,199 +0,0 @@
-# CSM API
-
-## Utility VIs
-
-### CSM - Compact Multiple States.vi
-
-Compact multiple states into a single string for input use.
-
--- Controls --
-- Multiple States: Array of CSM state strings
-
--- Indicators --
-- States: String containing multiple lines of CSM state strings
-
-### CSM - Break Down Multiple States String.vi
-
-Break down a string containing multiple lines of CSM state strings into an array of CSM state strings.
-
--- Controls --
-- States: String containing multiple lines of CSM state strings
-
--- Indicators --
-- Multiple States: Array of CSM state strings
-
-### CSM - Build Exit Messages of CSMs.vi
-
-Input CSM module names to concatenate and generate exit messages ("Macro: Exit").
-
-> Ref: Message Concatenation API
-
--- Controls --
-- CSMs: Array of CSM module names
-- State with Arguments("Macro: Exit"): Exit message
-
--- Indicators --
-- States: Concatenated CSM message string
-
-### CSM - Filter Duplicate Messages By Name.vi
-
-Filter duplicate messages, keeping only the latest messages.
-
-> Ref: Message Concatenation API
-
--- Controls --
-- States: Input message string
-- Whole Messages in Check?(T): Whether to check the entire message string. If FALSE, only the message name is checked.
-
--- Indicators --
-- Filtered States: Filtered message string
-
-### CSM - Filter Messages to Non-Existing Modules.vi
-
-Filter messages sent to non-existing modules.
-This VI uses CSM - List Modules.vi to get all active CSM modules and then filters out messages sent to non-existing modules.
-
--- Controls --
-- States: Input message string
-
--- Indicators --
-- Filtered States: Filtered message string
-
-### CSM - Remove Duplicated Following Messages.vi
-
--- Controls --
-- Current State:
-- Remaining States:
-
--- Indicators --
-- Remaining States Left:
-
-### CSM Data Type String to Enum.vi
-
-### CSM Data Type String.vi
-
--- Controls --
-- Data:
-
--- Indicators --
-- Data Type String:
-
-### Replace Tag with Array.vi
-
--- Controls --
-- Enum:
-- replace string:
-- single-line text:
-
--- Indicators --
-- States:
-
-### CSM Data Type String to Enum(RefnumEnum).vi
-
--- Controls --
-- Data Type String:
-
--- Indicators --
-- Array Dim:
-- Secondary Type:
-- Primary Type:
-
-### CSM Data Type String to Enum(String).vi
-
--- Controls --
-- Data Type String:
-
--- Indicators --
-- Array Dim:
-- Secondary Type String:
-- Primary Type:
-
-### CSM Data Type String to Enum(TypeEnum).vi
-
--- Controls --
-- Data Type String:
-
--- Indicators --
-- Array Dim:
-- Secondary Type:
-- Primary Type:
-
-### Build Error Cluster.vi
-
-Create an error cluster in the standard LabVIEW way by constructing the source string from the call chain of the calling VI. The constructed source string is in the form:
-"Called VI in Caller of the calling VI->Caller of the caller of the calling VI->and so on...->and so on..."
-An optional 'String to Prepend to source ("")' string input can be used to add additional descriptive information to the source string. If this string exists, it will be enclosed in parentheses and added before the source string.
-
--- Controls --
-- code: Error code
-- String to Prepend to source (""): Error message string
-
-### Build Internal State String.vi
-
-Construct a string containing JKI state machine states, arguments, and other information.
-
--- Controls --
-- State: State string
-- Arguments (""): Arguments for State
-- Arg-State (""): State of the module sending this message at the time of sending
-- Source (""): Name of the module sending this message
-
--- Indicators --
-- CSM Message String: Concatenated CSM message string
-
-### String History Cacher.vi
-
-Save the current input string to the cache, caching the historical strings. When the maximum length limit is exceeded, the earliest cached string will be overwritten. Used for debugging the historical state of CSM.
-
--- Controls --
-- String: String to be cached
-- length: Maximum length of the cached historical strings
-- Include Timestamp(F): Whether to include a timestamp at the beginning of each line.
-
--- Indicators --
-- String Cache: Cached historical strings
-
-### Trim Both Whitespace.vi
-
-Remove all ASCII whitespace characters (spaces, tabs, carriage returns, and line feeds) from the beginning, end, or both.
-
--- Controls --
-- string: String to be processed
-
--- Indicators --
-- trimmed string: Processed string
-
-### uuid.vi
-
-Generate a Universally Unique Identifier (UUID) according to standard methods. For example:
-- 59703F3AD837
-- 106A470BA5EC
-- 9B781DB313AF
-
--- Indicators --
-- UUID: Generated UUID
-
-### Random Change Flag.vi
-
-Generate a random value to mark state changes. In CSM, this flag is used in some places to determine whether the cache needs to be updated for efficiency.
-
--- Indicators --
-- Random Change Flag: Generated random value
-
-### Global Log To String.vi
-
-Convert the global log data cluster to a string.
-
--- Controls --
-- Log: Global log data cluster
-
--- Indicators --
-- Log String: Global log string
-
-### U8 Data to Hex Str.vi
-
--- Controls --
-- u8 Data[]:
-
--- Indicators --
-- HEX String (0-9,A-F):
diff --git a/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description(en)/VI Description(en) - 11. CSM-Helper API.md b/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description(en)/VI Description(en) - 11. CSM-Helper API.md
deleted file mode 100644
index ebb431f6c..000000000
--- a/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description(en)/VI Description(en) - 11. CSM-Helper API.md
+++ /dev/null
@@ -1,923 +0,0 @@
-# CSM API
-
-## CSM-Helper API
-
-### Is CSM Module.vi
-
-Use the minimum number of VI calls to determine if it is a CSM module, for pre-checking in LabVIEW plugins.
-
-> [!NOTE] Polymorphic VI Options:
-> - Is CSM Module - VIRef.vi
-> - Is CSM Module - WhileLoop.vi
-> - Is CSM Module - Structure.vi
-> - Is CSM Module - CaseStructure.vi
-> - Is CSM Module - EventStructure.vi
-> - Is CSM Module - ParseStateVI.vi
-
-#### Is CSM Module - VIRef.vi
-
-Determine if it is a CSM module through VIRef
-
--- Controls --
-- VIRef: VI Reference
-
--- Indicators --
-- Is CSM Module?: True If it is a CSM module
-- CSM Basic Refs: If This is a CSM module, It will return the basic references
-
-#### Is CSM Module - WhileLoop.vi
-
-Determine if it is a CSM module through While Loop reference
-
--- Controls --
-- WhileLoop: While Loop reference
-
--- Indicators --
-- Is CSM Module?: True If it is a CSM module
-- CSM Basic Refs: If This is a CSM module, It will return the basic references
-
-#### Is CSM Module - Structure.vi
-
-Determine if it is a CSM module through Structure reference
-
--- Controls --
-- Structure: Structure reference
-
--- Indicators --
-- Is CSM Module?: True If it is a CSM module
-- CSM Basic Refs: If This is a CSM module, It will return the basic references
-
-#### Is CSM Module - CaseStructure.vi
-
-Determine if it is a CSM module through case Structure reference
-
--- Controls --
-- CaseStructure: CaseStructure reference
-
--- Indicators --
-- Is CSM Module?: True If it is a CSM module
-- CSM Basic Refs: If This is a CSM module, It will return the basic references
-
-#### Is CSM Module - EventStructure.vi
-
-Determine if it is a CSM module through Event Structure reference
-
--- Controls --
-- EventStructure: EventStructure reference
-
--- Indicators --
-- Is CSM Module?: True If it is a CSM module
-- CSM Basic Refs: If This is a CSM module, It will return the basic references
-
-#### Is CSM Module - ParseStateVI.vi
-
-Determine if it is a CSM module through Parse State VI reference
-
--- Controls --
-- Parse State VI Ref: Parse State VI reference
-
--- Indicators --
-- Is CSM Module?: True If it is a CSM module
-- CSM Basic Refs: If This is a CSM module, It will return the basic references
-
-### CSM-Helper API.vi
-
-### CSM-Helper usecase Template.vit
-
--- Controls --
-- CSM-Helper in: CSMHelper input
-
--- Indicators --
-- CSM-Helper out: CSMHelper output
-
-### _Add VI Reference Case.vi
-
--- Controls --
-- CSM-Helper in: CSMHelper input
-- element:
-- Add Frame:
-
--- Indicators --
-- CSM-Helper out: CSMHelper output
-
-### Connect Information.vi
-
--- Controls --
-- Case:
-- CSM-Helper in: CSMHelper input
-
--- Indicators --
-- CSM-Helper out: CSMHelper output
-- Backend Connected Info:
-- FrontEnd Connected Info:
-
-### Diagram Node Information.vi
-
--- Controls --
-- InnerTerminal in:
-- Array in:
-- Front Tunnels:
-
--- Indicators --
-- Array:
-- Array out:
-
-### Get Argument Info From back Term.vi
-
--- Controls --
-- Terminal in:
-
--- Indicators --
-- Array:
-
-### Get Argument Info From Front Term.vi
-
--- Controls --
-- Terminal in:
-
--- Indicators --
-- Array:
-
-### GObject Terminals.vi
-
--- Controls --
-- GObject in:
-
--- Indicators --
-- error in (no error) (dup):
-- Class Name:
-- Terms[]:
-- Node Object:
-- tunnel Relative Pos:
-
-### Relative Pos to InterData Tunnel of CaseContent.vi
-
--- Controls --
-- element:
-- CSM-Helper in: CSMHelper input
-
--- Indicators --
-- Position:
-- CSM-Helper out: CSMHelper output
-
-### Resize CaseStructure By Making Space.vi
-
--- Controls --
-- Bounds:
-- CSM-Helper in: CSMHelper input
-
--- Indicators --
-- DiffBound:
-- MakeSpace.Rect:
-- CSM-Helper out: CSMHelper output
-
-### Search With Pattern.vi
-
--- Controls --
-- regular expression:
-- Array:
-
--- Indicators --
-- Numeric:
-
-### sub1.vi
-
--- Controls --
-- Part References.Parse State Queue:
-- regular expression:
-- Array:
-
--- Indicators --
-- Tunnel out:
-
-### sub2.vi
-
--- Controls --
-- Part References.Parse State Queue:
-- regular expression:
-- Array:
-
--- Indicators --
-- Tunnel out:
-
-### Refresh References.vi
-
--- Controls --
-- CSM-Helper in: CSMHelper input
-
--- Indicators --
-- CSM-Helper out: CSMHelper output
-
-### Get ParentRef Until Type Matched.vi
-
--- Controls --
-- Class Name:
-- reference in:
-
--- Indicators --
-- Target Ref:
-
-### Is in JKISM or CSM.vi
-
--- Controls --
-- reference in:
-
--- Indicators --
-- is in JKISM or CSM?:
-
-### Relationship Check.vi
-
--- Controls --
-- TestRef:
-- reference in:
-
--- Indicators --
-- Is TestRef:
-- Is Child of TestRef:
-
-### Add State Frame.vi
-
--- Controls --
-- index(-1, use same group):
-- element:
-- CSM-Helper in: CSMHelper input
-
--- Indicators --
-- Add Frame:
-- CSM-Helper out: CSMHelper output
-
-### Check NewStateNotify is Registered.vi
-
--- Controls --
-- CSM-Helper in: CSMHelper input
-
--- Indicators --
-- NewStateNotify Registered:
-- CSM-Helper out: CSMHelper output
-
-### Connect Error Wire If not Connected.vi
-
--- Controls --
-- case:
-- CSM-Helper in: CSMHelper input
-
--- Indicators --
-- CSM-Helper out: CSMHelper output
-
-### Connect EventReg Wire If not Connected.vi
-
--- Controls --
-- case:
-- CSM-Helper in: CSMHelper input
-
--- Indicators --
-- CSM-Helper out: CSMHelper output
-
-### Connect Internal Data Wire If not Connected.vi
-
--- Controls --
-- case:
-- CSM-Helper in: CSMHelper input
-
--- Indicators --
-- CSM-Helper out: CSMHelper output
-
-### Connect LastResp to Response in Error Case.vi
-
--- Controls --
-- CSM-Helper in: CSMHelper input
-
--- Indicators --
-- CSM-Helper out: CSMHelper output
-
-### Connect Paired Tunnels.vi
-
--- Controls --
-- CSM-Helper in: CSMHelper input
-
--- Indicators --
-- CSM-Helper out: CSMHelper output
-
-### Connect StateQ Wire If not Connected.vi
-
--- Controls --
-- case:
-- CSM-Helper in: CSMHelper input
-
--- Indicators --
-- CSM-Helper out: CSMHelper output
-
-### Copy State.vi
-
--- Controls --
-- Already Exist Action:
-Replace(T) / Skip(F):
-- SourceCSM:
-- New(Empty to Use same Name):
-- Case:
-- CSM-Helper.lvclass:
-
--- Indicators --
-- CSM-Helper out 2:
-
-### Create From Basic Refs.vi
-
--- Controls --
-- CSM Basic Refs:
-
--- Indicators --
-- CSM-Helper.lvclass:
-
-### Create From CaseStructure Reference.vi
-
--- Controls --
-- CaseStructure:
-
--- Indicators --
-- CSM-Helper.lvclass:
-
-### Create From EventStructure Reference.vi
-
--- Controls --
-- CaseStructure:
-
--- Indicators --
-- CSM-Helper.lvclass:
-
-### Create From VI Reference.vi
-
--- Controls --
-- VI:
-
--- Indicators --
-- CSM-Helper.lvclass:
-
-### Create From WhileLoop Reference.vi
-
--- Controls --
-- Structure:
-
--- Indicators --
-- CSM-Helper.lvclass:
-
-### Destroy.vi
-
--- Controls --
-- Save Instruments?(F):
-- CSM-Helper in: CSMHelper input
-
--- Indicators --
-- CSM-Helper out: CSMHelper output
-
-### Doc.vi
-
--- Controls --
-- String 2:
-- String:
-- CSM-Helper in: CSMHelper input
-
--- Indicators --
-- String 4:
-- String 3:
-- CSM-Helper out: CSMHelper output
-
-### Get All API Interface Info.vi
-
--- Controls --
-- CSM-Helper in: CSMHelper input
-
--- Indicators --
-- Array:
-- CSM-Helper out: CSMHelper output
-
-### Get All Status Interface Info.vi
-
--- Controls --
-- CSM-Helper in: CSMHelper input
-
--- Indicators --
-- Array 3:
-- CSM-Helper out: CSMHelper output
-
-### Get CaseFrame Index By CaseName.vi
-
--- Controls --
-- CASE:
-- CSM-Helper in: CSMHelper input
-
--- Indicators --
-- index:
-- CSM-Helper out: CSMHelper output
-
-### Get CaseFrame Reference By CaseName.vi
-
--- Controls --
-- CASE:
-- CSM-Helper in: CSMHelper input
-
--- Indicators --
-- Frame Refs:
-- CSM-Helper out: CSMHelper output
-
-### Get Event Structure Num.vi
-
--- Controls --
-- CSM-Helper in: CSMHelper input
-
--- Indicators --
-- EvtStrutNum:
-- CSM-Helper out: CSMHelper output
-
-### Get Interface Info.vi
-
--- Controls --
-- CASE:
-- CSM-Helper in: CSMHelper input
-
--- Indicators --
-- Response:
-- Array:
-- CSM-Helper out: CSMHelper output
-
-### Get Internal Data Info.vi
-
--- Controls --
-- CSM-Helper in: CSMHelper input
-
--- Indicators --
-- Array:
-- CSM-Helper out: CSMHelper output
-
-### Open Block Diagram.vi
-
--- Controls --
-- CSM-Helper in: CSMHelper input
-
--- Indicators --
-- CSM-Helper out: CSMHelper output
-
-### Open Front Panel.vi
-
--- Controls --
-- CSM-Helper in: CSMHelper input
-
--- Indicators --
-- CSM-Helper out: CSMHelper output
-
-### Remove State Frame.vi
-
--- Controls --
-- element:
-- CSM-Helper in: CSMHelper input
-
--- Indicators --
-- CSM-Helper out: CSMHelper output
-
-### Save Instrument.vi
-
--- Controls --
-- CSM-Helper in: CSMHelper input
-
--- Indicators --
-- CSM-Helper out: CSMHelper output
-
-### Set Error Tunnel Use Default If not Connected.vi
-
--- Controls --
-- Use Default if not wired:
-- CSM-Helper in: CSMHelper input
-
--- Indicators --
-- CSM-Helper out: CSMHelper output
-
-### Set Visible Case Frame.vi
-
--- Controls --
-- element:
-- CSM-Helper in: CSMHelper input
-
--- Indicators --
-- CSM-Helper out: CSMHelper output
-
-### Set Wire Label Visible.vi
-
--- Controls --
-- Connected Wire.Label.Visible:
-- CSM-Helper in: CSMHelper input
-
--- Indicators --
-- CSM-Helper out: CSMHelper output
-
-### Start Undo.vi
-
--- Controls --
-- Name:
-- CSM-Helper in: CSMHelper input
-
--- Indicators --
-- CSM-Helper out: CSMHelper output
-
-### Stop Undo.vi
-
--- Controls --
-- CSM-Helper in: CSMHelper input
-
--- Indicators --
-- CSM-Helper out: CSMHelper output
-
-### Undo.vi
-
--- Controls --
-- CSM-Helper in: CSMHelper input
-
--- Indicators --
-- CSM-Helper out: CSMHelper output
-
-### Read APIs.vi
-
--- Controls --
-- CSM-Helper in: CSMHelper input
-
--- Indicators --
-- Value:
-- CSM-Helper out: CSMHelper output
-
-### Read Back Tunnel Internal TermRefs.vi
-
--- Controls --
-- element:
-- CSM-Helper in: CSMHelper input
-
--- Indicators --
-- Back Tunnels:
-- CSM-Helper out: CSMHelper output
-
-### Read Back Tunnels Refs.vi
-
--- Controls --
-- CSM-Helper in: CSMHelper input
-
--- Indicators --
-- Back Tunnels:
-- CSM-Helper out: CSMHelper output
-
-### Read Block Diagram Ref.vi
-
--- Controls --
-- CSM-Helper in: CSMHelper input
-
--- Indicators --
-- Diagram:
-- CSM-Helper out: CSMHelper output
-
-### Read Case Structure Ref.vi
-
--- Controls --
-- CSM-Helper in: CSMHelper input
-
--- Indicators --
-- Case Structure:
-- CSM-Helper out: CSMHelper output
-
-### Read Event Structure Ref.vi
-
--- Controls --
-- CSM-Helper in: CSMHelper input
-
--- Indicators --
-- Event Structure:
-- CSM-Helper out: CSMHelper output
-
-### Read Front Tunnel Internal TermRefs.vi
-
--- Controls --
-- case:
-- CSM-Helper in: CSMHelper input
-
--- Indicators --
-- Front Tunnels:
-- CSM-Helper out: CSMHelper output
-
-### Read Front Tunnels Refs.vi
-
--- Controls --
-- CSM-Helper in: CSMHelper input
-
--- Indicators --
-- Front Tunnels:
-- CSM-Helper out: CSMHelper output
-
-### Read New State Notifier Event State Ref.vi
-
--- Controls --
-- CSM-Helper in: CSMHelper input
-
--- Indicators --
-- New State Notifier Event State Ref:
-- CSM-Helper out: CSMHelper output
-
-### Read Paired Tunnels of Case Structure.vi
-
--- Controls --
-- CSM-Helper in: CSMHelper input
-
--- Indicators --
-- Paired Tunnels:
-- CSM-Helper out: CSMHelper output
-
-### Read Parse State Queue Ref.vi
-
--- Controls --
-- CSM-Helper in: CSMHelper input
-
--- Indicators --
-- Parse State Queue:
-- CSM-Helper out: CSMHelper output
-
-### Read States.vi
-
--- Controls --
-- CSM-Helper in: CSMHelper input
-
--- Indicators --
-- Value:
-- CSM-Helper out: CSMHelper output
-
-### Read Timeout Event State Ref.vi
-
--- Controls --
-- CSM-Helper in: CSMHelper input
-
--- Indicators --
-- New State Notifier Event State Ref:
-- CSM-Helper out: CSMHelper output
-
-### Read Type.vi
-
--- Controls --
-- CSM-Helper in: CSMHelper input
-
--- Indicators --
-- Part References.Type:
-- CSM-Helper out: CSMHelper output
-
-### Read User-Defined States.vi
-
--- Controls --
-- CSM-Helper in: CSMHelper input
-
--- Indicators --
-- Array:
-- CSM-Helper out: CSMHelper output
-
-### Read VI Ref.vi
-
--- Controls --
-- CSM-Helper in: CSMHelper input
-
--- Indicators --
-- VI:
-- CSM-Helper out: CSMHelper output
-
-### Read While Loop Ref.vi
-
--- Controls --
-- CSM-Helper in: CSMHelper input
-
--- Indicators --
-- While Loop:
-- CSM-Helper out: CSMHelper output
-
-### Add VI Reference Case.vi
-
--- Controls --
-- CSM-Helper in: CSMHelper input
-
--- Indicators --
-- CSM-Helper out: CSMHelper output
-
-### Remove All CSM Bookmarks.vi
-
--- Controls --
-- CSM-Helper in: CSMHelper input
-
--- Indicators --
-- CSM-Helper out: CSMHelper output
-
-### standardize CSM Module.vi
-
--- Controls --
-- CSM-Helper in: CSMHelper input
-
--- Indicators --
-- CSM-Helper out: CSMHelper output
-
-### CSM Essential States.vi
-
--- Indicators --
-- CSM Essential States:
-
-### CSM Module Type.vi
-
--- Controls --
-- CSM Basic Refs:
-
--- Indicators --
-- CSM Basic Refs (dup):
-
-### CaseStructure - Add Frame.vi
-
--- Controls --
-- Case Name:
-- Reference Frame Index:
-- CaseStructure in:
-
--- Indicators --
-- Add Frame:
-- CaseStructure out:
-
-### CaseStructure - Case Name to Group Name.vi
-
--- Controls --
-- element:
-
--- Indicators --
-- String:
-
-### CaseStructure - Check If State Exist.vi
-
--- Controls --
-- Group Name:
-- CaseStructure in:
-
--- Indicators --
-- Numeric:
-- CaseStructure out:
-
-### CaseStructure - Get Group Separator Case Index.vi
-
--- Controls --
-- Group Name:
-- CaseStructure in:
-
--- Indicators --
-- Numeric:
-- CaseStructure out:
-
-### Diagram - Connect Tunnel with Wire 2.vi
-
--- Controls --
-- Wire Index:
-- Front Tunnels:
-- Diagram in:
-
--- Indicators --
-- Array out:
-- Diagram out:
-
-### Diagram - Connect Tunnel with Wire.vi
-
--- Controls --
-- FrontEnd Connected Info:
-- Front Tunnels:
-- Diagram in:
-
--- Indicators --
-- Array out:
-- Diagram out:
-
-### Diagram - Get All Decoration Refs.vi
-
--- Controls --
-- TopLevelDiagram in:
-
--- Indicators --
-- TextRefs:
-- TopLevelDiagram out:
-
-### Diagram - Get All Text Refs.vi
-
--- Controls --
-- TopLevelDiagram in:
-
--- Indicators --
-- TextRefs:
-- TopLevelDiagram out:
-
-### PairedTunnels - Connect Wire.vi
-
--- Controls --
-- index(-1 for all):
-- PairedTunnels:
-
--- Indicators --
-- PairedTunnels:
-
-### Find Event Structure from Case Structure.vi
-
--- Controls --
-- CaseStructure:
-
--- Indicators --
-- EvntStruct Refnum:
-
-### Find Parse State Queue from Case Structure.vi
-
--- Controls --
-- CaseStructure:
-
--- Indicators --
-- CaseStructure:
-- Parse State Queue:
-
-### Find Parse State Queue from Event Structure.vi
-
--- Controls --
-- EvntStruct Refnum:
-
--- Indicators --
-- CaseStructure:
-- Parse State Queue:
-
-### Find Parse State Queue from While Loop.vi
-
--- Controls --
-- WhileLoop in:
-
--- Indicators --
-- CaseStructure:
-- Parse State Queue:
-- WhileLoop out:
-
-### Terminals - Filter Control Terms.vi
-
--- Controls --
-- Terms[]:
-
--- Indicators --
-- Terms[] out:
-
-### Terminals - Filter Error Terms.vi
-
--- Controls --
-- Terms[]:
-
--- Indicators --
-- Terms[] out:
-
-### Terminals - Filter Indicator Terms.vi
-
--- Controls --
-- Terms[]:
-
--- Indicators --
-- Terms[] out:
-
-### Terminals - Filter Input Term.vi
-
--- Controls --
-- InnerTerminal in:
-- Wire.Terms[] in:
-
--- Indicators --
-- Wire.Terms[] out:
-
-### Terminals - Filter invalid Terms.vi
-
--- Controls --
-- Terms[]:
-
--- Indicators --
-- Terms[] out:
-
-### Terminals - Filter Left-Top Term.vi
-
--- Controls --
-- Terms[]:
-
--- Indicators --
-- Terms[] out:
-
-### Terminals - Left-Top Term.vi
-
--- Controls --
-- Terms[]:
-
--- Indicators --
-- Terms[] out:
-
-### Terminals - Lower Term.vi
-
--- Controls --
-- Terms[]:
-
--- Indicators --
-- Terms[] out:
-
-### Terminals - Upper Term.vi
-
--- Controls --
-- Terms[]:
-
--- Indicators --
-- Terms[] out:
diff --git a/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description(en)/VI Description(en) - 12. Debug,Doc,Tools.md b/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description(en)/VI Description(en) - 12. Debug,Doc,Tools.md
deleted file mode 100644
index db45536d9..000000000
--- a/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description(en)/VI Description(en) - 12. Debug,Doc,Tools.md
+++ /dev/null
@@ -1,113 +0,0 @@
-# CSM API
-
-## Documentation
-
-### CSM - Copyright QuickDrop.vi
-
-### CSM - Documentation QuickDrop.vi
-
-### CSM - Keywords QuickDrop.vi
-
-### CSM Dummy Module.vi
-
--- Controls --
-- Init State("Macro: Initialize"):
-- Name("" to use uuid):
-
-## CSM Debug Tools
-
-### CSM - Add VI Reference Case to CSMs.vi
-
-The CSM template must include the "VI Reference" case, which is used to obtain references to VIs externally. In earlier templates, this case was not included. This tool is used to add it.
-
-The tool scans all VIs in the lvproj directory. If a VI contains a CSM module, it will be listed, and you can choose to add the "VI Reference" case in bulk.
-
-### CSM - Debug Console - DebugTool.vi
-
-CSM Debug Console, you can use this tool to:
-
-1. Select an existing CSM instance and open the front panel and back panel.
-2. Scan the API interfaces of the existing CSM instance.
-3. Select an API interface, call it synchronously or asynchronously, and view the return values.
-4. View the running log of the entire program.
-
-### CSM - Remove All CSM Bookmarks.vi
-
-Remove all bookmarks in the CSM module.
-
-### CSM - Running Log - DebugTool.vi
-
-Real-time tool for viewing the running log of the entire CSM program.
-
-### CSM - State Dashboard - DebugTool.vi
-
-Real-time status dashboard for the entire CSM program module.
-
-### CSM - State Table - DebugTool.vi
-
- Real-time status table for the entire CSM program module.
-
-### CSM - Switch Language Tool.vi
-
-Switch the language of CSM module VI descriptions and comments. Currently supports Chinese and English.
-
-### CSM - Fix JKISM Editor RCM Entry.vi
-
-Fix JKISM State Editor of Right Click Menu Entry for CSM.
-
-### CSM - Create CSM Palette at Root.vi
-
-Create a function palette for the CSM module at the project root directory.
-
-## CSM-DOC
-
-### csmdoc_import_all_csm_VI_description_doc.vi
-
-Select the markdown file describing the functionality of CSM VIs and import it into all VIs.
-
--- Controls --
-- Path: Path to the markdown file describing the functionality of CSM VIs
-
-### csmdoc_export_all_csm_VI_description_doc.vi
-
-Analyze all CSM VIs and export the VI functionality descriptions to a markdown file.
-
--- Controls --
-- Path: Path to the markdown file describing the functionality of CSM VIs
-
-### csmdoc_export_VI_description.vi
-
--- Controls --
-- NOTE-Map:
-- Path:
-
--- Indicators --
-- concatenated string:
-
-### csmdoc_import_doc_to_singleVI.vi
-
-### csmdoc_import_VI_description.vi
-
--- Controls --
-- NOTE-Map:
-- string:
-- Path:
-
-### csmdoc_list_all_csm_documented_VIs.vi
-
--- Indicators --
-- Array:
-
-### csmdoc_load vi description map.vi
-
--- Controls --
-- Path:
-
--- Indicators --
-- text:
-- variant 2:
-- variant:
-
-## Scripts
-
-### Script - JKISM to CSM.vi
diff --git a/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description(en)/VI Description(en) - 13. Internal.md b/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description(en)/VI Description(en) - 13. Internal.md
deleted file mode 100644
index 54173d925..000000000
--- a/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description(en)/VI Description(en) - 13. Internal.md
+++ /dev/null
@@ -1,929 +0,0 @@
-# CSM API
-
-## CSM Internal
-
-### Naming Check.vi
-
--- Controls --
-- Name("" to use uuid):
-Returns any argument(s) that may be used in the current state string. These arguments come after the ">>" characters
-
--- Indicators --
-- Name(dup):
-Returns any argument(s) that may be used in the current state string. These arguments come after the ">>" characters
-
-### Check.vi
-
--- Controls --
-- BroadcastRegistry in:
-- Status:
-- Source:
-- Target:
-
--- Indicators --
-- BroadcastRegistry out:
-- Response Message Info:
-
-### Delete Source Module.vi
-
--- Controls --
-- BroadcastRegistry in:
-- Source:
-
--- Indicators --
-- BroadcastRegistry out:
-
-### Delete Target Module.vi
-
--- Controls --
-- BroadcastRegistry in:
-- Source:
-
--- Indicators --
-- BroadcastRegistry out:
-
-### Initialize.vi
-
--- Controls --
-- BroadcastRegistry in:
-
--- Indicators --
-- BroadcastRegistry out:
-
-### List Entries.vi
-
--- Controls --
-- BroadcastRegistry in:
-
--- Indicators --
-- BroadcastRegistry out:
-- Array:
-
-### List Status in Registry.vi
-
--- Controls --
-- BroadcastRegistry in:
-
--- Indicators --
-- BroadcastRegistry out:
-- Status:
-
-### Register.vi
-
--- Controls --
-- BroadcastRegistry in:
-- status:
-- source:
-- api:
-- target:
-
--- Indicators --
-- BroadcastRegistry out:
-
-### Remove Module.vi
-
--- Controls --
-- BroadcastRegistry in:
-- Source:
-
--- Indicators --
-- BroadcastRegistry out:
-
-### Unregister.vi
-
--- Controls --
-- BroadcastRegistry in:
-- Status:
-- Source:
-- api:
-- Target:
-
--- Indicators --
-- BroadcastRegistry out:
-
-### Broadcast Item Key.vi
-
--- Controls --
-- status:
-- target:
-- source:
-
--- Indicators --
-- key:
-
-### Preview.vi
-
--- Controls --
-- BroadcastRegistry in:
-
--- Indicators --
-- Registry:
-- BroadcastRegistry out:
-
-### Remove response API from List.vi
-
--- Controls --
-- API:
-- output cluster in:
-
--- Indicators --
-- output cluster out:
-
-### Concatenate State with Arguments.vi
-
--- Controls --
-- Arguments:
-- State:
-
--- Indicators --
-- State with Arguments:
-
-### CSM-Name to CSM-Mode.vi
-
--- Controls --
-- String:
-
--- Indicators --
-- ParentCSM Name:
-- CSM Mode:
-- Requested Name:
-
-### Format Timestamp.vi
-
--- Controls --
-- timestamp:
-- format string:
-
--- Indicators --
-- String:
-
-### Hex Str to U8 Data.vi
-
--- Controls --
-- HEX String (0-9,A-F):
-
--- Indicators --
-- u8 Data[]:
-
-### Parse Next Single-line State.vi
-
--- Controls --
-- States Queue:
-
--- Indicators --
-- Next Single-line State:
-- Remaining States Queue:
-
-### Remove Comments from Line.vi
-
--- Controls --
-- single-line text:
-
--- Indicators --
-- single-line text without comments:
-
-### Splite Reason String Part.vi
-
--- Controls --
-- Single-line -& Reason:
-
--- Indicators --
-- CSM Name:
-- `State:
-- `Arguments:
-
-### Splite Single-line Message.vi
-
--- Controls --
-- single-line text:
-
--- Indicators --
-- operator:
-- state:
-- args:
-- source/target:
-
-### Trim Single line Text.vi
-
--- Controls --
-- single-line text:
-
--- Indicators --
-- trimmed text:
-
-### CSM Not Allowed Message.vi
-
--- Controls --
-- State:
-- CSM:
-
-### Cache-Broadcast Registry Search Result.vi
-
--- Controls --
-- CSM Name:
-- Broadcast state:
-
--- Indicators --
-- Array:
-
-### FGV-BroadcastRegistry.vi
-
--- Controls --
-- Source:
-- Target:
-- Status:
-- API:
-- Operation:
-
--- Indicators --
-- response message:
-
-### global-Broadcast Cache Change Flag.vi
-
-Global variable used to indicate whether the broadcast cache has changed
-
-### global-CSMQ FGV Change Flag.vi
-
-Global variable used to indicate whether the CSM module management information has changed
-
-### global-GEvnt Filter Change Flag.vi
-
-Global variable used to indicate whether the Global Event filter conditions have changed
-
-### Cache-GEvt Filter Object.vi
-
--- Indicators --
-- CSM:LogFilter.lvclass:
-
-### FGV-GEvt Filter Obj.vi
-
--- Controls --
-- Set(T)/Get(F):
-- Rules-v1:
-
--- Indicators --
-- CSM:LogFilter.lvclass:
-
-### FGV-GlobalEventRef.vi
-
--- Controls --
-- Create(F):
-
--- Indicators --
-- CSM Global Log Event:
-
-### FGV-StatusChangeEventRef.vi
-
--- Controls --
-- Name("" to use uuid) in:
-
--- Indicators --
-- Status Change Event:
-
-### GEvt-BackgroundThread.vi
-
-### GEvt-Convert Filter Rules - v1.0.vi
-
--- Controls --
-- Rules-v1:
-
--- Indicators --
-- GlobalLogFilter:
-
-### GEvt-Filter Global Log - v1.0.vi
-
--- Controls --
-- Rules-v1:
-- Cross CSM Data (in):
-
--- Indicators --
-- Matched? (dup):
-- Cross CSM Data:
-
-### GEvt-Generate Complete Log.vi
-
--- Controls --
-- CSM Global Log Event:
-- event data:
-- Enable?:
-- CSM:LogFilter.lvclass:
-
--- Indicators --
-- CSM Global Log Event out:
-
-### GEvt-Generate Interrupt Log.vi
-
--- Controls --
-- CSM Global Log Event:
-- Current State:
-- Arguments:
-- Name("" to use uuid):
-- CSM:LogFilter.lvclass:
-
--- Indicators --
-- CSM Global Log Event out:
-- event data:
-
-### GEvt-Generate Module Created Log.vi
-
--- Controls --
-- CSM Global Log Event:
-- Name("" to use uuid):
-- Created?:
-- CSM:LogFilter.lvclass:
-
--- Indicators --
-- CSM Global Log Event out:
-- event data:
-
-### GEvt-Generate Module Destroyed Log.vi
-
--- Controls --
-- CSM Global Log Event:
-- Name("" to use uuid):
-- Enable?:
-- CSM:LogFilter.lvclass:
-
--- Indicators --
-- CSM Global Log Event out:
-- event data:
-
-### GEvt-Generate Register Log.vi
-
--- Controls --
-- CSM Global Log Event:
-- Current State:
-- Arguments:
-- Name("" to use uuid):
-- CSM:LogFilter.lvclass:
-
--- Indicators --
-- CSM Global Log Event out:
-- event data:
-
-### GEvt-Generate Remaining States Log.vi
-
--- Controls --
-- CSM Global Log Event:
-- Remaining States:
-- Name("" to use uuid):
-- Enable?:
-- CSM:LogFilter.lvclass:
-
--- Indicators --
-- CSM Global Log Event out:
-- event data:
-
-### Gevt-ThreadQueueName.vi
-
--- Indicators --
-- ThreadQueueName:
-
-### GEvt-Generate State Change Log.vi
-
--- Controls --
-- CSM Global Log Event:
-- Current State:
-- Arguments:
-- Source Message.*State:
-- Source Message.*Arguments:
-- Source Module:
-- Name("" to use uuid):
-- CSM:LogFilter.lvclass:
-
--- Indicators --
-- CSM Global Log Event out:
-- event data:
-
-### GEvt-Generate Status Log.vi
-
--- Controls --
-- CSM Global Log Event:
-- Current State:
-- Arguments:
-- Name("" to use uuid):
-- CSM:LogFilter.lvclass:
-
--- Indicators --
-- CSM Global Log Event out:
-- event data:
-
-### GEvt-Generate Unregister Log.vi
-
--- Controls --
-- CSM Global Log Event:
-- Current State:
-- Arguments:
-- Name("" to use uuid):
-- CSM:LogFilter.lvclass:
-
--- Indicators --
-- CSM Global Log Event out:
-- event data:
-
-### GEvt-Generate with Rule Check.vi
-
--- Controls --
-- LogFilter in:
-- event data:
-- CSM Global Log Event in:
-
--- Indicators --
-- CSM Global Log Event out:
-
-### GEvt-Set Source Filter Rules - v1.0.vi
-
--- Controls --
-- Rules-v1:
-
-### GEvt-ThreadQueueName.vi
-
--- Indicators --
-- ThreadQueueName:
-
-### GEvt-WatchdogThread.vi
-
--- Controls --
-- WatchDogQ:
-
-### Filter Check.vi
-
--- Controls --
-- Cross CSM Data in:
-- GlobalLogFilter in:
-
--- Indicators --
-- Matched? (dup):
-- Cross CSM Data out:
-- GlobalLogFilter.lvclass (dup):
-
-### List Rules as Strings.vi
-
--- Controls --
-- GlobalLogFilter in:
-
--- Indicators --
-- Rule Strings:
-- GlobalLogFilter out:
-
-### CSM Check - LogType.vi
-
--- Controls --
-- Matched Previous?:
-- Cross CSM Data (in):
-- GlobalLogFilter.lvclass:
-
--- Indicators --
-- Matched? (dup):
-- Cross CSM Data:
-- GlobalLogFilter.lvclass (dup):
-
-### CSM Check - State.vi
-
--- Controls --
-- Matched Previous?:
-- Cross CSM Data (in):
-- GlobalLogFilter.lvclass:
-
--- Indicators --
-- Matched? (dup):
-- Cross CSM Data:
-- GlobalLogFilter.lvclass (dup):
-
-### CSM Check - StateType.vi
-
--- Controls --
-- Matched Previous?:
-- Cross CSM Data (in):
-- GlobalLogFilter.lvclass:
-
--- Indicators --
-- Matched? (dup):
-- Cross CSM Data:
-- GlobalLogFilter.lvclass (dup):
-
-### Group Check - CSM.vi
-
--- Controls --
-- Matched Previous?:
-- Cross CSM Data (in):
-- GlobalLogFilter.lvclass:
-
--- Indicators --
-- Matched? (dup):
-- Cross CSM Data:
-- GlobalLogFilter.lvclass (dup):
-
-### Group Check - LogType.vi
-
--- Controls --
-- Matched Previous?:
-- Cross CSM Data (in):
-- GlobalLogFilter.lvclass:
-
--- Indicators --
-- Matched? (dup):
-- Cross CSM Data:
-- GlobalLogFilter.lvclass (dup):
-
-### Group Check - State.vi
-
--- Controls --
-- Matched Previous?:
-- Cross CSM Data (in):
-- GlobalLogFilter.lvclass:
-
--- Indicators --
-- Matched? (dup):
-- Cross CSM Data:
-- GlobalLogFilter.lvclass (dup):
-
-### Group Check - StateType.vi
-
--- Controls --
-- Matched Previous?:
-- Cross CSM Data (in):
-- GlobalLogFilter.lvclass:
-
--- Indicators --
-- Matched? (dup):
-- Cross CSM Data:
-- GlobalLogFilter.lvclass (dup):
-
-### Set CSM LogType Filter.vi
-
--- Controls --
-- LogType:
-- GlobalLogFilter in:
-
--- Indicators --
-- GlobalLogFilter out:
-
-### Set CSM State Filter.vi
-
--- Controls --
-- CSM:State:
-- GlobalLogFilter in:
-
--- Indicators --
-- GlobalLogFilter out:
-
-### Set CSM StateType Filter.vi
-
--- Controls --
-- LogType:
-- GlobalLogFilter in:
-
--- Indicators --
-- GlobalLogFilter out:
-
-### Set Global CSM Filter.vi
-
--- Controls --
-- Group:CSM:
-- GlobalLogFilter in:
-
--- Indicators --
-- GlobalLogFilter out:
-
-### Set Global LogType Filter.vi
-
--- Controls --
-- Group:LogType:
-- GlobalLogFilter in:
-
--- Indicators --
-- GlobalLogFilter out:
-
-### Set Global State Filter.vi
-
--- Controls --
-- Group:State:
-- GlobalLogFilter in:
-
--- Indicators --
-- GlobalLogFilter out:
-
-### Set Global StateType Filter.vi
-
--- Controls --
-- Group:LogType:
-- GlobalLogFilter in:
-
--- Indicators --
-- GlobalLogFilter out:
-
-### Log State Type.vi
-
--- Controls --
-- Complete(T)/Start(F):
-- Source Module:
-- State:
-
--- Indicators --
-- CSM_GlobalLog_STATE_TYPE:
-
-### Parse Register Message.vi
-
--- Controls --
-- state:
-- Module Name :
-- args:
-
--- Indicators --
-- target:
-- source:
-- status:
-- api:
-
-### Parse State with Arguments String.vi
-
--- Controls --
-- State with Arguments:
-The State string that requires the argument.
-
--- Indicators --
-- State:
-- Arguments:
-- Target Module:
-- Message Symbol:
-
-### Parse Unregister Message.vi
-
--- Controls --
-- state:
-- Module Name :
-- args:
-
--- Indicators --
-- target:
-- source:
-- status:
-- api:
-
-### Dequeue Element.vi
-
--- Controls --
-- timeout in ms (-1):
-- Priority Queue:
-
--- Indicators --
-- timed out?:
-- Cross JKI State Machine State:
-- Priority Queue(dup):
-- High Priority?:
-
-### Enqueue Element.vi
-
--- Controls --
-- High Priority?(F):
-- timeout in ms (-1):
-- Cross JKI State Machine State:
-- Priority Queue:
-
--- Indicators --
-- Priority Queue(dup):
-
-### Get Queue Status.vi
-
--- Controls --
-- Priority Queue in:
-
--- Indicators --
-- # pending insert:
-- # pending remove:
-- Priority Queue out:
-- # elements in queue:
-
-### Not a Refnum.vi
-
--- Controls --
-- Priority Queue.lvclass:
-
--- Indicators --
-- NaN/Path/Refnum?:
-
-### Obtain Priority Queue.vi
-
--- Controls --
-- create if not found? (T):
-- name:
-
--- Indicators --
-- created new?:
-- Priority Queue:
-
-### Release Priority Queue.vi
-
--- Controls --
-- force destroy? (F):
-- Priority Queue:
-
-### CSMP-Async Call.vi
-
--- Controls --
-- state:
-- args:
-- source/target:
-- Module Name:
-- Msg Type:
-
--- Indicators --
-- state out:
-- args out:
-- source/target out:
-- Pre-State out:
-- Pre-Args out:
-- error:
-
-### CSMP-Broadcast.vi
-
--- Controls --
-- state:
-- args:
-- source/target:
-- Module Name:
-- Msg Type:
-
--- Indicators --
-- state out:
-- args out:
-- source/target out:
-- Pre-State out:
-- Pre-Args out:
-- error:
-
-### CSMP-PostPostMsg.vi
-
--- Controls --
-- state:
-- args:
-- source/target:
-- Pre-State in:
-- Pre-Args in:
-- session error:
-- Module Name:
-- Response Arguments:
-
--- Indicators --
-- state out:
-- args out:
-- source/target out:
-- Pre-State out:
-- Pre-Args out:
-- error:
-
-### CSMP-PostSendMsg.vi
-
--- Controls --
-- state:
-- args:
-- source/target:
-- session error:
-- Module Name:
-- Response Arguments:
-
--- Indicators --
-- state out:
-- args out:
-- source/target out:
-- error:
-
-### CSMP-Register Status.vi
-
--- Controls --
-- state:
-- args:
-- source/target:
-- Module Name:
-
--- Indicators --
-- state out:
-- args out:
-- source/target out:
-- Pre-State out:
-- Pre-Args out:
-- error:
-
-### CSMP-Sync Call.vi
-
--- Controls --
-- state:
-- args:
-- source/target:
-- Response Timeout(-2 to use global setting):
-- Module Name:
-
--- Indicators --
-- state out:
-- args out:
-- source/target out:
-- Pre-State out:
-- Pre-Args out:
-- error:
-
-### CSMP-Unregister Status.vi
-
--- Controls --
-- state:
-- args:
-- source/target:
-- Module Name:
-
--- Indicators --
-- state out:
-- args out:
-- source/target out:
-- Pre-State out:
-- Pre-Args out:
-- error:
-
-### Auto Resize All MultiListbox Columns (Uniform Text).vi
-
--- Controls --
-- IgnoreCols(Empty as default):
-- Array:
-- Control in:
-
-### Dashboard Cell Resize.vi
-
--- Controls --
-- Cluster:
-- Cluster Size:Height:
-- Cluster Size:Width:
-- ClusterRef:
-
--- Indicators --
-- Bounds:Area Height:
-- Bounds:Area Width:
-
-### Dashboard Cell2 Array Resize.vi
-
--- Controls --
-- Num Columns:
-- Cluster:
-- Num Rows:
-- area height:
-- area width:
-- Array 2:
-
-### Open CSM BD.vi
-
--- Controls --
-- Current Module("" to generate a ID):
-- CSM:
-
-### Open CSM FP.vi
-
--- Controls --
-- Current Module("" to generate a ID):
-- CSM:
-
-### Select Greater_nevstop.vi
-
--- Controls --
-- A:
-- B:
-
--- Indicators --
-- lesser:
-
-### Append Application Directory If Relative.vi
-
--- Controls --
-- Relative path (.):
-
--- Indicators --
-- Application Directory (+ Relative):
-
-### Convert File Extension (Path)__ogtk.vi
-
--- Controls --
-- new ending (none):
-- file name:
-
--- Indicators --
-- prev ending:
-- new filename:
-
-### Convert File Extension (String)__ogtk.vi
-
--- Controls --
-- new ending (none):
-- file name:
-
--- Indicators --
-- prev ending:
-- new filename:
-
-### Parse VI Documentation String.vi
-
--- Controls --
-- NOTE-Map:
-- Documentation:
-
--- Indicators --
-- Ctrl-Doc Map:
-- Control Docs:
-- Core Doc:
-- Documentation (dup):
diff --git a/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description(zh-cn).md b/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description(zh-cn).md
deleted file mode 100644
index c271aa8ba..000000000
--- a/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description(zh-cn).md
+++ /dev/null
@@ -1,15 +0,0 @@
-# CSM API
-
-- [01. ģ(Templates)](./VI%20Description(zh-cn)/VI%20Description(zh-cn)%20-%2001.%20ģ(Templates).md)
-- [02. Ĺ(Core Functions)](./VI%20Description(zh-cn)/VI%20Description(zh-cn)%20-%2002.%20Ĺ(Core%20Functions).md)
-- [03. (Arguments)](./VI%20Description(zh-cn)/VI%20Description(zh-cn)%20-%2003.%20(Arguments).md)
-- [04. ӿ(Management API)](./VI%20Description(zh-cn)/VI%20Description(zh-cn)%20-%2004%20.ӿ(Management%20API).md)
-- [05. ģӿ(Module Operation API)](./VI%20Description(zh-cn)/VI%20Description(zh-cn)%20-%2005.%20ģӿ(Module%20Operation%20API).md)
-- [06. ״̬Ĺ(Status Registration)](./VI%20Description(zh-cn)/VI%20Description(zh-cn)%20-%2006.%20״̬Ĺ(Status%20Registration).md)
-- [07. ȫ־(Global Log)](./VI%20Description(zh-cn)/VI%20Description(zh-cn)%20-%2007.%20ȫ־(Global%20Log).md)
-- [08. ģʽ](./VI%20Description(zh-cn)/VI%20Description(zh-cn)%20-%2008.%20ģʽ.md)
-- [09. ò(Built-in Addons)](./VI%20Description(zh-cn)/VI%20Description(zh-cn)%20-%2009.%20ò(Build-in%20Addons).md)
-- [10. VI(Utility VIs)](./VI%20Description(zh-cn)/VI%20Description(zh-cn)%20-%2010.%20VI(Utility%20VIs).md)
-- [11. CSM-Helper API](./VI%20Description(zh-cn)/VI%20Description(zh-cn)%20-%2011.%20CSM-Helper%20API.md)
-- [12. Debug,Doc,Tools](./VI%20Description(zh-cn)/VI%20Description(zh-cn)%20-%2012.%20Debug,Doc,Tools.md)
-- [13. Internal](./VI%20Description(zh-cn)/VI%20Description(zh-cn)%20-%2013.%20Internal.md)
diff --git "a/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description(zh-cn)/VI Description(zh-cn) - 01. \346\250\241\346\235\277(Templates).md" "b/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description(zh-cn)/VI Description(zh-cn) - 01. \346\250\241\346\235\277(Templates).md"
deleted file mode 100644
index ab70691eb..000000000
--- "a/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description(zh-cn)/VI Description(zh-cn) - 01. \346\250\241\346\235\277(Templates).md"
+++ /dev/null
@@ -1,118 +0,0 @@
-# CSM API
-
-## ģ(Templates)
-
-> [!NOTE] CSM Name
-> - CSM ģӦΨһģᵼ CSM "Critical Error" ״̬
-> - Ϊ ""ʹ UUID Ϊģơģ鱻ΪģʽģбС
-> - '#' βģ齫ڹģʽСͬƵģ齫ͬһϢСκⲿϢһģ鴦ȡĸģС
-
-> [!NOTE] CSM ʼ״̬
-> - Ĭֵ JKISM ״̬һ, "Macro: Initialize"
-> - ͨĴ״̬ΪĿΪ˷ⲿijʼ״̬
-
-### CSM Module Template.vi
-
-ڴû CSM ģģ
-
-> Ref: CSM Name
-> Ref: CSM ʼ״̬
-
--- ؼ --
-- Name("" to use uuid): CSM ģ
-- Init State("Macro: Initialize"): CSM ʼ״̬, ĬΪ "Macro: Initialize"
-
-### CSM User Interface(UI) Module Template.vi
-
-ڴû CSM ģģ壬ģаû¼ṹӦû
-
-> Ref: CSM Name
-> Ref: CSM ʼ״̬
-
--- ؼ --
-- Name("" to use uuid): CSM ģ
-- Init State("Macro: Initialize"): CSM ʼ״̬, ĬΪ "Macro: Initialize"
-
-### CSM Module Template - Tiny.vi
-
-ڴû CSM ģģ塣ģĴȽϽա
-
-> Ref: CSM Name
-> Ref: CSM ʼ״̬
-
--- ؼ --
-- Name("" to use uuid): CSM ģ
-- Init State("Macro: Initialize"): CSM ʼ״̬, ĬΪ "Macro: Initialize"
-
-### CSM User Interface(UI) Module Template - Tiny.vi
-
-ڴû CSM ģģ壬ģаû¼ṹӦûģĴȽϽա
-
-> Ref: CSM Name
-> Ref: CSM ʼ״̬
-
--- ؼ --
-- Name("" to use uuid): CSM ģ
-- Init State("Macro: Initialize"): CSM ʼ״̬, ĬΪ "Macro: Initialize"
-
-### ģ֧
-
-#### CSM - Get New State Notifier Event.vi
-
-ȡû¼ڰ¼ṹ CSM ģС¼ṹ CSM ģ飬ͨ¼ṹȴ¼յµϢʱж¼ṹеĵȴִС
-
--- ؼ --
-- Name("" to use uuid) in: CSM ģ
-
--- ؼ --
-- New State Notifier Event: û¼յϢʱʹCSMģж¼ṹеĵȴ
-
-#### Timeout Selector.vi
-
-ڰû¼ṹģ
-
--- ؼ --
-- Timeout Expected: Ԥڵijʱ
-- Remaining States: ʣ״̬Ϊ 0ΪԤֵ
-
--- ؼ --
-- Timeout: ٲúʹõijʱ
-
-#### ģ
-
-##### CSM Critical Error.vi
-
- CSM ģشϢͨģظµġ
-
--- ؼ --
-- Arguments(as Reason): ԭ
-- CSM Name: CSM ģ
-
-##### CSM No Target Error.vi
-
-Ҫ CSM ģƵ˿ַʱ CSM ģĿģ鲻ڴϢ
-
-##### CSM Target Error.vi
-
- CSM ģϢĿģ鲻ڴϢ
-
--- ؼ --
-- Arguments(as CSM Name): ӲݵĿģ
-
-##### CSM Target Timeout Error.vi
-
- CSM ģϢĿģ鳬ʱϢ
-
--- ؼ --
-- Arguments(as CSM Name): ӲݵĿģ
-
-##### CSM Unhandled State Error.vi
-
- CSM ģδ״̬Ϣܵ
-- ڲϢתʹ˱ģδ״̬ʱ( JKISM Ϊһ)
-- յⲿͱģδ״̬ʱ
-
--- ؼ --
-- Undefined State: δ״̬
-- CSM Name: CSM ģ
-
diff --git "a/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description(zh-cn)/VI Description(zh-cn) - 02. \346\240\270\345\277\203\345\212\237\350\203\275(Core Functions).md" "b/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description(zh-cn)/VI Description(zh-cn) - 02. \346\240\270\345\277\203\345\212\237\350\203\275(Core Functions).md"
deleted file mode 100644
index 078b73eee..000000000
--- "a/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description(zh-cn)/VI Description(zh-cn) - 02. \346\240\270\345\277\203\345\212\237\350\203\275(Core Functions).md"
+++ /dev/null
@@ -1,371 +0,0 @@
-# CSM API
-
-## Ĺ(Core Functions)
-
-> [!NOTE] CSM Ϣʽ
-> [CSM Ϣַ(CSM Message)] >> [(Arguments)] [Ϣͷ(Message Symbol) ->|,->,-@] [Ŀģ(Target Module)] // [ע(Comments)]
-> - CSM Ϣַ(CSM Message): CSMϢCSMؼֺͻз
-> - ">>": CSM Ϣַ(CSM Message) (Arguments) ķָ
-> - (Arguments): CSM ϢIJCSMؼֺͻз
-> - Ϣͷ(Message Symbol): ϢͷţڱʶϢͣͬ(-@)첽(->)첽ȴ(->|)
-> - Ŀģ(Target Module): Ϣ͵Ŀģ飬ΪգʾϢᱻģ鴦ΪʱϢͷҲܴ
-> - ע(Comments): עϢᱻ
-
-> [!NOTE] CSM Ϣʽ
-> [CSM ַ(CSM Operation)] >> [(Arguments)] -> <[(operation)]> // [ע(Comments)]
-> TODO
-
-### Parse State Queue++.vi
-
- CSM ״̬Уؽִеһǰ״̬Ϣ
-
--- ؼ --
-- State Queue: ״̬бӵ롣Ӧ CSM λĴ
-- Previous Error: CSM Ĵرӵ롣ڴϣǰ״̬ "Error Handler" ״̬
-- Name("" to use uuid): CSM ģ
-- Response Timeout(-2 using Global Settings): ͬõijʱʱ䣬ĬΪ-2ʹȫáͨ"CSM - Set TMO of Sync-Reply.vi" ȫֳʱʱ䡣
-- Dequeue Timeout(0ms): CSM ϢеijʱãĬΪ0еȴ
-- Response Arguments: һ״̬ӦӦ CSM λĴڴⲿõķֵ
-
--- ؼ --
-- Remaining States: ƴӺ״̬
-- Arguments: ؿڵǰ״ַ̬ʹõκβЩλڡ>>ַ֮ע⣺ðκβɴӡַ绻зس
-- Current State: ִеһǰ״̬
-- Name Used: CSMģʵ
-- Argument - State: CSM ״̬˲ʾ״̬ǰ״̬
-- From Who: Current State ⲿ͵ģԴCSMģơ
-
-### Build State String with Arguments++.vi
-
- VI ڹ CSM Ϣַ(״̬Ŀģ顢Ϣ͵Ϣ)Ա㷢͵ CSM ģ顣
-
-> [!NOTE]
-> VI ֻܲƴ"첽ȴ"첽Ϣںأʹ Build Message with Arguments++.vi VI
-
-- :
-
-״̬ʱ, Target Module ("") ӦΪ.
-
- If State = A ûв, ô State with Arguments = A
- If State = A , Arguments = B ô State with Arguments = A >> B
-
-ڷCSM, Target Module ("") "Target"
-
-- ͬã͵Ϣȴ:
-
- If State = A ûв, ô State with Arguments = A -@target
- If State = A , Arguments = B ô State with Arguments = A >> B -@target
-
-- 첽ãϢ"Async Message Posted" ״̬ⲿģ鴦Ϻģ齫յ "Async Response" Ϣ:
-
- If State = A ûв, ô State with Arguments = A ->target
- If State = A , Arguments = B ô State with Arguments = A >> B ->target
-
--- ؼ --
-- State: ״̬Ϣַ
-- Arguments (""): State IJ
-- Target Module (""): Ϣ͵Ŀ CSM ģ
-- Sync-Call(-@) T By Default/Async-Call(->) F: ͬ"TRUE"; 첽"FALSE"
-
--- ؼ --
-- CSM Message String: ƴɵ CSM Ϣַ
-
-### Build Message with Arguments++.vi
-
- VI ڹ CSM Ϣַַ
-
-> [!NOTE] ϢƴAPI
-> APIֱӷϢֻƴϢַҪַ CSM ״̬к Parse State Queue++.vi зϢִв
-> Ϥ CSM £ԲʹôAPI, ֱַмӦϢַַ
-
-> [!NOTE] ̬VI(Polymorphic VI)ѡ:
-> - Build Message with Arguments(Auto Check).vi
-> - Build Asynchronous Message with Arguments.vi
-> - Build No-Reply Asynchronous Message with Arguments.vi
-> - Build Synchronous Message with Arguments.vi
-> - Build Interrupt Status Message.vi
-> - Build Normal Status Message.vi
-> - Build Register Status Message.vi
-> - Build Unregister Status Message.vi
-> - CSM - Replace Substitution Marks in Messages.vi
-
-#### Build Message with Arguments(Auto Check).vi
-
-ƴ CSM Ϣַ, ϢͷŻ State with Arguments Զ⡣
-
-> Ref: ϢƴAPI
-
--- ؼ --
-- State with Arguments: CSM ״ַ̬ĿģϢ
-- Arguments (""): ϢState with ArgumentsаIJᱻ滻
-- Target Module (""): Ŀģ顣Ϊʱ, ʹ State with Arguments еĬģ顣
-
--- ؼ --
-- CSM Message String: ƴɵ CSM Ϣַ
-
-#### Build Synchronous Message with Arguments.vi
-
-ƴ CSM ͬϢַϢͷΪ "-@", :
-
- Message >> Arguments -@ Target
-
-> Ref: ϢƴAPI
-
--- ؼ --
-- State with Arguments: CSM ״ַ̬
-- Arguments (""): ϢState with ArgumentsаIJᱻ滻
-- Target Module (""): Ŀģ顣Ϊʱ, ʹ State with Arguments еĬģ顣
-
--- ؼ --
-- CSM Message String: ƴɵ CSM Ϣַ
-
-#### Build Asynchronous Message with Arguments.vi
-
-ƴɵ CSM 첽ϢַϢͷΪ "->", :
-
- Message >> Arguments -> Target
-
-> Ref: ϢƴAPI
-
--- ؼ --
-- State with Arguments: CSM ״ַ̬
-- Arguments (""): ϢState with ArgumentsаIJᱻ滻
-- Target Module (""): Ŀģ顣Ϊʱ, ʹ State with Arguments еĬģ顣
-
--- ؼ --
-- CSM Message String: ƴɵ CSM Ϣַ
-
-#### Build No-Reply Asynchronous Message with Arguments.vi
-
-ƴɵ CSM 첽ϢַϢͷΪ "->|", :
-
- Message >> Arguments ->| Target
-
-> Ref: ϢƴAPI
-
--- ؼ --
-- State with Arguments: CSM ״ַ̬
-- Arguments (""): ϢState with ArgumentsаIJᱻ滻
-- Target Module (""): Ŀģ顣Ϊʱ, ʹ State with Arguments еĬģ顣
-
--- ؼ --
-- CSM Message String: ƴɵ CSM Ϣַ
-
-#### Build Normal Status Message.vi
-
-ƴͨ״̬ϢַϢʽ:
-
- Status >> Arguments ->
- //ַΪЧֻΪ˸䣬˸IJַ
- Status >> Arguments ->
- Status >> Arguments ->
-
-> Ref: ϢƴAPI
-
--- ؼ --
-- State with Arguments: CSM ͨ״̬Ϣַ
-- Arguments (""): ϢState with ArgumentsаIJᱻ滻
-
--- ؼ --
-- CSM Message String:ƴɵ CSM Ϣַ
-
-#### Build Interrupt Status Message.vi
-
-ƴж״̬ϢϢʽ:
-
- Status >> Arguments ->
-
-> Ref: ϢƴAPI
-
--- ؼ --
-- State with Arguments: CSM ж״̬Ϣַ
-- Arguments (""): ϢState with ArgumentsаIJᱻ滻
-
--- ؼ --
-- CSM Message String:ƴɵ CSM Ϣַ
-
-#### Build Register Status Message.vi
-
-ƴע״̬ϢַϢʽ:
-
- //[source-state]@[source-module] >> [response-message]@[response-module] ->
- status @ Source >> API @ Target ->
-
-: ģϢģĿʼAPI
-
- //ģϢģĿʼAPI
- DownloadFinished@Downloader >> StartPlay@Player ->
- //ģִϢʱPlayer ȱʡ
- DownloadFinished@Downloader >> StartPlay ->
- //жģ鶼Ϣʹ * ʾģϢģĿʼAPI
- DownloadFinished@* >> StartPlay@Player ->
-
-> Ref: ϢƴAPI
-
--- ؼ --
-- Target CSM: ״̬ CSM ģ
-- Source CSM(* as Default): ״̬ CSM ģ
-- Status: ע״̬
-- API (if "", same as Status): ״̬ģӦ API
-
--- ؼ --
-- CSM Message String:ƴɵ CSM Ϣַ
-
-#### Build Unregister Status Message.vi
-
-ƴȡע״̬ϢַϢʽ£
-
- //[source-state]@[source-module] >> [response-message]@[response-module] ->
- status @ Source >> API @ Target ->
-
- ȡģϢģĿʼAPI
-
- //ģϢģĿʼAPI
- DownloadFinished@Downloader >> StartPlay@Player ->
- //ģִϢʱPlayer ȱʡ
- DownloadFinished@Downloader >> StartPlay ->
-
-> Ref: ϢƴAPI
-
--- ؼ --
-- Target CSM: ״̬ CSM ģ
-- Source CSM(* as Default): ״̬ CSM ģ
-- Status: ע״̬
-
--- ؼ --
-- CSM Message String:ƴɵ CSM Ϣַ
-
-#### CSM - Replace Substitution Marks in Messages.vi
-
-Ϊܹı༭ CSM Ϣַṩ滻ǵĹܡ4ǿ滻
-- ǣ ͨʾͬIJ
-- ǣ ͨʾͬĿ
-- <1> ǣʾԶ1
-- <2> ǣʾԶ2
-
-磺߶ ַΪ "DAQDevice"States with Replace Token ַΪ
-
- ``` text
- Initialize -@
- Configure -@
- Read -@
- Close -@
- ```
-
-StatesΪ
-
- ``` text
- Initialize -@ DAQDevice
- Configure -@ DAQDevice
- Read -@ DAQDevice
- Close -@ DAQDevice
- ```
-
-> Ref: ϢƴAPI
-
--- ؼ --
-- States with Replace Token: 滻ǵ CSM ״ַ̬
-- : ǣ ͨʾͬIJ
-- : ǣ ͨʾͬĿ
-- <1>: Զ1
-- <2>: Զ2
-
--- ؼ --
-- States: 滻
-
-### CSM - Broadcast Status Change.vi
-
-ϵͳ㲥״̬ġע״̬ CSM ģ齫յ״̬ġ磺
-
- //㲥״̬
- Status >> Arguments ->
-
-> [!NOTE] CSM ״̬вAPI
-> API ֱӷϢֻƴϢַ Parse State Queue++.vi зϢִв
-> ϢƴAPI ͬǣ API CSM ״ַ̬룬൱״̬вϢ
-
--- ؼ --
-- Status with Arguments: 㲥״ֶ̬֧, ÿ״̬ "->"
-- State Queue(""): ״̬бӵ
-- Broadcast(T): Ƿ㲥Ŀ
-
--- ؼ --
-- Remaining States: ƴӺ״̬
-
-### Add State(s) to Queue By BOOL++.vi
-
- CSM Ϣַ CSM ϢСṩ TRUE/FALSE ״ַ̬ѡܹʹṹߴɶԣ߱Чʡ
-
-> Ref: CSM ״̬вAPI
-
-> [!NOTE] ̬VI(Polymorphic VI)ѡ:
-> - add State(s) to Queue By BOOL(Element).vi
-> - add State(s) to Queue By BOOL(Array Left).vi
-> - add State(s) to Queue By BOOL(Array Right).vi
-> - add State(s) to Queue By BOOL(Array All).vi
-
-#### Add State(s) to Queue By BOOL(Element).vi
-
- CSM Ϣַ CSM ϢСṩ TRUE/FALSE ״ַ̬ѡܹʹṹߴɶԣ߱Чʡ
-
-> Ref: CSM ״̬вAPI
-
--- ؼ --
-- State Queue(""): ״̬бӵ
-- TRUE(""): Condition Ϊ True ʱ״ַ̬
-- FALSE(""): Condition Ϊ False ʱ״ַ̬
-- Condition: ѡӵTRUEն˻Falseն˵״ַ̬ı־
-- High Priority(FALSE): ΪTrue״̬뵽State Queue("")ǰˡΪFalseӵβ
-
--- ؼ --
-- Remaining States: ƴӺ״̬
-
-#### Add State(s) to Queue By BOOL(Array Left).vi
-
- CSM Ϣַ CSM ϢСṩ TRUE/FALSE ״ַ̬ѡܹʹṹߴɶԣ߱Чʡ
-
-> Ref: CSM ״̬вAPI
-
--- ؼ --
-- State Queue(""): ״̬бӵ
-- TRUE(""): Condition Ϊ True ʱ״ַ̬
-- FALSE(""): Condition Ϊ False ʱ״ַ̬
-- Condition: ѡӵTRUEն˻Falseն˵״ַ̬ı־
-- High Priority(FALSE): ΪTrue״̬뵽State Queue("")ǰˡΪFalseӵβ
-
--- ؼ --
-- Remaining States: ƴӺ״̬
-
-#### Add State(s) to Queue By BOOL(Array Right).vi
-
- CSM Ϣַ CSM ϢСṩ TRUE/FALSE ״ַ̬ѡܹʹṹߴɶԣ߱Чʡ
-
-> Ref: CSM ״̬вAPI
-
--- ؼ --
-- State Queue(""): ״̬бӵ
-- TRUE(""): Condition Ϊ True ʱ״ַ̬
-- FALSE(""): Condition Ϊ False ʱ״ַ̬
-- Condition: ѡӵTRUEն˻Falseն˵״ַ̬ı־
-- High Priority(FALSE): ΪTrue״̬뵽State Queue("")ǰˡΪFalseӵβ
-
--- ؼ --
-- Remaining States: ƴӺ״̬
-
-#### Add State(s) to Queue By BOOL(Array All).vi
-
-ݸȼBool룬VITRUE/Falseʣ״̬״̬
-High PriorityǷʣ״̬֮ǰ֮TRUEFalseַ
-BoolҪӵַTRUEFalse
-
-> Ref: CSM ״̬вAPI
-
--- ؼ --
-- State Queue(""): ״̬бӵ
-- TRUE(""): Condition Ϊ True ʱ״ַ̬
-- FALSE(""): Condition Ϊ False ʱ״ַ̬
-- Condition: ѡӵTRUEն˻Falseն˵״ַ̬ı־
-- High Priority(FALSE): ΪTrue״̬뵽State Queue("")ǰˡΪFalseӵβ
-
--- ؼ --
-- Remaining States: ƴӺ״̬
diff --git "a/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description(zh-cn)/VI Description(zh-cn) - 03. \345\217\202\346\225\260(Arguments).md" "b/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description(zh-cn)/VI Description(zh-cn) - 03. \345\217\202\346\225\260(Arguments).md"
deleted file mode 100644
index b69212eae..000000000
--- "a/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description(zh-cn)/VI Description(zh-cn) - 03. \345\217\202\346\225\260(Arguments).md"
+++ /dev/null
@@ -1,99 +0,0 @@
-# CSM API
-
-## (Arguments)
-
-> [!NOTE] CSM Ϣؼ
-> : '->','->|','-@','-&','<-", "\r", "\n", "//", ">>", ">>>", ">>>>", ";", ","
-
-> [!NOTE] CSM HEXSTR ʽ
-> Ϊ CSM дκͣCSM Ĭṩһ Ϊ HEXSTR IJʽڴκ͡
-> HEXSTR LabVIEW תΪ壬Ȼ˱ڴʽʾΪʮַԱ CSM дݡ
-> HEXSTRȫ״̬ƻ CSM ϢַĽ
-
-> [!NOTE] CSM ERROR
-> LabVIEW Ϣͨسҿܰ CSM Ϣؼֱ֣ͨΪ CSM ݡ
-> ȻԽϢתΪ HEXSTR ʽ߱ɶԣ log вֱ۵ĶȡϢ
-> Ϊ CSM д LabVIEW Ϣ, ṩһ CSM ʽȫ״̬ƻ CSM ϢַĽ
-> ĸʽΪ: "[Error: error-code] error-description-As-safe-argument-string"
-
-### CSM - Keywords.vi
-
-CSM ϢеĹؼб
-
-> Ref: CSM Ϣؼ
-
--- ؼ --
-- keywords: CSM ؼб
-- keywords(%Hex format): CSM ؼб%Hexʽ
-
-### CSM - Make String Arguments Safe.vi
-
-ַе CSM ؼתΪ%Hexʽ, ֤Ӱ CSM Ϣַ
-
-> Ref: CSM Ϣؼ
-
--- ؼ --
-- Argument String: ַ
-
--- ؼ --
-- Safe Argument String: ȫַ
-
-### CSM - Revert Arguments-Safe String.vi
-
-ȫַе %Hexʽ CSM ؼתͨʽ
-
-> Ref: CSM Ϣؼ
-
--- ؼ --
-- Safe Argument String: ȫַ
-
--- ؼ --
-- Origin Argument String: ַ
-
-### CSM - Convert Data to HexStr.vi
-
- LabVIEW תΪΪ HEXSTR ʽַ
-
-> Ref: CSM HEXSTR ʽ
-
--- ؼ --
-- Variant: LabVIEW ݣ֧ͨ
-
--- ؼ --
-- HEXSTR: CSM HEXSTR ʽ
-
-### CSM - Convert HexStr to Data.vi
-
-ʮַתرݡ
-
-> Ref: CSM HEXSTR ʽ
-
--- ؼ --
-- HEXSTR: CSM HEXSTR ʽ
-
--- ؼ --
-- Variant: LabVIEW ݣ֧ͨ
-
-### CSM - Convert Error to Argument.vi
-
- LabVIEW תΪ CSM ʽ
-
-> Ref: CSM ERROR
-
--- ؼ --
-- error: LabVIEW
-
--- ؼ --
-- Argument: CSM ʽ
-
-### CSM - Convert Argument to Error.vi
-
- CSM ʽתΪ LabVIEW ء
-
-> Ref: CSM ERROR
-
--- ؼ --
-- Argument: CSM ʽ
-
--- ؼ --
-- error: LabVIEW
diff --git "a/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description(zh-cn)/VI Description(zh-cn) - 04 .\347\256\241\347\220\206\346\216\245\345\217\243(Management API).md" "b/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description(zh-cn)/VI Description(zh-cn) - 04 .\347\256\241\347\220\206\346\216\245\345\217\243(Management API).md"
deleted file mode 100644
index 8e2749a49..000000000
--- "a/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description(zh-cn)/VI Description(zh-cn) - 04 .\347\256\241\347\220\206\346\216\245\345\217\243(Management API).md"
+++ /dev/null
@@ -1,67 +0,0 @@
-# CSM API
-
-## ӿ(Management API)
-
-> [!NOTE] CSM ģʽ
-> 1. Stand-alone: ģʽģƣԶһID, ڱʶģ顣
-> 2. CSM: ͨ CSM ģ顣
-> 3. Action Worker: ģʽģƺӡ#ԱǴģΪߣͬƵ߹ͬϢС
-> 4. Chain Node: ʽڵ㡣ģƺӡ$ԱǴģΪʽڵ㣬ͬһϵϢδݣֱijڵ㴦Ϣ
-
-### CSM - Start Async Call.vi
-
-첽ģVIƬ
-
-### CSM - Synchronized Call.vi
-
-ͬģVIƬ
-
-### CSM - Module VI Reference.vi
-
-ͨ "VI Reference" ͬϢѯȡ CSM ģ VI á
-
--- ؼ --
-- CSM Name: CSM ģ
-- Current Module("" to generate a ID): ѯCSMģı, ΪʱһΨһID
-- Response Timeout(-2 using Global Settings): ͬõijʱʱ䣬ĬΪ-2ʹȫáͨ"CSM - Set TMO of Sync-Reply.vi" ȫֳʱʱ䡣
-
--- ؼ --
-- CSM Module VIRef: CSM ģ VI
-
-### CSM - Check If Module Exists.vi
-
- CSM ģǷ
-
--- ؼ --
-- CSM Name: CSM ģ
-
--- ؼ --
-- Exist?: ģʽǷ
-- CSM Name(dup): CSM Name
-
-### CSM - List Modules.vi
-
-глCSMģ顣
-
-> Ref: CSM ģʽ
-
--- ؼ --
-- Exclude Standalone CSM(T): Ƿģʽģ
-
--- ؼ --
-- Module Names: CSM ģб
-
-### CSM - Module Status.vi
-
-ȡCSMģ״̬ģʽϢеĴϢ
-
-> Ref: CSM ģʽ
-
--- ؼ --
-- CSM Name: CSM ģ.
-
--- ؼ --
-- Mode: ģĹģʽ
-- #As Worker: ģʽ£ģĹ
-- #msg to be processed: CSMϢеĴϢ
-- CSM Name(dup): CSM Name
diff --git "a/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description(zh-cn)/VI Description(zh-cn) - 05. \346\250\241\345\235\227\346\223\215\344\275\234\346\216\245\345\217\243(Module Operation API).md" "b/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description(zh-cn)/VI Description(zh-cn) - 05. \346\250\241\345\235\227\346\223\215\344\275\234\346\216\245\345\217\243(Module Operation API).md"
deleted file mode 100644
index 01a799fff..000000000
--- "a/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description(zh-cn)/VI Description(zh-cn) - 05. \346\250\241\345\235\227\346\223\215\344\275\234\346\216\245\345\217\243(Module Operation API).md"
+++ /dev/null
@@ -1,130 +0,0 @@
-# CSM API
-
-## ģӿ(Module Operation API)
-
-### CSM - Wait for Module to Be Alive.vi
-
-ָijʱʱڵȴ CSM ģߡ
-
--- ؼ --
-- CSM Name: CSM ģ
-- Wait(5000ms): ȴʱʱ䣬ĬΪ5s
-
--- ؼ --
-- CSM Name(dup): CSM ģ
-- Waited(ms): ѵȴʱ
-
-### CSM - Wait for All Modules to be Alive.vi
-
-ָijʱʱڵȴһ CSM ģȫߡ
-
--- ؼ --
-- CSM Names: CSM ģ
-- Timeout(5000ms): ȴʱʱ䣬ĬΪ5s
-
--- ؼ --
-- CSMs Left: ʱδߵ CSM ģ
-- waited(ms): ѵȴʱ
-
-### CSM - Wait for All Modules to Exit.vi
-
-ָijʱʱڵȴһ CSM ģȫߣͨڳ˳
-
--- ؼ --
-- CSM Names: CSM ģ
-- Timeout(5000ms): ȴʱʱ䣬ĬΪ5s
-
--- ؼ --
-- CSMs Left: ʱδߵ CSM ģ
-- waited(ms): ѵȴʱ
-
-### CSM - Post Message.vi
-
-Ͳص첽ϢCSMϢͺִ֮Ĵ롣
-
--- ؼ --
-- CSM Name: CSM ģ
-- State: Ϣַ
-- Arguments(""): Ϣ
-- Current Module("" to generate a ID):ǰģƣûʱһʱIDڵжλá
-
-### CSM - Wait and Post Message.vi
-
-Ͳص첽ϢCSMϢͺִ֮Ĵ롣CSMģδʱȴָʱ䡣
-
--- ؼ --
-- CSM Name: CSM ģ
-- State: Ϣַ
-- Arguments(""): Ϣ
-- Current Module("" to generate a ID): ǰģƣûʱһʱIDڵжλá
-- Wait(5000ms): ȴʱʱ䣬ĬΪ5s
-
-### CSM - Send Message and Wait for Reply.vi
-
-ͬϢCSMȴϢʱδȡϢسʱ
-
--- ؼ --
-- Target Module: Ŀ CSM ģ
-- State: Ϣַ
-- Arguments(""): Ϣ
-- Response Timeout(5000ms): ȴصijʱãĬ 5000ms.
-
--- ؼ --
-- Response: صӦ
-
-### CSM - Wait and Send Message for Reply.vi
-
-ͬϢCSMȴϢʱδȡϢسʱCSMģδʱȴָʱ䡣
-
--- ؼ --
-- CSM Name: CSM ģ
-- State: Ϣַ
-- Arguments(""): Ϣ
-- Response Timeout(-2 using Global Settings): ͬõijʱʱ䣬ĬΪ-2ʹȫáͨ"CSM - Set TMO of Sync-Reply.vi" ȫֳʱʱ䡣
-- Current Module("" to generate a ID): ǰģƣûʱһʱIDڵжλá
-- Wait(5000ms): ȴʱʱ䣬ĬΪ5s
-
--- ؼ --
-- Response: صӦ
-- Source CSM: صӦԴ CSM ģ
-
-### CSM - Run Script.vi
-
- CSM űһԵִжϢָ
-
--- ؼ --
-- CSM Scripts: еĽű
-- Response Timeout(-2 using Global Settings): ͬõijʱʱ䣬ĬΪ-2ʹȫáͨ"CSM - Set TMO of Sync-Reply.vi" ȫֳʱʱ䡣
-- Continue If Error?(F): Ƿִ
-- Current Module("" to generate a ID): ǰģƣûʱһʱIDڵжλá
-- Wait(5000ms): ȴʱʱ䣬ĬΪ5s
-
--- ؼ --
-- Scripts Left: ʣδִеĽű
-
-### CSM - Status Change Event.vi
-
-ȡ CSM ״̬¼
-
--- ؼ --
-- CSM Module: CSM ģ
-
--- ؼ --
-- Status Change Event: CSM ״̬¼
-
-### CSM - Destroy Status Change Event.vi
-
-ͷ CSM ״̬¼
-
--- ؼ --
-- Status Change Event: CSM ״̬¼
-
-### CSM - Module Exit Event.vi
-
-ȡ CSM ģ˳¼
-
--- ؼ --
-- CSM Module: CSM ģ
-
--- ؼ --
-- CSM Exit Event: CSM ģ˳¼
diff --git "a/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description(zh-cn)/VI Description(zh-cn) - 06. \347\212\266\346\200\201\350\256\242\351\230\205\347\256\241\347\220\206(Status Registration).md" "b/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description(zh-cn)/VI Description(zh-cn) - 06. \347\212\266\346\200\201\350\256\242\351\230\205\347\256\241\347\220\206(Status Registration).md"
deleted file mode 100644
index f9c0a3742..000000000
--- "a/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description(zh-cn)/VI Description(zh-cn) - 06. \347\212\266\346\200\201\350\256\242\351\230\205\347\256\241\347\220\206(Status Registration).md"
+++ /dev/null
@@ -1,75 +0,0 @@
-# CSM API
-
-## ״̬Ĺ(Status Registration)
-
-### CSM - Register Status Change.vi
-
-עԽCSMģ״̬ĵ֪ͨδ Response Message ΪգʹͬStatus ΪӦϢ
-
--- ؼ --
-- CSM Name: CSM ģ.
-- Source CSM Name ('*' as Default): ״̬CSMģ顣ʹá*ʾͬ״̬ģ顣
-- Status: ״ַ̬
-- API (if "", same as Status): ע״̬仯յϢ
-- Priority(T:As Status,F:As Interrupt): ӦϢΪFalse뵽״̬еǰ棻丽ӵеβ
-
--- ؼ --
-- CSM Name(dup): CSM Name
-
-### CSM - Unregister Status Change.vi
-
-ȡע CSM ģ״̬ĵ֪ͨ
-
--- ؼ --
-- CSM Name: CSM ģ.
-- Source CSM Name: ״̬CSMģ顣ʹá*ʾͬ״̬ģ顣
-- Status: ״ַ̬
-
--- ؼ --
-- CSM Name(dup): CSM Name
-
-### CSM - List All Status Registration.vi
-
--- ؼ --
-- Status Array:
-
-### CSM - List Mapping Relationships in Broadcast Registry.vi
-
--- ؼ --
-- Mapping Relationships:
-
-### CSM - List Rules in Broadcast Registry.vi
-
--- ؼ --
-- Rules:
-
-### CSM - List Status in Broadcast Registry.vi
-
--- ؼ --
-- Status in Registry:
-
-### CSM - Check Mapping Relationship in Broadcast Registry.vi
-
--- ؼ --
-- CSM Name:
-- Broadcast state:
-
--- ؼ --
-- Array:
-
-### CSM - Check Status Registration.vi
-
--- ؼ --
-- CSM Name:
-- Broadcast state:
-
--- ؼ --
-- Array:
-
-### CSM - Remove Module in Broadcast Registry.vi
-
--- ؼ --
-- CSM Name:
-
--- ؼ --
-- CSM Name(dup):
\ No newline at end of file
diff --git "a/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description(zh-cn)/VI Description(zh-cn) - 07. \345\205\250\345\261\200\346\227\245\345\277\227(Global Log).md" "b/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description(zh-cn)/VI Description(zh-cn) - 07. \345\205\250\345\261\200\346\227\245\345\277\227(Global Log).md"
deleted file mode 100644
index 96f8d959d..000000000
--- "a/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description(zh-cn)/VI Description(zh-cn) - 07. \345\205\250\345\261\200\346\227\245\345\277\227(Global Log).md"
+++ /dev/null
@@ -1,72 +0,0 @@
-# CSM API
-
-## ȫ־(Global Log)
-
-> [!NOTE] CSM ȫ־
-> CSM ȫ־ܣڼ¼ȫ״̬¼ڵԡصȳ
->
-> Լ¼Ϣ
-> 1. CSM ״̬״̬
-> 2. CSM ģϢͨѶݷ
-> 3. CSM ģ״̬
-> 4. CSM ģĴ
-> 5. CSM ģ״̬ĺȡ
-> 6. CSM ģ鴦ĴϢ
-> 7. ûԶ¼
->
-> ԹҪȫ־APIпûԸԼҪԹߡ
-
-### CSM - Global Log Event.vi
-
-ȡ CSM ȫ״̬û¼
-
-> Ref: CSM ȫ־
-
--- ؼ --
-- CSM Global Log Event: CSM ȫ״̬û¼
-
-### CSM - Destroy Global Log Event.vi
-
-ͷ CSM ȫ״̬û¼
-
-> Ref: CSM ȫ־
-
--- ؼ --
-- CSM Global Log Event: CSM ȫ״̬û¼
-
-### CSM - Generate User Global Log.vi
-
-ûȫ¼;Եȳ
-
--- ؼ --
-- Log: ¼
-- Arguments: ¼
-- From Who: Դ
-- ModuleName: ģ
-
-### CSM - Global Log Error Handler.vi
-
-CSM Ϣͨ CSM Global log ڵԹߡ̨ log ¼жܼ¼
-
--- ؼ --
-- Place("" to use VI's Name): Ƿĵص
-- Clear Error(T): ǷĬ
-
-### CSM - Set Log Filter Rules.vi
-
-ȫֵĹ˹ӦڷԴͷ log ˹ʱԴͷͣκιҲټ log ¼
-
-### CSM - List Log Filter Rules As Strings.vi
-
-гȫֵĹ˹
-
--- ؼ --
-- Rule Strings: ˹ַ
-
-### CSM - Convert Filter Rules.vi
-
-˹бתΪ˹ʵ
-
-### CSM - Filter Global Log.vi
-
-ݹжǷlogˡVI ĹжϷڶĶˣ˲ӰߵĶġ
diff --git "a/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description(zh-cn)/VI Description(zh-cn) - 08. \351\253\230\347\272\247\346\250\241\345\274\217.md" "b/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description(zh-cn)/VI Description(zh-cn) - 08. \351\253\230\347\272\247\346\250\241\345\274\217.md"
deleted file mode 100644
index 1e069d001..000000000
--- "a/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description(zh-cn)/VI Description(zh-cn) - 08. \351\253\230\347\272\247\346\250\241\345\274\217.md"
+++ /dev/null
@@ -1,136 +0,0 @@
-# CSM API
-
-> [!NOTE] ƴAPI
-> VI ֻģַûʵʹܣ˵Ϥ CSM ֱӦַţDZôAPI.
-
-## ģʽ (Work Mode API)
-
-> [!NOTE] CSM ģʽ(worker mode)
->
-> һ CSM ģ飬ͨʵʵƺӡ#,ͬϢУʵֹģʽ
-> - ⲿϿЩʵһһϵģ飬Ϊ Worker Agent
-> - ÿһʵΪ Worker
->
-> Ϊ
-> ⲿ߿Ϊ Worker Agent һCSMģ飬ԽϢͨѶ״̬עȲ
-> ڲе Worker Worker Agent ϢȡϢϢˣWorker ģʽܹʵһ CSM ģIJϢ
->
->
-> //ģΪ module#, module Worker Agentƣʵ 4 ʵĸʵֿΪ
-> // - module#59703F3AD837
-> // - module#106A470BA5EC
-> // ֱӺ worker ͨѶҪ Worker Agent ͨѶ
-> csm message >> arguments -@ module //ͬϢе worker Ϣ
-> csm message >> arguments -> module //ͬϢе worker Ϣ
->
-> Ӧó
-> 1. 10086 Աij
-> 2. صij
-> 3. ij
-> 4. TCP Server Client
-
-### CSM - Mark As Worker Module.vi
-
-CSMƺӡ#ԱǴģ鹤ڹģʽ¡
-
-> Ref: ƴAPI
-> Ref: CSM ģʽ(worker mode)
-
--- ؼ --
-- CSM Name: CSM ģ
-
--- ؼ --
-- CSM Name(marked as worker): ӡ#ǵCSMģ
-
-## ģʽ (Chain of Responsibility API) -
-
-> [!NOTE] CSM ģʽ(Chain of Responsibility mode)
->
-> CSM ģ飬ƺӡ$,ɴһͨģʽγһģ顣
-
-> - ⲿϿЩʵһһϵģ飬Ϊ Chain
-> - ÿһʵΪ chain node
->
-> Ϊ
-> ⲿ߿Ϊ Chain һ CSM ģ飬ԽϢͨѶ״̬עȲ
-> ڲNodes ˳γԴϢ node еǰϢʱϢݡ
->
->
-> //ģΪ module$, module chain ƣʵ 4 ʵĸʵֿΪ
-> // - module$1
-> // - module$2
-> // - module$3
-> // - module$4
-> // ɵ Chain ˳Ϊ module$1 >> module$2 >> module$3 >> module$4
-> // module$3 module$4 ܹ "csm message"
-> csm message >> arguments -@ module
-> // Ϣ module$3 , module$4 Ӧ
->
-> Ӧó
-> 1. Ȩְ̣λ㼶ľܹ¼
-> 2. ƴӣͬģʵֲͬͨƴӿɲͬܺϼ
-> 3. ܸǣͨʵOOPе
-
-### CSM - Mark As Chain Module.vi
-
-[!WARNING] 鹦ܻδȫ֤ʹá
-
-> Ref: CSM ģʽ(Chain of Responsibility mode)
-> Ref: ƴAPI
-
--- ؼ --
-- CSM Name: CSM ģ
-- Order: ģʽµ˳
-
--- ؼ --
-- CSM Name(marked as Chain):ӡ$ǵCSMģ
-
-## ·ѭ֧(Side-Loop Support)
-
-### CSM - Request CSM to Post Message.vi
-
- CSM ϢͨںCSMеĹѭЩѭ CSM һģ鹦ܡ
-
--- ؼ --
-- Module Name:״̬CSM
-- Status: 㲥״̬
-- Arguments (""): 㲥״̬
-- Target Module:Ŀģ
-
-### CSM - Request CSM to Broadcast Status Change.vi
-
- CSM ״̬ͨںCSMеĹѭЩѭ CSM һģ鹦ܡ
-
--- ؼ --
-- Module Name:״̬CSM
-- Status: 㲥״̬
-- Arguments (""): 㲥״̬
-- Broadcast(T): Ƿ㲥Ŀ
-
-### CSM - Module Turns Invalid.vi
-
-CSMǷѾ˳ͨںCSMеĹѭЩѭ CSM һģ鹦ܡ VIڲѭ˳
-
--- ؼ --
-- CSM Name: ģ
-
--- ؼ --
-- Turn Invalid(Exit)?: ǷѾ˳
-
-### CSM - Flood of Events Handler Side Loop.vi
-
-### CSM - Forward States to CSM.vi
-
--- ؼ --
-- High Priority(T):
-- Module Name:Returns any argument(s) that may be used in the current state string. These arguments come after the ">>" characters
-- State(s) in (""):Wire the existing states to this input. The default is an empty string.
-
-### CSM - Forward UI Operations to CSM.vi
-
--- ؼ --
-- Name("" to use uuid):
-- State(s) in (""):
-
--- ؼ --
-- States Out:
diff --git "a/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description(zh-cn)/VI Description(zh-cn) - 09. \345\206\205\347\275\256\346\217\222\344\273\266(Build-in Addons).md" "b/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description(zh-cn)/VI Description(zh-cn) - 09. \345\206\205\347\275\256\346\217\222\344\273\266(Build-in Addons).md"
deleted file mode 100644
index 5737c6f13..000000000
--- "a/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description(zh-cn)/VI Description(zh-cn) - 09. \345\206\205\347\275\256\346\217\222\344\273\266(Build-in Addons).md"
+++ /dev/null
@@ -1,149 +0,0 @@
-# CSM API
-
-## ò(Build-in Addons)
-
-### CSM WatchDog
-
-> [!NOTE] CSM WatchDog ʵֵԭ
-> LabVIEW VI ˳ʱԶͷжС¼ȾԴˣǿͨһ WatchDog ̣߳һVI봴ĶԴԴVI˳ͷʱ WatchDog ̸߳δ˳ CSM ģ鷢 "Macro: Exit"֤˳
-
-#### CSM - Start Watchdog to Ensure All Modules Exit.vi
-
-CSM Watchdog ̣߳ڱ֤˳е첽 CSM ģ鶼˳
-
-> Ref: CSM WatchDog ʵֵԭ
-
-#### CSM Watchdog Thread.vi
-
-CSM Watchdog ̣߳ڱ֤˳е첽 CSM ģ鶼˳
-
-> Ref: CSM WatchDog ʵֵԭ
-
--- ؼ --
-- WatchdogQ: Watchdog Դ
-
-### CSM File Logger
-
-> [!NOTE] CSM File Logger ʵֵԭ
-> ͨ CSM Global Log Event ¼ԽӦеȫ CSM Ϣ¼ںڷʹλ
-> ļΪıļΪ .csmlogͨ±ı༭ѯߴ
-
-#### CSM - Start File Logger.vi
-
- CSM ¼ļ¼ܡ
-
-> Ref: CSM File Logger ʵֵԭ
-
--- ؼ --
-- Log File Path: ¼ļ·
-- Enable? (T): Ƿ
-- log limit: ¼ļ
-- Timestamp format: ʱʽ
-- WatchDog? (T): Ƿ WatchDog
-- Filter Rules: ʱ˹
-- Exit When All Module Exist?(F): CSM ȫģ˳Ƿ˳
-
--- ؼ --
-- LogFile: CSM lOG ļ·
-- WatchDogQueue: WatchDog Դ
-
-#### CSM-Logger-Thread.vi
-
- CSM Global Log ļ¼߳VI
-
-> Ref: CSM File Logger ʵֵԭ
-
--- ؼ --
-- Log File Path: ¼ļ·
-- log limit: ¼ļ
-- Timestamp format: ʱʽ
-- WatchDogQ: WatchDogԴڼǷ˳
-- GlobalLogFilter.lvclass: ¼
-- Exit When All Module Exist?(F): CSM ȫģ˳Ƿ˳
-
-### CSM Loop Support
-
-> [!NOTE] CSM LOOP Ƶԭ
-> JKISM/CSM һ״̬ܣѭһֳijʵѭûһϺõķ
-> - һCase֧ʹѭʵ֣ᵼ״̬Ŀڴ״̬УлҲӦⲿϢ
-> - ͨ״̬ѭһ״̬Уһѭ״̬Ҳᵼ²ܺܺõӦⲿϢҺֱܲۡ
-> ˣҪΪṩһѭʵַʽϵ⡣
->
-
-#### CSMLS - Add Exit State(s) with Loop Check.vi
-
-˳ʱѭ
-
--- ؼ --
-- States Queue: ״̬бӵ
-- Exiting States: ˳״̬
-
--- ؼ --
-- Remaining States: ʣϢ
-
-#### CSMLS - Append Continuous State.vi
-
-ѭ״̬
-
--- ؼ --
-- States Queue: ״̬бӵ
-- Loop State(s) and Arguments: ѭ״̬
-- Continuous State:ѭ״̬
-- Continuous Arguments (""): ѭ״̬
-- Append(T): Ƿ
-
--- ؼ --
-- Remaining States: ʣϢ
-
-#### CSMLS - Define Loop State(s).vi
-
-ѭ
-
--- ؼ --
-- States Queue: ״̬бӵ
-- Loop State(s) and Arguments: ѭ״̬
-
--- ؼ --
-- Remaining States: ʣϢ
-
-#### CSMLS - Remove Loop Tag and previous State(s) to Break.vi
-
-ͨƳ Ǻ ǰ״̬ﵽֹͣѭ
-
-
-
- CSM ϢУϢʱִеǰAPIƳעڵϢ
-
- DAQ: Acquire //Ƴ
- DAQ: Continuous Check -> //Ƴ
- DAQ: Stop
- DAQ: Release
-
-൱ڲִκDAQֱӽֹͣͷš
-
--- ؼ --
-- States Queue: ״̬бӵ
-
--- ؼ --
-- Remaining States: ʣϢ
-
-#### CSMLS - Remove Loop Tag to Break.vi
-
-ͨƳ ǣﵽֹͣѭ
-
-
-
- CSM ϢУϢʱִеǰAPIƳעڵϢ
-
- DAQ: Acquire
- DAQ: Continuous Check -> //Ƴ
- DAQ: Stop
- DAQ: Release
-
-൱ȻִеǰDAQȻֹͣͷš
-
--- ؼ --
-- States Queue: ״̬бӵ
-
--- ؼ --
-- Remaining States: ʣϢ
diff --git "a/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description(zh-cn)/VI Description(zh-cn) - 10. \345\267\245\345\205\267VI(Utility VIs).md" "b/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description(zh-cn)/VI Description(zh-cn) - 10. \345\267\245\345\205\267VI(Utility VIs).md"
deleted file mode 100644
index a84187f21..000000000
--- "a/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description(zh-cn)/VI Description(zh-cn) - 10. \345\267\245\345\205\267VI(Utility VIs).md"
+++ /dev/null
@@ -1,199 +0,0 @@
-# CSM API
-
-## VI(Utility VIs)
-
-### CSM - Compact Multiple States.vi
-
-״̬ճɵַԹʹ
-
--- ؼ --
-- Multiple States: CSM״ַ̬
-
--- ؼ --
-- States: CSM״ַַ̬
-
-### CSM - Break Down Multiple States String.vi
-
-CSM״ַַ̬иCSM״ַ̬
-
--- ؼ --
-- States: CSM״ַַ̬
-
--- ؼ --
-- Multiple States: CSM״ַ̬
-
-### CSM - Build Exit Messages of CSMs.vi
-
-CSMģƣƴ˳Ϣ("Macro: Exit")
-
-> Ref: ϢƴAPI
-
--- ؼ --
-- CSMs: CSMģ
-- State with Arguments("Macro: Exit): ˳Ϣ
-
--- ؼ --
-- States: ƴɵCSMϢַ
-
-### CSM - Filter Duplicate Messages By Name.vi
-
-ظϢֻµϢ
-
-> Ref: ϢƴAPI
-
--- ؼ --
-- States: Ϣַ
-- Whole Messages in Check?(T): ǷϢַ FALSEֻϢơ
-
--- ؼ --
-- Filtered States: ˺Ϣַ
-
-### CSM - Filter Messages to Non-Existing Modules.vi
-
-˷ڵģϢ
-VIлʹ CSM - List Modules.vi ȡлCSMģ飬Ȼ˵ģϢ
-
--- ؼ --
-- States: Ϣַ
-
--- ؼ --
-- Filtered States: ˺Ϣַ
-
-### CSM - Remove Duplicated Following Messages.vi
-
--- ؼ --
-- Current State:
-- Remaining States:
-
--- ؼ --
-- Remaining States Left:
-
-### CSM Data Type String to Enum.vi
-
-### CSM Data Type String.vi
-
--- ؼ --
-- Data:
-
--- ؼ --
-- Data Type String:
-
-### Replace Tag with Array.vi
-
--- ؼ --
-- Enum:
-- replace string:
-- single-line text:
-
--- ؼ --
-- States:
-
-### CSM Data Type String to Enum(RefnumEnum).vi
-
--- ؼ --
-- Data Type String:
-
--- ؼ --
-- Array Dim:
-- Secondary Type:
-- Primary Type:
-
-### CSM Data Type String to Enum(String).vi
-
--- ؼ --
-- Data Type String:
-
--- ؼ --
-- Array Dim:
-- Secondary Type String:
-- Primary Type:
-
-### CSM Data Type String to Enum(TypeEnum).vi
-
--- ؼ --
-- Data Type String:
-
--- ؼ --
-- Array Dim:
-- Secondary Type:
-- Primary Type:
-
-### Build Error Cluster.vi
-
-һ(error cluster)Ա LabVIEW ķʽӵ VI ĵйԴַԴַʽΪ
-"õ VI VI ĵ-> VI ĵߵĵ->ȵ...->ȵ..."
-ѡ 'String to Prepend to source ("")' ַԴַӶϢַӵԴַ֮ǰ
-
--- ؼ --
-- code:
-- String to Prepend to source (""): Ϣַ
-
-### Build Internal State String.vi
-
- JKI ״̬״̬Ϣַ
-
--- ؼ --s
-- State: ״ַ̬
-- Arguments (""): StateIJ
-- Arg-State (""): ʹϢģڷʹϢʱڵ״̬
-- Source (""): ʹϢģ
-
--- ؼ --
-- CSM Message String: ƴɵ CSM Ϣַ
-
-### String History Cacher.vi
-
-浱ǰַ棬ʷַʱȽĻַǡڵCSMʷ״̬
-
--- ؼ --
-- String: ַ
-- length: ʷַַ
-- Include Timestamp(F): Ƿÿпͷʱ
-
--- ؼ --
-- String Cache: ʷַ
-
-### Trim Both Whitespace.vi
-
-ͷβͬʱƳ ASCII հַ(ոƱسͻ)
-
--- ؼ --
-- string: ַ
-
--- ؼ --
-- trimmed string: ַ
-
-### uuid.vi
-
-ݱ Universally Unique Identifier(UUID) :
-- 59703F3AD837
-- 106A470BA5EC
-- 9B781DB313AF
-
--- ؼ --
-- UUID: ɵ UUID
-
-### Random Change Flag.vi
-
-һֵڱ״̬ı仯CSMΪЧʣЩطĻ(cache)жǷҪ¡
-
--- ؼ --
-- Random Change Flag: ɵֵ
-
-### Global Log To String.vi
-
-ȫ־(Global Log)ݴתΪַ
-
--- ؼ --
-- Log: ȫ־ݴ
-
--- ؼ --
-- Log String: ȫ־ַ
-
-### U8 Data to Hex Str.vi
-
--- ؼ --
-- u8 Data[]:
-
--- ؼ --
-- HEX String (0-9,A-F):
diff --git a/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description(zh-cn)/VI Description(zh-cn) - 11. CSM-Helper API.md b/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description(zh-cn)/VI Description(zh-cn) - 11. CSM-Helper API.md
deleted file mode 100644
index d7eba533f..000000000
--- a/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description(zh-cn)/VI Description(zh-cn) - 11. CSM-Helper API.md
+++ /dev/null
@@ -1,923 +0,0 @@
-# CSM API
-
-## CSM-Helper API
-
-### Is CSM Module.vi
-
-ʹٵVIãжǷ CSM ģ飬 LabVIEW Ԥжϡ
-
-> [!NOTE] ̬VI(Polymorphic VI)ѡ:
-> - Is CSM Module - VIRef.vi
-> - Is CSM Module - WhileLoop.vi
-> - Is CSM Module - Structure.vi
-> - Is CSM Module - CaseStructure.vi
-> - Is CSM Module - EventStructure.vi
-> - Is CSM Module - ParseStateVI.vi
-
-#### Is CSM Module - VIRef.vi
-
-ͨ VIRef жǷ CSM ģ
-
--- ؼ --
-- VIRef: VI
-
--- ؼ --
-- Is CSM Module?: CSM ģ
-- CSM Basic Refs: CSMģ飬ذˡCSMģĻԪص
-
-#### Is CSM Module - WhileLoop.vi
-
-ͨ While Loop жǷ CSM ģ
-
--- ؼ --
-- WhileLoop: While Loop
-
--- ؼ --
-- Is CSM Module?: CSM ģ
-- CSM Basic Refs: CSMģ飬ذˡCSMģĻԪص
-
-#### Is CSM Module - Structure.vi
-
-ͨ Structure жǷ CSM ģ
-
--- ؼ --
-- Structure: Structure
-
--- ؼ --
-- Is CSM Module?: CSM ģ
-- CSM Basic Refs: CSMģ飬ذˡCSMģĻԪص
-
-#### Is CSM Module - CaseStructure.vi
-
-ͨ CaseStructure жǷ CSM ģ
-
--- ؼ --
-- CaseStructure: CaseStructure
-
--- ؼ --
-- Is CSM Module?: CSM ģ
-- CSM Basic Refs: CSMģ飬ذˡCSMģĻԪص
-
-#### Is CSM Module - EventStructure.vi
-
-ͨ EventStructure жǷ CSM ģ
-
--- ؼ --
-- EventStructure: EventStructure
-
--- ؼ --
-- Is CSM Module?: CSM ģ
-- CSM Basic Refs: CSMģ飬ذˡCSMģĻԪص
-
-#### Is CSM Module - ParseStateVI.vi
-
-ͨ Parse State VI жǷ CSM ģ
-
--- ؼ --
-- Parse State VI Ref: Parse State VI
-
--- ؼ --
-- Is CSM Module?: CSM ģ
-- CSM Basic Refs: CSMģ飬ذˡCSMģĻԪص
-
-### CSM-Helper API.vi
-
-### CSM-Helper usecase Template.vit
-
--- ؼ --
-- CSM-Helper in: CSMHelper
-
--- ؼ --
-- CSM-Helper out: CSMHelper
-
-### _Add VI Reference Case.vi
-
--- ؼ --
-- CSM-Helper in: CSMHelper
-- element:
-- Add Frame:
-
--- ؼ --
-- CSM-Helper out: CSMHelper
-
-### Connect Information.vi
-
--- ؼ --
-- Case:
-- CSM-Helper in: CSMHelper
-
--- ؼ --
-- CSM-Helper out: CSMHelper
-- Backend Connected Info:
-- FrontEnd Connected Info:
-
-### Diagram Node Information.vi
-
--- ؼ --
-- InnerTerminal in:
-- Array in:
-- Front Tunnels:
-
--- ؼ --
-- Array:
-- Array out:
-
-### Get Argument Info From back Term.vi
-
--- ؼ --
-- Terminal in:
-
--- ؼ --
-- Array:
-
-### Get Argument Info From Front Term.vi
-
--- ؼ --
-- Terminal in:
-
--- ؼ --
-- Array:
-
-### GObject Terminals.vi
-
--- ؼ --
-- GObject in:
-
--- ؼ --
-- error in (no error) (dup):
-- Class Name:
-- Terms[]:
-- Node Object:
-- tunnel Relative Pos:
-
-### Relative Pos to InterData Tunnel of CaseContent.vi
-
--- ؼ --
-- element:
-- CSM-Helper in: CSMHelper
-
--- ؼ --
-- Position:
-- CSM-Helper out: CSMHelper
-
-### Resize CaseStructure By Making Space.vi
-
--- ؼ --
-- Bounds:
-- CSM-Helper in: CSMHelper
-
--- ؼ --
-- DiffBound:
-- MakeSpace.Rect:
-- CSM-Helper out: CSMHelper
-
-### Search With Pattern.vi
-
--- ؼ --
-- regular expression:
-- Array:
-
--- ؼ --
-- Numeric:
-
-### sub1.vi
-
--- ؼ --
-- Part References.Parse State Queue:
-- regular expression:
-- Array:
-
--- ؼ --
-- Tunnel out:
-
-### sub2.vi
-
--- ؼ --
-- Part References.Parse State Queue:
-- regular expression:
-- Array:
-
--- ؼ --
-- Tunnel out:
-
-### Refresh References.vi
-
--- ؼ --
-- CSM-Helper in: CSMHelper
-
--- ؼ --
-- CSM-Helper out: CSMHelper
-
-### Get ParentRef Until Type Matched.vi
-
--- ؼ --
-- Class Name:
-- reference in:
-
--- ؼ --
-- Target Ref:
-
-### Is in JKISM or CSM.vi
-
--- ؼ --
-- reference in:
-
--- ؼ --
-- is in JKISM or CSM?:
-
-### Relationship Check.vi
-
--- ؼ --
-- TestRef:
-- reference in:
-
--- ؼ --
-- Is TestRef:
-- Is Child of TestRef:
-
-### Add State Frame.vi
-
--- ؼ --
-- index(-1, use same group):
-- element:
-- CSM-Helper in: CSMHelper
-
--- ؼ --
-- Add Frame:
-- CSM-Helper out: CSMHelper
-
-### Check NewStateNotify is Registered.vi
-
--- ؼ --
-- CSM-Helper in: CSMHelper
-
--- ؼ --
-- NewStateNotify Registered:
-- CSM-Helper out: CSMHelper
-
-### Connect Error Wire If not Connected.vi
-
--- ؼ --
-- case:
-- CSM-Helper in: CSMHelper
-
--- ؼ --
-- CSM-Helper out: CSMHelper
-
-### Connect EventReg Wire If not Connected.vi
-
--- ؼ --
-- case:
-- CSM-Helper in: CSMHelper
-
--- ؼ --
-- CSM-Helper out: CSMHelper
-
-### Connect Internal Data Wire If not Connected.vi
-
--- ؼ --
-- case:
-- CSM-Helper in: CSMHelper
-
--- ؼ --
-- CSM-Helper out: CSMHelper
-
-### Connect LastResp to Response in Error Case.vi
-
--- ؼ --
-- CSM-Helper in: CSMHelper
-
--- ؼ --
-- CSM-Helper out: CSMHelper
-
-### Connect Paired Tunnels.vi
-
--- ؼ --
-- CSM-Helper in: CSMHelper
-
--- ؼ --
-- CSM-Helper out: CSMHelper
-
-### Connect StateQ Wire If not Connected.vi
-
--- ؼ --
-- case:
-- CSM-Helper in: CSMHelper
-
--- ؼ --
-- CSM-Helper out: CSMHelper
-
-### Copy State.vi
-
--- ؼ --
-- Already Exist Action:
-Replace(T) / Skip(F):
-- SourceCSM:
-- New(Empty to Use same Name):
-- Case:
-- CSM-Helper.lvclass:
-
--- ؼ --
-- CSM-Helper out 2:
-
-### Create From Basic Refs.vi
-
--- ؼ --
-- CSM Basic Refs:
-
--- ؼ --
-- CSM-Helper.lvclass:
-
-### Create From CaseStructure Reference.vi
-
--- ؼ --
-- CaseStructure:
-
--- ؼ --
-- CSM-Helper.lvclass:
-
-### Create From EventStructure Reference.vi
-
--- ؼ --
-- CaseStructure:
-
--- ؼ --
-- CSM-Helper.lvclass:
-
-### Create From VI Reference.vi
-
--- ؼ --
-- VI:
-
--- ؼ --
-- CSM-Helper.lvclass:
-
-### Create From WhileLoop Reference.vi
-
--- ؼ --
-- Structure:
-
--- ؼ --
-- CSM-Helper.lvclass:
-
-### Destroy.vi
-
--- ؼ --
-- Save Instruments?(F):
-- CSM-Helper in: CSMHelper
-
--- ؼ --
-- CSM-Helper out: CSMHelper
-
-### Doc.vi
-
--- ؼ --
-- String 2:
-- String:
-- CSM-Helper in: CSMHelper
-
--- ؼ --
-- String 4:
-- String 3:
-- CSM-Helper out: CSMHelper
-
-### Get All API Interface Info.vi
-
--- ؼ --
-- CSM-Helper in: CSMHelper
-
--- ؼ --
-- Array:
-- CSM-Helper out: CSMHelper
-
-### Get All Status Interface Info.vi
-
--- ؼ --
-- CSM-Helper in: CSMHelper
-
--- ؼ --
-- Array 3:
-- CSM-Helper out: CSMHelper
-
-### Get CaseFrame Index By CaseName.vi
-
--- ؼ --
-- CASE:
-- CSM-Helper in: CSMHelper
-
--- ؼ --
-- index:
-- CSM-Helper out: CSMHelper
-
-### Get CaseFrame Reference By CaseName.vi
-
--- ؼ --
-- CASE:
-- CSM-Helper in: CSMHelper
-
--- ؼ --
-- Frame Refs:
-- CSM-Helper out: CSMHelper
-
-### Get Event Structure Num.vi
-
--- ؼ --
-- CSM-Helper in: CSMHelper
-
--- ؼ --
-- EvtStrutNum:
-- CSM-Helper out: CSMHelper
-
-### Get Interface Info.vi
-
--- ؼ --
-- CASE:
-- CSM-Helper in: CSMHelper
-
--- ؼ --
-- Response:
-- Array:
-- CSM-Helper out: CSMHelper
-
-### Get Internal Data Info.vi
-
--- ؼ --
-- CSM-Helper in: CSMHelper
-
--- ؼ --
-- Array:
-- CSM-Helper out: CSMHelper
-
-### Open Block Diagram.vi
-
--- ؼ --
-- CSM-Helper in: CSMHelper
-
--- ؼ --
-- CSM-Helper out: CSMHelper
-
-### Open Front Panel.vi
-
--- ؼ --
-- CSM-Helper in: CSMHelper
-
--- ؼ --
-- CSM-Helper out: CSMHelper
-
-### Remove State Frame.vi
-
--- ؼ --
-- element:
-- CSM-Helper in: CSMHelper
-
--- ؼ --
-- CSM-Helper out: CSMHelper
-
-### Save Instrument.vi
-
--- ؼ --
-- CSM-Helper in: CSMHelper
-
--- ؼ --
-- CSM-Helper out: CSMHelper
-
-### Set Error Tunnel Use Default If not Connected.vi
-
--- ؼ --
-- Use Default if not wired:
-- CSM-Helper in: CSMHelper
-
--- ؼ --
-- CSM-Helper out: CSMHelper
-
-### Set Visible Case Frame.vi
-
--- ؼ --
-- element:
-- CSM-Helper in: CSMHelper
-
--- ؼ --
-- CSM-Helper out: CSMHelper
-
-### Set Wire Label Visible.vi
-
--- ؼ --
-- Connected Wire.Label.Visible:
-- CSM-Helper in: CSMHelper
-
--- ؼ --
-- CSM-Helper out: CSMHelper
-
-### Start Undo.vi
-
--- ؼ --
-- Name:
-- CSM-Helper in: CSMHelper
-
--- ؼ --
-- CSM-Helper out: CSMHelper
-
-### Stop Undo.vi
-
--- ؼ --
-- CSM-Helper in: CSMHelper
-
--- ؼ --
-- CSM-Helper out: CSMHelper
-
-### Undo.vi
-
--- ؼ --
-- CSM-Helper in: CSMHelper
-
--- ؼ --
-- CSM-Helper out: CSMHelper
-
-### Read APIs.vi
-
--- ؼ --
-- CSM-Helper in: CSMHelper
-
--- ؼ --
-- Value:
-- CSM-Helper out: CSMHelper
-
-### Read Back Tunnel Internal TermRefs.vi
-
--- ؼ --
-- element:
-- CSM-Helper in: CSMHelper
-
--- ؼ --
-- Back Tunnels:
-- CSM-Helper out: CSMHelper
-
-### Read Back Tunnels Refs.vi
-
--- ؼ --
-- CSM-Helper in: CSMHelper
-
--- ؼ --
-- Back Tunnels:
-- CSM-Helper out: CSMHelper
-
-### Read Block Diagram Ref.vi
-
--- ؼ --
-- CSM-Helper in: CSMHelper
-
--- ؼ --
-- Diagram:
-- CSM-Helper out: CSMHelper
-
-### Read Case Structure Ref.vi
-
--- ؼ --
-- CSM-Helper in: CSMHelper
-
--- ؼ --
-- Case Structure:
-- CSM-Helper out: CSMHelper
-
-### Read Event Structure Ref.vi
-
--- ؼ --
-- CSM-Helper in: CSMHelper
-
--- ؼ --
-- Event Structure:
-- CSM-Helper out: CSMHelper
-
-### Read Front Tunnel Internal TermRefs.vi
-
--- ؼ --
-- case:
-- CSM-Helper in: CSMHelper
-
--- ؼ --
-- Front Tunnels:
-- CSM-Helper out: CSMHelper
-
-### Read Front Tunnels Refs.vi
-
--- ؼ --
-- CSM-Helper in: CSMHelper
-
--- ؼ --
-- Front Tunnels:
-- CSM-Helper out: CSMHelper
-
-### Read New State Notifier Event State Ref.vi
-
--- ؼ --
-- CSM-Helper in: CSMHelper
-
--- ؼ --
-- New State Notifier Event State Ref:
-- CSM-Helper out: CSMHelper
-
-### Read Paired Tunnels of Case Structure.vi
-
--- ؼ --
-- CSM-Helper in: CSMHelper
-
--- ؼ --
-- Paired Tunnels:
-- CSM-Helper out: CSMHelper
-
-### Read Parse State Queue Ref.vi
-
--- ؼ --
-- CSM-Helper in: CSMHelper
-
--- ؼ --
-- Parse State Queue:
-- CSM-Helper out: CSMHelper
-
-### Read States.vi
-
--- ؼ --
-- CSM-Helper in: CSMHelper
-
--- ؼ --
-- Value:
-- CSM-Helper out: CSMHelper
-
-### Read Timeout Event State Ref.vi
-
--- ؼ --
-- CSM-Helper in: CSMHelper
-
--- ؼ --
-- New State Notifier Event State Ref:
-- CSM-Helper out: CSMHelper
-
-### Read Type.vi
-
--- ؼ --
-- CSM-Helper in: CSMHelper
-
--- ؼ --
-- Part References.Type:
-- CSM-Helper out: CSMHelper
-
-### Read User-Defined States.vi
-
--- ؼ --
-- CSM-Helper in: CSMHelper
-
--- ؼ --
-- Array:
-- CSM-Helper out: CSMHelper
-
-### Read VI Ref.vi
-
--- ؼ --
-- CSM-Helper in: CSMHelper
-
--- ؼ --
-- VI:
-- CSM-Helper out: CSMHelper
-
-### Read While Loop Ref.vi
-
--- ؼ --
-- CSM-Helper in: CSMHelper
-
--- ؼ --
-- While Loop:
-- CSM-Helper out: CSMHelper
-
-### Add VI Reference Case.vi
-
--- ؼ --
-- CSM-Helper in: CSMHelper
-
--- ؼ --
-- CSM-Helper out: CSMHelper
-
-### Remove All CSM Bookmarks.vi
-
--- ؼ --
-- CSM-Helper in: CSMHelper
-
--- ؼ --
-- CSM-Helper out: CSMHelper
-
-### standardize CSM Module.vi
-
--- ؼ --
-- CSM-Helper in: CSMHelper
-
--- ؼ --
-- CSM-Helper out: CSMHelper
-
-### CSM Essential States.vi
-
--- ؼ --
-- CSM Essential States:
-
-### CSM Module Type.vi
-
--- ؼ --
-- CSM Basic Refs:
-
--- ؼ --
-- CSM Basic Refs (dup):
-
-### CaseStructure - Add Frame.vi
-
--- ؼ --
-- Case Name:
-- Reference Frame Index:
-- CaseStructure in:
-
--- ؼ --
-- Add Frame:
-- CaseStructure out:
-
-### CaseStructure - Case Name to Group Name.vi
-
--- ؼ --
-- element:
-
--- ؼ --
-- String:
-
-### CaseStructure - Check If State Exist.vi
-
--- ؼ --
-- Group Name:
-- CaseStructure in:
-
--- ؼ --
-- Numeric:
-- CaseStructure out:
-
-### CaseStructure - Get Group Separator Case Index.vi
-
--- ؼ --
-- Group Name:
-- CaseStructure in:
-
--- ؼ --
-- Numeric:
-- CaseStructure out:
-
-### Diagram - Connect Tunnel with Wire 2.vi
-
--- ؼ --
-- Wire Index:
-- Front Tunnels:
-- Diagram in:
-
--- ؼ --
-- Array out:
-- Diagram out:
-
-### Diagram - Connect Tunnel with Wire.vi
-
--- ؼ --
-- FrontEnd Connected Info:
-- Front Tunnels:
-- Diagram in:
-
--- ؼ --
-- Array out:
-- Diagram out:
-
-### Diagram - Get All Decoration Refs.vi
-
--- ؼ --
-- TopLevelDiagram in:
-
--- ؼ --
-- TextRefs:
-- TopLevelDiagram out:
-
-### Diagram - Get All Text Refs.vi
-
--- ؼ --
-- TopLevelDiagram in:
-
--- ؼ --
-- TextRefs:
-- TopLevelDiagram out:
-
-### PairedTunnels - Connect Wire.vi
-
--- ؼ --
-- index(-1 for all):
-- PairedTunnels:
-
--- ؼ --
-- PairedTunnels:
-
-### Find Event Structure from Case Structure.vi
-
--- ؼ --
-- CaseStructure:
-
--- ؼ --
-- EvntStruct Refnum:
-
-### Find Parse State Queue from Case Structure.vi
-
--- ؼ --
-- CaseStructure:
-
--- ؼ --
-- CaseStructure:
-- Parse State Queue:
-
-### Find Parse State Queue from Event Structure.vi
-
--- ؼ --
-- EvntStruct Refnum:
-
--- ؼ --
-- CaseStructure:
-- Parse State Queue:
-
-### Find Parse State Queue from While Loop.vi
-
--- ؼ --
-- WhileLoop in:
-
--- ؼ --
-- CaseStructure:
-- Parse State Queue:
-- WhileLoop out:
-
-### Terminals - Filter Control Terms.vi
-
--- ؼ --
-- Terms[]:
-
--- ؼ --
-- Terms[] out:
-
-### Terminals - Filter Error Terms.vi
-
--- ؼ --
-- Terms[]:
-
--- ؼ --
-- Terms[] out:
-
-### Terminals - Filter Indicator Terms.vi
-
--- ؼ --
-- Terms[]:
-
--- ؼ --
-- Terms[] out:
-
-### Terminals - Filter Input Term.vi
-
--- ؼ --
-- InnerTerminal in:
-- Wire.Terms[] in:
-
--- ؼ --
-- Wire.Terms[] out:
-
-### Terminals - Filter invalid Terms.vi
-
--- ؼ --
-- Terms[]:
-
--- ؼ --
-- Terms[] out:
-
-### Terminals - Filter Left-Top Term.vi
-
--- ؼ --
-- Terms[]:
-
--- ؼ --
-- Terms[] out:
-
-### Terminals - Left-Top Term.vi
-
--- ؼ --
-- Terms[]:
-
--- ؼ --
-- Terms[] out:
-
-### Terminals - Lower Term.vi
-
--- ؼ --
-- Terms[]:
-
--- ؼ --
-- Terms[] out:
-
-### Terminals - Upper Term.vi
-
--- ؼ --
-- Terms[]:
-
--- ؼ --
-- Terms[] out:
diff --git a/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description(zh-cn)/VI Description(zh-cn) - 13. Internal.md b/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description(zh-cn)/VI Description(zh-cn) - 13. Internal.md
deleted file mode 100644
index 6a72ebed2..000000000
--- a/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description(zh-cn)/VI Description(zh-cn) - 13. Internal.md
+++ /dev/null
@@ -1,929 +0,0 @@
-# CSM API
-
-## CSM Internal
-
-### Naming Check.vi
-
--- ؼ --
-- Name("" to use uuid):
-Returns any argument(s) that may be used in the current state string. These arguments come after the ">>" characters
-
--- ؼ --
-- Name(dup):
-Returns any argument(s) that may be used in the current state string. These arguments come after the ">>" characters
-
-### Check.vi
-
--- ؼ --
-- BroadcastRegistry in:
-- Status:
-- Source:
-- Target:
-
--- ؼ --
-- BroadcastRegistry out:
-- Response Message Info:
-
-### Delete Source Module.vi
-
--- ؼ --
-- BroadcastRegistry in:
-- Source:
-
--- ؼ --
-- BroadcastRegistry out:
-
-### Delete Target Module.vi
-
--- ؼ --
-- BroadcastRegistry in:
-- Source:
-
--- ؼ --
-- BroadcastRegistry out:
-
-### Initialize.vi
-
--- ؼ --
-- BroadcastRegistry in:
-
--- ؼ --
-- BroadcastRegistry out:
-
-### List Entries.vi
-
--- ؼ --
-- BroadcastRegistry in:
-
--- ؼ --
-- BroadcastRegistry out:
-- Array:
-
-### List Status in Registry.vi
-
--- ؼ --
-- BroadcastRegistry in:
-
--- ؼ --
-- BroadcastRegistry out:
-- Status:
-
-### Register.vi
-
--- ؼ --
-- BroadcastRegistry in:
-- status:
-- source:
-- api:
-- target:
-
--- ؼ --
-- BroadcastRegistry out:
-
-### Remove Module.vi
-
--- ؼ --
-- BroadcastRegistry in:
-- Source:
-
--- ؼ --
-- BroadcastRegistry out:
-
-### Unregister.vi
-
--- ؼ --
-- BroadcastRegistry in:
-- Status:
-- Source:
-- api:
-- Target:
-
--- ؼ --
-- BroadcastRegistry out:
-
-### Broadcast Item Key.vi
-
--- ؼ --
-- status:
-- target:
-- source:
-
--- ؼ --
-- key:
-
-### Preview.vi
-
--- ؼ --
-- BroadcastRegistry in:
-
--- ؼ --
-- Registry:
-- BroadcastRegistry out:
-
-### Remove response API from List.vi
-
--- ؼ --
-- API:
-- output cluster in:
-
--- ؼ --
-- output cluster out:
-
-### Concatenate State with Arguments.vi
-
--- ؼ --
-- Arguments:
-- State:
-
--- ؼ --
-- State with Arguments:
-
-### CSM-Name to CSM-Mode.vi
-
--- ؼ --
-- String:
-
--- ؼ --
-- ParentCSM Name:
-- CSM Mode:
-- Requested Name:
-
-### Format Timestamp.vi
-
--- ؼ --
-- timestamp:
-- format string:
-
--- ؼ --
-- String:
-
-### Hex Str to U8 Data.vi
-
--- ؼ --
-- HEX String (0-9,A-F):
-
--- ؼ --
-- u8 Data[]:
-
-### Parse Next Single-line State.vi
-
--- ؼ --
-- States Queue:
-
--- ؼ --
-- Next Single-line State:
-- Remaining States Queue:
-
-### Remove Comments from Line.vi
-
--- ؼ --
-- single-line text:
-
--- ؼ --
-- single-line text without comments:
-
-### Splite Reason String Part.vi
-
--- ؼ --
-- Single-line -& Reason:
-
--- ؼ --
-- CSM Name:
-- `State:
-- `Arguments:
-
-### Splite Single-line Message.vi
-
--- ؼ --
-- single-line text:
-
--- ؼ --
-- operator:
-- state:
-- args:
-- source/target:
-
-### Trim Single line Text.vi
-
--- ؼ --
-- single-line text:
-
--- ؼ --
-- trimmed text:
-
-### CSM Not Allowed Message.vi
-
--- ؼ --
-- State:
-- CSM:
-
-### Cache-Broadcast Registry Search Result.vi
-
--- ؼ --
-- CSM Name:
-- Broadcast state:
-
--- ؼ --
-- Array:
-
-### FGV-BroadcastRegistry.vi
-
--- ؼ --
-- Source:
-- Target:
-- Status:
-- API:
-- Operation:
-
--- ؼ --
-- response message:
-
-### global-Broadcast Cache Change Flag.vi
-
-ȫֱڱǹ㲥Ƿ仯
-
-### global-CSMQ FGV Change Flag.vi
-
-ȫֱڱ CSM ģϢǷ仯
-
-### global-GEvnt Filter Change Flag.vi
-
-ȫֱڱ Global Event ĹǷ仯
-
-### Cache-GEvt Filter Object.vi
-
--- ؼ --
-- CSM:LogFilter.lvclass:
-
-### FGV-GEvt Filter Obj.vi
-
--- ؼ --
-- Set(T)/Get(F):
-- Rules-v1:
-
--- ؼ --
-- CSM:LogFilter.lvclass:
-
-### FGV-GlobalEventRef.vi
-
--- ؼ --
-- Create(F):
-
--- ؼ --
-- CSM Global Log Event:
-
-### FGV-StatusChangeEventRef.vi
-
--- ؼ --
-- Name("" to use uuid) in:
-
--- ؼ --
-- Status Change Event:
-
-### GEvt-BackgroundThread.vi
-
-### GEvt-Convert Filter Rules - v1.0.vi
-
--- ؼ --
-- Rules-v1:
-
--- ؼ --
-- GlobalLogFilter:
-
-### GEvt-Filter Global Log - v1.0.vi
-
--- ؼ --
-- Rules-v1:
-- Cross CSM Data (in):
-
--- ؼ --
-- Matched? (dup):
-- Cross CSM Data:
-
-### GEvt-Generate Complete Log.vi
-
--- ؼ --
-- CSM Global Log Event:
-- event data:
-- Enable?:
-- CSM:LogFilter.lvclass:
-
--- ؼ --
-- CSM Global Log Event out:
-
-### GEvt-Generate Interrupt Log.vi
-
--- ؼ --
-- CSM Global Log Event:
-- Current State:
-- Arguments:
-- Name("" to use uuid):
-- CSM:LogFilter.lvclass:
-
--- ؼ --
-- CSM Global Log Event out:
-- event data:
-
-### GEvt-Generate Module Created Log.vi
-
--- ؼ --
-- CSM Global Log Event:
-- Name("" to use uuid):
-- Created?:
-- CSM:LogFilter.lvclass:
-
--- ؼ --
-- CSM Global Log Event out:
-- event data:
-
-### GEvt-Generate Module Destroyed Log.vi
-
--- ؼ --
-- CSM Global Log Event:
-- Name("" to use uuid):
-- Enable?:
-- CSM:LogFilter.lvclass:
-
--- ؼ --
-- CSM Global Log Event out:
-- event data:
-
-### GEvt-Generate Register Log.vi
-
--- ؼ --
-- CSM Global Log Event:
-- Current State:
-- Arguments:
-- Name("" to use uuid):
-- CSM:LogFilter.lvclass:
-
--- ؼ --
-- CSM Global Log Event out:
-- event data:
-
-### GEvt-Generate Remaining States Log.vi
-
--- ؼ --
-- CSM Global Log Event:
-- Remaining States:
-- Name("" to use uuid):
-- Enable?:
-- CSM:LogFilter.lvclass:
-
--- ؼ --
-- CSM Global Log Event out:
-- event data:
-
-### GEvt-Generate State Change Log.vi
-
--- ؼ --
-- CSM Global Log Event:
-- Current State:
-- Arguments:
-- Source Message.*State:
-- Source Message.*Arguments:
-- Source Module:
-- Name("" to use uuid):
-- CSM:LogFilter.lvclass:
-
--- ؼ --
-- CSM Global Log Event out:
-- event data:
-
-### GEvt-Generate Status Log.vi
-
--- ؼ --
-- CSM Global Log Event:
-- Current State:
-- Arguments:
-- Name("" to use uuid):
-- CSM:LogFilter.lvclass:
-
--- ؼ --
-- CSM Global Log Event out:
-- event data:
-
-### GEvt-Generate Unregister Log.vi
-
--- ؼ --
-- CSM Global Log Event:
-- Current State:
-- Arguments:
-- Name("" to use uuid):
-- CSM:LogFilter.lvclass:
-
--- ؼ --
-- CSM Global Log Event out:
-- event data:
-
-### GEvt-Generate with Rule Check.vi
-
--- ؼ --
-- LogFilter in:
-- event data:
-- CSM Global Log Event in:
-
--- ؼ --
-- CSM Global Log Event out:
-
-### GEvt-Set Source Filter Rules - v1.0.vi
-
--- ؼ --
-- Rules-v1:
-
-### GEvt-ThreadQueueName.vi
-
--- ؼ --
-- ThreadQueueName:
-
-### GEvt-WatchdogThread.vi
-
--- ؼ --
-- WatchDogQ:
-
-### Filter Check.vi
-
--- ؼ --
-- Cross CSM Data in:
-- GlobalLogFilter in:
-
--- ؼ --
-- Matched? (dup):
-- Cross CSM Data out:
-- GlobalLogFilter.lvclass (dup):
-
-### List Rules as Strings.vi
-
--- ؼ --
-- GlobalLogFilter in:
-
--- ؼ --
-- Rule Strings:
-- GlobalLogFilter out:
-
-### CSM Check - LogType.vi
-
--- ؼ --
-- Matched Previous?:
-- Cross CSM Data (in):
-- GlobalLogFilter.lvclass:
-
--- ؼ --
-- Matched? (dup):
-- Cross CSM Data:
-- GlobalLogFilter.lvclass (dup):
-
-### CSM Check - State.vi
-
--- ؼ --
-- Matched Previous?:
-- Cross CSM Data (in):
-- GlobalLogFilter.lvclass:
-
--- ؼ --
-- Matched? (dup):
-- Cross CSM Data:
-- GlobalLogFilter.lvclass (dup):
-
-### CSM Check - StateType.vi
-
--- ؼ --
-- Matched Previous?:
-- Cross CSM Data (in):
-- GlobalLogFilter.lvclass:
-
--- ؼ --
-- Matched? (dup):
-- Cross CSM Data:
-- GlobalLogFilter.lvclass (dup):
-
-### Group Check - CSM.vi
-
--- ؼ --
-- Matched Previous?:
-- Cross CSM Data (in):
-- GlobalLogFilter.lvclass:
-
--- ؼ --
-- Matched? (dup):
-- Cross CSM Data:
-- GlobalLogFilter.lvclass (dup):
-
-### Group Check - LogType.vi
-
--- ؼ --
-- Matched Previous?:
-- Cross CSM Data (in):
-- GlobalLogFilter.lvclass:
-
--- ؼ --
-- Matched? (dup):
-- Cross CSM Data:
-- GlobalLogFilter.lvclass (dup):
-
-### Group Check - State.vi
-
--- ؼ --
-- Matched Previous?:
-- Cross CSM Data (in):
-- GlobalLogFilter.lvclass:
-
--- ؼ --
-- Matched? (dup):
-- Cross CSM Data:
-- GlobalLogFilter.lvclass (dup):
-
-### Group Check - StateType.vi
-
--- ؼ --
-- Matched Previous?:
-- Cross CSM Data (in):
-- GlobalLogFilter.lvclass:
-
--- ؼ --
-- Matched? (dup):
-- Cross CSM Data:
-- GlobalLogFilter.lvclass (dup):
-
-### Set CSM LogType Filter.vi
-
--- ؼ --
-- LogType:
-- GlobalLogFilter in:
-
--- ؼ --
-- GlobalLogFilter out:
-
-### Set CSM State Filter.vi
-
--- ؼ --
-- CSM:State:
-- GlobalLogFilter in:
-
--- ؼ --
-- GlobalLogFilter out:
-
-### Set CSM StateType Filter.vi
-
--- ؼ --
-- LogType:
-- GlobalLogFilter in:
-
--- ؼ --
-- GlobalLogFilter out:
-
-### Set Global CSM Filter.vi
-
--- ؼ --
-- Group:CSM:
-- GlobalLogFilter in:
-
--- ؼ --
-- GlobalLogFilter out:
-
-### Set Global LogType Filter.vi
-
--- ؼ --
-- Group:LogType:
-- GlobalLogFilter in:
-
--- ؼ --
-- GlobalLogFilter out:
-
-### Set Global State Filter.vi
-
--- ؼ --
-- Group:State:
-- GlobalLogFilter in:
-
--- ؼ --
-- GlobalLogFilter out:
-
-### Set Global StateType Filter.vi
-
--- ؼ --
-- Group:LogType:
-- GlobalLogFilter in:
-
--- ؼ --
-- GlobalLogFilter out:
-
-### Log State Type.vi
-
--- ؼ --
-- Complete(T)/Start(F):
-- Source Module:
-- State:
-
--- ؼ --
-- CSM_GlobalLog_STATE_TYPE:
-
-### Parse Register Message.vi
-
--- ؼ --
-- state:
-- Module Name :
-- args:
-
--- ؼ --
-- target:
-- source:
-- status:
-- api:
-
-### Parse State with Arguments String.vi
-
--- ؼ --
-- State with Arguments:
-The State string that requires the argument.
-
--- ؼ --
-- State:
-- Arguments:
-- Target Module:
-- Message Symbol:
-
-### Parse Unregister Message.vi
-
--- ؼ --
-- state:
-- Module Name :
-- args:
-
--- ؼ --
-- target:
-- source:
-- status:
-- api:
-
-### Dequeue Element.vi
-
--- ؼ --
-- timeout in ms (-1):
-- Priority Queue:
-
--- ؼ --
-- timed out?:
-- Cross JKI State Machine State:
-- Priority Queue(dup):
-- High Priority?:
-
-### Enqueue Element.vi
-
--- ؼ --
-- High Priority?(F):
-- timeout in ms (-1):
-- Cross JKI State Machine State:
-- Priority Queue:
-
--- ؼ --
-- Priority Queue(dup):
-
-### Get Queue Status.vi
-
--- ؼ --
-- Priority Queue in:
-
--- ؼ --
-- # pending insert:
-- # pending remove:
-- Priority Queue out:
-- # elements in queue:
-
-### Not a Refnum.vi
-
--- ؼ --
-- Priority Queue.lvclass:
-
--- ؼ --
-- NaN/Path/Refnum?:
-
-### Obtain Priority Queue.vi
-
--- ؼ --
-- create if not found? (T):
-- name:
-
--- ؼ --
-- created new?:
-- Priority Queue:
-
-### Release Priority Queue.vi
-
--- ؼ --
-- force destroy? (F):
-- Priority Queue:
-
-### CSMP-Async Call.vi
-
--- ؼ --
-- state:
-- args:
-- source/target:
-- Module Name:
-- Msg Type:
-
--- ؼ --
-- state out:
-- args out:
-- source/target out:
-- Pre-State out:
-- Pre-Args out:
-- error:
-
-### CSMP-Broadcast.vi
-
--- ؼ --
-- state:
-- args:
-- source/target:
-- Module Name:
-- Msg Type:
-
--- ؼ --
-- state out:
-- args out:
-- source/target out:
-- Pre-State out:
-- Pre-Args out:
-- error:
-
-### CSMP-PostPostMsg.vi
-
--- ؼ --
-- state:
-- args:
-- source/target:
-- Pre-State in:
-- Pre-Args in:
-- session error:
-- Module Name:
-- Response Arguments:
-
--- ؼ --
-- state out:
-- args out:
-- source/target out:
-- Pre-State out:
-- Pre-Args out:
-- error:
-
-### CSMP-PostSendMsg.vi
-
--- ؼ --
-- state:
-- args:
-- source/target:
-- session error:
-- Module Name:
-- Response Arguments:
-
--- ؼ --
-- state out:
-- args out:
-- source/target out:
-- error:
-
-### CSMP-Register Status.vi
-
--- ؼ --
-- state:
-- args:
-- source/target:
-- Module Name:
-
--- ؼ --
-- state out:
-- args out:
-- source/target out:
-- Pre-State out:
-- Pre-Args out:
-- error:
-
-### CSMP-Sync Call.vi
-
--- ؼ --
-- state:
-- args:
-- source/target:
-- Response Timeout(-2 using Global Settings): ͬõijʱʱ䣬ĬΪ-2ʹȫáͨ"CSM - Set TMO of Sync-Reply.vi" ȫֳʱʱ䡣
-- Module Name:
-
--- ؼ --
-- state out:
-- args out:
-- source/target out:
-- Pre-State out:
-- Pre-Args out:
-- error:
-
-### CSMP-Unregister Status.vi
-
--- ؼ --
-- state:
-- args:
-- source/target:
-- Module Name:
-
--- ؼ --
-- state out:
-- args out:
-- source/target out:
-- Pre-State out:
-- Pre-Args out:
-- error:
-
-### Auto Resize All MultiListbox Columns (Uniform Text).vi
-
--- ؼ --
-- IgnoreCols(Empty as default):
-- Array:
-- Control in:
-
-### Dashboard Cell Resize.vi
-
--- ؼ --
-- Cluster:
-- Cluster Size:Height:
-- Cluster Size:Width:
-- ClusterRef:
-
--- ؼ --
-- Bounds:Area Height:
-- Bounds:Area Width:
-
-### Dashboard Cell2 Array Resize.vi
-
--- ؼ --
-- Num Columns:
-- Cluster:
-- Num Rows:
-- area height:
-- area width:
-- Array 2:
-
-### Open CSM BD.vi
-
--- ؼ --
-- Current Module("" to generate a ID):
-- CSM:
-
-### Open CSM FP.vi
-
--- ؼ --
-- Current Module("" to generate a ID):
-- CSM:
-
-### Select Greater_nevstop.vi
-
--- ؼ --
-- A:
-- B:
-
--- ؼ --
-- lesser:
-
-### Append Application Directory If Relative.vi
-
--- ؼ --
-- Relative path (.):
-
--- ؼ --
-- Application Directory (+ Relative):
-
-### Convert File Extension (Path)__ogtk.vi
-
--- ؼ --
-- new ending (none):
-- file name:
-
--- ؼ --
-- prev ending:
-- new filename:
-
-### Convert File Extension (String)__ogtk.vi
-
--- ؼ --
-- new ending (none):
-- file name:
-
--- ؼ --
-- prev ending:
-- new filename:
-
-### Parse VI Documentation String.vi
-
--- Controls --
-- NOTE-Map:
-- Documentation:
-
--- Indicators --
-- Ctrl-Doc Map:
-- Control Docs:
-- Core Doc:
-- Documentation (dup):
-
-### Gevt-ThreadQueueName.vi
-
--- Indicators --
-- ThreadQueueName:
diff --git a/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description/VI Description(en-us)/VI Description(en-us) - 01. Templates.md b/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description/VI Description(en-us)/VI Description(en-us) - 01. Templates.md
new file mode 100644
index 000000000..da29c6d8c
--- /dev/null
+++ b/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description/VI Description(en-us)/VI Description(en-us) - 01. Templates.md
@@ -0,0 +1,163 @@
+# CSM API
+
+## Templates
+
+> [!NOTE]
+> CSM Naming Rules
+>
+> - CSM module name must be unique. Otherwise, CSM enters a `Critical Error` state.
+> - If the input module name is an empty string (""), the system uses a UUID as the module name. Such a module is marked as standalone mode and does not appear in the module list.
+> - Worker Mode Rule: If the input module name ends with `#`, a worker mode node will be instantiated. Multiple worker mode nodes can form a worker mode module.
+> - Chain of Responsibility Mode Rule: If the input module name ends with `$` followed by a number, a chain of responsibility mode node will be instantiated. Multiple chain of responsibility mode nodes can form a chain of responsibility mode module.
+> - System-Level Module Rule: If the input module name starts with `.`, the module is a system-level module. Under default settings, such modules are not listed by the CSM - List Modules VI and are suitable for instantiating modules that run in the background.
+> - Submodule Rule: `.` is also allowed in a module name to separate the module name into multiple parts. CSM does not have strict rules for submodules. The `.` in the module name only marks the logical relationship between different modules. From an execution perspective, they are considered independent modules. The only difference is that you can obtain a list of logical submodules via the CSM - List Submodules VI.
+
+> [!NOTE]
+> CSM Initialize State ("Macro: Initialize")
+>
+> - The default value is `Macro: Initialize`, which is consistent with the JKISM state machine.
+> - This state is used to initialize the state machine of a CSM module. A CSM module will process externally sent messages only after completing this macro state.
+
+> [!NOTE]
+> CSM Exit State ("Macro: Exit")
+>
+> - The default value is "Macro: Exit", which is consistent with the JKISM state machine.
+> - This state is used to exit the state machine of a CSM module. After entering this state, a CSM module no longer processes externally sent messages.
+
+### CSM User Interface(UI) Module Template.vi
+A template for creating a CSM module with a user interface. This template includes a user Event Structure for responding to user actions.
+
+> - Ref: CSM Naming Rules
+> - Ref: CSM Initialize State
+> - Ref: CSM Exit State
+
+-- Controls --
+- Name ("" to use UUID): CSM module name. Refer to CSM Naming Rules for module naming rules.
+
+### CSM Module Template.vi
+A template for creating a CSM module without a user interface. This is the most commonly used CSM template. The template also includes an event response loop used for exiting the module during debugging. Remove this loop after debugging is complete.
+
+> - Ref: CSM Naming Rules
+> - Ref: CSM Initialize State
+> - Ref: CSM Exit State
+
+-- Controls --
+- Name ("" to use UUID): CSM module name. Refer to CSM Naming Rules for module naming rules.
+
+### CSM Module Template - Tiny.vi
+Compact code template for creating a CSM module without a user interface. The functionality of this template is identical to the CSM Module Template VI.
+
+> - Ref: CSM Naming Rules
+> - Ref: CSM Initialize State
+> - Ref: CSM Exit State
+
+-- Controls --
+- Name ("" to use UUID): CSM module name. Refer to CSM Naming Rules for module naming rules.
+
+### CSM User Interface(UI) Module Template - Tiny.vi
+Compact code template used to create a CSM module with a user interface. This template includes a user Event Structure for responding to user actions. The functionality of this template is identical to the CSM User Interface(UI) Module Template VI.
+
+> - Ref: CSM Naming Rules
+> - Ref: CSM Initialize State
+> - Ref: CSM Exit State
+
+-- Controls --
+- Name ("" to use UUID): CSM module name. Refer to CSM Naming Rules for module naming rules.
+
+### CSM DQMH-Style Template.vi
+Creates a DQMH-style CSM module template. This structure places the user Event Structure responsible for responding to user actions in a separate independent loop. This structure is primarily used to handle complex user operation scenarios. For example:
+
+- The user interface operations are very complex and require combined logic to complete collaborative work, such as a "Mouse Down -> Drag -> Mouse Up" sequence triggering an event.
+- The user interface needs to respond to rapidly generated events, such as "Mouse Move" or "Panel Resize". If these events generated messages directly, they would quickly flood the queue with duplicate messages.
+
+The user Event Structure loop for user operations is created via the CSM - Flood of Events Handler Side Loop VI template. Users can also create a complete DQMH-style CSM module template by combining the CSM - Flood of Events Handler Side Loop VI with the CSM Module Template VI.
+
+Refer to the following example `[CSM-Example]\4. Advance Examples\CSMLS - Continuous Loop in CSM Example.vi` for demonstration of using this VI.
+
+> - Ref: CSM Naming Rules
+> - Ref: CSM Initialize State
+> - Ref: CSM Exit State
+
+-- Controls --
+- Name ("" to use UUID): CSM module name. Refer to CSM Naming Rules for module naming rules.
+
+### Other Code Snippets
+
+#### CSM - Start Async Call.vi
+Code snippet for starting a CSM module asynchronously. After dragging this VI to the block diagram, change the static VI reference to the target CSM module.
+
+Reference Example: `[CSM-Example]\3. Caller is Other Framework Scenario\CSM Example - Caller is NOT a CSM.vi`.
+
+#### CSM - Synchronized Call.vi
+Code snippet for calling a CSM module synchronously. This VI calls CSM module directly as a subVI.
+
+Reference Example: `[CSM-Example]\2. Caller is CSM Scenario\CSM Example - Caller is a CSM.vi`.
+
+#### CSM - Flood of Events Handler Side Loop.vi
+User Event Structure loop template for DQMH-style CSM modules. This VI is primarily used for handling scenarios where user interface operations are very complex and require combined logic to complete collaborative work.
+
+Reference Example: `[CSM-Example]\4. Advance Examples\CSMLS - Continuous Loop in CSM Example.vi`.
+
+#### CSM - Global Log Queue Monitoring Loop.vi
+Creates a global log queue monitoring loop, which is used for querying and monitoring messages in the global log queue.
+
+Reference Example: `[CSM-Example]\4. Advance Examples\2. Chain of Responsibility Example\Chain of Responsibility Example.vi`.
+
+#### CSM - Global Log Event Monitoring Loop.vi
+Creates a global log event monitoring loop, which is used for querying and monitoring messages in the global log queue.
+
+Reference Example: Any examples in `[CSM-Example]\4. Advance Examples\4. Global Log Filter Example\`.
+
+### Template Support
+
+#### CSM - Get New State Notifier Event.vi
+Obtains a user event refnum, which is suitable for CSM modules containing an Event Structure. CSM modules with an Event Structure typically wait at the Event Structure. The user event refnum this VI obtains is used to interrupt the wait in the Event Structure when a new message is received, allowing the module to continue execution.
+
+-- Controls --
+- Name ("" to use UUID): CSM module name. Refer to CSM Naming Rules for module naming rules.
+
+-- Indicators --
+- New State Notifier Event: User event refnum, which is used to interrupt the CSM module's wait in the Event Structure when a message is received.
+
+#### Timeout Selector.vi
+Suitable for templates containing a user Event Structure. If Timeout Expected is -1 but there are still Remaining States in the queue, the timeout value will be modified to 0. This ensures the execution immediately breaks out of the user Event Structure and continues to process the remaining states.
+
+-- Controls --
+- Timeout Expected: Expected timeout setting.
+- Remaining States: Returns 0 if there are remaining states. Otherwise, returns the expected value.
+
+-- Indicators --
+- Timeout: Timeout setting used after arbitration.
+
+#### Template Error Handling
+
+##### CSM Critical Error.vi
+Generates an error cluster describing a CSM Critical Error. A Critical Error is a severe error occurring within the CSM framework that cannot be handled or replied to by user code. A common cause is a duplicate module name.
+
+-- Controls --
+- CSM Name: CSM module name.
+- Arguments (As Reason): Reason for the error.
+
+##### CSM No Target Error.vi
+Generates an error cluster describing a CSM "No Target Message" error. A "No Target Message" error occurs when the CSM attempts to send a message, but the target module name is an empty string.
+
+##### CSM Target Error.vi
+Generates an error cluster describing a CSM "Target Module Not Found" error. A "Target Module Not Found" error occurs when the CSM attempts to send a message to a non-existent target module.
+
+-- Controls --
+- Arguments (As CSM Name): Wired argument, passing the target module name.
+
+##### CSM Target Timeout Error.vi
+Generates an error cluster describing a CSM "Target Module Timeout" error. A "Target Module Timeout" error occurs when the CSM attempts to send a synchronous message to a target module but does not receive a reply within the specified timeout period.
+
+-- Controls --
+- Arguments (As CSM Name): Wired argument, passing the target module name.
+
+##### CSM Unhandled State Error.vi
+Generates an error cluster describing a CSM "Unhandled State" error. The following are situations where a CSM "Unhandled State" error occurs:
+- When a state is used in the internal message transition but is not defined in this module. This is consistent with JKISM behavior.
+- When a message sent externally to this module is not defined.
+
+-- Controls --
+- Undefined State: The undefined state.
+- CSM Name: CSM module name.
diff --git a/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description/VI Description(en-us)/VI Description(en-us) - 02. Core Functions.md b/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description/VI Description(en-us)/VI Description(en-us) - 02. Core Functions.md
new file mode 100644
index 000000000..f013a00c2
--- /dev/null
+++ b/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description/VI Description(en-us)/VI Description(en-us) - 02. Core Functions.md
@@ -0,0 +1,383 @@
+# CSM API
+
+> [!NOTE]
+> Message Building API
+>
+> This type of API is only used to concatenate message strings and does not send messages directly. The strings need to be merged into the CSM state queue, and the messages will be sent and the operation executed within the Parse State Queue++ VI. If you are familiar with CSM rules, you do not need to use this type of API. You can type the corresponding message string or operation string directly into the string.
+
+> [!NOTE]
+> CSM State Queue Operation API
+>
+> This type of API only concatenates message strings and does not send messages directly. The message is sent and the operation executed within the Parse State Queue++ VI. Unlike the Message Building API, this type of API includes a CSM state queue string input, which is equivalent to inserting a message into the state queue.
+
+## Core Functions
+
+### Parse State Queue++.vi
+Parses the CSM state queue and returns the next current state to execute, along with arguments and other information.
+
+> - Ref: CSM Inter-module Communication Types
+
+-- Controls --
+- Response Arguments: Response arguments from the previous state. Connect this input to the CSM shift register to pass return values from external calls.
+- Name ("" to use UUID): CSM module name. Refer to CSM Naming Rules for module naming rules.
+- State Queue: The entire state queue is connected to this input. This must be wired from a CSM shift register.
+- Previous Error: Error cluster from the CSM. If an error occurs and is passed to this input, the Current State output returns the `Error Handler` state.
+- Dequeue (1 ms): Timeout setting for checking the CSM message queue. The default is 1 ms. The default is not set to 0 to avoid generating massive amounts of empty messages in certain error situations.
+- Response Timeout (-2 Use Global Settings): Timeout for synchronous calls. The default is -2, which uses the global setting. You can set the global timeout using the CSM - Set TMO of Sync-Reply VI.
+- Allowed Messages (Empty for All): A list of allowed message names. An empty list indicates that all messages are allowed.
+
+-- Indicators --
+- Name Used: Actual name assigned to the CSM module.
+- Remaining States: All concatenated states and arguments.
+- Current State: The next current state to execute.
+- Arguments: Returns any arguments that might be used in the current state string. These arguments are located after the `>>` characters.
+ - Argument variables must not contain any non-printable characters, such as line feeds or carriage returns.
+- Additional Information: Supplemental information. For states triggered by a broadcast, this information contains the name and arguments of the broadcast.
+- Source CSM: If Current State is sent externally, this is the name of the source CSM module.
+
+### Build State String with Arguments++.vi
+> [!WARNING]
+> This VI cannot concatenate "Asynchronous without Reply" messages. This VI is hidden from the Functions palette. It is recommended to use the Build Message with Arguments++ VI instead of this VI.
+
+Builds CSM message strings, containing information such as state, arguments, target module, message type, etc., for sending to other CSM modules.
+
+> - Ref: CSM Message Types
+> - Ref: CSM Message Format Parsing
+
+ Example:
+ When sending to the local state machine, Target Module ("") must be set to empty.
+ If State = A and there are no arguments, then State with Arguments = A
+ If State = A , Arguments = B, then State with Arguments = A >> B
+ When sending to other CSM modules, assume the name of Target Module ("") is "Target".
+ - Synchronous Call (Wait for reply after sending message):
+ If State = A and there are no arguments, then State with Arguments = A -@target
+ If State = A , Arguments = B, then State with Arguments = A >> B -@target
+ - Asynchronous Call (Enter "Async Message Posted" state after sending message. Local module receives "Async Response" message after external module finishes processing):
+ If State = A and there are no arguments, then State with Arguments = A ->target
+ If State = A , Arguments = B, then State with Arguments = A >> B ->target
+
+-- Controls --
+- State: State or message name string.
+- Arguments (""): Arguments for State.
+- Target Module (""): The name of the target CSM module to which this message is sent.
+- Type: Message type. You can select from Async, Async Without Reply, or Sync.
+
+-- Indicators --
+- CSM Message String: Concatenated CSM message string.
+
+### Build Message with Arguments++.vi
+Builds CSM message strings and operation strings.
+
+> - Ref: Message Building API
+
+> [!NOTE]
+> Polymorphic VI Options
+> - Build Message with Arguments(Auto Check).vi: Concatenates message strings based on the input message symbols.
+> - Build Asynchronous Message with Arguments.vi: Concatenates and generates CSM asynchronous message strings. The message type symbol is `->`.
+> - Build No-Reply Asynchronous Message with Arguments.vi: Concatenates and generates CSM asynchronous message strings without reply. The message type symbol is `->|`.
+> - Build Synchronous Message with Arguments.vi: Concatenates and generates CSM synchronous message strings. The message type symbol is `-@`.
+> - Build Interrupt Broadcast Message.vi: Concatenates and generates CSM interrupt broadcast strings.
+> - Build Normal Broadcast Message.vi: Concatenates and generates CSM status broadcast strings.
+> - Build Register Message.vi: Concatenates and generates CSM register state operation strings.
+> - Build Unregister Message.vi: Concatenates and generates CSM unregister state operation strings.
+> - CSM - Replace Marks in Messages.vi: Replaces placeholders in message strings.
+> - CSM - Replace Mark with String Array.vi: Replaces tags in a single state string with strings from an array and merges them into a string describing a group of states.
+
+> - Ref: CSM Inter-module Communication Types
+
+#### Build Message with Arguments(Auto Check).vi
+Concatenates and generates CSM message strings. The message type symbol is automatically detected based on the input State with Arguments.
+
+> - Ref: Message Building API
+> - Ref: CSM Message Target Module Description
+
+-- Controls --
+- State with Arguments: CSM state string, which can contain arguments and target module information.
+- Arguments (""): Argument information. Arguments contained in State with Arguments will be replaced.
+- Target Module (""): Target module. If empty, the default module in State with Arguments will be used.
+
+-- Indicators --
+- CSM Message String: Concatenated CSM message string.
+
+#### Build Synchronous Message with Arguments.vi
+Concatenates and generates CSM synchronous message strings. The message type symbol is `-@`, for example:
+
+ Message >> Arguments -@ Target
+
+> - Ref: Message Building API
+> - Ref: Synchronous Message
+> - Ref: CSM Message Target Module Description
+
+-- Controls --
+- State with Arguments: CSM state string.
+- Arguments (""): Argument information. Arguments contained in State with Arguments will be replaced.
+- Target Module (""): Target module. If empty, the default module in State with Arguments will be used.
+
+-- Indicators --
+- CSM Message String: Concatenated CSM message string.
+
+#### Build Asynchronous Message with Arguments.vi
+Concatenates and generates CSM asynchronous message strings. The message type symbol is `->`, for example:
+
+ Message >> Arguments -> Target
+
+> - Ref: Message Building API
+> - Ref: Asynchronous Message
+> - Ref: CSM Message Target Module Description
+
+-- Controls --
+- State with Arguments: CSM state string.
+- Arguments (""): Argument information. Arguments contained in State with Arguments will be replaced.
+- Target Module (""): Target module. If empty, the default module in State with Arguments will be used.
+
+-- Indicators --
+- CSM Message String: Concatenated CSM message string.
+
+#### Build No-Reply Asynchronous Message with Arguments.vi
+Concatenates and generates CSM asynchronous message strings without reply. The message type symbol is `->|`, for example:
+
+ Message >> Arguments ->| Target
+
+> - Ref: Message Building API
+> - Ref: Asynchronous Message
+> - Ref: CSM Message Target Module Description
+
+-- Controls --
+- State with Arguments: CSM state string.
+- Arguments (""): Argument information. Arguments contained in State with Arguments will be replaced.
+- Target Module (""): Target module. If empty, the default module in State with Arguments will be used.
+
+-- Indicators --
+- CSM Message String: Concatenated CSM message string.
+
+#### Build Status Broadcast Message.vi
+Concatenates normal status message strings. The message format is as follows:
+
+ Status >> Arguments ->
+ // The following strings are equivalent operations.
+ // More operation characters are defined for easier typing and memorization.
+ Status >> Arguments ->
+ Status >> Arguments ->
+
+> - Ref: Message Building API
+
+-- Controls --
+- State with Arguments: CSM normal status message string.
+- Arguments (""): Argument information. Arguments contained in State with Arguments will be replaced.
+
+-- Indicators --
+- CSM Message String: Concatenated CSM message string.
+
+#### Build Interrupt Broadcast Message.vi
+Concatenates interrupt status messages. The message format is as follows:
+
+ Status >> Arguments ->
+
+> - Ref: Message Building API
+
+-- Controls --
+- State with Arguments: CSM interrupt status message string.
+- Arguments (""): Argument information. Arguments contained in State with Arguments will be replaced.
+
+-- Indicators --
+- CSM Message String: Concatenated CSM message string.
+
+#### Build Register Message.vi
+Concatenates register state operation message strings. The message format is as follows:
+
+ //[source-state]@[source-module] >> [response-message]@[response-module] ->
+ status @ Source >> API @ Target ->
+
+ Example: Bind the "Download Finished" message of the Downloader module to the "Start Play" API of the Player module.
+ // Bind the "Download Finished" message of the Downloader module to the "Start Play" API of the Player module
+ DownloadFinished@Downloader >> StartPlay@Player ->
+ // When executing the message within the Player module, "Player" can be omitted
+ DownloadFinished@Downloader >> StartPlay ->
+ // When multiple modules have the "Download Finished" message,
+ // use * to bind this message from all modules to the "Start Play" API of the Player module
+ DownloadFinished@* >> StartPlay@Player ->
+
+> - Ref: Message Building API
+> - Ref: CSM Registration
+> - Ref: CSM Registration Location
+> - Ref: CSM Broadcast Priority
+
+-- Controls --
+- Target CSM: Name of the CSM module registering to the status.
+- Source CSM (* as Default): Name of the CSM module publishing the status.
+- Status: Status to register.
+- API (If "", Same As "Status"): Name of the API in the registering module that responds to the status.
+- Priority (No Change): Priority of the broadcast after registration。
+
+-- Indicators --
+- CSM Message String: Concatenated CSM message string.
+
+#### Build Unregister Message.vi
+Concatenates unregister state operation message strings. The message format is as follows:
+
+ //[source-state]@[source-module] >> [response-message]@[response-module] ->
+ status @ Source >> API @ Target ->
+
+ Example: Cancel the binding of the "Download Finished" message of the Downloader module to the "Start Play" API of the Player module.
+ // Cancel binding of the "Download Finished" message of the Downloader module to the "Start Play" API of the Player module
+ DownloadFinished@Downloader >> StartPlay@Player ->
+ // When executing the message within the Player module, "Player" can be omitted
+ DownloadFinished@Downloader >> StartPlay ->
+
+- In Worker Mode, the module's internal registration rules will only be automatically unregistered after all nodes have exited.
+- In Chain of Responsibility Mode, the module's internal registration rules will be automatically unregistered as the node exits.
+
+> - Ref: Message Building API
+> - Ref: CSM Registration
+> - Ref: CSM Registration Location
+
+-- Controls --
+- Target CSM: Name of the CSM module registering to the status.
+- Source CSM (* as Default): Name of the CSM module publishing the status.
+- Status: Registered status.
+- API (If "", Same As "Status"): Name of the API in the registering module that responds to the status to be unregistered.
+
+-- Indicators --
+- CSM Message String: Concatenated CSM message string.
+
+#### CSM - Replace Marks in Messages.vi
+Facilitates editing multiple CSM message strings by providing a batch replacement function for marks. There are four marks that can be replaced:
+- `` mark: Usually represents the same argument.
+- `` mark: Usually represents the same target.
+- `<1>` mark: Represents custom mark 1.
+- `<2>` mark: Represents custom mark 2.
+
+Example: The terminal `` is connected to the string `DAQDevice`. The States with Replace Token string is:
+
+ text
+ Initialize -@
+ Configure -@
+ Read -@
+ Close -@
+
+The States output is:
+
+ text
+ Initialize -@ DAQDevice
+ Configure -@ DAQDevice
+ Read -@ DAQDevice
+ Close -@ DAQDevice
+
+> - Ref: Message Building API
+
+-- Controls --
+- States with Replace Token: CSM state string with replacement marks.
+- : `` mark, which usually represents the same argument.
+- : `` mark, which usually represents the same target.
+- <1>: Custom mark 1.
+- <2>: Custom mark 2.
+
+-- Indicators --
+- States: State string after replacement.
+
+#### CSM - Replace Mark with String Array.vi
+Replaces tags in a single state string with strings from an array and merges them into a string describing a group of states.
+
+Example: For `Draw >> <1> -@ Painter`, Tag should be set to `<1>`
+
+Input array `[Line, Circle, Rectangle]`. The result will be:
+
+ Draw >> Line -@ Painter
+ Draw >> Circle -@ Painter
+ Draw >> Rectangle -@ Painter
+
+-- Controls --
+- single-line text: Single-line state string containing tags like `<1>`, `<2>`, `<3>`, etc.
+- Substitution Mark: The tag to replace, such as `<1>`, `<2>`, `<3>`, etc.
+- replace string: The array of strings to replace the tag with.
+
+-- Indicators --
+- States: The merged state string.
+
+### CSM - Broadcast Status Change.vi
+Broadcasts a status change to the system. CSM modules with registered states will receive this status change. For example:
+
+ // Broadcast status change
+ Status >> Arguments ->
+
+> - Ref: CSM State Queue Operation API
+
+-- Controls --
+- Status with Arguments: The status and arguments to be broadcast. This input supports multiple lines and each state line will have `->` appended.
+- State Queue: The entire state queue is connected to this input.
+- Broadcast? (T): Specifies whether to broadcast.
+
+-- Indicators --
+- Remaining States: Returns all concatenated states and arguments.
+
+### Add State(s) to Queue By BOOL++.vi
+Merges CSM message strings into the CSM message queue. This VI provides string options for both TRUE and FALSE states, avoiding the use of case structures and improving code readability and programming efficiency.
+
+> - Ref: CSM State Queue Operation API
+
+> [!NOTE]
+> Polymorphic VI Options
+> - Add State(s) to Queue By BOOL(Element).vi
+> - Add State(s) to Queue By BOOL(Array Left).vi
+> - Add State(s) to Queue By BOOL(Array Right).vi
+> - Add State(s) to Queue By BOOL(Array All).vi
+
+#### Add State(s) to Queue By BOOL(Element).vi
+Merges CSM message strings into the CSM message queue. This VI provides string options for both TRUE and FALSE states, avoiding the use of Case Structures and improving code readability and programming efficiency.
+
+> - Ref: CSM State Queue Operation API
+
+-- Controls --
+- State Queue (""): The entire state queue is connected to this input.
+- Condition: Selects the state string connected to the TRUE or FALSE terminal.
+- High Priority? (F): If TRUE, the state is inserted at the front of the State Queue (""). If FALSE, the state is appended to the end.
+- TRUE (""): The state string to insert when Condition is TRUE.
+- FALSE (""): The state string to insert when Condition is FALSE.
+
+-- Indicators --
+- Remaining States: Returns all concatenated states and arguments.
+
+#### Add State(s) to Queue By BOOL(Array Left).vi
+Merges CSM message strings into the CSM message queue. This VI provides string options for both TRUE and FALSE states, avoiding the use of case structures and improving code readability and programming efficiency.
+
+> - Ref: CSM State Queue Operation API
+
+-- Controls --
+- State Queue (""): The entire state queue is connected to this input.
+- Condition: Selects the state string connected to the TRUE or FALSE terminal.
+- High Priority? (F): If TRUE, the state is inserted at the front of the State Queue (""). If FALSE, the state is appended to the end.
+- TRUE (""): The state string to insert when Condition is TRUE.
+- FALSE (""): The state string to insert when Condition is FALSE.
+
+-- Indicators --
+- Remaining States: Returns all concatenated states and arguments.
+
+#### Add State(s) to Queue By BOOL(Array Right).vi
+Merges CSM message strings into the CSM message queue. This VI provides string options for both TRUE and FALSE states, avoiding the use of case structures and improving code readability and programming efficiency.
+
+> - Ref: CSM State Queue Operation API
+
+-- Controls --
+- State Queue (""): The entire state queue is connected to this input.
+- Condition: Selects the state string connected to the TRUE or FALSE terminal.
+- High Priority? (F): If TRUE, the state is inserted at the front of the State Queue (""). If FALSE, the state is appended to the end.
+- TRUE (""): The state string to insert when Condition is TRUE.
+- FALSE (""): The state string to insert when Condition is FALSE.
+
+-- Indicators --
+- Remaining States: Returns all concatenated states and arguments.
+
+#### Add State(s) to Queue By BOOL(Array All).vi
+Generates the concatenated state of TRUE/FALSE and the remaining states based on the High Priority and Boolean inputs. The High Priority input determines whether to concatenate the TRUE or FALSE string before or after the remaining states. The TRUE and FALSE inputs determine whether the string to be concatenated is TRUE or FALSE.
+
+> - Ref: CSM State Queue Operation API
+
+-- Controls --
+- State Queue (""): The entire state queue is connected to this input.
+- Condition: Selects the state string connected to the TRUE or FALSE terminal.
+- High Priority? (F): If TRUE, the state is inserted at the front of the State Queue (""). If FALSE, the state is appended to the end.
+- TRUE (""): The state string to insert when Condition is TRUE.
+- FALSE (""): The state string to insert when Condition is FALSE.
+
+-- Indicators --
+- Remaining States: Returns all concatenated states and arguments.
diff --git a/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description/VI Description(en-us)/VI Description(en-us) - 03. Arguments.md b/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description/VI Description(en-us)/VI Description(en-us) - 03. Arguments.md
new file mode 100644
index 000000000..45cb4270b
--- /dev/null
+++ b/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description/VI Description(en-us)/VI Description(en-us) - 03. Arguments.md
@@ -0,0 +1,142 @@
+# CSM API
+
+## Arguments
+
+> [!NOTE]
+> CSM Message Keywords
+>
+> The following are CSM message keywords: `->`, `->|`, `-@`, `-&`, `<-`, `\r`, `\n`, `//`, `>>`, `>>>`, `>>>`, `;`, `,`.
+
+> [!NOTE]
+> CSM Argument Type
+>
+> In CSM, all arguments and return values are presented in string format, but they can carry any data type underneath. Therefore, the sender must encode first, and the receiver must decode afterwards. For example, CSM has a built-in HEXSTR encoding scheme, and custom codecs can also be extended as needed. To facilitate the identification of the encoding method, it is recommended to write the encoded argument in the format ` STRING FORMAT ARGUMENT`. Use the CSM - Argument Type VI to extract the type tag and select the corresponding decoding function accordingly.
+
+> [!NOTE]
+> CSM HEXSTR Format Argument
+>
+> To pass arbitrary data types in CSM arguments, CSM has a built-in HEXSTR format argument encoding/decoding scheme. The argument type string is HEXSTR. The conversion process is as follows:
+>
+> 1. Convert LabVIEW data to a variant.
+> 2. Serialize the memory image of the variant into a hexadecimal string;
+> 3. Obtain the argument in the form ` hexadecimal string`, which can be safely embedded in the state string without disrupting CSM message parsing.
+
+> [!NOTE]
+> CSM ERRSTR Format Argument
+>
+> The LabVIEW Error Cluster is a complex data type. The error information string usually contains carriage returns, which cannot be directly passed as a CSM argument. Although error cluster information can be converted to HEXSTR format, this method lacks readability, making it impossible to read information intuitively in logs. Therefore, to pass LabVIEW error information in CSM arguments, CSM has a built-in ERRSTR format argument encoding/decoding scheme. The argument type string is ERRSTR. The conversion process is as follows:
+> 1. Format the code and source in the error cluster into a string with the following format:
+> - Error: `[Error: error-code] error-description-As-safe-argument-string`
+> - Warning: `[Warning: error-code] warning-description-As-safe-argument-string`
+> 2. Replace special characters in this string with safe characters.
+> 3. Obtain the CSM ERRSTR format argument, which can be safely embedded in the state string without disrupting CSM message parsing.
+
+> [!NOTE]
+> CSM Safe String Argument
+>
+> To pass arbitrary strings in CSM arguments without disrupting message parsing, CSM has a built-in Safe-String encoding/decoding scheme. The argument type string is SAFESTR. The conversion process is as follows:
+> 1. Scan the input string. If any CSM keywords, such as `->`, `;`, `\r` appear, replace them with `%Hex` escape sequences.
+> 2. Obtain the argument in the form ` escaped string`, which can be safely embedded in the state string without disrupting CSM message parsing.
+
+### CSM - Argument Type.vi
+Extracts the parameter encoding type tag from the encoded argument string.
+> - Ref: CSM Argument Type
+
+-- Controls --
+- Arguments: Argument string.
+
+-- Indicators --
+- Arguments (Dup): A copy of the input argument string.
+- Argument Type: Encoding type tag of the argument string.
+
+### CSM - Keywords.vi
+Lists keywords in CSM messages and their %Hex format.
+> - Ref: CSM Message Keywords
+
+-- Indicators --
+- keywords: List of CSM keywords.
+- Keywords (%Hex Format): The %Hex format of the CSM keyword list.
+
+### CSM - Make String Arguments Safe.vi
+Converts CSM keywords in the argument string to %Hex format to ensure that CSM message string parsing is not affected.
+
+> - Ref: CSM Message Keywords
+> - Ref: CSM Safe String Argument
+
+Reference Example: `[CSM-Example]\0. Base Concepts\4.3 Arguments - Safe Arguments if it contains key words of CSM.vi`.
+
+-- Controls --
+- Argument String: String argument.
+
+-- Indicators --
+- Safe Argument String: Safe string argument.
+
+### CSM - Revert Arguments-Safe String.vi
+Converts the %Hex format CSM keywords in the safe string argument back to the original format.
+
+> - Ref: CSM Message Keywords
+> - Ref: CSM Safe String Argument
+
+Reference Example: `[CSM-Example]\0. Base Concepts\4.3 Arguments - Safe Arguments if it contains key words of CSM.vi`.
+
+-- Controls --
+- Safe Argument String: Safe string argument.
+
+-- Indicators --
+- Origin Argument String: String argument.
+
+### CSM - Convert Data to HexStr.vi
+Converts any LabVIEW data type to a HEXSTR format argument string.
+
+> - Ref: CSM Argument Type
+> - Ref: CSM HEXSTR Format Argument
+
+Reference Example: `[CSM-Example]\0. Base Concepts\4.1 Arguments - Complex Data As Arguments.vi`.
+
+-- Controls --
+- Variant: LabVIEW data. Supports any data type via Variant.
+
+-- Indicators --
+- HEX String (0-9,A-F): CSM HEXSTR format argument.
+
+### CSM - Convert HexStr to Data.vi
+Converts the hexadecimal string argument back to Variant data.
+
+> - Ref: CSM Argument Type
+> - Ref: CSM HEXSTR Format Argument
+
+Reference Example: `[CSM-Example]\0. Base Concepts\4.1 Arguments - Complex Data As Arguments.vi`.
+
+-- Controls --
+- HEX String: CSM HEXSTR format argument.
+
+-- Indicators --
+- Variant: LabVIEW data. Supports any data type via Variant.
+
+### CSM - Convert Error to Argument.vi
+Converts a LabVIEW Error Cluster to the CSM error argument format.
+
+> - Ref: CSM Argument Type
+> - Ref: CSM ERRSTR Format Argument
+
+Reference Example: `[CSM-Example]\0. Base Concepts\4.2 Arguments - Error As Arguments.vi`.
+
+-- Controls --
+- Error: LabVIEW Error Cluster.
+
+-- Indicators --
+- Argument: CSM error argument format.
+
+### CSM - Convert Argument to Error.vi
+Converts the CSM error argument format to a LabVIEW Error Cluster.
+
+> - Ref: CSM Argument Type
+> - Ref: CSM ERRSTR Format Argument
+
+Reference Example: `[CSM-Example]\0. Base Concepts\4.2 Arguments - Error As Arguments.vi`.
+
+-- Controls --
+- Argument: CSM error argument format.
+
+-- Indicators --
+- Error: LabVIEW Error Cluster.
diff --git a/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description/VI Description(en-us)/VI Description(en-us) - 04 .Management API.md b/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description/VI Description(en-us)/VI Description(en-us) - 04 .Management API.md
new file mode 100644
index 000000000..12c2f57f4
--- /dev/null
+++ b/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description/VI Description(en-us)/VI Description(en-us) - 04 .Management API.md
@@ -0,0 +1,262 @@
+# CSM API
+
+## Management API
+
+> [!NOTE]
+> CSM Operation Modes
+>
+> - Stand-alone: Independent operation mode. If no module name is specified, a random ID is automatically generated to identify the module.
+> - CSM: Normal CSM module.
+> - Action Worker: Worker Mode. Append `#` to the module name to mark this module as a worker. This module shares the same message queue with other workers having the same name.
+> - Chain Node: Chain node. Append `$` to the module name to mark this module as a chain node. Messages on the same chain will be passed sequentially until a node processes the message.
+
+> [!NOTE]
+> CSM Priority Queue Design
+>
+> In the background, CSM essentially uses LabVIEW queues to implement inter-module communication. However, CSM uses two separate queues to store messages of different priorities:
+> - Normal Priority Queue: Used for passing asynchronous messages and status broadcasts.
+> - High Priority Message Queue: Used for passing synchronous messages and interrupt broadcasts. Messages in the High Priority Queue are processed first. Messages in the Normal Priority Queue are processed only after the messages in the High Priority Queue have been processed.
+
+### CSM - Check If Module Exists.vi
+Checks if a CSM module exists. When a CSM module is running in Worker Mode or Chain of Responsibility Mode, the module is marked as non-existent only after all nodes composing the module have exited.
+
+-- Controls --
+- CSM Name: CSM module name.
+
+-- Indicators --
+- CSM Name (dup): A copy of the input CSM module name.
+- Exist?: Returns whether the module exists.
+
+### CSM - List Modules.vi
+Lists all active CSM modules. This VI has two sets of options:
+
+- Scope Option: Used to specify whether to list system-level modules. By default, system-level modules are not listed. Options: Normal/System Only/All.
+- With Nodes Option: Targeted at Worker Mode and Chain of Responsibility Mode. When including nodes, individual nodes are listed along with the modules. Otherwise, only the modules are listed. By default, nodes are not included.
+
+> - Ref: CSM Operation Modes
+
+-- Controls --
+- Scope (Normal): Scope option. You can select from Normal, System Only, or All.
+- With Nodes? (F): Whether to include nodes. This input is targeted at Worker Mode and Chain of Responsibility Mode. When TRUE, nodes are listed simultaneously. Otherwise, only modules are listed. The default is FALSE.
+
+-- Indicators --
+- Module Names: List of CSM module names.
+
+### CSM - List Submodules.vi
+
+Lists all submodules of the current group or module. When Recursive? (T) is TRUE, This VI recursively lists submodules at all levels. Otherwise, this VI only lists the direct next-level submodules.
+
+ Example: The system contains the following five modules: Level1.Level2A, Level1.Level2A.Node1, Level1.Level2A.Node2, Level1.Level2B.Node1, Level1.Level2B.Node2.
+ - When Parent Name is "Level1":
+ If Recursive? (T) is True, this VI recursively lists submodules at all levels, including Level1.Level2A, Level1.Level2A.Node1, Level1.Level2A.Node2, Level1.Level2B.Node1, Level1.Level2B.Node2.
+ If Recursive? (T) is False, this VI only lists direct next-level submodules, which only includes Level1.Level2A. Note that Level1.Level2B is not a module instance, so it is not included in the results.
+
+> [!NOTE]
+> Submodules are only valid for normal CSM modules and are invalid for modules in Worker Mode or Chain of Responsibility Mode.
+
+> - Ref: CSM Submodule
+
+-- Controls --
+- Parent Name: Group or parent node name.
+- Recursive? (T): Whether to recursively list submodules at all levels. The default is TRUE.
+
+-- Indicators --
+- Parent Name (Dup): A copy of the input group or parent node name.
+- Submodules: List of submodule names.
+
+### CSM - Module VI Reference.vi
+Obtains the VI Reference of the input module. The following is the logic of this VI:
+- This VI queries and retrieves the CSM module's VI reference by sending a `VI Reference` synchronous message, so it has input parameters similar to the VI that sends synchronous messages.
+- This VI caches the VI reference of the CSM module queried during the current main program run in the background. When the same module is queried again and the retrieved VI reference is still valid, the cached VI reference is returned directly instead of sending another synchronous message query.
+- If you need to force a re-query of the module's VI reference, you can set Force? (F) to TRUE.
+
+Behavior for CSM in special operation modes:
+- Worker Mode: Returns the VI reference of the worker node handling the `VI Reference` message.
+- Chain of Responsibility Mode: Returns the VI reference of the first node of the CSM module in Chain of Responsibility Mode.
+- System-Level Module: Same as normal mode CSM. Returns the VI reference of the system-level module.
+
+-- Controls --
+- Current Module ("" to Generate an ID): Tag for the querying CSM module. If empty, a unique ID is generated.
+- CSM Name: CSM module name.
+- Force? (F): Whether to force a re-query of the module's VI reference. The default is FALSE.
+- Response Timeout (-2 Using Global Settings): Timeout for synchronous calls. The default is -2, which uses the global setting. You can set the global timeout using the CSM - Set TMO of Sync-Reply VI.
+
+-- Indicators --
+- CSM Module VIRef: VI reference of the CSM module.
+
+### CSM - Set TMO of Sync-Reply.vi
+Sets the global synchronous call timeout for the CSM program, in milliseconds. When the input is -2, the global timeout is not modified, and the return value is the current global timeout. When the input is any other positive value, the global timeout is modified to that value, and the new global timeout is returned.
+
+> - Ref: CSM Synchronous Message Global Timeout
+
+When calling a CSM Module/API, the default timeout is -2, in which case the globally configured timeout is used. If set to another positive value, that value is used as the timeout.
+
+-- Controls --
+- TMO For Sync-Rep (ms) In: Global timeout input. Using a value of -2 indicates no change to the global timeout. Other positive values indicate modifying the global timeout to that value.
+
+-- Indicators --
+- TMO For Sync-Rep (ms) Out: The current global timeout.
+
+### CSM - Module Status.vi
+Obtains the status of a CSM module, including operation mode, number of workers, and number of messages pending in the message queue.
+
+> - Ref: CSM Operation Modes
+
+-- Controls --
+- CSM Name: CSM module name.
+
+-- Indicators --
+- CSM Name (dup): A copy of the input CSM module name.
+- Mode: Returns the operation mode of the module.
+- #Nodes: Number of nodes in Worker Mode or Chain of Responsibility Mode.
+- #Elements In Queue: Number of messages pending processing in the CSM message queue.
+
+### CSM - Flush Queue.vi
+Clear the LabVIEW queue used in the background for inter-module communication of a CSM module.
+
+> - Ref: CSM Priority Queue Design
+
+> [!WARNING]
+> Using this VI is generally not recommended for CSM modules. It is recommended to use code design to avoid message accumulation in modules. Therefore, it is recommended to avoid using this VI to clear background message queues in CSM modules.
+
+-- Controls --
+- CSM Name: CSM module name.
+- Option (Low Priority As Default): The queue to flush. You can select from the following: All, Low Priority, and High Priority. The default is Low Priority.
+
+-- Indicators --
+- CSM Name (Dup): A copy of the input CSM module name.
+- #Flushed: Number of elements in the flushed message queue.
+
+### Filter JKISM String Queue(CSM - Filter JKISM String Queue.vi)
+Filters specific states in the CSM state queue.
+
+> [!WARNING]
+> Using this VI is generally not recommended. It is recommended to avoid message accumulation in modules through your code design. Therefore, it is recommended to avoid clearing the JKISM string queue through code design. However, if clearing the JKISM string queue is mandatory, it is recommended to use this VI to clear the JKISM string queue rather than using string operations.
+
+> - Ref: CSM State Queue Operation API
+
+> [!NOTE]
+> Polymorphic VI Options
+>
+> - CSM - Filter Local States.vi: Filters local states.
+> - CSM - Filter Messages.vi: Filters all types of messages.
+> - CSM - Filter Sync Messages.vi: Filters synchronous messages.
+> - CSM - Filter Async Messages.vi: Filters asynchronous messages.
+> - CSM - Filter Async without Reply Messages.vi: Filters asynchronous without reply messages.
+> - CSM - Filter Messages to Non-Existing Modules.vi: Filters messages sent to non-existing modules.
+> - CSM - Filter Broadcasts.vi: Filters broadcast messages.
+> - CSM - Filter Status Broadcasts.vi: Filters status broadcast messages.
+> - CSM - Filter Interrupt Broadcasts.vi: Filters interrupt broadcast messages.
+> - CSM - Filter Duplicated Lines.vi: Filters duplicated lines.
+
+#### CSM - Filter Local States.vi
+Filters local states in the CSM state queue.
+
+> - Ref: CSM State Queue Operation API
+
+-- Controls --
+- States In: The entire state description string to filter.
+
+-- Indicators --
+- States Out: The filtered state description string.
+
+#### CSM - Filter Messages.vi
+Filters all types of messages in the CSM state queue.
+
+> - Ref: CSM State Queue Operation API
+
+-- Controls --
+- States In: The entire state description string to filter.
+
+-- Indicators --
+- States Out: The filtered state description string.
+
+#### CSM - Filter Sync Messages.vi
+Filters synchronous messages in the CSM state queue.
+
+> - Ref: CSM State Queue Operation API
+
+-- Controls --
+- States In: The entire state description string to filter.
+
+-- Indicators --
+- States Out: The filtered state description string.
+
+#### CSM - Filter Async Messages.vi
+Filters asynchronous messages in the CSM state queue.
+
+> - Ref: CSM State Queue Operation API
+
+-- Controls --
+- States In: The entire state description string to filter.
+
+-- Indicators --
+- States Out: The filtered state description string.
+
+#### CSM - Filter Async without Reply Messages.vi
+Filters asynchronous without reply messages in the CSM state queue.
+
+> - Ref: CSM State Queue Operation API
+
+-- Controls --
+- States In: The entire state description string to filter.
+
+-- Indicators --
+- States Out: The filtered state description string.
+
+#### CSM - Filter Messages to Non-Existing Modules.vi
+Filters messages sent to non-existing modules in the CSM state queue. This VI uses the CSM - List Modules VI to obtain all active CSM modules and then filters out messages sent to modules that do not exist.
+
+> - Ref: CSM State Queue Operation API
+
+-- Controls --
+- States In: The entire state description string to filter.
+
+-- Indicators --
+- States Out: The filtered state description string.
+
+#### CSM - Filter Broadcasts.vi
+Filters broadcast messages in the CSM state queue.
+
+> - Ref: CSM State Queue Operation API
+
+-- Controls --
+- States In: The entire state description string to filter.
+
+-- Indicators --
+- States Out: The filtered state description string.
+
+#### CSM - Filter Status Broadcasts.vi
+Filters status broadcast messages in the CSM state queue.
+
+> - Ref: CSM State Queue Operation API
+
+-- Controls --
+- States In: The entire state description string to filter.
+
+-- Indicators --
+- States Out: The filtered state description string.
+
+#### CSM - Filter Interrupt Broadcasts.vi
+Filters interrupt broadcast messages in the CSM state queue.
+
+> - Ref: CSM State Queue Operation API
+
+-- Controls --
+- States In: The entire state description string to filter.
+
+-- Indicators --
+- States Out: The filtered state description string.
+
+#### CSM - Filter Duplicated Lines.vi
+Filters duplicated lines in the CSM state queue.
+
+> - Ref: CSM State Queue Operation API
+
+-- Controls --
+- Keep First Matched? (T): Whether to keep the first matched item. The default is TRUE.
+- States In: The entire state description string to filter.
+- Option: Filter option.
+
+-- Indicators --
+- States Out: The filtered state description string.
diff --git a/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description/VI Description(en-us)/VI Description(en-us) - 05. Module Operation API.md b/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description/VI Description(en-us)/VI Description(en-us) - 05. Module Operation API.md
new file mode 100644
index 000000000..70b161098
--- /dev/null
+++ b/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description/VI Description(en-us)/VI Description(en-us) - 05. Module Operation API.md
@@ -0,0 +1,235 @@
+# CSM API
+
+## Module Operation API
+
+### CSM - Wait for Module to Be Alive.vi
+Waits for a CSM module to come online within a specified timeout period and returns the wait time. This VI returns an error if the timeout is exceeded. Internally, this VI periodically checks if the CSM module is online using the CSM - Check If Module Exists VI at 1 ms intervals.
+
+-- Controls --
+- CSM Name: CSM module name.
+- Wait (5000ms): Timeout duration for waiting. The default is 5000 ms.
+
+-- Indicators --
+- CSM Name (Dup): CSM module name.
+- Waited (ms): Time elapsed while waiting.
+
+### CSM - Wait for All Modules to be Alive.vi
+Waits for a group of CSM modules to all come online within a specified timeout period, and returns the wait time. This VI returns an error and the names of modules that did not come online if the timeout is exceeded. Internally, this VI periodically checks if all modules are online using the CSM - List Module VI at 5 ms intervals.
+
+-- Controls --
+- CSM Names: CSM module names.
+- Timeout (5000ms): Timeout duration for waiting. The default is 5000 ms.
+
+-- Indicators --
+- CSMs Left: CSM modules that have not come online after the timeout.
+- Waited (ms): Time elapsed while waiting.
+
+### CSM - Wait for All Modules to Exit.vi
+Waits for a group of CSM modules to all go offline within a specified timeout period, and returns the wait time. This VI returns an error and the names of modules that did not go offline if the timeout is exceeded. This VI is typically used during program exit.
+
+-- Controls --
+- CSM Names: CSM module names.
+- Timeout (5000ms): Timeout duration for waiting. The default is 5000 ms.
+
+-- Indicators --
+- CSMs Left: CSM modules that have not gone offline after the timeout.
+- Waited (ms): Time elapsed while waiting.
+
+### CSM - Post Message.vi
+Sends an asynchronous message to the specified CSM module. Since the transmission is asynchronous, this VI does not wait for a reply, and code execution continues immediately after the message is sent. If the CSM module does not exist, a "Target Error" is returned.
+
+> ![NOTE]
+> Asynchronous messages sent using this VI are strictly asynchronous without return. Return arguments from asynchronous messages cannot be retrieved.
+
+> - Ref: Asynchronous Message
+> - Ref: CSM Message Target Module Description
+
+-- Controls --
+- Current Module ("" to Generate an ID): Name of the current module. If empty, a temporary ID is generated for debugging purposes to identify the location.
+- State: Message string.
+- Arguments (""): Message arguments.
+- Target Module: Name of the target module.
+
+### CSM - Wait and Post Message.vi
+Sends an asynchronous message to the specified CSM module. Since the transmission is asynchronous, this VI does not wait for a reply, and code execution continues immediately after the message is sent. If the CSM module does not exist, this VI waits for the specified timeout duration. If the timeout is exceeded, a timeout error is returned.
+
+> - Ref: Asynchronous Message
+> - Ref: CSM Message Target Module Description
+
+-- Controls --
+- Current Module ("" to Generate an ID): Name of the current module. If empty, a temporary ID is generated for debugging purposes to identify the location.
+- State: Message string.
+- Arguments (""): Message arguments.
+- Target Module: Name of the target module.
+- Wait (5000ms): Timeout duration for waiting. The default is 5000 ms.
+
+-- Indicators --
+- Waited (ms): Time elapsed while waiting.
+
+### CSM - Send Message and Wait for Reply.vi
+Sends a synchronous message to the CSM and waits for a reply before continuing code execution.
+- If no reply message is received within the timeout, this VI returns a "CSM Timeout Error".
+- If the target module does not exist, this VI returns a "Target Error".
+
+> - Ref: Synchronous Message
+> - Ref: Global Timeout Setting
+> - Ref: CSM Message Target Module Description
+
+-- Controls --
+- Current Module ("" to Generate an ID): Name of the current module. If empty, a temporary ID is generated for debugging purposes to identify the location.
+- State: Message string.
+- Arguments (""): Message arguments.
+- Target Module: Target CSM module name.
+- Response Timeout (-2 Using Global Settings): Timeout setting for waiting for a reply. The default is 5000 ms.
+
+-- Indicators --
+- Response: Returned response.
+- Source CSM: Name of the CSM module that sourced the returned response. In Worker Mode or Chain of Responsibility Mode, this output returns the name of the node.
+
+### CSM - Wait and Send Message for Reply.vi
+Sends a synchronous message to the CSM and waits for a reply before continuing code execution. If the CSM module does not exist, this VI waits for the specified timeout duration. The following errors may occur:
+- If the module does not exist at the time of sending and the wait times out, this VI returns a timeout error.
+- If the message is sent but no reply message is received within the timeout, this VI returns a "CSM Timeout Error".
+
+> - Ref: Synchronous Message
+> - Ref: Global Timeout Setting
+> - Ref: CSM Message Target Module Description
+
+-- Controls --
+- Current Module ("" to Generate an ID): Name of the current module. If empty, a temporary ID is generated for debugging purposes to identify the location.
+- State: Message string.
+- Arguments (""): Message arguments.
+- Target Module: CSM module name.
+- Wait (5000ms): Timeout duration for waiting. The default is 5000 ms.
+- Response Timeout (-2 Using Global Settings): Timeout for synchronous calls. The default is -2, which uses the global setting. You can set the global timeout using the CSM - Set TMO of Sync-Reply VI.
+
+-- Indicators --
+- Response: Returned response.
+- Source CSM: Name of the CSM module that sourced the returned response. In Worker Mode or Chain of Responsibility Mode, this returns the name of the node.
+
+### CSM - Run Script.vi
+Executes multiple CSM commands in a single batch, supporting synchronous messages, asynchronous messages, and registrations.
+
+> - Ref: CSM Message Target Module Description
+
+-- Controls --
+- Current Module ("" to Generate an ID): Name of the current module. If empty, a temporary ID is generated for debugging purposes to identify the location.
+- CSM Scripts: CSM commands to execute.
+- Continue If Error? (F): Whether to continue execution if an error occurs. The default is FALSE, which specifies to not continue.
+- Wait (5000 ms): Timeout duration for waiting. The default is 5000 ms.
+- Response Timeout (-2 Using Global Settings): Timeout for synchronous calls. The default is -2, which uses the global setting. You can set the global timeout using the CSM - Set TMO of Sync-Reply VI.
+
+-- Indicators --
+- Response: Returned results from executing the script. Only synchronous messages carry returns. The corresponding column for other commands will be an empty string.
+- Scripts Left: Remaining unexecuted scripts.
+
+### CSM - Broadcast Event.vi
+Obtains the CSM status change event refnum.
+
+-- Controls --
+- CSM Module: CSM module name.
+- Wait (5000 ms): Timeout duration for waiting. The default is 5000 ms.
+
+-- Indicators --
+- Status Change Event: CSM status change event refnum.
+- Waited (ms): Time elapsed while waiting.
+
+### CSM - Destroy Broadcast Event.vi
+Releases the CSM status change event refnum.
+
+-- Controls --
+- Status Change Event: CSM status change event refnum.
+
+### CSM - Module Exit Event.vi
+Obtains the CSM module exit event refnum. If the module does not exist, this VI waits for the specified timeout duration. If the module still does not exist after the timeout, this VI returns a timeout error.
+
+For modules in CSM advanced modes, such as Worker Mode and Chain of Responsibility Mode, the module exit event is triggered only after the last node has exited.
+
+-- Controls --
+- Name ("" to Use UUID) In: CSM module name. Refer to CSM Naming Rules for module naming rules.
+- Wait (5000 ms): Timeout duration for waiting. The default is 5000 ms.
+
+-- Indicators --
+- CSM Exit Event: CSM module exit event refnum.
+- Waited (ms): Time elapsed while waiting.
+
+### Attributes
+
+> [!NOTE]
+> CSM Module Attributes
+>
+> CSM module attributes are a data area that can store module configuration and status, accessed by name. CSM module attributes can be used in the following scenarios:
+> - Providing a way to access and modify configuration and status information without messages. For example, a "Connected" attribute in a TCP module indicating whether a connection is established is more convenient to access directly.
+> - Nodes running in advanced modes, such as Worker Mode and Chain of Responsibility Mode, share the same data area, which is used for sharing data between modules.
+
+#### CSM - Set Module Attribute.vi
+Sets the attribute value of the specified module. If the attribute does not exist, a new attribute is created, and Replaced returns FALSE. Otherwise, it returns TRUE. If the CSM module does not exist, this VI waits for the specified timeout duration. If the timeout is exceeded, this VI returns a timeout error.
+
+> - Ref: CSM Module Attributes
+
+Reference Example: `[CSM-Example]\0. Base Concepts\6. Module Attributes.vi`.
+
+-- Controls --
+- CSM Name: CSM module name.
+- Attribute: Attribute name. Must not be an empty string.
+- Value: Attribute data.
+- Wait (5000 ms): Timeout duration for waiting. The default is 5000 ms.
+
+-- Indicators --
+- CSM Name (Dup): A copy of the input CSM module name.
+- Replaced: Whether the attribute was replaced.
+- Waited (ms): Time elapsed while waiting.
+
+#### CSM - Get Module Attribute.vi
+Reads the attribute value of the specified module. If the attribute does not exist, the default value is returned, and Found returns FALSE. Otherwise, it returns TRUE. If the CSM module does not exist, this VI waits for the specified timeout duration. If the timeout is exceeded, this VI returns a timeout error.
+
+> - Ref: CSM Module Attributes
+
+Reference Example: `[CSM-Example]\0. Base Concepts\6. Module Attributes.vi`.
+
+-- Controls --
+- CSM Name: CSM module name.
+- Attribute: Attribute name. Must not be an empty string.
+- Default Value (Empty Variant): Default value returned when the attribute does not exist.
+- Wait (5000 ms): Timeout duration for waiting. The default is 5000 ms.
+
+-- Indicators --
+- CSM Name (Dup): A copy of the input CSM module name.
+- Found: Whether the attribute exists.
+- Value: Attribute value.
+- Waited (ms): Time elapsed while waiting.
+
+#### CSM - List Module Attributes.vi
+Lists all attribute names of the specified module. If the CSM module does not exist, this VI waits for the specified timeout duration. If the timeout is exceeded, this VI returns a timeout error.
+
+> - Ref: CSM Module Attributes
+
+Reference Example: `[CSM-Example]\0. Base Concepts\6. Module Attributes.vi`.
+
+-- Controls --
+- CSM Name: CSM module name.
+- Include Value? (F): Whether to include attribute values. The default is FALSE, which specifies to not include attribute values.
+- Wait (5000 ms): Timeout duration for waiting. The default is 5000 ms.
+
+-- Indicators --
+- CSM Name (Dup): A copy of the input CSM module name.
+- Attributes: List of attribute names.
+- Values: List of attribute values.
+- Waited (ms): Time elapsed while waiting.
+
+#### CSM - Delete Module Attribute.vi
+Deletes the attribute of the specified module. If the attribute does not exist, the Found output returns FALSE. Otherwise, it returns TRUE. If the CSM module does not exist, this VI waits for the specified timeout duration. If the timeout is exceeded, this VI returns a timeout error.
+
+> - Ref: CSM Module Attributes
+
+Reference Example: `[CSM-Example]\0. Base Concepts\6. Module Attributes.vi`.
+
+-- Controls --
+- CSM Name: CSM module name.
+- Attribute: Attribute name. Must not be an empty string.
+- Wait (5000 ms): Timeout duration for waiting. The default is 5000 ms.
+
+-- Indicators --
+- CSM Name (Dup): A copy of the input CSM module name.
+- Found: Whether the attribute exists.
+- Waited (ms): Time elapsed while waiting.
diff --git a/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description/VI Description(en-us)/VI Description(en-us) - 06. Broadcast Registration.md b/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description/VI Description(en-us)/VI Description(en-us) - 06. Broadcast Registration.md
new file mode 100644
index 000000000..843feaa88
--- /dev/null
+++ b/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description/VI Description(en-us)/VI Description(en-us) - 06. Broadcast Registration.md
@@ -0,0 +1,101 @@
+# Broadcast Registration
+
+## CSM - Register Broadcast.vi
+Registers to receive notifications of changes triggered by other CSM modules. If API is not wired or the input is empty, the trigger name will be used as the response message. The trigger name can be the broadcast name of the source module or the state name of the source module.
+
+In Worker Mode and Chain of Responsibility Mode, the input node name is automatically parsed as the module name because CSM implements registrations on a per-module basis.
+
+Reference Example: `2. Caller is CSM Scenario\CSM Example - Caller is a CSM.vi`.
+
+> - Ref: CSM Registration
+> - Ref: CSM Registration Location
+> - Ref: CSM Broadcast Priority
+
+-- Controls --
+- CSM Name: CSM module name.
+- Source CSM Name (* as Default): The CSM module generating the status. You can use `*` to represent all modules generating the same status.
+- Trigger: Trigger string.
+- API (if "", same as Trigger): Upon registration, this message will be received if the trigger changes.
+- Priority (No Change): Broadcast priority after registration.
+
+-- Indicators --
+- CSM Name (Dup): A copy of the input CSM module name.
+
+## CSM - Unregister Broadcast.vi
+Unregister notifications of state changes from other CSM modules.
+
+In Worker Mode and Chain of Responsibility Mode, the input node name is automatically parsed as the module name because CSM implements registrations on a per-module basis.
+
+Reference Example: `2. Caller is CSM Scenario\CSM Example - Caller is a CSM.vi`.
+
+> - Ref: CSM Registration
+
+-- Controls --
+- CSM Name: CSM module name.
+- Source CSM Name (* as Default): The CSM module generating the status. You can use `*` to represent all modules generating the same status.
+- Trigger: Trigger string.
+- API ("*" as Default): The API name to unregister. If empty, it applies to all APIs.
+
+-- Indicators --
+- CSM Name (Dup): A copy of the input CSM module name.
+
+## CSM - List Rules in Broadcast Registry.vi
+Lists all rules in the CSM registry.
+
+> - Ref: CSM Broadcast
+> - Ref: CSM Registration
+
+-- Indicators --
+- Rule Entries: All rule entries.
+
+## CSM - List Mapping Relationships in Broadcast Registry.vi
+Lists all broadcast registration relationships for the current CSM module. Unlike rules, broadcast registration relationships represent all specific registrations of the current CSM module under the current rules.
+
+> [!NOTE]
+> CSM uses Register/Unregister operations to add CSM module broadcast registration rules. Based on the current rules and actually existing modules, all broadcast registration relationships for the current CSM module can be deduced. CSM internally caches the current registration relationships. The registration relationship cache is automatically updated when the registration rules or the number of CSM modules changes.
+
+> - Ref: CSM Broadcast
+> - Ref: CSM Registration
+
+-- Indicators --
+- Mapping Relationships: All broadcast registration relationships for the current CSM module.
+
+## CSM - List Sources in Broadcast Registry.vi
+Lists the broadcast names of all current broadcast registration relationships.
+
+> - Ref: CSM Broadcast
+> - Ref: CSM Registration
+
+-- Indicators --
+- Broadcast Names: Broadcast names of all current broadcast registration relationships.
+
+## CSM - Check Mapping Relationship in Broadcast Registry.vi
+Checks all registration relationships corresponding to a specific broadcast name of a CSM module.
+
+> - Ref: CSM Broadcast
+> - Ref: CSM Registration
+
+-- Controls --
+- CSM Name: CSM module name.
+- Broadcast Name: Name of the broadcast.
+
+-- Indicators --
+- Mapping Relationships: All registration relationships corresponding to the specific broadcast name of the current CSM module.
+
+## CSM - Remove Module in Broadcast Registry.vi
+Removes all registration relationships associated with the specified CSM module from the broadcast registry.
+
+> - Ref: CSM Broadcast
+> - Ref: CSM Registration
+
+-- Controls --
+- CSM Name: CSM module name.
+
+-- Indicators --
+- CSM Name (Dup): A copy of the input CSM module name.
+
+## CSM - Drop Broadcast Registry.vi
+Resets all information in the background broadcast registry, used in scenarios requiring a complete reset of registration relationships.
+
+> - Ref: CSM Broadcast
+> - Ref: CSM Registration
diff --git a/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description/VI Description(en-us)/VI Description(en-us) - 07. Global Log.md b/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description/VI Description(en-us)/VI Description(en-us) - 07. Global Log.md
new file mode 100644
index 000000000..012740a44
--- /dev/null
+++ b/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description/VI Description(en-us)/VI Description(en-us) - 07. Global Log.md
@@ -0,0 +1,226 @@
+# Global Log
+
+> [!NOTE]
+> CSM Global Log Functionality
+>
+> The CSM Global Log functionality is used to view global log change events, serving scenarios such as debugging and monitoring.
+> The following is the information that can be logged:
+> - Module state modifications
+> - Inter-module message communication, including data returns
+> - Module status publishing
+> - Module creation and destruction
+> - Module state registration and unregistration
+> - Error information handled by modules
+> - User-defined events
+>
+> Debugging tools are primarily developed based on the Global Log API. You can develop debugging tools according to your own needs.
+
+> [!NOTE]
+> CSM Global Log Acquisition Methods
+>
+> CSM provides two methods for acquiring global logs: Queue and Event. The Queue processing method is recommended because the queue interface is more efficient and offers greater flexibility in selecting log processing schemes based on the number of accumulated logs in the queue.
+
+## CSM - Global Log Queue.vi
+Obtains the global log queue refnum. Global log events can be retrieved from this queue.
+
+> - Ref: CSM Global Log Functionality Ref: CSM Global Log Acquisition Methods
+
+Reference Examples:
+- `4. Advance Examples\Filter From Source(Queue).vi`
+- `4. Advance Examples\Filter From Subscriber(Queue).vi`
+
+-- Indicators --
+- Global Log Queue: Global log queue refnum.
+
+## CSM - Global Log Event.vi
+Obtains the CSM global log user event refnum, used to retrieve global log user events from the global log queue.
+
+> - Ref: CSM Global Log Functionality
+> - Ref: CSM Global Log Acquisition Methods
+
+Reference Examples:
+- `4. Advance Examples\Filter From Source(Event).vi`
+- `4. Advance Examples\Filter From Subscriber(Event).vi`
+
+-- Indicators --
+- CSM Global Log Event: CSM global log user event refnum.
+- Timeout In ms (5000ms): Timeout duration. The default is 5000 ms.
+
+## CSM - Destroy Global Log Queue.vi
+Releases the global log queue refnum.
+
+> - Ref: CSM Global Log Functionality
+> - Ref: CSM Global Log Acquisition Methods
+
+Reference Examples:
+- `4. Advance Examples\Filter From Source(Queue).vi`
+- `4. Advance Examples\Filter From Subscriber(Queue).vi`
+
+-- Controls --
+- Global Log Queue: Global log queue refnum.
+
+## CSM - Destroy Global Log Event.vi
+Releases the CSM global log user event refnum.
+
+> - Ref: CSM Global Log Functionality
+> - Ref: CSM Global Log Acquisition Methods
+
+Reference Examples:
+- `4. Advance Examples\Filter From Source(Event).vi`
+- `4. Advance Examples\Filter From Subscriber(Event).vi`
+
+-- Controls --
+- CSM Global Log Event: CSM global log user event refnum.
+- Force Destroy? (F): Whether to force destruction. The default is FALSE, which specifies not to force.
+- Timeout In ms (5000ms): Timeout duration. The default is 5000 ms.
+
+## CSM - Global Log Error Handler.vi
+CSM error handling function. If an error occurs, the error information is published via the CSM Global Log. This allows error information occurring outside the CSM framework to be recorded in the global log.
+
+-- Controls --
+- Place ("" to Use VI's Name): Marks the location where the error occurred, which by default uses the name of the calling VI.
+- Clear Error? (T): Whether to clear the error. The default is TRUE, which specifies to clear the error. The error is cleared after passing through this VI.
+
+## CSM - Generate User Global Log.vi
+Generates a custom user log for scenarios such as debugging. When the input parameters of this VI contain error information, CSM - Global Log Error Handler VI is called to record the error information.
+
+-- Controls --
+- Log: Event name.
+- Arguments: Event arguments.
+- From Who: Source.
+- ModuleName: Module name.
+- Place ("" to Use VI's Name): Location where the error occurred. The default is the name of the VI.
+
+## Filter Rules
+
+> [!NOTE]
+> Global Log Filter Location
+>
+> There are two types of global log filtering: source-side filtering and registerer-side filtering.
+>
+> - Source-side filtering: The CSM framework has built-in filtering rules. Based on user settings, logs can be prevented from being sent at the source.
+> - Subscriber-side filtering: Using the same rules, CSM provides helper VIs that can determine whether a log matches the filtering rules after it is received, allowing for different logic processing.
+>
+> Source-side processing completely prevents logs from being sent, reducing system load. Registerer-side filtering only affects the logic of that specific registerer and does not affect background log saving, offering higher flexibility.
+
+> [!NOTE]
+> Global Log Filter Rules
+>
+> Global log filter rules allow a category of logs to be filtered out so they do not appear in the global log.
+>
+> The following are the three types of log filter rules:
+> - Global Rules: Apply to all modules meeting the conditions. You can configure the following settings:
+> - Module Name: All names of the module will be filtered.
+> - Log Type: Such as state, message, broadcast, module Initialization, and so on.
+> - State Name: Any module with the state name will be filtered.
+> - State Type: Type of state, such as internal state, external message, and so on.
+> - Module Rules: Apply to specific modules. You can configure the following settings:
+> - Module Log Type: Modules with the specified log types of the module are filtered.
+> - State Name: Modules with the specified state name are filtered.
+> - State Type: Modules with the specified state type are filtered.
+> - Periodic Filter Rules: This rule is currently only effective at the registration point because it is difficult to count numbers at the publication location.
+> - Whether to enable periodic filtering.
+> - Threshold (#/s): Periodic filtering threshold.
+> - CheckPeriod (s): Check window time.
+
+### CSM - Set Log Filter Rules.vi
+Sets global source-side filtering rules. When a log satisfies the filtering rules, the log will not be sent from the source, so no tools will be able to detect this log record.
+
+> [!NOTE]
+> This VI is a polymorphic VI. To ensure forward compatibility of the interface after modifications, it is recommended to select the instance with the newer version for this VI.
+
+> - Ref: Global Log Filter Location
+> - Ref: Global Log Filter Rules
+
+Reference Examples:
+- `4. Advance Examples\Filter From Source(Queue).vi`
+- `4. Advance Examples\Filter From Source(Event).vi`
+
+### CSM - List Log Filter Rules As Strings.vi
+Lists global filter rules in string format, with each rule occupying one line for user viewing. This VI is primarily used for background log file saving, debugging interface viewing, and so on.
+
+> - Ref: Global Log Filter Rules
+
+-- Indicators --
+- Rule Strings: Filter rule strings.
+
+### CSM - Convert Filter Rules.vi
+Converts a list of filter rule clusters into filter rule class instances. Providing the interface in the form of a class ensures forward compatibility. When functions are modified, the old interface remains unchanged. Currently, this VI is mainly used for the CSM File Logger Addon.
+
+> [!NOTE]
+> This VI is designed as a polymorphic VI in order to ensure forward compatibility of the interface after modifications. It is recommended to select the instance with the newer version.
+
+> - Ref: Global Log Filter Rules
+
+### CSM - Filter Global Log.vi
+This is a registerer-side filtering VI used to determine if a log satisfies the filtering rules. The filtering judgment occurs at the registerer end, so it will not affect registrations of other tools.
+
+> [!NOTE]
+> This VI is a Polymorphic VI to ensure forward compatibility of the interface after modifications. It is recommended to select the instance with the newer version.
+
+> - Ref: Global Log Filter Rules
+
+### Utility VIs
+
+#### Global Log To String.vi
+Converts global log data clusters to strings.
+
+-- Controls --
+- Log: Global log data cluster.
+
+-- Indicators --
+- Log String: Global log string.
+
+#### Global Log To String(Source Time).vi
+Converts global log data clusters to strings, using the send time as the timestamp.
+
+-- Controls --
+- Log: Global log data cluster.
+- Format String: Timestamp format.
+
+-- Indicators --
+- Log String: Global log string.
+
+#### Global Log History Cacher.vi
+Saves the current input string to the cache. When the cached history strings exceed the maximum length limit, the oldest cached string will be overwritten. Use this VI for debugging CSM history states.
+
+-- Controls --
+- Global Log Data: Received global log information packet.
+- Length (10000): Maximum string length for cached history strings.
+- Level (Normal): Processing level. The default is Normal, which indicates standard processing. Higher levels omit different information to increase processing speed.
+- Time Format String: Timestamp format.
+- With Periodic Info? (T): Whether to fold periodic logs.
+- Remove Immediately? (F): Whether to immediately remove periodic folded information.
+- Reset?: Reset flag.
+- Settings: Periodic log configuration information. You can set detection period and periodic threshold to determine whether to fold.
+
+-- Indicators --
+- String Cache: Cached history strings.
+
+#### Auto Processing Level.vi
+Dynamically calculates the recommended log processing level based on the current number of logs in the global log queue.
+
+-- Controls --
+- #Left In Q: Number of remaining logs in the global log queue.
+- Debounce Period (5s): Log processing upgrade time. If logs in the global log queue consistently increase within the specified time, the processing level will be upgraded.
+- Period (0.1s): Detection period. The default is 100 ms.
+- Reset? (F): Reset flag.
+
+-- Indicators --
+- Level: Processing level. "Normal" indicates standard processing. Higher levels omit different information to increase processing speed.
+- LogInQ Changing Speed (#/s): Current rate of log change in the global log queue.
+- Since Upgraded (S): Time since the last processing level upgrade.
+
+### Exit With Empty Queue Check.vi
+This VI is used for global log monitoring loops utilizing the global log queue, such as `template/CSM - Global Log Queue Monitoring Loop.vi` or the background thread of the CSM File Logger.
+
+Typically, the exit condition for these global log monitoring loops is met when the program exits. At this time, logs in the queue may not have been fully processed. Use this VI to allow a period of Timeout (5s) to process logs in the queue after the Stop signal arrives. The Exit signal is set to TRUE to exit the loop, only when the number of logs in the queue is empty or the timeout occurs.
+
+-- Controls --
+- Queue: Queue resource, such as the global log queue.
+- Stop: Input stop signal. When this signal is TRUE, it starts checking if the queue is empty.
+
+-- Controls --
+- Timeout (5s): Timeout duration. Default is 5 s.
+- Exit: Real exit signal. Exit returns TRUE when the queue is empty or timeout occurs.
+- Since Exiting (s): Time elapsed since exiting started, in seconds.
diff --git a/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description/VI Description(en-us)/VI Description(en-us) - 08. Advanced Modes.md b/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description/VI Description(en-us)/VI Description(en-us) - 08. Advanced Modes.md
new file mode 100644
index 000000000..15f56c426
--- /dev/null
+++ b/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description/VI Description(en-us)/VI Description(en-us) - 08. Advanced Modes.md
@@ -0,0 +1,218 @@
+# CSM API
+
+> [!NOTE]
+> Name Concatenation API
+>
+> This VI only manipulates the module name string and has no actual functionality. Therefore, once you are familiar with the CSM rules, you can directly enter name string and rule symbols without calling this API.
+
+## System-Level Module API
+
+> [!NOTE]
+> CSM System-Level Module
+>
+> CSM functions of a system-level module are almost identical to those of a normal module. The only difference is that the CSM - List Modules VI does not list system-level modules. Therefore, a system-level module is typically used to implement functional modules running in the background. When processing the operational logic of normal modules in a unified manner, interference with these background running logics can be avoided.
+>
+> CSM system-level modules usually start with `.`, for example: `.MainApp` and `.BackgroundTask`. The `.` is part of the name, so operations like message sending and registration must include the `.` in the name. For example, you can name the main program loop `.MainApp`. You can then use the CSM - List Modules VI to get a list of all normal modules without listing `.MainApp`. If the main program needs to exit all other modules, you can send "Macro: Exit" to the results of the CSM - List Modules VI. This allows you to exit all normal modules without affecting the operation of the system-level module.
+>
+> CSM modules in Worker Mode and Chain of Responsibility Mode can also start with `.` and run as system-level modules.
+
+### CSM - Mark As System-Level Module.vi
+Marks a module as a system-level module by adding `.` before the input string. For example, if the input is `UIModule`, the output is `.UIModule`.
+
+Reference Example: `0. Base Concepts\7. System-Level Module.vi`.
+
+> - Ref: Name Concatenation API
+> - Ref: CSM System-Level Module
+
+-- Controls --
+- CSM Name: CSM module name.
+
+-- Indicators --
+- CSM Name (Marked As System-Level Module): CSM module name marked with `.`.
+
+## Submodule
+
+> [!NOTE]
+> CSM Submodule
+>
+> There are no strict submodules in CSM. The `.` in the module name is only used to mark the logical relationship between different modules. From an actual execution perspective, each module is independent and has no hierarchical relationship. For example, modules `ModuleA` and `ModuleA.SubmoduleB` are two different modules. From the code logic perspective, they are completely independent and do not interfere with each other. However, the CSM - List Submodules VI can be used to retrieve all logical submodules of `ModuleA`, including `ModuleA.SubmoduleB`.
+>
+> It is important to note that `ModuleA` does not have to actually exist. It can serve merely as a logical group. For example, modules `Group.SubModuleA` and `Group.SubModuleB` are two different modules. From the code logic perspective, they are completely independent and do not interfere with each other. However, the CSM - List Submodules VI can be used to retrieve all logical submodules of `Group`, including `Group.SubModuleA` and `Group.SubModuleB`.
+>
+> CSM module names in Worker Mode and Chain of Responsibility Mode can also contain `.`, as this is only logical grouping and does not affect module operation.
+
+### Concatenate Submodule Name.vi
+Constructs a submodule name.
+
+-- Controls --
+- CSM Name: CSM module name.
+- Name: Name to append to the CSM module name.
+
+-- Indicators --
+- Submodule Name: Returns the concatenated submodule name.
+
+## Work Mode API
+
+> [!NOTE]
+> CSM Worker Mode
+>
+> A CSM module implements Worker Mode by instantiating multiple instances, appending `#` to the requested name, and sharing the same message queue.
+> - From an external call perspective, these instances collectively form a composite module named Worker Agent.
+> - Each instance is named a Worker.
+>
+> Behavior: External callers can consider the Worker Agent as a single CSM module capable of message communication, state registration, and so on. Internally, an idle Worker retrieves messages from the Worker Agent message queue and processes them. Therefore, Worker Mode enables concurrent message processing for a CSM module.
+>
+> Example:
+>
+> // Request module name as `module#`, where `module` is the Worker Agent name. Instantiate two instances. Their names might be:
+> // - `module#59703F3AD837`
+> // - `module#106A470BA5EC`
+> // You cannot communicate directly with a Worker. You must communicate with the Worker Agent. For example:
+> `csm message >> arguments -@ module` // Synchronous message. An idle Worker will process this message.
+> `csm message >> arguments -> module` // Asynchronous message. An idle Worker will process this message.
+>
+> Application Scenarios:
+> - Call center operator scenarios
+> - Concurrent downloader scenarios
+> - Concurrent compiler scenarios
+> - TCP Server handling multiple Client connections
+
+### CSM - Mark As Worker Module.vi
+Marks a module as a Worker Mode module by adding `#` after the CSM name.
+
+Reference Example: `4. Advance Examples\1. Action Workers Example`.
+
+> - Ref: Name Concatenation API
+> - Ref: CSM Worker Mode
+
+-- Controls --
+- CSM Name: CSM module name.
+
+-- Indicators --
+- CSM Name (Marked As Worker): CSM module name marked with `#`.
+
+## Chain of Responsibility API
+
+> [!NOTE]
+> CSM Chain of Responsibility Mode
+>
+> Multiple CSM modules form a complete module via Chain of Responsibility Mode by appending `$` to the requested name to form a chain for processing transactions.
+> - From an external call perspective, these instances collectively form a composite module named Chain.
+> - Each instance is named a Chain Node.
+>
+> Behavior: External callers can consider the Chain as a single CSM module capable of message communication, state registration, and so on. Internally, nodes attempt to process the message sequentially according to their order. When a node has the capability to process the current message, the message is processed and is not passed further down the chain.
+>
+> Example:
+>
+> // Request module name as `module$`, where `module` is the chain name. Instantiate 4 instances. Their names might be:
+> // - `module$1`
+> // - `module$2`
+> // - `module$3`
+> // - `module$4`
+> // The sequence of the composed Chain is `module$1(head) >> module$2 >> module$3 >> module$4(tail)`
+> // Assume `module$3` and `module$4` can process "csm message"
+> `csm message >> arguments -@ module`
+> // This message will be processed by `module$3`. `module$4` will not respond.
+>
+> Application Scenarios:
+> - Permission approval process. Based on job hierarchy, personnel with specific functional permissions can approve directly without passing it further.
+> - Function concatenation. Different modules implement different tasks, and different functional sets can be combined through concatenation.
+> - Function overriding. Implementing overloading in OOP through overriding.
+> - Worker Mode scenarios are usually not suitable for having UI operations.
+
+### CSM - Mark As Chain Module.vi
+
+Concatenates the name of a Chain of Responsibility Mode module, using `$` as the separator. Note that the order does not need to be consecutive, but it must be unique. Nodes with smaller numbers are arranged at the front of the responsibility chain.
+
+Reference Example: `4. Advance Examples\2. Chain of Responsibility Example`.
+
+> - Ref: CSM Chain of Responsibility Mode
+> - Ref: Name Concatenation API
+
+-- Controls --
+- CSM Name: CSM module name.
+- Order: Sequence in Chain of Responsibility Mode. Nodes with smaller numbers are arranged at the front of the responsibility chain.
+
+-- Indicators --
+- CSM Name (Marked As Chain): CSM module name marked with `$`.
+
+### CSM - Resolve Node Module.vi
+Parses the corresponding CSM module name from an Advanced Mode node name.
+
+For example:
+- For a Worker Mode node named `module#59703F3AD837`, the result is `module`.
+- For a Chain of Responsibility Mode node named `module$1`, the result is `module`.
+
+-- Controls --
+- CSM Module Name: CSM module name.
+- Node Name: Node name.
+
+## Multi-Loop Support
+> [!NOTE]
+> CSM Multi-Loop Mode
+>
+> In some scenarios, it is suitable to use multiple loops to constitute the same CSM module. For example:
+> - Retrofitting existing functional code into a CSM module. For example, TCP connection loops or DAQmx data acquisition loops. To ensure the clarity of the original logic, you can wrap the existing code in a While loop and append a CSM communication loop to implement the retrofitted functionality.
+> - In cases with high real-time requirements where a Timed Loop is needed, the CSM loop is required as a communication interface, while the Timed Loop serves as the functional loop implementation scheme.
+> - In cases where UI operations are very complex, it is recommended to separate UI operations from the CSM communication loop. The UI operation loop handles UI actions and generates inter-module messages, while the CSM loop serves as the actual functional loop.
+>
+> The Multi-Loop Support Mode API is used in such scenarios to pass internal messages between internal loops of a module or to provide CSM interface functionality for non-CSM loops.
+
+### CSM - Request CSM to Post Message.vi
+Requests the CSM module to send an asynchronous message. This VI is primarily used in CSM Multi-Loop Mode for other modules to request the CSM to send a message.
+
+In this scenario, the CSM - Post Message VI could typically also be used, but the exact moment of sending cannot be determined, and the return value of the asynchronous message cannot be obtained. The CSM - Request CSM to Post Message VI serves as a supplement.
+
+Reference Example: `4. Advance Examples\5. Multi-Loop Module Example\TCP Server Module(Multi-Loop Support).vi`.
+
+> - Ref: CSM Multi-Loop Mode
+
+-- Controls --
+- Module Name: The CSM sending the status.
+- State: Message name.
+- Arguments (""): Status arguments to be broadcast.
+- Without Reply? (F): Whether a reply is needed. When a reply is needed, an asynchronous message is sent. When a reply is not needed, an asynchronous message without reply is sent.
+- Target Module ("" By Default): Target module.
+- Immediately? (F): Immediate execution option. Sending immediately causes this message to be processed instantly in the CSM loop, rather than waiting for existing messages in the CSM loop to finish execution.
+
+### CSM - Request CSM to Broadcast Status Change.vi
+Requests the CSM to send a broadcast. This VI is primarily used in CSM Multi-Loop Mode for other modules to request the CSM to issue a broadcast notifying other modules of a status change.
+
+> [!WARNING] As long as you know the module name, you can use this VI outside the CSM module to spoof a broadcast message from this module. However, this is not recommended because such logic makes the overall logic chaotic and increases debugging difficulty. Therefore, it is only recommended to use this VI in CSM Multi-Loop Mode.
+
+Reference Example: `4. Advance Examples\5. Multi-Loop Module Example\TCP Server Module(Multi-Loop Support).vi`.
+
+> - Ref: CSM Multi-Loop Mode
+
+-- Controls --
+- Module Name: The CSM sending the status.
+- Status: Status to be broadcast.
+- Arguments (""): Status arguments to be broadcast.
+- Broadcast? (T): Switch input to control whether to broadcast.
+- Immediately? (F): Immediate execution option. Sending immediately causes this message to be processed instantly in the CSM loop, rather than waiting for existing messages in the CSM loop to finish execution.
+
+### CSM - Forward UI Operations to CSM.vi
+Forwards events generated by user operations in a UI loop parallel to the CSM loop to the CSM loop for processing. This VI is primarily applied in Multi-Loop Mode. The CSM DQMH-Style Template VI also uses this logic.
+
+Reference Example: `Addons - Loop Support\CSMLS - Continuous Loop in CSM Example.vi`.
+
+> - Ref: CSM Multi-Loop Mode
+
+-- Controls --
+- State(s) In (""): States to be processed.
+- Name ("" to Use UUID): Module name.
+- High Priority? (T): Immediate execution option. Sending immediately causes this message to be processed instantly in the CSM loop, rather than waiting for existing messages in the CSM loop to finish execution.
+
+-- Indicators --
+- States Out: Input is always empty. This output is set to ensure wire consistency in the template.
+
+### CSM - Module Turns Invalid.vi
+Checks if a CSM module has already exited. Typically used for a functional loop parallel to the CSM to exit following the CSM loop.
+
+For modules in CSM Advanced Modes, such as Worker Mode and Chain of Responsibility Mode, the module exit event is triggered only after the last node has exited.
+
+-- Controls --
+- CSM Name: CSM module name.
+
+-- Indicators --
+- Turn Invalid (Exit)?: Whether the CSM module has already exited.
diff --git a/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description/VI Description(en-us)/VI Description(en-us) - 09. Build-in Addons.md b/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description/VI Description(en-us)/VI Description(en-us) - 09. Build-in Addons.md
new file mode 100644
index 000000000..686c20d7c
--- /dev/null
+++ b/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description/VI Description(en-us)/VI Description(en-us) - 09. Build-in Addons.md
@@ -0,0 +1,187 @@
+# Build-in Addons
+
+## CSM WatchDog Addon
+
+> [!NOTE]
+> CSM WatchDog Implementation Principle
+>
+> When a LabVIEW VI exits, it automatically releases all handle resources such as queues and events. Therefore, you can create a WatchDog thread that monitors a queue resource created by the main program VI. When this queue resource is released after the main VI exits, the WatchDog thread is triggered to send `Macro: Exit` to any CSM modules that have not yet exited, ensuring they exit normally.
+
+### CSM - Start Watchdog to Ensure All Modules Exit.vi
+Starts the CSM Watchdog thread to monitor whether the main program has exited. It is typically executed immediately after the main program starts.
+
+Application Scenario: Used to ensure that all asynchronously started CSM modules can exit normally after the main program exits.
+
+> - Ref: CSM WatchDog Implementation Principle
+
+### CSM Watchdog Thread.vi
+The CSM Watchdog thread is used to ensure that all asynchronously started CSM modules can exit normally after the main program exits.
+
+> - Ref: CSM WatchDog Implementation Principle
+
+-- Controls --
+- Watchdog Queue: Watchdog queue resource.
+
+## CSM File Logger Addon
+
+### CSM - Start File Logger.vi
+Starts the CSM Global Log file recording background thread, which is used to save all execution records in the application to a specified text file.
+
+> [!NOTE]
+> CSM File Logger Implementation Principle
+>
+> The CSM File Logger retrieves all execution records in the application via the CSM Global Log API and saves them to a specified text file for later analysis and error localization. The file format is a text file with the suffix `.csmlog`, which can be opened using text editing query tools such as Notepad.
+
+> [!NOTE]
+> Log File Limits
+>
+> To prevent log files from becoming too large due to long-running software, limits are set on log file size and the number of files:
+> - File Size: The maximum size of a single file in bytes. The default is 10 MB.
+> - File Num: The maximum number of LOG files. The default is 2.
+>
+> When the log file size exceeds the File Size limit, a new file record is created. When the number of log files exceeds the File Num limit, the oldest file record is deleted.
+
+> - Ref: Global Log Filter Rules
+
+Reference Example: `Addons - Logger\CSM Application Running Log Example.vi`.
+
+-- Controls --
+- Log File Path: Log file path.
+- Timestamp format: Time format. The default is `%<%Y/%m/%d %H:%M:%S%3u>T`.
+- Log Limit: Log file size limit. File Size is the maximum size of a single file in bytes. The default is 10 MB. File Num is the maximum number of LOG files. The default is 2.
+- Filter Rules: Filter rules, configured via the CSM - Convert Filter Rules VI.
+- Enable? (T): Whether to enable the file recording function. The default is TRUE, which specifies to enable the file recording function. When Enable? is FALSE, the file recording function is disabled.
+- WatchDog? (T): Whether to enable the WatchDog function. The default is TRUE. When the calling VI exits, the allocated WatchDog resource is automatically released, triggering the recording thread to exit automatically; manually releasing the WatchDog resource will also trigger the recording thread to exit.
+- Exit When All Module Exist? (F): Automatically exit recording after all CSM modules have exited. The default is FALSE. If TRUE, and the main program is not a CSM, the recording thread will also automatically exit when all running CSM modules exit.
+
+-- Indicators --
+- Log File: CSM LOG file path.
+- Watchdog Queue: WatchDog resource handle.
+
+### CSM-Logger-Thread.vi
+The thread VI used in the CSM - Start File Logger VI.
+
+> - Ref: CSM File Logger Implementation Principle
+
+### CSM-Logger-Thread(Event).vi
+The thread VI originally used in the CSM - Start File Logger VI. This VI is now deprecated. Use the CSM-Logger-Thread VI.
+
+> - Ref: CSM File Logger Implementation Principle
+
+## CSM Loop Support Addon
+
+> [!NOTE]
+> Reason for CSM LOOP Support Design
+>
+> A loop is the basic unit of operation for a state machine, executing continuously while the state machine is running. Users can define loop conditions via logic or use the CSM-recommended Loop Support Addon to define loops.
+>
+> Typically loop schemes may have the following issues:
+> - Implementing a loop within a Case branch can cause the state machine to get stuck in that state, unable to switch normally or respond to external messages.
+> - Inserting the next loop state in the last state of a state loop can also result in poor response to external messages and is unintuitive.
+>
+> The advantage of the way Loop Support defines loops is that it can still respond to other events while the loop is running, without blocking the operation of the state machine. CSM Loop-Support VIs are used to define, append, and terminate loops, using special tags to identify the corresponding loop states and the end state. Therefore, this addon is primarily intended to provide a standard loop implementation method to solve the above problems.
+
+### CSMLS - Define Loop State(s).vi
+Defines a loop operation, identifying the repeating loop state via the tag `->`. This loop also appends the `->` tag at the end to mark the loop's conclusion.
+
+For example, the following loop can be defined:
+
+ DAQ: Initialize
+ DAQ: Start
+ DAQ: Continue Check -> // Call the CSMLS - Append Continuous State VI in this loop to repeat acquisition and wait for a period as the loop interval.
+ DAQ: Stop
+ DAQ: Close -> // -> is automatically added.
+
+During the loop process, synchronous messages will interrupt the loop and execute immediately due to their high priority. Asynchronous messages have lower priority; after being dequeued, they are added after the `->` tag. At this point, the CSMLS - Append Continuous State VI within `DAQ: Continue Check` will move the states after the `->` tag to the front of the queue, thus allowing asynchronous messages to be responded to during the loop.
+
+The loop can be ended by removing `->`. You can use the following VIs to remove the loop tag:
+- CSMLS - Remove Loop Tag and previous State(s) to Break VI: Removes the line containing the `->` tag and all preceding states, used to break out of the loop.
+- CSMLS - Remove Loop Tag to Break VI: Removes the line containing the `->` tag, used to break out of the loop.
+
+Reference Example: `Addons - Loop Support\CSMLS - Continuous Loop in CSM Example.vi`.
+
+> - Ref: Reason for CSM LOOP Support Design
+
+> [!WARNING]
+> Add to Front? (F) is usually FALSE because once a loop state starts, it does not end immediately. Before insertion into the state queue, it is considered a sub-state of the current state. If the current state was called via a synchronous message, it would not return immediately. For example, if a set of continuous acquisition states is defined in `API: Start DAQ` and this message is sent synchronously from outside, the logic should be to start the loop and then return immediately. Only set Add to Front? (F) to TRUE if the logic is to wait for the loop to end before returning.
+
+-- Controls --
+- States Queue: Connect the entire state queue to this input.
+- Loop States: Loop states.
+- Add to Front? (F): Whether to add to the front of all states. The default is FALSE.
+
+-- Indicators --
+- Remaining States: The processed message queue.
+
+### CSMLS - Append Continuous State.vi
+Appends loop states to maintain the loop running.
+
+Reference Example: `Addons - Loop Support\CSMLS - Continuous Loop in CSM Example.vi`.
+
+-- Controls --
+- States Queue: Connect the entire state queue to this input.
+- Loop State(s) and Arguments: Loop states.
+- Continuous State: Loop state name.
+- Continuous Arguments (""): Loop state arguments.
+- Append(T): Whether to append. The default is TRUE.
+
+-- Indicators --
+- Remaining States: The remaining message queue.
+
+### CSMLS - Remove Loop Tag and previous State(s) to Break.vi
+Stops the loop by removing the `` tag and all states before the `` tag.
+
+Example: If the following messages exist in the CSM message queue, executing the current API operation will remove the messages where the comments are located.
+
+ DAQ: Acquire // Will be removed
+ DAQ: Continuous Check -> // Will be removed
+ DAQ: Stop
+ DAQ: Close
+
+This is equivalent to not executing any DAQ operations and immediately entering stop and release.
+
+-- Controls --
+- States Queue: Connect the entire state queue to this input.
+
+-- Indicators --
+- Remaining States: The remaining message queue.
+
+### CSMLS - Remove Loop Tag to Break.vi
+Stops the loop by removing the `` tag.
+Example: If the following messages exist in the CSM message queue, executing the current API operation will remove the messages where the comments are located.
+
+ DAQ: Acquire
+ DAQ: Continuous Check -> // Will be removed
+ DAQ: Stop
+ DAQ: Close
+
+This is equivalent to still executing the current DAQ operation, and then entering stop and release.
+
+-- Controls --
+- States Queue: Connect the entire state queue to this input.
+
+-- Indicators --
+- Remaining States: The remaining message queue.
+
+### CSMLS - Add Exit State(s) with Loop Check.vi
+Checks for loop tags upon exit. Since this VI is easily forgotten to be called, a call has been added for the `Macro: Exit` state in the Parse State Queue++ VI. Therefore, this VI has been removed from the Functions palette.
+
+-- Controls --
+- States Queue: Connect the entire state queue to this input.
+- Exiting States: States required for exiting.
+
+-- Indicators --
+- Remaining States: Processed message queue.
+- Found: `` tag found.
+
+## CSM Attributes Supplementary Functions
+
+### CSM Set Module Attribute.vim
+Provides a version of the CSM - Set Module Attribute VI that automatically adapts to the input data type.
+
+> - Ref: CSM - Set Module Attribute.vi
+
+### CSM Get Module Attribute.vim
+Provides a version of the CSM - Get Module Attribute VI that automatically adapts to the input data type.
+
+> - Ref: CSM - Get Module Attribute.vi
diff --git a/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description/VI Description(en-us)/VI Description(en-us) - 10. Utility VIs.md b/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description/VI Description(en-us)/VI Description(en-us) - 10. Utility VIs.md
new file mode 100644
index 000000000..b7b8fa597
--- /dev/null
+++ b/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description/VI Description(en-us)/VI Description(en-us) - 10. Utility VIs.md
@@ -0,0 +1,173 @@
+# CSM API
+
+## Utility VIs
+
+## State String Operations
+
+### CSM - Compact Multiple States.vi
+Compacts multiple states into a single string for input usage.
+
+> - Ref: Message Building API
+
+-- Controls --
+- Multiple States: Array of CSM state strings.
+
+-- Indicators --
+- States: String containing multiple lines of CSM state strings.
+
+### CSM - Break Down Multiple States String.vi
+Breaks down a string containing multiple lines of CSM state strings into an array of CSM state strings.
+
+> - Ref: Message Building API
+
+-- Controls --
+- States: String containing multiple lines of CSM state strings.
+
+-- Indicators --
+- Multiple States: Array of CSM state strings.
+
+### CSM - Build Exit Messages of CSMs.vi
+Concatenates and generates exit messages (`Macro: Exit`) based on input CSM module names.
+
+> - Ref: Message Building API
+
+-- Controls --
+- CSMs: Array of CSM module names.
+- State with Arguments("Macro: Exit"): Exit message.
+
+-- Indicators --
+- States: The concatenated generated CSM message string.
+
+### CSM - Filter Duplicate Messages By Name.vi
+Filters duplicate messages, keeping only the latest message.
+
+> - Ref: CSM State Queue Operation API
+
+-- Controls --
+- States: Input message string.
+- Whole Messages in Check?(T): Whether to check the entire message string. If FALSE, only the message name is checked. The default is TRUE.
+
+-- Indicators --
+- Filtered States: Filtered message string.
+
+### CSM - Remove Duplicated Following Messages.vi
+
+> - Ref: CSM State Queue Operation API
+
+-- Controls --
+- Current State:
+- Remaining States:
+
+-- Indicators --
+- Remaining States Left:
+- Current State: Controls
+- Remaining States Left: Indicators
+
+## Data Type String Description
+
+### CSM Data Type String.vi
+Obtains the data type description string corresponding to the input data. Typically used in argument descriptions to determine the type of arguments carried.
+
+-- Controls --
+- Data: Input data.
+
+-- Indicators --
+- Data Type String: Data type description string.
+
+### CSM Data Type String to Enum.vi
+Converts a data type description string into a LabVIEW-defined data type enum.
+
+> [!NOTE]
+> Polymorphic VI Options
+> - CSM Data Type String to Enum(String).vi
+> - CSM Data Type String to Enum(TypeEnum).vi
+> - CSM Data Type String to Enum(RefnumEnum).vi
+
+#### CSM Data Type String to Enum(String).vi
+Converts a data type description string into a LabVIEW-defined data type enum, with the subtype described as a string.
+
+-- Controls --
+- Data Type String: Input data type description string.
+
+-- Indicators --
+- Primary Type: Data type enum.
+- Secondary Type String: If the input is a complex data type, returns the subtype string, such as the element type in an array data type.
+- Array Dim: If the input is an array data type, returns the array dimensions.
+
+#### CSM Data Type String to Enum(TypeEnum).vi
+Converts a data type description string into a LabVIEW-defined data type enum and returns the array subtype using an enum.
+
+-- Controls --
+- Data Type String: Input data type description string.
+
+-- Indicators --
+- Primary Type: Data type enum.
+- Secondary Type String: Array subtype enum.
+- Array Dim: If the input is an array data type, returns the array dimensions.
+
+#### CSM Data Type String to Enum(RefnumEnum).vi
+Converts a data type description string into a LabVIEW-defined data type enum and returns the refnum subtype using an enum.
+
+-- Controls --
+- Data Type String: Input data type description string.
+
+-- Indicators --
+- Primary Type: Data type enum.
+- Secondary Type String: Refnum subtype enum.
+- Array Dim: If the input is an array data type, returns the array dimensions.
+
+## Other Utility VIs
+
+### uuid.vi
+Generates a standard Universally Unique Identifier (UUID). For example:
+- 59703F3AD837
+- 106A470BA5EC
+- 9B781DB313AF
+
+-- Indicators --
+- UUID: Generated UUID.
+
+### String History Cacher.vi
+Saves the current input string to the cache. When the cached history strings exceed the maximum length limit, the oldest cached string is overwritten. Use this VI for debugging CSM history states.
+
+-- Controls --
+- String: String to be cached.
+- length: Maximum string length for cached history strings.
+- Include Timestamp? (T): Whether to include a timestamp at the beginning of each line.
+- Format String: Timestamp format.
+
+-- Indicators --
+- String Cache: Cached history strings.
+
+### Random Change Flag.vi
+Generates a random numerical value to mark state changes. In CSM, to improve efficiency, caches in some places use this flag to determine if an update is needed.
+
+-- Indicators --
+- Random Change Flag: Generated random numerical value.
+
+### State Triggered Reason.vi
+Infers the reason for triggering the current state from the Additional Information and Source CSM outputs of the Parse State Queue++ VI.
+
+The result can be:
+- LocalCall: Local call, not triggered externally.
+- Message: Triggered by an external message.
+- Broadcast: Triggered by a broadcast.
+
+-- Controls --
+- Additional Information: Additional information for this state.
+- Source CSM: Source module information.
+
+-- Indicators --
+- Additional Information (dup): A copy of the input additional information.
+- Source CSM (dup): A copy of the input source module information.
+- Reason: The reason for triggering the current state.
+
+### Format Timestamp.vi
+Formats a timestamp into a specified string format. This VI is used in the CSM Global Log.
+
+-- Controls --
+- Timestamp: Timestamp in seconds.
+- Format String: Timestamp format string, for example: `%<%Y/%m/%d %H:%M:%S%3u>T`.
+
+-- Indicators --
+- String: Formatted timestamp string.
diff --git a/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description/VI Description(en-us)/VI Description(en-us) - 11. Obselete VIs.md b/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description/VI Description(en-us)/VI Description(en-us) - 11. Obselete VIs.md
new file mode 100644
index 000000000..f3ca65fdb
--- /dev/null
+++ b/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description/VI Description(en-us)/VI Description(en-us) - 11. Obselete VIs.md
@@ -0,0 +1,61 @@
+# CSM API
+
+## Obsolete VIs
+
+### Replace Tag with Array.vi
+
+This VI is obsolete. Please use `CSM - Replace Mark with String Array.vi`
+
+> - Ref: CSM - Replace Mark with String Array.vi
+
+### CSM - Forward States to CSM.vi
+
+This VI is obsolete. Please use `CSM - Forward UI Operations to CSM.vi`
+
+> - Ref: CSM - Forward UI Operations to CSM.vi
+
+### CSM - Check Status Registration.vi
+
+This VI is obsolete. Please use `CSM - Check Mapping Relationship in Broadcast Registry.vi`
+
+> - Ref: CSM - Check Mapping Relationship in Broadcast Registry.vi
+
+### CSM - List Status in Broadcast Registry.vi
+
+This VI is obsolete. Please use `CSM - List Sources in Broadcast Registry.vi`
+
+> - Ref: CSM - List Sources in Broadcast Registry.vi
+
+### CSM - Replace Substitution Marks in Messages.vi
+
+This VI is obsolete. Please use `CSM - Replace Marks in Messages.vi`
+
+> - Ref: CSM - Replace Marks in Messages.vi
+
+### CSM - Register Status Change.vi
+
+This VI is obsolete. Please use `CSM - Register Broadcast.vi`
+
+> - Ref: CSM - Register Broadcast.vi
+
+### CSM - Unregister Status Change.vi
+
+This VI is obsolete. Please use `CSM - Unregister Broadcast.vi`
+
+> - Ref: CSM - Unregister Broadcast.vi
+
+### Build Interrupt Status Message.vi
+
+This VI is obsolete. Please use `Build Interrupt Broadcast Message.vi`
+
+> - Ref: Build Interrupt Broadcast Message.vi
+
+### Build Normal Status Message.vi
+
+This VI is obsolete. Please use `Build Status Broadcast Message.vi`
+
+> - Ref: Build Status Broadcast Message.vi
+
+### Build State String with Arguments++.vi
+
+This VI is obsolete. Please use `Build Message with Arguments++.vi`
diff --git a/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description/VI Description(en-us)/VI Description(en-us) - 12. Debug,Doc,Tools.md b/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description/VI Description(en-us)/VI Description(en-us) - 12. Debug,Doc,Tools.md
new file mode 100644
index 000000000..46265f524
--- /dev/null
+++ b/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description/VI Description(en-us)/VI Description(en-us) - 12. Debug,Doc,Tools.md
@@ -0,0 +1,44 @@
+# CSM Debug Tools
+
+## CSM - Add VI Reference Case to CSMs.vi
+
+The CSM template must include the "VI Reference" branch for external access to VI references. In early templates, this case was not included, and this tool is used to add it.
+
+This tool scans all VIs in the lvproj directory; if a VI contains a CSM module, it will be listed, and then you can choose to batch add the "VI Reference" branch.
+
+## CSM - Debug Console - DebugTool.vi
+
+CSM Debug Console, you can use this tool:
+
+1. Select an existing CSM instance, open the front panel and block diagram.
+2. Scan the API interfaces of existing CSM instances.
+3. Select an API interface, call synchronously or asynchronously, view the return value.
+4. View the overall program's running log.
+
+## CSM - Remove all CSM Bookmarks.vi
+
+Remove all bookmarks in the CSM module.
+
+## CSM - Running Log - DebugTool.vi
+
+CSM overall program running log real-time viewer.
+
+## CSM - Switch Language Tool.vi
+
+Switch the language of CSM development tools, currently supports Chinese and English.
+
+## CSM - Fix JKISM Editor RCM Entry.vi
+
+Fix the issue where the right-click context menu of JKISM State Editor does not pop up in CSM.
+
+## CSM - Create CSM Palette at Root.vi
+
+Create a CSM module palette at the root of the function palette.
+
+## CSM - Example Browser.vi
+
+CSM example browser, which allows you to easily browse CSM example programs.
+
+## CSM - Interface Browser.vi
+
+Tools for browsing CSM module interfaces, allowing you to quickly view and search the API interfaces of CSM modules in the project.
diff --git a/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description/VI Description(en-us)/VI Description(en-us) - Addon API String.md b/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description/VI Description(en-us)/VI Description(en-us) - Addon API String.md
new file mode 100644
index 000000000..0505664f0
--- /dev/null
+++ b/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description/VI Description(en-us)/VI Description(en-us) - Addon API String.md
@@ -0,0 +1,331 @@
+# CSM API String Addon
+
+> [!NOTE]
+> API String Parameter Support
+>
+> API String parameter support is used to enhance the API parameter functionality of the Communicable State Machine (CSM). API String supports passing various data types in plain text format and is specifically optimized for manual input experiences. API String does not define an argument type. The result obtained via the CSM - Argument Type VI is empty, and it is typically handled in the default case. The following are supported data types:
+> - String
+> - Path
+> - Boolean
+> - Tag
+> - Refnum (including IVI/VISA/UserDefinedRefnumTag)
+> - Integer (I8, I16, I32, I64, U8, U16, U32, U64)
+> - Floating-point (DBL/SGL)
+> - Complex (DBL/SGL)
+> - Timestamp
+> - Enum
+> - Array
+> - Cluster
+> - Other types (represented using CSM-Hexstr)
+>
+> For more details, visit: https://github.com/NEVSTOP-LAB/CSM-API-String-Arguments-Support.
+>
+> You can also refer to the examples. All data types have detailed descriptions and examples.
+
+> [!NOTE]
+> Default Strings for TRUE Value
+>
+> Supports `1`, `Active`, `Enable`, `Non-null`, `On`, `T`, `True`, `valid`, `yes`.
+>
+> Case insensitive.
+
+> [!NOTE]
+> Default Strings for FALSE Value
+>
+> Supports `0`, `Disable`, `F`, `False`, `Inactive`, `Invalid`, `No`, `Off`, `Void`, `null`.
+>
+> Case insensitive.
+
+> [!NOTE]
+> Default Floating-point Format
+>
+> The default floating-point format is `%.6p`.
+
+> [!NOTE]
+> Indexed Enum
+>
+> Format: `[Index Number][Separator][Enum String]`.
+>
+> The index number supports multiple numeric representations.
+>
+> Example of Index Number using `==` separator:
+> `1 == boolean | 2 == string | 4 == dbl | 8 == number`
+>
+> Example of Index Number using `--` separator:
+> `0x01 -- boolean | 0x02 -- string | 0x04 -- dbl | 0x08 -- number`
+>
+> Example of Index Number using `__` separator:
+> `0b0001 __ boolean | 0b0100 __ dbl | 0b1000 __ number`
+
+## API String Core Functions
+
+### API String - Is Supported Datatype.vi
+Determines whether the data type is a conversion data type supported by API String.
+
+> - Ref: API String Parameter Support
+> - Ref: CSM HEXSTR Format Argument
+
+-- Controls --
+- Data: Input data.
+
+-- Indicators --
+- Data(Dup): A copy of the input data.
+- Supported Datatype?: Boolean indicating whether API String supports the input data.
+
+### Convert Data To API String Arguments.vim
+Converts data to API String format.
+
+> - Ref: API String Parameter Support
+
+-- Controls --
+- Data: Input data.
+- Reference Cluster Data: Reference cluster data. When converting cluster data, the elements in the input data and reference data are compared. If they match completely, the elements are ignored in the conversion result.
+- No Tag Mode? (F): For cluster data, when TRUE, tag information is not included when converting to API String.
+
+-- Indicators --
+- API String: Converted API String format.
+
+### Convert API String Arguments to Data.vim
+Converts an API String to the corresponding data type.
+
+> - Ref: API String Parameter Support
+
+-- Controls --
+- API String: Input string in API String format.
+- Strict Label Check? (T): Strict label check. When TRUE, if the reference data does not contain the label, the conversion fails and reports an error.
+- Reference Type: Reference data.
+
+-- Indicators --
+- Data: Converted data.
+
+### Query Data as API String Arguments.vim
+Queries a specified data item within cluster data and converts it to API String format.
+
+Application Scenario: For example, in a new CSM module template included with the API String Addon, a `Data: Get Configuration` state is added. In this state, by sending the name of the desired data item, the corresponding data item value can be returned.
+
+Special Case: If Name is set to ``, a list of all available settings is returned.
+
+-- Controls --
+- Cluster Data: Cluster data.
+- Name: Data name.
+
+-- Indicators --
+- Cluster Data(dup): A copy of the cluster data.
+- API String: Query result in API String format.
+
+## Configuration
+
+### API String - Add Boolean Strings.vi
+Adds custom boolean strings to the API String boolean parsing list and returns the updated list.
+
+> - Ref: Default Strings for TRUE Value
+> - Ref: Default Strings for FALSE Value
+
+-- Controls --
+- Custom False Boolean Strings: List of custom FALSE strings.
+- Custom True Boolean Strings: List of custom TRUE strings.
+
+-- Indicators --
+- False Boolean Strings: Updated list of FALSE strings.
+- True Boolean Strings: Updated list of TRUE strings.
+
+### API String - Remove Boolean Strings.vi
+Removes custom boolean strings from the API String boolean parsing list and returns the updated list.
+
+> - Ref: Default Strings for TRUE Value
+> - Ref: Default Strings for FALSE Value
+
+-- Controls --
+- Custom False Boolean Strings: List of FALSE strings to remove.
+- Custom True Boolean Strings: List of TRUE strings to remove.
+
+-- Indicators --
+- False Boolean Strings: Updated list of FALSE strings.
+- True Boolean Strings: Updated list of TRUE strings.
+
+### API String - List Boolean Strings.vi
+Lists all currently available boolean value strings.
+
+> - Ref: Default Strings for TRUE Value
+> - Ref: Default Strings for FALSE Value
+
+-- Indicators --
+- False Boolean Strings: Current list of FALSE strings.
+- True Boolean Strings: Current list of TRUE strings.
+
+### API String - Set Float Format String.vi
+Sets the format string for floating-point numbers. Refer to LabVIEW format string syntax.
+
+> - Ref: Default Floating-point Format
+
+-- Controls --
+- Float Format String Setting: Floating-point format string setting.
+
+-- Indicators --
+- Float Format String: Current floating-point format string.
+
+### API String - Float Format String.vi
+Gets the current floating-point format string.
+
+> - Ref: Default Floating-point Format
+
+-- Indicators --
+- Float Format String: Current floating-point format string.
+
+### API String - Set Float Precision.vi
+Sets the precision for floating-point numbers.
+
+> [!NOTE]
+> - The default precision is 6 significant digits, with the format `%.6p`.
+> - This VI is a simplified version of the API String - Set Float Format String VI, used only for setting the number of significant digits.
+
+> - Ref: Default Floating-point Format
+
+-- Controls --
+- Precision: Floating-point precision setting.
+
+-- Indicators --
+- Float Format String: Updated floating-point format string.
+
+## String Conversion
+
+### String to Boolean_csm.vi
+Converts a string to a boolean value. Supports multiple representations for TRUE/FALSE. Custom TRUE/FALSE strings can be added via the API String - Add Boolean Strings VI.
+
+> - Ref: Default Strings for TRUE Value
+> - Ref: Default Strings for FALSE Value
+
+-- Controls --
+- String: Input string.
+- Default (F): Default value if conversion fails.
+
+-- Indicators --
+- Boolean: Converted boolean value.
+
+### String To Float_csm.vi
+Converts a string to a floating-point number. Supports various floating-point formats and units. Format can be set using the API String - Set Float Format String VI.
+
+> [!NOTE]
+> Empty strings will be converted to the default data. Floating-point strings with units are also supported and parsed correctly. Special floating-point values like `e`, `-e`, `pi`, `-pi`, `inf`, `+inf`, `-inf`, and `NaN` do not support units.
+
+> - Ref: Default Floating-point Format
+
+-- Controls --
+- String: Input string.
+- Default (0): Default value if conversion fails.
+
+-- Indicators --
+- Float: Converted floating-point number.
+- Unit String: Extracted unit string.
+
+### String To Number(I64)_csm.vi
+Converts a string to a 64-bit integer. Supports multiple numeric formats, including standard integer, decimal, hexadecimal, binary, octal, and suffix notations. Returns 0 if conversion fails.
+
+-- Controls --
+- String: Input string.
+
+-- Indicators --
+- Numeric: Converted 64-bit integer.
+
+### String To Indexed Enum_csm.vi
+Converts a string to an indexed enum type.
+
+> - Ref: Indexed Enum
+
+ _Conversion Rule 1: No Index Number_
+
+ Convert by string matching.
+
+ Example Enum = {AAA, BBBB, CCCC}
+
+ - String "AAA" converts to Enum(AAA), numeric value 0.
+ - String "CCC" converts to Enum(CCC), numeric value 2.
+
+ _Conversion Rule 2: With Index Number_
+
+ Convert by either string matching or index number matching.
+
+ Example Enum = {1- AAA, 5 - BBBB, 9 - CCCC}
+
+ - String "AAA" converts to Enum(1- AAA), numeric value 0.
+ - String "5" converts to Enum(5 - BBBB), numeric value 1.
+ - String "9 - CCCC" converts to Enum(9 - CCCC), numeric value 2.
+
+-- Controls --
+- String: Input string.
+- Enum Prototype: Enum prototype.
+
+-- Indicators --
+- Enum: Converted enum value.
+
+### Indexed Enum to Numeric_csm.vim
+Converts an enum to a numeric value. Supports indexed enum types. When the enum value carries an index number, the index number is used directly as the numeric value.
+
+> - Ref: Indexed Enum
+
+-- Controls --
+- Enum: Input enum value.
+
+-- Indicators --
+- Numeric: Numeric value of the enum.
+- String: String representation of the enum.
+
+### Numeric to Indexed Enum_csm.vim
+Converts a numeric value to an indexed enum.
+
+Rule 1: If an index number is matched, use that index directly.
+
+Rule 2: If no index number is matched, use the numeric value as the enum index.
+
+> - Ref: Indexed Enum
+
+-- Controls --
+- Numeric: Input numeric value.
+- Enum Prototype: Enum prototype.
+
+-- Indicators --
+- Enum: Converted enum value.
+
+### CSM - Timestamp to API String Arguments.vi
+Converts a LabVIEW timestamp to an API String.
+
+-- Controls --
+- Timestamp (now): Input timestamp. The default is the current time.
+- Format(Empty to use UTC): Time format string. Uses UTC format if empty.
+
+-- Indicators --
+- API String: Converted API String format.
+
+## Utility Functions
+
+### CSM - Convert HexStr to Data.vim
+Provides a version of the CSM - Convert HexStr to Data VI that adapts to data types.
+
+-- Controls --
+- HEX String: String in HEX format.
+- Type: Data type.
+
+-- Indicators --
+- data: Converted data.
+
+### CSM - Broadcast Data As API String.vim
+Broadcasts data in API String format using the CSM - Generate User Global Log VI.
+
+-- Controls --
+- Data: Data to be broadcast.
+- CSM: CSM module reference.
+- API/Condition: API or condition string.
+
+-- Indicators --
+- Data (dup): A copy of the input data.
+
+### CSM - Query Internal Data Names By API String.vi
+Queries the internal data names of a CSM module. This VI sends a synchronous `Data: Get Internal Data` command with the argument `` to retrieve the list of internal data names of the CSM module.
+
+-- Controls --
+- Target Module: Target CSM module.
+- Current Module ("" to Generate an ID): Current module. Empty string generates an ID.
+- Wait (5000ms): Wait time in milliseconds. The default is 5000 ms.
+
+-- Indicators --
+- Configurations: Configuration list.
diff --git a/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description/VI Description(en-us)/VI Description(en-us) - Addon INI-Variable.md b/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description/VI Description(en-us)/VI Description(en-us) - Addon INI-Variable.md
new file mode 100644
index 000000000..240657de0
--- /dev/null
+++ b/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description/VI Description(en-us)/VI Description(en-us) - Addon INI-Variable.md
@@ -0,0 +1,326 @@
+# CSM INI-Variable Addon
+
+> [!NOTE]
+> CSM INI-Variable Addon
+>
+> Configuration files are an essential component of application development. The CSM INI-Variable Addon provides simple and easy-to-use configuration file support for CSM, allowing users to configure applications without explicitly reading or writing configuration files.
+>
+> CSM INI-Variable configuration file data uses the CSM API String format.
+>
+> The following are key features:
+> 1. Default Configuration Handling: Automatically loads the default configuration file upon the first library function call, eliminating the need for explicit user loading.
+> 2. Multi-File Support: Supports loading multiple configuration files via specialized functions.
+> 3. Memory Caching: Maintains a cached copy in memory. Applications retrieve configuration information from this cache.
+> 4. INI Format Compatibility: Both configuration files and the memory copy use the standard INI format, supporting sections and key-value pairs.
+> 5. Efficient Caching Mechanism: Optimizes performance using a global modification flag, re-reading the memory copy only when the configuration has been modified.
+>
+> This library includes and utilizes a copy of [LabVIEW-Config](https://github.com/rcpacini/LabVIEW-Config) developed by [@rcpacini](https://github.com/rcpacini).
+
+> [!NOTE]
+> CSM INI-Variable Format
+>
+> Format Definition: `${section.variable:defaultValue}`
+> - `${}`: Variable reference syntax.
+> - `section` (Optional): The section name in the configuration file.
+> - `variable`: The variable name in the configuration file.
+> - `defaultValue` (Optional): The default value used when the variable does not exist.
+>
+> Notes:
+> - Supports nested variable references. For example, `${section1.variable1:${section2.variable2:defaultValue2}}`.
+> - The `section` parameter is optional. If omitted, the default configuration section `SectionName=LabVIEW` is used.
+> - The default value is optional. If unspecified, it defaults to an empty string ("").
+
+> [!NOTE]
+> CSM INI-Variable Configuration File Path
+>
+> - Development State: The first INI configuration file found in the Application Directory. If no configuration file exists, it defaults to `csm-app.ini`.
+> - Post-Compilation: An INI configuration file in the same directory as the executable file, with the same name as the executable. LabVIEW automatically generates this file after compilation.
+> - Supports loading multiple configuration files. Configuration items in files loaded later will overwrite identical items in previously loaded files.
+> - Configuration files can use the `[__include]` section to reference other configuration files.
+> - Supports both relative and absolute paths.
+> - Relative paths are relative to the path of the current configuration file.
+> - The name of the configuration file in the `[__include]` section is not critical, as long as the path is correct.
+> - To avoid circular references, the same configuration file will be automatically ignored if loaded a second time.
+
+> [!NOTE]
+> CSM INI-Variable Multi-File Configuration Scenario
+>
+> - When loading multiple files, configuration items in files loaded later will overwrite identical items in previously loaded files.
+> - When saving cache changes to a file, modifications are saved to the configuration file loaded last.
+
+> [!WARNING] CSM INI-Variable Caching Mechanism Warning
+>
+> Note that since this library uses a global cache modification flag, frequent configuration changes will reduce the effectiveness of the caching mechanism in reading VIs. Therefore, this library is not recommended for scenarios requiring frequent configuration modifications.
+
+## Core Function VIs
+
+### CSM - Populate Configuration Variables.vi
+Populates configuration variables within a string.
+
+Application Scenario: Using INI-Variable variables directly in CSM scripts or serving as arguments for CSM messages.
+
+Reference Example: `1. Used as parameters parsed by CSM.vi`.
+
+> - Ref: CSM INI-Variable Addon
+> - Ref: CSM INI-Variable Format
+> - Ref: CSM INI-Variable Configuration File Path
+
+-- Controls --
+- Section Name ("" as Default): Section name. An empty string indicates the default section.
+- String with INI-Variable: Input string containing variable references.
+
+-- Indicators --
+- String: Output string with populated variables.
+
+### CSM - Read Configuration Variable.vim
+Reads a variable value from the configuration based on a prototype.
+- It is recommended to use a cluster as the configuration prototype, where element names in the cluster correspond to variable names in the INI configuration file.
+- If using other data types, the corresponding variable name is `Config`.
+- If the variable corresponding to the prototype does not exist in the configuration, the Write If not found? parameter determines whether to write the default value.
+
+Application Scenario: Reading configuration directly from an INI configuration file into LabVIEW data.
+
+Reference Example: `2. Load the corresponding configuration by providing the prototype.vi`.
+
+> - Ref: CSM INI-Variable Configuration File Path
+
+-- Controls --
+- Configuration Prototype (Cluster Preferred): Configuration prototype (Cluster is preferred).
+- Section Name ("" as Default): Section name. An empty string indicates the default section.
+- Write If not found? (F): Whether to write the default value if the variable is not found. The default is FALSE.
+
+-- Indicators --
+- Configuration: Output configuration value.
+
+### CSM - Read Cluster Elements From Session.vim
+Reads cluster data from the configuration. The data is stored in the specified section, and element names in the cluster correspond to keys in the section.
+- If the specified section does not exist, the default section is used.
+- If a key corresponding to a cluster element does not exist, the value from the input prototype is used as the default value.
+
+Application Scenario: Reading configuration directly from an INI configuration file into LabVIEW data.
+
+Reference Example: `2. Load the corresponding configuration by providing the prototype.vi`.
+
+> - Ref: CSM INI-Variable Configuration File Path
+
+-- Controls --
+- Cluster: Cluster prototype.
+- Section Name ("" as Default): Section name. An empty string indicates the default section.
+
+-- Indicators --
+- Cluster out: Output cluster.
+
+### CSM - Read Cluster Elements From Key.vim
+Reads cluster data from the configuration. The data is stored in a specified key within a specified section, and the data is saved in API String format.
+
+Application Scenario: Reading configuration directly from an INI configuration file into LabVIEW data.
+
+Reference Example: `2. Load the corresponding configuration by providing the prototype.vi`.
+
+> - Ref: CSM INI-Variable Configuration File Path
+
+-- Controls --
+- Cluster: Cluster prototype.
+- Key: Key name.
+- Section Name ("" as Default): Section name. An empty string indicates the default section.
+
+-- Indicators --
+- Cluster out: Output cluster.
+- Key Found?: Whether the key exists.
+
+### CSM - Write Configuration Variable.vim
+Writes a configuration variable.
+- It is recommended to use a cluster as the configuration prototype, where element names in the cluster correspond to variable names in the INI configuration file.
+- If using other data types, the corresponding variable name is `Config`.
+
+Reference Example: `7. Write and Read Configuration.vi`.
+
+> - Ref: CSM INI-Variable Configuration File Path
+> - Ref: CSM INI-Variable Caching Mechanism Warning
+
+-- Controls --
+- Configuration: Configuration data to be written.
+- Section Name ("" as Default): Section name. An empty string indicates the default section.
+
+-- Indicators --
+- Configuration (dup): A copy of the written configuration data.
+
+### Convert API String to Cluster(Default in Session).vim
+Converts an API String to a cluster. The data is stored in the specified section, and element names in the cluster correspond to keys in the section. This VI follows a defined priority hierarchy: CSM API Parameters > Configuration File Parameters > Default Constant Parameters. This makes it simple to fix serial port initialization parameters in a configuration file.
+
+- During initialization, explicitly sent parameters have the highest priority.
+- If no parameters are sent, parameters from the configuration file are used.
+- In the absence of configuration file parameters, default constant parameters are applied.
+
+Application Scenario: Used to save CSM parameters into a configuration file.
+
+Reference Example: `3. In CSM API parameters.vi`.
+
+-- Controls --
+- API String: Input API String.
+- Section Name ("" as Default): Section name. An empty string indicates the default section.
+- Type: Data type.
+
+-- Indicators --
+- Data: Converted data.
+- error: Error information.
+
+### Convert API String to Cluster(Default in Key).vim
+Converts an API String to a cluster. The data is stored in a specified key within a specified section. This VI follows a defined priority hierarchy: CSM API Parameters > Configuration File Parameters > Default Constant Parameters. This makes it simple to fix serial port initialization parameters in a configuration file.
+
+- During initialization, explicitly sent parameters have the highest priority.
+- If no parameters are sent, parameters from the configuration file are used.
+- In the absence of configuration file parameters, default constant parameters are applied.
+
+Application Scenario: Used to save CSM parameters into a configuration file.
+
+Reference Example: `3. In CSM API parameters.vi`.
+
+-- Controls --
+- API String: Input API String.
+- Section Name ("" as Default): Section name. An empty string indicates the default section.
+- Type: Data type.
+- Variable Name: Variable name.
+
+-- Indicators --
+- Data: Converted data.
+- error: Error information.
+
+## Raw Configuration Read and Write
+
+### CSM - Read All Variable Names.vi
+Reads all variable names currently in memory.
+
+-- Controls --
+- Permanent Variables Only? (F): Whether to read only permanent variables.
+
+-- Indicators --
+- All Variable Names: Array of variable names.
+
+### CSM - Read Sections.vi
+Reads all section names currently in memory.
+
+-- Indicators --
+- Sections: Array of section names.
+
+### CSM - Read Key Names.vi
+Reads all key names in a specified section.
+
+-- Controls --
+- Section Name ("" as Default): Section name. An empty string indicates the default section.
+
+-- Indicators --
+- Keys: Array of key names.
+
+### CSM - Read INI String.vi
+Reads the configuration information string. This VI retrieves the raw string description without replacing INI variable references.
+
+Application Scenario: Need to read raw configuration information instead of configuration information after replacing internal variable references.
+
+Reference Example: `6. Read Nested Variables.vi`.
+
+-- Controls --
+- Section Name ("" as Default): Section name. An empty string indicates the default section.
+- Key: Input string containing variable references.
+- Default Value: Default value.
+- Write If not found? (F): Whether to write the default value if not found.
+
+-- Indicators --
+- Value: Output string after replacing variables.
+- Key Found?: Whether the key exists.
+
+### CSM - Write INI String.vi
+Writes configuration information string.
+
+Reference Example: `6. Read Nested Variables.vi`.
+
+> - Ref: CSM INI-Variable Caching Mechanism Warning
+
+-- Controls --
+- Section Name ("" as Default): Section name. An empty string indicates the default section.
+- Key: Key name.
+- Value: Variable value string.
+
+-- Indicators --
+- Key Replace?: Whether the key was replaced.
+
+## Multi-File Support and Configuration Management
+
+### CSM - Configuration File Path.vi
+Returns the paths of all loaded configuration files.
+
+Reference Example: `5. import Config.ini with __include section.vi`.
+
+> - Ref: CSM INI-Variable Configuration File Path
+
+-- Controls --
+- Include All Paths?(F): Whether to include all configuration file paths.
+
+-- Indicators --
+- Default Config File Path: Default configuration file path.
+- All Config Files: List of all configuration files.
+
+### CSM - Load Configuration Variables From File.vi
+Loads configuration variables from a specified file. If the section name postfix is not empty, the loaded section names will have this postfix appended.
+
+Section Postfix ("") is primarily used when loading multiple configuration files that have identical sections. For example, two configuration files `Hardware1.ini` and `Hardware2.ini` both have a section named `Serial` with identical internal keys indicating serial port configuration. In this case, the configuration in the file loaded later would overwrite the configuration in the file loaded earlier. Using Section Postfix ("") prevents section name conflicts.
+
+Reference Example: `5. import Config.ini with __include section.vi`.
+
+> - Ref: CSM INI-Variable Configuration File Path
+
+-- Controls --
+- Configuration Path: Configuration file path.
+- Section Postfix (""): Section name postfix.
+
+### CSM - Unload Configuration Variable File.vi
+Unloads a configuration variable file.
+
+> - Ref: CSM INI-Variable Configuration File Path
+
+-- Controls --
+- Path: Configuration file path.
+
+### CSM - Mark All Temp Variables as Permanent.vi
+Marks all temporary variables as permanent variables and stores the variables into the specified configuration file.
+
+Note: Although marked as permanent variables, these variables will still not be synchronized to the file if CSM - Sync Configuration Variables to File VI is not used.
+
+> - Ref: CSM INI-Variable Configuration File Path
+
+-- Controls --
+- Path ("" to Use Default File): Configuration file path. An empty string indicates the default INI file.
+
+### CSM - Sync Configuration Variables to File.vi
+Synchronizes variables in memory to the specified configuration file.
+
+Note: Only permanent variables are synchronized to the file. If you want to write temporary variables to the file, you need to mark the temporary variables as permanent in advance.
+
+> - Ref: CSM INI-Variable Configuration File Path
+
+-- Controls --
+- All Temp Variable to Default Ini(F): Whether to synchronize all temporary variables to the default INI file.
+- Write UnSupported Datatype?(F): Whether to write unsupported data types.
+
+### CSM - Restore Variable Value.vi
+Restores variable values. Refreshes all permanent variables to the configuration values loaded initially. Temporary variables are not be modified.
+
+> - Ref: CSM INI-Variable Configuration File Path
+
+### CSM - Reset to Default.vi
+Resets the configuration to default values. All variables will be cleared, and all configurations will be reloaded from the currently loaded configuration files.
+
+> - Ref: CSM INI-Variable Configuration File Path
+
+## Utility VIs
+
+### CSM - Read Log Filter Rules from INI Strings.vi
+Reads log filter rules from the configuration. This configuration is primarily used with the following VIs:
+
+- `CSM - Set Log Filter Rules.vi`
+- `addons\Logger\CSM - Start File Logger.vi`
+
+### CSM - Read File Logger Configuration from INI String.vi
+Reads log recording configuration from the configuration. This configuration is primarily used with the following VI:
+
+- `addons\Logger\CSM - Start File Logger.vi`
diff --git a/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description/VI Description(en-us)/VI Description(en-us) - Addon Massdata.md b/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description/VI Description(en-us)/VI Description(en-us) - Addon Massdata.md
new file mode 100644
index 000000000..950f92f11
--- /dev/null
+++ b/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description/VI Description(en-us)/VI Description(en-us) - Addon Massdata.md
@@ -0,0 +1,92 @@
+# CSM Massdata Addon
+
+## Overview
+
+> [!NOTE]
+> CSM Massdata Argument Support
+>
+> CSM Massdata argument support provides an efficient argument passing mechanism for transferring large amounts of data within CSM. By using a memory-efficient reference mechanism instead of direct data transfer, CSM Massdata improves the efficiency and performance of argument passing.
+> - The argument type defined by CSM Massdata is ``, which can be obtained using the CSM - Argument Type VI.
+> - Data transmission of CSM Massdata is completely lossless. However, it is not suitable for storing data that requires indefinite persistence.
+>
+> Note: CSM Massdata internally uses a circular buffer mechanism. All CSM modules within the same application share the same Massdata buffer space. When the buffer is full, new data will overwrite old data starting from the beginning. Therefore, you need to set a reasonable buffer size to ensure that data is not overwritten before use, avoiding data loss.
+
+> [!NOTE]
+> CSM Massdata Argument Format
+>
+> A typical Massdata data format is: `Start:8057;Size:4004;DataType:1D I32`.
+>
+> where:
+> - `Start`: The starting address of the data in memory.
+> - `Size`: The size of the data in bytes.
+> - `DataType(optional)`: The type of the data, defined by the CSM Data Type String VI.
+
+## CSM - Config MassData Parameter Cache Size.vi
+Configures the Massdata background cache size. The default value is 1 MB.
+
+It is recommended to configure an appropriate cache size that is not too large to avoid wasting memory and not too small to prevent frequent overwrites. You can use the provided debugging tools to monitor cache usage and determine the optimal configuration.
+
+> - Ref: CSM Massdata Argument Support
+
+-- Controls --
+- Size (1M): Cache size in bytes. The default is 1 MB.
+
+## CSM - Convert Argument to MassData.vim
+Converts a Massdata argument back to raw data.
+
+> - Ref: CSM Massdata Argument Format
+
+-- Controls --
+- MassData Argument: Input Massdata argument.
+- Type: Data type.
+
+-- Indicators --
+- Data: The restored raw data.
+
+## CSM - Convert MassData to Argument.vim
+Converts data into a Massdata argument. The Massdata argument obtained from this conversion does not contain data type information.
+
+> - Ref: CSM Massdata Argument Format
+
+-- Controls --
+- Data: Input data.
+
+-- Indicators --
+- MassData Argument: The converted Massdata argument.
+
+## CSM - Convert MassData to Argument With DataType.vim
+Converts data into a Massdata argument. The Massdata argument obtained from this conversion contains data type information.
+
+> - Ref: CSM Massdata Argument Format
+
+-- Controls --
+- Data: Input data.
+
+-- Indicators --
+- MassData Argument: The converted Massdata argument.
+
+## CSM - MassData Data Type String.vi
+Extracts the data type string from a Massdata argument.
+
+> - Ref: CSM Massdata Argument Format
+
+-- Controls --
+- MassData Argument: Input Massdata argument.
+
+-- Indicators --
+- MassData Argument(dup): A copy of the input Massdata argument.
+- Data Type String: The parsed data type string.
+
+## CSM - MassData Parameter Status.vi
+Reads the status information of the Massdata background cache.
+
+-- Indicators --
+- Active Read Operation: Information about the last read operation, including start address and length.
+- Active Write Operation: Information about the last write operation, including start address and length.
+- Cache Size: Background cache size in bytes.
+
+## CSM - MassData Update Status Indicator.vi
+Helper VI to update the specified Massdata cache display control on the UI based on the cache status, allowing for a more intuitive visualization of cache usage.
+
+-- Controls --
+- MassData Status Indicator: Reference to the Massdata cache display control.
diff --git a/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description/VI Description(en-us)/VI Description(en-us).md b/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description/VI Description(en-us)/VI Description(en-us).md
new file mode 100644
index 000000000..2914a98f9
--- /dev/null
+++ b/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description/VI Description(en-us)/VI Description(en-us).md
@@ -0,0 +1,201 @@
+# CSM API
+
+- [01. Templates](./VI%20Description(zh-cn)%20-%2001.%20Templates.md)
+- [02. Core Functions](./VI%20Description(zh-cn)%20-%2002.%20Core%20Functions.md)
+- [03. Arguments](./VI%20Description(zh-cn)%20-%2003.%20Arguments.md)
+- [04. Management API](./VI%20Description(zh-cn)%20-%2004.%20Management%20API.md)
+- [05. Module Operation API](./VI%20Description(zh-cn)%20-%2005.%20Module%20Operation%20API.md)
+- [06. Status Registration](./VI%20Description(zh-cn)%20-%2006.%20Status%20Registration.md)
+- [07. Global Log](./VI%20Description(zh-cn)%20-%2007.%20Global%20Log.md)
+- [08. Advanced Modes](./VI%20Description(zh-cn)%20-%2008.%20Advanced%20Modes.md)
+- [09. Built-in Addons](./VI%20Description(zh-cn)%20-%2009.%20Build-in%20Addons.md)
+- [10. Utility VIs](./VI%20Description(zh-cn)%20-%2010.%20Utility%20VIs.md)
+- [11. CSM-Helper API](./VI%20Description(zh-cn)%20-%2011.%20CSM-Helper%20API.md)
+- [12. Debug, Doc, Tools](./VI%20Description(zh-cn)%20-%2012.%20Debug,Doc,Tools.md)
+- [13. Internal](./VI%20Description(zh-cn)%20-%2013.%20Internal.md)
+
+> [!NOTE]
+> CSM Inter-module Communication Types
+>
+> Communication between CSM modules is divided into two categories: Messages and Broadcasts.
+> - Messages: 1:1 communication between modules. Based on the message handling method, it can be further divided into Synchronous Call (`-@`), Asynchronous Call (`->`), and Asynchronous Call without Reply (`->|`).
+> - Broadcasts: 1:N communication between modules. The broadcasting module pushes the broadcast to all modules registered to that broadcast. Based on the broadcast processing priority, it can be further divided into Status Broadcast and Interrupt Broadcast.
+
+> [!NOTE]
+> CSM Module External Interfaces
+>
+> Modules written based on the CSM framework have good reusability. You only need to understand the following interface information to use CSM modules without knowing the specific implementation.
+> - Message: Externally callable message names, argument information, and return information.
+> - Broadcast: Externally callable broadcast names and argument information.
+> - Attribute: Attribute names usable by the module and attribute data types (LabVIEW data types).
+
+> [!NOTE]
+> CSM Message Types
+>
+> CSM messages are divided into three categories: Synchronous Call (`-@`), Asynchronous Call (`->`), and Asynchronous Call without Reply (`->|`).
+> - Synchronous Call (`-@`): The module waits for the target module to return a result before continuing to execute subsequent code.
+> - Asynchronous Call (`->`): The module immediately continues to execute subsequent code without waiting for the target module to return a result.
+> - Asynchronous Call without Reply (`->|`): The module immediately continues to execute subsequent code without waiting for the target module to return a result. Unlike Asynchronous Call (`->`), Asynchronous Call without Reply (`->|`) will not wait for the target module to return a result, nor will it throw an error.
+
+> [!NOTE]
+> CSM Message Format Parsing
+>
+> [CSM Message] >> [Arguments] [Message Symbol ->|,->,-@] [Target Module] // [Comments]
+>
+> - CSM Message: The CSM message. It cannot contain CSM keywords or line breaks.
+> - `>>`: Separator between the CSM Message and Arguments.
+> - Arguments: Arguments for the CSM message. It cannot contain CSM keywords or line breaks.
+> - Message Symbol: Symbol identifying the message type, including Synchronous Call (`-@`), Asynchronous Call (`->`), Asynchronous Call without Reply (`->|`).
+> - Target Module: The target module to which the message is sent. If empty, it indicates the message will be processed by the current module. When empty, the Message Symbol also cannot exist.
+> - Comments: Comment information, which will not be parsed.
+
+> [!NOTE]
+> CSM Message Target Module Description
+>
+> In Normal Mode, the target module for a CSM message is the specified module name.
+> System-level modules start with a `.` in their name. The target module for a CSM message includes the `.` in the name. For example, if the requested module name is `.System`, the target module for the CSM message is `.System`.
+> In Worker Mode, the target module for a CSM message can only be the overall module name, not the node name. For example, if the requested module name is `Worker#`, the target module for the CSM message is `Worker`.
+> In Chain of Responsibility Mode, the target module for a CSM message can only be the overall module name, not the node name. For example, if the requested module name is `Chain$1`, the target module for the CSM message is `Chain`.
+
+> [!NOTE]
+> Synchronous Message
+>
+> A synchronous message is a type of message. After a CSM sends a synchronous message, it pauses state transitions and waits for the callee to complete message processing. Synchronous messages are described via `-@`. A call from one JKISM module to another via a synchronous message is called a synchronous call.
+>
+> Errors occurring at the Caller:
+> - If the input target module is `""`, a `NO Target Error` is generated.
+> - If the input module does not exist, a `Target Error` is generated.
+> - If the input module exists but does not complete processing within the specified time, a `Timeout Error` is generated.
+>
+> Caller waits for return:
+> - If the caller is a CSM module, it stays in the Parse State the Queue++ VI.
+> - If it is an API call, it stays in the calling VI, such as the CSM - Send Message and Wait for Reply VI.
+>
+> Return:
+> - If the caller is a CSM module:
+> - Normally, it enters the `Response` state to handle the return.
+> - If an error occurs at the caller, it causes the CSM state machine to enter the `Error Handler` module to handle the error.
+> - If an error occurs at the callee, this information is still the result of the message. It is handled in the `Response` state and can be obtained from Additional Information.
+> - If it is an API call:
+> - The Response output is the return.
+> - Errors occurring at both the caller and callee are merged into the error cluster output.
+
+> [!NOTE]
+> CSM Synchronous Message Global Timeout
+>
+> - When performing CSM inter-module communication or using the VI that sends synchronous messages, the default timeout is -2, which uses the globally configured timeout.
+> - The global timeout can be set to other positive values using the CSM - Set TMO of Sync-Reply VI to override the global setting.
+> - The global timeout only applies to synchronous calls. Asynchronous calls are unaffected.
+
+> [!NOTE]
+> Asynchronous Message
+>
+> An asynchronous message is a type of message. After a CSM sends an asynchronous message, it immediately continues to execute subsequent code without waiting for the callee to complete message processing. Asynchronous messages are divided into Asynchronous Call (`->`) and Asynchronous Call without Reply (`->|`). The only difference is that with an Asynchronous Call without Reply (`->|`), the callee will not return the result to the caller after completing the operation.
+>
+> Errors occurring at the Caller:
+> - If the input target module is `""`, a `NO Target Error` is generated.
+> - If the input module does not exist, a `Target Error` is generated.
+>
+> Caller does not wait for return:
+> - If the caller is a CSM module, it enters the `Async Message Posted` state after sending the message in the Parse State Queue++ VI.
+> - If it is an API call, it continues to execute subsequent code. The API can only send Asynchronous without Reply messages.
+>
+> Return:
+> - If the caller is a CSM module:
+> - Normally, it enters the `Async Response` state to handle the return. If an error occurs at the callee, this information is still the result of the message. It is handled in the `Async Response` state, and this error information can be obtained from Additional Information.
+> - If an error occurs at the caller, it causes the CSM state machine to enter the `Error Handler` module to handle the error.
+> - There is no return if the API can only send Asynchronous without Reply messages.
+
+> [!NOTE]
+> CSM Operation Message Format Parsing
+>
+> CSM defines operations required by the system, such as sending broadcasts, registering to broadcasts, and unregistering. Based on this definition, you can extend system functionality.
+>
+> // [CSM Operation] >> [Arguments] -> <[Operation]> // [Comments]
+> Example:
+> // Send Status Broadcast "TCP Connected" with argument "192.168.1.100"
+> TCP Connected >> 192.168.1.100 ->
+> // Register the "TCP Connected" signal of the TCP module to the "UpdateLED" interface of the UI module
+> TCP Connected@TCPModule >> UpdateLED@UI ->
+
+> [!NOTE]
+> CSM Broadcast
+>
+> Broadcasts in CSM are divided into three types: Status Broadcast, Interrupt Broadcast, and State Broadcast. The module pushes the Status Broadcast to all modules registered to that Status Broadcast. Status Broadcast and Interrupt Broadcast are explicitly called broadcasts, while State Broadcast is an implicit broadcast. When a registration relationship exists, the State Broadcast is automatically triggered when the CSM completes a certain state.
+> - Status Broadcast: Normal priority broadcast. Similar to asynchronous messages, it is passed via the low-priority queue. It is processed sequentially when other unprocessed asynchronous messages or Status Broadcasts exist in the module.
+> - Interrupt Broadcast: High priority broadcast. Similar to synchronous messages, it is passed via the high-priority queue. It is processed first when other low-priority asynchronous messages or Status Broadcasts exist in the module. However, if other unprocessed synchronous messages or Interrupt Broadcasts exist, it is processed sequentially.
+> - State Broadcast: State Broadcast is an implicit broadcast. When a registration relationship exists, the State Broadcast is automatically triggered when the CSM completes a certain state. The argument for the State Broadcast is the Response of the CSM state.
+> Note:
+> - Status broadcasts or interrupt broadcasts must be explicitly sent. Do not use names identical to CSM state names. Otherwise, multiple triggers may occur.
+> - For efficiency considerations, state broadcasts are only sent when registered to. This means you must register to receive state broadcasts in a module's broadcast events.
+
+> [!NOTE]
+> CSM Broadcast Format Parsing
+>
+> [CSM Broadcast String] >> [Arguments] -> // [Comments]
+> [CSM Status Broadcast String] >> [Arguments] -> // [Comments]
+> [CSM Interrupt Broadcast String] >> [Arguments] -> // [Comments]
+>
+> - CSM Broadcast String: CSM broadcast. It cannot contain CSM keywords or line breaks.
+> - `>>`: Separator between the CSM Broadcast String and Arguments.
+> - Arguments: Arguments for the CSM broadcast. It cannot contain CSM keywords or line breaks.
+> - Broadcast Type: `` and `` are Status Broadcasts; `` is Interrupt Broadcast.
+> - Comments: Comment information, which will not be parsed.
+
+> [!NOTE]
+> CSM Broadcast Priority
+>
+>Broadcasts have priorities. State broadcast is a special type of broadcast. By default, the priority of state broadcasts is the same as the priority of status broadcasts. Interrupt broadcasts are high-priority broadcasts and are passed using the high-priority queue, just like synchronous messages. Status broadcasts are low-priority broadcasts and are passed using the low-priority queue, just like asynchronous messages.
+>
+> // The default broadcast is a Status Broadcast, for example:
+> ModuleInternalChange >> Arguments -> // Low Priority
+> ModuleInternalChange >> Arguments -> // Low Priority
+>
+> The default priority is defined by the sender via the broadcast type in the broadcast format.
+>
+> // The sender can define the priority of the broadcast
+> ModuleInternalChange >> Arguments -> // Low Priority
+> ModuleInternalChange >> Arguments -> // High Priority
+>
+> Default registrations do not change the priority, but the priority of the registered broadcast can be changed via special registration formats.
+>
+> // Default registration does not change priority
+> ModuleInternalChange@SourceModule >> API@TargetModule ->
+> // Change the registered broadcast to Normal priority, regardless of its original priority
+> ModuleInternalChange@SourceModule >> API@TargetModule ->
+> // Change the registered broadcast to High priority, regardless of its original priority
+> ModuleInternalChange@SourceModule >> API@TargetModule ->
+
+> [!NOTE]
+> CSM Registration
+>
+> Registration associates a broadcast with a bound interface (API). When the broadcast is triggered, the bound interface (API) is called. Registrations can also be cancelled. In CSM, there are two types of broadcasts:
+>
+> - Broadcast: Broadcast explicitly called by the module sending the broadcast message. Arguments need to be explicitly provided.
+> - State: Any state of a CSM module can also be registered to. The argument received by the triggered API is the Response of the CSM state.
+>
+> // Register
+> [Broadcast Message Name]@[SourceModule] >> [Bound API]@[TargetModule] -> // [Comments]
+> // Unregister
+> [Broadcast Message Name]@[SourceModule] >> [Bound API]@[TargetModule] -> // [Comments]
+>
+> - Broadcast Message Name: Defined by the source module. Refer to "CSM Broadcast Format Parsing" for details.
+> - Source Module: The broadcasting module. If registering to broadcasts from any module, the source module can be represented by `*`.
+> - Bound API: Defined by the target module. It is the external interface of the target module.
+> - Target Module: The module where the bound API resides. When indicating registration to the current module within a CSM module, it can be ignored. The preceding `@` separator is also omitted.
+> - `` / ``: Definition of the Register/Unregister operation type.
+> - Comments: Comment information, which will not be parsed.
+
+> [!NOTE]
+> CSM Registration Location
+>
+> There are two types of registration rules added by CSM registrations: Internal Addition and External Addition.
+> - External Addition: Rules added externally are global rules. They will not be automatically deleted when the CSM module exits and must be manually unregistered.
+> - Rules added using the `-` statement are considered externally added if the module name where the API resides is specified.
+> - All rules added using the API CSM - Register Broadcast VI are considered externally added.
+> - Internal Addition: Rules added internally within a CSM module will be automatically deleted when the CSM module exits, so there is no need to manually unregister.
+> - Rules are considered internally added only when added using the `-` statement and the API does not specify a module name.
+>
+> // Example:
+> status@sourceModule >> API@TargetModule -> // Externally added
+> status@sourceModule >> API -> // Internally added
diff --git a/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description/VI Description(zh-cn)/VI Description(zh-cn) - 01. Templates.md b/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description/VI Description(zh-cn)/VI Description(zh-cn) - 01. Templates.md
new file mode 100644
index 000000000..bcdee0333
--- /dev/null
+++ b/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description/VI Description(zh-cn)/VI Description(zh-cn) - 01. Templates.md
@@ -0,0 +1,162 @@
+# CSM API
+
+## 模板
+
+> [!NOTE]
+> CSM名称规则
+>
+> - CSM模块名称必须唯一,否则将导致CSM进入`Critical Error`状态。
+> - 若输入为空字符串(""),系统将使用UUID作为模块名称。该模块会被标记为独立模式,不会包含在模块列表中。
+> - 协作者模式规则:若输入以`#`结尾,则会实例化一个协作者模式节点,多个节点可共同组成一个协作者模式模块。
+> - 责任链模式规则:若输入以`$`加数字结尾,则会实例化一个责任链模式节点,多个节点可共同组成一个责任链模式模块。
+> - 系统级模块规则:若输入以`.`开头,则该模块为系统级模块。在默认参数下,此类模块不会被CSM - List Modules VI列出,适用于实例化后台运行的模块。
+> - 子模块规则:`.`也允许出现在名称之中,将模块名称分为多个部分,每个部分之间用`.`分隔。CSM中并没有严格意义上的子模块,仅通过模块名称中的`.`来标记不同模块的逻辑关系,从实际运行角度来看认为是独立的模块。唯一区别在于可以通过CSM - List Submodules VI,获取逻辑上的子模块列表。
+
+> [!NOTE]
+> CSM初始化状态("Macro:Initialize")
+>
+> - 默认值与JKISM状态机保持一致,为`Macro:Initialize`。
+> - 该状态用于初始化CSM模块的状态机,CSM模块仅在完成该宏状态后,才会处理外部发送的消息。
+
+> [!NOTE]
+> CSM退出状态("Macro:Exit")
+>
+> - 默认值与JKISM状态机保持一致,为"Macro:Exit"。
+> - 该状态用于退出CSM模块的状态机,CSM模块进入该状态后,将不会再处理外部发送的消息。
+
+### CSM User Interface(UI) Module Template.vi
+用于创建带用户界面的CSM模块的模板,该模板包含用于响应用户操作的用户事件结构。
+
+> - Ref: CSM名称规则
+> - Ref: CSM初始化状态
+> - Ref: CSM退出状态
+
+-- 输入控件(Controls) --
+- Name ("" to use UUID):CSM模块名称。请参考CSM名称规则。
+
+### CSM Module Template.vi
+用于创建无用户界面的CSM模块的模板, 这个模板是最常使用的CSM模板,在模板中还包含了一个用于调试中退出模块的事件响应循环,请在模块调试完成后,将其删除。
+
+> - Ref: CSM名称规则
+> - Ref: CSM初始化状态
+> - Ref: CSM退出状态
+
+-- 输入控件(Controls) --
+- Name ("" to use UUID):CSM模块名称。请参考CSM名称规则。
+
+### CSM Module Template - Tiny.vi
+用于创建无用户界面的CSM模块的紧凑代码模板。该模板功能与CSM Module Template VI完全相同,区别仅在于代码更加紧凑。
+
+> - Ref: CSM名称规则
+> - Ref: CSM初始化状态
+> - Ref: CSM退出状态
+
+-- 输入控件(Controls) --
+- Name ("" to use UUID):CSM模块名称。请参考CSM名称规则。
+
+### CSM User Interface(UI) Module Template - Tiny.vi
+用于创建带用户界面的CSM模块的紧凑代码模板,该模板包含用于响应用户操作的用户事件结构。该模板功能与CSM User Interface(UI) Module Template VI完全相同,区别仅在于代码更加紧凑.
+
+> - Ref: CSM名称规则
+> - Ref: CSM初始化状态
+> - Ref: CSM退出状态
+
+-- 输入控件(Controls) --
+- Name ("" to use UUID):CSM模块名称。请参考CSM名称规则。
+
+### CSM DQMH-Style Template.vi
+用于创建一个DQMH风格的CSM模块模板,该结构将响应用户操作的用户事件结构外置在独立的循环中,主要用于处理一些复杂的用户操作场景。例如:
+- 用户界面操作非常复杂,需要组合逻辑完成协同工作,例如鼠标按下拖动并释放后触发某事件。
+- 用户界面需要响应会快速产生的事件,如鼠标移动、窗口大小调整等。这些事件中如果生成消息,会迅速产生多条重复消息。
+
+用户操作的用户事件结构循环通过CSM - Flood of Events Handler Side Loop VI模板创建。用户也可以通过组合CSM - Flood of Events Handler Side Loop VI与CSM Module Template VI来创建完整的DQMH风格的CSM模块模板。
+
+参考范例:`[CSM-Example]\4. Advance Examples\CSMLS - Continuous Loop in CSM Example.vi`。
+
+> - Ref: CSM名称规则
+> - Ref: CSM初始化状态
+> - Ref: CSM退出状态
+
+-- 输入控件(Controls) --
+- Name ("" to use UUID):CSM模块名称。请参考CSM名称规则。
+
+### 其他代码片段
+
+#### CSM - Start Async Call.vi
+异步启动CSM模块的代码片段。拖至程序框图后,请将VI静态引用改为目标CSM模块。
+
+参考范例:`[CSM-Example]\3. Caller is Other Framework Scenario\CSM Example - Caller is NOT a CSM.vi`。
+
+#### CSM - Synchronized Call.vi
+同步调用CSM模块的代码片段。实质上是把CSM模块当作子VI直接调用。
+
+参考范例:`[CSM-Example]\2. Caller is CSM Scenario\CSM Example - Caller is a CSM.vi`。
+
+#### CSM - Flood of Events Handler Side Loop.vi
+该模板是DQMH风格的CSM模块的用户事件结构循环模板,主要用于处理用户界面操作非常复杂,需要组合逻辑完成协同工作的场景。
+
+参考范例:`[CSM-Example]\4. Advance Examples\CSMLS - Continuous Loop in CSM Example.vi`。
+
+#### CSM - Global Log Queue Monitoring Loop.vi
+此模板用于创建一个全局日志队列监控循环,用于查询监控全局日志队列中的消息。
+
+参考范例:`[CSM-Example]\4. Advance Examples\2. Chain of Responsibility Example\Chain of Responsibility Example.vi`。
+
+#### CSM - Global Log Event Monitoring Loop.vi
+此模板用于创建一个全局日志事件监控循环,用于查询监控全局日志队列中的消息。
+
+参考范例:`[CSM-Example]\4. Advance Examples\4. Global Log Filter Example\`中的任一范例。
+
+### 模板支持
+
+#### CSM - Get New State Notifier Event.vi
+获取用户事件句柄,适用于包含事件结构的CSM模块。包含事件结构的CSM模块通常会在事件结构处等待,此事件用于在收到新消息时中断事件结构中的等待,使模块继续执行。
+
+-- 输入控件(Controls) --
+- Name ("" to use UUID):CSM模块名称。请参考CSM名称规则。
+
+-- 输出控件(Indicators) --
+- New State Notifier Event:用户事件句柄,用于在收到消息时中断CSM模块在事件结构中的等待。
+
+#### Timeout Selector.vi
+适用于包含用户事件结构的模板, 如果超时为-1时,Remaining States中依然还有剩余状态,那么超时值将被修改为0,以保证立刻跳出用户事件结构(user event structure),并继续处理剩余状态。
+
+-- 输入控件(Controls) --
+- Timeout Expected:预期的超时设置。
+- Remaining States:若还有剩余状态,则输出为0;否则输出为预期值。
+
+-- 输出控件(Indicators) --
+- Timeout:仲裁后使用的超时设置。
+
+#### 模板错误处理
+
+##### CSM Critical Error.vi
+生成CSM严重错误描述的错误簇。严重错误为CSM框架发生的严重错误消息,无法有用户代码处理回复,常见原因是模块名称重复。
+
+-- 输入控件(Controls) --
+- CSM Name:CSM模块名称。
+- Arguments (As Reason):错误原因。
+
+##### CSM No Target Error.vi
+生成CSM无目标消息错误描述的错误簇。无目标消息错误发生在CSM尝试发送一个消息,但目标模块名称为空字符串。
+
+##### CSM Target Error.vi
+生成CSM消息目标模块不存在的错误描述的错误簇。目标模块不存在错误发生在CSM尝试发送一个消息到一个不存在的目标模块时。
+
+-- 输入控件(Controls) --
+- Arguments (As CSM Name):连接参数,传递目标模块名称。
+
+##### CSM Target Timeout Error.vi
+生成CSM消息目标模块超时的错误描述的错误簇。目标模块超时错误发生在CSM尝试发送一个同步消息到一个目标模块,但在指定的超时时间内未收到回复时。
+
+-- 输入控件(Controls) --
+- Arguments (As CSM Name):连接参数,传递目标模块名称。
+
+##### CSM Unhandled State Error.vi
+生成 CSM 未处理状态的错误描述的错误簇。CSM未处理状态的错误可能的情况包括:
+- 内部消息轮转中使用了本模块未定义的状态时(与JKISM行为一致)。
+- 收到外部发送至本模块的消息未定义时。
+
+-- 输入控件(Controls) --
+- Undefined State:未定义的状态。
+- CSM Name:CSM模块名称。
diff --git a/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description/VI Description(zh-cn)/VI Description(zh-cn) - 02. Core Functions.md b/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description/VI Description(zh-cn)/VI Description(zh-cn) - 02. Core Functions.md
new file mode 100644
index 000000000..3acb0f5cd
--- /dev/null
+++ b/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description/VI Description(zh-cn)/VI Description(zh-cn) - 02. Core Functions.md
@@ -0,0 +1,388 @@
+# CSM API
+
+> [!NOTE]
+> 消息拼接API
+>
+> 该类型API不会直接发送消息,仅用于拼接消息字符串。需将字符串并入CSM的状态队列后,在Parse State Queue++ VI中发送消息并执行操作。在熟悉CSM规则的情况下,可不必使用此类API,直接在字符串中键入对应的消息字符串或操作字符串。
+
+> [!NOTE]
+> CSM 的状态队列操作API
+>
+> 该类型API不会直接发送消息,只是拼接消息字符串。在Parse State Queue++.vi中发送消息、执行操作。与消息拼接API不同的是,此类API会包含CSM的状态队列字符串输入,相当于在状态队列中插入消息。
+
+## 核心功能(Core Functions)
+
+### Parse State Queue++.vi
+解析CSM状态队列,返回将执行的下一个当前状态、参数等信息。
+
+> - Ref: CSM 模块间通信类型
+
+-- 输入控件(Controls) --
+- Response Arguments: 来自上一个状态的响应参数。它应该连接到 CSM的移位寄存器,用于传递外部调用的返回值。
+- Name ("" to use UUID): CSM模块名称。请参考CSM名称规则。
+- State Queue: 整个状态队列被连接到此输入。这应该来自CSM的移位寄存器。
+- Previous Error: 来自CSM的错误簇被连接到此输入。如果发生错误并出现在此输入上,则当前状态输出将返回`Error Handler`状态。
+- Dequeue (1 ms): 检查CSM消息队列的超时设置,默认为1 ms, 不设置为0是为了避免某些错误情况下产生海量的空消息。
+- Response Timeout (-2 Use Global Settings): 同步调用的超时时间,默认为-2,使用全局设置。您可以通过CSM - Set TMO of Sync-Reply VI设置全局超时时间。
+- Allowed Messages (Empty for All): 允许的消息名称列表,为空表示允许所有消息。
+
+-- 输出控件(Indicators) --
+- Name Used: 分配给该CSM模块的实际名称。
+- Remaining States: 拼接后的所有状态及参数。
+- Current State: 将执行的下一个当前状态。
+- Arguments: 返回可能在当前状态字符串中使用的任何参数,这些参数位于`>>`字符之后。注意: 参数变量不得包含任何不可打印的字符,如换行符或回车符。
+- Additional Information: 额外的补充信息。广播触发的状态中,该信息包含广播的名称、参数。
+- Source CSM: 如果Current State由外部发送,则这是源CSM模块名称。
+
+### Build State String with Arguments++.vi
+
+该VI用于构建CSM消息字符串(包含状态、参数、目标模块、消息类型等信息),以便发送到其他CSM模块。
+
+> [!WARNING]
+> 该VI不能拼接"异步不等待返回"的异步消息,已在函数面板中隐藏,建议使用Build Message with Arguments++ VI代替该 VI。
+
+> - Ref: CSM 消息类型
+> - Ref: CSM 消息格式解析
+
+ 例如:
+ 发送给本地状态机时,Target Module ("")应设为空
+ If State = A并且没有参数,那么State with Arguments = A
+ If State = A , Arguments = B那么 State with Arguments = A >> B
+
+ 在发送给其他CSM的情况下,假设Target Module ("")的名称为"Target"。
+
+ - 同步调用(发送消息后等待返回):
+ If State = A并且没有参数,那么State with Arguments = A -@target
+ If State = A , Arguments = B那么 State with Arguments = A >> B -@target
+
+ - 异步调用(发送消息后将进入"Async Message Posted"状态,当外部模块处理完毕后,本地模块将收到"Async Response"消息):
+ If State = A并且没有参数,那么State with Arguments = A ->target
+ If State = A , Arguments = B那么State with Arguments = A >> B ->target
+
+-- 输入控件(Controls) --
+- State: 状态或消息名称字符串。
+- Arguments (""): State的参数。
+- Target Module (""): 该消息发送的目标CSM模块名称。
+- Type: 消息类型,可选Async、Async Without Reply、Sync。
+
+-- 输出控件(Indicators) --
+- CSM Message String: 拼接生成的CSM消息字符串。
+
+### Build Message with Arguments++.vi
+该VI用于构建CSM消息字符串及操作字符串。
+
+> - Ref: CSM 消息拼接API
+
+> [!NOTE]
+> 多态VI(Polymorphic VI)选项
+>
+> - Build Message with Arguments(Auto Check).vi: 根据输入的消息符号,自动拼接消息字符串。
+> - Build Asynchronous Message with Arguments.vi: 拼接生成CSM异步消息字符串,消息类型符号为`->`。
+> - Build No-Reply Asynchronous Message with Arguments.vi: 拼接生成CSM异步不等待返回消息字符串,消息类型符号为`->|`。
+> - Build Synchronous Message with Arguments.vi: 拼接生成CSM同步消息字符串,消息类型符号为`-@`。
+> - Build Interrupt Broadcast Message: 拼接生成CSM中断广播字符串。
+> - Build Normal Broadcast Message.vi: 拼接生成CSM信号广播字符串。
+> - Build Register Message.vi: 拼接生成CSM注册状态操作字符串。
+> - Build Unregister Message.vi: 拼接生成CSM注销状态操作字符串。
+> - CSM - Replace Marks in Messages.vi: 替换消息字符串中的占位符。
+> - CSM - Replace Mark with String Array.vi: 将单条状态字符串中的标签替换为数组字符串,并合并成描述一组状态的符串。
+
+> - Ref: CSM 模块间通信类型
+
+#### Build Message with Arguments(Auto Check).vi
+拼接生成CSM消息字符串,消息的类型符号会根据输入的State with Arguments自动检测。
+
+> - Ref: 消息拼接API
+> - Ref: CSM消息的目标模块说明
+
+-- 输入控件(Controls) --
+- State with Arguments: CSM状态字符串,可包含参数和目标模块信息。
+- Arguments (""): 参数信息,State with Arguments中包含的参数将被替换。
+- Target Module (""): 目标模块,为空时将使用State with Arguments中的默认模块。
+
+-- 输出控件(Indicators) --
+- CSM Message String: 拼接生成的CSM消息字符串。
+
+#### Build Synchronous Message with Arguments.vi
+拼接生成CSM同步消息字符串,消息类型符号为`-@`,例如:
+
+ Message >> Arguments -@ Target
+
+> - Ref: 消息拼接API
+> - Ref: 同步消息
+> - Ref: CSM消息的目标模块说明
+
+-- 输入控件(Controls) --
+- State with Arguments: CSM状态字符串。
+- Arguments (""): 参数信息。State with Arguments中包含的参数会被替换。
+- Target Module (""): 目标模块。为空时,将使用State with Arguments中的默认模块。
+
+-- 输出控件(Indicators) --
+- CSM Message String: 拼接生成的CSM消息字符串。
+
+#### Build Asynchronous Message with Arguments.vi
+拼接生成CSM异步消息字符串,消息类型符号为`->`,例如:
+
+ Message >> Arguments -> Target
+
+> - Ref: 消息拼接API
+> - Ref: 异步消息
+> - Ref: CSM消息的目标模块说明
+
+-- 输入控件(Controls) --
+- State with Arguments: CSM状态字符串。
+- Arguments (""): 参数信息。State with Arguments中包含的参数会被替换。
+- Target Module (""): 目标模块。为空时,将使用State with Arguments中的默认模块。
+
+-- 输出控件(Indicators) --
+- CSM Message String: 拼接生成的CSM消息字符串。
+
+#### Build No-Reply Asynchronous Message with Arguments.vi
+拼接生成CSM异步无返回消息字符串,消息类型符号为`->|`,例如:
+
+ Message >> Arguments ->| Target
+
+> - Ref: 消息拼接API
+> - Ref: 异步消息
+> - Ref: CSM消息的目标模块说明
+
+-- 输入控件(Controls) --
+- State with Arguments: CSM状态字符串。
+- Arguments (""): 参数信息。State with Arguments中包含的参数会被替换。
+- Target Module (""): 目标模块。为空时,将使用State with Arguments中的默认模块。
+
+-- 输出控件(Indicators) --
+- CSM Message String: 拼接生成的CSM消息字符串。
+
+#### Build Status Broadcast Message.vi
+拼接普通状态消息字符串,消息格式如下:
+
+ Status >> Arguments ->
+ //以下字符串为等效操作,仅为了更容易键入记忆,定义了更多的操作字符。
+ Status >> Arguments ->
+ Status >> Arguments ->
+
+> - Ref: 消息拼接API
+
+-- 输入控件(Controls) --
+- State with Arguments: CSM普通状态消息字符串。
+- Arguments (""): 参数信息。State with Arguments中包含的参数,会被替换。
+
+-- 输出控件(Indicators) --
+- CSM Message String: 拼接生成的CSM消息字符串。
+
+#### Build Interrupt Broadcast Message.vi
+拼接中断状态消息,消息格式如下:
+
+ Status >> Arguments ->
+
+> - Ref: 消息拼接API
+
+-- 输入控件(Controls) --
+- State with Arguments: CSM中断状态消息字符串。
+- Arguments (""): 参数信息。State with Arguments中包含的参数会被替换。
+
+-- 输出控件(Indicators) --
+- CSM Message String: 拼接生成的CSM消息字符串。
+
+#### Build Register Message.vi
+拼接注册状态操作消息字符串,消息格式如下:
+
+ //[source-state]@[source-module] >> [response-message]@[response-module] ->
+ status @ Source >> API @ Target ->
+
+ 举例: 将下载器模块的下载完毕消息,绑定到播放器模块的开始播放API
+
+ //下载器模块的下载完毕消息,绑定到播放器模块的开始播放API
+ DownloadFinished@Downloader >> StartPlay@Player ->
+ //当播放器模块中执行消息时,Player 可缺省
+ DownloadFinished@Downloader >> StartPlay ->
+ //当多个模块都有下载完毕消息时,可以使用*表示将所有模块的该消息都绑定到播放器模块的开始播放API
+ DownloadFinished@* >> StartPlay@Player ->
+
+> - Ref: 消息拼接API
+> - Ref: CSM订阅
+> - Ref: CSM订阅位置
+> - Ref: CSM广播优先级
+
+-- 输入控件(Controls) --
+- Target CSM: 订阅状态的CSM模块名称。
+- Source CSM (* as Default): 发出状态的CSM模块名称。
+- Status: 注册的状态。
+- API (If "", Same As "Status"): 订阅状态模块响应的API名称。
+- Priority (No Change): 订阅后的广播优先级。
+
+-- 输出控件(Indicators) --
+- CSM Message String: 拼接生成的CSM消息字符串。
+
+#### Build Unregister Message.vi
+拼接取消注册状态操作消息字符串,消息格式如下:
+
+ //[source-state]@[source-module] >> [response-message]@[response-module] ->
+ status @ Source >> API @ Target ->
+
+ 举例: 取消下载器模块的下载完毕消息,绑定到播放器模块的开始播放API
+
+ //下载器模块的下载完毕消息,绑定到播放器模块的开始播放API
+ DownloadFinished@Downloader >> StartPlay@Player ->
+ //当播放器模块中执行消息时,Player 可缺省
+ DownloadFinished@Downloader >> StartPlay ->
+
+- 协作者模式(Worker Mode)下:模块的内部订阅规则,只会在全部节点退出后才会自动取消订阅。
+- 责任链模式(Chain Mode)下:模块的内部订阅规则,节点的内部订阅规则,会随着节点的退出而自动取消订阅。
+
+> - Ref: 消息拼接API
+> - Ref: CSM订阅
+> - Ref: CSM订阅位置
+
+-- 输入控件(Controls) --
+- Target CSM: 订阅状态的CSM模块名称。
+- Source CSM (* as Default): 发出状态的CSM模块名称。
+- Status: 注册的状态。
+- API (If "", Same As "Status"): 取消订阅状态模块响应的API名称。
+
+-- 输出控件(Indicators) --
+- CSM Message String: 拼接生成的CSM消息字符串。
+
+#### CSM - Replace Marks in Messages.vi
+该VI主要为了能够便捷地编辑多条CSM消息字符串,提供批量替换标记的功能。有4个标记可以替换:
+
+- 标记: 通常表示相同的参数
+- 标记: 通常表示相同的目标
+- <1> 标记: 表示自定义标记1
+- <2> 标记: 表示自定义标记2
+
+例如: 接线端``连接了字符串为`DAQDevice`,States with Replace Token 字符串为:
+
+ text
+ Initialize -@
+ Configure -@
+ Read -@
+ Close -@
+
+States输出为:
+
+ text
+ Initialize -@ DAQDevice
+ Configure -@ DAQDevice
+ Read -@ DAQDevice
+ Close -@ DAQDevice
+
+> - Ref: 消息拼接API
+
+-- 输入控件(Controls) --
+- States with Replace Token: 带有替换标记的CSM状态字符串。
+- : 标记: 通常表示相同的参数。
+- : 标记: 通常表示相同的目标。
+- <1>: 自定义标记1。
+- <2>: 自定义标记2。
+
+-- 输出控件(Indicators) --
+- States: 替换后的状态字符串。
+
+#### CSM - Replace Mark with String Array.vi
+将单条状态字符串中的标签替换为数组字符串,并合并成描述一组状态的符串。
+
+例如: 对于`Draw >> <1> -@ Painter`,Tag应该选择`<1>`
+
+输入数组`[Line,Circle,Rectangle]`,可以得到:
+
+ Draw >> Line -@ Painter
+ Draw >> Circle -@ Painter
+ Draw >> Rectangle -@ Painter
+
+-- 输入控件(Controls) --
+- single-line text:单条状态字符串,包含`<1>`、`<2>`、`<3>`等标签。
+- Substitution Mark:要替换的标签,例如`<1>`、`<2>`、`<3>`等标签。
+- replace string:待替换的数组字符串。
+
+-- 输出控件(Indicators) --
+- States:合并后的状态字符串。
+
+### CSM - Broadcast Status Change.vi
+向系统广播状态更改,已注册状态的CSM模块将接收此状态更改,例如:
+
+ //广播状态更改
+ Status >> Arguments ->
+
+> - Ref: CSM 的状态队列操作API
+
+-- 输入控件(Controls) --
+- Status with Arguments: 将被广播的状态及参数,支持多行,每行状态都将被添加`->`。
+- State Queue: 整个状态队列被连接到此输入。
+- Broadcast? (T): 控制是否广播的开关输入。
+
+-- 输出控件(Indicators) --
+- Remaining States: 拼接后的所有状态及参数。
+
+### Add State(s) to Queue By BOOL++.vi
+将CSM消息字符串并入CSM消息队列中。提供了TRUE/FALSE两种状态的字符串选项,能够避免使用条件结构,提高代码可读性和编程效率。
+
+> - Ref: CSM 的状态队列操作API
+
+> [!NOTE]
+> 多态VI(Polymorphic VI)选项
+> - Add State(s) to Queue By BOOL(Element).vi
+> - Add State(s) to Queue By BOOL(Array Left).vi
+> - Add State(s) to Queue By BOOL(Array Right).vi
+> - Add State(s) to Queue By BOOL(Array All).vi
+
+#### Add State(s) to Queue By BOOL(Element).vi
+将CSM消息字符串并入CSM消息队列中。提供了TRUE/FALSE两种状态的字符串选项,能够避免使用条件结构,提高代码可读性和编程效率。
+
+> - Ref: CSM的状态队列操作API
+
+-- 输入控件(Controls) --
+- State Queue (""): 整个状态队列被连接到此输入。
+- Condition: 选择连接到TRUE终端或FALSE终端的状态字符串的标志。
+- High Priority? (F): 如果为TRUE,状态将被插入到State Queue ("")的前端;如果为FALSE,它被附加到尾部。
+- TRUE (""): Condition为TRUE时插入的状态字符串。
+- FALSE (""): Condition为FALSE时插入的状态字符串。
+
+-- 输出控件(Indicators) --
+- Remaining States: 拼接后的所有状态及参数。
+
+#### Add State(s) to Queue By BOOL(Array Left).vi
+将CSM消息字符串并入CSM消息队列中。提供了TRUE/FALSE两种状态的字符串选项,能够避免使用条件结构,提高代码可读性和编程效率。
+
+> - Ref: CSM的状态队列操作API
+
+-- 输入控件(Controls) --
+- State Queue (""): 整个状态队列被连接到此输入。
+- Condition: 选择连接到TRUE终端或FALSE终端的状态字符串的标志。
+- High Priority? (F): 如果为TRUE,状态将被插入到State Queue ("")的前端;如果为FALSE,它被附加到尾部。
+- TRUE (""): Condition为TRUE时插入的状态字符串。
+- FALSE (""): Condition为FALSE时插入的状态字符串。
+
+-- 输出控件(Indicators) --
+- Remaining States: 拼接后的所有状态及参数。
+
+#### Add State(s) to Queue By BOOL(Array Right).vi
+将CSM消息字符串并入CSM消息队列中。提供了TRUE/FALSE两种状态的字符串选项,能够避免使用条件结构,提高代码可读性和编程效率。
+
+> - Ref: CSM 的状态队列操作API
+
+-- 输入控件(Controls) --
+- State Queue (""): 整个状态队列被连接到此输入。
+- Condition: 选择连接到TRUE终端或FALSE终端的状态字符串的标志。
+- High Priority? (F): 如果为TRUE,状态将被插入到State Queue ("")的前端;如果为FALSE,它被附加到尾部。
+- TRUE (""): Condition为TRUE时插入的状态字符串。
+- FALSE (""): Condition为FALSE时插入的状态字符串。
+
+-- 输出控件(Indicators) --
+- Remaining States: 拼接后的所有状态及参数。
+
+#### Add State(s) to Queue By BOOL(Array All).vi
+根据高优先级和Boolean输入,该VI生成TRUE/FALSE与剩余状态的连接状态。其中,High Priority输入决定是否在剩余状态之前或之后连接TRUE或FALSE字符串;TRUE和FALSE输入决定要连接的字符串是TRUE还是FALSE。
+
+> - Ref: CSM 的状态队列操作API
+
+-- 输入控件(Controls) --
+- State Queue (""): 整个状态队列被连接到此输入。
+- Condition: 选择连接到TRUE终端或FALSE终端的状态字符串的标志。
+- High Priority? (F): 如果为TRUE,状态将被插入到State Queue ("")的前端;如果为FALSE,它被附加到尾部。
+- TRUE (""): Condition为TRUE时插入的状态字符串。
+- FALSE (""): Condition为FALSE时插入的状态字符串。
+
+-- 输出控件(Indicators) --
+- Remaining States: 拼接后的所有状态及参数。
diff --git a/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description/VI Description(zh-cn)/VI Description(zh-cn) - 03. Arguments.md b/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description/VI Description(zh-cn)/VI Description(zh-cn) - 03. Arguments.md
new file mode 100644
index 000000000..af6ee1e5d
--- /dev/null
+++ b/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description/VI Description(zh-cn)/VI Description(zh-cn) - 03. Arguments.md
@@ -0,0 +1,148 @@
+# CSM API
+
+## 参数(Arguments)
+
+> [!NOTE]
+> CSM消息关键字
+>
+> 包括:`->`、`->|`、`-@`、`-&`、`<-`、`\r`、`\n`、`//`、`>>`、`>>>`、`>>>`、`;`、`,`。
+
+> [!NOTE]
+> CSM参数类型(Argument Type)
+>
+> 在CSM中,所有参数/返回均以字符串形式呈现,但其背后可承载任意数据类型。因此,发送端需先进行编码,接收端再进行解码。
+> 例如CSM内置HEXSTR编码方案,也可按需扩展自定义编解码器。
+> 为便于识别编码方式,推荐将编码后的参数写成` STRING FORMAT ARGUMENT`格式。
+> 使用CSM - Argument Type VI即可提取类型标记,据此选择对应的解码函数。
+
+> [!NOTE]
+> CSM HEXSTR格式参数
+>
+> 为了在CSM参数中传递任意数据类型,CSM内置了HEXSTR格式参数编解码方案。其参数类型字符串为HEXSTR。转换过程如下:
+> 1. 将LabVIEW数据先转为变体;
+> 2. 再将变体的内存映像序列化为十六进制字符串;
+> 3. 得到`十六进制字符串`形式的参数,可安全嵌入状态字符串,不会破坏CSM消息解析。
+
+> [!NOTE]
+> CSM ERRSTR格式参数
+>
+> LabVIEW错误簇是一个复杂数据类型,错误信息字符串中通常包含回车符,因此它通常不能直接作为CSM参数传递。虽然可以将错误簇信息转换为HEXSTR格式,但这种方式缺乏可读性,在日志中无法直观读取信息。
+> 因此,为了在CSM参数中传递LabVIEW错误信息,CSM内置了ERRSTR格式参数编解码方案。其参数类型字符串为ERRSTR。转换过程如下:
+>
+> 1. 将错误簇中的code、source格式化为以下格式的字符串:
+> - 错误: `[Error: error-code] error-description-As-safe-argument-string`
+> - 警告: `[Warning: error-code] warning-description-As-safe-argument-string`
+> 2. 将这段字符串中的特殊字符替换为安全字符;
+> 3. 得到CSM ERRSTR格式参数,可安全嵌入状态字符串,不会破坏CSM消息解析。
+
+> [!NOTE]
+> CSM安全字符串参数(CSM Safe String Argument)
+>
+> 为了在CSM参数中传递任意字符串且不破坏消息解析,CSM内置了Safe-String编解码方案,其参数类型字符串为SAFESTR。转换过程如下:
+> 1. 扫描输入字符串,若出现CSM关键字(如`->`、`;`、`\r`等),则将其替换为`%Hex`转义序列;
+> 2. 最终得到形如` 已转义字符串`的参数,可安全嵌入状态字符串,不会破坏CSM消息解析。
+
+### CSM - Argument Type.vi
+从编码后的参数字符串中提取参数的编码类型标记。
+
+> - Ref: CSM参数类型
+
+-- 输入控件(Controls) --
+- Arguments: 参数字符串。
+
+-- 输出控件(Indicators) --
+- Arguments (Dup): 输入的参数字符串副本。
+- Argument Type: 参数字符串的编码类型标记。
+
+### CSM - Keywords.vi
+用于罗列CSM消息中的关键字及其%Hex格式。
+
+> - Ref: CSM消息关键字
+
+-- 输出控件(Indicators) --
+- keywords: CSM关键字列表。
+- Keywords (%Hex Format): CSM关键字列表的%Hex格式。
+
+### CSM - Make String Arguments Safe.vi
+将参数字符串中的CSM关键字转换为%Hex格式,确保不影响CSM消息字符串解析。
+
+> - Ref: CSM消息关键字
+> - Ref: CSM安全字符串参数
+
+参考范例:`[CSM-Example]\0. Base Concepts\4.3 Arguments - Safe Arguments if it contains key words of CSM.vi`。
+
+-- 输入控件(Controls) --
+- Argument String: 字符串参数。
+
+-- 输出控件(Indicators) --
+- Safe Argument String: 安全的字符串参数。
+
+### CSM - Revert Arguments-Safe String.vi
+将安全的字符串参数中的%Hex格式的CSM关键字转换回普通格式。
+
+> - Ref: CSM消息关键字
+> - Ref: CSM安全字符串参数
+
+参考范例:`[CSM-Example]\0. Base Concepts\4.3 Arguments - Safe Arguments if it contains key words of CSM.vi`。
+
+-- 输入控件(Controls) --
+- Safe Argument String: 安全的字符串参数。
+
+-- 输出控件(Indicators) --
+- Origin Argument String: 字符串参数。
+
+### CSM - Convert Data to HexStr.vi
+将LabVIEW任意数据类型转换为HEXSTR格式参数字符串。
+
+> - Ref: CSM参数类型
+> - Ref: CSM HEXSTR格式参数
+
+参考范例:`[CSM-Example]\0. Base Concepts\4.1 Arguments - Complex Data As Arguments.vi`。
+
+-- 输入控件(Controls) --
+- Variant: LabVIEW数据,通过变体支持任意数据类型。
+
+-- 输出控件(Indicators) --
+- HEX String (0-9,A-F): CSM HEXSTR格式参数。
+
+### CSM - Convert HexStr to Data.vi
+将十六进制字符串参数转换回变体数据。
+
+> - Ref: CSM参数类型
+> - Ref: CSM HEXSTR格式参数
+
+参考范例:`[CSM-Example]\0. Base Concepts\4.1 Arguments - Complex Data As Arguments.vi`。
+
+-- 输入控件(Controls) --
+- HEX String: CSM HEXSTR格式参数。
+
+-- 输出控件(Indicators) --
+- Variant: LabVIEW数据,通过变体支持任意数据类型。
+
+### CSM - Convert Error to Argument.vi
+将LabVIEW错误簇转换为CSM错误参数格式。
+
+> - Ref: CSM 参数类型
+> - Ref: CSM ERRSTR 格式参数
+
+参考范例:`[CSM-Example]\0. Base Concepts\4.2 Arguments - Error As Arguments.vi`。
+
+-- 输入控件(Controls) --
+- Error: LabVIEW错误簇。
+
+-- 输出控件(Indicators) --
+- Argument: CSM错误参数格式。
+
+### CSM - Convert Argument to Error.vi
+将CSM错误参数格式转换为LabVIEW错误簇。
+
+> - Ref: CSM参数类型
+> - Ref: CSM ERRSTR格式参数
+
+参考范例:`[CSM-Example]\0. Base Concepts\4.2 Arguments - Error As Arguments.vi`。
+
+-- 输入控件(Controls) --
+- Argument: CSM错误参数格式。
+
+-- 输出控件(Indicators) --
+- Error: LabVIEW错误簇。
diff --git a/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description/VI Description(zh-cn)/VI Description(zh-cn) - 04 .Management API.md b/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description/VI Description(zh-cn)/VI Description(zh-cn) - 04 .Management API.md
new file mode 100644
index 000000000..35611c669
--- /dev/null
+++ b/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description/VI Description(zh-cn)/VI Description(zh-cn) - 04 .Management API.md
@@ -0,0 +1,263 @@
+# CSM API
+
+## 管理接口(Management API)
+
+> [!NOTE]
+> CSM工作模式
+>
+> - Stand-alone: 独立工作模式。不输入模块名称,将自动生成一个随机ID,用于标识模块。
+> - CSM: 普通CSM模块。
+> - Action Worker: 协作者模式。在模块名称后添加`#`,以标记此模块为工作者,该模块与具有相同名称的其他工作者共享相同的消息队列。
+> - Chain Node: 链式节点。在模块名称后添加`$`,以标记此模块为链式节点,同一个链上的消息将依次传递,直到某个节点处理消息。
+
+> [!NOTE]
+> CSM优先级队列设计
+>
+> CSM后台实质上依然使用LabVIEW队列来实现模块间通讯,但它使用了两个队列来分别存储不同优先级的消息:
+> - 普通优先级队列: 用于传递异步消息和信号广播
+> - 高优先级消息队列: 用于传递同步消息和中断广播
+>
+> 高优先级队列中的消息会被优先处理,普通优先级队列中的消息则会在高优先级队列中的消息处理完成后才会被处理。
+
+### CSM - Check If Module Exists.vi
+检查CSM模块是否存在。当CSM模块运行在协作者模式或责任链模式下,只有当组成模块的所有节点退出后,模块才会被标记为不存在。
+
+-- 输入控件(Controls) --
+- CSM Name: CSM模块名称。
+
+-- 输出控件(Indicators) --
+- CSM Name (dup): 输入的CSM模块名称副本。
+- Exist?: 返回模块是否存在。
+
+### CSM - List Modules.vi
+列出所有活动的CSM模块。该VI具有两组选项:
+- 范围选项:用于标记是否罗列系统级模块,默认不列出,可选择普通/仅系统级模块/所有模块。
+- 是否包含节点选项:针对协作者模式和责任链模式,当包括节点时,将同时列出节点,否则仅列出模块,默认不包含节点。
+
+> - Ref: CSM工作模式
+
+-- 输入控件(Controls) --
+- Scope (Normal): 范围选项,可选择 普通/仅系统级模块/所有模块。
+- With Nodes? (F): 是否包含节点,针对协作者模式和责任链模式,当包括节点时,将同时列出节点,否则仅列出模块,默认不包含节点。
+
+-- 输出控件(Indicators) --
+- Module Names: CSM模块名称列表。
+
+### CSM - List Submodules.vi
+列出当前分组或模块的所有子模块。Recursive? (T)为TRUE时,将递归列出所有层级的子模块,否则仅列出直接下一级子模块。
+
+ 举例: 系统存在Level1.Level2A、Level1.Level2A.Node1、Level1.Level2A.Node2、Level1.Level2B.Node1、Level1.Level2B.Node2这5个模块,
+ - 当Parent Name为"Level1"时:
+ Recursive? (T)为True时,将递归列出所有层级的子模块,包括Level1.Level2A、Level1.Level2A.Node1、Level1.Level2A.Node2、Level1.Level2B.Node1、Level1.Level2B.Node2
+ Recursive? (T)为False时,仅列出直接下一级子模块,仅包括Level1.Level2A,注意Level1.Level2B不是一个模块实例,因此并不会被包含在结果中
+
+> [!NOTE]
+> 子模块只对普通CSM模块有效,对协作者模式或责任链模式的模块无效。
+
+> - Ref: CSM子模块
+
+-- 输入控件(Controls) --
+- Parent Name: 分组或父节点名称。
+- Recursive? (T): 是否递归列出所有层级的子模块,默认为TRUE。
+
+-- 输出控件(Indicators) --
+- Parent Name (Dup): 输入的分组或父节点名称副本。
+- Submodules: 子模块名称列表。
+
+### CSM - Module VI Reference.vi
+获取输入模块的VI引用。VI逻辑:
+- 该VI通过发送`VI Reference`同步消息,查询获取CSM模块的VI引用,因此它具有与发送同步消息VI相类似的输入参数。
+- 该VI在后台缓存了本次主程序运行查询过的CSM模块的VI引用,当再次查询相同的模块且查询到的VI引用依然有效时,将直接返回缓存的VI引用,而不是重新发送同步消息查询。
+- 如果需要强制重新查询模块的VI引用,可设置Force? (F)为TRUE。
+
+对于特殊运行模式的CSM的行为:
+- 协作者模式: 返回处理`VI Reference`消息的工作者节点的VI引用。
+- 责任链模式: 返回责任链模式的CSM模块的第一个节点的VI引用。
+- 系统级模块: 与普通模式CSM相同,返回系统级模块的VI引用。
+
+-- 输入控件(Controls) --
+- Current Module ("" to Generate an ID): 查询CSM模块的标记,为空时将生成一个唯一的ID。
+- CSM Name: CSM模块名称。
+- Force? (F): 是否强制重新查询模块的VI引用,默认为 False。
+- Response Timeout (-2 Using Global Settings): 同步调用的超时时间,默认为-2,使用全局设置。您可以通过CSM - Set TMO of Sync-Reply VI设置全局超时时间。
+
+-- 输出控件(Indicators) --
+- CSM Module VIRef: CSM模块的VI引用。
+
+### CSM - Set TMO of Sync-Reply.vi
+设置CSM程序全局的同步调用超时时间,单位为毫秒。当输入为-2时,将不会修改全局超时时间,返回值为当前全局超时时间;当输入为其他正值时,将修改全局超时时间为该值,返回新的全局超时时间。
+
+> - Ref: CSM同步消息全局超时
+
+CSM模块/API调用时,默认的超时时间为-2,此时将使用全局设置的超时时间;如果设置为其他正值,则将使用该值作为超时时间。
+
+-- 输入控件(Controls) --
+- TMO For Sync-Rep (ms) In: 全局超时时间输入,-2表示不修改全局超时时间,其他正值表示修改全局超时时间为该值。
+
+-- 输出控件(Indicators) --
+- TMO For Sync-Rep (ms) Out: 当前全局超时时间。
+
+### CSM - Module Status.vi
+获取CSM模块的状态,包括: 工作模式、工作者数量、消息队列中的待处理消息个数。
+
+> - Ref: CSM工作模式
+
+-- 输入控件(Controls) --
+- CSM Name: CSM模块名称。
+
+-- 输出控件(Indicators) --
+- CSM Name (Dup): 输入的CSM模块名称副本。
+- Mode: 返回模块的工作模式。
+- #Nodes: 协作者模式或责任链模式下的节点数量。
+- #Elements In Queue: CSM消息队列中的待处理消息个数。
+
+### CSM - Flush Queue.vi
+清空CSM模块后台用于模块间通信的LabVIEW队列。
+
+> - Ref: CSM优先级队列设计
+
+> [!WARNING]
+> CSM模块通常不建议使用该VI。CSM建议通过设计避免消息在模块中的堆积,因此建议通过设计避免在CSM模块中使用该VI清空后台的消息队列。
+
+-- 输入控件(Controls) --
+- CSM Name: CSM模块名称。
+- Option (Low Priority As Default): 清理的队列。可以选择All、Low Priority、High Priority。默认值为Low Priority。
+
+-- 输出控件(Indicators) --
+- CSM Name (Dup): 输入CSM模块名称的副本。
+- #Flushed: 被清理的消息队列中的元素个数。
+
+### Filter JKISM String Queue(CSM - Filter JKISM String Queue.vi)
+
+该VI用于过滤CSM状态队列中的特定状态
+
+> [!WARNING]
+> CSM模块通常不建议使用该VI。CSM建议通过设计避免消息在模块中的堆积,因此建议通过设计避免清空JKISM字符串队列。
+> 但如果必须清空JKISM字符串队列,建议通过调用该组VI清空JKISM字符串队列,而非使用字符串操作。
+
+> - Ref: CSM 的状态队列操作API
+
+> [!NOTE]
+> 多态VI(Polymorphic VI)选项
+> - CSM - Filter Local States.vi: 过滤本地状态
+> - CSM - Filter Messages.vi: 过滤所有类型的消息
+> - CSM - Filter Sync Messages.vi: 过滤同步消息
+> - CSM - Filter Async Messages.vi: 过滤异步消息
+> - CSM - Filter Async without Reply Messages.vi: 过滤异步无回复消息
+> - CSM - Filter Messages to Non-Existing Modules.vi: 过滤发送到不存在模块的消息
+> - CSM - Filter Broadcasts.vi: 过滤广播消息
+> - CSM - Filter Status Broadcasts.vi: 过滤状态广播消息
+> - CSM - Filter Interrupt Broadcasts.vi: 过滤中断广播消息
+> - CSM - Filter Duplicated Lines.vi: 过滤重复行
+
+#### CSM - Filter Local States.vi
+该VI用于过滤CSM状态队列中的本地状态。
+
+> - Ref: CSM 的状态队列操作API
+
+-- 输入控件(Controls) --
+- States In: 待过滤的整段状态描述字符串。
+
+-- 输出控件(Indicators) --
+- States Out: 过滤后的状态描述字符串。
+
+#### CSM - Filter Messages.vi
+该VI用于过滤CSM状态队列中的所有类型的消息。
+
+> - Ref: CSM 的状态队列操作API
+
+-- 输入控件(Controls) --
+- States In: 待过滤的整段状态描述字符串。
+
+-- 输出控件(Indicators) --
+- States Out: 过滤后的状态描述字符串。
+
+#### CSM - Filter Sync Messages.vi
+该VI用于过滤CSM状态队列中的同步消息。
+
+> - Ref: CSM 的状态队列操作API
+
+-- 输入控件(Controls) --
+- States In: 待过滤的整段状态描述字符串。
+
+-- 输出控件(Indicators) --
+- States Out: 过滤后的状态描述字符串。
+
+#### CSM - Filter Async Messages.vi
+该VI用于过滤CSM状态队列中的异步消息。
+
+> - Ref: CSM 的状态队列操作API
+
+-- 输入控件(Controls) --
+- States In: 待过滤的整段状态描述字符串。
+
+-- 输出控件(Indicators) --
+- States Out: 过滤后的状态描述字符串。
+
+#### CSM - Filter Async without Reply Messages.vi
+该VI用于过滤CSM状态队列中的异步无回复消息。
+
+> - Ref: CSM 的状态队列操作API
+
+-- 输入控件(Controls) --
+- States In: 待过滤的整段状态描述字符串。
+
+-- 输出控件(Indicators) --
+- States Out: 过滤后的状态描述字符串。
+
+#### CSM - Filter Messages to Non-Existing Modules.vi
+该VI用于过滤CSM状态队列中发送到不存在模块的消息。这个VI中会使用CSM - List Modules VI获取所有活动的CSM模块,然后过滤掉发送给不存在模块的消息。
+
+> - Ref: CSM 的状态队列操作API
+
+-- 输入控件(Controls) --
+- States In: 待过滤的整段状态描述字符串。
+
+-- 输出控件(Indicators) --
+- States Out: 过滤后的状态描述字符串。
+
+#### CSM - Filter Broadcasts.vi
+该VI用于过滤CSM状态队列中的广播消息。
+
+> - Ref: CSM 的状态队列操作API
+
+-- 输入控件(Controls) --
+- States In: 待过滤的整段状态描述字符串。
+
+-- 输出控件(Indicators) --
+- States Out: 过滤后的状态描述字符串。
+
+#### CSM - Filter Status Broadcasts.vi
+该VI用于过滤CSM状态队列中的状态广播消息。
+
+> - Ref: CSM 的状态队列操作API
+
+-- 输入控件(Controls) --
+- States In: 待过滤的整段状态描述字符串。
+
+-- 输出控件(Indicators) --
+- States Out: 过滤后的状态描述字符串。
+
+#### CSM - Filter Interrupt Broadcasts.vi
+该VI用于过滤CSM状态队列中的中断广播消息。
+
+> - Ref: CSM 的状态队列操作API
+
+-- 输入控件(Controls) --
+- States In: 待过滤的整段状态描述字符串。
+
+-- 输出控件(Indicators) --
+- States Out: 过滤后的状态描述字符串。
+
+#### CSM - Filter Duplicated Lines.vi
+该VI用于过滤CSM状态队列中的重复行。
+
+> - Ref: CSM 的状态队列操作API
+
+-- 输入控件(Controls) --
+- Keep First Matched? (T): 是否保留第一个匹配项,默认为TRUE。
+- States In: 待过滤的整段状态描述字符串。
+- Option: 过滤选项。
+
+-- 输出控件(Indicators) --
+- States Out: 过滤后的状态描述字符串。
diff --git a/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description/VI Description(zh-cn)/VI Description(zh-cn) - 05. Module Operation API.md b/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description/VI Description(zh-cn)/VI Description(zh-cn) - 05. Module Operation API.md
new file mode 100644
index 000000000..489862798
--- /dev/null
+++ b/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description/VI Description(zh-cn)/VI Description(zh-cn) - 05. Module Operation API.md
@@ -0,0 +1,236 @@
+# CSM API
+
+## 模块操作接口(Module Operation API)
+
+### CSM - Wait for Module to Be Alive.vi
+在指定的超时时间内等待CSM模块上线,返回等待时间,超时后返回错误。内部通过1 ms的间隔,周期性使用CSM - Check If Module Exists VI检查模块是否上线。
+
+-- 输入控件(Controls) --
+- CSM Name: CSM模块名称。
+- Wait (5000ms): 等待超时时间,默认为5000 ms。
+
+-- 输出控件(Indicators) --
+- CSM Name (Dup): CSM模块名称。
+- Waited (ms): 已等待的时间。
+
+### CSM - Wait for All Modules to be Alive.vi
+在指定的超时时间内等待一组CSM模块全部上线,返回等待时间,超时后返回错误及未上线的模块名称。内部通过5 ms的间隔,周期性使用CSM - List Module VI检查是否所有模块都已上线。
+
+-- 输入控件(Controls) --
+- CSM Names: CSM模块名称。
+- Wait (5000ms): 等待超时时间,默认为5000 ms。
+
+-- 输出控件(Indicators) --
+- CSMs Left: 超时后还未上线的CSM模块。
+- Waited (ms): 已等待的时间。
+
+### CSM - Wait for All Modules to Exit.vi
+在指定的超时时间内等待一组CSM模块全部下线,返回等待时间,超时后返回错误及未下线的模块名称。通常用于程序退出。
+
+-- 输入控件(Controls) --
+- CSM Names: CSM 模块名称。
+- Wait (5000ms): 等待超时时间,默认为5000 ms。
+
+-- 输出控件(Indicators) --
+- CSMs Left: 超时后还未下线的CSM模块。
+- Waited (ms): 已等待的时间。
+
+### CSM - Post Message.vi
+发送异步消息到指定的CSM模块。由于是异步发送,因此不会等待返回,消息发送后继续执行之后的代码。如果CSM模块不存在,将返回Target Error。
+
+> ![NOTE]
+> 使用API发送的异步消息均为异步无返回消息,无法获取异步消息的返回参数。
+
+> - Ref: 异步消息
+> - Ref: CSM消息的目标模块说明
+
+-- 输入控件(Controls) --
+- Current Module ("" to Generate an ID): 当前模块名称,当没有输入时,生成一个临时ID,便于调试判断位置。
+- State: 消息字符串。
+- Arguments (""): 消息参数。
+- Target Module: 目标模块的名称。
+
+### CSM - Wait and Post Message.vi
+发送异步消息到指定的CSM模块,由于是异步发送,因此不会等待返回,消息发送后继续执行之后的代码。如果CSM模块不存在,将会等待指定的超时时间,仍然超时会返回超时错误。
+
+> - Ref: 异步消息
+> - Ref: CSM消息的目标模块说明
+
+-- 输入控件(Controls) --
+- Current Module ("" to Generate an ID): 当前模块名称,当没有输入时,生成一个临时ID,便于调试判断位置。
+- State: 消息字符串。
+- Arguments (""): 消息参数。
+- Target Module: 目标模块的名称。
+- Wait (5000ms): 等待超时时间,默认为5000 ms。
+
+-- 输出控件(Indicators) --
+- Waited (ms): 已等待的时间。
+
+### CSM - Send Message and Wait for Reply.vi
+发送同步消息到CSM,等待返回后继续执行之后的代码。
+- 超时未获取到返回消息,将返回CSM Timeout Error。
+- 目标模块不存在,将返回Target Error。
+
+> - Ref: 同步消息
+> - Ref: 全局超时时间设置
+> - Ref: CSM消息的目标模块说明
+
+-- 输入控件(Controls) --
+- Current Module ("" to Generate an ID): 当前模块名称,当没有输入时,生成一个临时ID,便于调试判断位置。
+- State: 消息字符串。
+- Arguments (""): 消息参数。
+- Target Module: 目标CSM模块名称。
+- Response Timeout (-2 Using Global Settings): 等待返回的超时设置,默认5000 ms。
+
+-- 输出控件(Indicators) --
+- Response: 返回的响应。
+- Source CSM: 返回的响应的来源CSM模块名称,在协作者模式或责任链模式下返回节点的名称。
+
+### CSM - Wait and Send Message for Reply.vi
+发送同步消息到CSM,等待返回后继续执行之后的代码。如果CSM模块不存在,将会等待指定的超时时间。可能出现以下错误:
+- 如果模块发送时不存在,等待超时后返回超时错误。
+- 可以发送消息,但超时未获取到返回消息,将返回CSM Timeout Error。
+
+> - Ref: 同步消息
+> - Ref: 全局超时时间设置
+> - Ref: CSM消息的目标模块说明
+
+-- 输入控件(Controls) --
+- Current Module ("" to Generate an ID): 当前模块名称,当没有输入时,生成一个临时ID,便于调试判断位置。
+- State: 消息字符串。
+- Arguments (""): 消息参数。
+- Target Module: CSM模块名称。
+- Wait (5000ms): 等待超时时间,默认为5000 ms。
+- Response Timeout (-2 Using Global Settings): 同步调用的超时时间,默认为-2,使用全局设置。你可以通过CSM - Set TMO of Sync-Reply VI设置全局超时时间。
+
+-- 输出控件(Indicators) --
+- Response: 返回的响应。
+- Source CSM: 返回的响应的来源CSM模块名称,在协作者模式或责任链模式下返回节点的名称。
+- Waited (ms): 已等待的时间。
+
+### CSM - Run Script.vi
+一次性的执行多条CSM指令,支持同步消息、异步消息和订阅。
+
+> - Ref: CSM消息的目标模块说明
+
+-- 输入控件(Controls) --
+- Current Module ("" to Generate an ID): 当前模块名称,当没有输入时,生成一个临时ID,便于调试判断位置。
+- CSM Scripts: 待运行的CSM指令。
+- Continue If Error? (F): 发生错误时是否继续执行, 默认不继续执行。
+- Wait (5000 ms): 等待超时时间,默认为5000 ms。
+- Response Timeout (-2 Using Global Settings): 同步调用的超时时间,默认为-2,使用全局设置。你可以通过CSM - Set TMO of Sync-Reply VI设置全局超时时间。
+
+-- 输出控件(Indicators) --
+- Response: 执行脚本的返回结果。只有同步消息才会携带返回,其他的指令对应列为空字符串。
+- Scripts Left: 剩余未执行的脚本。
+
+### CSM - Broadcast Event.vi
+获取CSM状态更改事件句柄。
+
+-- 输入控件(Controls) --
+- CSM Module: CSM模块名称。
+- Wait (5000 ms): 等待超时时间,默认为5000 ms。
+
+-- 输出控件(Indicators) --
+- Status Change Event: CSM状态更改事件句柄。
+- Waited (ms): 已等待的时间。
+
+### CSM - Destroy Broadcast Event.vi
+释放CSM状态更改事件句柄。
+
+-- 输入控件(Controls) --
+- Status Change Event: CSM状态更改事件句柄。
+
+### CSM - Module Exit Event.vi
+获取CSM模块退出事件句柄,如果模块不存在,将会等待指定的超时时间。超时过后如果模块还不存在,将返回超时错误。
+
+CSM高级模式的模块(协作者模式、责任链模式)只有在最后一个节点退出后,才会触发模块退出事件。
+
+-- 输入控件(Controls) --
+- Name ("" to Use UUID) In: CSM模块名称。请参考CSM名称规则。
+- Wait (5000 ms): 等待超时时间,默认为5000 ms。
+
+-- 输出控件(Indicators) --
+- CSM Exit Event: CSM模块退出事件句柄。
+- Waited (ms): 已等待的时间。
+
+### 属性(Attribute)
+
+> [!NOTE]
+> CSM模块属性
+>
+> CSM模块属性是一块可以保存模块配置、状态的数据区域,通过名称来访问。它可以用作以下场景:
+> - 提供一种无需消息即可访问修改的配置、状态信息。例如TCP模块中表示是否已经连接的属性"Connected"属性,直接访问会更加方便。
+> - 在高级模式(协作者模式、责任链模式)运行下的节点共享同一个数据区域,用于在模块之间共享数据。
+
+#### CSM - Set Module Attribute.vi
+设置指定模块的属性值。如果属性不存在,将创建一个新的属性,Replaced返回FALSE, 否则返回TRUE。如果CSM模块不存在,将会等待指定的超时时间,超时会返回超时错误。
+
+> - Ref: CSM模块属性
+
+参考范例:`[CSM-Example]\0. Base Concepts\6. Module Attributes.vi`。
+
+-- 输入控件(Controls) --
+- CSM Name: CSM模块名称。
+- Attribute: 属性名称,不能为空字符串。
+- Value: 属性数据。
+- Wait (5000 ms): 等待超时时间,默认为5000 ms。
+
+-- 输出控件(Indicators) --
+- CSM Name (Dup): 输入的CSM模块名称副本。
+- Replaced: 属性是否被替换。
+- Waited (ms): 已等待的时间。
+
+#### CSM - Get Module Attribute.vi
+读取指定模块的属性值。如果属性不存在,将返回默认值,Found返回FALSE, 否则返回TRUE。如果CSM模块不存在,将会等待指定的超时时间,超时会返回超时错误。
+
+> - Ref: CSM模块属性
+
+参考范例:`[CSM-Example]\0. Base Concepts\6. Module Attributes.vi`。
+
+-- 输入控件(Controls) --
+- CSM Name: CSM模块名称。
+- Attribute: 属性名称,不能为空字符串。
+- Default Value (Empty Variant): 默认值,当属性不存在时返回。
+- Wait (5000 ms): 等待超时时间,默认为 5000ms。
+
+-- 输出控件(Indicators) --
+- CSM Name (Dup): 输入的CSM模块名称副本。
+- Found: 属性是否存在。
+- Value: 属性值。
+- Waited (ms): 已等待的时间。
+
+#### CSM - List Module Attributes.vi
+列出指定模块的所有属性名称。如果CSM模块不存在,将会等待指定的超时时间,超时会返回超时错误。
+
+> - Ref: CSM模块属性
+
+参考范例:`[CSM-Example]\0. Base Concepts\6. Module Attributes.vi`。
+
+-- 输入控件(Controls) --
+- CSM Name: CSM模块名称。
+- Include Value? (F): 是否包含属性值,默认不包含。
+- Wait (5000 ms): 等待超时时间,默认为5000 ms。
+
+-- 输出控件(Indicators) --
+- CSM Name (Dup): 输入的CSM模块名称副本。
+- Attributes: 属性名称列表。
+- Values: 属性值列表。
+- Waited (ms): 已等待的时间。
+
+#### CSM - Delete Module Attribute.vi
+删除指定模块的属性。如果属性不存在,将返回FALSE, 否则返回TRUE。如果CSM模块不存在,将会等待指定的超时时间,超时会返回超时错误。
+
+> - Ref: CSM模块属性
+
+参考范例:`[CSM-Example]\0. Base Concepts\6. Module Attributes.vi`。
+
+-- 输入控件(Controls) --
+- CSM Name: CSM模块名称。
+- Attribute: 属性名称,不能为空字符串。
+- Wait (5000 ms): 等待超时时间,默认为5000 ms。
+
+-- 输出控件(Indicators) --
+- CSM Name (Dup): 输入的CSM模块名称副本。
+- Found: 属性是否存在。
+- Waited (ms): 已等待的时间。
diff --git a/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description/VI Description(zh-cn)/VI Description(zh-cn) - 06. Broadcast Registration.md b/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description/VI Description(zh-cn)/VI Description(zh-cn) - 06. Broadcast Registration.md
new file mode 100644
index 000000000..30870164b
--- /dev/null
+++ b/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description/VI Description(zh-cn)/VI Description(zh-cn) - 06. Broadcast Registration.md
@@ -0,0 +1,102 @@
+# 广播订阅管理(Broadcast Registration)
+
+## CSM - Register Broadcast.vi
+注册以接收其他CSM模块触发更改的通知。如果未连接API或输入为空,则将使用相同的触发名称作为响应消息。触发名称可以是源模块的广播名称,或者源模块的状态名称。
+
+协作者模式和责任链模式下,输入节点的名称,会被自动解析为模块的名称,因为CSM是以模块为单位实现订阅的。
+
+参考范例:`2. Caller is CSM Scenario\CSM Example - Caller is a CSM.vi`。
+
+> - Ref: CSM订阅
+> - Ref: CSM订阅位置
+> - Ref: CSM广播优先级
+
+-- 输入控件(Controls) --
+- CSM Name: CSM模块名称。
+- Source CSM Name (* as Default): 生成状态的CSM模块。您可以使用`*`来表示所有生成相同状态的模块。
+- Trigger: 触发字符串。
+- API (if "", same as Trigger): 注册后,如果触发发生变化,将接收到此消息。
+- Priority (No Change): 订阅后的广播优先级。
+
+-- 输出控件(Indicators) --
+- CSM Name (Dup): 输入的CSM模块名称副本。
+
+## CSM - Unregister Broadcast.vi
+取消注册其他CSM模块状态更改的通知。
+
+协作者模式和责任链模式下,输入节点的名称,会被自动解析为模块的名称,因为CSM是以模块为单位实现订阅的。
+
+参考范例:`2. Caller is CSM Scenario\CSM Example - Caller is a CSM.vi`。
+
+> - Ref: CSM订阅
+> - Ref: CSM订阅位置
+
+-- 输入控件(Controls) --
+- CSM Name: CSM模块名称。
+- Source CSM Name (* as Default): 生成状态的CSM模块。您可以使用`*`来表示所有生成相同状态的模块。
+- Trigger: 触发字符串。
+- API ("*" as Default): 取消注册的API名称。如果为空,则为所有API。
+
+-- 输出控件(Indicators) --
+- CSM Name (Dup): 输入的CSM模块名称副本。
+
+## CSM - List Rules in Broadcast Registry.vi
+列出CSM注册表中的的所有规则。
+
+> - Ref: CSM广播
+> - Ref: CSM订阅
+
+-- 输出控件(Indicators) --
+- Rule Entries: 所有规则条目。
+
+## CSM - List Mapping Relationships in Broadcast Registry.vi
+列出当前CSM模块的所有广播订阅关系。和规则不同,广播订阅关系是当前的CSM模块在当前的规则下所有的广播订阅关系。
+
+> [!NOTE]
+> CSM使用订阅、取消订阅操作,添加的是CSM模块广播订阅的规则。根据当前规则和实际存在的模块,可以推算出当前CSM模块的所有广播订阅关系。CSM内部会进行缓存当前的订阅关系,当CSM模块的订阅规则或CSM模块数目发生变化时,会自动更新订阅关系缓存。
+
+> - Ref: CSM广播
+> - Ref: CSM订阅
+
+-- 输出控件(Indicators) --
+- Mapping Relationships: 当前CSM模块的所有广播订阅关系。
+
+## CSM - List Sources in Broadcast Registry.vi
+列出当前所有广播订阅关系的广播名称。
+
+> - Ref: CSM广播
+> - Ref: CSM订阅
+
+-- 输出控件(Indicators) --
+- Broadcast Names: 当前所有广播订阅关系的广播名称。
+
+## CSM - Check Mapping Relationship in Broadcast Registry.vi
+检查CSM模块的某广播名称对应所有的订阅关系。
+
+> - Ref: CSM广播
+> - Ref: CSM订阅
+
+-- 输入控件(Controls) --
+- CSM Name: CSM模块名称。
+- Broadcast Name: 广播的名称。
+
+-- 输出控件(Indicators) --
+- Mapping Relationships: 当前CSM模块的某广播名称对应所有的订阅关系。
+
+## CSM - Remove Module in Broadcast Registry.vi
+从广播注册中删除所有与指定CSM模块相关的订阅关系。
+
+> - Ref: CSM广播
+> - Ref: CSM订阅
+
+-- 输入控件(Controls) --
+- CSM Name: CSM模块名称。
+
+-- 输出控件(Indicators) --
+- CSM Name (Dup): 输入的CSM模块名称副本。
+
+## CSM - Drop Broadcast Registry.vi
+重置后台广播注册的所有信息,应用在完全重置订阅关系的场景中。
+
+> - Ref: CSM广播
+> - Ref: CSM订阅
diff --git a/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description/VI Description(zh-cn)/VI Description(zh-cn) - 07. Global Log.md b/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description/VI Description(zh-cn)/VI Description(zh-cn) - 07. Global Log.md
new file mode 100644
index 000000000..131c6c34e
--- /dev/null
+++ b/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description/VI Description(zh-cn)/VI Description(zh-cn) - 07. Global Log.md
@@ -0,0 +1,229 @@
+# 全局日志(Global Log)
+
+> [!NOTE]
+> CSM全局日志功能
+>
+> CSM全局日志功能,用于查看全局日志更改事件,用于调试、监控等场景。
+>
+> 可以记录的信息包括:
+> - 模块的状态修改
+> - 模块间的消息通讯,包括数据返回
+> - 模块的状态发布
+> - 模块的创建和销毁
+> - 模块的状态订阅和取消订阅
+> - 模块处理的错误信息
+> - 用户自定义事件
+>
+> 调试工具主要基于全局日志功能API进行开发,用户可以根据自己的需要,开发调试工具。
+
+> [!NOTE]
+> CSM全局日志获取方法
+>
+> CSM全局日志提供了队列和事件两种获取方法。推荐使用队列处理的方法,因为队列接口的效率更高,也能根据队列中的累积日志数量,选择处理日志的方案,更加的灵活。
+
+## CSM - Global Log Queue.vi
+获取全局日志的队列句柄,可以从这个队列中获取全局日志事件。
+
+> - Ref: CSM全局日志功能
+> - Ref: CSM全局日志获取方法
+
+参考范例:
+- `4. Advance Examples\Filter From Source(Queue).vi`
+- `4. Advance Examples\Filter From Subscriber(Queue).vi`
+
+-- 输出控件(Indicators) --
+- Global Log Queue: 全局日志队列句柄。
+
+## CSM - Global Log Event.vi
+获取CSM全局日志用户事件句柄,用于从全局日志队列中获取全局日志用户事件。
+
+> - Ref: CSM全局日志功能
+> - Ref: CSM全局日志获取方法
+
+参考范例:
+- `4. Advance Examples\Filter From Source(Event).vi`
+- `4. Advance Examples\Filter From Subscriber(Event).vi`
+
+-- 输出控件(Indicators) --
+- CSM Global Log Event: CSM全局日志用户事件句柄。
+- Timeout In ms (5000ms): 超时时间,默认5000 ms。
+
+## CSM - Destroy Global Log Queue.vi
+释放全局日志队列句柄。
+
+> - Ref: CSM全局日志功能
+> - Ref: CSM全局日志获取方法
+
+参考范例:
+- `4. Advance Examples\Filter From Source(Queue).vi`
+- `4. Advance Examples\Filter From Subscriber(Queue).vi`
+
+-- 输入控件(Controls) --
+- Global Log Queue: 全局日志队列句柄。
+
+## CSM - Destroy Global Log Event.vi
+释放CSM全局日志用户事件句柄。
+
+> - Ref: CSM全局日志功能
+> - Ref: CSM全局日志获取方法
+
+参考范例:
+- `4. Advance Examples\Filter From Source(Event).vi`
+- `4. Advance Examples\Filter From Subscriber(Event).vi`
+
+-- 输入控件(Controls) --
+- CSM Global Log Event: CSM全局日志用户事件句柄。
+- Force Destroy? (F): 是否强制销毁,默认不强制。
+- Timeout In ms (5000ms): 超时时间,默认5000 ms。
+
+## CSM - Global Log Error Handler.vi
+CSM错误处理函数。如果发生错误,错误信息将通过CSM Global Log发布。从而可以将一些不在CSM框架的错误信息统一的记录在全局日志中。
+
+-- 输入控件(Controls) --
+- Place ("" to Use VI's Name): 标记发生错误的位置,默认使用调用VI的名称。
+- Clear Error? (T): 是否清除错误。默认清除,经过此VI后,错误将被清除。
+
+## CSM - Generate User Global Log.vi
+生成一个自定义的用户日志,用于调试等场景。当此VI的输入参数中包含错误信息时,将调用CSM - Global Log Error Handler VI记录错误信息。
+
+-- 输入控件(Controls) --
+- Log: 事件名称。
+- Arguments: 事件参数。
+- From Who: 来源。
+- ModuleName: 模块名称。
+- Place ("" to Use VI's Name): 发生错误的地点,默认使用VI的名称。
+
+## Filter Rules
+
+> [!NOTE]
+> 全局日志过滤位置
+>
+> 全局日志的过滤可以分为两种:源端过滤和订阅端过滤。
+> - 源端过滤: CSM框架内置了过滤规则,根据用户的设置,可以在源头不发送日志
+> - 订阅端过滤: 同样的规则,CSM提供了一些帮助VI,可以在接收到日志后,判断是否符合过滤规则,从而实现不同的逻辑处理。
+>
+> 源端处理会完全不发送日志,可以减轻系统负担,订阅端过滤只会影响此订阅端逻辑,不会后台日志保存等,具有更高的灵活性。
+
+> [!NOTE]
+> 全局日志过滤规则
+>
+> 全局日志过滤规则是可以将一类日志进行过滤,不出现在全局日志中。
+>
+> 目前有三类:
+> - 全局规则,针对符合条件的所有模块,目前可设置:
+> - 模块名称: 该模块所有名称均会被过滤。
+> - 日志类型: 如状态、消息、广播、模块初始化等。
+> - 状态名称: 任意模块的该名称状态都会被过滤。
+> - 状态类型: 状态的类型,内部状态、外部消息等。
+>
+> - 模块规则,可针对模块设置对应的规则,目前可设置:
+> - 模块的日志类型: 该模块的日志类型会被过滤。
+> - 状态名称: 该模块的同名状态会被过滤。
+> - 状态类型: 该模块的状态类型会被过滤。
+>
+> - 周期过滤规则: 此规则目前只能针对订阅处有效,因为发布位置不容易统计数目。
+> - 是否启用周期过滤。
+> - Threshold(#/s): 周期过滤阈值。
+> - CheckPeriod(s): 检查窗口时间。
+
+### CSM - Set Log Filter Rules.vi
+设置全局的源端过滤规则,当log满足过滤规则时,将不会在源头被发送,因此任何工具也将不能再检测到这个log记录。
+
+> [!NOTE]
+> 这个VI是一个多态VI,用于保证修改后的接口向前兼容,建议选择版本更新的实例。
+
+> - Ref: 全局日志过滤位置
+> - Ref: 全局日志过滤规则
+
+参考范例:
+- `4. Advance Examples\Filter From Source(Queue).vi`
+- `4. Advance Examples\Filter From Source(Event).vi`
+
+### CSM - List Log Filter Rules As Strings.vi
+以字符串的格式将全局过滤规则列出来,每个规则占一行,可供用户查看。主要用于后台日志文件保存、调试界面查看等。
+
+> - Ref: 全局日志过滤规则
+
+-- 输出控件(Indicators) --
+- Rule Strings: 过滤规则字符串。
+
+### CSM - Convert Filter Rules.vi
+将过滤规则簇列表转换为过滤规则类实例。以类的形式提供接口可以保证接口的向前兼容,在功能修改后,旧的接口不变。目前这个VI主要用于CSM File Logger Addon.
+
+> [!NOTE]
+> 这个VI是一个多态VI,用于保证修改后的接口向前兼容,建议选择版本更新的实例。
+
+> - Ref: 全局日志过滤规则
+
+### CSM - Filter Global Log.vi
+这是一个订阅端过滤VI,用于判断是否log被满足过滤规则。过滤判断发生在订阅端,因此不会影响其他工具的订阅。
+
+> [!NOTE]
+> 这个VI是一个多态VI,用于保证修改后的接口向前兼容,建议选择版本更新的实例。
+
+> - Ref: 全局日志过滤规则
+
+### Utility VIs
+
+#### Global Log To String.vi
+全局日志(Global Log)数据簇转换为字符串。
+
+-- 输入控件(Controls) --
+- Log: 全局日志数据簇。
+
+-- 输出控件(Indicators) --
+- Log String: 全局日志字符串。
+
+#### Global Log To String(Source Time).vi
+将全局日志(Global Log)数据簇转换为字符串,使用发送时间作为时间戳。
+
+-- 输入控件(Controls) --
+- Log: 全局日志数据簇。
+- Format String: 时间戳格式。
+
+-- 输出控件(Indicators) --
+- Log String: 全局日志字符串。
+
+#### Global Log History Cacher.vi
+保存当前输入的字符串到缓存,缓存的历史字符串,当超出最大长度限制时,最先进入的缓存字符串将被覆盖。用于调试CSM的历史状态。
+
+-- 输入控件(Controls) --
+- Global Log Data: 收到的Global Log信息数据包。
+- Length (10000): 缓存的历史字符串最大字符串长度。
+- Level (Normal): 处理等级,Normal为正常处理,更高的等级会省略不同的信息,以提高处理速度。
+- Time Format String: 时间戳格式。
+- With Periodic Info? (T): 是否折叠周期性的log。
+- Remove Immediately? (F): 是否立即移除周期性的折叠信息。
+- Reset?: 重置标志。
+- Settings: 周期性的log配置信息,可以设置检测周期与周期性阈值,来判断是否折叠。
+
+-- 输出控件(Indicators) --
+- String Cache: 缓存的历史字符串。
+
+#### Auto Processing Level.vi
+根据当前全局日志队列的日志数量,动态的推算推荐的日志处理等级。
+
+-- 输入控件(Controls) --
+- #Left In Q: 全局日志队列中剩余的日志数量。
+- Debounce Period (5s): 日志处理升级时间,在指定时间内全局日志失踪在增加,将提高处理等级。
+- Period (0.1s): 检测周期,默认100 ms。
+- Reset? (F): 重置标志。
+
+-- 输出控件(Indicators) --
+- Level: 处理等级,Normal为正常处理,更高的等级会省略不同的信息,以提高处理速度。
+- LogInQ Changing Speed (#/s): 当前全局日志队列的日志变化速度。
+- Since Upgraded (S): 自从上次升级处理等级以来的时间。
+
+### Exit With Empty Queue Check.vi
+此VI用于使用Global Log Queue的全局日志监控循环,例如`template/CSM - Global Log Queue Monitoring Loop.vi`或CSM File Logger的后台线程。
+
+通常这些全局日志的监控循环的退出条件会在程序退出时成立,这时可能队列中的日志还没有完全的处理完毕,这个VI用于在Stop信号到来后,再给一段时间Timeout (5s)来处理队列中的日志。当队列中日志的数量为空或超时后,才会将 Exit置真,真正的退出循环。
+
+-- 输入控件(Controls) --
+- Queue: 队列资源,例如Global Log Queue。
+- Stop: 输入的停止信号,当此信号为真时,将开始检查队列是否为空。
+
+-- 输入控件(Controls) --
+- Timeout (5s): 超时时间,默认5 s。
+- Exit: 真实的退出信号,当队列为空,或超时时为TRUE。
+- Since Exiting (s): 自退出开始的时间,单位为秒。
diff --git a/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description/VI Description(zh-cn)/VI Description(zh-cn) - 08. Advanced Modes.md b/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description/VI Description(zh-cn)/VI Description(zh-cn) - 08. Advanced Modes.md
new file mode 100644
index 000000000..dcebb9060
--- /dev/null
+++ b/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description/VI Description(zh-cn)/VI Description(zh-cn) - 08. Advanced Modes.md
@@ -0,0 +1,227 @@
+# CSM API
+
+> [!NOTE]
+> 名称拼接API
+>
+> 这个VI只操作了模块名称字符串,并没有实际功能,当熟悉CSM规则后,可以直接输入对应的名称字符串和规则符号,不是必须调用此API。
+
+## 系统级模块 (System-Level Module API)
+
+> [!NOTE]
+> CSM系统级模块
+>
+> 系统级模块的其他CSM功能,均与普通模块相同,和普通模块唯一的区别,在于默认的CSM - List Modules VI不会列出系统级模块。因此它通常用于实现一些后台运行的功能模块,而在统一处理普通模块操作逻辑时,可以避免对这些后台运行逻辑的干扰。
+>
+> CSM系统级模块通常以`.`开头,例如: `.MainApp`、`.BackgroundTask`等,`.`是名称的一部分,消息发送、订阅等操作需要的名称也要包含`.`。例如:您可以将主程序循环命名为`.MainApp`,就可以通过CSM - List Modules VI来获取所有普通模块的列表,而不会列出`.MainApp`,如果主程序需要退出其他全部模块,就可以发送`Macro: Exit`给CSM - List Modules VI的结果,这样就可以退出所有普通模块,而不会影响系统级模块的运行。
+>
+> 协作者模式、责任链模式的CSM模块名称,也可以以`.`开头,作为系统级模块运行。
+
+### CSM - Mark As System-Level Module.vi
+在输入字符串前添加`.`,即可将此模块标记为系统级模块,例如输入为`UIModule`,输出为`.UIModule`。
+
+参考范例: `0. Base Concepts\7. System-Level Module.vi`。
+
+> - Ref: 名称拼接API
+> - Ref: CSM系统级模块
+
+-- 输入控件(Controls) --
+- CSM Name: CSM模块名称。
+
+-- 输出控件(Indicators) --
+- CSM Name (Marked As System-Level Module): 添加`.`标记的CSM模块名称。
+
+## 子模块
+
+> [!NOTE]
+> CSM子模块
+>
+> CSM中并没有严格意义上的子模块,仅通过模块名称中的`.`来标记不同模块的逻辑关系,从实际运行角度来看,每个模块都是独立且没有层级关系的。
+> 例如:
+> 模块`ModuleA`和`ModuleA.SubmoduleB`是两个不同的模块,从代码逻辑上看,它们是完全独立的,互不干扰。
+> 但可以通过CSM - List Submodules VI来获取模块`ModuleA`的所有逻辑上的子模块,包括`ModuleA.SubmoduleB`。
+>
+> 需要注意的是,ModuleA也可以不实际存在,仅作为逻辑分组,例如:
+> 模块Group.SubModuleA和Group.SubModuleB是两个不同的模块,从代码逻辑上看,它们是完全独立的,互不干扰。
+> 但可以通过CSM - List Submodules VI来获取`Group`的所有逻辑上的子模块,包括`Group.SubModuleA`和`Group.SubModuleB`。
+>
+> 协作者模式、责任链模式的CSM模块名称, 也可以包含`.`, 因为只是逻辑分组,不影响模块的运行。
+
+### Concatenate Submodule Name.vi
+拼接生成子模块名。
+
+-- 输入控件(Controls) --
+- CSM Name: CSM模块名称。
+- Name: 要拼接的名称。
+
+-- 输出控件(Indicators) --
+- Submodule Name: 拼接生成的子模块名。
+
+## 工作者模式 (Work Mode API)
+> [!NOTE]
+> CSM工作者模式(Worker Mode)
+>
+> 一个CSM模块,通过实例化多个实例,申请的名称后添加`#`,并共享相同的消息队列,实现工作者模式。
+> - 从外部调用上看,这些实例一起组成了一个复合的模块,命名为Worker Agent。
+> - 每一个实例,命名为Worker。
+>
+> 行为:
+> 外部调用者可以认为Worker Agent就是一个CSM模块,可以进行消息通讯、状态注册等操作。从内部看,空闲的Worker会从Worker Agent消息队列中取出消息,处理消息。因此,工作者模式能够实现一个CSM模块的并发消息处理。
+>
+> 举例:
+>
+> //申请模块名称为module#,module是Worker Agent名称,实例化2个实例,这2个实例的名字可能为:
+> // - module#59703F3AD837
+> // - module#106A470BA5EC
+> // 不能直接和Worker进行通讯,需要和Worker Agent通讯,例如:
+> csm message >> arguments -@ module //同步消息,空闲的Worker将处理此消息。
+> csm message >> arguments -> module //同步消息,空闲的Worker将处理此消息。
+>
+> 应用场景:
+> - 10086接线员的场景
+> - 下载器并发下载的场景
+> - 编译器并发编译的场景
+> - TCP Server处理多个Client连接
+
+### CSM - Mark As Worker Module.vi
+在CSM名称后添加`#`,以标记此模块为协作者模式模块。
+
+参考范例: `4. Advance Examples\1. Action Workers Example`。
+
+> - Ref: 名称拼接API
+> - Ref: CSM工作者模式(Worker Mode)
+
+-- 输入控件(Controls) --
+- CSM Name: CSM模块名称。
+
+-- 输出控件(Indicators) --
+- CSM Name (Marked As Worker): 添加`#`标记的CSM模块名称。
+
+## 责任链模式 (Chain of Responsibility API) - 待完善
+
+> [!NOTE]
+> CSM责任链模式(Chain of Responsibility Mode)
+>
+> 多个CSM模块,申请的名称后添加`$`,组成处理事务的一个链条,通过责任链模式形成一个完整的模块。
+> - 从外部调用上看,这些实例一起组成了一个复合的模块,命名为Chain。
+> - 每一个实例,命名为Chain Node。
+>
+> 行为:
+> 外部调用者可以认为Chain就是一个CSM模块,可以进行消息通讯、状态注册等操作。从内部看,nodes会根据排列顺序依次尝试处理消息,当node具有当前消息处理的能力时,消息被处理,不再向后传递。
+>
+> 举例:
+>
+> //申请模块名称为module$, module是chain名称,实例化4个实例,这四个实例的名字可能为:
+> // - module$1
+> // - module$2
+> // - module$3
+> // - module$4
+> // 组成的Chain顺序为module$1(head) >> module$2 >> module$3 >> module$4(tail)
+> // 假设module$3 module$4能够处理"csm message"
+> csm message >> arguments -@ module
+> // 这个消息将被module$3处理, module$4不会响应
+>
+> 应用场景:
+> - 权限审批过程,按照职位层级,具有某职能权限的人员,就可以直接审批,无需继续传递。
+> - 功能拼接,不同模块实现不同的任务,通过拼接可以完成不同功能合集的组合。
+> - 功能覆盖,通过覆盖实现OOP中的重载。
+> - 工作者模式的场景,通常不适合具有界面操作。
+
+### CSM - Mark As Chain Module.vi
+
+拼接责任链模式模块的名称,使用`$`作为分隔符。注意Order不必连续,但是必须唯一,编号小的节点,将排列在责任链的前面。
+
+参考范例: `4. Advance Examples\2. Chain of Responsibility Example`。
+
+> - Ref: CSM责任链模式(Chain of Responsibility Mode)
+> - Ref: 名称拼接API
+
+-- 输入控件(Controls) --
+- CSM Name: CSM模块名称。
+- Order: 责任链模式下的顺序,编号小的节点,将排列在责任链的前面。
+
+-- 输出控件(Indicators) --
+- CSM Name (Marked As Chain): 添加`$`标记的CSM模块名称。
+
+### CSM - Resolve Node Module.vi
+通过将高级模式的节点名称解析出对应的CSM模块名称。
+
+例如:
+- 工作者模式节点的名称为`module#59703F3AD837`,得到的结果是`module`。
+- 责任链模式节点的名称为`module$1`,得到的结果是`module`。
+
+-- 输入控件(Controls) --
+- CSM Module Name: CSM模块名称。
+- Node Name: 节点名称。
+
+## 多循环模式支持(Multi-Loop Support)
+
+> [!NOTE]
+> CSM多循环模式(Multi-Loop Mode)
+>
+> 在有些场景下,适合使用多个循环构成同一个CSM模块,例如:
+> - 一段已有的功能代码上改造为CSM模块,例如TCP连接循环、DAQmx数据采集循环,为了保证原本的逻辑清晰,可以在已有的代码包裹While循环,再附加CSM通讯循环,实现改造功能。
+> - 在实时要求高的情况,需要使用定时循环实现,则需要CSM循环作为通讯接口,定时循环作为功能循环的实现方案。
+> - 在界面操作非常复杂的情况下,建议将界面操作和CSM通讯循环分离,界面操作循环处理界面操作,产生模块间的消息,CSM循环作为实际功能循环。
+>
+> 多循环支持模式API用于此场景下在模块内部循环间传递内部消息,或提供非CSM循环的CSM接口功能。
+>
+
+### CSM - Request CSM to Post Message.vi
+申请CSM模块给出异步消息。此API主要用于CSM多循环模式下,其他模块中申请CSM发出消息。
+
+在此场景下,通常也可以使用CSM - Post Message VI,但是它发送的时刻无法确定,而且也不能获得异步消息的返回值。此VI是一个补充。
+
+参考范例:`4. Advance Examples\5. Multi-Loop Module Example\TCP Server Module(Multi-Loop Support).vi`。
+
+> - Ref: CSM多循环模式(Multi-Loop Mode)
+
+-- 输入控件(Controls) --
+- Module Name: 发送状态的CSM。
+- State: 消息名称。
+- Arguments (""): 将被广播的状态参数。
+- Without Reply? (F): 是否需要返回。当需要返回时,发出的是异步消息;不需要返回时,发出的是异步无返回消息。
+- Target Module ("" By Default): 目标模块。
+- Immediately? (F): 立即执行选项。立即发送会让此消息在CSM循环中立即被处理,而不是等待CSM循环中现存的消息执行完毕。
+
+### CSM - Request CSM to Broadcast Status Change.vi
+申请CSM发送广播。此API主要用于CSM多循环模式下,其他模块中申请CSM发出广播,通知其他模块状态改变。
+
+> [!WARNING]
+> 只要知道模块名称, 您可以在CSM模块外部,使用这个VI伪装这个模块发出广播消息,但是这样做是不推荐的,因为这种逻辑会让整体的逻辑变得混乱,提高调试的难度。因此只建议在CSM多循环模式下使用此VI。
+
+参考范例:`4. Advance Examples\5. Multi-Loop Module Example\TCP Server Module(Multi-Loop Support).vi`。
+
+> - Ref: CSM多循环模式(Multi-Loop Mode)
+
+-- 输入控件(Controls) --
+- Module Name: 发送状态的CSM。
+- Status: 将被广播的状态。
+- Arguments (""): 将被广播的状态参数。
+- Broadcast? (T): 控制是否广播的开关输入。
+- Immediately? (F): 立即执行选项。立即发送会让此消息在CSM循环中立即被处理,而不是等待CSM循环中现存的消息执行完毕。
+
+### CSM - Forward UI Operations to CSM.vi
+此VI主要应用于多循环模式下,将并行于CSM循环的UI循环中用户操作产生的时间,转发到CSM循环中处理。CSM DQMH-Style Template VI模板就是这个逻辑。
+
+参考范例:`Addons - Loop Support\CSMLS - Continuous Loop in CSM Example.vi`。
+
+> - Ref: CSM多循环模式(Multi-Loop Mode)
+
+-- 输入控件(Controls) --
+- State(s) In (""): 待处理的状态。
+- Name ("" to Use UUID): 模块的名称。
+- High Priority? (T): 立即执行选项。立即发送会让此消息在CSM循环中立即被处理,而不是等待CSM循环中现存的消息执行完毕。
+
+-- 输出控件(Indicators) --
+- States Out: 输入始终为空,是为了在模板中保证连线一致性设置的输出端。
+
+### CSM - Module Turns Invalid.vi
+检查CSM是否已经退出。通常用于和CSM并行的功能循环的跟随CSM循环退出。
+
+CSM高级模式的模块(协作者模式、责任链模式)只有在最后一个节点退出后,才会触发模块退出事件。
+
+-- 输入控件(Controls) --
+- CSM Name: CSM模块名称。
+
+-- 输出控件(Indicators) --
+- Turn Invalid (Exit)?: CSM模块是否已经退出。
diff --git a/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description/VI Description(zh-cn)/VI Description(zh-cn) - 09. Build-in Addons.md b/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description/VI Description(zh-cn)/VI Description(zh-cn) - 09. Build-in Addons.md
new file mode 100644
index 000000000..6c1856b05
--- /dev/null
+++ b/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description/VI Description(zh-cn)/VI Description(zh-cn) - 09. Build-in Addons.md
@@ -0,0 +1,191 @@
+# 内置插件(Build-in Addons)
+
+## CSM WatchDog Addon
+
+> [!NOTE]
+> CSM WatchDog实现的原理
+>
+> LabVIEW VI退出时,会自动释放所有队列、事件等句柄资源。因此,您可以通过创建一个WatchDog线程,监控一个由主程序VI申请创建的队列资源,当这个队列资源在主VI退出后被释放时,触发WatchDog线程给还未退出的CSM模块发送`Macro: Exit`,保证他们正常的退出。
+
+### CSM - Start Watchdog to Ensure All Modules Exit.vi
+启动CSM Watchdog线程,用于监控主程序是否退出。一般在主程序启动后立即执行。
+
+应用场景: 用于保证在主程序退出后,所有的异步启动的CSM模块都能正常退出。
+
+> - Ref: CSM WatchDog实现的原理
+
+### CSM Watchdog Thread.vi
+CSM Watchdog线程,用于保证在主程序退出后,所有的异步启动的CSM模块都能正常退出。
+
+> - Ref: CSM WatchDog实现的原理
+
+-- 输入控件(Controls) --
+- Watchdog Queue: Watchdog队列资源。
+
+## CSM File Logger Addon
+
+### CSM - Start File Logger.vi
+启动CSM Global Log文件记录后台线程,用于将应用中的全部运行记录保存到指定的文本文件中。
+
+> [!NOTE]
+> CSM File Logger实现的原理
+>
+> 通过CSM的Global Log API,获取应用中的全部运行记录,并保存到指定的文本文件中,用于后期分析和错误定位。文件格式为文本文件,后缀名为`.csmlog`,可以通过记事本等文本编辑查询工具打开。
+
+> [!NOTE]
+> 记录文件限制
+>
+> 为了防止长期运行的软件导致记录文件过大,我们设置了记录文件的大小限制和文件数量限制。
+> - File Size为单个文件的最大大小,单位为字节(byte),默认为10 MB;
+> - File Num为LOG文件最多个数,默认值为2。
+>
+> 当记录文件大小超过File Size限制时,会创建一个新的文件记录;当记录文件个数超过File Num限制时,会删除最早的文件记录。
+
+> - Ref: 全局日志过滤规则
+
+参考范例: `Addons - Logger\CSM Application Running Log Example.vi`。
+
+-- 输入控件(Controls) --
+- Log File Path: 记录文件路径。
+- Timestamp format: 时间格式,默认为`%<%Y/%m/%d %H:%M:%S%3u>T`。
+- Log Limit: 记录文件大小限制。File Size为单个文件的最大大小,单位为字节(byte),默认为10MB;File Num为LOG文件最多个数,默认值为2。
+- Filter Rules: 过滤规则,通过CSM - Convert Filter Rules VI进行配置。
+- Enable? (T): 是否启用文件记录功能,默认为启用,当输入为FALSE时,文件记录功能不启用。
+- WatchDog? (T): 是否启用 WatchDog功能,默认启用,当调用的VI退出后,分配的WatchDog资源会自动释放,触发记录线程也会自动退出;也可以手动释放WatchDog资源,触发记录线程也会自动退出。
+- Exit When All Module Exist? (F): 全部CSM模块退出后自动退出记录。默认不启用。如果启用该选项,在主程序不是CSM时,在运行中所有的CSM模块都退出,记录线程也会自动退出。
+
+-- 输出控件(Indicators) --
+- Log File: CSM lOG文件路径。
+- Watchdog Queue: WatchDog资源句柄。
+
+### CSM-Logger-Thread.vi
+CSM - Start File Logger VI中使用的线程VI。
+
+> - Ref: CSM File Logger实现的原理
+
+### CSM-Logger-Thread(Event).vi
+CSM - Start File Logger VI中原本使用的线程VI。已废弃,目前使用CSM-Logger-Thread VI。
+
+> - Ref: CSM File Logger实现的原理
+
+## CSM Loop Support Addon
+
+> [!NOTE]
+> CSM LOOP Support设计的原因
+>
+> 循环是状态机运行的基本单位,它会在状态机运行时不断地执行。用户可以自己通过逻辑来定义循环的条件,也可以使用CSM推荐的Loop Support Addon来定义循环。
+>
+> 通常定义的循环方案,可能会有以下的问题:
+> - 如果在一个Case分支中使用循环实现,会导致状态机的卡死在此状态中,无法正常切换,也不能响应外部的消息;
+> - 如果通过在状态循环的最后一个状态中,继续插入下一个循环的状态,也会导致不能很好的响应外部的消息,且很不直观。
+>
+> Loop Support定义循环的方式,它的优势是可以在循环运行时,依然响应其他事件,而不会阻塞状态机的运行。
+> 使用CSM Loop-Support VIs来定义、附加和终止循环,通过定义特殊的标记,来标识循环对应的状态,和结束状态。
+> 因此,这个插件主要是为了提供一个标准的循环实现方式,解决以上的问题。
+
+### CSMLS - Define Loop State(s).vi
+定义循环操作,通过标记`->`来标识重复循环的状态。这个循环也会在最后添加`->`标记循环的结束。
+
+例如可以定义以下循环:
+
+ DAQ: Initialize
+ DAQ: Start
+ DAQ: Continue Check -> //在此循环中调用CSMLS - Append Continuous State VI重复采集,并等待一段时间,用于循环间隔
+ DAQ: Stop
+ DAQ: Close -> // -> 会自动添加
+
+在循环过程中,同步消息由于优先级高,因此会打断循环,立即执行同步消息。异步消息优先级低,会被出队列后加入`->`标记之后,此时经过`DAQ: Continue Check`中的CSMLS - Append Continuous State VI,会将`->`标记之后的状态提到队列前端,这样就会在循环过程中响应异步消息了。
+
+可以通过移除`->`来表示循环已结束,两个API可供选择:
+- CSMLS - Remove Loop Tag and previous State(s) to Break VI: 移除`->`标记所在行以及之前的所有状态,用于跳出循环。
+- CSMLS - Remove Loop Tag to Break VI: 移除`->`标记所在行,用于跳出循环。
+
+参考范例: `Addons - Loop Support\CSMLS - Continuous Loop in CSM Example.vi`。
+
+> - Ref: CSM Loop Support设计的原因
+
+> [!WARNING]
+>
+> Add to Front? (F) 通常为FALSE,因为循环状态一旦开始,就不会立即结束,插入状态队列前,会被认为是当前状态的子状态,此时如果当前状态如果是以同步消息调用,就不会立即返回。例如: 假如`API: Start DAQ`中,定义了一组连续采集的状态,此时外部同步发送该消息,逻辑应为启动循环,然后立即返回。只有逻辑为等待循环结束后返回,才设置Add to Front? (F)为TRUE。
+
+-- 输入控件(Controls) --
+- States Queue: 整个状态队列被连接到此输入。
+- Loop States: 循环状态。
+- Add to Front? (F): 是否添加到所有状态前,通常为FALSE。
+
+-- 输出控件(Indicators) --
+- Remaining States: 处理后的消息队列。
+
+### CSMLS - Append Continuous State.vi
+添加循环状态,维持循环继续运行。
+
+参考范例: `Addons - Loop Support\CSMLS - Continuous Loop in CSM Example.vi`。
+
+-- 输入控件(Controls) --
+- States Queue: 整个状态队列被连接到此输入。
+- Loop State(s) and Arguments: 循环状态。
+- Continuous State: 循环状态名称。
+- Continuous Arguments (""): 循环状态参数。
+- Append(T): 是否添加。
+
+-- 输出控件(Indicators) --
+- Remaining States: 剩余的消息队列。
+
+### CSMLS - Remove Loop Tag and previous State(s) to Break.vi
+通过移除``标记和``标记前的所有状态,达到停止循环。
+
+举例: 假如CSM的消息队列中,还存在以下消息,此时执行当前API操作,将移除注释所在的消息。
+
+ DAQ: Acquire //将被移除
+ DAQ: Continuous Check -> //将被移除
+ DAQ: Stop
+ DAQ: Close
+
+相当于不会执行任何DAQ操作,立即直接进入停止和释放。
+
+-- 输入控件(Controls) --
+- States Queue: 整个状态队列被连接到此输入。
+
+-- 输出控件(Indicators) --
+- Remaining States: 剩余的消息队列。
+
+### CSMLS - Remove Loop Tag to Break.vi
+通过移除``标记,达到停止循环。
+
+举例: 假如CSM的消息队列中,还存在以下消息,此时执行当前API操作,将移除注释所在的消息。
+
+ DAQ: Acquire
+ DAQ: Continuous Check -> //将被移除
+ DAQ: Stop
+ DAQ: Close
+
+相当于依然会执行当前的DAQ操作,然后进入停止和释放。
+
+-- 输入控件(Controls) --
+- States Queue: 整个状态队列被连接到此输入。
+
+-- 输出控件(Indicators) --
+- Remaining States: 剩余的消息队列。
+
+### CSMLS - Add Exit State(s) with Loop Check.vi
+退出时检查循环标记。由于这个VI很容易忘记调用,因此已经在Parse State Queue++ VI中针对`Macro: Exit`状态添加了调用。因此已从函数选板移除。
+
+-- 输入控件(Controls) --
+- States Queue: 整个状态队列被连接到此输入。
+- Exiting States: 退出所需的状态。
+
+-- 输出控件(Indicators) --
+- Remaining States: 处理后的消息队列。
+- Found: 找到 标记。
+
+## CSM Attributes 补充功能
+
+### CSM Set Module Attribute.vim
+此API提供CSM - Set Module Attribute VI自动适应输入数据类型的版本。
+
+> - Ref: CSM - Set Module Attribute.vi
+
+### CSM Get Module Attribute.vim
+此API提供CSM - Get Module Attribute VI自动适应输入数据类型的版本。
+
+> - Ref: CSM - Get Module Attribute.vi
diff --git a/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description/VI Description(zh-cn)/VI Description(zh-cn) - 10. Utility VIs.md b/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description/VI Description(zh-cn)/VI Description(zh-cn) - 10. Utility VIs.md
new file mode 100644
index 000000000..5f55fe4d9
--- /dev/null
+++ b/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description/VI Description(zh-cn)/VI Description(zh-cn) - 10. Utility VIs.md
@@ -0,0 +1,171 @@
+# CSM API
+
+## 工具VI(Utility VIs)
+
+## 状态字符串操作
+
+### CSM - Compact Multiple States.vi
+将多个状态紧凑成单个字符串以供输入使用。
+
+> - Ref: CSM 消息拼接API
+
+-- 输入控件(Controls) --
+- Multiple States: CSM状态字符串数组。
+
+-- 输出控件(Indicators) --
+- States: 包含多行CSM状态字符串的字符串。
+
+### CSM - Break Down Multiple States String.vi
+将包含多行CSM状态字符串的字符串切割成CSM状态字符串数组。
+
+-- 输入控件(Controls) --
+- States: 包含多行CSM状态字符串的字符串。
+
+-- 输出控件(Indicators) --
+- Multiple States: CSM状态字符串数组。
+
+### CSM - Build Exit Messages of CSMs.vi
+输入CSM模块名称,拼接生成退出消息(`Macro: Exit`)。
+
+> - Ref: CSM 消息拼接API
+
+-- 输入控件(Controls) --
+- CSMs: CSM模块名称数组。
+- State with Arguments("Macro: Exit"): 退出消息。
+
+-- 输出控件(Indicators) --
+- States: 拼接生成的CSM消息字符串。
+
+### CSM - Filter Duplicate Messages By Name.vi
+过滤重复的消息,只保留最新的消息。
+
+> - Ref: CSM 的状态队列操作API
+
+-- 输入控件(Controls) --
+- States: 输入的消息字符串。
+- Whole Messages in Check?(T): 是否检查整个消息字符串。如果是FALSE,则只检查消息名称。
+
+-- 输出控件(Indicators) --
+- Filtered States: 过滤后的消息字符串。
+
+### CSM - Remove Duplicated Following Messages.vi
+
+> - Ref: CSM 的状态队列操作API
+
+-- 输入控件(Controls) --
+- Current State:
+- Remaining States:
+
+-- 输出控件(Indicators) --
+- Remaining States Left:
+- Current State: Controls
+- Remaining States Left: Indicators
+
+## 数据类型字符串描述
+
+### CSM Data Type String.vi
+获取输入数据对应的数据类型描述字符串,通常用在参数描述中,用于判断参数携带的参数类型。
+
+-- 输入控件(Controls) --
+- Data: 输入数据。
+
+-- 输出控件(Indicators) --
+- Data Type String: 数据类型描述字符串。
+
+### CSM Data Type String to Enum.vi
+从数据类型描述字符串中LabVIEW定义的数据类型枚举。
+
+> [!NOTE]
+> 多态VI(Polymorphic VI)选项
+> - CSM Data Type String to Enum(String).vi
+> - CSM Data Type String to Enum(TypeEnum).vi
+> - CSM Data Type String to Enum(RefnumEnum).vi
+
+#### CSM Data Type String to Enum(String).vi
+从数据类型描述字符串中LabVIEW定义的数据类型枚举,子类型使用字符串描述。
+
+-- 输入控件(Controls) --
+- Data Type String: 输入的数据类型描述字符串。
+
+-- 输出控件(Indicators) --
+- Primary Type: 数据类型枚举。
+- Secondary Type String: 如果是复合的数据类型,返回子类型字符串,例如Array数据类型中的元素类型。
+- Array Dim: 如果是数组数据类型,返回数组维度。
+
+#### CSM Data Type String to Enum(TypeEnum).vi
+从数据类型描述字符串中LabVIEW定义的数据类型枚举,并返回Array子类型使用枚举。
+
+-- 输入控件(Controls) --
+- Data Type String: 输入的数据类型描述字符串。
+
+-- 输出控件(Indicators) --
+- Primary Type: 数据类型枚举。
+- Secondary Type String: Array子类型枚举。
+- Array Dim: 如果是数组数据类型,返回数组维度。
+
+#### CSM Data Type String to Enum(RefnumEnum).vi
+从数据类型描述字符串中LabVIEW定义的数据类型枚举,并返回Refnum子类型使用枚举。
+
+-- 输入控件(Controls) --
+- Data Type String: 输入的数据类型描述字符串。
+
+-- 输出控件(Indicators) --
+- Primary Type: 数据类型枚举。
+- Secondary Type String: Refnum子类型枚举。
+- Array Dim: 如果是数组数据类型,返回数组维度。
+
+## 其他工具VI
+
+### uuid.vi
+根据标准方法生成Universally Unique Identifier (UUID)。 例如:
+- 59703F3AD837
+- 106A470BA5EC
+- 9B781DB313AF
+
+-- 输出控件(Indicators) --
+- UUID: 生成的UUID。
+
+### String History Cacher.vi
+保存当前输入的字符串到缓存,缓存的历史字符串,当超出最大长度限制时,最先进入的缓存字符串将被覆盖。用于调试CSM的历史状态。
+
+-- 输入控件(Controls) --
+- String: 待缓存字符串。
+- length: 缓存的历史字符串最大字符串长度。
+- Include Timestamp? (T): 是否在每行开头包含时间戳。
+- Format String: 时间戳的格式。
+
+-- 输出控件(Indicators) --
+- String Cache: 缓存的历史字符串。
+
+### Random Change Flag.vi
+生成一个随机的数值,用于标记状态的变化,CSM中为了提高效率,有些地方的缓存(cache)利用这个标记来判断是否需要更新。
+
+-- 输出控件(Indicators) --
+- Random Change Flag: 生成的随机数值。
+
+### State Triggered Reason.vi
+从Parse State Queue++ VI的输出Additional Information和Source CSM推断出触发当前状态的原因。
+
+结果可能是:
+- LocalCall: 本地调用,非外部触发
+- Message: 外部消息触发
+- Broadcast: 由广播触发
+
+-- 输入控件(Controls) --
+- Additional Information: 此状态的额外信息。
+- Source CSM: 源模块信息。
+
+-- 输出控件(Indicators) --
+- Additional Information (dup): 输入的额外信息副本。
+- Source CSM (dup): 输入的源模块信息副本。
+- Reason: 触发当前状态的原因。
+
+### Format Timestamp.vi
+格式化时间戳为指定的字符串格式, 此VI为CSM Global Log中使用。
+
+-- 输入控件(Controls) --
+- Timestamp: 时间戳,单位为秒。
+- Format String: 时间戳格式字符串,例如: `%<%Y/%m/%d %H:%M:%S%3u>T`。
+
+-- 输出控件(Indicators) --
+- String: 格式化后的时间戳字符串。
diff --git a/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description/VI Description(zh-cn)/VI Description(zh-cn) - 11. Obselete VIs.md b/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description/VI Description(zh-cn)/VI Description(zh-cn) - 11. Obselete VIs.md
new file mode 100644
index 000000000..ce3221209
--- /dev/null
+++ b/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description/VI Description(zh-cn)/VI Description(zh-cn) - 11. Obselete VIs.md
@@ -0,0 +1,63 @@
+# CSM API
+
+## 废弃的VIs
+
+### Replace Tag with Array.vi
+
+此VI将不再维护,请使用 `CSM - Replace Mark with String Array.vi`
+
+> - Ref: CSM - Replace Mark with String Array.vi
+
+### CSM - Forward States to CSM.vi
+
+此VI不再维护,请使用 `CSM - Forward UI Operations to CSM.vi`
+
+> - Ref: CSM - Forward UI Operations to CSM.vi
+
+### CSM - Check Status Registration.vi
+
+此VI不再维护,请使用 `CSM - Check Mapping Relationship in Broadcast Registry.vi`
+
+> - Ref: CSM - Check Mapping Relationship in Broadcast Registry.vi
+
+### CSM - List Status in Broadcast Registry.vi
+
+此VI不再维护,请使用 `CSM - List Sources in Broadcast Registry.vi`
+
+> - Ref: CSM - List Sources in Broadcast Registry.vi
+
+### CSM - Replace Substitution Marks in Messages.vi
+
+此VI不再维护,请使用 `CSM - Replace Marks in Messages.vi`
+
+> - Ref: CSM - Replace Marks in Messages.vi
+
+### CSM - Register Status Change.vi
+
+此VI不再维护,请使用 `CSM - Register Broadcast.vi`
+
+> - Ref: CSM - Register Broadcast.vi
+
+### CSM - Unregister Status Change.vi
+
+此VI不再维护,请使用 `CSM - Unregister Broadcast.vi`
+
+> - Ref: CSM - Unregister Broadcast.vi
+
+### Build Interrupt Status Message.vi
+
+此VI不再维护,请使用 `CSM - Build Interrupt Broadcast Message.vi`
+
+> - Ref: CSM - Build Interrupt Broadcast Message.vi
+
+### Build Normal Status Message.vi
+
+此VI不再维护,请使用 `CSM - Build Status Broadcast Message.vi`
+
+> - Ref: CSM - Build Status Broadcast Message.vi
+
+### Build State String with Arguments++.vi
+
+此VI不再维护,请使用 `Build Message with Arguments++.vi`
+
+> - Ref: Build Message with Arguments++.vi
diff --git a/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description/VI Description(zh-cn)/VI Description(zh-cn) - 12. Debug,Doc,Tools.md b/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description/VI Description(zh-cn)/VI Description(zh-cn) - 12. Debug,Doc,Tools.md
new file mode 100644
index 000000000..b7674c6b1
--- /dev/null
+++ b/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description/VI Description(zh-cn)/VI Description(zh-cn) - 12. Debug,Doc,Tools.md
@@ -0,0 +1,54 @@
+# CSM API
+
+## CSM Debug Tools
+
+### ɨ"VI Reference" ֧(CSM - Add VI Reference Case to CSMs.vi)
+
+CSM ģб"VI Reference" ֧ⲿȡVIáڵģвcase˹
+
+˹ɨ lvproj Ŀ¼е VI VI CSM ģ飬гȻѡ "VI Reference" ֧
+
+### CSMԿ̨(CSM - Debug Console - DebugTool.vi)
+
+CSM Կ̨ʹô˹ߣ
+
+1. ѡе CSM ʵǰ塢塣
+2. ɨе CSM ʵAPIӿڡ
+3. ѡһAPIӿڣͬ첽ã鿴ֵ
+4. 鿴־
+
+### Ƴ CSM ģеǩ(CSM - Remove all CSM Bookmarks.vi)
+
+Ƴ CSM ģеǩ
+
+### ־ʵʱ鿴(CSM - Running Log - DebugTool.vi)
+
+CSM־ʵʱ鿴ߡ
+
+### ʵʱ״̬(CSM - State Dashboard - DebugTool.vi)
+
+CSMģʵʱ״̬塣
+
+### ʵʱ״̬(CSM - State Table - DebugTool.vi)
+
+<> CSMģʵʱ״̬
+
+### л CSM ģ VIע͵(CSM - Switch Language Tool.vi)
+
+л CSM ģ VIע͵ԡĿǰ֧ġӢġ
+
+### JKISM State Editor Ҽ˵(CSM - Fix JKISM Editor RCM Entry.vi)
+
+ JKISM State Editor Ҽ˵ CSMвܵ⡣
+
+### ĿĿ¼ CSM ģĺѡ(CSM - Create CSM Palette at Root.vi)
+
+ĿĿ¼ CSM ģĺѡ塣
+
+### CSM ʾ(CSM - Example Browser.vi)
+
+CSM ʾ CSM ʾ
+
+## CSMӿ(CSM - Interface Browser.vi)
+
+ CSM ģӿڵĹߣٲ鿴Ŀ CSM ģ API ӿڡ
diff --git a/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description/VI Description(zh-cn)/VI Description(zh-cn) - Addon API String.md b/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description/VI Description(zh-cn)/VI Description(zh-cn) - Addon API String.md
new file mode 100644
index 000000000..7d2b4857b
--- /dev/null
+++ b/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description/VI Description(zh-cn)/VI Description(zh-cn) - Addon API String.md
@@ -0,0 +1,327 @@
+# CSM API String Addon
+
+> [!NOTE]
+>API String参数支持
+>
+> API String参数支持用于增强通信状态机(CSM)的API参数功能,支持以纯文本格式传递各种数据类型,并特别优化了手动输入体验。API String未定义参数类型(Argument Type),通过CSM - Argument Type VI获取的结果为空,通常在默认分支中处理。支持的数据类型包括:
+> - 字符串(String)
+> - 路径(Path)
+> - 布尔值(Boolean)
+> - 标签(Tag)
+> - 引用号(Refnum,包括IVI/VISA/UserDefinedRefnumTag)
+> - 整数(I8, I16, I32, I64, U8, U16, U32, U64)
+> - 浮点数(DBL/SGL)
+> - 复数(DBL/SGL)
+> - 时间戳(Timestamp)
+> - 枚举(Enum)
+> - 数组(Array)
+> - 簇(Cluster)
+> - 其他类型(使用 CSM-Hexstr 表示)
+>
+> 更多详细信息请访问: https://github.com/NEVSTOP-LAB/CSM-API-String-Arguments-Support
+>
+> 或参考范例,所有数据类型均有详细说明和示例。
+
+> [!NOTE]
+> TRUE值的默认字符串
+>
+> 支持`1`, `Active`, `Enable`, `Non-null`, `On`, `T`, `True`, `valid`, `yes`
+> 不区分大小写
+
+> [!NOTE]
+> FALSE值的默认字符串
+>
+> 支持`0`, `Disable`, `F`, `False`, `Inactive`, `Invalid`, `No`, `Off`, `Void`, `null`
+> 不区分大小写
+
+> [!NOTE]
+> 浮点数默认格式
+>
+> 浮点数默认格式为`%.6p`。
+
+> [!NOTE]
+> 带索引的枚举类型(Indexed Enum)
+>
+> 格式为`[索引编号(index)][分隔符(separator)][枚举字符串]`,索引编号支持多种数值表示方式
+>
+> 索引编号使用`==`分隔符示例:
+> `1 == boolean | 2 == string | 4 == dbl | 8 == number`
+>
+> 索引编号使用`--`分隔符示例:
+> `0x01 -- boolean | 0x02 -- string | 0x04 -- dbl | 0x08 -- number`
+>
+> 索引编号使用`__`分隔符示例:
+> `0b0001 __ boolean | 0b0100 __ dbl | 0b1000 __ number`
+
+## API String 核心功能
+
+### API String - Is Supported Datatype.vi
+判断数据类型是否为API String支持的转换数据类型。
+
+> - Ref: API String参数支持
+> - Ref: CSM HEXSTR格式
+
+-- 输入控件(Controls) --
+- Data: 输入数据。
+
+-- 输出控件(Indicators) --
+- Data(Dup): 输入数据副本。
+- Supported Datatype?: 是否支持API String的布尔值。
+
+### Convert Data To API String Arguments.vim
+将数据转换为API String格式。
+
+> - Ref: API String参数支持
+
+-- 输入控件(Controls) --
+- Data: 输入数据。
+- Reference Cluster Data: 参考簇数据,转换簇数据时,会比较输入数据和参考数据中的元素,若完全匹配,则转换结果将忽略该元素。
+- No Tag Mode? (F): 对于簇数据,当为TRUE时,转换为API String时不包含标签信息。
+
+-- 输出控件(Indicators) --
+- API String: 转换后的API String格式。
+
+### Convert API String Arguments to Data.vim
+将API String转换为相应的数据类型。
+
+> - Ref: API String参数支持
+
+-- 输入控件(Controls) --
+- API String: API String格式的输入字符串。
+- Strict Label Check? (T): 严格标签检查,当为TRUE时,若参考数据中不包含标签,转换将失败报错。
+- Reference Type: 参考数据。
+
+-- 输出控件(Indicators) --
+- Data: 转换后的数据。
+
+### Query Data as API String Arguments.vim
+查询簇数据中的指定数据项,并转换为API String格式。
+
+应用场景: 例如在API String Addon包含的新CSM模块模板中,新增了`Data: Get Configuration`状态,在此状态下,通过发送希望查询的数据项名称,即可返回对应的数据项值。
+
+特殊情况: 若将Name设置为``,将返回所有可用设置的列表。
+
+-- 输入控件(Controls) --
+- Cluster Data: 簇数据。
+- Name: 数据名称。
+
+-- 输出控件(Indicators) --
+- Cluster Data(dup): 簇数据副本。
+- API String: API String格式的查询结果。
+
+## 配置
+
+### API String - Add Boolean Strings.vi
+将自定义布尔字符串添加到API String布尔值解析列表中,并返回更新后的列表。
+
+> - Ref: TRUE值的默认字符串
+> - Ref: FALSE值的默认字符串
+
+-- 输入控件(Controls) --
+- Custom False Boolean Strings: 自定义FALSE字符串列表。
+- Custom True Boolean Strings: 自定义TRUE字符串列表。
+
+-- 输出控件(Indicators) --
+- False Boolean Strings: 更新后的FALSE字符串列表。
+- True Boolean Strings: 更新后的TRUE字符串列表。
+
+### API String - Remove Boolean Strings.vi
+从API String布尔值解析列表中移除自定义布尔字符串,并返回更新后的列表。
+
+> - Ref: TRUE值的默认字符串
+> - Ref: FALSE值的默认字符串
+
+-- 输入控件(Controls) --
+- Custom False Boolean Strings: 要移除的FALSE字符串列表。
+- Custom True Boolean Strings: 要移除的TRUE字符串列表。
+
+-- 输出控件(Indicators) --
+- False Boolean Strings: 更新后的FALSE字符串列表。
+- True Boolean Strings: 更新后的TRUE字符串列表。
+
+### API String - List Boolean Strings.vi
+列出当前所有可用的布尔值字符串。
+
+> - Ref: TRUE值的默认字符串
+> - Ref: FALSE值的默认字符串
+
+-- 输出控件(Indicators) --
+- False Boolean Strings: 当前的FALSE字符串列表。
+- True Boolean Strings: 当前的TRUE字符串列表。
+
+### API String - Set Float Format String.vi
+设置浮点数的格式字符串,可参考LabVIEW format string格式。
+
+> - Ref: 浮点数默认格式
+
+-- 输入控件(Controls) --
+- Float Format String Setting: 浮点数格式字符串设置。
+
+-- 输出控件(Indicators) --
+- Float Format String: 当前的浮点数格式字符串。
+
+### API String - Float Format String.vi
+获取当前的浮点数格式字符串。
+
+> - Ref: 浮点数默认格式
+
+-- 输出控件(Indicators) --
+- Float Format String: 当前的浮点数格式字符串。
+
+### API String - Set Float Precision.vi
+设置浮点数的精度。
+
+> [!NOTE]
+> - 默认精度为6位有效数字,格式为`%.6p`。
+> - 此VI是API String - Set Float Format String VI的简化版本,仅用于设置有效数字位数。
+
+> - Ref: 浮点数默认格式
+
+-- 输入控件(Controls) --
+- Precision: 浮点数精度设置。
+
+-- 输出控件(Indicators) --
+- Float Format String: 更新后的浮点数格式字符串。
+
+## 字符串转换
+
+### String to Boolean_csm.vi
+将字符串转换为布尔值。支持多种TRUE/FALSE表示方式,可通过API String - Add Boolean Strings VI添加自定义的TRUE/FALSE字符串。
+
+> - Ref: TRUE值的默认字符串
+> - Ref: FALSE值的默认字符串
+
+-- 输入控件(Controls) --
+- String: 输入字符串。
+- Default (F): 转换失败时的默认值。
+
+-- 输出控件(Indicators) --
+- Boolean: 转换后的布尔值。
+
+### String To Float_csm.vi
+将字符串转换为浮点数。支持多种浮点数格式和单位,可通过API String - Set Float Format String VI设置格式。
+
+> [!NOTE]
+> 空字符串将转换为默认数据。
+> 带有单位的浮点数字符串也支持正确解析。
+> `e`、`-e`、`pi`、`-pi`、`inf`、`+inf`、`-inf`和`NaN`等特殊浮点数值不支持单位。
+
+> - Ref: 浮点数默认格式
+
+-- 输入控件(Controls) --
+- String: 输入字符串。
+- Default (0): 转换失败时的默认值。
+
+-- 输出控件(Indicators) --
+- Float: 转换后的浮点数。
+- Unit String: 提取的单位字符串。
+
+### String To Number(I64)_csm.vi
+将字符串转换为64位整数。支持多种数字格式,包括普通整数、十进制、十六进制、二进制、八进制,以及带后缀的表示方法,转换失败时返回0。
+
+-- 输入控件(Controls) --
+- String: 输入字符串。
+
+-- 输出控件(Indicators) --
+- Numeric: 转换后的64位整数。
+
+### String To Indexed Enum_csm.vi
+将字符串转换为带索引的枚举类型。
+
+> - Ref: 带索引的枚举类型(Indexed Enum)
+
+ _转换规则1: 无索引编号_
+
+ 通过字符串匹配进行转换
+
+ 例如Enum = {AAA, BBBB, CCCC}
+ - 字符串"AAA"将转换为Enum(AAA),数字值为0
+ - 字符串"CCC"将转换为Enum(CCC),数字值为2
+
+ _转换规则2: 有索引编号_
+
+ 既可以通过字符串匹配转换,也可以通过索引编号匹配转换
+
+ 例如Enum = {1- AAA, 5 - BBBB, 9 - CCCC}
+ - 字符串"AAA"将转换为Enum(1- AAA),数字值为0
+ - 字符串"5"将转换为Enum(5 - BBBB),数字值为1
+ - 字符串"9 - CCCC"将转换为Enum(9 - CCCC),数字值为2
+
+-- 输入控件(Controls) --
+- String: 输入字符串。
+- Enum Prototype: 枚举原型。
+
+-- 输出控件(Indicators) --
+- Enum: 转换后的枚举值。
+
+### Indexed Enum to Numeric_csm.vim
+将枚举转换为数值,支持带索引的枚举类型,当枚举数值携带索引编号时,将直接使用索引编号作为数值。
+
+> - Ref: 带索引的枚举类型(Indexed Enum)
+
+-- 输入控件(Controls) --
+- Enum: 输入枚举值。
+
+-- 输出控件(Indicators) --
+- Numeric: 枚举的数字值。
+- String: 枚举的字符串表示。
+
+### Numeric to Indexed Enum_csm.vim
+将数字值转换为带索引的枚举。
+
+规则1: 当匹配到索引编号时,将直接使用该索引。
+
+规则2: 当没有匹配到索引编号时,将使用数字值作为枚举索引。
+
+> - Ref: 带索引的枚举类型(Indexed Enum)
+
+-- 输入控件(Controls) --
+- Numeric: 输入数字值。
+- Enum Prototype: 枚举原型。
+
+-- 输出控件(Indicators) --
+- Enum: 转换后的枚举值。
+
+### CSM - Timestamp to API String Arguments.vi
+将LabVIEW时间戳转换为API String字符串。
+
+-- 输入控件(Controls) --
+- Timestamp (now): 输入时间戳,默认为当前时间。
+- Format(Empty to use UTC): 时间格式字符串,为空时使用UTC格式。
+
+-- 输出控件(Indicators) --
+- API String: 转换后的API String格式。
+
+## 工具函数
+
+### CSM - Convert HexStr to Data.vim
+提供CSM - Convert HexStr to Data VI自适应数据类型的版本。
+
+-- 输入控件(Controls) --
+- HEX String: HEX格式字符串。
+- Type: 数据类型。
+
+-- 输出控件(Indicators) --
+- data: 转换后的数据。
+
+### CSM - Broadcast Data As API String.vim
+使用CSM - Generate User Global Log VI将数据以API String格式广播。
+
+-- 输入控件(Controls) --
+- Data: 要广播的数据。
+- CSM: CSM模块引用。
+- API/Condition: API或条件字符串。
+
+-- 输出控件(Indicators) --
+- Data (dup): 数据副本。
+
+### CSM - Query Internal Data Names By API String.vi
+查询CSM模块的内部数据名称。实现逻辑: 使用同步消息发送`Data: Get Internal Data`命令,参数为``,获取CSM模块的内部数据名称列表。
+
+-- 输入控件(Controls) --
+- Target Module: CSM 目标模块。
+- Current Module ("" to Generate an ID): 当前模块(空字符串表示生成ID)。
+- Wait (5000ms): 等待时间(毫秒)。
+
+-- 输出控件(Indicators) --
+- Configurations: 配置列表。
diff --git a/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description/VI Description(zh-cn)/VI Description(zh-cn) - Addon INI-Variable.md b/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description/VI Description(zh-cn)/VI Description(zh-cn) - Addon INI-Variable.md
new file mode 100644
index 000000000..2ce61240d
--- /dev/null
+++ b/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description/VI Description(zh-cn)/VI Description(zh-cn) - Addon INI-Variable.md
@@ -0,0 +1,325 @@
+# CSM INI-Variable Addon
+
+> [!NOTE]
+> CSM INI-Variable Addon
+>
+> 配置文件是应用程序开发中不可或缺的组成部分。CSM INI-Variable Addon为CSM提供简单易用的配置文件支持功能,使用户能够配置应用程序而无需显式读写配置文件。
+>
+> CSM INI-Variable配置文件数据的格式使用CSM API String格式。
+>
+> 主要特点包括:
+> 1. 默认配置处理: 首次调用库函数时自动加载默认配置文件,无需用户显式加载。
+> 2. 多文件支持: 通过专用函数支持加载多个配置文件。
+> 3. 内存缓存: 在内存中维护一个缓存副本,应用程序从该缓存中获取配置信息。
+> 4. INI格式兼容: 配置文件和内存副本均采用标准INI格式,支持节和键值对。
+> 5. 高效缓存机制: 使用全局修改标记优化性能,仅在配置发生修改时才重新读取内存副本。
+>
+> 本库包含并使用了由[@rcpacini](https://github.com/rcpacini)开发的[LabVIEW-Config](https://github.com/rcpacini/LabVIEW-Config)的副本。
+
+> [!NOTE]
+> CSM INI-Variable变量格式
+>
+> 格式定义: `${section.variable:defaultValue}`
+> - `${}`: 变量引用语法。
+> - `section`(可选): 配置文件中的节名。
+> - `variable`: 配置文件中的变量名。
+> - `defaultValue`(可选): 默认值,当变量不存在时使用。
+>
+> 说明:
+> - 支持嵌套的变量引用,例如`${section1.variable1:${section2.variable2:defaultValue2}}`。
+> - `section`参数为可选。省略时,使用默认配置段 `SectionName=LabVIEW`。
+> - 默认值为可选,未指定时默认为空字符串("")。
+
+> [!NOTE]
+> CSM INI-Variable配置文件路径
+>
+> - 开发状态: Application Directory中找到的第一个INI配置文件。若不存在配置文件,则默认为`csm-app.ini`。
+> - 编译后: 可执行文件所在目录中与可执行文件同名的INI配置文件。LabVIEW 编译后会自动生成此文件。
+> - 支持载入多个配置文件,后加载的文件会覆盖先前加载文件中的相同配置项。
+> - 配置文件中可以使用`[__include]`节引用其他配置文件
+> - 可以使用相对路径,也可以使用绝对路径。
+> - 使用相对路径时,相对于当前配置文件的路径。
+> - `[__include]`节中的配置文件名称不重要,只需要确保路径正确即可。
+> - 为了避免循环引用,同一个配置文件,第二次加载时会自动忽略。
+
+> [!NOTE]
+> CSM INI-Variable多文件配置场景
+>
+> - 加载多个文件时,后加载的文件会覆盖先前加载文件中的相同配置项。
+> - 将缓存更改保存到文件时,修改会保存到最后加载的配置文件中。
+
+> [!WARNING]
+> CSM INI-Variable缓存机制警告
+>
+> 请注意,由于本库使用全局缓存修改标志,频繁的配置更改会降低读取VI中缓存机制的有效性。因此,本库不建议用于需要频繁修改配置的场景。
+
+## 核心功能 VI
+
+### CSM - Populate Configuration Variables.vi
+在字符串中填充配置变量。
+
+应用场景: 在CSM的脚本中直接使用INI-Variable变量,或充当CSM消息的参数。
+
+参考范例: `1. Used as parameters parsed by CSM.vi`。
+
+> - Ref: CSM INI-Variable Addon
+> - Ref: CSM INI-Variable变量格式
+> - Ref: CSM INI-Variable配置文件路径
+
+-- 输入控件(Controls) --
+- Section Name ("" as Default): 节名,空字符串表示使用默认节。
+- String with INI-Variable: 包含变量引用的输入字符串。
+
+-- 输出控件(Indicators) --
+- String: 填充变量后的输出字符串。
+
+### CSM - Read Configuration Variable.vim
+根据原型读取配置中的变量值。
+- 推荐使用簇作为配置原型,簇中的元素名称对应INI配置文件中的变量名。
+- 如果是其他数据类型,对应的变量名称为`Config`。
+- 如果原型对应的变量在配置中不存在,则根据Write If not found?参数确定是否写入默认值。
+
+应用场景: 直接将INI配置文件中的配置读取成LabVIEW数据。
+
+参考范例: `2. Load the corresponding configuration by providing the prototype.vi`。
+
+> - Ref: CSM INI-Variable配置文件路径
+
+-- 输入控件(Controls) --
+- Configuration Prototype (Cluster Preferred): 配置原型(推荐使用簇)。
+- Section Name ("" as Default): 节名,空字符串表示使用默认节。
+- Write If not found? (F): 如果未找到,是否写入默认值。
+
+-- 输出控件(Indicators) --
+- Configuration: 输出配置值。
+
+### CSM - Read Cluster Elements From Session.vim
+读取配置中的簇数据,数据保存在指定的节(section)中,簇中的元素名称对应节(section)中的键(key)。
+- 如果指定的节(section)不存在,则使用默认节。
+- 如果簇中的元素对应的键(key)不存在,则使用输入原型中的值作为默认值。
+
+应用场景: 直接将INI配置文件中的配置读取成LabVIEW数据。
+
+参考范例: `2. Load the corresponding configuration by providing the prototype.vi`。
+
+> - Ref: CSM INI-Variable配置文件路径
+
+-- 输入控件(Controls) --
+- Cluster: 簇原型。
+- Section Name ("" as Default): 节名,空字符串表示使用默认节。
+
+-- 输出控件(Indicators) --
+- Cluster out: 输出簇。
+
+### CSM - Read Cluster Elements From Key.vim
+读取配置中的簇数据,数据保存在指定的节(section)中的指定键(key),数据以API String格式保存。
+
+应用场景: 直接将INI配置文件中的配置读取成LabVIEW数据。
+
+参考范例: `2. Load the corresponding configuration by providing the prototype.vi`。
+
+> - Ref: CSM INI-Variable配置文件路径
+
+-- 输入控件(Controls) --
+- Cluster: 簇原型。
+- Key: 键名。
+- Section Name ("" as Default): 节名,空字符串表示使用默认节。
+
+-- 输出控件(Indicators) --
+- Cluster out: 输出簇。
+- Key Found?: 键是否存在。
+
+### CSM - Write Configuration Variable.vim
+写入配置变量。
+- 推荐使用簇作为配置原型,簇中的元素名称对应INI配置文件中的变量名。
+- 如果是其他数据类型,对应的变量名称为`Config`。
+
+参考范例: `7. Write and Read Configuration.vi`。
+
+> - Ref: CSM INI-Variable配置文件路径
+> - Ref: CSM INI-Variable缓存机制警告
+
+-- 输入控件(Controls) --
+- Configuration: 要写入的配置数据。
+- Section Name ("" as Default): 节名,空字符串表示使用默认节。
+
+-- 输出控件(Indicators) --
+- Configuration (dup): 写入的配置数据副本。
+
+### Convert API String to Cluster(Default in Session).vim
+将API String字符串转换为簇,数据保存在指定的节(section)中,簇中的元素名称对应节(section)中的键(key)。具有明确的优先级层次: CSM API参数>配置文件参数>默认常量参数。例如,这使得将串口初始化参数固定在配置文件中变得非常简单。
+- 初始化时,显式发送的参数具有最高优先级。
+- 若未发送参数,则使用配置文件中的参数。
+- 在没有配置文件参数的情况下,应用默认常量参数。
+
+应用场景: 用于将CSM的参数固化到配置文件中。
+
+参考范例: `3. In CSM API parameters.vi`。
+
+-- 输入控件(Controls) --
+- API String: API String字符串。
+- Section Name ("" as Default): 节名,空字符串表示使用默认节。
+- Type: 数据类型。
+
+-- 输出控件(Indicators) --
+- Data: 转换后的数据。
+- error: 错误信息。
+
+### Convert API String to Cluster(Default in Key).vim
+将API String字符串转换为簇,数据保存在指定的节(section)中的指定键(key)。具有明确的优先级层次: CSM API参数>配置文件参数>默认常量参数。例如,这使得将串口初始化参数固定在配置文件中变得非常简单。
+- 初始化时,显式发送的参数具有最高优先级。
+- 若未发送参数,则使用配置文件中的参数。
+- 在没有配置文件参数的情况下,应用默认常量参数。
+
+应用场景: 用于将CSM的参数固化到配置文件中。
+
+参考范例: `3. In CSM API parameters.vi`。
+
+-- 输入控件(Controls) --
+- API String: API String字符串。
+- Section Name ("" as Default): 节名,空字符串表示使用默认节。
+- Type: 数据类型。
+- Variable Name: 变量名称。
+
+-- 输出控件(Indicators) --
+- Data: 转换后的数据。
+- error: 错误信息。
+
+## 原始配置信息读取与写入
+
+### CSM - Read All Variable Names.vi
+读取当前内存中所有变量名称。
+
+-- 输入控件(Controls) --
+- Permanent Variables Only? (F): 是否仅读取永久变量。
+
+-- 输出控件(Indicators) --
+- All Variable Names: 变量名称数组。
+
+### CSM - Read Sections.vi
+读取当前内存中所有节名称。
+
+-- 输出控件(Indicators) --
+- Sections: 节名称数组。
+
+### CSM - Read Key Names.vi
+读取指定节中的所有键名。
+
+-- 输入控件(Controls) --
+- Section Name ("" as Default): 节名,空字符串表示使用默认节。
+
+-- 输出控件(Indicators) --
+- Keys: 键名数组。
+
+### CSM - Read INI String.vi
+读取配置信息字符串。此读取为获取原始的字符串描述,不替换INI变量引用。
+
+应用场景: 需要读取原始的配置信息,而不是替换内部变量引用后的配置信息。
+
+参考范例: `6. Read Nested Variables.vi`。
+
+-- 输入控件(Controls) --
+- Section Name ("" as Default): 节名,空字符串表示使用默认节。
+- Key: 包含变量引用的输入字符串。
+- Default Value: 默认值。
+- Write If not found? (F): 如果未找到,是否写入默认值。
+
+-- 输出控件(Indicators) --
+- Value: 替换变量后的输出字符串。
+- Key Found?: 键是否存在。
+
+### CSM - Write INI String.vi
+写入配置信息字符串。
+
+参考范例: `6. Read Nested Variables.vi`。
+
+> - Ref: CSM INI-Variable缓存机制警告
+
+-- 输入控件(Controls) --
+- Section Name ("" as Default): 节名,空字符串表示使用默认节。
+- Key: 键名。
+- Value: 变量值字符串。
+
+-- 输出控件(Indicators) --
+- Key Replace?: 键是否被替换。
+
+## 多文件支持与配置管理
+
+### CSM - Configuration File Path.vi
+返回加载的所有配置文件路径。
+
+参考范例: `5. import Config.ini with __include section.vi`。
+
+> - Ref: CSM INI-Variable配置文件路径
+
+-- 输入控件(Controls) --
+- Include All Paths?(F): 是否包含所有配置文件路径。
+
+-- 输出控件(Indicators) --
+- Default Config File Path: 默认配置文件路径。
+- All Config Files: 所有配置文件列表。
+
+### CSM - Load Configuration Variables From File.vi
+从指定文件加载配置变量。如果节名后缀不为空,载入的节名称会加上该后缀。
+
+Section Postfix ("")主要用于载入多个配置文件但具有相同节的情况。例如: 两个配置文件`Hardware1.ini`和`Hardware2.ini`,都有一个名为`Serial`的节且内部的Keys相同(表示串口配置),那么后载入的文件中的配置会覆盖先载入的文件中的配置。使用Section Postfix ("")可以避免节名冲突。
+
+参考范例: `5. import Config.ini with __include section.vi`。
+
+> - Ref: CSM INI-Variable配置文件路径
+
+-- 输入控件(Controls) --
+- Configuration Path: 配置文件路径。
+- Section Postfix (""): 节名后缀。
+
+### CSM - Unload Configuration Variable File.vi
+卸载配置变量文件。
+
+> - Ref: CSM INI-Variable配置文件路径
+
+-- 输入控件(Controls) --
+- Path: 配置文件路径。
+
+### CSM - Mark All Temp Variables as Permanent.vi
+将所有临时变量标记为永久变量,并将变量存储到指定的配置文件中。
+
+注意: 虽然已经标记为永久变量,但是如果不使用CSM - Sync Configuration Variables to File VI,依然不会将变量同步到文件中。
+
+> - Ref: CSM INI-Variable配置文件路径
+
+-- 输入控件(Controls) --
+- Path ("" to Use Default File): 配置文件路径,空字符串表示使用默认INI文件。
+
+### CSM - Sync Configuration Variables to File.vi
+将内存中的变量同步到指定的配置文件中。
+
+注意: 只有永久变量才会同步到文件中,如果想将临时变量写入文件,需要提前将临时变量标记为永久变量。
+
+> - Ref: CSM INI-Variable配置文件路径
+
+-- 输入控件(Controls) --
+- All Temp Variable to Default Ini(F): 是否将所有临时变量同步到默认INI文件。
+- Write UnSupported Datatype?(F): 是否写入不支持的数据类型。
+
+### CSM - Restore Variable Value.vi
+恢复变量值,将所有的永久变量刷新为首次载入的配置值,临时变量不会被修改。
+
+> - Ref: CSM INI-Variable配置文件路径
+
+### CSM - Reset to Default.vi
+将配置重置为默认值。所有的变量将被清空,所有的配置会从现在加载的配置文件中重新加载。
+
+> - Ref: CSM INI-Variable配置文件路径
+
+## 实用工具 VI
+
+### CSM - Read Log Filter Rules from INI Strings.vi
+从配置中读取日志过滤规则。此配置主要配合以下几个VI使用:
+
+- `CSM - Set Log Filter Rules.vi`
+- `addons\Logger\CSM - Start File Logger.vi`
+
+### CSM - Read File Logger Configuration from INI String.vi
+从配置中读取日志记录配置。此配置主要配合以下几个VI使用:
+
+- `addons\Logger\CSM - Start File Logger.vi`
diff --git a/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description/VI Description(zh-cn)/VI Description(zh-cn) - Addon Massdata.md b/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description/VI Description(zh-cn)/VI Description(zh-cn) - Addon Massdata.md
new file mode 100644
index 000000000..55edd06e8
--- /dev/null
+++ b/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description/VI Description(zh-cn)/VI Description(zh-cn) - Addon Massdata.md
@@ -0,0 +1,90 @@
+# CSM Massdata Addon
+
+## 概述
+
+> [!NOTE]
+> CSM Massdata参数支持
+>
+> CSM Massdata参数支持提供了一种高效的参数传递机制,用于在CSM中传递大量数据。通过使用内存高效的引用机制而非直接传输数据,从而提高了参数传递的效率和性能。
+> - CSM Massdata定义的参数类型为``,可以通过CSM - Argument Type VI获取。
+> - CSM Massdata数据传输是完全无损的,但不适合存储需要无限期持久化的数据。
+>
+> 注意: Massdata Support内部使用循环缓冲区机制,同一应用程序内的所有CSM模块共享相同的Massdata缓冲区空间。当缓冲区满时,新数据将从开始位置覆盖旧数据。因此需要设置合理的缓冲区大小,确保数据在使用完毕前未被覆盖,避免数据丢失。
+
+> [!NOTE]
+> CSM Massdata参数格式
+>
+> 典型的Massdata数据格式为: `Start:8057;Size:4004;DataType:1D I32`。其中:
+> - `Start`: 数据在内存中的起始地址
+> - `Size`: 数据的大小(字节数)
+> - `DataType(optional)`: 数据的类型,由CSM Data Type String VI定义
+
+## CSM - Config MassData Parameter Cache Size.vi
+配置Massdata后台缓存大小,默认值为1 MB。
+
+建议配置适当的缓存大小: 不要太大(避免浪费内存),也不要太小(防止频繁覆盖)。可以利用提供的调试工具监控缓存使用情况,确定最佳配置。
+
+> - Ref: CSM Massdata参数支持
+
+-- 输入控件(Controls) --
+- Size (1M): 缓存大小,单位为字节(Byte)。
+
+## CSM - Convert Argument to MassData.vim
+将Massdata参数转换为原始数据。
+
+> - Ref: CSM Massdata参数格式
+
+-- 输入控件(Controls) --
+- MassData Argument: 输入的Massdata参数。
+- Type: 数据类型。
+
+-- 输出控件(Indicators) --
+- Data: 恢复出的原始数据。
+
+## CSM - Convert MassData to Argument.vim
+将数据转换为Massdata参数,此转换得到的Massdata参数不包含数据类型信息。
+
+> - Ref: CSM Massdata参数格式
+
+-- 输入控件(Controls) --
+- Data: 输入数据。
+
+-- 输出控件(Indicators) --
+- MassData Argument: 转换后的Massdata参数。
+
+## CSM - Convert MassData to Argument With DataType.vim
+将数据转换为Massdata参数,此转换得到的Massdata参数包含数据类型信息。
+
+> - Ref: CSM Massdata参数格式
+
+-- 输入控件(Controls) --
+- Data: 输入数据。
+
+-- 输出控件(Indicators) --
+- MassData Argument: 转换后的Massdata参数。
+
+## CSM - MassData Data Type String.vi
+从Massdata参数中提取数据类型字符串。
+
+> - Ref: CSM Massdata参数格式
+
+-- 输入控件(Controls) --
+- MassData Argument: 输入的Massdata参数。
+
+-- 输出控件(Indicators) --
+- MassData Argument(dup): 输入的 massdata 参数副本。
+- Data Type String: 解析出的数据类型字符串。
+
+## CSM - MassData Parameter Status.vi
+读取Massdata后台缓存的状态信息。
+
+-- 输出控件(Indicators) --
+- Active Read Operation: 上次读操作的信息,包括起始地址与长度。
+- Active Write Operation: 上次写操作的信息,包括起始地址与长度。
+- Cache Size: 后台缓存大小,单位为字节(Byte)。
+
+## CSM - MassData Update Status Indicator.vi
+辅助VI,用于根据缓存状态更新界面指定的Massdata缓存显示控件,可更加直观地展示缓存的使用情况。
+
+-- 输入控件(Controls) --
+- MassData Status Indicator: Massdata缓存显示控件引用。
diff --git a/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description/VI Description(zh-cn)/VI Description(zh-cn).md b/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description/VI Description(zh-cn)/VI Description(zh-cn).md
new file mode 100644
index 000000000..659c46f39
--- /dev/null
+++ b/src/help/NEVSTOP/Communicable State Machine(CSM)/VI Description/VI Description(zh-cn)/VI Description(zh-cn).md
@@ -0,0 +1,210 @@
+# CSM API
+
+- [01. 模板(Templates)](./VI%20Description(zh-cn)%20-%2001.%20Templates.md)
+- [02. 核心功能(Core Functions)](./VI%20Description(zh-cn)%20-%2002.%20Core%20Functions.md)
+- [03. 参数(Arguments)](./VI%20Description(zh-cn)%20-%2003.%20Arguments.md)
+- [04. 管理接口(Management API)](./VI%20Description(zh-cn)%20-%2004.%20Management%20API.md)
+- [05. 模块操作接口(Module Operation API)](./VI%20Description(zh-cn)%20-%2005.%20Module%20Operation%20API.md)
+- [06. 状态订阅管理(Status Registration)](./VI%20Description(zh-cn)%20-%2006.%20Status%20Registration.md)
+- [07. 全局日志(Global Log)](./VI%20Description(zh-cn)%20-%2007.%20Global%20Log.md)
+- [08. 高级模式(Advanced Modes)](./VI%20Description(zh-cn)%20-%2008.%20Advanced%20Modes.md)
+- [09. 内置插件(Built-in Addons)](./VI%20Description(zh-cn)%20-%2009.%20Build-in%20Addons.md)
+- [10. 工具VI(Utility VIs)](./VI%20Description(zh-cn)%20-%2010.%20Utility%20VIs.md)
+- [11. CSM-Helper API](./VI%20Description(zh-cn)%20-%2011.%20CSM-Helper%20API.md)
+- [12. Debug,Doc,Tools](./VI%20Description(zh-cn)%20-%2012.%20Debug,Doc,Tools.md)
+- [13. Internal](./VI%20Description(zh-cn)%20-%2013.%20Internal.md)
+
+> [!NOTE]
+> CSM模块间通信类型
+>
+> CSM模块间的通信分为两类: 消息和广播。
+> - 消息: 模块间1:1的通信,根据消息处理的方式,又可分为同步调用(`-@`)、异步调用(`->`)、异步不等待返回(`->|`)等。
+> - 广播: 模块间1:N的通信,广播模块会将广播推送给所有订阅了该广播的模块。根据广播处理的优先级,又可分为信号广播(status)和中断广播(interrupt)。
+
+> [!NOTE]
+> CSM模块外部接口
+>
+> 基于CSM框架编写的模块,具有良好的复用性。使用者只需了解以下接口信息,即可在不了解具体实现的情况下,使用CSM模块。
+> - 消息接口(Message): 外部可调用的消息名称、参数信息和返回信息。
+> - 广播接口(Broadcast): 外部可调用的广播名称、参数信息。
+> - 属性接口(Attribute): 模块可使用的属性名称、属性数据类型(LabVIEW数据类型)。
+
+> [!NOTE]
+> CSM消息类型
+>
+> CSM消息分为三类: 同步调用(`-@`)、异步调用(`->`)、异步不等待返回(`->|`)。
+> - 同步调用(`-@`): 模块会等待目标模块返回结果,才会继续执行后续代码。
+> - 异步调用(`->`): 模块会立即继续执行后续代码,而不会等待目标模块返回结果。
+> - 异步不等待返回(`->|`): 模块会立即继续执行后续代码,而不会等待目标模块返回结果。与异步调用(`->`)不同的是,异步不等待返回(`->|`)不会等待目标模块返回结果,也不会抛出错误。
+
+> [!NOTE]
+> CSM消息格式解析
+>
+> [CSM消息字符串(CSM Message)] >> [参数(Arguments)] [消息类型符号(Message Symbol) ->|,->,-@] [目标模块(Target Module)] // [注释(Comments)]
+>
+> - CSM 消息字符串(CSM Message): CSM的消息,不可包含CSM关键字和换行符。
+> - `>>`: CSM消息字符串(CSM Message)和参数(Arguments)的分隔符。
+> - 参数(Arguments): CSM消息的参数,不可包含CSM关键字和换行符。
+> - 消息类型符号(Message Symbol): 消息类型符号,用于标识消息类型,包括同步调用(`-@`)、异步调用(`->`)、异步不等待返回(`->|`)等。
+> - 目标模块(Target Module): 消息发送的目标模块,如为空,则表示消息会被本模块处理。为空时,消息类型符号也不能存在。
+> - 注释(Comments): 注释信息,不会被解析。
+
+> [!NOTE]
+> CSM消息的目标模块说明
+>
+> 普通模式下,CSM消息的目标模块为指定的模块名称。
+> 系统级模块只是名称上以`.`起始,CSM消息的目标模块包含`.`的名称, 如申请的模块名称为`.System`,CSM消息的目标模块就是`.System`。
+> 协作者模式下,CSM消息的目标模块只能是整体模块名称,不能是节点的名称,例如申请的模块名称为`Worker#`,CSM消息的目标模块就是`Worker`。
+> 责任链模式下,CSM消息的目标模块只能是整体模块名称,不能是节点的名称。例如申请的模块名称为`Chain$1`,CSM消息的目标模块就是`Chain`。
+
+> [!NOTE]
+> 同步消息
+>
+> 同步消息是消息的一种。CSM发出同步消息后,将暂停状态变化,等待被调用方完成消息处理。同步消息通过`-@`描述。 一个JKISM模块通过同步消息对另一个模块的调用,叫做同步调用。
+>
+> 调用方会发生的错误:
+> - 如果输入的目标模块为`""`,会产生`NO Target Error`。
+> - 如果输入的模块不存在,会产生`Target Error`。
+> - 如果输入的模块存在,但是在指定的时间内还未完成处理,会产生`Timeout Error`。
+>
+> 调用方会停留等待返回:
+> - 如果调用方是CSM模块,会停留在Parse State Queue++ VI中。
+> - 如果是API调用,会停留在调用VI,例如CSM - Send Message and Wait for Reply VI。
+>
+> 返回:
+> - 如果调用方是CSM模块
+> - 正常情况下,会进`Response`状态处理返回。
+> - 如果是调用方发生的错误,会导致CSM状态机进入`Error Handler`模块,处理错误。
+> - 如果是被调用方发生的错误,此信息仍然是消息的结果,在`Response`状态处理,可以从Additional Information中获取。
+> - 如果是API调用
+> - Response输出为返回。
+> - 调用方和被调用方发生的错误,会合并到错误簇输出。
+
+> [!NOTE]
+> CSM同步消息全局超时
+>
+> - CSM模块间通信,或使用同步消息发送VI时,默认的超时时间为-2,此时将使用全局设置的超时时间
+> - 全局超时时间可以通过CSM - Set TMO of Sync-Reply VI设置为其他正值,以覆盖全局设置的超时时间
+> - 全局超时时间仅对同步调用生效,异步调用不受影响
+
+> [!NOTE]
+> 异步消息
+>
+> 异步消息是消息的一种。CSM发出异步消息后,将立即继续执行后续代码,而不会等待被调用方完成消息处理。
+> 异步消息分为异步调用(`->`)和异步不等待返回(`->|`),区别只在于异步无返回消息,当被调用方完成操作后,不会将结果返回给调用方。
+>
+> 调用方会发生的错误:
+> - 如果输入的目标模块为`""`,会产生`NO Target Error`。
+> - 如果输入的模块不存在,会产生`Target Error`。
+>
+> 调用方不会停留等待返回:
+> - 如果调用方是CSM模块,会在Parse State Queue++ VI发送消息后,进入`Async Message Posted`状态。
+> - 如果是API调用,会继续执行后续代码,API只能发送异步无返回异步消息。
+>
+> 返回:
+> - 如果调用方是CSM模块
+> - 正常情况下,会进入`Async Response`状态处理返回。被调用方发生的错误,此信息仍然是消息的结果,在`Async Response`状态处理,可以从Additional Information中获取此错误信息。
+> - 如果是调用方发生的错误,会导致CSM状态机进入`Error Handler`模块,处理错误。
+> - API只能发送异步无返回异步消息,无返回。
+
+> [!NOTE]
+> CSM操作消息格式解析
+>
+> CSM定义了系统所需的操作,例如发送广播,广播的订阅、取消订阅。可以基于此定义,扩展系统的功能。
+>
+> //[CSM操作字符串(CSM Operation)] >> [参数(Arguments)] -> <[操作类型(Operation)]> // [注释(Comments)]
+>
+> 例如:
+> // 发送信号广播"TCP Connected",参数为"192.168.1.100"
+> TCP Connected >> 192.168.1.100 ->
+> // 将TCPModule的TCP Connected广播注册到UI模块的UpdateLED API
+> TCP Connected@TCPModule >> UpdateLED@UI ->