diff --git a/SiemensS7/Siemens-S7-Test/BinaryFormatter.cs b/SiemensS7/Siemens-S7-Test/BinaryFormat.cs similarity index 98% rename from SiemensS7/Siemens-S7-Test/BinaryFormatter.cs rename to SiemensS7/Siemens-S7-Test/BinaryFormat.cs index 1a878e2..25dc336 100644 --- a/SiemensS7/Siemens-S7-Test/BinaryFormatter.cs +++ b/SiemensS7/Siemens-S7-Test/BinaryFormat.cs @@ -5,7 +5,7 @@ using System.Numerics; namespace Siemens_S7_Test { - public class BinaryFormatter : IFormatProvider, ICustomFormatter + public class BinaryFormat : IFormatProvider, ICustomFormatter { // IFormatProvider.GetFormat implementation. public object GetFormat(Type formatType) diff --git a/SiemensS7/Siemens-S7-Test/Siemens-S7-Test.csproj b/SiemensS7/Siemens-S7-Test/Siemens-S7-Test.csproj index a827a29..30c9ebe 100644 --- a/SiemensS7/Siemens-S7-Test/Siemens-S7-Test.csproj +++ b/SiemensS7/Siemens-S7-Test/Siemens-S7-Test.csproj @@ -58,7 +58,7 @@ - + diff --git a/SiemensS7/Siemens-S7-Test/TestMainForm.Designer.cs b/SiemensS7/Siemens-S7-Test/TestMainForm.Designer.cs index b90039f..1c936e2 100644 --- a/SiemensS7/Siemens-S7-Test/TestMainForm.Designer.cs +++ b/SiemensS7/Siemens-S7-Test/TestMainForm.Designer.cs @@ -37,6 +37,8 @@ this.label3 = new System.Windows.Forms.Label(); this.txtMemSize = new System.Windows.Forms.TextBox(); this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.txtNumRep = new System.Windows.Forms.TextBox(); + this.label13 = new System.Windows.Forms.Label(); this.btnReadStruct = new System.Windows.Forms.Button(); this.btnReadString = new System.Windows.Forms.Button(); this.btnReadDWord = new System.Windows.Forms.Button(); @@ -44,6 +46,7 @@ this.btnReadReal = new System.Windows.Forms.Button(); this.btnReadByte = new System.Windows.Forms.Button(); this.groupBox3 = new System.Windows.Forms.GroupBox(); + this.label11 = new System.Windows.Forms.Label(); this.label6 = new System.Windows.Forms.Label(); this.txtSlot = new System.Windows.Forms.TextBox(); this.label5 = new System.Windows.Forms.Label(); @@ -71,22 +74,20 @@ this.groupBox2 = new System.Windows.Forms.GroupBox(); this.tabCtrl = new System.Windows.Forms.TabControl(); this.tabReadTest = new System.Windows.Forms.TabPage(); - this.tabParam = new System.Windows.Forms.TabPage(); this.tabWriteTest = new System.Windows.Forms.TabPage(); + this.tabParam = new System.Windows.Forms.TabPage(); this.splitContainer1 = new System.Windows.Forms.SplitContainer(); - this.label11 = new System.Windows.Forms.Label(); - this.txtNumRep = new System.Windows.Forms.TextBox(); - this.label13 = new System.Windows.Forms.Label(); - this.label12 = new System.Windows.Forms.Label(); - this.label14 = new System.Windows.Forms.Label(); - this.label15 = new System.Windows.Forms.Label(); - this.label16 = new System.Windows.Forms.Label(); - this.lblTimeAvg = new System.Windows.Forms.Label(); - this.lblTimeMax = new System.Windows.Forms.Label(); - this.lblTimeMin = new System.Windows.Forms.Label(); - this.lblTotSize = new System.Windows.Forms.Label(); this.lblThroughtput = new System.Windows.Forms.Label(); this.label18 = new System.Windows.Forms.Label(); + this.lblTotSize = new System.Windows.Forms.Label(); + this.lblTimeMin = new System.Windows.Forms.Label(); + this.lblTimeMax = new System.Windows.Forms.Label(); + this.lblTimeAvg = new System.Windows.Forms.Label(); + this.label16 = new System.Windows.Forms.Label(); + this.label15 = new System.Windows.Forms.Label(); + this.label14 = new System.Windows.Forms.Label(); + this.label12 = new System.Windows.Forms.Label(); + this.cmbOutType = new System.Windows.Forms.ComboBox(); this.groupBox1.SuspendLayout(); this.groupBox3.SuspendLayout(); this.statusStrip1.SuspendLayout(); @@ -94,8 +95,8 @@ this.groupBox2.SuspendLayout(); this.tabCtrl.SuspendLayout(); this.tabReadTest.SuspendLayout(); - this.tabParam.SuspendLayout(); this.tabWriteTest.SuspendLayout(); + this.tabParam.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit(); this.splitContainer1.Panel1.SuspendLayout(); this.splitContainer1.Panel2.SuspendLayout(); @@ -189,6 +190,7 @@ // // groupBox1 // + this.groupBox1.Controls.Add(this.cmbOutType); this.groupBox1.Controls.Add(this.txtNumRep); this.groupBox1.Controls.Add(this.label13); this.groupBox1.Controls.Add(this.btnReadStruct); @@ -205,11 +207,30 @@ this.groupBox1.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); this.groupBox1.Name = "groupBox1"; this.groupBox1.Padding = new System.Windows.Forms.Padding(3, 2, 3, 2); - this.groupBox1.Size = new System.Drawing.Size(521, 105); + this.groupBox1.Size = new System.Drawing.Size(672, 105); this.groupBox1.TabIndex = 8; this.groupBox1.TabStop = false; this.groupBox1.Text = "Memoria: READ testing"; // + // txtNumRep + // + this.txtNumRep.Location = new System.Drawing.Point(148, 76); + this.txtNumRep.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); + this.txtNumRep.Name = "txtNumRep"; + this.txtNumRep.Size = new System.Drawing.Size(101, 22); + this.txtNumRep.TabIndex = 14; + this.txtNumRep.Text = "1"; + this.txtNumRep.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; + // + // label13 + // + this.label13.AutoSize = true; + this.label13.Location = new System.Drawing.Point(9, 79); + this.label13.Name = "label13"; + this.label13.Size = new System.Drawing.Size(72, 17); + this.label13.TabIndex = 15; + this.label13.Text = "# samples"; + // // btnReadStruct // this.btnReadStruct.Location = new System.Drawing.Point(405, 75); @@ -299,6 +320,15 @@ this.groupBox3.TabStop = false; this.groupBox3.Text = "Parametri PLC"; // + // label11 + // + this.label11.AutoSize = true; + this.label11.Location = new System.Drawing.Point(301, 39); + this.label11.Name = "label11"; + this.label11.Size = new System.Drawing.Size(148, 51); + this.label11.TabIndex = 7; + this.label11.Text = "S7-1200/S7-1500: 0/1\r\nS7-300/S7-400: 0/2\r\nSlot > 0 se eth ext"; + // // label6 // this.label6.AutoSize = true; @@ -581,27 +611,27 @@ this.tabReadTest.Text = "Read Test"; this.tabReadTest.UseVisualStyleBackColor = true; // + // tabWriteTest + // + this.tabWriteTest.Controls.Add(this.groupBox4); + this.tabWriteTest.Location = new System.Drawing.Point(4, 25); + this.tabWriteTest.Name = "tabWriteTest"; + this.tabWriteTest.Size = new System.Drawing.Size(871, 114); + this.tabWriteTest.TabIndex = 2; + this.tabWriteTest.Text = "Write Test"; + this.tabWriteTest.UseVisualStyleBackColor = true; + // // tabParam // this.tabParam.Controls.Add(this.groupBox3); this.tabParam.Location = new System.Drawing.Point(4, 25); this.tabParam.Name = "tabParam"; this.tabParam.Padding = new System.Windows.Forms.Padding(3); - this.tabParam.Size = new System.Drawing.Size(878, 118); + this.tabParam.Size = new System.Drawing.Size(871, 114); this.tabParam.TabIndex = 1; this.tabParam.Text = "Parametri"; this.tabParam.UseVisualStyleBackColor = true; // - // tabWriteTest - // - this.tabWriteTest.Controls.Add(this.groupBox4); - this.tabWriteTest.Location = new System.Drawing.Point(4, 25); - this.tabWriteTest.Name = "tabWriteTest"; - this.tabWriteTest.Size = new System.Drawing.Size(878, 118); - this.tabWriteTest.TabIndex = 2; - this.tabWriteTest.Text = "Write Test"; - this.tabWriteTest.UseVisualStyleBackColor = true; - // // splitContainer1 // this.splitContainer1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) @@ -630,70 +660,56 @@ this.splitContainer1.SplitterDistance = 291; this.splitContainer1.TabIndex = 15; // - // label11 + // lblThroughtput // - this.label11.AutoSize = true; - this.label11.Location = new System.Drawing.Point(301, 39); - this.label11.Name = "label11"; - this.label11.Size = new System.Drawing.Size(148, 51); - this.label11.TabIndex = 7; - this.label11.Text = "S7-1200/S7-1500: 0/1\r\nS7-300/S7-400: 0/2\r\nSlot > 0 se eth ext"; + this.lblThroughtput.AutoSize = true; + this.lblThroughtput.Font = new System.Drawing.Font("Microsoft Sans Serif", 7.8F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.lblThroughtput.Location = new System.Drawing.Point(224, 105); + this.lblThroughtput.Name = "lblThroughtput"; + this.lblThroughtput.Size = new System.Drawing.Size(35, 17); + this.lblThroughtput.TabIndex = 9; + this.lblThroughtput.Text = "000"; + this.lblThroughtput.TextAlign = System.Drawing.ContentAlignment.TopRight; // - // txtNumRep + // label18 // - this.txtNumRep.Location = new System.Drawing.Point(148, 76); - this.txtNumRep.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); - this.txtNumRep.Name = "txtNumRep"; - this.txtNumRep.Size = new System.Drawing.Size(101, 22); - this.txtNumRep.TabIndex = 14; - this.txtNumRep.Text = "1"; - this.txtNumRep.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; + this.label18.AutoSize = true; + this.label18.Font = new System.Drawing.Font("Microsoft Sans Serif", 7.8F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label18.Location = new System.Drawing.Point(19, 105); + this.label18.Name = "label18"; + this.label18.Size = new System.Drawing.Size(57, 17); + this.label18.TabIndex = 8; + this.label18.Text = "Kb/sec"; // - // label13 + // lblTotSize // - this.label13.AutoSize = true; - this.label13.Location = new System.Drawing.Point(9, 79); - this.label13.Name = "label13"; - this.label13.Size = new System.Drawing.Size(90, 21); - this.label13.TabIndex = 15; - this.label13.Text = "# samples"; + this.lblTotSize.AutoSize = true; + this.lblTotSize.Location = new System.Drawing.Point(227, 20); + this.lblTotSize.Name = "lblTotSize"; + this.lblTotSize.Size = new System.Drawing.Size(32, 17); + this.lblTotSize.TabIndex = 7; + this.lblTotSize.Text = "000"; + this.lblTotSize.TextAlign = System.Drawing.ContentAlignment.TopRight; // - // label12 + // lblTimeMin // - this.label12.AutoSize = true; - this.label12.Location = new System.Drawing.Point(19, 20); - this.label12.Name = "label12"; - this.label12.Size = new System.Drawing.Size(58, 17); - this.label12.TabIndex = 0; - this.label12.Text = "Tot size"; + this.lblTimeMin.AutoSize = true; + this.lblTimeMin.Location = new System.Drawing.Point(227, 41); + this.lblTimeMin.Name = "lblTimeMin"; + this.lblTimeMin.Size = new System.Drawing.Size(32, 17); + this.lblTimeMin.TabIndex = 6; + this.lblTimeMin.Text = "000"; + this.lblTimeMin.TextAlign = System.Drawing.ContentAlignment.TopRight; // - // label14 + // lblTimeMax // - this.label14.AutoSize = true; - this.label14.Location = new System.Drawing.Point(19, 41); - this.label14.Name = "label14"; - this.label14.Size = new System.Drawing.Size(70, 17); - this.label14.TabIndex = 1; - this.label14.Text = "TIME: min"; - // - // label15 - // - this.label15.AutoSize = true; - this.label15.Location = new System.Drawing.Point(19, 75); - this.label15.Name = "label15"; - this.label15.Size = new System.Drawing.Size(73, 17); - this.label15.TabIndex = 2; - this.label15.Text = "TIME: max"; - // - // label16 - // - this.label16.AutoSize = true; - this.label16.Font = new System.Drawing.Font("Microsoft Sans Serif", 7.8F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.label16.Location = new System.Drawing.Point(19, 58); - this.label16.Name = "label16"; - this.label16.Size = new System.Drawing.Size(80, 17); - this.label16.TabIndex = 3; - this.label16.Text = "TIME: avg"; + this.lblTimeMax.AutoSize = true; + this.lblTimeMax.Location = new System.Drawing.Point(227, 75); + this.lblTimeMax.Name = "lblTimeMax"; + this.lblTimeMax.Size = new System.Drawing.Size(32, 17); + this.lblTimeMax.TabIndex = 5; + this.lblTimeMax.Text = "000"; + this.lblTimeMax.TextAlign = System.Drawing.ContentAlignment.TopRight; // // lblTimeAvg // @@ -706,56 +722,58 @@ this.lblTimeAvg.Text = "000"; this.lblTimeAvg.TextAlign = System.Drawing.ContentAlignment.TopRight; // - // lblTimeMax + // label16 // - this.lblTimeMax.AutoSize = true; - this.lblTimeMax.Location = new System.Drawing.Point(227, 75); - this.lblTimeMax.Name = "lblTimeMax"; - this.lblTimeMax.Size = new System.Drawing.Size(32, 17); - this.lblTimeMax.TabIndex = 5; - this.lblTimeMax.Text = "000"; - this.lblTimeMax.TextAlign = System.Drawing.ContentAlignment.TopRight; + this.label16.AutoSize = true; + this.label16.Font = new System.Drawing.Font("Microsoft Sans Serif", 7.8F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label16.Location = new System.Drawing.Point(19, 58); + this.label16.Name = "label16"; + this.label16.Size = new System.Drawing.Size(80, 17); + this.label16.TabIndex = 3; + this.label16.Text = "TIME: avg"; // - // lblTimeMin + // label15 // - this.lblTimeMin.AutoSize = true; - this.lblTimeMin.Location = new System.Drawing.Point(227, 41); - this.lblTimeMin.Name = "lblTimeMin"; - this.lblTimeMin.Size = new System.Drawing.Size(32, 17); - this.lblTimeMin.TabIndex = 6; - this.lblTimeMin.Text = "000"; - this.lblTimeMin.TextAlign = System.Drawing.ContentAlignment.TopRight; + this.label15.AutoSize = true; + this.label15.Location = new System.Drawing.Point(19, 75); + this.label15.Name = "label15"; + this.label15.Size = new System.Drawing.Size(73, 17); + this.label15.TabIndex = 2; + this.label15.Text = "TIME: max"; // - // lblTotSize + // label14 // - this.lblTotSize.AutoSize = true; - this.lblTotSize.Location = new System.Drawing.Point(227, 20); - this.lblTotSize.Name = "lblTotSize"; - this.lblTotSize.Size = new System.Drawing.Size(32, 17); - this.lblTotSize.TabIndex = 7; - this.lblTotSize.Text = "000"; - this.lblTotSize.TextAlign = System.Drawing.ContentAlignment.TopRight; + this.label14.AutoSize = true; + this.label14.Location = new System.Drawing.Point(19, 41); + this.label14.Name = "label14"; + this.label14.Size = new System.Drawing.Size(70, 17); + this.label14.TabIndex = 1; + this.label14.Text = "TIME: min"; // - // lblThroughtput + // label12 // - this.lblThroughtput.AutoSize = true; - this.lblThroughtput.Font = new System.Drawing.Font("Microsoft Sans Serif", 7.8F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.lblThroughtput.Location = new System.Drawing.Point(224, 126); - this.lblThroughtput.Name = "lblThroughtput"; - this.lblThroughtput.Size = new System.Drawing.Size(35, 17); - this.lblThroughtput.TabIndex = 9; - this.lblThroughtput.Text = "000"; - this.lblThroughtput.TextAlign = System.Drawing.ContentAlignment.TopRight; + this.label12.AutoSize = true; + this.label12.Location = new System.Drawing.Point(19, 20); + this.label12.Name = "label12"; + this.label12.Size = new System.Drawing.Size(58, 17); + this.label12.TabIndex = 0; + this.label12.Text = "Tot size"; // - // label18 + // cmbOutType // - this.label18.AutoSize = true; - this.label18.Font = new System.Drawing.Font("Microsoft Sans Serif", 7.8F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.label18.Location = new System.Drawing.Point(19, 126); - this.label18.Name = "label18"; - this.label18.Size = new System.Drawing.Size(71, 21); - this.label18.TabIndex = 8; - this.label18.Text = "Kb/sec"; + this.cmbOutType.FormattingEnabled = true; + this.cmbOutType.Items.AddRange(new object[] { + "byte", + "word", + "dword", + "real", + "struct"}); + this.cmbOutType.Location = new System.Drawing.Point(522, 23); + this.cmbOutType.Name = "cmbOutType"; + this.cmbOutType.Size = new System.Drawing.Size(121, 24); + this.cmbOutType.TabIndex = 16; + this.cmbOutType.Text = "byte"; + this.cmbOutType.SelectedIndexChanged += new System.EventHandler(this.cmbOutType_SelectedIndexChanged); // // TestMainForm // @@ -780,8 +798,8 @@ this.groupBox2.PerformLayout(); this.tabCtrl.ResumeLayout(false); this.tabReadTest.ResumeLayout(false); - this.tabParam.ResumeLayout(false); this.tabWriteTest.ResumeLayout(false); + this.tabParam.ResumeLayout(false); this.splitContainer1.Panel1.ResumeLayout(false); this.splitContainer1.Panel1.PerformLayout(); this.splitContainer1.Panel2.ResumeLayout(false); @@ -854,6 +872,7 @@ private System.Windows.Forms.Label label12; private System.Windows.Forms.Label lblThroughtput; private System.Windows.Forms.Label label18; + private System.Windows.Forms.ComboBox cmbOutType; } } diff --git a/SiemensS7/Siemens-S7-Test/TestMainForm.cs b/SiemensS7/Siemens-S7-Test/TestMainForm.cs index bace481..3ce123d 100644 --- a/SiemensS7/Siemens-S7-Test/TestMainForm.cs +++ b/SiemensS7/Siemens-S7-Test/TestMainForm.cs @@ -12,6 +12,8 @@ using System.Net.NetworkInformation; using System.Net; using NLog; using System.Diagnostics; +using System.Runtime.Serialization; +using System.Runtime.Serialization.Formatters.Binary; namespace Siemens_S7_Test { @@ -65,6 +67,10 @@ namespace Siemens_S7_Test /// Gestione statistiche /// public TimingData PerfStats; + /// + /// Array oggetti letti + /// + protected Byte[] memByteRead = new byte[0]; public TestMainForm() { @@ -178,7 +184,6 @@ namespace Siemens_S7_Test int.TryParse(txtMemSize.Text, out numByte); int numTest = 1; int.TryParse(txtNumRep.Text, out numTest); - Byte[] memByteRead = new byte[0]; // effettuo numero di test secondo indicazioni... for (int i = 0; i < numTest; i++) { @@ -197,6 +202,8 @@ namespace Siemens_S7_Test titolo = string.Format("READ BLOCK MEM BYTE: {0} --> {1} byte", txtMemArea.Text, numByte); contenuto = ""; string byteVal = ""; + // verifico se mostrare dati in modalità struct o meno... + for (int i = 0; i < memByteRead.Length; i++) { byteVal = Convert.ToString(memByteRead[i], 2).PadLeft(8, '0'); @@ -219,7 +226,6 @@ namespace Siemens_S7_Test int.TryParse(txtMemSize.Text, out numByte); int numTest = 1; int.TryParse(txtNumRep.Text, out numTest); - Byte[] memByteRead = new byte[0]; // effettuo numero di test secondo indicazioni... for (int i = 0; i < numTest; i++) { @@ -265,7 +271,6 @@ namespace Siemens_S7_Test int.TryParse(txtMemSize.Text, out numByte); int numTest = 1; int.TryParse(txtNumRep.Text, out numTest); - Byte[] memByteRead = new byte[0]; for (int i = 0; i < numTest; i++) { sw.Restart(); @@ -318,7 +323,7 @@ namespace Siemens_S7_Test List ElencoParametri = new List(); for (int i = 0; i < numPar; i++) { - objPar = (ThermoParam)currPLC.ReadStruct(600, i * 20); + objPar = (ThermoParam)currPLC.ReadClass(600, i * 20); ElencoParametri.Add(objPar); } sw.Stop(); @@ -525,25 +530,95 @@ namespace Siemens_S7_Test string answ = ""; try { - answ = string.Format(new BinaryFormatter(), "{0:B}", valore); + answ = string.Format(new BinaryFormat(), "{0:B}", valore); } catch { } return answ; } - + /// + /// aggiorna display in base a selezione tipo output... + /// + /// + /// protected void showOut(string title, string content) { + // verifico combo e formatto... + contenuto = ""; + string byteVal = ""; + ushort shortVal = 0; + uint intVal = 0; + string byteValA = ""; + string byteValB = ""; + string byteValC = ""; + string byteValD = ""; + // verifico come mostrare dati (byte, word, struct ...) + switch (cmbOutType.SelectedItem) + { + case "word": + for (int i = 0; i < memByteRead.Length / 2; i++) + { + byteValA = Convert.ToString(memByteRead[i * 2], 2).PadLeft(8, '0'); + byteValB = Convert.ToString(memByteRead[i * 2 + 1], 2).PadLeft(8, '0'); + shortVal = S7.Net.Types.Word.FromByteArray(memByteRead.Skip(2 * i).Take(2).ToArray()); + contenuto += string.Format("W{0:000}: {1} | {2}-{3}{4}", i, shortVal, byteValA, byteValB, Environment.NewLine); + } + break; + case "dword": + for (int i = 0; i < memByteRead.Length / 4; i++) + { + byteValA = Convert.ToString(memByteRead[i * 4], 2).PadLeft(8, '0'); + byteValB = Convert.ToString(memByteRead[i * 4 + 1], 2).PadLeft(8, '0'); + byteValC = Convert.ToString(memByteRead[i * 4 + 2], 2).PadLeft(8, '0'); + byteValD = Convert.ToString(memByteRead[i * 4 + 3], 2).PadLeft(8, '0'); + intVal = S7.Net.Types.DWord.FromByteArray(memByteRead.Skip(4 * i).Take(4).ToArray()); + contenuto += string.Format("W{0:000}: {1} | {2}-{3}-{4}-{5}{6}", i, intVal, byteValA, byteValB, byteValC, byteValD, Environment.NewLine); + } + break; + case "struct": + ThermoParam objPar = new ThermoParam(); + List ElencoParametri = new List(); + IFormatter formatter = new BinaryFormatter(); + // procedo 20 byte alla volta... + for (int i = 0; i < memByteRead.Length / 20; i++) + { + objPar = SerDeserExtensions.Deserializer(memByteRead.Skip(20 * i).Take(20).ToArray()); + ElencoParametri.Add(objPar); + } + foreach (var item in ElencoParametri) + { + contenuto += $"Id: {item.Id}{Environment.NewLine}"; + contenuto += $"SetpointHMI: {item.SetpointHMI}{Environment.NewLine}"; + contenuto += $"SetpointPLC: {item.SetpointPLC}{Environment.NewLine}"; + contenuto += $"ValMin: {item.ValMin}{Environment.NewLine}"; + contenuto += $"ValMax: {item.ValMax}{Environment.NewLine}"; + contenuto += $"UnitMeasure: {item.UnitMeasure}{Environment.NewLine}"; + contenuto += $"---------{Environment.NewLine}"; + } + break; + case "byte": + default: + for (int i = 0; i < memByteRead.Length; i++) + { + byteVal = Convert.ToString(memByteRead[i], 2).PadLeft(8, '0'); + contenuto += string.Format("B{0:000}: {1} | {2}{3}", i, byteVal, memByteRead[i], Environment.NewLine); + } + break; + } + + + + string outText = ""; // a video outText += string.Format("{0}--------------------------------------------------------------------------------------{0}", Environment.NewLine); - outText += string.Format("- {0}{1}", title, Environment.NewLine); + outText += string.Format("- {0}{1}", titolo, Environment.NewLine); outText += string.Format("--------------------------------------------------------------------------------------{0}", Environment.NewLine); - outText += string.Format("{0}{1}", content, Environment.NewLine); + outText += string.Format("{0}{1}", contenuto, Environment.NewLine); outText += string.Format("--------------------------------------------------------------------------------------{0}{0}", Environment.NewLine); // aggiorno visualizzazione - txtOut.Text += outText; + txtOut.Text = outText; // loggo! lg.Info(outText); } @@ -778,6 +853,11 @@ namespace Siemens_S7_Test setParamPlc(); eseguiLetturaStruct(); } + + private void cmbOutType_SelectedIndexChanged(object sender, EventArgs e) + { + showOut("", ""); + } } } diff --git a/SiemensS7/Siemens-S7-Test/ThermoObj.cs b/SiemensS7/Siemens-S7-Test/ThermoObj.cs index 9cfd055..600a505 100644 --- a/SiemensS7/Siemens-S7-Test/ThermoObj.cs +++ b/SiemensS7/Siemens-S7-Test/ThermoObj.cs @@ -1,12 +1,16 @@ using System; using System.Collections.Generic; +using System.IO; using System.Linq; +using System.Runtime.Serialization; +using System.Runtime.Serialization.Formatters.Binary; using System.Text; using System.Threading.Tasks; namespace Siemens_S7_Test { - public struct ThermoParam + [Serializable] + public class ThermoParam { public ushort Id; public UInt32 SetpointHMI; @@ -16,25 +20,40 @@ namespace Siemens_S7_Test public ushort UnitMeasure; } - public class ParamsList + + //public T Deserialize(byte[] param) + //{ + // using (MemoryStream ms = new MemoryStream(param)) + // { + // IFormatter br = new BinaryFormatter(); + // return (T)br.Deserialize(ms); + // } + //} + + public static class SerDeserExtensions { - public ThermoParam par_000 { get; set; } - public ThermoParam par_001 { get; set; } - public ThermoParam par_002 { get; set; } - //public List Elenco { get; set; } - //public ParamsList() - //{ - // Elenco = new List(); - // ThermoParam currParam = new ThermoParam(); - // // inizializzo subito coi valori... - // for (ushort i = 0; i < 2; i++) - // { - // currParam = new ThermoParam() - // { - // Id = i - // }; - // Elenco.Add(currParam); - // } - //} + public static byte[] Serializer(this object _object) + { + byte[] bytes; + using (var _MemoryStream = new MemoryStream()) + { + IFormatter _BinaryFormatter = new BinaryFormatter(); + _BinaryFormatter.Serialize(_MemoryStream, _object); + bytes = _MemoryStream.ToArray(); + } + return bytes; + } + + public static T Deserializer(this byte[] _byteArray) + { + T ReturnValue; + using (var _MemoryStream = new MemoryStream(_byteArray)) + { + IFormatter _BinaryFormatter = new BinaryFormatter(); + ReturnValue = (T)_BinaryFormatter.Deserialize(_MemoryStream); + } + return ReturnValue; + } } + }