You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#中依赖Twincat ADS的BOOL读取方法异常捕获及续行问题

解决Twincat ADS读取BOOL值的异常处理问题

你的核心问题是值类型bool无法返回null,导致读取失败时没法在不终止程序的情况下处理结果。下面给两种实用的解决方案:

方案一:返回可空布尔类型bool?

把方法返回类型改成bool?(可空值类型),成功时返回true/false,失败时返回null,同时在catch块输出对应提示:

public bool? ReadBool(string address)
{
    try
    {
        return (bool)tcAds.ReadValue(address, typeof(bool));
    }
    catch (TcAdsException ex) // 优先捕获ADS专属异常,避免吞掉其他未知错误
    {
        if (ConnectionState == ConnectionStates.Connected)
        {
            Trace.WriteLine($"{address} 未找到");
        }
        else
        {
            Trace.WriteLine("请尝试连接PLC");
        }
        return null; // 读取失败返回null
    }
    catch (Exception ex) // 可选:捕获其他意外异常
    {
        Trace.WriteLine($"读取发生未知错误:{ex.Message}");
        return null;
    }
}

调用时的处理逻辑:

bool? result = ReadBool("MyPlcVariable");
if (result.HasValue)
{
    // 读取成功,使用result.Value
    Console.WriteLine($"读取结果:{result.Value}");
}
else
{
    // 读取失败,已输出提示,可做额外处理
}

方案二:使用输出参数+返回状态

如果不想用可空类型,用out参数返回实际值,方法返回bool表示读取是否成功:

public bool TryReadBool(string address, out bool result)
{
    result = false; // 初始化默认值
    try
    {
        result = (bool)tcAds.ReadValue(address, typeof(bool));
        return true; // 读取成功返回true
    }
    catch (TcAdsException ex)
    {
        if (ConnectionState == ConnectionStates.Connected)
        {
            Trace.WriteLine($"{address} 未找到");
        }
        else
        {
            Trace.WriteLine("请尝试连接PLC");
        }
        return false; // 读取失败返回false
    }
    catch (Exception ex)
    {
        Trace.WriteLine($"读取发生未知错误:{ex.Message}");
        return false;
    }
}

调用示例:

if (TryReadBool("MyPlcVariable", out bool value))
{
    Console.WriteLine($"读取结果:{value}");
}
else
{
    // 读取失败,执行对应逻辑
}

额外提示

  • 尽量不要用空catch块,优先捕获TcAdsException这类具体异常,避免误吞严重错误(比如内存溢出、线程异常)。
  • 若必须捕获所有异常,保留外层catch (Exception)时一定要记录错误信息,方便后续排查。

内容的提问来源于stack exchange,提问作者CG33

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 04:06:10