Exemplo n.º 1
0
        private static void ReadBitsFinal(
            byte slaveAddress,
            IDictionary <ushort, bool> bitsData,
            ReadDelegate readDel,
            string dataName,
            int readStart,
            int length,
            IEnumerable <ushort> addresses)
        {
            int byteLength = length / 8;

            if (length % 8 != 0)
            {
                ++byteLength;
            }
            var bytes = readDel.Invoke(slaveAddress, readStart, byteLength, length);

            if (bytes == null || bytes.Count != byteLength)
            {
                throw new Exception(
                          string.Format("Error when reading {0}. SlaveAddress: {1}, Address {2}, Length {3}",
                                        dataName, slaveAddress, readStart, length));
            }
            foreach (ushort address in addresses)
            {
                int index = address - readStart;
                bitsData.Add(address, GetBitFromByte(bytes[index / 8], index % 8));
            }
        }
        public async Task <HidDeviceData> FastReadAsync(int timeout = 0)
        {
            var readDelegate = new ReadDelegate(FastRead);

#if NET20 || NET35 || NET5_0_OR_GREATER
            return(await Task <HidDeviceData> .Factory.StartNew(() => readDelegate.Invoke(timeout)));
#else
            return(await Task <HidDeviceData> .Factory.FromAsync(readDelegate.BeginInvoke, readDelegate.EndInvoke, timeout, null));
#endif
        }
Exemplo n.º 3
0
        /// <summary>
        /// Подпрограмма считывания принятых данных
        /// </summary>
        /// <param name="channel">Номер канала для выдачи (допустимые значения от 1 до 16).</param>
        /// <param name="data">Массив считанных данных</param>
        /// <param name="length">Количество считываемых слов (допустимые значения от 1 до 256).</param>
        /// <param name="readed">Количество считанных слов</param>
        /// <returns></returns>
        public int Read(ushort channel, ref uint[] data, int length, out int readed)
        {
            // Synchronously wait to enter the Semaphore.
            SemaphoreSlim.Wait();
            // Запращиваемое количество данных
            var kern_readed = ( uint )length;
            var gch         = GCHandle.Alloc(data, GCHandleType.Pinned);
            var error       = _read?.Invoke(ref _device, channel, gch.AddrOfPinnedObject(), ref kern_readed) ??
                              int.MaxValue;

            gch.Free();
            readed = ( int )kern_readed;
            // Release the Semaphore.
            SemaphoreSlim.Release();
            return(error);
        }
Exemplo n.º 4
0
        private static void ReadRegistersFinal(
            IDictionary <KeyValuePair <int, int>, byte[]> registersData,
            ReadDelegate readDel, int readStart, int length, IEnumerable <KeyValuePair <int, int> > addresses)
        {
            var bytes = readDel.Invoke(readStart, length);

            if (bytes == null || bytes.Count != length * 2)
            {
                throw new Exception(string.Join(Environment.NewLine,
                                                string.Format("Error when reading registers"),
                                                string.Format("Address {0}, Length {1}", readStart, length)));
            }
            foreach (var address in addresses)
            {
                var index = (address.Key - readStart) * 2;
                registersData.Add(address, GetBytes(bytes, index, address.Value * 2));
            }
        }
Exemplo n.º 5
0
        private static void ReadBitsFinal(
            IDictionary <int, bool> bitsData, ReadDelegate readDel, int readStart,
            int length, IEnumerable <int> addresses, string label)
        {
            var bytes = readDel.Invoke(readStart, length);

            if (bytes == null || bytes.Count != length / 8)
            {
                throw new Exception(string.Join(Environment.NewLine,
                                                string.Format("Error when reading merkers"),
                                                string.Format("Address {0}{1}, Length {2}", label, readStart, length)));
            }
            foreach (var address in addresses)
            {
                var index = address - readStart;
                bitsData.Add(address, GetBitFromByte(bytes[index / 8], index % 8));
            }
        }
Exemplo n.º 6
0
        private void ReadRegistersFinal(
            byte slaveAddress,
            IDictionary <KeyValuePair <ushort, int>, byte[]> registersData,
            ReadDelegate readDel,
            string dataName,
            int readStart,
            int length,
            IEnumerable <KeyValuePair <ushort, int> > addresses)
        {
            int byteLength = length * 2;
            var bytes      = readDel.Invoke(slaveAddress, readStart, byteLength, length);

            if (bytes == null || bytes.Count != byteLength)
            {
                throw new Exception(
                          string.Format("Error when reading {0}. SlaveAddress: {1}, Address {2}, Length {3}",
                                        dataName, slaveAddress, readStart, length));
            }
            foreach (var address in addresses)
            {
                int index = (address.Key - readStart) * 2;
                registersData.Add(address, _bytesToRegistersConverter.GetBytes(bytes, index, address.Value));
            }
        }
Exemplo n.º 7
0
 private void ReadRegistersFinal(
     byte slaveAddress,
     IDictionary<KeyValuePair<ushort, int>, byte[]> registersData,
     ReadDelegate readDel,
     string dataName,
     int readStart,
     int length,
     IEnumerable<KeyValuePair<ushort, int>> addresses)
 {
     var byteLength = length * 2;
     var bytes = readDel.Invoke(slaveAddress, readStart, byteLength, length);
     if (bytes == null || bytes.Count != byteLength)
     {
         throw new Exception(
             string.Format("Error when reading {0}. SlaveAddress: {1}, Address {2}, Length {3}",
             dataName, slaveAddress, readStart, length));
     }
     foreach (var address in addresses)
     {
         var index = (address.Key - readStart) * 2;
         registersData.Add(address, _bytesToRegistersConverter.GetBytes(bytes, index, address.Value));
     }
 }
Exemplo n.º 8
0
 private static void ReadBitsFinal(
     byte slaveAddress,
     IDictionary<ushort, bool> bitsData,
     ReadDelegate readDel,
     string dataName,
     int readStart,
     int length,
     IEnumerable<ushort> addresses)
 {
     var byteLength = length / 8;
     if (length % 8 != 0)
         ++byteLength;
     var bytes = readDel.Invoke(slaveAddress, readStart, byteLength, length);
     if (bytes == null || bytes.Count != byteLength)
     {
         throw new Exception(
             string.Format("Error when reading {0}. SlaveAddress: {1}, Address {2}, Length {3}",
             dataName, slaveAddress, readStart, length));
     }
     foreach (var address in addresses)
     {
         var index = address - readStart;
         bitsData.Add(address, GetBitFromByte(bytes[index / 8], index % 8));
     }
 }
Exemplo n.º 9
0
 private static void ReadRegistersFinal(
     IDictionary<KeyValuePair<int, int>, byte[]> registersData,
     ReadDelegate readDel, int readStart, int length, IEnumerable<KeyValuePair<int, int>> addresses)
 {
     var bytes = readDel.Invoke(readStart, length);
     if (bytes == null || bytes.Count != length * 2)
     {
         throw new Exception(string.Join(Environment.NewLine,
             string.Format("Error when reading registers"),
             string.Format("Address {0}, Length {1}", readStart, length)));
     }
     foreach (var address in addresses)
     {
         var index = (address.Key - readStart) * 2;
         registersData.Add(address, GetBytes(bytes, index, address.Value * 2));
     }
 }
Exemplo n.º 10
0
 private static void ReadBitsFinal(
     IDictionary<int, bool> bitsData, ReadDelegate readDel, int readStart,
     int length, IEnumerable<int> addresses, string label)
 {
     var bytes = readDel.Invoke(readStart, length);
     if (bytes == null || bytes.Count != length/8)
     {
         throw new Exception(string.Join(Environment.NewLine,
             string.Format("Error when reading merkers"),
             string.Format("Address {0}{1}, Length {2}", label, readStart, length)));
     }
     foreach (var address in addresses)
     {
         var index = address - readStart;
         bitsData.Add(address, GetBitFromByte(bytes[index / 8], index % 8));
     }
 }