Move GetAdditionalErrorText to S7ErrorCodes

This commit is contained in:
Peter Butzhammer
2024-02-09 12:38:16 +01:00
parent 4701a224a7
commit 996706df2f
3 changed files with 21 additions and 15 deletions

View File

@@ -1,4 +1,6 @@
namespace Sharp7.Rx;
#nullable enable
namespace Sharp7.Rx;
public static class S7ErrorCodes
{
@@ -12,6 +14,18 @@ public static class S7ErrorCodes
0x900000, // CPU: Address out of range
};
private static readonly IReadOnlyDictionary<int, string> additionalErrorTexts = new Dictionary<int, string>
{
{0xC00000, "This happens when the DB does not exist."},
{0x900000, "This happens when the DB is not long enough."},
{
0x40000, """
This error occurs when the DB is "optimized" or "PUT/GET communication" is not enabled.
See https://snap7.sourceforge.net/snap7_client.html#target_compatibility.
"""
}
};
/// <summary>
/// Some error codes indicate connection lost, in which case, the driver tries to reestablish connection.
/// Other error codes indicate a user error, like reading from an unavailable DB or exceeding
@@ -21,4 +35,7 @@ public static class S7ErrorCodes
{
return !notDisconnectedErrorCodes.Contains(errorCode);
}
public static string? GetAdditionalErrorText(int errorCode) =>
additionalErrorTexts.TryGetValue(errorCode, out var text) ? text : null;
}

View File

@@ -12,18 +12,6 @@ namespace Sharp7.Rx;
internal class Sharp7Connector : IS7Connector
{
private static readonly IReadOnlyDictionary<int, string> additionalErrorTexts = new Dictionary<int, string>
{
{0xC00000, "This happens when the DB does not exist."},
{0x900000, "This happens when the DB is not long enough."},
{
0x40000, """
This error occurs when the DB is "optimized" or "PUT/GET communication" is not enabled.
See https://snap7.sourceforge.net/snap7_client.html#target_compatibility.
"""
}
};
private readonly BehaviorSubject<ConnectionState> connectionStateSubject = new(Enums.ConnectionState.Initial);
private readonly int cpuSlotNr;
@@ -239,7 +227,8 @@ internal class Sharp7Connector : IS7Connector
var errorText = EvaluateErrorCode(result);
var completeMessage = $"{message}: {errorText}";
if (additionalErrorTexts.TryGetValue(result, out var additionalErrorText))
var additionalErrorText = S7ErrorCodes.GetAdditionalErrorText(result);
if (additionalErrorText != null)
completeMessage += Environment.NewLine + additionalErrorText;
throw new S7CommunicationException(completeMessage, result, errorText);

View File

@@ -17,7 +17,7 @@ public class Sharp7Plc : IPlc
private readonly ConcurrentSubjectDictionary<string, byte[]> multiVariableSubscriptions = new(StringComparer.InvariantCultureIgnoreCase);
private readonly List<long> performanceCoutner = new(1000);
private readonly PlcConnectionSettings plcConnectionSettings;
private readonly IVariableNameParser varaibleNameParser = new CacheVariableNameParser(new VariableNameParser());
private readonly CacheVariableNameParser varaibleNameParser = new CacheVariableNameParser(new VariableNameParser());
private bool disposed;
private Sharp7Connector s7Connector;