185 lines
5.8 KiB
C#
185 lines
5.8 KiB
C#
// using UnityEngine;
|
|
// using UnityEngine.UI;
|
|
// using TMPro;
|
|
|
|
// /// <summary>
|
|
// /// 串口通信状态监控器
|
|
// /// 用于在UI上显示串口连接状态和通信质量
|
|
// /// </summary>
|
|
// public class SerialStatusMonitor : MonoBehaviour
|
|
// {
|
|
// [Header("状态显示")]
|
|
// public Image StatusIndicator; // 状态指示灯
|
|
// public TextMeshProUGUI StatusText; // 状态文本
|
|
// public TextMeshProUGUI ConnectionInfo; // 连接信息
|
|
// public TextMeshProUGUI DataRate; // 数据传输速率
|
|
|
|
// [Header("状态颜色")]
|
|
// public Color ConnectedColor = Color.green;
|
|
// public Color DisconnectedColor = Color.red;
|
|
// public Color ErrorColor = Color.yellow;
|
|
|
|
// private DCX.Communication.DCSSerialManager _serialManager;
|
|
// private int _dataPacketsReceived = 0;
|
|
// private float _lastDataRateUpdate = 0f;
|
|
// private string _lastError = "";
|
|
|
|
// void Start()
|
|
// {
|
|
// // 查找DCS串口管理器
|
|
// _serialManager = FindObjectOfType<DCX.Communication.DCSSerialManager>();
|
|
|
|
// if (_serialManager != null)
|
|
// {
|
|
// // 订阅串口事件
|
|
// _serialManager.OnConnected += OnSerialConnected;
|
|
// _serialManager.OnDisconnected += OnSerialDisconnected;
|
|
// _serialManager.OnError += OnSerialError;
|
|
// _serialManager.OnHeartbeatReceived += OnDataReceived;
|
|
// _serialManager.OnRawDataReceived += OnRawDataReceived;
|
|
// }
|
|
|
|
// // 初始状态
|
|
// UpdateStatus(SerialStatus.Disconnected, "未连接");
|
|
|
|
// // 开始定时更新数据速率
|
|
// InvokeRepeating(nameof(UpdateDataRate), 1f, 1f);
|
|
// }
|
|
|
|
// private void OnSerialConnected()
|
|
// {
|
|
// UpdateStatus(SerialStatus.Connected, "已连接");
|
|
// if (ConnectionInfo != null)
|
|
// {
|
|
// ConnectionInfo.text = $"串口: 已连接\n协议: DCS通信协议";
|
|
// }
|
|
// }
|
|
|
|
// private void OnSerialDisconnected()
|
|
// {
|
|
// UpdateStatus(SerialStatus.Disconnected, "连接断开");
|
|
// if (ConnectionInfo != null)
|
|
// {
|
|
// ConnectionInfo.text = "串口: 未连接";
|
|
// }
|
|
// }
|
|
|
|
// private void OnSerialError(string error)
|
|
// {
|
|
// UpdateStatus(SerialStatus.Error, $"错误: {error}");
|
|
// _lastError = error;
|
|
// if (ConnectionInfo != null)
|
|
// {
|
|
// ConnectionInfo.text = $"串口: 错误\n{error}";
|
|
// }
|
|
// }
|
|
|
|
// private void OnDataReceived(DCX.Communication.DCSSerialManager.HeartbeatData data)
|
|
// {
|
|
// _dataPacketsReceived++;
|
|
// }
|
|
|
|
// private void OnRawDataReceived(byte[] data)
|
|
// {
|
|
// // 记录原始数据接收
|
|
// _dataPacketsReceived++;
|
|
// }
|
|
|
|
// private void UpdateStatus(SerialStatus status, string message)
|
|
// {
|
|
// if (StatusIndicator != null)
|
|
// {
|
|
// StatusIndicator.color = status switch
|
|
// {
|
|
// SerialStatus.Connected => ConnectedColor,
|
|
// SerialStatus.Disconnected => DisconnectedColor,
|
|
// SerialStatus.Error => ErrorColor,
|
|
// _ => DisconnectedColor
|
|
// };
|
|
// }
|
|
|
|
// if (StatusText != null)
|
|
// {
|
|
// StatusText.text = message;
|
|
// StatusText.color = status switch
|
|
// {
|
|
// SerialStatus.Connected => ConnectedColor,
|
|
// SerialStatus.Disconnected => Color.white,
|
|
// SerialStatus.Error => ErrorColor,
|
|
// _ => Color.white
|
|
// };
|
|
// }
|
|
// }
|
|
|
|
// private void UpdateDataRate()
|
|
// {
|
|
// if (DataRate != null)
|
|
// {
|
|
// float timeDelta = Time.time - _lastDataRateUpdate;
|
|
// if (timeDelta > 0)
|
|
// {
|
|
// float packetsPerSecond = _dataPacketsReceived / timeDelta;
|
|
// DataRate.text = $"数据: {packetsPerSecond:F1} 包/秒";
|
|
// }
|
|
// }
|
|
|
|
// _dataPacketsReceived = 0;
|
|
// _lastDataRateUpdate = Time.time;
|
|
// }
|
|
|
|
// /// <summary>
|
|
// /// 手动触发连接测试
|
|
// /// </summary>
|
|
// public void TestConnection()
|
|
// {
|
|
// if (_serialManager != null)
|
|
// {
|
|
// UpdateStatus(SerialStatus.Disconnected, "测试连接...");
|
|
// // 这里可以触发重连或连接测试
|
|
// _serialManager.Connect();
|
|
// }
|
|
// }
|
|
|
|
// /// <summary>
|
|
// /// 获取详细状态信息
|
|
// /// </summary>
|
|
// public string GetDetailedStatus()
|
|
// {
|
|
// if (_serialManager == null)
|
|
// {
|
|
// return "串口管理器未找到";
|
|
// }
|
|
|
|
// var status = new System.Text.StringBuilder();
|
|
// status.AppendLine("=== DCS串口状态 ===");
|
|
// status.AppendLine($"管理器状态: {(_serialManager.enabled ? "启用" : "禁用")}");
|
|
// status.AppendLine($"数据包计数: {_dataPacketsReceived}");
|
|
|
|
// if (!string.IsNullOrEmpty(_lastError))
|
|
// {
|
|
// status.AppendLine($"最后错误: {_lastError}");
|
|
// }
|
|
|
|
// return status.ToString();
|
|
// }
|
|
|
|
// void OnDestroy()
|
|
// {
|
|
// // 清理事件订阅
|
|
// if (_serialManager != null)
|
|
// {
|
|
// _serialManager.OnConnected -= OnSerialConnected;
|
|
// _serialManager.OnDisconnected -= OnSerialDisconnected;
|
|
// _serialManager.OnError -= OnSerialError;
|
|
// _serialManager.OnHeartbeatReceived -= OnDataReceived;
|
|
// _serialManager.OnRawDataReceived -= OnRawDataReceived;
|
|
// }
|
|
// }
|
|
|
|
// private enum SerialStatus
|
|
// {
|
|
// Connected,
|
|
// Disconnected,
|
|
// Error
|
|
// }
|
|
// } |