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);
}
}