public float ReadFloatFromRegisters(int startingAddress)
        {
            modbusClient.Connect();
            int[] byteArray = modbusClient.ReadHoldingRegisters(startingAddress, 2);
            modbusClient.Disconnect();

            return(ModbusClient.ConvertRegistersToFloat(byteArray));
        }
Beispiel #2
0
        public void read()
        {
            try
            {
                if (type == "WORD HOLDING")
                {
                    reg = modbusClient.ReadHoldingRegisters(registr_number, 1);
                    num = reg[0];
                }
                if (type == "INT HOLDING")
                {
                    reg = modbusClient.ReadHoldingRegisters(registr_number, 2);
                    num = ModbusClient.ConvertRegistersToInt(reg);
                }
                if (type == "REAL HOLDING")
                {
                    reg = modbusClient.ReadHoldingRegisters(registr_number, 2);
                    num = ModbusClient.ConvertRegistersToFloat(reg);
                }

                if (type == "WORD INPUT")
                {
                    reg = modbusClient.ReadInputRegisters(registr_number, 1);
                    num = reg[0];
                }
                if (type == "INT INPUT")
                {
                    reg = modbusClient.ReadInputRegisters(registr_number, 2);
                    num = ModbusClient.ConvertRegistersToInt(reg);
                }
                if (type == "REAL INPUT")
                {
                    reg = modbusClient.ReadInputRegisters(registr_number, 2);
                    num = ModbusClient.ConvertRegistersToFloat(reg);
                }

                if (type == "BOOL COIL")
                {
                    reg_bool = modbusClient.ReadCoils(registr_number, 1);
                    num      = reg_bool[0];
                }
                if (type == "BOOL INPUT")
                {
                    reg_bool = modbusClient.ReadDiscreteInputs(registr_number, 1);
                    num      = reg_bool[0];
                }
                Action action = () =>
                {
                    dataGrid.Rows[tag_number].Cells["value"].Value = num.ToString();
                };
                dataGrid.Invoke(action);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
Beispiel #3
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();
     }));
 }
Beispiel #4
0
        public void OdczytajRejestry()
        {
            ModbusClient modbusClient = new ModbusClient(PLC_IP, PLC_PORT);    //Ip-Address and Port of Modbus-TCP-Server

            modbusClient.Connect();

            CisnienieZadaneN1 = ModbusClient.ConvertRegistersToFloat(modbusClient.ReadHoldingRegisters(4512, 2));
            CisnienieZadaneN2 = ModbusClient.ConvertRegistersToFloat(modbusClient.ReadHoldingRegisters(4514, 2));
            CisnienieZadaneN3 = ModbusClient.ConvertRegistersToFloat(modbusClient.ReadHoldingRegisters(4516, 2));
            CisnienieZadaneN4 = ModbusClient.ConvertRegistersToFloat(modbusClient.ReadHoldingRegisters(4518, 2));

            TolerancjaCisnieniaN1 = ModbusClient.ConvertRegistersToFloat(modbusClient.ReadHoldingRegisters(4510, 2));
            TolerancjaCisnieniaN2 = ModbusClient.ConvertRegistersToFloat(modbusClient.ReadHoldingRegisters(4526, 2));
            TolerancjaCisnieniaN3 = ModbusClient.ConvertRegistersToFloat(modbusClient.ReadHoldingRegisters(4528, 2));
            TolerancjaCisnieniaN4 = ModbusClient.ConvertRegistersToFloat(modbusClient.ReadHoldingRegisters(4530, 2));

            CisnienieN1 = ModbusClient.ConvertRegistersToFloat(modbusClient.ReadHoldingRegisters(2000, 2));
            CisnienieN2 = ModbusClient.ConvertRegistersToFloat(modbusClient.ReadHoldingRegisters(2002, 2));
            CisnienieN3 = ModbusClient.ConvertRegistersToFloat(modbusClient.ReadHoldingRegisters(2004, 2));
            CisnienieN4 = ModbusClient.ConvertRegistersToFloat(modbusClient.ReadHoldingRegisters(2006, 2));

            CzasPomiaru_N1 = ModbusClient.ConvertRegistersToInt(modbusClient.ReadHoldingRegisters(4532, 2));

            PracaGrzalek = modbusClient.ReadCoils(1296, 1);

            PracaMieszadla = modbusClient.ReadCoils(1298, 1);

            Elektrozawor_N1 = modbusClient.ReadCoils(1298, 1);
            Elektrozawor_N2 = modbusClient.ReadCoils(1299, 1);
            Elektrozawor_N3 = modbusClient.ReadCoils(1300, 1);
            Elektrozawor_N4 = modbusClient.ReadCoils(1301, 1);

            TemperaturaZadana = ModbusClient.ConvertRegistersToFloat(modbusClient.ReadHoldingRegisters(4506, 2));

            TolerancjaTemperatury = ModbusClient.ConvertRegistersToFloat(modbusClient.ReadHoldingRegisters(4508, 2));

            Temperatura_T1     = ModbusClient.ConvertRegistersToFloat(modbusClient.ReadHoldingRegisters(2008, 2));
            Temperatura_T2     = ModbusClient.ConvertRegistersToFloat(modbusClient.ReadHoldingRegisters(2010, 2));
            TemperaturaSrednia = ModbusClient.ConvertRegistersToFloat(modbusClient.ReadHoldingRegisters(2012, 2));

            GrzanieWody = modbusClient.ReadCoils(2248, 1);

            WodaNagrzana = modbusClient.ReadCoils(2251, 1);

            BadanieZasadnicze = modbusClient.ReadCoils(2249, 1);

            ProbkowanieCisnienia = modbusClient.ReadHoldingRegisters(4504, 1);

            ProbkowanieTemperatury = modbusClient.ReadHoldingRegisters(4505, 1);

            modbusClient.Disconnect();
        }
Beispiel #5
0
        public static void  ReadValues()
        {
            double Wh = 0;

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

                Console.WriteLine("wh: " + Wh);

                System.Threading.Thread.Sleep(1000);
            }
        }
        public override float readFloat(string var)
        {
            try
            {
                int[] readHoldingRegisters = this.client.ReadHoldingRegisters(int.Parse(var), 2);    //Read 10 Holding Registers from Server, starting with Address 1
                return(ModbusClient.ConvertRegistersToFloat(readHoldingRegisters, ModbusClient.RegisterOrder.LowHigh));
            }

            catch (Exception ex)
            {
                this.client.Disconnect();
                throw ex;
            }
        }
            public void Tick(ModbusClient c)
            {
                gas_v     = ModbusClient.ConvertRegistersToFloat(c.ReadHoldingRegisters(0, 2), ModbusClient.RegisterOrder.HighLow);
                pump      = ModbusClient.ConvertRegistersToFloat(c.ReadHoldingRegisters(2, 2), ModbusClient.RegisterOrder.HighLow);
                steam_v   = ModbusClient.ConvertRegistersToFloat(c.ReadHoldingRegisters(4, 2), ModbusClient.RegisterOrder.HighLow);
                water_lvl = ModbusClient.ConvertRegistersToFloat(c.ReadHoldingRegisters(6, 2), ModbusClient.RegisterOrder.HighLow);
                pressure  = ModbusClient.ConvertRegistersToFloat(c.ReadHoldingRegisters(8, 2), ModbusClient.RegisterOrder.HighLow);
                torch     = c.ReadCoils(5, 1)[0];

                alrm = c.ReadHoldingRegisters(10, 1)[0];

                if (alrm == 0)
                {
                    water_lvl += 0.02f * pump;
                    if (torch)
                    {
                        water_lvl -= 0.01f * gas_v;
                        pressure  += 0.01f * gas_v;
                    }
                    pressure -= 0.03f * steam_v;

                    if (water_lvl < 0)
                    {
                        water_lvl = 0;
                        alrm      = 3;
                    }
                    if (water_lvl > 1)
                    {
                        water_lvl = 1;
                        alrm      = 4;
                    }
                    if (pressure < 0.3f)
                    {
                        pressure = 0.3f;
                    }
                    if (pressure > 0.95f)
                    {
                        alrm = 1;
                    }
                    if (pressure > 1)
                    {
                        alrm = 2;
                    }

                    c.WriteMultipleRegisters(6, ModbusClient.ConvertFloatToRegisters(water_lvl, ModbusClient.RegisterOrder.HighLow));
                    c.WriteMultipleRegisters(8, ModbusClient.ConvertFloatToRegisters(pressure, ModbusClient.RegisterOrder.HighLow));
                    c.WriteSingleRegister(10, alrm);
                }
            }
Beispiel #8
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);
     }
 }
Beispiel #9
0
        public static void RecordDBDataLogs()
        {
            List <int[]> logs    = new List <int[]>();
            LogLoader    logLoad = new LogLoader();
            //logs = logLoad.getLogs();
            int   NumberWorks;
            int   NumberBrigada;
            float MaxMoment;
            float MovingInResolitions;
            float MaxSpeed;
            float ShutoffValve;
            float DurationEvents;
            int   indexMaxNumberWorksDB  = getNetAndOldNumberWorks();
            long  indexNumberWorksDevice = logLoad.getNewbestRecordNumber();

            if (indexNumberWorksDevice > indexMaxNumberWorksDB)
            {
                if (indexMaxNumberWorksDB == 0)
                {
                    logs = logLoad.getLogs(indexMaxNumberWorksDB);
                }
                else
                {
                    logs = logLoad.getLogs(indexMaxNumberWorksDB + 1);
                    indexMaxNumberWorksDB++;
                }
                int[] sizelog = new int[logs.Count];
                for (int i = 0; i < logs.Count; i++)
                {
                    sizelog[i] = logs[i][15];
                    DateTime dateTime = new DateTime(1997, 1, 1);
                    int[]    time1    = new int[4];
                    time1[0]            = logs[i][2];
                    time1[1]            = logs[i][3];
                    NumberWorks         = i + indexMaxNumberWorksDB;
                    dateTime            = dateTime.AddDays(logs[i][0]).AddMilliseconds(ModbusClient.ConvertRegistersToLong(time1) * 10);
                    NumberBrigada       = logs[i][4];
                    MaxMoment           = ModbusClient.ConvertRegistersToFloat(ConvertToArray(logs[i][5], logs[i][6]));
                    MovingInResolitions = ModbusClient.ConvertRegistersToFloat(ConvertToArray(logs[i][7], logs[i][8]));
                    MaxSpeed            = ModbusClient.ConvertRegistersToFloat(ConvertToArray(logs[i][9], logs[i][10]));
                    ShutoffValve        = ModbusClient.ConvertRegistersToFloat(ConvertToArray(logs[i][11], logs[i][12]));
                    DurationEvents      = ModbusClient.ConvertRegistersToFloat(ConvertToArray(logs[i][13], logs[i][14]));
                    RecordInDbData("INSERT INTO Story (NumberWorks, DataTime, NumberBrigada, MaxMoment, MovingInResolitions, MaxSpeed, ShutoffValve, DurationEvents ) " +
                                   "VALUES ('" + NumberWorks + "','" + dateTime.ToString() + "','" + NumberBrigada + "','" + MaxMoment + "','" + MovingInResolitions + "','" + MaxSpeed + "','" + ShutoffValve + "','" + DurationEvents + "')");
                }
                logLoad.getDataGrafiksOfDeviceAsync(sizelog, indexMaxNumberWorksDB);
            }
        }
Beispiel #10
0
        public static async Task Method1()
        {
            await Task.Run(async() =>
            {
                double Wh = 0;

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

                    Console.WriteLine("wh: " + Wh);

                    await Task.Delay(200);
                }
            });
        }
Beispiel #11
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);
        }
Beispiel #12
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"); }
        }
Beispiel #13
0
        public static async Task <double> Method2()
        {
            double Wh = 0;

            await Task.Run(async() =>
            {
                for (int i = 0; i < 100; i++)
                {
                    Wh = ModbusClient.ConvertRegistersToFloat(modbusClient.ReadHoldingRegisters(67, 2), ModbusClient.RegisterOrder.HighLow);

                    Console.WriteLine("dd: " + Wh);

                    await Task.Delay(100);
                }
            });

            return(Wh);
        }
Beispiel #14
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);
        }
        private void timer1_Tick(object sender, EventArgs e)
        {
            try
            {
                if (svimaster.Connected == false)
                {
                    svimaster.UnitIdentifier    = 1;    // Not necessary since default slaveID = 1;
                    svimaster.Baudrate          = 9600; // Not necessary since default baudrate = 9600
                    svimaster.Parity            = System.IO.Ports.Parity.Even;
                    svimaster.StopBits          = System.IO.Ports.StopBits.One;
                    svimaster.ConnectionTimeout = 1000;
                    svimaster.Connect();
                    label1.BackColor = Color.YellowGreen;
                    label1.Text      = "Connect";
                }


                if (svimaster.Connected == true)
                {
                    int[] Weight;
                    float NetWeight;
                    Weight             = svimaster.ReadInputRegisters(25, 2);
                    NetWeight          = ModbusClient.ConvertRegistersToFloat(Weight);
                    textBoxWeight.Text = Convert.ToString(Convert.ToUInt64(NetWeight.ToString()) - Convert.ToUInt64(textBoxNumberOfPareSnag.Text));
                }
            }

            catch
            {
                svimaster.Disconnect();
                try
                {
                    svimaster.Connect();
                }
                catch
                {
                    textBoxWeight.Text = "99999999";
                }
            }
        }
Beispiel #16
0
        ///تایمر مربوط به خواندن هر دستگاه
        private void timer1_Tick(object sender, EventArgs e)
        {
            if (timerActive == true)
            {
                //    try
                //      {
                connection = new SqlConnection(@"Data Source=192.168.1.11\Towzin;Initial Catalog=Towzin;User ID=towzin;Password=123456;MultipleActiveResultSets=true");
                connection.Close();
                connection.Open();

                /// مربوط به الگوریتم خواندن کلیه ای پی ها از لیست
                if (ListIP.Items.Count != 0 & CounterList == 0)
                {
                    CounterList    = ListIP.Items.Count;
                    CounterListSql = CounterList;
                }


                if (CounterList != 0 & timerActive == true)
                {
                    lblCorrect.Text = (SuccessCheckHMI = SuccessCheckHMI + 1).ToString();
                    ///کد مر بوط به پینگ کردن ای پی مقصد
                    Ping      p = new Ping();
                    PingReply r;
                    string    s;
                    s = ListIP.Items[CounterList - 1].ToString();


                    r = p.Send(s, 1);


                    if (r.Status == IPStatus.Success)
                    {
                        lblStatus.Text = "connect " + ListIP.Items[CounterList - 1].ToString();
                        svimaster.ConnectionTimeout = 1;
                        s = svimaster.ToString();

                        svimaster.Connect(ListIP.Items[CounterList - 1].ToString(), 502);

                        //  ListErrors.Items.Add(CounterList.ToString() + "s" + DateTime.Now.TimeOfDay.Seconds.ToString() + ":" + DateTime.Now.TimeOfDay.Milliseconds.ToString());
                        int[] Main_ProductCode;
                        // lblStatus.Text = "connect " + ListIP.Items[CounterList - 1].ToString() + " ok";
                        bool[] checkbit = svimaster.ReadCoils(0, 1);    // Check bit send from HMI
                                                                        //Read Data From HMI
                        if (checkbit[0] == true)
                        {
                            ///خواندن اطلاعات از HMI
                            ///{
                            ///int[] productCodeHMI = svimaster.ReadHoldingRegisters(2, 12);
                            int[] amountHMI      = svimaster.ReadHoldingRegisters(105, 2); //مقدار واحد اول
                            int[] amount1HMI     = svimaster.ReadHoldingRegisters(109, 2); //مقدار واحد دوم
                            int[] dateHMI        = svimaster.ReadHoldingRegisters(101, 2); //تاریخ اضافه شدن
                            int[] timeHMI        = svimaster.ReadHoldingRegisters(103, 2); //ساعت اضافه شدن
                            int[] opratorCodeHMI = svimaster.ReadHoldingRegisters(111, 1); //کد اپراتور

                            ///1 محصول
                            ///2-49 ضایعات
                            ///50-100 توقف
                            int[] kindHMI                   = svimaster.ReadHoldingRegisters(112, 1); //نوع محصول
                            int[] sourceOrderCodeHMI        = svimaster.ReadHoldingRegisters(107, 2); //کدسفارش مبدا
                            int[] sourceProductCodeHMI      = svimaster.ReadHoldingRegisters(19, 15); ///کد کالای مبدا
                            int[] destinationOrderCodeHMI   = svimaster.ReadHoldingRegisters(118, 2); ///کد سفارش مقصد
                            int[] destinationProductCodeHMI = svimaster.ReadHoldingRegisters(40, 15); //کد کالای مقصد
                            ///}


                            ////تبدیل باینری به متغیر های قابل استفاده
                            ////{
                            float    amount               = ModbusClient.ConvertRegistersToFloat(amountHMI);                         //وزن
                            float    amount1              = ModbusClient.ConvertRegistersToFloat(amount1HMI);                        //نمونه
                            double   dateInsert           = ModbusClient.ConvertRegistersToDouble(dateHMI);                          //تاریخ
                            double   timeInsert           = ModbusClient.ConvertRegistersToDouble(timeHMI);                          //ساعت
                            float    sourceOrderCode      = ModbusClient.ConvertRegistersToFloat(sourceOrderCodeHMI);                //کد شماره سفارش مبدا
                            string   sourceProductCode    = ModbusClient.ConvertRegistersToString(sourceProductCodeHMI, 0, 15);      //کد محصول مبدا
                            float    destinationOrderCode = ModbusClient.ConvertRegistersToFloat(destinationOrderCodeHMI);           //شماره سفارش مقصد
                            string   destinationPartCode  = ModbusClient.ConvertRegistersToString(destinationProductCodeHMI, 0, 15); //کد محصول مقصد
                            DateTime dateTime;
                            if (dateInsert > 999999)
                            {
                                dateTime = Convert.ToDateTime("20" + dateInsert.ToString().Substring(1, 2) + "-" + dateInsert.ToString().Substring(3, 2) + "-" + dateInsert.ToString().Substring(5, 2) + " " + timeInsert.ToString().Substring(2, 2) + ":" + timeInsert.ToString().Substring(4, 2) + ":" + timeInsert.ToString().Substring(6, 2));
                            }
                            else
                            {
                                dateTime = Convert.ToDateTime("20" + dateInsert.ToString().Substring(0, 2) + "-" + dateInsert.ToString().Substring(2, 2) + "-" + dateInsert.ToString().Substring(4, 2) + " " + timeInsert.ToString().Substring(2, 2) + ":" + timeInsert.ToString().Substring(4, 2) + ":" + timeInsert.ToString().Substring(6, 2));
                            }
                            ////}


                            /////چک کردن اطلاعات دریافتی با دیتابیس جهت تایید اطلاعات گرفته شده
                            ////{
                            bool partError  = false;
                            bool orderError = false;
                            int  status     = 0; //جواب سرور دیتابیس


                            ////چک کردن کد سفارش مبدا در دیتا بیس
                            ////{
                            command = new SqlCommand("SELECT OrderCode FROM [Order] where OrderCode=" + sourceOrderCode.ToString(), connection);
                            var tempSourceOrderCode = command.ExecuteScalar();
                            if (tempSourceOrderCode == null)
                            {
                                sourceOrderCode = 99999;
                                //    orderError = true;
                            }
                            ////}

                            ///چک کردن کد سفارش مقصد در دیتا بیس
                            ///{
                            //شرط جهت چک کردن اینکه اصلا کد سفارش مقصد وارد شده است یا نه
                            if (destinationOrderCode > 0)
                            {
                                //check Order Code Destination
                                command = new SqlCommand("SELECT OrderCode FROM [Order] where OrderCode=" + destinationOrderCode.ToString(), connection);
                                var tempDestinationOrderCode = command.ExecuteScalar();

                                if (tempDestinationOrderCode == null)
                                {
                                    destinationOrderCode = 99999;
                                    //orderError = true;
                                }
                            }

                            ///}


                            ////چک کردن خالی بودن کد کالای مبدا
                            ///{
                            int temp = sourceProductCode.IndexOf("\0");
                            if (temp < 0)
                            {
                                sourceProductCode = sourceProductCode.Substring(0, 11);
                            }

                            else if (temp == 0)
                            {
                                sourceProductCode = "99999";
                            }

                            else if (temp > 0)
                            {
                                sourceProductCode = sourceProductCode.Substring(0, temp);
                            }

                            ////}


                            ////چک کردن کد کالای مقصد
                            ///{
                            //        temp = destinationPartCode.IndexOf("\0");
                            //      if (temp < 0)
                            //    {
                            //      destinationPartCode = destinationPartCode.Substring(0, 11);
                            //}
                            //else if (temp == 0)
                            //{

                            //      destinationPartCode = "99999";



                            // }
                            //  else if (temp > 0)
                            //    {
                            //          destinationPartCode = destinationPartCode.Substring(0, temp);
                            //       }
                            ////}



                            ////چک کردن کد کالای سفارش مبدا در دیتا بیس
                            ////{
                            long sourcePartID = 0;
                            if (sourceProductCode != "99999")
                            {
                                command = new SqlCommand("select ID from Part where PartCode='" + sourceProductCode + "'", connection);
                                var tempPartID = command.ExecuteScalar();
                                ////آیا کد کالا در دیتابیس وجود دارد
                                if (tempPartID != null)
                                {
                                    sourcePartID = (long)tempPartID;
                                }
                                else
                                {
                                    ///در صورتی که وجود ندارد کد پیش فرض تعلق میگیرد
                                    sourcePartID = 10011;
                                }
                            }
                            else
                            {
                                sourcePartID = 10011;
                            }
                            ///}



                            //long destinationpartid = 0;
                            /////چک کردن کد کالای سفارش مقصد
                            //if (destinationpartcode.trim() != "")
                            //{
                            //    command = new sqlcommand("select id from part where partcode='" + destinationpartcode + "'", connection);
                            //    var temppartid = command.executescalar();
                            //    ////آیا کد کالا در دیتابیس وجود دارد
                            //    if (temppartid != null)
                            //    {
                            //        destinationpartid = (long)temppartid;
                            //    }
                            //    else
                            //    {
                            //        ///در صورتی که وجود ندارد کد پیش فرض تعلق میگیرد
                            //        destinationpartid = 10011;
                            //    }

                            //}
                            //else
                            //{
                            //    destinationpartid = 10011;
                            //}

                            ////}پایان چک کردن در دیتا بیس


                            ////گرفتن کد کالای ضایعاتی در صورتی وجود کد کالای مبدا
                            /////{
                            long partWasteID = 0;
                            if (sourcePartID != 10011)
                            {
                                command = new SqlCommand("select count(PartWesteID) from Part where ID='" + sourcePartID + "'", connection);

                                if ((Int32)command.ExecuteScalar() != 0)
                                {
                                    command = new SqlCommand("select PartWesteID from Part where ID='" + sourcePartID + "'", connection);

                                    var tempPartWasteID = command.ExecuteScalar();
                                    ////آیا کد کالای ضایعاتی در دیتابیس وجود دارد
                                    if (tempPartWasteID.ToString() != null)
                                    {
                                        partWasteID = (long)tempPartWasteID;
                                    }
                                }

                                if (partWasteID == 0)
                                {
                                    ///در صورتی که وجود ندارد کد پیش فرض تعلق میگیرد
                                    partWasteID = 30025;
                                }
                            }
                            else
                            {
                                partWasteID = 30025;
                            }
                            ////}



                            string Creator  = "2b2f093d-19c0-4abd-b4b8-512cdacd97ab";
                            string modifier = "2b2f093d-19c0-4abd-b4b8-512cdacd97ab";

                            ///بررسی اینکه تا الان رکوردی با این زمان درج شده است یا خبر
                            command = new SqlCommand("SELECT OrderCodeID FROM ProductiveDetails where AddDate='" + dateTime + "'", connection);
                            var tempProductiveDetails = command.ExecuteScalar();

                            ///بررسی اینکه تا الان رکوردی با این زمان در جدول توقفات درج شده است یا خبر
                            command = new SqlCommand("SELECT OrderCodeID FROM ProductiveStoppages where AddDate='" + dateTime + "'", connection);
                            var tempProductiveStopages = command.ExecuteScalar();

                            ////گرفتن شماره خط تولید از ای پی
                            string ProductionLineID            = ListProductionLine.Items[CounterList - 1].ToString();
                            string destinationProductionLineID = "";
                            command = new SqlCommand("SELECT ProductionLineID FROM [Order] where OrderCode=" + destinationOrderCode + "", connection);
                            var tempDestinationProductionLineID = command.ExecuteScalar();
                            if (tempDestinationProductionLineID != null)
                            {
                                destinationProductionLineID = tempDestinationProductionLineID.ToString();
                            }
                            else
                            {
                                destinationProductionLineID = "20006";
                            }

                            if (kindHMI[0] == 1 & tempProductiveDetails == null)
                            {
                                int Result1 = 1;
                                int Result  = 1;
                                if (destinationOrderCode == 0)
                                {
                                    command = new SqlCommand("insert into ProductiveDetails (OrderCodeID,ProductionLineID,PartID,OperatorID,IO,Waste,Amount,Amount1,IP,State,Creator,AddDate,LastModifier,LastModificationDate) VALUES (" + sourceOrderCode + "," + ProductionLineID + "," + sourcePartID + "," + "10006" + "," + 1 + "," + 0 + "," + amount + "," + amount1 + ",'" + ListIP.Items[CounterList - 1].ToString() + "'," + 1 + ",'" + Creator + "','" + dateTime + "','" + modifier + "','" + dateTime + "')", connection);
                                    Result  = command.ExecuteNonQuery();
                                }
                                else
                                {
                                    //with Destination Code
                                    //command = new SqlCommand("insert into ProductiveDetails (OrderCodeID,ProductionLineID,PartID,OperatorID,IO,Waste,Amount,Amount1,ToOrderCodeID,ToPartID,State,Creator,AddDate,LastModifier,LastModificationDate) VALUES (" + sourceOrderCode + "," + ProductionLineID + "," + sourcePartID + "," + "10006" + "," + 1 + "," + 0 + "," + amount + "," + amount1 + "," + destinationOrderCode + "," + destinationPartID + "," + 1 + ",'" + Creator + "','" + dateTime + "','" + modifier + "','" + dateTime + "')", connection);
                                    command = new SqlCommand("insert into ProductiveDetails (OrderCodeID,ProductionLineID,PartID,OperatorID,IO,Waste,Amount,Amount1,IP,ToOrderCodeID,State,Creator,AddDate,LastModifier,LastModificationDate) VALUES (" + sourceOrderCode + "," + ProductionLineID + "," + sourcePartID + "," + "10006" + "," + 1 + "," + 0 + "," + amount + "," + amount1 + ",'" + ListIP.Items[CounterList - 1].ToString() + "'," + destinationOrderCode + "," + 1 + ",'" + Creator + "','" + dateTime + "','" + modifier + "','" + dateTime + "')", connection);
                                    Result1 = command.ExecuteNonQuery();
                                    command = new SqlCommand("insert into ProductiveDetails (OrderCodeID,ProductionLineID,PartID,OperatorID,IO,Waste,Amount,Amount1,IP,FromOrderCodeID,FromPartID,State,Creator,AddDate,LastModifier,LastModificationDate) VALUES (" + destinationOrderCode + "," + destinationProductionLineID + "," + sourcePartID + "," + "10006" + "," + 0 + "," + 0 + "," + amount + "," + amount1 + ",'" + ListIP.Items[CounterList - 1].ToString() + "'," + sourceOrderCode + "," + sourcePartID + "," + 1 + ",'" + Creator + "','" + dateTime + "','" + modifier + "','" + dateTime + "')", connection);
                                    Result  = command.ExecuteNonQuery();
                                }


                                if (Result != 0 & orderError == false & partError == false & Result1 != 0)
                                {
                                    status = 1;
                                }
                                else
                                {
                                    status = 2;
                                }
                            }
                            else if (kindHMI[0] >= 2 & kindHMI[0] <= 49 & tempProductiveDetails == null)
                            {
                                command = new SqlCommand("insert into ProductiveDetails (OrderCodeID,ProductionLineID,PartID,FromPartID,OperatorID,IO,Waste,Amount,IP,State,Creator,AddDate,LastModifier,LastModificationDate) VALUES (" + sourceOrderCode + "," + ProductionLineID + "," + partWasteID + "," + sourcePartID + "," + "10006" + "," + 1 + "," + 1 + "," + amount + ",'" + ListIP.Items[CounterList - 1].ToString() + "'," + 1 + ",'" + Creator + "','" + dateTime + "','" + modifier + "','" + dateTime + "')", connection);

                                int Result = command.ExecuteNonQuery();

                                if (Result != 0 & partError == false & orderError == false)
                                {
                                    status = 1;
                                }
                                else
                                {
                                    status = 2;
                                }
                            }

                            else if (kindHMI[0] >= 50 & kindHMI[0] <= 100 & tempProductiveStopages == null)
                            {
                                command = new SqlCommand("SELECT ID FROM Stoppages where Description='" + kindHMI[0] + "'", connection);

                                var  tempStoppagesID = command.ExecuteScalar();
                                long StoppagesID     = 0;
                                if (tempStoppagesID == null)
                                {
                                    StoppagesID = 99;
                                }
                                else
                                {
                                    StoppagesID = (long)tempStoppagesID;
                                }

                                if (kindHMI[0] < 100)
                                {
                                    command = new SqlCommand("INSERT INTO [dbo].[ProductiveStoppages] ([StoppagesID],[OrderCodeID],[OperatorID],[StartTime],[IP],[State],[Creator],[AddDate],[LastModifier],[LastModificationDate]) VALUES(" + StoppagesID + "," + sourceOrderCode + "," + "10006" + ",'" + dateTime + "','" + ListIP.Items[CounterList - 1].ToString() + "'," + 1 + ",'" + Creator + "','" + dateTime + "','" + modifier + "','" + dateTime + "')", connection);
                                }
                                else
                                {
                                    command = new SqlCommand("INSERT INTO [dbo].[ProductiveStoppages] ([StoppagesID],[OrderCodeID],[OperatorID],[EndTime],[IP],[State],[Creator],[AddDate],[LastModifier],[LastModificationDate]) VALUES(" + StoppagesID + "," + sourceOrderCode + "," + "10006" + ",'" + dateTime + "','" + ListIP.Items[CounterList - 1].ToString() + "'," + 1 + ",'" + Creator + "','" + dateTime + "','" + modifier + "','" + dateTime + "')", connection);
                                }
                                int Result = command.ExecuteNonQuery();

                                if (Result != 0 & partError == false)
                                {
                                    status = 1;
                                }
                                else
                                {
                                    status = 2;
                                }
                            }
                            /////برگشت از سفارش
                            else if ((kindHMI[0] == 101 || kindHMI[0] == 150) & tempProductiveDetails == null)
                            {
                                command = new SqlCommand("insert into ProductiveDetails (OrderCodeID,PartID,OperatorID,IO,Waste,Amount,Amount1,ip,State,Creator,AddDate,LastModifier,LastModificationDate) VALUES (" + sourceOrderCode + "," + sourcePartID + "," + "10006" + "," + 0 + "," + 0 + "," + amount * (-1) + "," + amount1 * (-1) + ",'" + ListIP.Items[CounterList - 1].ToString() + "'," + 1 + ",'" + Creator + "','" + dateTime + "','" + modifier + "','" + dateTime + "')", connection);

                                int Result = command.ExecuteNonQuery();

                                if (Result != 0 & partError == false & orderError == false)
                                {
                                    status = 1;
                                }
                                else
                                {
                                    status = 2;
                                }
                            }


                            if (kindHMI[0] == 0)
                            {
                                status = 2;
                            }


                            if (tempProductiveDetails != null || tempProductiveStopages != null)
                            {
                                status = 1;
                            }

                            SuccessInsert = SuccessInsert + 1;
                            lblRead.Text  = SuccessInsert.ToString();

                            /* Reply From SQL Sever
                             * Status=0 Unable to Saved to SQL Server
                             * Status=1 Save to SQL
                             * Status=2 Error in Data */
                            svimaster.WriteSingleRegister(113, status);
                            checkbit[0] = false;
                            ///}
                            ///پایان خواندن از HMI
                        }

                        long OrderCodeSource      = 0;
                        long OrderCodeDestination = 0;
                        ///خواندن اینکه دستگاه تازه روشن شده است یا خیر اگه تازه روشن شده باشد 0 است
                        bool[] RestartHMI = svimaster.ReadCoils(5, 1);

                        command = new SqlCommand("SELECT SendOrderCode FROM Devices where IP='" + ListIP.Items[CounterList - 1].ToString() + "'", connection);
                        var  varSendOrderCode = command.ExecuteScalar();
                        bool SendOrderCode    = (bool)varSendOrderCode;
                        if (SendOrderCode == true || RestartHMI[0] == false)
                        {
                            ////ارسال لیست شماره شماره سفارش مبدا
                            int addressOrder = 371;
                            int addressLine  = 299;
                            command = new SqlCommand("SELECT OrderCode,ProductionLineLatinName FROM vwDeviceOrders where IP='" + ListIP.Items[CounterList - 1].ToString() + "' and SendOrderCode=1", connection);

                            using (var reader = command.ExecuteReader())
                            {
                                while (reader.Read())
                                {
                                    OrderCodeSource = (long)reader.GetInt64(reader.GetOrdinal("OrderCode"));
                                    float Main_order = OrderCodeSource;    //شماره سفارش از سروربه پنل
                                    int[] floatreg   = ModbusClient.ConvertFloatToTwoRegisters(Main_order);
                                    svimaster.WriteMultipleRegisters(addressOrder, floatreg);
                                    addressOrder = addressOrder + 2;
                                    string Main_ProductionLineLatinName = (string)reader.GetString(reader.GetOrdinal("ProductionLineLatinName"));    //شماره سفارش از سروربه پنل
                                    int[]  ProductionLineLatinName      = ModbusClient.ConvertStringToRegisters(Main_ProductionLineLatinName);
                                    svimaster.WriteMultipleRegisters(addressLine, ProductionLineLatinName);
                                    addressLine = addressLine + 12;
                                }
                            }
                            //command = new SqlCommand("Update Devices set SendOrderCode=0 where IP='" + ListIP.Items[CounterList - 1].ToString() + "'", connection);
                            //command.ExecuteNonQuery();
                        }

                        /////ارسال لیست شماره سفارش مقصد
                        command = new SqlCommand("SELECT SendDestinationOrder FROM Devices where IP='" + ListIP.Items[CounterList - 1].ToString() + "'", connection);
                        var  varSendDestinationOrder = command.ExecuteScalar();
                        bool SendDestinationOrder    = (bool)varSendDestinationOrder;

                        if (SendDestinationOrder == true || RestartHMI[0] == false)
                        {
                            int addressLine  = 399;
                            int addressOrder = 519;


                            command = new SqlCommand("SELECT OrderCode,ProductionLineLatinName FROM vwDeviceOrders where IP!='" + ListIP.Items[CounterList - 1].ToString() + "' and Region=" + ListRegion.Items[CounterList - 1].ToString(), connection);

                            using (var reader = command.ExecuteReader())
                            {
                                while (reader.Read())
                                {
                                    OrderCodeDestination = (long)reader.GetInt64(reader.GetOrdinal("OrderCode"));
                                    float Main_order = OrderCodeDestination;    //شماره سفارش از سروربه پنل
                                    int[] floatreg   = ModbusClient.ConvertFloatToTwoRegisters(Main_order);
                                    svimaster.WriteMultipleRegisters(addressOrder, floatreg);
                                    addressOrder = addressOrder + 2;

                                    string Main_ProductionLineLatinName = (string)reader.GetString(reader.GetOrdinal("ProductionLineLatinName"));    //شماره سفارش از سروربه پنل
                                    int[]  ProductionLineLatinName      = ModbusClient.ConvertStringToRegisters(Main_ProductionLineLatinName);
                                    svimaster.WriteMultipleRegisters(addressLine, ProductionLineLatinName);
                                    addressLine = addressLine + 12;
                                }
                            }
                            //command = new SqlCommand("Update Devices set SendDestinationOrder=0 where IP='" + ListIP.Items[CounterList - 1].ToString() + "'", connection);
                            //command.ExecuteNonQuery();
                        }


                        //////نوشتن شماره گاری و وزن آنها رو HMI
                        command = new SqlCommand("SELECT SendGari FROM Devices where IP='" + ListIP.Items[CounterList - 1].ToString() + "'", connection);
                        var  varSendGari = command.ExecuteScalar();
                        bool SendGari    = (bool)varSendGari;


                        if (SendGari == true || RestartHMI[0] == false)

                        //if (SendGari == true)
                        {
                            int addressContainerCode      = 800;
                            int addressContainerNetWeight = 600;
                            command = new SqlCommand("SELECT ContainerCode,NetWeight FROM Container", connection);

                            using (var reader = command.ExecuteReader())
                            {
                                while (reader.Read())
                                {
                                    int ContainerCode = reader.GetInt32(reader.GetOrdinal("ContainerCode"));
                                    svimaster.WriteSingleRegister(addressContainerCode, ContainerCode);


                                    float Main_NetWeight = (float)reader.GetDouble(reader.GetOrdinal("NetWeight"));
                                    int[] NetWeight      = ModbusClient.ConvertFloatToTwoRegisters(Main_NetWeight);
                                    svimaster.WriteMultipleRegisters(addressContainerNetWeight, NetWeight);

                                    addressContainerCode      = addressContainerCode + 1;
                                    addressContainerNetWeight = addressContainerNetWeight + 2;
                                }
                            }
                            command = new SqlCommand("Update Devices set SendGari=0 where IP='" + ListIP.Items[CounterList - 1].ToString() + "'", connection);
                            command.ExecuteNonQuery();

                            ///ست کردن بیت ارسال مجدد گاری برای بارگزاری مجدد دیتا از دیتا بیس
                            svimaster.WriteSingleCoil(7, true);
                        }



                        ////ارسال کد کالاهای سفارش مبدا در صورت تغییر در سفارش پنل

                        bool[] ChangeOrderCodeSource = svimaster.ReadCoils(4, 1); //تغییری در کد سفارش اتفاق افتاده است یا خیر : خیر=0

                        if (ChangeOrderCodeSource[0] == true)
                        {
                            int[] OrderCodeSourceChange = svimaster.ReadHoldingRegisters(0, 2);
                            OrderCodeSource = (long)ModbusClient.ConvertRegistersToFloat(OrderCodeSourceChange);


                            int Address = 200;

                            using (connection)
                                using (command = new SqlCommand("select * from vwOrderParts where OrderCode=" + OrderCodeSource.ToString(), connection))
                                {
                                    {
                                        ///پاک کردن ردیف کالاها
                                        ///for (int j = 199; j <= 251; j = j + 13)
                                        ///{
                                        // svimaster.WriteMultipleRegisters(j, ModbusClient.ConvertStringToRegisters("            "));
                                        ///}


                                        using (SqlDataReader reader = command.ExecuteReader())
                                        {
                                            while (reader.Read())
                                            {
                                                string PartCodeSource = (string)reader.GetString(reader.GetOrdinal("PartCode"));
                                                string Main_prod_code = PartCodeSource;//کد کالا از سرور به پنل
                                                Main_ProductCode = ModbusClient.ConvertStringToRegisters(Main_prod_code);
                                                svimaster.WriteMultipleRegisters(Address, Main_ProductCode);
                                                Address = Address + 15;
                                            }
                                        }
                                    }

                                    svimaster.WriteSingleCoil(4, false);
                                }
                        }



                        ////ارسال کد کالاهای سفارش مقصد در صورت تغییر در سفارش پنل

                        bool[] ChangeOrderCodeDestination = svimaster.ReadCoils(6, 1);    //تغییری در کد سفارش اتفاق افتاده است یا خیر : خیر=0

                        if (ChangeOrderCodeDestination[0] == true)
                        {
                            int[] OrderCodeDestinationChange = svimaster.ReadHoldingRegisters(549, 2);
                            OrderCodeDestination = (long)ModbusClient.ConvertRegistersToFloat(OrderCodeDestinationChange);


                            int addressPartCode = 1100;
                            int addressPartName = 1300;
                            using (connection)
                                using (command = new SqlCommand("select * from vwOrderParts where OrderCode=" + OrderCodeDestination.ToString(), connection))
                                {
                                    {
                                        ////پاک کردن ردیف کالاها
                                        ///for (int j = 199; j <= 251; j = j + 13)
                                        ///{
                                        /// svimaster.WriteMultipleRegisters(j, ModbusClient.ConvertStringToRegisters("                "));
                                        ///}


                                        using (SqlDataReader reader = command.ExecuteReader())
                                        {
                                            while (reader.Read())
                                            {
                                                string tempSourcePartCode = (string)reader.GetString(reader.GetOrdinal("PartCode"));
                                                ///string Main_prod_code = tempSourcePartCode;//کد کالا از سرور به پنل
                                                Main_ProductCode = ModbusClient.ConvertStringToRegisters(tempSourcePartCode);
                                                svimaster.WriteMultipleRegisters(addressPartCode, Main_ProductCode);
                                                addressPartCode = addressPartCode + 15;

                                                string tempSourcePartName = (string)reader.GetString(reader.GetOrdinal("LatinName"));
                                                string Main_prod_code     = tempSourcePartName;//کد کالا از سرور به پنل
                                                Main_ProductCode = ModbusClient.ConvertStringToRegisters(Main_prod_code);
                                                svimaster.WriteMultipleRegisters(addressPartName, Main_ProductCode);
                                                addressPartName = addressPartName + 12;
                                            }
                                        }
                                    }

                                    svimaster.WriteSingleCoil(6, false);
                                }
                        }



                        //string Main_prod_code = "uyuy";//کد کالا از سرور به پنل
                        // Main_ProductCode = ModbusClient.ConvertStringToRegisters(Main_prod_code);
                        // svimaster.WriteMultipleRegisters(2, Main_ProductCode);
                        lblStatus.Text = "Read Device " + ListIP.Items[CounterList - 1].ToString();
                        ///مربوط به الگوریتم خواندن کلیه ای پی ها از لیست


                        svimaster.WriteSingleCoil(5, true);
                        svimaster.WriteSingleCoil(8, true);
                    }
                    CounterList = CounterList - 1;
                    //// برای قسمت تازه روشن دستگاه و یک کردن آن


                    connection.Close();
                    svimaster.Disconnect();
                    int      i       = DateTime.Compare(DateTime.Now, startTime);
                    TimeSpan avgTime = DateTime.Now.Subtract(startTime);
                    lblAvarage.Text = (avgTime.TotalSeconds / SuccessCheckHMI).ToString();
                }

                connection.Close();
                svimaster.Disconnect();

                /*}
                 *
                 *
                 * catch (Exception ex)
                 * {
                 *
                 *  ListErrors.Items.Add(ListIP.Items[CounterList - 1].ToString() + ex.Message);
                 *  connection.Close();
                 *  svimaster.Disconnect();
                 *  lblWrong.Text = (wrongRead = wrongRead + 1).ToString();
                 * }*/
            }
        }
        private void Button_Click(object sender, RoutedEventArgs e)
        {
            //var hosts = Pinger.PingAll("192.168.20.254");
            try
            {
                ModbusClient modbusClient = new ModbusClient("192.168.20.167", 502);    //Ip-Address and Port of Modbus-TCP-Server
                modbusClient.Connect();
                //int[] readHoldingRegisters = modbusClient.ReadHoldingRegisters(310, 2);

                float CisnienieZadaneN1 = ModbusClient.ConvertRegistersToFloat(modbusClient.ReadHoldingRegisters(4512, 2));
                float CisnienieZadaneN2 = ModbusClient.ConvertRegistersToFloat(modbusClient.ReadHoldingRegisters(4514, 2));
                float CisnienieZadaneN3 = ModbusClient.ConvertRegistersToFloat(modbusClient.ReadHoldingRegisters(4516, 2));
                float CisnienieZadaneN4 = ModbusClient.ConvertRegistersToFloat(modbusClient.ReadHoldingRegisters(4518, 2));

                txtCisnienieZadane_N1.Text = CisnienieZadaneN1.ToString();
                txtCisnienieZadane_N2.Text = CisnienieZadaneN2.ToString();
                txtCisnienieZadane_N3.Text = CisnienieZadaneN3.ToString();
                txtCisnienieZadane_N4.Text = CisnienieZadaneN4.ToString();

                float TolerancjaCisnienia_N1 = ModbusClient.ConvertRegistersToFloat(modbusClient.ReadHoldingRegisters(4510, 2));
                float TolerancjaCisnienia_N2 = ModbusClient.ConvertRegistersToFloat(modbusClient.ReadHoldingRegisters(4526, 2));
                float TolerancjaCisnienia_N3 = ModbusClient.ConvertRegistersToFloat(modbusClient.ReadHoldingRegisters(4528, 2));
                float TolerancjaCisnienia_N4 = ModbusClient.ConvertRegistersToFloat(modbusClient.ReadHoldingRegisters(4530, 2));

                txtCisnienieTolerancja_N1.Text = TolerancjaCisnienia_N1.ToString();
                txtCisnienieTolerancja_N2.Text = TolerancjaCisnienia_N2.ToString();
                txtCisnienieTolerancja_N3.Text = TolerancjaCisnienia_N3.ToString();
                txtCisnienieTolerancja_N4.Text = TolerancjaCisnienia_N4.ToString();

                float CisnienieN1 = ModbusClient.ConvertRegistersToFloat(modbusClient.ReadHoldingRegisters(2000, 2));
                float CisnienieN2 = ModbusClient.ConvertRegistersToFloat(modbusClient.ReadHoldingRegisters(2002, 2));
                float CisnienieN3 = ModbusClient.ConvertRegistersToFloat(modbusClient.ReadHoldingRegisters(2004, 2));
                float CisnienieN4 = ModbusClient.ConvertRegistersToFloat(modbusClient.ReadHoldingRegisters(2006, 2));

                lblCisnienie_N1.Content = CisnienieN1.ToString();
                lblCisnienie_N2.Content = CisnienieN2.ToString();
                lblCisnienie_N3.Content = CisnienieN3.ToString();
                lblCisnienie_N4.Content = CisnienieN4.ToString();

                int CzasPomiaru_N1 = ModbusClient.ConvertRegistersToInt(modbusClient.ReadHoldingRegisters(4532, 2));

                txtCzasPomiaru_N1.Text = CzasPomiaru_N1.ToString();

                bool[] PracaGrzalek = modbusClient.ReadCoils(1296, 1);
                lblPracaGrzalek.Content = PracaGrzalek[0].ToString();

                bool[] PracaMieszadla = modbusClient.ReadCoils(1298, 1);
                lblPracaMieszadla.Content = PracaMieszadla[0].ToString();

                bool[] Elektrozawor_N1 = modbusClient.ReadCoils(1298, 1);
                bool[] Elektrozawor_N2 = modbusClient.ReadCoils(1299, 1);
                bool[] Elektrozawor_N3 = modbusClient.ReadCoils(1300, 1);
                bool[] Elektrozawor_N4 = modbusClient.ReadCoils(1301, 1);
                lblElektrozawor_N1.Content = Elektrozawor_N1[0].ToString();
                lblElektrozawor_N2.Content = Elektrozawor_N2[0].ToString();
                lblElektrozawor_N3.Content = Elektrozawor_N3[0].ToString();
                lblElektrozawor_N4.Content = Elektrozawor_N4[0].ToString();

                float TemperaturaZadana = ModbusClient.ConvertRegistersToFloat(modbusClient.ReadHoldingRegisters(4506, 2));
                txtTemperaturaZadana.Text = TemperaturaZadana.ToString();

                float TolerancjaTemperatury = ModbusClient.ConvertRegistersToFloat(modbusClient.ReadHoldingRegisters(4508, 2));
                txtTolerancjaTemperatury.Text = TolerancjaTemperatury.ToString();

                float Temperatura_T1     = ModbusClient.ConvertRegistersToFloat(modbusClient.ReadHoldingRegisters(2008, 2));
                float Temperatura_T2     = ModbusClient.ConvertRegistersToFloat(modbusClient.ReadHoldingRegisters(2010, 2));
                float TemperaturaSrednia = ModbusClient.ConvertRegistersToFloat(modbusClient.ReadHoldingRegisters(2012, 2));
                lblTemperaturaWody1.Content   = Temperatura_T1.ToString();
                lblTemperaturaWody2.Content   = Temperatura_T2.ToString();
                lblTemperaturaSrednia.Content = TemperaturaSrednia.ToString();

                bool[] GrzanieWody = modbusClient.ReadCoils(2248, 1);
                lblGrzanieWody.Content = GrzanieWody[0].ToString();

                bool[] WodaNagrzana = modbusClient.ReadCoils(2251, 1);
                lblWodaNagrzana.Content = WodaNagrzana[0].ToString();

                bool[] BadanieZasadnicza = modbusClient.ReadCoils(2249, 1);
                lblBadanieZasadnicze.Content = BadanieZasadnicza[0].ToString();

                int[] ProbkowanieCisnienia = modbusClient.ReadHoldingRegisters(4504, 1);
                txtProbkowanieCisnienia.Text = ProbkowanieCisnienia[0].ToString();

                int[] ProbkowanieTemperatury = modbusClient.ReadHoldingRegisters(4505, 1);
                txtProbkowanieTemperatury.Text = ProbkowanieTemperatury[0].ToString();

                modbusClient.Disconnect();
            }
            catch
            {
                MessageBox.Show("nie można podłączyć PLC");
            }
        }
Beispiel #18
0
        private void FetchFromModbusServer()
        {
            if (ModbusHost.HasValue && ModbusAddress1.Value > 0)
            {
                int registerToRead;
                switch (DataType.Value)
                {
                case DataTypeEnum.INT32:
                case DataTypeEnum.FLOAT:
                    registerToRead = 2;
                    break;

                case DataTypeEnum.LONG:
                case DataTypeEnum.DOUBLE:
                    registerToRead = 4;
                    break;

                case DataTypeEnum.INT16_SIGNED:
                case DataTypeEnum.INT16_UNSIGNED:
                default:
                    registerToRead = 1;
                    break;
                }
                ModbusClient.RegisterOrder regOrder;
                if (!RegisterOrder.HasValue || RegisterOrder.Value == ByteOrderEnum.LOW_HIGH)
                {
                    regOrder = ModbusClient.RegisterOrder.LowHigh;
                }
                else
                {
                    regOrder = ModbusClient.RegisterOrder.HighLow;
                }
                ModbusClient modbusClient = null;
                try
                {
                    modbusClient = new ModbusClient(ModbusHost.Value, ModbusPort.Value);
                    modbusClient.ConnectionTimeout = 5000;
                    modbusClient.Connect();
                    modbusClient.UnitIdentifier = (byte)ModbusID.Value;

                    int[] readHoldingRegisters;
                    switch (FunctionCode.Value)
                    {
                    case FunctionCodeEnum.FC_04:
                        readHoldingRegisters = modbusClient.ReadInputRegisters(ModbusAddress1.Value, registerToRead);
                        break;

                    case FunctionCodeEnum.FC_03:
                    default:
                        readHoldingRegisters = modbusClient.ReadHoldingRegisters(ModbusAddress1.Value, registerToRead);
                        break;
                    }

                    double result     = 0;
                    string result_str = "";

                    switch (DataType.Value)
                    {
                    case DataTypeEnum.INT32:
                        // probably signed ...
                        result = ModbusClient.ConvertRegistersToInt(readHoldingRegisters, regOrder);
                        break;

                    case DataTypeEnum.FLOAT:
                        result = ModbusClient.ConvertRegistersToFloat(readHoldingRegisters, regOrder);
                        break;

                    case DataTypeEnum.LONG:
                        result = ModbusClient.ConvertRegistersToLong(readHoldingRegisters, regOrder);
                        break;

                    case DataTypeEnum.DOUBLE:
                        result = ModbusClient.ConvertRegistersToDouble(readHoldingRegisters, regOrder);
                        break;

                    case DataTypeEnum.INT16_SIGNED:
                        result = readHoldingRegisters[0];
                        break;

                    case DataTypeEnum.INT16_UNSIGNED:
                        // unsigned
                        for (int i = 0; i < (readHoldingRegisters.Length); 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) - (i + 1)))));
                            result_str = result_str + " 0x" + tmp.ToString("X4");
                        }
                        break;

                    default:
                        result_str = "internal: invalid datatype";
                        break;
                    }

                    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();
                    }
                }
            }
        }
Beispiel #19
0
        public static List <float[, ]> getDataGrafiksOfDevice(int[] sizelog, ModbusClient modbusClient, int startIndex)
        {
            List <float[, ]> ListAllGraphics = new List <float[, ]>();

            for (int i = 0; i < sizelog.Length; i++)//AllLog
            {
                float[,] WorksAndPointsForGraphs = new float[3, sizelog[i]];
                int NumbersRead      = Convert.ToInt32(Math.Ceiling(Convert.ToDouble(sizelog[i]) / 32));
                int CurrentCountRead = 0;
                for (int j = 0; j < NumbersRead; j++)    //dataMomentForLog
                {
                    modbusClient.WriteMultipleRegisters(1059, ModbusClient.ConvertIntToRegisters(j));
                    modbusClient.WriteMultipleRegisters(1060, ModbusClient.ConvertIntToRegisters(i + startIndex));
                    int[] readRegisters = modbusClient.ReadHoldingRegisters(17344, 64);
                    for (int z = 0; z < readRegisters.Length; z = z + 2)
                    {
                        WorksAndPointsForGraphs[0, CurrentCountRead] = ModbusClient.ConvertRegistersToFloat(new int[2] {
                            readRegisters[z], readRegisters[z + 1]
                        });
                        CurrentCountRead++;
                        if (CurrentCountRead >= sizelog[i])
                        {
                            break;
                        }
                    }
                }
                CurrentCountRead = 0;
                for (int j = 42; j < 42 + NumbersRead; j++)    //dataRevolutionsForLog
                {
                    modbusClient.WriteMultipleRegisters(1059, ModbusClient.ConvertIntToRegisters(j));
                    modbusClient.WriteMultipleRegisters(1060, ModbusClient.ConvertIntToRegisters(i + startIndex));
                    int[] readRegisters = modbusClient.ReadHoldingRegisters(17344, 64);
                    for (int z = 0; z < readRegisters.Length; z = z + 2)
                    {
                        WorksAndPointsForGraphs[1, CurrentCountRead] = ModbusClient.ConvertRegistersToFloat(new int[2] {
                            readRegisters[z], readRegisters[z + 1]
                        });
                        CurrentCountRead++;
                        if (CurrentCountRead == sizelog[i])
                        {
                            break;
                        }
                    }
                }
                CurrentCountRead = 0;
                for (int j = 84; j < 84 + NumbersRead; j++)//dataTimeForLog
                {
                    modbusClient.WriteMultipleRegisters(1059, ModbusClient.ConvertIntToRegisters(j));
                    modbusClient.WriteMultipleRegisters(1060, ModbusClient.ConvertIntToRegisters(i + startIndex));
                    int[] readRegisters = modbusClient.ReadHoldingRegisters(17344, 64);
                    for (int z = 0; z < readRegisters.Length; z = z + 2)
                    {
                        WorksAndPointsForGraphs[2, CurrentCountRead] = ModbusClient.ConvertRegistersToFloat(new int[2] {
                            readRegisters[z], readRegisters[z + 1]
                        });
                        CurrentCountRead++;
                        if (CurrentCountRead == sizelog[i])
                        {
                            break;
                        }
                    }
                }
                AdapterDataBase.writeDataLogDB(WorksAndPointsForGraphs, i + startIndex);
                ListAllGraphics.Add(WorksAndPointsForGraphs);
                Viewer.setProgressBar(i);
            }
            return(ListAllGraphics);
        }