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); }
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)); }
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); } }