better connection controls
This commit is contained in:
247
Form1.Designer.cs
generated
247
Form1.Designer.cs
generated
@@ -30,6 +30,12 @@
|
|||||||
{
|
{
|
||||||
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(App));
|
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(App));
|
||||||
this.groupBox1 = new System.Windows.Forms.GroupBox();
|
this.groupBox1 = new System.Windows.Forms.GroupBox();
|
||||||
|
this.panel8 = new System.Windows.Forms.Panel();
|
||||||
|
this.CBox_DataBits = new System.Windows.Forms.ComboBox();
|
||||||
|
this.label8 = new System.Windows.Forms.Label();
|
||||||
|
this.panel7 = new System.Windows.Forms.Panel();
|
||||||
|
this.CBox_BaudRate = new System.Windows.Forms.ComboBox();
|
||||||
|
this.label7 = new System.Windows.Forms.Label();
|
||||||
this.ButtonConnect = new System.Windows.Forms.Button();
|
this.ButtonConnect = new System.Windows.Forms.Button();
|
||||||
this.panel2 = new System.Windows.Forms.Panel();
|
this.panel2 = new System.Windows.Forms.Panel();
|
||||||
this.UpDown_ModbusID = new System.Windows.Forms.NumericUpDown();
|
this.UpDown_ModbusID = new System.Windows.Forms.NumericUpDown();
|
||||||
@@ -39,6 +45,9 @@
|
|||||||
this.label1 = new System.Windows.Forms.Label();
|
this.label1 = new System.Windows.Forms.Label();
|
||||||
this.TextBox_Log = new System.Windows.Forms.TextBox();
|
this.TextBox_Log = new System.Windows.Forms.TextBox();
|
||||||
this.groupBox2 = new System.Windows.Forms.GroupBox();
|
this.groupBox2 = new System.Windows.Forms.GroupBox();
|
||||||
|
this.panel6 = new System.Windows.Forms.Panel();
|
||||||
|
this.UpDown_Value = new System.Windows.Forms.NumericUpDown();
|
||||||
|
this.label6 = new System.Windows.Forms.Label();
|
||||||
this.panel5 = new System.Windows.Forms.Panel();
|
this.panel5 = new System.Windows.Forms.Panel();
|
||||||
this.UpDown_RegLength = new System.Windows.Forms.NumericUpDown();
|
this.UpDown_RegLength = new System.Windows.Forms.NumericUpDown();
|
||||||
this.label5 = new System.Windows.Forms.Label();
|
this.label5 = new System.Windows.Forms.Label();
|
||||||
@@ -49,35 +58,112 @@
|
|||||||
this.panel4 = new System.Windows.Forms.Panel();
|
this.panel4 = new System.Windows.Forms.Panel();
|
||||||
this.CBox_Function = new System.Windows.Forms.ComboBox();
|
this.CBox_Function = new System.Windows.Forms.ComboBox();
|
||||||
this.label4 = new System.Windows.Forms.Label();
|
this.label4 = new System.Windows.Forms.Label();
|
||||||
|
this.panel9 = new System.Windows.Forms.Panel();
|
||||||
|
this.comboBox1 = new System.Windows.Forms.ComboBox();
|
||||||
|
this.label9 = new System.Windows.Forms.Label();
|
||||||
|
this.panel10 = new System.Windows.Forms.Panel();
|
||||||
|
this.CBox_StopBits = new System.Windows.Forms.ComboBox();
|
||||||
|
this.label10 = new System.Windows.Forms.Label();
|
||||||
|
this.panel11 = new System.Windows.Forms.Panel();
|
||||||
|
this.comboBox2 = new System.Windows.Forms.ComboBox();
|
||||||
|
this.label11 = new System.Windows.Forms.Label();
|
||||||
this.groupBox1.SuspendLayout();
|
this.groupBox1.SuspendLayout();
|
||||||
|
this.panel8.SuspendLayout();
|
||||||
|
this.panel7.SuspendLayout();
|
||||||
this.panel2.SuspendLayout();
|
this.panel2.SuspendLayout();
|
||||||
((System.ComponentModel.ISupportInitialize)(this.UpDown_ModbusID)).BeginInit();
|
((System.ComponentModel.ISupportInitialize)(this.UpDown_ModbusID)).BeginInit();
|
||||||
this.panel1.SuspendLayout();
|
this.panel1.SuspendLayout();
|
||||||
this.groupBox2.SuspendLayout();
|
this.groupBox2.SuspendLayout();
|
||||||
|
this.panel6.SuspendLayout();
|
||||||
|
((System.ComponentModel.ISupportInitialize)(this.UpDown_Value)).BeginInit();
|
||||||
this.panel5.SuspendLayout();
|
this.panel5.SuspendLayout();
|
||||||
((System.ComponentModel.ISupportInitialize)(this.UpDown_RegLength)).BeginInit();
|
((System.ComponentModel.ISupportInitialize)(this.UpDown_RegLength)).BeginInit();
|
||||||
this.panel3.SuspendLayout();
|
this.panel3.SuspendLayout();
|
||||||
((System.ComponentModel.ISupportInitialize)(this.UpDown_RegAddress)).BeginInit();
|
((System.ComponentModel.ISupportInitialize)(this.UpDown_RegAddress)).BeginInit();
|
||||||
this.panel4.SuspendLayout();
|
this.panel4.SuspendLayout();
|
||||||
|
this.panel9.SuspendLayout();
|
||||||
|
this.panel10.SuspendLayout();
|
||||||
|
this.panel11.SuspendLayout();
|
||||||
this.SuspendLayout();
|
this.SuspendLayout();
|
||||||
//
|
//
|
||||||
// groupBox1
|
// groupBox1
|
||||||
//
|
//
|
||||||
|
this.groupBox1.Controls.Add(this.panel11);
|
||||||
|
this.groupBox1.Controls.Add(this.panel10);
|
||||||
|
this.groupBox1.Controls.Add(this.panel8);
|
||||||
|
this.groupBox1.Controls.Add(this.panel7);
|
||||||
this.groupBox1.Controls.Add(this.ButtonConnect);
|
this.groupBox1.Controls.Add(this.ButtonConnect);
|
||||||
this.groupBox1.Controls.Add(this.panel2);
|
this.groupBox1.Controls.Add(this.panel2);
|
||||||
this.groupBox1.Controls.Add(this.panel1);
|
this.groupBox1.Controls.Add(this.panel1);
|
||||||
this.groupBox1.Location = new System.Drawing.Point(12, 12);
|
this.groupBox1.Location = new System.Drawing.Point(12, 12);
|
||||||
this.groupBox1.Name = "groupBox1";
|
this.groupBox1.Name = "groupBox1";
|
||||||
this.groupBox1.Size = new System.Drawing.Size(344, 63);
|
this.groupBox1.Size = new System.Drawing.Size(490, 110);
|
||||||
this.groupBox1.TabIndex = 0;
|
this.groupBox1.TabIndex = 0;
|
||||||
this.groupBox1.TabStop = false;
|
this.groupBox1.TabStop = false;
|
||||||
this.groupBox1.Text = "Подключение";
|
this.groupBox1.Text = "Подключение";
|
||||||
//
|
//
|
||||||
|
// panel8
|
||||||
|
//
|
||||||
|
this.panel8.Controls.Add(this.panel9);
|
||||||
|
this.panel8.Controls.Add(this.CBox_DataBits);
|
||||||
|
this.panel8.Controls.Add(this.label8);
|
||||||
|
this.panel8.Location = new System.Drawing.Point(162, 19);
|
||||||
|
this.panel8.Name = "panel8";
|
||||||
|
this.panel8.Size = new System.Drawing.Size(79, 43);
|
||||||
|
this.panel8.TabIndex = 4;
|
||||||
|
//
|
||||||
|
// CBox_DataBits
|
||||||
|
//
|
||||||
|
this.CBox_DataBits.FormattingEnabled = true;
|
||||||
|
this.CBox_DataBits.Location = new System.Drawing.Point(6, 17);
|
||||||
|
this.CBox_DataBits.Name = "CBox_DataBits";
|
||||||
|
this.CBox_DataBits.Size = new System.Drawing.Size(70, 21);
|
||||||
|
this.CBox_DataBits.TabIndex = 2;
|
||||||
|
this.CBox_DataBits.Text = "8";
|
||||||
|
//
|
||||||
|
// label8
|
||||||
|
//
|
||||||
|
this.label8.AutoSize = true;
|
||||||
|
this.label8.Location = new System.Drawing.Point(3, 0);
|
||||||
|
this.label8.Name = "label8";
|
||||||
|
this.label8.Size = new System.Drawing.Size(73, 13);
|
||||||
|
this.label8.TabIndex = 0;
|
||||||
|
this.label8.Text = "Биты данных";
|
||||||
|
//
|
||||||
|
// panel7
|
||||||
|
//
|
||||||
|
this.panel7.Controls.Add(this.CBox_BaudRate);
|
||||||
|
this.panel7.Controls.Add(this.label7);
|
||||||
|
this.panel7.Location = new System.Drawing.Point(81, 19);
|
||||||
|
this.panel7.Name = "panel7";
|
||||||
|
this.panel7.Size = new System.Drawing.Size(75, 43);
|
||||||
|
this.panel7.TabIndex = 3;
|
||||||
|
//
|
||||||
|
// CBox_BaudRate
|
||||||
|
//
|
||||||
|
this.CBox_BaudRate.FormattingEnabled = true;
|
||||||
|
this.CBox_BaudRate.Location = new System.Drawing.Point(6, 17);
|
||||||
|
this.CBox_BaudRate.Name = "CBox_BaudRate";
|
||||||
|
this.CBox_BaudRate.Size = new System.Drawing.Size(65, 21);
|
||||||
|
this.CBox_BaudRate.TabIndex = 2;
|
||||||
|
this.CBox_BaudRate.Text = "9600";
|
||||||
|
//
|
||||||
|
// label7
|
||||||
|
//
|
||||||
|
this.label7.AutoSize = true;
|
||||||
|
this.label7.Location = new System.Drawing.Point(3, 0);
|
||||||
|
this.label7.Name = "label7";
|
||||||
|
this.label7.Size = new System.Drawing.Size(34, 13);
|
||||||
|
this.label7.TabIndex = 0;
|
||||||
|
this.label7.Text = "Боды";
|
||||||
|
//
|
||||||
// ButtonConnect
|
// ButtonConnect
|
||||||
//
|
//
|
||||||
this.ButtonConnect.Location = new System.Drawing.Point(162, 34);
|
this.ButtonConnect.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
|
||||||
|
| System.Windows.Forms.AnchorStyles.Right)));
|
||||||
|
this.ButtonConnect.Location = new System.Drawing.Point(195, 75);
|
||||||
this.ButtonConnect.Name = "ButtonConnect";
|
this.ButtonConnect.Name = "ButtonConnect";
|
||||||
this.ButtonConnect.Size = new System.Drawing.Size(176, 23);
|
this.ButtonConnect.Size = new System.Drawing.Size(100, 25);
|
||||||
this.ButtonConnect.TabIndex = 4;
|
this.ButtonConnect.TabIndex = 4;
|
||||||
this.ButtonConnect.Text = "Подключиться";
|
this.ButtonConnect.Text = "Подключиться";
|
||||||
this.ButtonConnect.UseVisualStyleBackColor = true;
|
this.ButtonConnect.UseVisualStyleBackColor = true;
|
||||||
@@ -87,7 +173,7 @@
|
|||||||
//
|
//
|
||||||
this.panel2.Controls.Add(this.UpDown_ModbusID);
|
this.panel2.Controls.Add(this.UpDown_ModbusID);
|
||||||
this.panel2.Controls.Add(this.label2);
|
this.panel2.Controls.Add(this.label2);
|
||||||
this.panel2.Location = new System.Drawing.Point(81, 19);
|
this.panel2.Location = new System.Drawing.Point(415, 19);
|
||||||
this.panel2.Name = "panel2";
|
this.panel2.Name = "panel2";
|
||||||
this.panel2.Size = new System.Drawing.Size(75, 43);
|
this.panel2.Size = new System.Drawing.Size(75, 43);
|
||||||
this.panel2.TabIndex = 2;
|
this.panel2.TabIndex = 2;
|
||||||
@@ -124,7 +210,7 @@
|
|||||||
this.CBox_Ports.Name = "CBox_Ports";
|
this.CBox_Ports.Name = "CBox_Ports";
|
||||||
this.CBox_Ports.Size = new System.Drawing.Size(65, 21);
|
this.CBox_Ports.Size = new System.Drawing.Size(65, 21);
|
||||||
this.CBox_Ports.TabIndex = 1;
|
this.CBox_Ports.TabIndex = 1;
|
||||||
this.CBox_Ports.Text = "COM 1";
|
this.CBox_Ports.Text = "COM1";
|
||||||
this.CBox_Ports.MouseClick += new System.Windows.Forms.MouseEventHandler(this.CBox_Ports_Click);
|
this.CBox_Ports.MouseClick += new System.Windows.Forms.MouseEventHandler(this.CBox_Ports_Click);
|
||||||
//
|
//
|
||||||
// label1
|
// label1
|
||||||
@@ -138,27 +224,53 @@
|
|||||||
//
|
//
|
||||||
// TextBox_Log
|
// TextBox_Log
|
||||||
//
|
//
|
||||||
this.TextBox_Log.Location = new System.Drawing.Point(12, 82);
|
this.TextBox_Log.Location = new System.Drawing.Point(12, 127);
|
||||||
this.TextBox_Log.Multiline = true;
|
this.TextBox_Log.Multiline = true;
|
||||||
this.TextBox_Log.Name = "TextBox_Log";
|
this.TextBox_Log.Name = "TextBox_Log";
|
||||||
this.TextBox_Log.ReadOnly = true;
|
this.TextBox_Log.ReadOnly = true;
|
||||||
this.TextBox_Log.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;
|
this.TextBox_Log.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;
|
||||||
this.TextBox_Log.Size = new System.Drawing.Size(417, 87);
|
this.TextBox_Log.Size = new System.Drawing.Size(490, 118);
|
||||||
this.TextBox_Log.TabIndex = 1;
|
this.TextBox_Log.TabIndex = 1;
|
||||||
//
|
//
|
||||||
// groupBox2
|
// groupBox2
|
||||||
//
|
//
|
||||||
|
this.groupBox2.Controls.Add(this.panel6);
|
||||||
this.groupBox2.Controls.Add(this.panel5);
|
this.groupBox2.Controls.Add(this.panel5);
|
||||||
this.groupBox2.Controls.Add(this.Button_SendCommand);
|
this.groupBox2.Controls.Add(this.Button_SendCommand);
|
||||||
this.groupBox2.Controls.Add(this.panel3);
|
this.groupBox2.Controls.Add(this.panel3);
|
||||||
this.groupBox2.Controls.Add(this.panel4);
|
this.groupBox2.Controls.Add(this.panel4);
|
||||||
this.groupBox2.Location = new System.Drawing.Point(12, 175);
|
this.groupBox2.Location = new System.Drawing.Point(12, 251);
|
||||||
this.groupBox2.Name = "groupBox2";
|
this.groupBox2.Name = "groupBox2";
|
||||||
this.groupBox2.Size = new System.Drawing.Size(417, 63);
|
this.groupBox2.Size = new System.Drawing.Size(490, 63);
|
||||||
this.groupBox2.TabIndex = 5;
|
this.groupBox2.TabIndex = 5;
|
||||||
this.groupBox2.TabStop = false;
|
this.groupBox2.TabStop = false;
|
||||||
this.groupBox2.Text = "Команды";
|
this.groupBox2.Text = "Команды";
|
||||||
//
|
//
|
||||||
|
// panel6
|
||||||
|
//
|
||||||
|
this.panel6.Controls.Add(this.UpDown_Value);
|
||||||
|
this.panel6.Controls.Add(this.label6);
|
||||||
|
this.panel6.Location = new System.Drawing.Point(337, 20);
|
||||||
|
this.panel6.Name = "panel6";
|
||||||
|
this.panel6.Size = new System.Drawing.Size(75, 43);
|
||||||
|
this.panel6.TabIndex = 4;
|
||||||
|
//
|
||||||
|
// UpDown_Value
|
||||||
|
//
|
||||||
|
this.UpDown_Value.Location = new System.Drawing.Point(6, 17);
|
||||||
|
this.UpDown_Value.Name = "UpDown_Value";
|
||||||
|
this.UpDown_Value.Size = new System.Drawing.Size(66, 20);
|
||||||
|
this.UpDown_Value.TabIndex = 1;
|
||||||
|
//
|
||||||
|
// label6
|
||||||
|
//
|
||||||
|
this.label6.AutoSize = true;
|
||||||
|
this.label6.Location = new System.Drawing.Point(3, 0);
|
||||||
|
this.label6.Name = "label6";
|
||||||
|
this.label6.Size = new System.Drawing.Size(55, 13);
|
||||||
|
this.label6.TabIndex = 0;
|
||||||
|
this.label6.Text = "Значение";
|
||||||
|
//
|
||||||
// panel5
|
// panel5
|
||||||
//
|
//
|
||||||
this.panel5.Controls.Add(this.UpDown_RegLength);
|
this.panel5.Controls.Add(this.UpDown_RegLength);
|
||||||
@@ -186,7 +298,7 @@
|
|||||||
//
|
//
|
||||||
// Button_SendCommand
|
// Button_SendCommand
|
||||||
//
|
//
|
||||||
this.Button_SendCommand.Location = new System.Drawing.Point(337, 35);
|
this.Button_SendCommand.Location = new System.Drawing.Point(415, 35);
|
||||||
this.Button_SendCommand.Name = "Button_SendCommand";
|
this.Button_SendCommand.Name = "Button_SendCommand";
|
||||||
this.Button_SendCommand.Size = new System.Drawing.Size(71, 23);
|
this.Button_SendCommand.Size = new System.Drawing.Size(71, 23);
|
||||||
this.Button_SendCommand.TabIndex = 4;
|
this.Button_SendCommand.TabIndex = 4;
|
||||||
@@ -236,6 +348,7 @@
|
|||||||
this.CBox_Function.Size = new System.Drawing.Size(147, 21);
|
this.CBox_Function.Size = new System.Drawing.Size(147, 21);
|
||||||
this.CBox_Function.TabIndex = 1;
|
this.CBox_Function.TabIndex = 1;
|
||||||
this.CBox_Function.Text = "01 - Read Coil";
|
this.CBox_Function.Text = "01 - Read Coil";
|
||||||
|
this.CBox_Function.SelectedIndexChanged += new System.EventHandler(this.OnSelectedFunctionChanged);
|
||||||
//
|
//
|
||||||
// label4
|
// label4
|
||||||
//
|
//
|
||||||
@@ -246,11 +359,92 @@
|
|||||||
this.label4.TabIndex = 0;
|
this.label4.TabIndex = 0;
|
||||||
this.label4.Text = "Функция";
|
this.label4.Text = "Функция";
|
||||||
//
|
//
|
||||||
|
// panel9
|
||||||
|
//
|
||||||
|
this.panel9.Controls.Add(this.comboBox1);
|
||||||
|
this.panel9.Controls.Add(this.label9);
|
||||||
|
this.panel9.Location = new System.Drawing.Point(82, 0);
|
||||||
|
this.panel9.Name = "panel9";
|
||||||
|
this.panel9.Size = new System.Drawing.Size(79, 43);
|
||||||
|
this.panel9.TabIndex = 5;
|
||||||
|
//
|
||||||
|
// comboBox1
|
||||||
|
//
|
||||||
|
this.comboBox1.FormattingEnabled = true;
|
||||||
|
this.comboBox1.Location = new System.Drawing.Point(6, 17);
|
||||||
|
this.comboBox1.Name = "comboBox1";
|
||||||
|
this.comboBox1.Size = new System.Drawing.Size(70, 21);
|
||||||
|
this.comboBox1.TabIndex = 2;
|
||||||
|
this.comboBox1.Text = "8";
|
||||||
|
//
|
||||||
|
// label9
|
||||||
|
//
|
||||||
|
this.label9.AutoSize = true;
|
||||||
|
this.label9.Location = new System.Drawing.Point(3, 0);
|
||||||
|
this.label9.Name = "label9";
|
||||||
|
this.label9.Size = new System.Drawing.Size(73, 13);
|
||||||
|
this.label9.TabIndex = 0;
|
||||||
|
this.label9.Text = "Биты данных";
|
||||||
|
//
|
||||||
|
// panel10
|
||||||
|
//
|
||||||
|
this.panel10.Controls.Add(this.CBox_StopBits);
|
||||||
|
this.panel10.Controls.Add(this.label10);
|
||||||
|
this.panel10.Location = new System.Drawing.Point(247, 19);
|
||||||
|
this.panel10.Name = "panel10";
|
||||||
|
this.panel10.Size = new System.Drawing.Size(79, 43);
|
||||||
|
this.panel10.TabIndex = 5;
|
||||||
|
//
|
||||||
|
// CBox_StopBits
|
||||||
|
//
|
||||||
|
this.CBox_StopBits.FormattingEnabled = true;
|
||||||
|
this.CBox_StopBits.Location = new System.Drawing.Point(6, 17);
|
||||||
|
this.CBox_StopBits.Name = "CBox_StopBits";
|
||||||
|
this.CBox_StopBits.Size = new System.Drawing.Size(70, 21);
|
||||||
|
this.CBox_StopBits.TabIndex = 2;
|
||||||
|
this.CBox_StopBits.Text = "8";
|
||||||
|
//
|
||||||
|
// label10
|
||||||
|
//
|
||||||
|
this.label10.AutoSize = true;
|
||||||
|
this.label10.Location = new System.Drawing.Point(3, 0);
|
||||||
|
this.label10.Name = "label10";
|
||||||
|
this.label10.Size = new System.Drawing.Size(59, 13);
|
||||||
|
this.label10.TabIndex = 0;
|
||||||
|
this.label10.Text = "Стоп-биты";
|
||||||
|
//
|
||||||
|
// panel11
|
||||||
|
//
|
||||||
|
this.panel11.Controls.Add(this.comboBox2);
|
||||||
|
this.panel11.Controls.Add(this.label11);
|
||||||
|
this.panel11.Location = new System.Drawing.Point(330, 19);
|
||||||
|
this.panel11.Name = "panel11";
|
||||||
|
this.panel11.Size = new System.Drawing.Size(79, 43);
|
||||||
|
this.panel11.TabIndex = 6;
|
||||||
|
//
|
||||||
|
// comboBox2
|
||||||
|
//
|
||||||
|
this.comboBox2.FormattingEnabled = true;
|
||||||
|
this.comboBox2.Location = new System.Drawing.Point(6, 17);
|
||||||
|
this.comboBox2.Name = "comboBox2";
|
||||||
|
this.comboBox2.Size = new System.Drawing.Size(70, 21);
|
||||||
|
this.comboBox2.TabIndex = 2;
|
||||||
|
this.comboBox2.Text = "8";
|
||||||
|
//
|
||||||
|
// label11
|
||||||
|
//
|
||||||
|
this.label11.AutoSize = true;
|
||||||
|
this.label11.Location = new System.Drawing.Point(3, 0);
|
||||||
|
this.label11.Name = "label11";
|
||||||
|
this.label11.Size = new System.Drawing.Size(59, 13);
|
||||||
|
this.label11.TabIndex = 0;
|
||||||
|
this.label11.Text = "Стоп-биты";
|
||||||
|
//
|
||||||
// App
|
// App
|
||||||
//
|
//
|
||||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||||
this.ClientSize = new System.Drawing.Size(432, 242);
|
this.ClientSize = new System.Drawing.Size(514, 326);
|
||||||
this.Controls.Add(this.groupBox2);
|
this.Controls.Add(this.groupBox2);
|
||||||
this.Controls.Add(this.TextBox_Log);
|
this.Controls.Add(this.TextBox_Log);
|
||||||
this.Controls.Add(this.groupBox1);
|
this.Controls.Add(this.groupBox1);
|
||||||
@@ -261,12 +455,19 @@
|
|||||||
this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.App_FormClosed);
|
this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.App_FormClosed);
|
||||||
this.Load += new System.EventHandler(this.Form1_Load);
|
this.Load += new System.EventHandler(this.Form1_Load);
|
||||||
this.groupBox1.ResumeLayout(false);
|
this.groupBox1.ResumeLayout(false);
|
||||||
|
this.panel8.ResumeLayout(false);
|
||||||
|
this.panel8.PerformLayout();
|
||||||
|
this.panel7.ResumeLayout(false);
|
||||||
|
this.panel7.PerformLayout();
|
||||||
this.panel2.ResumeLayout(false);
|
this.panel2.ResumeLayout(false);
|
||||||
this.panel2.PerformLayout();
|
this.panel2.PerformLayout();
|
||||||
((System.ComponentModel.ISupportInitialize)(this.UpDown_ModbusID)).EndInit();
|
((System.ComponentModel.ISupportInitialize)(this.UpDown_ModbusID)).EndInit();
|
||||||
this.panel1.ResumeLayout(false);
|
this.panel1.ResumeLayout(false);
|
||||||
this.panel1.PerformLayout();
|
this.panel1.PerformLayout();
|
||||||
this.groupBox2.ResumeLayout(false);
|
this.groupBox2.ResumeLayout(false);
|
||||||
|
this.panel6.ResumeLayout(false);
|
||||||
|
this.panel6.PerformLayout();
|
||||||
|
((System.ComponentModel.ISupportInitialize)(this.UpDown_Value)).EndInit();
|
||||||
this.panel5.ResumeLayout(false);
|
this.panel5.ResumeLayout(false);
|
||||||
this.panel5.PerformLayout();
|
this.panel5.PerformLayout();
|
||||||
((System.ComponentModel.ISupportInitialize)(this.UpDown_RegLength)).EndInit();
|
((System.ComponentModel.ISupportInitialize)(this.UpDown_RegLength)).EndInit();
|
||||||
@@ -275,6 +476,12 @@
|
|||||||
((System.ComponentModel.ISupportInitialize)(this.UpDown_RegAddress)).EndInit();
|
((System.ComponentModel.ISupportInitialize)(this.UpDown_RegAddress)).EndInit();
|
||||||
this.panel4.ResumeLayout(false);
|
this.panel4.ResumeLayout(false);
|
||||||
this.panel4.PerformLayout();
|
this.panel4.PerformLayout();
|
||||||
|
this.panel9.ResumeLayout(false);
|
||||||
|
this.panel9.PerformLayout();
|
||||||
|
this.panel10.ResumeLayout(false);
|
||||||
|
this.panel10.PerformLayout();
|
||||||
|
this.panel11.ResumeLayout(false);
|
||||||
|
this.panel11.PerformLayout();
|
||||||
this.ResumeLayout(false);
|
this.ResumeLayout(false);
|
||||||
this.PerformLayout();
|
this.PerformLayout();
|
||||||
|
|
||||||
@@ -302,6 +509,24 @@
|
|||||||
private System.Windows.Forms.Panel panel4;
|
private System.Windows.Forms.Panel panel4;
|
||||||
private System.Windows.Forms.ComboBox CBox_Function;
|
private System.Windows.Forms.ComboBox CBox_Function;
|
||||||
private System.Windows.Forms.Label label4;
|
private System.Windows.Forms.Label label4;
|
||||||
|
private System.Windows.Forms.Panel panel6;
|
||||||
|
private System.Windows.Forms.NumericUpDown UpDown_Value;
|
||||||
|
private System.Windows.Forms.Label label6;
|
||||||
|
private System.Windows.Forms.Panel panel7;
|
||||||
|
private System.Windows.Forms.ComboBox CBox_BaudRate;
|
||||||
|
private System.Windows.Forms.Label label7;
|
||||||
|
private System.Windows.Forms.Panel panel8;
|
||||||
|
private System.Windows.Forms.ComboBox CBox_DataBits;
|
||||||
|
private System.Windows.Forms.Label label8;
|
||||||
|
private System.Windows.Forms.Panel panel10;
|
||||||
|
private System.Windows.Forms.ComboBox CBox_StopBits;
|
||||||
|
private System.Windows.Forms.Label label10;
|
||||||
|
private System.Windows.Forms.Panel panel9;
|
||||||
|
private System.Windows.Forms.ComboBox comboBox1;
|
||||||
|
private System.Windows.Forms.Label label9;
|
||||||
|
private System.Windows.Forms.Panel panel11;
|
||||||
|
private System.Windows.Forms.ComboBox comboBox2;
|
||||||
|
private System.Windows.Forms.Label label11;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
221
Form1.cs
221
Form1.cs
@@ -12,18 +12,28 @@ using System.Drawing.Drawing2D;
|
|||||||
using System.Threading;
|
using System.Threading;
|
||||||
using System.Runtime;
|
using System.Runtime;
|
||||||
using System.Web;
|
using System.Web;
|
||||||
|
using System.Windows.Forms.Automation;
|
||||||
|
using System.Diagnostics;
|
||||||
|
|
||||||
namespace Gidrolock_Modbus_Scanner
|
namespace Gidrolock_Modbus_Scanner
|
||||||
{
|
{
|
||||||
public partial class App : Form
|
public partial class App : Form
|
||||||
{
|
{
|
||||||
|
public static int[] BaudRate = new int[]
|
||||||
|
{
|
||||||
|
110, 300, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 38400, 57600, 76800, 115200, 230300, 460800, 921600
|
||||||
|
};
|
||||||
|
public static int[] DataBits = new int[] { 7, 8 };
|
||||||
|
|
||||||
int offset = 0;
|
int offset = 0;
|
||||||
byte[] data = new byte[255];
|
byte[] message = new byte[255];
|
||||||
public bool isAwaitingResponse = false;
|
public bool isAwaitingResponse = false;
|
||||||
|
public bool isProcessingResponse = false;
|
||||||
public short[] res = new short[12];
|
public short[] res = new short[12];
|
||||||
public SerialPort port = new SerialPort();
|
public SerialPort port = new SerialPort();
|
||||||
public int expectedLength = 0;
|
public int expectedLength = 0;
|
||||||
|
|
||||||
|
|
||||||
public App()
|
public App()
|
||||||
{
|
{
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
@@ -35,10 +45,45 @@ namespace Gidrolock_Modbus_Scanner
|
|||||||
CBox_Function.Items.Add("02 - Read Discrete Input");
|
CBox_Function.Items.Add("02 - Read Discrete Input");
|
||||||
CBox_Function.Items.Add("03 - Read Holding Register");
|
CBox_Function.Items.Add("03 - Read Holding Register");
|
||||||
CBox_Function.Items.Add("04 - Read Input Register");
|
CBox_Function.Items.Add("04 - Read Input Register");
|
||||||
|
CBox_Function.Items.Add("05 - Write Single Coil");
|
||||||
|
CBox_Function.Items.Add("06 - Write Single Holding Register");
|
||||||
|
CBox_Function.Items.Add("0F - Write Multiple Coils");
|
||||||
|
CBox_Function.Items.Add("10 - Write Multiple Registers");
|
||||||
CBox_Function.SelectedItem = CBox_Function.Items[0];
|
CBox_Function.SelectedItem = CBox_Function.Items[0];
|
||||||
|
|
||||||
|
CBox_BaudRate.Items.Add("110");
|
||||||
|
CBox_BaudRate.Items.Add("300");
|
||||||
|
CBox_BaudRate.Items.Add("1200");
|
||||||
|
CBox_BaudRate.Items.Add("2400");
|
||||||
|
CBox_BaudRate.Items.Add("4800");
|
||||||
|
CBox_BaudRate.Items.Add("9600");
|
||||||
|
CBox_BaudRate.Items.Add("14400");
|
||||||
|
CBox_BaudRate.Items.Add("19200");
|
||||||
|
CBox_BaudRate.Items.Add("28800");
|
||||||
|
CBox_BaudRate.Items.Add("38400");
|
||||||
|
CBox_BaudRate.Items.Add("57600");
|
||||||
|
CBox_BaudRate.Items.Add("76800");
|
||||||
|
CBox_BaudRate.Items.Add("115200");
|
||||||
|
CBox_BaudRate.Items.Add("230300");
|
||||||
|
CBox_BaudRate.Items.Add("460800");
|
||||||
|
CBox_BaudRate.Items.Add("921600");
|
||||||
|
CBox_BaudRate.SelectedIndex = 5;
|
||||||
|
|
||||||
|
CBox_DataBits.Items.Add("7");
|
||||||
|
CBox_DataBits.Items.Add("8");
|
||||||
|
CBox_DataBits.SelectedIndex = 1;
|
||||||
|
|
||||||
|
CBox_StopBits.Items.Add("Нет");
|
||||||
|
CBox_StopBits.Items.Add("1");
|
||||||
|
CBox_StopBits.Items.Add("1.5");
|
||||||
|
CBox_StopBits.Items.Add("2");
|
||||||
|
CBox_StopBits.SelectedIndex = 1;
|
||||||
|
|
||||||
UpDown_RegAddress.Minimum = 0;
|
UpDown_RegAddress.Minimum = 0;
|
||||||
UpDown_RegAddress.Maximum = 65536;
|
UpDown_RegAddress.Maximum = 65535;
|
||||||
|
|
||||||
|
UpDown_Value.Minimum = 0;
|
||||||
|
UpDown_Value.Maximum = 65535; // 2^16
|
||||||
}
|
}
|
||||||
void App_FormClosed(object sender, FormClosedEventArgs e)
|
void App_FormClosed(object sender, FormClosedEventArgs e)
|
||||||
{
|
{
|
||||||
@@ -69,54 +114,85 @@ namespace Gidrolock_Modbus_Scanner
|
|||||||
if (UpDown_ModbusID.Value == 0)
|
if (UpDown_ModbusID.Value == 0)
|
||||||
MessageBox.Show("Глобальное вещание пока не поддерживается");
|
MessageBox.Show("Глобальное вещание пока не поддерживается");
|
||||||
|
|
||||||
try
|
// Port Setup
|
||||||
{
|
if (port.IsOpen)
|
||||||
if (port.IsOpen)
|
|
||||||
port.Close();
|
|
||||||
|
|
||||||
port.Handshake = Handshake.None;
|
|
||||||
port.PortName = CBox_Ports.Text;
|
|
||||||
port.BaudRate = 9600;
|
|
||||||
port.Parity = Parity.None;
|
|
||||||
port.DataBits = 8;
|
|
||||||
port.StopBits = StopBits.One;
|
|
||||||
|
|
||||||
port.ReadTimeout = 1000;
|
|
||||||
port.WriteTimeout = 1000;
|
|
||||||
|
|
||||||
|
|
||||||
offset = 0;
|
|
||||||
data = new byte[255];
|
|
||||||
port.Open();
|
|
||||||
|
|
||||||
byte[] message = new byte[8];
|
|
||||||
Modbus.BuildMessage((byte)UpDown_ModbusID.Value, (byte)(1 + functionCode), address, length, ref message);
|
|
||||||
string messageParsed = Modbus.ParseByteArray(message);
|
|
||||||
|
|
||||||
var send = await Modbus.ReadRegAsync(port, functionCode, (byte)UpDown_ModbusID.Value, address, length);
|
|
||||||
AddLog("Отправка сообщения: " + messageParsed);
|
|
||||||
isAwaitingResponse = true;
|
|
||||||
Task timer = Task.Delay(2000);
|
|
||||||
await timer.ContinueWith(_ =>
|
|
||||||
{
|
|
||||||
if (isAwaitingResponse)
|
|
||||||
{
|
|
||||||
MessageBox.Show("Истекло время ожидания ответа.", "Ошибка");
|
|
||||||
port.Close();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
}
|
|
||||||
catch (Exception err)
|
|
||||||
{
|
|
||||||
port.Close();
|
port.Close();
|
||||||
MessageBox.Show(err.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
|
||||||
|
port.Handshake = Handshake.None;
|
||||||
|
port.PortName = CBox_Ports.Text;
|
||||||
|
port.BaudRate = BaudRate[CBox_BaudRate.SelectedIndex];
|
||||||
|
port.Parity = Parity.None;
|
||||||
|
port.DataBits = DataBits[CBox_DataBits.SelectedIndex];
|
||||||
|
port.StopBits = (StopBits)CBox_StopBits.SelectedIndex;
|
||||||
|
|
||||||
|
port.ReadTimeout = 1000;
|
||||||
|
port.WriteTimeout = 1000;
|
||||||
|
|
||||||
|
|
||||||
|
offset = 0;
|
||||||
|
message = new byte[255];
|
||||||
|
port.Open();
|
||||||
|
|
||||||
|
/* - Reading from Registers - */
|
||||||
|
if (CBox_Function.SelectedIndex < 4)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
byte[] request = new byte[8];
|
||||||
|
Modbus.BuildMessage((byte)UpDown_ModbusID.Value, (byte)(1 + functionCode), address, length, ref request);
|
||||||
|
string messageParsed = Modbus.ParseByteArray(request);
|
||||||
|
|
||||||
|
var send = await Modbus.ReadRegAsync(port, functionCode, (byte)UpDown_ModbusID.Value, address, length);
|
||||||
|
AddLog("Отправка сообщения: " + messageParsed);
|
||||||
|
isAwaitingResponse = true;
|
||||||
|
Task timer = Task.Delay(2000);
|
||||||
|
await timer.ContinueWith(_ =>
|
||||||
|
{
|
||||||
|
if (isAwaitingResponse)
|
||||||
|
{
|
||||||
|
MessageBox.Show("Истекло время ожидания ответа.", "Ошибка");
|
||||||
|
port.Close();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
catch (Exception err)
|
||||||
|
{
|
||||||
|
port.Close();
|
||||||
|
MessageBox.Show(err.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* - Writing to Registers - */
|
||||||
|
else
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if (CBox_Function.SelectedIndex < 6) // Single Registers
|
||||||
|
{
|
||||||
|
byte[] request = new byte[8];
|
||||||
|
Modbus.BuildMessage((byte)UpDown_ModbusID.Value, (byte)(1 + functionCode), address, length, ref request);
|
||||||
|
string messageParsed = Modbus.ParseByteArray(request);
|
||||||
|
|
||||||
|
var send = await Modbus.WriteSingle(port, functionCode, (byte)UpDown_ModbusID.Value, address, (ushort)UpDown_Value.Value);
|
||||||
|
}
|
||||||
|
else // Multiple Registers
|
||||||
|
{
|
||||||
|
byte[] request = new byte[(int)UpDown_RegLength.Value * 2 + 6];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception err)
|
||||||
|
{
|
||||||
|
port.Close();
|
||||||
|
MessageBox.Show(err.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private async void ButtonConnect_Click(object sender, EventArgs e)
|
private async void ButtonConnect_Click(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
await SendMessageAsync(FunctionCode.HoldingRegister, 128, 1);
|
AddLog("Попытка подключиться к устройству Gidrolock.");
|
||||||
|
await SendMessageAsync(FunctionCode.DiscreteInput, 200, 5);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CBox_Ports_Click(object sender, EventArgs e)
|
void CBox_Ports_Click(object sender, EventArgs e)
|
||||||
@@ -129,21 +205,38 @@ namespace Gidrolock_Modbus_Scanner
|
|||||||
{
|
{
|
||||||
Console.WriteLine("Data receieved on Serial Port");
|
Console.WriteLine("Data receieved on Serial Port");
|
||||||
isAwaitingResponse = false;
|
isAwaitingResponse = false;
|
||||||
try
|
|
||||||
{
|
|
||||||
int len = port.BytesToRead;
|
|
||||||
Console.WriteLine("Data length: " + len);
|
|
||||||
port.Read(data, offset, len);
|
|
||||||
offset += len;
|
|
||||||
string dataCleaned = Modbus.ParseByteArray(data);
|
|
||||||
|
|
||||||
TextBox_Log.Invoke((MethodInvoker)delegate { AddLog("Получен ответ: " + dataCleaned); });
|
if (!isProcessingResponse)
|
||||||
//MessageBox.Show("Получен ответ от устройства: " + dataCleaned, "Успех", MessageBoxButtons.OK);
|
|
||||||
}
|
|
||||||
catch (Exception err)
|
|
||||||
{
|
{
|
||||||
MessageBox.Show(err.Message);
|
isProcessingResponse = true;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
port.Read(message, 0, 3);
|
||||||
|
int length = (int)message[2];
|
||||||
|
for (int i = 0; i < length + 2; i++)
|
||||||
|
{
|
||||||
|
port.Read(message, i + 3, 1);
|
||||||
|
}
|
||||||
|
byte[] data = new byte[length];
|
||||||
|
for (int i = 0; i < length; i++)
|
||||||
|
{
|
||||||
|
data[i] = message[i + 3];
|
||||||
|
}
|
||||||
|
Console.WriteLine("Data: " + Modbus.ParseByteArray(data));
|
||||||
|
string dataCleaned = Modbus.ParseByteArray(message);
|
||||||
|
|
||||||
|
TextBox_Log.Invoke((MethodInvoker)delegate { AddLog("Получен ответ: " + dataCleaned); });
|
||||||
|
TextBox_Log.Invoke((MethodInvoker)delegate { AddLog("ASCII: " + "wip"); });
|
||||||
|
//MessageBox.Show("Получен ответ от устройства: " + dataCleaned, "Успех", MessageBoxButtons.OK);
|
||||||
|
port.DiscardInBuffer();
|
||||||
|
isProcessingResponse = false;
|
||||||
|
}
|
||||||
|
catch (Exception err)
|
||||||
|
{
|
||||||
|
MessageBox.Show(err.Message);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//port.Close();
|
//port.Close();
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -161,7 +254,21 @@ namespace Gidrolock_Modbus_Scanner
|
|||||||
|
|
||||||
await SendMessageAsync(functionCode, address, length);
|
await SendMessageAsync(functionCode, address, length);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void OnSelectedFunctionChanged(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
if (CBox_Function.SelectedIndex < 4)
|
||||||
|
UpDown_Value.Enabled = false;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (CBox_Function.SelectedIndex == 4 || CBox_Function.SelectedIndex == 6)
|
||||||
|
UpDown_Value.Maximum = 1;
|
||||||
|
else UpDown_Value.Maximum = 65535;
|
||||||
|
|
||||||
|
UpDown_Value.Enabled = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public enum FunctionCode { Coil, DiscreteInput, HoldingRegister, InputRegister}
|
public enum FunctionCode { Coil, DiscreteInput, HoldingRegister, InputRegister, WriteCoil, WriteRegister, WriteMultCoils, WriteMultRegisters };
|
||||||
|
|||||||
44
Modbus.cs
44
Modbus.cs
@@ -62,7 +62,7 @@ namespace Gidrolock_Modbus_Scanner
|
|||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Function 3 - Read Holding Registers
|
#region Read Functions
|
||||||
public static async Task<bool> ReadRegAsync(SerialPort port, FunctionCode functionCode, byte address, ushort start, ushort length)
|
public static async Task<bool> ReadRegAsync(SerialPort port, FunctionCode functionCode, byte address, ushort start, ushort length)
|
||||||
{
|
{
|
||||||
//Ensure port is open:
|
//Ensure port is open:
|
||||||
@@ -100,6 +100,48 @@ namespace Gidrolock_Modbus_Scanner
|
|||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
#region Write Single Coil/Register
|
||||||
|
public static async Task<bool> WriteSingle(SerialPort port, FunctionCode functionCode, byte address, ushort start, uint value)
|
||||||
|
{
|
||||||
|
MessageBox.Show("Not implemented");
|
||||||
|
return false;
|
||||||
|
/*
|
||||||
|
if (port.IsOpen)
|
||||||
|
{
|
||||||
|
//Clear in/out buffers:
|
||||||
|
port.DiscardOutBuffer();
|
||||||
|
port.DiscardInBuffer();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
MessageBox.Show("Порт не открыт");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
|
||||||
|
public static bool ParseResponse(byte[] res, ref string verbose)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
int dataLength = (int)res[2];
|
||||||
|
if (res.Length < dataLength + 4)
|
||||||
|
{
|
||||||
|
verbose = "Сообщение устройства не соответствует ожидаемой длине!";
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
//TODO: Check CRC
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
verbose = "Сообщение устройства не соответствует ожидаемой длине!";
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Parses a byte array into a string.
|
/// Parses a byte array into a string.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
10
README.md
10
README.md
@@ -1,8 +1,12 @@
|
|||||||
# Gidrolock Modbus Scanner
|
# Gidrolock Modbus Scanner
|
||||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Modbus <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Gidrolock.
|
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Modbus <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Gidrolock.
|
||||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Holding Register'<27> 128 (Modbus ID). <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
|
||||||
|
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>" <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Holding Register'<27> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> `128` (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Modbus ID <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Gidrolock).
|
||||||
|
|
||||||
|
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||||
|
|
||||||
## To-Do
|
## To-Do
|
||||||
1. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
1. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
2. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
2. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> `.json` <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
2. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> `.json` <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
3. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
3. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
Reference in New Issue
Block a user