public async Task ReadHoldingRegistersAsyncThrowsOnInvalidNumberOfPoints(ushort numOfPoints)
        {
            // Arrange
            var target = new ModbusMaster(new Mock <IModbusTransport>().Object);

            // Act/Assert
            await Assert.ThrowsAsync <ArgumentOutOfRangeException>(
                "numberOfPoints",
                () => target.ReadHoldingRegistersAsync(1, 0, numOfPoints));
        }
Пример #2
0
 private async void ReadButton_Click(object sender, EventArgs e)
 {
     UIEnabled(bFlg: false);
     try
     {
         int         tab_idx   = tabControl1.SelectedIndex;
         ModbusParam p         = TargetSensor.RegMaps[tab_idx];
         byte[]      frame     = Utils.FrameToByte(await Master.ReadHoldingRegistersAsync((byte)devno, (ushort)p.RegisterAddress, (ushort)(p.ParameterLength / 2)));
         int         frame_idx = 0;
         foreach (typeBase param in p.Params)
         {
             param.FrameTo(frame, frame_idx);
             frame_idx += param.Len;
         }
         TabPage      pg       = tabControl1.TabPages[tab_idx];
         DataGridView mdgv     = (DataGridView)pg.Controls[0];
         int          item_idx = 0;
         foreach (typeBase param2 in p.Params)
         {
             mdgv[1, item_idx].Value = param2.ToString();
             item_idx++;
         }
     }
     catch (SlaveException)
     {
         MessageBox.Show("Device error response.");
     }
     catch (Exception ex2)
     {
         if (ex2.Message != null)
         {
             MessageBox.Show(ex2.Message);
         }
         else
         {
             MessageBox.Show("Error");
         }
     }
     UIEnabled(bFlg: true);
 }
Пример #3
0
        /// <summary>
        ///    Asynchronously reads contiguous block of holding registers.
        /// </summary>
        /// <param name="slaveAddress">Address of device to read values from.</param>
        /// <param name="startAddress">Address to begin reading.</param>
        /// <param name="numberOfPoints">Number of holding registers to read.</param>
        /// <returns>A task that represents the asynchronous read operation</returns>
        public static Task <uint[]> ReadHoldingRegisters32Async(this ModbusMaster master, byte slaveAddress, ushort startAddress, ushort numberOfPoints)
        {
            if (master == null)
            {
                throw new ArgumentNullException("master");
            }

            ValidateNumberOfPoints(numberOfPoints, 62);

            // read 16 bit chunks and perform conversion
            Task <ushort[]> rawRegisters = master.ReadHoldingRegistersAsync(slaveAddress, startAddress, numberOfPoints, 4);

            return(Task.Factory.StartNew(() => Convert(rawRegisters.Result).ToArray()));
        }
Пример #4
0
        public async Task <ushort[]> ReadHoldingRegistersAsync(byte deviceNum, ushort startAddress, ushort numOfPoints, string queryName)
        {
            try
            {
                Logger.AddToFile(String.Format("Запрос  на чтение {0} байт  {1} по адресу {2}", numOfPoints, queryName, startAddress));
                ushort[] res = await ModbusMaster.ReadHoldingRegistersAsync(deviceNum, startAddress, numOfPoints);

                Logger.AddToFile("ОТВЕТ - ", res.ToArray());
                _queryReport.IsSuccess = true;
                return(res);
            }
            catch (Exception e)
            {
                Logger.AddToFile(String.Format("Запрос  на чтение {0} байт  {1} по адресу {2}  выдал ошибку - {3}", numOfPoints, queryName, startAddress, e.Message));
                _queryReport.IsSuccess = false;
                throw;
            }
            finally
            {
                Progress?.Report(_queryReport);
            }
        }