Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
89 changes: 89 additions & 0 deletions CSM-ModSets-TagDB-UI.lvproj
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
<?xml version='1.0' encoding='UTF-8'?>
<Project Type="Project" LVVersion="20008000">
<Item Name="My Computer" Type="My Computer">
<Property Name="server.app.propertiesEnabled" Type="Bool">true</Property>
<Property Name="server.control.propertiesEnabled" Type="Bool">true</Property>
<Property Name="server.tcp.enabled" Type="Bool">false</Property>
<Property Name="server.tcp.port" Type="Int">0</Property>
<Property Name="server.tcp.serviceName" Type="Str">My Computer/VI Server</Property>
<Property Name="server.tcp.serviceName.default" Type="Str">My Computer/VI Server</Property>
<Property Name="server.vi.callsEnabled" Type="Bool">true</Property>
<Property Name="server.vi.propertiesEnabled" Type="Bool">true</Property>
<Property Name="specify.custom.address" Type="Bool">false</Property>
<Item Name="_Example" Type="Folder" URL="../_Example">
<Property Name="NI.DISK" Type="Bool">true</Property>
</Item>
<Item Name="CSM-TagDashboard.lvlib" Type="Library" URL="../TagDashboard/CSM-TagDashboard.lvlib"/>
<Item Name="CSM-TagDBDisplayContainer.lvlib" Type="Library" URL="../TagDisplayContainer/CSM-TagDBDisplayContainer.lvlib"/>
<Item Name="Dependencies" Type="Dependencies">
<Item Name="user.lib" Type="Folder">
<Item Name="_reuse_openG_nevstop.lvlib" Type="Library" URL="/&lt;userlib&gt;/NEVSTOP-Programming-Palette/_openG/_reuse_openG_nevstop.lvlib"/>
<Item Name="API String Arguments Support.lvlib" Type="Library" URL="/&lt;userlib&gt;/_NEVSTOP/Communicable State Machine(CSM)/addons/API-String-Arugments-Support/API String Arguments Support.lvlib"/>
<Item Name="Bound and Position to Rect-Bound_nevstop.vi" Type="VI" URL="/&lt;userlib&gt;/NEVSTOP-Programming-Palette/Dialog &amp; Interface/Bound and Position to Rect-Bound_nevstop.vi"/>
<Item Name="Communicable State Machine.lvlib" Type="Library" URL="/&lt;userlib&gt;/_NEVSTOP/Communicable State Machine(CSM)/Communicable State Machine.lvlib"/>
<Item Name="CSM File Logger.lvlib" Type="Library" URL="/&lt;userlib&gt;/_NEVSTOP/Communicable State Machine(CSM)/addons/Logger/CSM File Logger.lvlib"/>
<Item Name="CSM Shared.lvlib" Type="Library" URL="/&lt;userlib&gt;/_NEVSTOP/Communicable State Machine(CSM)/_Shared/CSM Shared.lvlib"/>
<Item Name="Data Changed - First Call Included_nevstop.vim" Type="VI" URL="/&lt;userlib&gt;/NEVSTOP-Programming-Palette/Comparison/Data Changed - First Call Included_nevstop.vim"/>
<Item Name="Format Variant Attributes into String_nevstop.vi" Type="VI" URL="/&lt;userlib&gt;/NEVSTOP-Programming-Palette/String/Format Variant Attributes into String_nevstop.vi"/>
<Item Name="Format Variant into String Advance_nevstop.vi" Type="VI" URL="/&lt;userlib&gt;/NEVSTOP-Programming-Palette/String/Format Variant into String Advance_nevstop.vi"/>
<Item Name="INI-Static-Variable-Support.lvlib" Type="Library" URL="/&lt;userlib&gt;/_NEVSTOP/Communicable State Machine(CSM)/addons/INI-Static-Variable-Support/INI-Static-Variable-Support.lvlib"/>
<Item Name="LabVIEW-Config.lvlib" Type="Library" URL="/&lt;userlib&gt;/_NEVSTOP/Communicable State Machine(CSM)/addons/INI-Static-Variable-Support/LabVIEW-Config/LabVIEW-Config.lvlib"/>
<Item Name="Safely Close Reference_nevstop.vim" Type="VI" URL="/&lt;userlib&gt;/NEVSTOP-Programming-Palette/Application/Safely Close Reference_nevstop.vim"/>
<Item Name="TagDB RefManager.lvlib" Type="Library" URL="/&lt;userlib&gt;/_NEVSTOP/TagDB/Add-ons/RefManager/TagDB RefManager.lvlib"/>
<Item Name="TagDB.lvlib" Type="Library" URL="/&lt;userlib&gt;/_NEVSTOP/TagDB/TagDB.lvlib"/>
</Item>
<Item Name="vi.lib" Type="Folder">
<Item Name="_Rect2TopLeftPoint__lava_lib_ui_tools.vi" Type="VI" URL="/&lt;vilib&gt;/LAVA/UI Tools/Alignment/_Rect2TopLeftPoint__lava_lib_ui_tools.vi"/>
<Item Name="Add State(s) to Queue__JKI_lib_State_Machine.vi" Type="VI" URL="/&lt;vilib&gt;/addons/_JKI Toolkits/State Machine/_JKI_lib_State_Machine.llb/Add State(s) to Queue__JKI_lib_State_Machine.vi"/>
<Item Name="Application Directory.vi" Type="VI" URL="/&lt;vilib&gt;/Utility/file.llb/Application Directory.vi"/>
<Item Name="Build State String with Arguments__JKI_lib_State_Machine.vi" Type="VI" URL="/&lt;vilib&gt;/addons/_JKI Toolkits/State Machine/_JKI_lib_State_Machine.llb/Build State String with Arguments__JKI_lib_State_Machine.vi"/>
<Item Name="BuildHelpPath.vi" Type="VI" URL="/&lt;vilib&gt;/Utility/error.llb/BuildHelpPath.vi"/>
<Item Name="CenterRectInBnds.vi" Type="VI" URL="/&lt;vilib&gt;/picture/PictureSupport.llb/CenterRectInBnds.vi"/>
<Item Name="Check if File or Folder Exists.vi" Type="VI" URL="/&lt;vilib&gt;/Utility/libraryn.llb/Check if File or Folder Exists.vi"/>
<Item Name="Check Special Tags.vi" Type="VI" URL="/&lt;vilib&gt;/Utility/error.llb/Check Special Tags.vi"/>
<Item Name="Clear Errors.vi" Type="VI" URL="/&lt;vilib&gt;/Utility/error.llb/Clear Errors.vi"/>
<Item Name="Convert property node font to graphics font.vi" Type="VI" URL="/&lt;vilib&gt;/Utility/error.llb/Convert property node font to graphics font.vi"/>
<Item Name="Details Display Dialog.vi" Type="VI" URL="/&lt;vilib&gt;/Utility/error.llb/Details Display Dialog.vi"/>
<Item Name="DialogType.ctl" Type="VI" URL="/&lt;vilib&gt;/Utility/error.llb/DialogType.ctl"/>
<Item Name="DialogTypeEnum.ctl" Type="VI" URL="/&lt;vilib&gt;/Utility/error.llb/DialogTypeEnum.ctl"/>
<Item Name="Error Cluster From Error Code.vi" Type="VI" URL="/&lt;vilib&gt;/Utility/error.llb/Error Cluster From Error Code.vi"/>
<Item Name="Error Code Database.vi" Type="VI" URL="/&lt;vilib&gt;/Utility/error.llb/Error Code Database.vi"/>
<Item Name="ErrWarn.ctl" Type="VI" URL="/&lt;vilib&gt;/Utility/error.llb/ErrWarn.ctl"/>
<Item Name="eventvkey.ctl" Type="VI" URL="/&lt;vilib&gt;/event_ctls.llb/eventvkey.ctl"/>
<Item Name="Find Tag.vi" Type="VI" URL="/&lt;vilib&gt;/Utility/error.llb/Find Tag.vi"/>
<Item Name="Format Message String.vi" Type="VI" URL="/&lt;vilib&gt;/Utility/error.llb/Format Message String.vi"/>
<Item Name="General Error Handler Core CORE.vi" Type="VI" URL="/&lt;vilib&gt;/Utility/error.llb/General Error Handler Core CORE.vi"/>
<Item Name="General Error Handler.vi" Type="VI" URL="/&lt;vilib&gt;/Utility/error.llb/General Error Handler.vi"/>
<Item Name="Get String Text Bounds.vi" Type="VI" URL="/&lt;vilib&gt;/Utility/error.llb/Get String Text Bounds.vi"/>
<Item Name="Get Text Rect.vi" Type="VI" URL="/&lt;vilib&gt;/picture/picture.llb/Get Text Rect.vi"/>
<Item Name="GetHelpDir.vi" Type="VI" URL="/&lt;vilib&gt;/Utility/error.llb/GetHelpDir.vi"/>
<Item Name="GetRTHostConnectedProp.vi" Type="VI" URL="/&lt;vilib&gt;/Utility/error.llb/GetRTHostConnectedProp.vi"/>
<Item Name="Is Path and Not Empty.vi" Type="VI" URL="/&lt;vilib&gt;/Utility/file.llb/Is Path and Not Empty.vi"/>
<Item Name="List Directory and LLBs.vi" Type="VI" URL="/&lt;vilib&gt;/Utility/libraryn.llb/List Directory and LLBs.vi"/>
<Item Name="Longest Line Length in Pixels.vi" Type="VI" URL="/&lt;vilib&gt;/Utility/error.llb/Longest Line Length in Pixels.vi"/>
<Item Name="LVBoundsTypeDef.ctl" Type="VI" URL="/&lt;vilib&gt;/Utility/miscctls.llb/LVBoundsTypeDef.ctl"/>
<Item Name="LVPositionTypeDef.ctl" Type="VI" URL="/&lt;vilib&gt;/Utility/miscctls.llb/LVPositionTypeDef.ctl"/>
<Item Name="LVRectTypeDef.ctl" Type="VI" URL="/&lt;vilib&gt;/Utility/miscctls.llb/LVRectTypeDef.ctl"/>
<Item Name="NI_Data Type.lvlib" Type="Library" URL="/&lt;vilib&gt;/Utility/Data Type/NI_Data Type.lvlib"/>
<Item Name="NI_FileType.lvlib" Type="Library" URL="/&lt;vilib&gt;/Utility/lvfile.llb/NI_FileType.lvlib"/>
<Item Name="NI_PackedLibraryUtility.lvlib" Type="Library" URL="/&lt;vilib&gt;/Utility/LVLibp/NI_PackedLibraryUtility.lvlib"/>
<Item Name="Not Found Dialog.vi" Type="VI" URL="/&lt;vilib&gt;/Utility/error.llb/Not Found Dialog.vi"/>
<Item Name="POffsetRect.vi" Type="VI" URL="/&lt;vilib&gt;/picture/PictureSupport.llb/POffsetRect.vi"/>
<Item Name="RectCentroid.vi" Type="VI" URL="/&lt;vilib&gt;/picture/PictureSupport.llb/RectCentroid.vi"/>
<Item Name="Recursive File List.vi" Type="VI" URL="/&lt;vilib&gt;/Utility/libraryn.llb/Recursive File List.vi"/>
<Item Name="Search and Replace Pattern.vi" Type="VI" URL="/&lt;vilib&gt;/Utility/error.llb/Search and Replace Pattern.vi"/>
<Item Name="Set Bold Text.vi" Type="VI" URL="/&lt;vilib&gt;/Utility/error.llb/Set Bold Text.vi"/>
<Item Name="Set String Value.vi" Type="VI" URL="/&lt;vilib&gt;/Utility/error.llb/Set String Value.vi"/>
<Item Name="Simple Error Handler.vi" Type="VI" URL="/&lt;vilib&gt;/Utility/error.llb/Simple Error Handler.vi"/>
<Item Name="Snap to Center__lava_lib_ui_tools.vi" Type="VI" URL="/&lt;vilib&gt;/LAVA/UI Tools/Alignment/Snap to Center__lava_lib_ui_tools.vi"/>
<Item Name="Space Constant.vi" Type="VI" URL="/&lt;vilib&gt;/dlg_ctls.llb/Space Constant.vi"/>
<Item Name="TagReturnType.ctl" Type="VI" URL="/&lt;vilib&gt;/Utility/error.llb/TagReturnType.ctl"/>
<Item Name="Three Button Dialog CORE.vi" Type="VI" URL="/&lt;vilib&gt;/Utility/error.llb/Three Button Dialog CORE.vi"/>
<Item Name="Three Button Dialog.vi" Type="VI" URL="/&lt;vilib&gt;/Utility/error.llb/Three Button Dialog.vi"/>
<Item Name="Trim Whitespace.vi" Type="VI" URL="/&lt;vilib&gt;/Utility/error.llb/Trim Whitespace.vi"/>
<Item Name="whitespace.ctl" Type="VI" URL="/&lt;vilib&gt;/Utility/error.llb/whitespace.ctl"/>
</Item>
</Item>
<Item Name="Build Specifications" Type="Build"/>
</Item>
</Project>
Binary file removed DisplayWindow/CSM-TagDBDisplayWnd.vi
Binary file not shown.
Binary file removed DisplayWindow/DefaultPage.vi
Binary file not shown.
Binary file removed DisplayWindow/_support/Query Page VI Path.vi
Binary file not shown.
26 changes: 25 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1 +1,25 @@
# CSM-ModSets-TagDB-UI
# CSM-ModSets-TagDB-UI

基于 [CSM(可通信状态机)](https://nevstop-lab.github.io/CSM-Wiki/) 框架的 TagDB 仪表盘与显示容器 UI 模块组,用于在 LabVIEW 前面板中展示和管理 TagDB 标签数据。

This repository contains CSM-based UI modules for displaying and managing TagDB tag data on LabVIEW front panels.

---

## 模块列表

| 模块 | 所属模块组 | 功能说明 |
| ------------------------------------------------------------------------------------------------------------- | -------------------------------- | -------------------------------------------- |
| [TagDashboard](./TagDashboard/TagDashboard.md) | CSM-TagDashboard.lvlib | 网格仪表盘,展示 TagDB 标签数据的实时快照 |
| [TagDisplayContainer](./TagDisplayContainer/TagDisplayContainer.md) | CSM-TagDBDisplayContainer.lvlib | 多视图容器,支持预定义页面切换和动态视图插入 |

---

## 许可

本项目采用 Apache License 2.0 发布。

---

- _完整 CSM 语法参考:<https://github.com/NEVSTOP-LAB/Communicable-State-Machine/blob/main/.doc/Syntax.md>_
- _CSM Wiki:<https://nevstop-lab.github.io/CSM-Wiki/>_
177 changes: 177 additions & 0 deletions TagDashboard/TagDashboard.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,177 @@
# `TagDashboard` — CSM 模块接口文档

---

## 功能简述

`TagDashboard` 是一个 CSM UI 模块,用于将 TagDB 中的标签(Tag)数据以网格仪表盘(Grid Dashboard)形式展示在前面板上。

模块支持动态设置仪表盘的行列数、指定要监听的标签列表,并可随时对当前标签值进行快照式刷新。

---

## 模块信息

| 属性 | 值 |
| -------------- | ----------------------------------------------- |
| LabVIEW 版本 | ≥ 2020 |
| 支持的操作系统 | Windows |
| 支持 RT | ❌ 不支持 |
| 支持 64-bit | ✅ 支持 |
| 所属模块组 | CSM-TagDashboard.lvlib |

---

## 依赖项

| 依赖 | 类型 |
| --------------------------------------------------------------------------------------------------- | ---- |
| [Communicable-State-Machine](https://github.com/NEVSTOP-LAB/Communicable-State-Machine) | 必须 |
| [CSM-API-String-Arguments-Support](https://github.com/NEVSTOP-LAB/CSM-API-String-Arguments-Support) | 必须 |
| [CSM-INI-Static-Variable-Support](https://github.com/NEVSTOP-LAB/CSM-INI-Static-Variable-Support) | 可选 |
| [TagDB](https://github.com/NEVSTOP-LAB/TagDB) | 必须 |
| [TagDB RefManager](https://github.com/NEVSTOP-LAB/TagDB) | 必须 |

---

## API 接口(消息接口)

以下是外部调用者可以发送给本模块的消息。

### `API: Set TagDB`

绑定目标 TagDB 引用,建立与 TagDB 服务器的连接。

- **参数**:`APIString` — `String`:TagDB 引用名称或标识符
- **响应**:N/A

### `API: Set Tags`

指定要在仪表盘上显示的标签(Tag)列表。

- **参数**:`APIString` — `String`:以逗号或分号分隔的标签名称列表(如 `TagA,TagB,TagC`)
- **响应**:N/A

### `API: Snapshot Tags`

立即刷新仪表盘上所有已注册标签的当前值。

- **参数**:N/A
- **响应**:N/A

### `UI: Front Panel State`

控制本模块前面板的显示状态。

- **参数**:`APIString` — `Enum`:`Open`、`Close` 或 `Minimize`
- **响应**:N/A

### `UI: Cursor Set`

设置前面板光标样式。

- **参数**:`APIString` — `Enum`:光标类型名称(如 `Busy`、`Default`)
- **响应**:N/A

### 参数类型说明

| 类型 | 说明 |
| ----------- | ------------------------------------------------------------------------------------------------- |
| `APIString` | 支持嵌套键值对的纯文本字符串,需要 CSM API String Arguments Support 插件 |
| `${变量名}` | INI 配置变量引用,需要 CSM INI Static Variable Support 插件 |

> **注意**:接口文档中对 `String` 类型数据统一使用 `APIString` 标注(不直接写 `SafeStr`),因为 `SafeStr` 正是 `APIString` 针对 `String` 类型的内部编码实现。

---

## 状态广播接口

以下是本模块**发出**的消息,用于通知订阅者内部状态变化。

### `Error Occurred`

**默认广播类型**:`Interrupt`

模块内部发生错误时广播。

- **参数**:`ErrStr` — `Error Cluster`:错误信息

---

## 配置说明

> 推荐使用 [CSM INI Static Variable Support](https://github.com/NEVSTOP-LAB/CSM-INI-Static-Variable-Support) 管理配置参数,通过 `${变量名}` 语法在消息中直接引用 INI 键值。

### INI 文件配置

```ini
[dashboard]
Size.Cols = 8 ; 仪表盘网格列数
Size.Rows = 4 ; 仪表盘网格行数
```

---

## 调用限制与注意事项

> [!IMPORTANT]
>
> - `API: Set TagDB` **必须**在 `API: Set Tags` 和 `API: Snapshot Tags` 之前调用。
> - 本模块为**单例**——同一时间不可运行多个实例。
> - 仪表盘的网格布局由 INI 配置文件中的 `[dashboard]` 节控制,行列数决定了可同时展示的标签数量上限。

---

## 使用示例

> 将 `[模块名称]` 替换为启动模块 VI 时实际使用的名称。

### 基本生命周期

```csm
// 初始化 TagDB 连接并设置要显示的标签
API: Set TagDB >> MyTagDB -@ TagDashboard
API: Set Tags >> TagA,TagB,TagC -@ TagDashboard

// 手动刷新标签快照
API: Snapshot Tags -@ TagDashboard

// 控制面板显示
UI: Front Panel State >> Open -@ TagDashboard
UI: Front Panel State >> Close -@ TagDashboard
```

### 订阅错误广播

```csm
// 将 TagDashboard 的 "Error Occurred" 路由到日志模块
Error Occurred@TagDashboard >> API: OnError@Logger -><register>

// 取消订阅
Error Occurred@TagDashboard >> API: OnError@Logger -><unregister>
```

---

## 模块交互图

```mermaid
stateDiagram-v2
direction LR
调用模块 --> TagDashboard : "API: Set TagDB"
调用模块 --> TagDashboard : "API: Set Tags"
调用模块 --> TagDashboard : "API: Snapshot Tags"
TagDashboard --> 处理模块 : "Error Occurred >> API: OnError"
```

---

## 备注

- 仪表盘布局(行列数)由 `csmapp.ini` 中的 `[dashboard]` 节配置,启动时自动加载。
- `API: Snapshot Tags` 会遍历所有已注册标签并刷新前面板显示,适用于定时或手动触发的一键刷新场景。

---

- _完整 CSM 语法参考:<https://github.com/NEVSTOP-LAB/Communicable-State-Machine/blob/main/.doc/Syntax.md>_
- _CSM Wiki:<https://nevstop-lab.github.io/CSM-Wiki/>_
Binary file modified TagDashboard/TagDashboard.vi
Binary file not shown.
Binary file modified TagDashboard/_support/Dashboard to Center.vi
Binary file not shown.
Binary file modified TagDashboard/_support/DataUnit2.vi
Binary file not shown.
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,9 @@
<Property Name="NI.Lib.Version" Type="Str">1.0.0.0</Property>
<Property Name="NI.LV.All.SourceOnly" Type="Bool">true</Property>
<Item Name="Support" Type="Folder">
<Item Name="DefaultPage.vi" Type="VI" URL="../DefaultPage.vi"/>
<Item Name="Clear Errors.vi" Type="VI" URL="../_support/Clear Errors.vi"/>
<Item Name="Query Page VI Path.vi" Type="VI" URL="../_support/Query Page VI Path.vi"/>
<Item Name="ViewMgr.lvclass" Type="LVClass" URL="../_support/ViewMgr.lvclass"/>
</Item>
<Item Name="CSM-TagDBDisplayWnd.vi" Type="VI" URL="../CSM-TagDBDisplayWnd.vi"/>
<Item Name="TagDisplayContainer.vi" Type="VI" URL="../TagDisplayContainer.vi"/>
</Library>
11 changes: 0 additions & 11 deletions TagDisplayContainer/CSM-TagDisplayContainer.lvlib

This file was deleted.

Binary file added TagDisplayContainer/DefaultPage.vi
Binary file not shown.
Loading