public float ReadFloatFromRegisters(int startingAddress) { modbusClient.Connect(); int[] byteArray = modbusClient.ReadHoldingRegisters(startingAddress, 2); modbusClient.Disconnect(); return(ModbusClient.ConvertRegistersToFloat(byteArray)); }
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); } }
// 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(); })); }
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(); }
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); } }
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); } }
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); } }
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); } }); }
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); }
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"); } }
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); }
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"; } } }
///تایمر مربوط به خواندن هر دستگاه 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"); } }
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(); } } } }
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); }