public async Task ReadInputRegistersAsyncThrowsOnInvalidNumberOfPoints(ushort numOfPoints) { // Arrange var target = new ModbusMaster(new Mock <IModbusTransport>().Object); // Act/Assert await Assert.ThrowsAsync <ArgumentOutOfRangeException>( "numberOfPoints", () => target.ReadInputRegistersAsync(1, 0, numOfPoints)); }
private async void UpdateButton_Click(object sender, EventArgs e) { UpdateButton.Enabled = false; try { int len = 0; foreach (typeBase sampleMap in TargetSensor.SampleMaps) { len += sampleMap.Len; } byte[] frame = Utils.FrameToByte(await Master.ReadInputRegistersAsync((byte)devno, (ushort)TargetSensor.SamplingAddress, (ushort)(len / 2))); int idx = 0; int i = 0; foreach (typeBase sampleMap2 in TargetSensor.SampleMaps) { sampleMap2.FrameTo(frame, idx); idx += sampleMap2.Len; dataGridView1[1, i].Value = sampleMap2.ToString(); i++; } if (CyclicCheckBox.Checked && FileTextBox.Text != "" && LoggingCheckBox.Checked) { try { StringBuilder stringBuilder = new StringBuilder(); stringBuilder.Append(DateTime.Now.ToString("HH:mm:ss")); foreach (typeBase sampleMap3 in TargetSensor.SampleMaps) { stringBuilder.Append(","); stringBuilder.Append(sampleMap3.ToString()); } StoreWrite(stringBuilder.ToString()); } catch { } } } catch (TimeoutException) { } catch (SlaveException) { } catch (Exception) { } if (!CyclicCheckBox.Checked) { UpdateButton.Enabled = true; } }
private async void ReadButton_Click(object sender, EventArgs e) { UIEnabled(bFlg: false); try { int tab_idx = tabControl1.SelectedIndex; int len = 0; foreach (typeBase debugMap in TargetSensor.DebugMaps) { len += debugMap.Len; } byte[] frame = Utils.FrameToByte(await Master.ReadInputRegistersAsync((byte)devno, (ushort)TargetSensor.DebugAddress, (ushort)(len / 2))); TabPage pg = tabControl1.TabPages[tab_idx]; DataGridView mdgv = (DataGridView)pg.Controls[0]; int item_idx = 0; for (int i = 0; i < TargetSensor.DebugMaps.Count; i++) { TargetSensor.DebugMaps[i].FrameTo(frame, item_idx); item_idx += TargetSensor.DebugMaps[i].Len; mdgv[1, i].Value = TargetSensor.DebugMaps[i].ToString(); } } 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); }
private void TcpConnectionTimer_Tick(object sender, EventArgs e) { try { if (NetworkIsOk) { #region Master to Slave Console.WriteLine("Try to Read somethings : {0}", DateTime.Now.ToString("HH:mm:ss.fff")); //Thread thread = new Thread(new ThreadStart(SomethingFunction)); //thread.Start() byte stationID = 1; ////System.Threading.Tasks.Task<bool[]> retReadInput = master.ReadInputsAsync(stationID, 0, 2); ////System.Threading.Tasks.Task<bool[]> retReadCoils = master.ReadCoilsAsync(stationID, 2, 1); ////System.Threading.Tasks.Task<ushort[]> retReadHoldingRegisters = master.ReadHoldingRegistersAsync(stationID, 6, 6); ////// //삼성전기 쿤산 GIMAC 의 읽는 부분 ////// 30001 ~ 30026, 실제 사용부분 : 30001(Avg Vol, 2byte), 30003(Avg Cur, 2byte), 30023(Factor, 2 byte), 30025 (Total Active Power, 2 byte) System.Threading.Tasks.Task <ushort[]> retReadInputRegisters = master.ReadInputRegistersAsync(stationID, 0, 26); // InputRegistersAsync ////System.Threading.Tasks.Task<ushort[]> retReadWriteMultipleRegisters = master.ReadWriteMultipleRegistersAsync(stationID, 0, 2, 0, new ushort[] { 1, 2 }); //System.Threading.Tasks.Task reWriteSingleCoil = master.WriteMultipleCoilsAsync(stationID, 2, new bool[] { false }); //master.WriteMultipleCoilsAsync try { //bool waitSuccess = System.Threading.Tasks.Task.WaitAll(new System.Threading.Tasks.Task[] { retReadInput, retReadCoils, retReadHoldingRegisters, retReadInputRegisters, retReadWriteMultipleRegisters }, 3000); bool waitSuccess = retReadInputRegisters.Wait(200); if (!waitSuccess) { Console.WriteLine("Timeout to Read somethings"); return; } //System.Threading.Tasks.Task.WaitAll(retReadHoldingRegisters); ////bool[] ret1 = retReadInput.Result; ////for (int s = 0; s < ret1.Length; s++) ////{ //// Console.WriteLine("ReadInput {0}:{1}", s, ret1[s]); ////} ////bool[] ret2 = retReadCoils.Result; ////for (int s = 0; s < ret2.Length; s++) ////{ //// Console.WriteLine("ReadCoils {0}:{1}", s, ret2[s]); ////} ////ushort[] ret3 = retReadHoldingRegisters.Result; ////for (int s = 0; s < ret3.Length; s++) ////{ //// Console.WriteLine("ReadHoldingRegisters {0}:{1:X2}", s, ret3[s]); ////} ushort[] ret4 = retReadInputRegisters.Result; if (ret4.Length == 26) { //AVG Volt float value = ModbusUtility.GetSingle(ret4[1], ret4[0]); txtVolt.Text = value.ToString("F3"); Console.WriteLine("Voltage {0}", value); //AVG Curr value = ModbusUtility.GetSingle(ret4[3], ret4[2]); txtCurr.Text = value.ToString("F3"); Console.WriteLine("Current {0}", value); //AVG Fact value = ModbusUtility.GetSingle(ret4[23], ret4[22]); txtFact.Text = value.ToString("F3"); Console.WriteLine("Power Factor {0}", value); //AVG Powe value = ModbusUtility.GetSingle(ret4[25], ret4[24]); txtPowe.Text = value.ToString("F3"); Console.WriteLine("Total Active Power {0}", value); } ////for (int s = 0; s < ret4.Length; s++) ////{ //// Console.WriteLine("ReadInputRegisters {0}:{1:X2}", s, ret4[s]); ////} ////ushort[] ret5 = retReadWriteMultipleRegisters.Result; ////for (int s = 0; s < ret5.Length; s++) ////{ //// Console.WriteLine("ReadWriteMultipleRegisters {0}:{1:X2}", s, ret5[s]); ////} //if (ret[0]) lblDI0.BackColor = Color.Blue; //else lblDI0.BackColor = Color.Red; } catch (AggregateException aex) { Console.WriteLine("Exception to Read somethings : {0}", DateTime.Now.ToString("HH:mm:ss.fff")); Console.WriteLine(aex); } catch (Exception ex) { Console.WriteLine(ex); } #endregion } else { //retry connecting dtNow = DateTime.Now; if ((dtNow - dtDisconnect) > TimeSpan.FromSeconds(2)) { Console.WriteLine(DateTime.Now.ToString() + ":Start connecting"); //NetworkIsOk = ConnectModbusTCP(); NetworkIsOk = ConnectModbusSerial(); if (!NetworkIsOk) { Console.WriteLine(DateTime.Now.ToString() + ":Connecting fail. Wait for retry"); dtDisconnect = DateTime.Now; } } else { Console.WriteLine(DateTime.Now.ToString() + ":Wait for retry connecting"); } } } catch (Exception ex) { //if (ex.Source.Equals("System")) { //retry connecting NetworkIsOk = false; Console.WriteLine(ex.Message); dtDisconnect = DateTime.Now; } } }