public async Task <IQueryResult <bool> > ReadCoilStatusAsync(ushort coilAddress, string dataTitle) { await _semaphoreSlim.WaitAsync(); IQueryResult <bool> queryResult = _queryResultFactory.CreateDefaultQueryResult <bool>(); if (!CheckConnection(queryResult)) { return(queryResult); } try { queryResult.Result = (await _currentModbusMaster.ReadCoilsAsync(_slaveId, coilAddress, 1))[0]; LogQuery(true, dataTitle, "Fun:1" + " Addr:" + coilAddress + " Num:" + 1 + " Data:" + queryResult.Result); queryResult.IsSuccessful = true; } catch (Exception e) { LogQuery(false, dataTitle, "Fun:1" + " Addr:" + coilAddress + " Num:" + 1, exception: e); queryResult.IsSuccessful = false; queryResult.AddExeption(e); } _semaphoreSlim.Release(1); return(queryResult); }
public async Task <IQueryResult> WriteSingleRegisterAsync(ushort registerAddress, ushort valueToWrite, string dataTitle) { await _semaphoreSlim.WaitAsync(); IQueryResult queryResult = _queryResultFactory.CreateDefaultQueryResult(); if (!CheckConnection(queryResult)) { return(queryResult); } try { await _currentModbusMaster.WriteSingleRegisterAsync(_slaveId, registerAddress, valueToWrite); LogQuery(true, dataTitle, "Fun:6" + " Addr:" + registerAddress + " Data:" + valueToWrite); queryResult.IsSuccessful = true; } catch (Exception e) { LogQuery(false, dataTitle, "Fun:6" + " Addr:" + registerAddress + " Data:" + valueToWrite, exception: e); queryResult.IsSuccessful = false; queryResult.AddExeption(e); } _semaphoreSlim.Release(1); return(queryResult); }
public async Task <IQueryResult <ushort[]> > ReadHoldingResgistersAsync(ushort startAddress, ushort numberOfPoints, string dataTitle) { await _semaphoreSlim.WaitAsync(); IQueryResult <ushort[]> queryResult = _queryResultFactory.CreateDefaultQueryResult <ushort[]>(); if (!CheckConnection(queryResult)) { return(queryResult); } try { queryResult.Result = await _currentModbusMaster.ReadHoldingRegistersAsync(_slaveId, startAddress, numberOfPoints); List <string> results = queryResult.Result.Select((arg => arg.ToString())).ToList(); string resStr = ""; foreach (string res in results) { resStr += res; resStr += " "; } LogQuery(true, dataTitle, "Fun:3" + " Addr:" + startAddress + " Num:" + numberOfPoints + " Data:" + resStr); queryResult.IsSuccessful = true; } catch (Exception e) { LogQuery(false, dataTitle, "Fun:3" + " Addr:" + startAddress + " Num:" + numberOfPoints, exception: e); queryResult.IsSuccessful = false; queryResult.AddExeption(e); } _semaphoreSlim.Release(1); return(queryResult); }
public async Task <IQueryResult> WriteMultipleRegistersAsync(ushort startAddress, ushort[] dataToWrite, string dataTitle) { await _semaphoreSlim.WaitAsync(); IQueryResult queryResult = _queryResultFactory.CreateDefaultQueryResult(); if (!CheckConnection(queryResult)) { return(queryResult); } string dataStr = ""; foreach (ushort res in dataToWrite) { dataStr += res; dataStr += " "; } try { await _currentModbusMaster.WriteMultipleRegistersAsync(_slaveId, startAddress, dataToWrite); LogQuery(true, dataTitle, "Fun:16" + " Addr:" + startAddress + " Data:" + dataStr); queryResult.IsSuccessful = true; } catch (Exception e) { LogQuery(false, dataTitle, "Fun:16" + " Addr:" + startAddress + " Data:" + dataStr, exception: e); queryResult.IsSuccessful = false; queryResult.AddExeption(e); } _semaphoreSlim.Release(1); return(queryResult); }
public async Task <IQueryResult <bool[]> > ReadCoilStatusAsync(ushort coilAddress, string dataTitle, ushort numberOfPoints) { await _semaphoreSlim.WaitAsync(); IQueryResult <bool[]> queryResult = _queryResultFactory.CreateDefaultQueryResult <bool[]>(); if (!CheckConnection(queryResult)) { return(queryResult); } try { queryResult.Result = await _currentModbusMaster.ReadCoilsAsync(_slaveId, coilAddress, numberOfPoints); string resStr = ""; foreach (bool res in queryResult.Result) { resStr += res; resStr += " "; } LogQuery(true, dataTitle, "Fun:1" + " Addr:" + coilAddress + " Num:" + numberOfPoints + " Data:" + resStr); queryResult.IsSuccessful = true; } catch (Exception e) { LogQuery(false, dataTitle, "Fun:1" + " Addr:" + coilAddress + " Num:" + numberOfPoints, exception: e); queryResult.IsSuccessful = false; queryResult.AddExeption(e); } _semaphoreSlim.Release(1); return(queryResult); }