C# Modbus 2.0在C语言中处理异常#

C# Modbus 2.0在C语言中处理异常#,c#,exception,asp.net-web-api2,modbus,C#,Exception,Asp.net Web Api2,Modbus,我正在开发webapi,其中我使用了Modbus协议库。文件中提到了这一点 异常处理 有几种情况下,响应被破坏,没有响应(可能从机停机),。。。在这些情况下,将引发异常,在这些情况下应使用try-catch语句来处理 有三种异常:-EmptyResponsedException:从机不响应任何内容,似乎从机已关闭,连接已断开…-MissingDataException:响应字节数小于所需字节数,例如:所需字节数的长度为11,但接收到的字节数的长度为9。-DataCorruptedExceptio

我正在开发
webapi
,其中我使用了
Modbus
协议库。文件中提到了这一点

异常处理

有几种情况下,响应被破坏,没有响应(可能从机停机),。。。在这些情况下,将引发异常,在这些情况下应使用
try-catch
语句来处理

有三种异常:-
EmptyResponsedException
:从机不响应任何内容,似乎从机已关闭,连接已断开…-
MissingDataException
:响应字节数小于所需字节数,例如:所需字节数的长度为11,但接收到的字节数的长度为9。-<代码>DataCorruptedException:校验和失败,错误的响应从属id,错误的响应函数代码

try {
var responseBytes = stream.RequestFunc3(0x11, 0x006B, 0x0003);
// handle your response bytes
}
catch(Exception e) {
if (e is DataCorruptedException) {
    BroadcastHandledExceptionEvent("checksum is failed", e);
}
else if (e is EmptyResponsedException) {
    BroadcastHandledExceptionEvent("request timeout", e);
}
else if (e is MissingDataException) {
    BroadcastHandledExceptionEvent("Missing response bytes", e);
}
else {
    throw e;
}
}
当我试图将这段代码添加到我的代码中时,我遇到了下面的错误

当前上下文中不存在名称“BroadcastHandledExceptionEvent”

我试图找到一个解决办法,但我一无所获


非常感谢您的帮助。

看起来
BroadcastHandledExceptionEvent
只是示例中的一种仲裁方法。您必须根据异常类型实现自己的错误处理。

“BroadcastHandledExceptionEvent”只是一个示例方法名称,文档使用它来演示如何处理捕获异常类型。您可以使用自己的方法将异常消息输出到UI、写入日志等

例如,使用相同的方法名称(必要时具有“广播”异常的功能):

class ModbusTest
{
公共事件处理程序ModbusExceptionThrown;
公共void TestRead()
{
尝试
{
var responseBytes=stream.RequestFunc3(0x11、0x006B、0x0003);
//处理您的响应字节
}
捕获(例外e)
{
if(e是DataCorruptedException)
{
BroadcastHandledExceptionEvent(“校验和失败”,e);
}
else if(e为空响应异常)
{
BroadcastHandledExceptionEvent(“请求超时”,e);
}
else if(e为缺失数据异常)
{
BroadcastHandledExceptionEvent(“缺少响应字节”,e);
}
其他的
{
投掷e;
}
}
}
//将异常stacktrace记录到控制台,并使用消息字符串引发事件
受保护的虚拟void BroadcastHandledExceptionEvent(字符串消息,异常示例)
{
控制台写入线(例如StackTrace);
EventHandler=ModbusExceptionThrown;
handler?.Invoke(这个,消息);
}
}

现在,您的父对象可以侦听modbus异常消息,或者如果不需要,您可以简单地将其记录到控制台、文件或其他任何地方。

您可以提供任何示例吗?
class ModbusTest
{
    public event EventHandler<string> ModbusExceptionThrown;

    public void TestRead()
    {
        try
        {
            var responseBytes = stream.RequestFunc3(0x11, 0x006B, 0x0003);
            // handle your response bytes
        }
        catch (Exception e)
        {
            if (e is DataCorruptedException)
            {
                BroadcastHandledExceptionEvent("checksum is failed", e);
            }
            else if (e is EmptyResponsedException)
            {
                BroadcastHandledExceptionEvent("request timeout", e);
            }
            else if (e is MissingDataException)
            {
                BroadcastHandledExceptionEvent("Missing response bytes", e);
            }
            else
            {
                throw e;
            }
        }
    }

    // logs exception stacktrace to console and raises event with message string
    protected virtual void BroadcastHandledExceptionEvent(string Message, Exception Ex)
    {
        Console.WriteLine(Ex.StackTrace);
        EventHandler<string> handler = ModbusExceptionThrown;
        handler?.Invoke(this, Message);
    }
}