| | |
| | | using GSModbus.Config; |
| | | using GSModbus.Database; |
| | | |
| | | namespace GSModbus |
| | | { |
| | |
| | | InitializeConfigManager(); |
| | | SetupEventHandlers(); |
| | | UpdateConnectionStatus(false); |
| | | |
| | | // 初始化数据库状态 |
| | | lblDatabaseStatus.Text = "未检测"; |
| | | lblDatabaseStatus.ForeColor = Color.Gray; |
| | | btnTestDatabase.Enabled = false; |
| | | |
| | | // 尝试加载默认配置 |
| | | LoadDefaultConfigurationAsync(); |
| | |
| | | btnConnect.Click += BtnConnect_Click; |
| | | btnDisconnect.Click += BtnDisconnect_Click; |
| | | btnClearLog.Click += BtnClearLog_Click; |
| | | btnTestDatabase.Click += BtnTestDatabase_Click; |
| | | } |
| | | |
| | | #endregion |
| | |
| | | LogMessage($" PLC地址: {e.Configuration.Connection.IpAddress}:{e.Configuration.Connection.Port}"); |
| | | LogMessage($" 数据字段: {GetTotalFieldCount(e.Configuration)} 个"); |
| | | |
| | | // 更新数据库状态 |
| | | UpdateDatabaseStatus(e.Configuration.Database); |
| | | |
| | | // 启用连接按钮 |
| | | btnConnect.Enabled = true; |
| | | } |
| | |
| | | lblConfigPath.Text = "配置文件错误"; |
| | | lblConfigPath.ForeColor = Color.Red; |
| | | btnConnect.Enabled = false; |
| | | |
| | | // 重置数据库状态 |
| | | lblDatabaseStatus.Text = "未检测"; |
| | | lblDatabaseStatus.ForeColor = Color.Gray; |
| | | btnTestDatabase.Enabled = false; |
| | | |
| | | LogMessage($"❌ 配置错误: {e.ErrorMessage}"); |
| | | } |
| | |
| | | txtLog.Clear(); |
| | | _dataReceiveCount = 0; |
| | | lblDataCount.Text = "数据接收次数: 0"; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 数据库测试按钮点击事件 |
| | | /// </summary> |
| | | private async void BtnTestDatabase_Click(object? sender, EventArgs e) |
| | | { |
| | | if (_configManager?.CurrentConfiguration?.Database == null) |
| | | { |
| | | LogMessage("❌ 请先加载包含数据库配置的配置文件"); |
| | | MessageBox.Show("请先选择并加载包含数据库配置的配置文件", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); |
| | | return; |
| | | } |
| | | |
| | | try |
| | | { |
| | | btnTestDatabase.Enabled = false; |
| | | btnTestDatabase.Text = "测试中..."; |
| | | lblDatabaseStatus.Text = "测试中..."; |
| | | lblDatabaseStatus.ForeColor = Color.Orange; |
| | | |
| | | LogMessage("🔍 正在测试数据库连接..."); |
| | | |
| | | var dbConfig = _configManager.CurrentConfiguration.Database; |
| | | var (success, message) = await DatabaseManager.TestConnectionAsync(dbConfig); |
| | | |
| | | if (success) |
| | | { |
| | | lblDatabaseStatus.Text = "连接成功"; |
| | | lblDatabaseStatus.ForeColor = Color.Green; |
| | | LogMessage($"✅ 数据库连接测试成功"); |
| | | LogMessage($" {message}"); |
| | | } |
| | | else |
| | | { |
| | | lblDatabaseStatus.Text = "连接失败"; |
| | | lblDatabaseStatus.ForeColor = Color.Red; |
| | | LogMessage($"❌ 数据库连接测试失败: {message}"); |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | lblDatabaseStatus.Text = "测试异常"; |
| | | lblDatabaseStatus.ForeColor = Color.Red; |
| | | LogMessage($"❌ 数据库连接测试异常: {ex.Message}"); |
| | | MessageBox.Show($"数据库连接测试异常: {ex.Message}", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); |
| | | } |
| | | finally |
| | | { |
| | | btnTestDatabase.Text = "测试数据库"; |
| | | btnTestDatabase.Enabled = true; |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | |
| | | lblStats.Text = stats.GetSummary(); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 更新数据库状态显示 |
| | | /// </summary> |
| | | /// <param name="dbConfig">数据库配置</param> |
| | | private void UpdateDatabaseStatus(DatabaseConfig? dbConfig) |
| | | { |
| | | if (dbConfig == null) |
| | | { |
| | | lblDatabaseStatus.Text = "未配置"; |
| | | lblDatabaseStatus.ForeColor = Color.Gray; |
| | | btnTestDatabase.Enabled = false; |
| | | LogMessage(" 数据库: 未配置"); |
| | | } |
| | | else if (!dbConfig.Enabled) |
| | | { |
| | | lblDatabaseStatus.Text = "已禁用"; |
| | | lblDatabaseStatus.ForeColor = Color.Gray; |
| | | btnTestDatabase.Enabled = false; |
| | | LogMessage(" 数据库: 已禁用"); |
| | | } |
| | | else |
| | | { |
| | | lblDatabaseStatus.Text = "未检测"; |
| | | lblDatabaseStatus.ForeColor = Color.Orange; |
| | | btnTestDatabase.Enabled = true; |
| | | LogMessage($" 数据库: {dbConfig.Type} - 已配置,可测试连接"); |
| | | } |
| | | } |
| | | |
| | | #endregion |
| | | |
| | | #region 辅助方法 |