Exemplo n.º 1
0
    private async void WriteButton_Click(object sender, EventArgs e)
    {
        UIEnabled(bFlg: false);
        int item_idx = 0;

        try
        {
            int          tab_idx   = tabControl1.SelectedIndex;
            ModbusParam  p         = TargetSensor.RegMaps[tab_idx];
            TabPage      pg        = tabControl1.TabPages[tab_idx];
            DataGridView mdgv      = (DataGridView)pg.Controls[0];
            byte[]       pdu       = new byte[p.ParameterLength];
            int          frame_idx = 0;
            foreach (typeBase param in p.Params)
            {
                string text = mdgv[1, item_idx].Value.ToString();
                if (text == null || text == "")
                {
                    throw new Exception(mdgv[0, item_idx].Value.ToString() + " parameter empty");
                }
                if (!param.ToValue(text))
                {
                    throw new Exception(mdgv[0, item_idx].Value.ToString() + " parameter error");
                }
                byte[] src = param.ToFrame();
                Buffer.BlockCopy(src, 0, pdu, frame_idx, param.Len);
                frame_idx += param.Len;
                item_idx++;
            }
            await Master.WriteMultipleRegistersAsync((byte)devno, (ushort)p.RegisterAddress, Utils.ByteToFrame(pdu));
        }
        catch (SlaveException ex)
        {
            MessageBox.Show("Device error response.");
        }
        catch (Exception ex2)
        {
            if (ex2.Message != null)
            {
                MessageBox.Show(ex2.Message);
            }
            else
            {
                MessageBox.Show("Parameter error.");
            }
        }
        UIEnabled(bFlg: true);
    }
Exemplo n.º 2
0
    private async void mdgv_OnCellContentClickAsync(object sender, DataGridViewCellEventArgs args)
    {
        DataGridView mdgv = (DataGridView)sender;

        if (mdgv.Columns[args.ColumnIndex].Name == "Button")
        {
            try
            {
                string param = mdgv[1, args.RowIndex].Value.ToString();
                if (param == null || param == "")
                {
                    throw new Exception(mdgv[0, args.RowIndex].Value.ToString() + " parameter empty");
                }
                if (!TargetSensor.ExecMaps[args.RowIndex].Reg.ToValue(param))
                {
                    throw new Exception(mdgv[0, args.RowIndex].Value.ToString() + " parameter error");
                }
                byte[] v = TargetSensor.ExecMaps[args.RowIndex].Reg.ToFrame();
                await Master.WriteMultipleRegistersAsync((byte)devno, TargetSensor.ExecMaps[args.RowIndex].ExecAddress, Utils.ByteToFrame(v));
            }
            catch (SlaveException)
            {
            }
            catch
            {
            }
        }
    }
        public async Task WriteMultipleRegistersAsyncThrowsOnInvalidData(ushort numberOfPoints)
        {
            // Arrange
            var target = new ModbusMaster(new Mock <IModbusTransport>().Object);

            // Act/Assert
            await Assert.ThrowsAsync <ArgumentOutOfRangeException>(
                "data",
                async() => await target.WriteMultipleRegistersAsync(1, 0, Enumerable.Repeat((ushort)1, numberOfPoints).ToArray()));
        }
        public async Task WriteMultipleRegistersAsyncThrowsOnNullData()
        {
            // Arrange
            var target = new ModbusMaster(new Mock <IModbusTransport>().Object);

            // Act/Assert
            await Assert.ThrowsAsync <ArgumentNullException>(
                "data",
                async() => await target.WriteMultipleRegistersAsync(1, 0, null));
        }
Exemplo n.º 5
0
        public async Task WriteMultipleRegistersAsync(byte deviceNum, ushort startAddress, ushort[] writeArray, string queryName)
        {
            try
            {
                Logger.AddToFile(String.Format("Запрос {0} по адресу {1} ", queryName, startAddress), writeArray.ToArray());
                await ModbusMaster.WriteMultipleRegistersAsync(deviceNum, startAddress, writeArray);

                _queryReport.IsSuccess = true;
            }
            catch (Exception e)
            {
                _queryReport.IsSuccess = false;
                Logger.AddToFile(String.Format("Запрос {0}: по адресу {1} выдал ошибку: {2}", queryName, startAddress, e.Message));
                throw;
            }
            finally
            {
                Progress?.Report(_queryReport);
            }
        }