예제 #1
0
        public List <PLCDataDomain> GetData(List <PLCDataDomain> listAddresses)
        {
            foreach (var item in listAddresses)
            {
                try
                {
                    switch (item.TypePLC)
                    {
                    case PLCDataType.Register:
                        item.Data = modbusClient.ReadHoldingRegisters(item.Address, 1).FirstOrDefault().ToString();
                        break;

                    case PLCDataType.Coils:
                        item.Data = modbusClient.ReadCoils(item.Address, 1).FirstOrDefault().ToString();
                        break;

                    default:
                        item.Data = "None data";
                        break;
                    }
                }
                catch (Exception)
                {
                    item.Data = "None data";
                }
            }

            return(listAddresses);
        }
 private void ReadVr_Click(object sender, RoutedEventArgs e)
 {
     //读取多个寄存器的值
     int[] ReadVrVal = modbusClient.ReadHoldingRegisters(0, 3);
     textBoxVr0.Text = ReadVrVal[0].ToString();
     textBoxVr1.Text = ReadVrVal[1].ToString();
     textBoxVr2.Text = ReadVrVal[2].ToString();
 }
예제 #3
0
        private void timer1_Tick(object sender, EventArgs e)
        {
            try
            {
                //Client tanımlama
                ModbusClient tcpclient = new ModbusClient(Convert.ToString(textBox1.Text), 502);
                //
                //Bağlan
                tcpclient.Connect();
                //
                //okuma
                //

                int a = Convert.ToInt32(textBox2.Text);
                int b = Convert.ToInt32(textBox3.Text);
                int c = Convert.ToInt32(textBox4.Text);
                int d = Convert.ToInt32(textBox5.Text);

                //
                //okuma
                //
                bool[] mb = tcpclient.ReadCoils(a - 1, 1);
                int [] mw = tcpclient.ReadHoldingRegisters((b - 1), 1);
                int[]  mi = tcpclient.ReadHoldingRegisters((c - 1), 2);
                int[]  mf = tcpclient.ReadHoldingRegisters((d - 1), 2);
                //
                double mii = ModbusClient.ConvertRegistersToDouble(mi);
                //
                float mff = ModbusClient.ConvertRegistersToFloat(mf);



                //
                //labela yazma
                //
                label7.Text  = Convert.ToString(mb[0]);
                label8.Text  = Convert.ToString(mw[0]);
                label12.Text = Convert.ToString(mii);
                label13.Text = Convert.ToString(mff);
            }
            //
            //hata yakalama
            catch (Exception)
            { timer1.Stop(); MessageBox.Show("Hata"); }
        }
예제 #4
0
        private void button1_Click(object sender, EventArgs e)
        {
            istemci.Connect();
            istemci.WriteSingleCoil(0, true);
            //istemci.WriteSingleRegister(0, Convert.ToInt32(textBox1.Text));
            int[] a = new int[5];
etiket:
            a = istemci.ReadHoldingRegisters(0, 1);
            if (a[0] == 5)
            {
                goto etiket2;
            }
            goto etiket;
etiket2:
            textBox1.Text = a[0].ToString();
            istemci.ReceiveDataChanged += İstemci_ReceiveDataChanged;
            istemci.Disconnect();
        }
예제 #5
0
        private void FetchFromModbusServer()
        {
            if (ModbusHost.HasValue && ModbusAddress1.Value > 0)
            {
                ModbusClient modbusClient = null;
                try
                {
                    modbusClient = new ModbusClient(ModbusHost.Value, ModbusPort.Value);
                    modbusClient.Connect();
                    modbusClient.UnitIdentifier = (byte)ModbusID.Value;

                    // Register 1
                    // read + 1 register ???!!! bug in the EasyModbus ????!!! lowest byte 0x00 !!!
                    // [0] Hugh Byte
                    // [1] Low Byte
                    // [2] Dummy (High Byte)
                    // [3] Dummy (Low Byte) = 0x00 in X1 (not in the X1 SImulation!)
                    int[] readHoldingRegisters = modbusClient.ReadHoldingRegisters(ModbusAddress1.Value, ReadCount1.Value + 2);

                    double result     = 0;
                    string result_str = "";
                    //byte[] tmp;
                    for (int i = 0; i < (readHoldingRegisters.Length - 2); i++)
                    {
                        int tmp = readHoldingRegisters[i];
                        if (tmp == -32768) // fix for 0x00
                        {
                            tmp = 0;
                        }
                        if (tmp < 0) // no negative values !
                        {
                            tmp = tmp + (int)Math.Pow(2, 16);
                        }

                        result     = result + (tmp * Math.Pow(2, (16 * ((readHoldingRegisters.Length - 2) - (i + 1)))));
                        result_str = result_str + " 0x" + tmp.ToString("X4");
                    }
                    OutputValue1.Value = result;
                    ErrorMessage.Value = result_str;

                    this.SchedulerService.InvokeIn(new TimeSpan(0, 0, TimeSpan.Value), FetchFromModbusServer);
                }
                catch (Exception e)
                {
                    this.ErrorMessage.Value = e.ToString();
                    this.SchedulerService.InvokeIn(new TimeSpan(0, 1, 0), FetchFromModbusServer);
                }
                finally
                {
                    if (modbusClient != null)
                    {
                        modbusClient.Disconnect();
                    }
                }
            }
        }
예제 #6
0
        public static int[] LayDuLieuTCPHoldingRegister(ModbusClient modbus, ushort quantityHoldingRegisters, ushort minAddressHoldingRegister, ThietBiModel thietBiModel)
        {
            List <int> readHoldingRegister = new List <int>();

            if (quantityHoldingRegisters != 0)
            {
                try
                {
                    int soNguyenSauChia = quantityHoldingRegisters / DonViQuantityMoiLanDoc;
                    for (int i = 0; i <= soNguyenSauChia; i++)
                    {
                        if (i != soNguyenSauChia)
                        {
                            int startAddress = i * DonViQuantityMoiLanDoc + minAddressHoldingRegister;
                            int quantity     = DonViQuantityMoiLanDoc - minAddressHoldingRegister;
                            var temp         = modbus.ReadHoldingRegisters(startAddress, (ushort)(quantity));
                            readHoldingRegister.AddRange(temp.ToList());
                        }
                        else if (i == soNguyenSauChia)
                        {
                            int startAddress = i * DonViQuantityMoiLanDoc + minAddressHoldingRegister;
                            int quantity     = quantityHoldingRegisters % DonViQuantityMoiLanDoc - minAddressHoldingRegister;
                            if (quantity != 0)
                            {
                                var temp = modbus.ReadHoldingRegisters(startAddress, (ushort)(quantity));
                                readHoldingRegister.AddRange(temp.ToList());
                            }
                        }
                    }
                }
                catch (ModbusException ex)
                {
                    ExceptionFunctionCode(ex, thietBiModel);
                    throw;
                }
                catch (Exception ex)//Lỗi lấy dữ liệu thất bại
                {
                    ExceptionErrorConnection(ex, thietBiModel);
                    throw;
                }
            }
            return(readHoldingRegister.ToArray());
        }
예제 #7
0
        public static float[] getMomentAndDate()
        {
            float[] data = new float[2];
            try
            {
                int[] a = modbusClient.ReadHoldingRegisters(1034, 2);
                data[0] = ModbusClient.ConvertRegistersToFloat(a);

                int[] b = modbusClient.ReadHoldingRegisters(1040, 2);
                data[1] = ModbusClient.ConvertRegistersToFloat(b);
            }
            catch (Exception ex)
            {
                return(null);
                //TODO
            }

            return(data);
        }
예제 #8
0
        private void timerWork(object sender, EventArgs e)
        {
            ushort adr  = 6;
            ushort adr2 = 20;
            ushort adrd = 1;

            int[] register1 = modbusClient.ReadHoldingRegisters(adr, adrd);
            int[] register2 = modbusClient.ReadHoldingRegisters(adr2, adrd);

            SeriesCollection[0].Values.Add(register1[0]);
            SeriesCollection[1].Values.Add(register2[0]);

            if (SeriesCollection[0].Values.Count > 50)
            {
                SeriesCollection[0].Values.RemoveAt(0);
                SeriesCollection[1].Values.RemoveAt(0);
            }
            label.Content = register2[0].ToString();
        }
예제 #9
0
 // 2. Run the Read-Part on a Threadpool Thread
 private Task <string> ReadRegAsync(int address, ModbusClient client)
 {
     return(Task.Run(() =>
     {
         return ModbusClient.ConvertRegistersToFloat(
             client.ReadHoldingRegisters(address, 2),
             ModbusClient.RegisterOrder.HighLow)
         .ToString();
     }));
 }
 private void modbustcp()
 {
     //this is modbus connectşon part of code
     ipadres = textBox1.Text;
     if (int.TryParse(textBox2.Text, out int a))
     {
         portnumber = Convert.ToInt32(textBox2.Text);
     }
     else
     {
         MessageBox.Show("Port giriş hatası", "uyarı", MessageBoxButtons.OK, MessageBoxIcon.Error);
     }
     try
     {
         //kolay gelsin reis
         ModbusClient modbustcp = new ModbusClient(ipadres, portnumber);
         modbustcp.Connect();
         //MessageBox.Show("sdg");
         pictureBox3.BackColor = Color.DarkGreen;
         int[] readHoldingRegisters1 = modbustcp.ReadHoldingRegisters(Convert.ToInt32(textBox3.Text), 1);
         int[] readHoldingRegisters2 = modbustcp.ReadHoldingRegisters(Convert.ToInt32(textBox4.Text), 1);
         int[] readHoldingRegisters3 = modbustcp.ReadHoldingRegisters(Convert.ToInt32(textBox5.Text), 1);
         int[] readHoldingRegisters4 = modbustcp.ReadHoldingRegisters(Convert.ToInt32(textBox6.Text), 1);
         int[] readHoldingRegisters5 = modbustcp.ReadHoldingRegisters(Convert.ToInt32(textBox7.Text), 1);
         adres1 = readHoldingRegisters1[0];
         adres2 = readHoldingRegisters2[0];
         adres3 = readHoldingRegisters3[0];
         adres4 = readHoldingRegisters4[0];
         adres5 = readHoldingRegisters5[0];
         modbustcp.Disconnect();
         modbus_error = false;
     }
     catch (Exception e)
     {
         modbus_error = true;
         if (!showed)
         {
             MessageBox.Show(e.Message);
             showed = true;
         }
     }
 }
예제 #11
0
 private static void ReadHoldingRegsBarcode(ModbusClient client)
 {
     try
     {
         client.ReadHoldingRegisters(0, 0);
     }
     catch (Exception)
     {
         // ignored
     }
 }
예제 #12
0
        /// <summary>
        /// Read the motor state.
        /// </summary>
        public void GetPosition()
        {
            if (this.mbClient == null)
            {
                return;
            }

            int fields = 2;

            int[] result = mbClient.ReadHoldingRegisters(MemoryMap.MOTOR_POSITION, fields);
            if (result != null)
            {
                if (result.Length == fields * 2)
                {
                }
            }


            // TODO: Return position.
        }
예제 #13
0
 public void readPlc()
 {
     _client.Connect();
     //Thread.Sleep(100);
     registers = _client.ReadHoldingRegisters(0, 4);
     _client.Disconnect();
     register1 = registers[0];
     register2 = registers[1];
     register3 = registers[2];
     register4 = registers[3];
 }
예제 #14
0
        public async Task ClientEventsTest()
        {
            int connectEvents    = 0;
            int disconnectEvents = 0;

            using (var server = new MiniTestServer())
            {
                server.Start();
                using (var client = new ModbusClient(IPAddress.Loopback, server.Port, new ConsoleLogger()))
                {
                    client.Connected += (sender, args) =>
                    {
                        connectEvents++;
                    };
                    client.Disconnected += (sender, args) =>
                    {
                        disconnectEvents++;
                    };

                    Assert.AreEqual(0, connectEvents);
                    Assert.AreEqual(0, disconnectEvents);

                    await client.Connect();

                    Assert.IsTrue(client.IsConnected);

                    await EnsureWait();                     // get events raised

                    Assert.AreEqual(1, connectEvents);
                    Assert.AreEqual(0, disconnectEvents);

                    await server.Stop();

                    await client.ReadHoldingRegisters(0, 0, 1);
                    await EnsureWait();                      // time to set all information

                    Assert.IsFalse(client.IsConnected);

                    await EnsureWait();                     // get events raised

                    Assert.AreEqual(1, connectEvents);
                    Assert.AreEqual(1, disconnectEvents);

                    server.Start();
                    await client.ConnectingTask;
                    Assert.IsTrue(client.IsConnected);
                }

                await EnsureWait();                 // get events raised

                Assert.AreEqual(2, connectEvents);
                Assert.AreEqual(2, disconnectEvents);
            }
        }
예제 #15
0
 private void modbusTimer_Tick(object sender, EventArgs e)
 {
     if (modbusClient.Connected == true)
     {
         _holdings = modbusClient.ReadHoldingRegisters(0, 4);
         double aiDeger = _holdings[3];
         double ph      = (aiDeger * 14) / 4095;
         phLbl.Text = "PH: " + Math.Round(ph, 1).ToString();
         //modbusClient.Disconnect();
     }
 }
예제 #16
0
 public int RegisterValueConvertToInt(ModbusClient modbusClient, int b)
 {
     try
     {
         int[] a = modbusClient.ReadHoldingRegisters(b - 1, 1);
         return(a[0]);
     }
     catch (Exception)
     {
         return(0);
     }
 }
예제 #17
0
파일: Program.cs 프로젝트: fr830/PLC_SQL
        static void Main(string[] args)
        {
            ModbusClient modbusClient = new ModbusClient("192.168.18.10", 502);

            while (true)
            {
                DateTime myDateTime       = DateTime.Now;                               // Read time value
                string   sqlFormattedDate = myDateTime.ToString("yyyy-MM-dd HH:mm:ss"); // Store timestamp as formatted string

                try
                {
                    if (modbusClient.Connected)                                          //Controlling of the system is connected.
                    {
                        int[] csd3_1_14Array = modbusClient.ReadHoldingRegisters(0, 30); //Read data from MODBUS TCP IP, start in memory block 0 and read 30 memory blocks.
                        //int[] csd3_1_15Array = modbusClient.ReadHoldingRegisters(101, 100);
                        //int[] csd3_1_16Array = modbusClient.ReadHoldingRegisters(101, 100);

                        using (PLC_dbEntities db = new PLC_dbEntities()) // Entity framework linQ
                        {
                            CSD3_1_14 dataset_14 = new CSD3_1_14
                            {
                                Timestamp  = sqlFormattedDate,                     // Store timestamp, is used as primary key
                                CO2        = csd3_1_14Array[0],                    // Store CO2 value 400 - 10000 ppm
                                Temperatur = (float)csd3_1_14Array[1] / 10,        // Convert Temperature integer to float with 1 decimal and store.
                                Fugtighed  = csd3_1_14Array[2],                    // Store Fugtighed value 0 - 100 %
                                Strøm      = (float)csd3_1_14Array[3] / 100,       // Convert Strøm integer to float with 2 decimals and store. (Do we need to remove negative values)
                                Spænding   = (float)csd3_1_14Array[4] / 100,       // Convert Spænding integer to float with 2 decimals and store. (Do we need to remove negative values)
                                Effekt     = csd3_1_14Array[5],                    // Store Effekt value (Do we need to remove negative values)
                                Energi     = csd3_1_14Array[6] + csd3_1_14Array[7] // Convert the two integers for Energi to one and store. (What operation is needed?)
                            };
                            db.CSD3_1_14.Add(dataset_14);                          // Save dataset to variable


                            db.SaveChanges();   //Save changes to SQL database
                        }

                        Console.WriteLine("[Data recieved] [" + sqlFormattedDate + "]");
                        Thread.Sleep(60000);    // Sleeps for 60 s to limit data storing
                    }
                    else
                    {
                        Console.WriteLine("[" + sqlFormattedDate + "]: Connection not established, trying to connect.");
                        modbusClient.Connect(); // Connect to ModBUS TCPIP
                    }
                }
                catch (Exception ex)
                {
                    Console.WriteLine("[ERROR] " + ex.ToString());
                    modbusClient.Disconnect();
                    Thread.Sleep(30000);
                }
            }
        }
예제 #18
0
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        //Timer for data reading:
        private void timer_Modbus_Tick(object sender, EventArgs e)
        {
            timer_Modbus.Enabled = false;

            //Modbus Timer Part:
            int[] Read = modbusClient.ReadHoldingRegisters(180, 6); // ReadHoldingRegister from 180, Total registers read = 6

            Fx = Convert.ToSingle(Read[0]) / 100;
            Fy = Convert.ToSingle(Read[1]) / 100;
            Fz = Convert.ToSingle(Read[2]) / 100;
            Mx = Convert.ToSingle(Read[3]) / 1000;
            My = Convert.ToSingle(Read[4]) / 1000;
            Mz = Convert.ToSingle(Read[5]) / 1000;

            if (Tamper_To_Zero.Text == "Tampering")
            {
                Fx -= tempFx;
                Fy -= tempFy;
                Fz -= tempFz;
                Mx -= tempMx;
                My -= tempMy;
                Mz -= tempMz;

                textBox1.Text = Convert.ToString(Math.Round(Fx, 2));
                textBox2.Text = Convert.ToString(Math.Round(Fy, 2));
                textBox3.Text = Convert.ToString(Math.Round(Fz, 2));
                textBox4.Text = Convert.ToString(Math.Round(Mx, 3));
                textBox5.Text = Convert.ToString(Math.Round(My, 3));
                textBox6.Text = Convert.ToString(Math.Round(Mz, 3));
            }
            else
            {
                textBox1.Text = Convert.ToString(Fx);
                textBox2.Text = Convert.ToString(Fy);
                textBox3.Text = Convert.ToString(Fz);
                textBox4.Text = Convert.ToString(Mx);
                textBox5.Text = Convert.ToString(My);
                textBox6.Text = Convert.ToString(Mz);
            }

            //Serial Timer Part:
            //FT300Port.Write(readHoldingRegister(0x09, 0x00B4, 6), 0, 8);
            //FT300Port.Write(request, 0, request.Length);
            //byte[] response = ReadExact(FT300Port.BaseStream, 1);
            //textBox2.Text = Convert.ToString(response[0]);
            //for (int i = 0; i < response.Length; i++)
            //{
            //    //float FT = Convert.ToSingle(response[i]) / 100;
            //    textBox1.Text = Convert.ToString(response[i]);
            //}

            timer_Modbus.Enabled = true;
        }
예제 #19
0
파일: Form1.cs 프로젝트: Vyctrus/PeryfV2
        public void connectAndrzej()
        {
            //ModbusClient modbusClient = new ModbusClient("COM1");
            ModbusClient modbusX = new ModbusClient("127.0.0.1", 502);

            modbusX.ConnectionTimeout = 500;
            modbusX.Connect();
            int[] readHoldingRegisters = modbusX.ReadHoldingRegisters(0, 10);
            foreach (int i in readHoldingRegisters)
            {
                Debug.WriteLine("Value of register " + i + "is" + readHoldingRegisters[i] + "\n");
            }
        }
예제 #20
0
        private void button_givedata_Click(object sender, EventArgs e)
        {
            dataGridView1.Rows.Clear();

            modbusClient = new ModbusClient("192.168.100.8", 502);    //Ip-Address and Port of Modbus-TCP-Server
            modbusClient.Connect();

            try
            {
                int Address = Convert.ToInt32(startingAddress.Text);
                int kolvo   = Convert.ToInt32(quantity.Text);

                if (RadioHolding.Checked == true)
                {
                    int[] readHoldingRegisters = modbusClient.ReadHoldingRegisters((Address - 40001), (kolvo - Address + 1));

                    for (int i = 0; i < readHoldingRegisters.Length; i++)
                    {
                        if (i < readHoldingRegisters.Length - 1)
                        {
                            dataGridView1.Rows.Insert(i, 1);
                        }

                        dataGridView1.Rows[i].Cells[1].Value = readHoldingRegisters[i].ToString();
                        dataGridView1.Rows[i].Cells[0].Value = (Address + i);
                    }
                }

                if (RadioInput.Checked == true)
                {
                    int[] ReadInputRegisters = modbusClient.ReadInputRegisters((Address - 30001), (kolvo - Address + 1));

                    for (int i = 0; i < ReadInputRegisters.Length; i++)
                    {
                        if (i < ReadInputRegisters.Length - 1)
                        {
                            dataGridView1.Rows.Insert(i, 1);
                        }

                        dataGridView1.Rows[i].Cells[1].Value = ReadInputRegisters[i].ToString();
                        dataGridView1.Rows[i].Cells[0].Value = (Address + i);
                    }
                }
                button_changedata.Enabled = true;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message.ToString() + "\n\nДиапазон адрессов:\n\nInputRegister - 30001\nHoldingRegisters - 40001");
            }
        }
예제 #21
0
        // GET api/values
        public double Get()
        {
            plc.Connect();
            int[] read = plc.ReadHoldingRegisters(2, 1);
            analogValue = read[0]; // I

            mAValue = analogValue / 1000;

            temperature = ((pvHigh - pvLow) / (iHigh - iLow)) * (mAValue - iLow) + pvLow;

            result = Math.Round(temperature, 1);

            return(result);
        }
예제 #22
0
        public void lerDados(int tipo)
        {
            int startadd, quant;
            string[] dados = new string[1];

            try
            {
                if (modbus.Connected)
                {
                    if (int.TryParse(tb_endi.Text, out startadd) && int.TryParse(tb_quantidade.Text, out quant)
                    {
                        tb_dados.Text = "";

                        switch (tipo)
                        {
                            case 1:
                                bool[] dadosCo = modbus.ReadCoils(startadd, quant);
                                dados = dadosCo.Select(x => x.ToString()).ToArray();
                                break;
                            case 2:
                                bool[] dadosDI = modbus.ReadDiscreteInputs(startadd, quant);
                                dados = dadosDI.Select(x => x.ToString()).ToArray();
                                break;
                            case 3:
                                int[] dadosHR = modbus.ReadHoldingRegisters(startadd, quant);
                                dados = dadosHR.Select(x => x.ToString()).ToArray();
                                break;
                            case 4:
                                int[] dadosIR = modbus.ReadInputRegisters(startadd, quant);
                                dados = dadosIR.Select(x => x.ToString()).ToArray();
                                break;
                        }

                        for (int i = 0; i < dados.Length; i++)
                        {
                            tb_dados.Text += "Dado " + i.ToString() + ": " + dados[i].ToString() + "\r\n";
                        }
                    }
                }
                else
                {
                    MessageBox.Show("Servidor MODBUS TCP Desconectado");
                }
            }
            catch (Exception err)
            {
                MessageBox.Show("Erro na leitura dos dados MODBUS. \r\nErro: " + err.Message);
            }
        }
예제 #23
0
 public float RegisterValueConvertToFloat(ModbusClient modbusClient, int b)
 {
     try
     {
         int[] a         = modbusClient.ReadHoldingRegisters(b - 1, 1);
         int[] fromfloat = new int[2];
         fromfloat[1] = a[0];
         float registr = ModbusClient.ConvertRegistersToFloat(fromfloat);
         return(registr);
     }
     catch (StartingAddressInvalidException)
     {
         return(999);
     }
 }
예제 #24
0
        //private void UpdateLoop(object sender, DoWorkEventArgs e)
        //{
        //    do
        //    {
        //        try
        //        {
        //            OnUpdateCurrentPositions();
        //            Thread.Sleep(100);
        //        }
        //        catch(Exception ex)
        //        {
        //            U.Log(ex);
        //            return;
        //        }
        //    } while (!_destroy);
        //}



        public void CheckStatus(int timeout)
        {
            Stopwatch timeoutStopw = new Stopwatch();

            timeoutStopw.Start();
            while (true)
            {
                try
                {
                    //lock (this)
                    //{

                    int[] regStatus = _modbusClient.ReadHoldingRegisters(IAIConstAddr.DSS1, 1);

                    if (regStatus != null)
                    {
                        break;
                    }

                    if (timeoutStopw.ElapsedMilliseconds > timeout)
                    {
                        //U.LogAlarmPopup("IAI SCON [{0}] Check Status timeout waiting for Origin State signal to be ON.", this.Nickname);
                        throw new MCoreExceptionPopup("IAI SCON [{0}] Check Status timeout waiting for Origin State signal to be ON.", this.Nickname);
                    }

                    //}
                }
                catch (Exception ex)
                {
                    //U.LogAlarmPopup(ex, "CheckStatus Fail {0}", this.Nickname);
                    throw new MCoreExceptionPopup(ex, "CheckStatus Fail {0}", this.Nickname);
                }

                Thread.Sleep(100);
            }
        }
예제 #25
0
 private int[] lerDoisRegistros(int posicaoDoPrimeiro)
 {
     int[] registros = null;
     try
     {
         //modbusClient.WriteMultipleCoils(4, new bool[] { true, true, true, true, true, true, true, true, true, true });    //Write Coils starting with Address 5
         //bool[] readCoils = modbusClient.ReadCoils(9, 10);                        //Read 10 Coils from Server, starting with address 10
         registros = modbusClient.ReadHoldingRegisters(posicaoDoPrimeiro - 1, 2);    //Read 2 Holding Registers from Server, starting with Address passed by a parameter
     }
     catch (Exception ex)
     {
         logger.Error("Não foi possível acessar o registro do Heart-Beat: " + ex.ToString());
         throw ex;
     }
     return(registros);
 }
예제 #26
0
        private void tmr_Modbus_Com_Tick(object sender, EventArgs e)
        {
            tmr_Modbus_Com.Enabled = false;

            modbusClient.WriteMultipleCoils(4, new bool[] { true, true, true, true, true, true, true, true, true, true }); //Write Coils starting with Address 5
            bool[] readCoils            = modbusClient.ReadCoils(0, 10);                                                   //Read 10 Coils from Server, starting with address 0
            int[]  readHoldingRegisters = modbusClient.ReadHoldingRegisters(0, 10);                                        //Read 10 Holding Registers from Server, starting with Address 1

            aGauge1.Value = readHoldingRegisters[0];

            cb_coil_1.Checked = readCoils[0];
            cb_coil_2.Checked = readCoils[1];


            tmr_Modbus_Com.Enabled = true;
        }
예제 #27
0
        public double ReadValues()
        {
            Console.WriteLine("connected!");


            double Wh = 0;

            for (int i = 0; i < 50; i++)
            {
                Wh = ModbusClient.ConvertRegistersToFloat(modbusClient.ReadHoldingRegisters(65, 2), ModbusClient.RegisterOrder.HighLow);

                System.Threading.Thread.Sleep(1000);
            }

            return(Wh);
        }
예제 #28
0
        private string ReadDataFromSlave(int FunctionCode, int startingAddress)
        {
            try     // 데이터 Gathering 시도
            {
                switch (FunctionCode)
                {
                case 0:
                    return(modbusClient.ReadCoils(startingAddress, 1)[0].ToString());    // FC 1 00000-100000 시작번지 부터 지정한 개수 읽기

                case 1:
                    return(modbusClient.ReadDiscreteInputs(startingAddress, 1)[0].ToString());     // FC 2 100001-200000

                case 2:
                    return(modbusClient.ReadHoldingRegisters(startingAddress, 1)[0].ToString());       // FC 3 400001-500000

                case 3:
                    return(modbusClient.ReadInputRegisters(startingAddress, 1)[0].ToString()); // FC 4 300000-400000

                default:                                                                       // 이외의 값이 들어올 때 처리
                    return(null);
                }
            }
            catch (Exception)
            {
                return(null);
            }
            #region 예외처리 보관함

            /*catch (ModbusException) // 모드버스 예외 발생 시
             * {
             *  i--;        // 예외 발생한 부분 다시 반복
             * }
             * catch (TimeoutException)    // 타임 아웃 에러 시
             * {
             *  i--;        // 예외 발생한 부분 다시 반복
             * }
             * catch (StackOverflowException)  // 데이터 과다복용 사망 시
             * {
             *  i--;
             * }
             * catch (NullReferenceException)
             * {
             *  readData[i] = "Null 붙잡을 노래";
             * }
             */
            #endregion
        }
예제 #29
0
        private void timer1_Tick(object sender, EventArgs e)
        {                                                   //Connect to Server
            if (modbusClient.Connected && modbusClient.Available(1))
            {
                try
                {
                    int[] readHoldingRegisters = modbusClient.ReadHoldingRegisters(0, 10);    //Read 10 Holding Registers from Server, starting with Address 1
                    var   new_text             = String.Join(" - ", readHoldingRegisters);
                    if (old_registers != new_text)
                    {
                        old_registers = new_text;
                        var to_print = readHoldingRegisters[0];
                        if (to_print == 1)
                        {
                            var number = readHoldingRegisters[1].ToString();
                            listBox1.SelectedIndex = -1;
                            for (int i = 0; i < listBox1.Items.Count; i++)
                            {
                                if (listBox1.Items[i].ToString().StartsWith(number))
                                {
                                    listBox1.SelectedIndex = i;

                                    var selected_prn = listBox1.Items[i].ToString();
                                    var selected_bin = Path.ChangeExtension(selected_prn, "bin");
                                    listBox2.Items.Add("printing " + selected_bin);
                                    var text_to_print = File.ReadAllText(trabajo_folder + "\\" + selected_bin);
                                    RawPrinterHelper.SendStringToPrinter(printerName.Text, text_to_print);
                                    print_count++;
                                    label7.Text = print_count.ToString();
                                }
                            }
                        }
                        listBox2.Items.Add(new_text);
                    }
                }
                catch (Exception ex)
                {
                    plcStatus.Text = ex.Message;
                    modbusClient.Disconnect();
                }
            }
            else
            {
                modbusClient.Disconnect();
                connect_to_plc();
            }
        }
예제 #30
0
        public Task <float> GetCurrentGenerationAsync()
        {
            if (_modbusClient == null)
            {
                throw new InvalidOperationException("Not yet connected. Call ConnectAsync first.");
            }

            //var data = _modbusClient.ReadHoldingRegistersRaw(SUNSPEC_I_MODEL_BLOCK_START, 39);

            //Console.Write(string.Join(", ", data.Select(b => b.ToString())));

            var response = _modbusClient.ReadHoldingRegisters(SOLAR_EDGE_DC_POWER, 2);

            var power = response[0] * Math.Pow(10, response[1]);

            return(Task.FromResult(Convert.ToSingle(power)));
        }