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));
        }
Exemplo n.º 2
0
 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;
     }
 }
Exemplo n.º 3
0
 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);
 }
Exemplo n.º 4
0
        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;
                }
            }
        }