Пример #1
0
        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);
        }
Пример #2
0
        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);
        }
Пример #3
0
        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);
        }
Пример #4
0
        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);
        }
Пример #5
0
        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);
        }