public async Task <WriteRegistersResult> WriteHoldingRegisterAsync(short value, ushort address, CancellationToken cancellationToken) { lock (_isInitializedLock) { if (_isInitialized == false) { throw new ModbusException("This Modbus RTU Device must be Initialized first before any Requests can be Processed"); } } if (address > MaximumAddress) { throw new ArgumentOutOfRangeException(nameof(address), "The Address is greater than the Maximum Allowed Value of '" + MaximumAddress + "'"); } WriteHoldingRegisterRequest request = WriteHoldingRegisterRequest.CreateNew(this, address, value); ProcessRequestResult requestResult = await _channel.ProcessRequestAsync(request, _timeout, _retries, _delayBetweenMessages, cancellationToken); WriteHoldingRegisterResponse.Validate(request, requestResult.Response); return(new WriteRegistersResult { BytesSent = requestResult.BytesSent, PacketsSent = requestResult.PacketsSent, BytesReceived = requestResult.BytesReceived, PacketsReceived = requestResult.PacketsReceived, Duration = requestResult.Duration, }); }
public async Task <WriteCoilsResult> WriteHoldingCoilsAsync(bool[] values, ushort startAddress, CancellationToken cancellationToken) { lock (_isInitializedLock) { if (_isInitialized == false) { throw new ModbusException("This Modbus RTU Device must be Initialized first before any Requests can be Processed"); } } if (startAddress > MaximumAddress) { throw new ArgumentOutOfRangeException(nameof(startAddress), "The Start Address is greater than the Maximum Allowed Value of '" + MaximumAddress + "'"); } if (values.Length == 0) { throw new ArgumentOutOfRangeException(nameof(values), "The Values Array cannot be Empty"); } if (values.Length > MaximumCoilsWriteLength) { throw new ArgumentOutOfRangeException(nameof(values), "The Values Array Length was greater than the Maximum Allowed of '" + MaximumCoilsWriteLength + "'"); } WriteHoldingCoilsRequest request = WriteHoldingCoilsRequest.CreateNew(this, startAddress, values); ProcessRequestResult requestResult = await _channel.ProcessRequestAsync(request, _timeout, _retries, _delayBetweenMessages, cancellationToken); WriteHoldingCoilsResponse.Validate(request, requestResult.Response); return(new WriteCoilsResult { BytesSent = requestResult.BytesSent, PacketsSent = requestResult.PacketsSent, BytesReceived = requestResult.BytesReceived, PacketsReceived = requestResult.PacketsReceived, Duration = requestResult.Duration, }); }
public async Task <ReadRegistersResult> ReadInputRegistersAsync(ushort startAddress, ushort length, CancellationToken cancellationToken) { lock (_isInitializedLock) { if (_isInitialized == false) { throw new ModbusException("This Modbus RTU Device must be Initialized first before any Requests can be Processed"); } } if (startAddress > MaximumAddress) { throw new ArgumentOutOfRangeException(nameof(startAddress), "The Start Address is greater than the Maximum Allowed Value of '" + MaximumAddress + "'"); } if (length == 0) { throw new ArgumentOutOfRangeException(nameof(length), "The Length cannot be Zero"); } if (length > MaximumRegistersReadLength) { throw new ArgumentOutOfRangeException(nameof(length), "The Length is greater than the Maximum Allowed Value of '" + MaximumRegistersReadLength + "'"); } ReadInputRegistersRequest request = ReadInputRegistersRequest.CreateNew(this, startAddress, length); ProcessRequestResult requestResult = await _channel.ProcessRequestAsync(request, _timeout, _retries, _delayBetweenMessages, cancellationToken); return(new ReadRegistersResult { BytesSent = requestResult.BytesSent, PacketsSent = requestResult.PacketsSent, BytesReceived = requestResult.BytesReceived, PacketsReceived = requestResult.PacketsReceived, Duration = requestResult.Duration, Values = ReadInputRegistersResponse.ExtractValues(request, requestResult.Response), }); }