diff --git a/Sharp7.Rx/Extensions/OperandExtensions.cs b/Sharp7.Rx/Extensions/OperandExtensions.cs new file mode 100644 index 0000000..c78cfa5 --- /dev/null +++ b/Sharp7.Rx/Extensions/OperandExtensions.cs @@ -0,0 +1,17 @@ +using Sharp7.Rx.Enums; + +namespace Sharp7.Rx.Extensions; + +internal static class OperandExtensions +{ + public static S7Area ToArea(this Operand operand) => + operand switch + { + Operand.Input => S7Area.PE, + Operand.Output => S7Area.PA, + Operand.Marker => S7Area.MK, + Operand.Db => S7Area.DB, + _ => throw new ArgumentOutOfRangeException(nameof(operand), operand, null) + }; + +} diff --git a/Sharp7.Rx/Sharp7Connector.cs b/Sharp7.Rx/Sharp7Connector.cs index b983c46..7adfa2e 100644 --- a/Sharp7.Rx/Sharp7Connector.cs +++ b/Sharp7.Rx/Sharp7Connector.cs @@ -146,10 +146,9 @@ namespace Sharp7.Rx var buffer = new byte[bytesToRead]; - var area = FromOperand(operand); var result = - await Task.Factory.StartNew(() => sharp7.ReadArea(area, dBNr, startByteAddress, bytesToRead, S7Consts.S7WLByte, buffer), token, TaskCreationOptions.None, scheduler); + await Task.Factory.StartNew(() => sharp7.ReadArea(operand.ToArea(), dBNr, startByteAddress, bytesToRead, S7WordLength.Byte, buffer), token, TaskCreationOptions.None, scheduler); token.ThrowIfCancellationRequested(); if (result != 0) @@ -170,7 +169,7 @@ namespace Sharp7.Rx var offsetStart = (startByteAddress * 8) + bitAdress; - var result = await Task.Factory.StartNew(() => sharp7.WriteArea(FromOperand(operand), dbNr, offsetStart, 1, S7Consts.S7WLBit, buffer), token, TaskCreationOptions.None, scheduler); + var result = await Task.Factory.StartNew(() => sharp7.WriteArea(operand.ToArea(), dbNr, offsetStart, 1, S7WordLength.Bit, buffer), token, TaskCreationOptions.None, scheduler); token.ThrowIfCancellationRequested(); if (result != 0) @@ -186,7 +185,7 @@ namespace Sharp7.Rx { EnsureConnectionValid(); - var result = await Task.Factory.StartNew(() => sharp7.WriteArea(FromOperand(operand), dBNr, startByteAdress, data.Length, S7Consts.S7WLByte, data), token, TaskCreationOptions.None, scheduler); + var result = await Task.Factory.StartNew(() => sharp7.WriteArea(operand.ToArea(), dBNr, startByteAdress, data.Length, S7WordLength.Byte, data), token, TaskCreationOptions.None, scheduler); token.ThrowIfCancellationRequested(); if (result != 0) @@ -258,23 +257,6 @@ namespace Sharp7.Rx return false; } - private int FromOperand(Operand operand) - { - switch (operand) - { - case Operand.Input: - return S7Consts.S7AreaPE; - case Operand.Output: - return S7Consts.S7AreaPA; - case Operand.Marker: - return S7Consts.S7AreaMK; - case Operand.Db: - return S7Consts.S7AreaDB; - default: - throw new ArgumentOutOfRangeException(nameof(operand), operand, null); - } - } - private async Task Reconnect() { await CloseConnection(); @@ -294,4 +276,4 @@ namespace Sharp7.Rx Dispose(false); } } -} \ No newline at end of file +}