
40x40 矩阵控制系统 - 技术文档
1. 项目概述
本系统是一个用于控制40x40音视频矩阵的桌面应用程序,通过以太网(TCP/IP)与矩阵设备通信,实现灵活的路由切换和预设管理功能。
1.1 技术栈
| 组件 | 技术 |
|---|---|
| 编程语言 | Python 3.12 |
| GUI框架 | tkinter (Python标准库) |
| 数据库 | SQLite |
| 通信协议 | TCP/IP Socket |
1.2 项目结构
juzhen/
├── config/ # 配置管理模块
│ └── __init__.py # 配置类
├── core/ # 核心控制引擎
│ └── __init__.py # 矩阵控制器
├── protocol/ # 通信抽象层
│ └── __init__.py # 协议适配器
├── storage/ # 数据持久化层
│ └── __init__.py # 数据库操作
├── ui/ # GUI界面
│ └── __init__.py # 主窗口类
├── data/ # 数据目录
│ └── matrix.db # SQLite数据库
├── config/ # 配置目录
│ └── settings.json # 配置文件
├── main.py # 程序入口
└── requirements.txt # 依赖清单
2. 功能模块
2.1 配置管理 (config)
Config 类负责应用程序配置的加载、保存和访问。
主要功能:
- 从JSON文件加载配置
- 保存配置到JSON文件
- 支持层级配置访问(如
protocol.switch_format)
默认配置:
python
{
"matrix_ip": "192.168.1.100",
"matrix_port": 23,
"connection_timeout": 5,
"command_delay": 0.05,
"retry_count": 2,
"sync_interval": 5,
"protocol": {
"switch_format": "{in_}V{out}\r",
"query_output_format": "Q{out}\r",
"query_all_format": "ALLSTATUS\r",
"response_delimiter": "\r"
}
}
2.2 通信协议 (protocol)
ProtocolAdapter 类负责与矩阵设备建立TCP连接并发送指令。
主要功能:
- TCP连接到矩阵设备
- 发送切换指令
- 发送查询指令
- 支持指令重试机制
核心方法:
python
# 连接矩阵
connect(ip, port) -> bool
# 断开连接
disconnect()
# 发送指令
send_command(command, wait_response=False, timeout=2) -> response
# 生成切换指令
generate_switch_command(input_id, output_id) -> str
# 生成查询指令
generate_query_command(output_id) -> str
2.3 核心控制引擎 (core)
MatrixController 类实现核心的矩阵控制逻辑,包括路由状态管理和预设部分调用。
主要功能:
- 维护40x40路由状态缓存
- 实现预设部分调用逻辑
- 自动同步矩阵状态
核心方法:
python
# 切换路由
switch(input_id, output_id) -> bool
# 应用预设(部分调用)
apply_preset(preset_id) -> bool
# 查询单个输出路由
query_route(output_id) -> input_id
# 查询全部路由
query_all_routes()
# 保存当前路由到预设
save_current_to_preset(preset_id) -> dict
部分调用算法:
python
def apply_preset(self, preset_id):
mappings = self.database.load_preset(preset_id)
for output_id in sorted(mappings.keys()):
input_id = mappings[output_id]
# 检查当前是否已是此路由
current_input = self.get_current_input(output_id)
if current_input != input_id:
# 发送切换指令
self.switch(input_id, output_id)
# 未在预设中出现的输出端口保持不变
2.4 数据存储 (storage)
Database 类负责SQLite数据库操作,存储预设和端口标签。
主要功能:
- 预设的增删改查
- 输入/输出端口标签管理
- 配置导入/导出
数据库表结构:
sql
-- 预设表
CREATE TABLE presets (
id INTEGER PRIMARY KEY,
name TEXT NOT NULL,
mappings TEXT NOT NULL, -- JSON格式: {"1": 2, "3": 4}
created_time TEXT NOT NULL,
updated_time TEXT NOT NULL
);
-- 输入标签表
CREATE TABLE input_labels (
input_id INTEGER PRIMARY KEY,
label TEXT NOT NULL
);
-- 输出标签表
CREATE TABLE output_labels (
output_id INTEGER PRIMARY KEY,
label TEXT NOT NULL
);
2.5 用户界面 (ui)
MainWindow 类使用tkinter实现完整的图形界面。
界面布局:
+-------------------------------------------------------------------+
| [连接矩阵] IP:192.168.1.100 端口:23 状态:已连接 [刷新状态] |
+-------------------------------------------------------------------+
| 预设方案: |
| [方案1] [方案2] [方案3] [方案4] [方案5] [保存当前] [查看预设] |
| [方案6] [方案7] [方案8] [方案9] [方案10] |
+-------------------------------------------------------------------+
| 手动切换: 输入: [摄像机1 ▼] → 输出: [投影机左 ▼] [切换] |
+-------------------------------------------------------------------+
| 矩阵路由视图: |
| +-------------------------+ +-------------------------+ |
| | 输入端口 | | 输出端口 | |
| | IN1 → OUT3 (投影机) | | OUT1 ← IN5 (摄像机2) | |
| | IN2 → OUT4 | | OUT2 ← IN1 (摄像机1) | |
| | ... | | ... | |
| +-------------------------+ +-------------------------+ |
| 提示: 点击端口可查看连接信息,选择后进行切换 |
+-------------------------------------------------------------------+
| 状态: 已连接到 192.168.1.100:23 |
+-------------------------------------------------------------------+
菜单功能:
- 文件 → 导出配置 / 导入配置 / 退出
- 工具 → 编辑输入标签 / 编辑输出标签
3. 通信协议
3.1 默认指令格式
| 操作 | 指令格式 | 示例 |
|---|---|---|
| 切换 | {in}V{out}\r |
1V3\r (IN1→OUT3) |
| 查询单路 | Q{out}\r |
Q3\r (查询OUT3) |
| 查询全部 | ALLSTATUS\r |
ALLSTATUS\r |
3.2 响应解析
系统会自动解析矩阵返回的响应,提取当前输入源编号。
4. 使用说明
4.1 运行程序
bash
python main.py
4.2 连接矩阵
- 在IP输入框中输入矩阵的IP地址
- 在端口输入框中输入端口号(默认23)
- 点击"连接矩阵"按钮
- 连接成功后状态显示为"已连接"
4.3 手动切换
- 从"输入"下拉框选择输入源
- 从"输出"下拉框选择目标输出
- 点击"切换"按钮
- 确认弹出的对话框
4.4 预设管理
调用预设:
- 点击方案按钮直接调用预设
保存预设:
- 先设置好当前路由
- 点击"保存当前"按钮
- 输入方案编号
查看预设:
- 点击"查看预设"按钮,可查看所有预设详情
4.5 端口标签
- 点击菜单"工具" → "编辑输入标签"或"编辑输出标签"
- 为每个端口设置自定义名称
- 点击"确定"保存
4.6 配置导入/导出
- 点击菜单"文件" → "导出配置"
- 选择保存路径(JSON格式)
- 导入时选择JSON文件即可
5. 典型使用场景
场景:部分调用验证
初始状态:
- 方案一 = {1→3, 2→4}
- 方案二 = {1→4, 2→3}
操作步骤:
1. 调用方案一 → 路由变为:1-3, 2-4
2. 手动修改 5→8 → 路由:1-3, 2-4, 5-8
3. 调用方案二 → 仅执行 1→4, 2→3,5-8 保持不变
最终路由:1→4, 2→3, 5→8 ✅
6. 配置说明
6.1 协议配置
如果矩阵设备的通信协议不同,可以修改 config/settings.json 中的协议格式:
json
{
"protocol": {
"switch_format": "{in_}V{out}\r",
"query_output_format": "Q{out}\r",
"query_all_format": "ALLSTATUS\r",
"response_delimiter": "\r"
}
}
6.2 其他参数
| 参数 | 说明 | 默认值 |
|---|---|---|
| connection_timeout | 连接超时(秒) | 5 |
| command_delay | 指令间隔(秒) | 0.05 |
| retry_count | 重试次数 | 2 |
| sync_interval | 自动同步间隔(秒) | 5 |
7. 版本信息
| 版本 | 日期 | 说明 |
|---|---|---|
| 1.0 | 2025-03 | 初始版本 |
| 1.1 | 2025-04 | 优化界面,改为上下两表 |
8. 注意事项
- 确保矩阵设备与控制电脑网络互通
- 确认矩阵设备的TCP端口已开放
- 部分调用功能不会影响未在预设中定义的输出端口
- 建议定期导出配置备份