Browse Source

2022-01-14;增加产品通路启用与不启用调试功能,增加产品序列号界面展示,可完成无产品下的基本流程调试。

pc 3 years ago
parent
commit
8fb8f0e73c

BIN
exe/apps/Tps_LQ_Transmitter/Tps_LQ_Transmitter.dll


BIN
exe/apps/Tps_LQ_Transmitter/Tps_LQ_Transmitter.pdb


BIN
tps/TpsLabStudio/.vs/TpsLabStudio/v16/.suo


+ 44 - 28
tps/TpsLabStudio/FrmMain.Designer.cs

@@ -29,9 +29,9 @@
         private void InitializeComponent()
         {
             this.components = new System.ComponentModel.Container();
-            DevComponents.DotNetBar.Layout.BorderPattern borderPattern1 = new DevComponents.DotNetBar.Layout.BorderPattern();
-            System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle();
-            System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle2 = new System.Windows.Forms.DataGridViewCellStyle();
+            DevComponents.DotNetBar.Layout.BorderPattern borderPattern2 = new DevComponents.DotNetBar.Layout.BorderPattern();
+            System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle4 = new System.Windows.Forms.DataGridViewCellStyle();
+            System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle3 = new System.Windows.Forms.DataGridViewCellStyle();
             this.splitContainer1 = new System.Windows.Forms.SplitContainer();
             this.advTree1 = new DevComponents.AdvTree.AdvTree();
             this.contextMenuStrip1 = new System.Windows.Forms.ContextMenuStrip(this.components);
@@ -86,6 +86,7 @@
             this.BtnSaveManualData = new DevComponents.DotNetBar.ButtonX();
             this.tabManualData = new DevComponents.DotNetBar.SuperTabItem();
             this.tbSerial = new DevComponents.DotNetBar.Controls.TextBoxX();
+            this.btnProductForm = new DevComponents.DotNetBar.ButtonX();
             ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();
             this.splitContainer1.Panel1.SuspendLayout();
             this.splitContainer1.Panel2.SuspendLayout();
@@ -164,33 +165,33 @@
             this.tsmUnSelecteAll,
             this.tsmSelectAll});
             this.contextMenuStrip1.Name = "contextMenuStrip1";
-            this.contextMenuStrip1.Size = new System.Drawing.Size(147, 92);
+            this.contextMenuStrip1.Size = new System.Drawing.Size(149, 92);
             // 
             // tsmChannel
             // 
             this.tsmChannel.Name = "tsmChannel";
-            this.tsmChannel.Size = new System.Drawing.Size(146, 22);
+            this.tsmChannel.Size = new System.Drawing.Size(148, 22);
             this.tsmChannel.Text = "按通道分类";
             this.tsmChannel.Click += new System.EventHandler(this.tsmChannel_Click);
             // 
             // tmsTestNode
             // 
             this.tmsTestNode.Name = "tmsTestNode";
-            this.tmsTestNode.Size = new System.Drawing.Size(146, 22);
+            this.tmsTestNode.Size = new System.Drawing.Size(148, 22);
             this.tmsTestNode.Text = "按指标分类";
             this.tmsTestNode.Click += new System.EventHandler(this.tmsTestNode_Click);
             // 
             // tsmUnSelecteAll
             // 
             this.tsmUnSelecteAll.Name = "tsmUnSelecteAll";
-            this.tsmUnSelecteAll.Size = new System.Drawing.Size(146, 22);
+            this.tsmUnSelecteAll.Size = new System.Drawing.Size(148, 22);
             this.tsmUnSelecteAll.Text = "全部取消选择";
             this.tsmUnSelecteAll.Click += new System.EventHandler(this.tsmUnSelecteAll_Click);
             // 
             // tsmSelectAll
             // 
             this.tsmSelectAll.Name = "tsmSelectAll";
-            this.tsmSelectAll.Size = new System.Drawing.Size(146, 22);
+            this.tsmSelectAll.Size = new System.Drawing.Size(148, 22);
             this.tsmSelectAll.Text = "全部选择";
             this.tsmSelectAll.Click += new System.EventHandler(this.tsmSelectAll_Click);
             // 
@@ -422,8 +423,8 @@
             // 
             // layoutGroup1
             // 
-            borderPattern1.Bottom = DevComponents.DotNetBar.Layout.LinePattern.Dot;
-            this.layoutGroup1.CaptionStyle.BorderPattern = borderPattern1;
+            borderPattern2.Bottom = DevComponents.DotNetBar.Layout.LinePattern.Dot;
+            this.layoutGroup1.CaptionStyle.BorderPattern = borderPattern2;
             this.layoutGroup1.CaptionStyle.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
             this.layoutGroup1.CaptionStyle.TextColor = System.Drawing.Color.Navy;
             this.layoutGroup1.Height = 208;
@@ -658,8 +659,8 @@
             this.superTabControl1.ControlBox.SubItems.AddRange(new DevComponents.DotNetBar.BaseItem[] {
             this.superTabControl1.ControlBox.MenuBox,
             this.superTabControl1.ControlBox.CloseBox});
-            this.superTabControl1.Controls.Add(this.superTabControlPanel1);
             this.superTabControl1.Controls.Add(this.superTabControlPanel2);
+            this.superTabControl1.Controls.Add(this.superTabControlPanel1);
             this.superTabControl1.Dock = System.Windows.Forms.DockStyle.Fill;
             this.superTabControl1.Location = new System.Drawing.Point(0, 0);
             this.superTabControl1.Margin = new System.Windows.Forms.Padding(2);
@@ -693,14 +694,14 @@
             this.dgvTestData.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.AllCells;
             this.dgvTestData.BackgroundColor = System.Drawing.Color.Azure;
             this.dgvTestData.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
-            dataGridViewCellStyle1.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft;
-            dataGridViewCellStyle1.BackColor = System.Drawing.SystemColors.Window;
-            dataGridViewCellStyle1.Font = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
-            dataGridViewCellStyle1.ForeColor = System.Drawing.SystemColors.ControlText;
-            dataGridViewCellStyle1.SelectionBackColor = System.Drawing.SystemColors.Highlight;
-            dataGridViewCellStyle1.SelectionForeColor = System.Drawing.SystemColors.ControlText;
-            dataGridViewCellStyle1.WrapMode = System.Windows.Forms.DataGridViewTriState.False;
-            this.dgvTestData.DefaultCellStyle = dataGridViewCellStyle1;
+            dataGridViewCellStyle4.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft;
+            dataGridViewCellStyle4.BackColor = System.Drawing.SystemColors.Window;
+            dataGridViewCellStyle4.Font = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+            dataGridViewCellStyle4.ForeColor = System.Drawing.SystemColors.ControlText;
+            dataGridViewCellStyle4.SelectionBackColor = System.Drawing.SystemColors.Highlight;
+            dataGridViewCellStyle4.SelectionForeColor = System.Drawing.SystemColors.ControlText;
+            dataGridViewCellStyle4.WrapMode = System.Windows.Forms.DataGridViewTriState.False;
+            this.dgvTestData.DefaultCellStyle = dataGridViewCellStyle4;
             this.dgvTestData.Dock = System.Windows.Forms.DockStyle.Fill;
             this.dgvTestData.GridColor = System.Drawing.Color.FromArgb(((int)(((byte)(208)))), ((int)(((byte)(215)))), ((int)(((byte)(229)))));
             this.dgvTestData.Location = new System.Drawing.Point(0, 0);
@@ -739,14 +740,14 @@
             this.dgvManualData.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.AllCells;
             this.dgvManualData.BackgroundColor = System.Drawing.Color.Azure;
             this.dgvManualData.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
-            dataGridViewCellStyle2.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft;
-            dataGridViewCellStyle2.BackColor = System.Drawing.SystemColors.Window;
-            dataGridViewCellStyle2.Font = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
-            dataGridViewCellStyle2.ForeColor = System.Drawing.SystemColors.ControlText;
-            dataGridViewCellStyle2.SelectionBackColor = System.Drawing.SystemColors.Highlight;
-            dataGridViewCellStyle2.SelectionForeColor = System.Drawing.SystemColors.ControlText;
-            dataGridViewCellStyle2.WrapMode = System.Windows.Forms.DataGridViewTriState.False;
-            this.dgvManualData.DefaultCellStyle = dataGridViewCellStyle2;
+            dataGridViewCellStyle3.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft;
+            dataGridViewCellStyle3.BackColor = System.Drawing.SystemColors.Window;
+            dataGridViewCellStyle3.Font = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+            dataGridViewCellStyle3.ForeColor = System.Drawing.SystemColors.ControlText;
+            dataGridViewCellStyle3.SelectionBackColor = System.Drawing.SystemColors.Highlight;
+            dataGridViewCellStyle3.SelectionForeColor = System.Drawing.SystemColors.ControlText;
+            dataGridViewCellStyle3.WrapMode = System.Windows.Forms.DataGridViewTriState.False;
+            this.dgvManualData.DefaultCellStyle = dataGridViewCellStyle3;
             this.dgvManualData.Dock = System.Windows.Forms.DockStyle.Fill;
             this.dgvManualData.GridColor = System.Drawing.Color.FromArgb(((int)(((byte)(208)))), ((int)(((byte)(215)))), ((int)(((byte)(229)))));
             this.dgvManualData.Location = new System.Drawing.Point(0, 54);
@@ -763,6 +764,7 @@
             // 
             this.panelEx1.CanvasColor = System.Drawing.SystemColors.Control;
             this.panelEx1.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled;
+            this.panelEx1.Controls.Add(this.btnProductForm);
             this.panelEx1.Controls.Add(this.btnDebugging);
             this.panelEx1.Controls.Add(this.BtnLoadManualData);
             this.panelEx1.Controls.Add(this.BtnSaveManualData);
@@ -842,6 +844,19 @@
             this.tbSerial.Size = new System.Drawing.Size(236, 26);
             this.tbSerial.TabIndex = 2;
             // 
+            // btnProductForm
+            // 
+            this.btnProductForm.AccessibleRole = System.Windows.Forms.AccessibleRole.PushButton;
+            this.btnProductForm.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+            this.btnProductForm.ColorTable = DevComponents.DotNetBar.eButtonColor.OrangeWithBackground;
+            this.btnProductForm.Location = new System.Drawing.Point(380, 12);
+            this.btnProductForm.Name = "btnProductForm";
+            this.btnProductForm.Size = new System.Drawing.Size(69, 30);
+            this.btnProductForm.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled;
+            this.btnProductForm.TabIndex = 1;
+            this.btnProductForm.Text = "产品界面";
+            this.btnProductForm.Click += new System.EventHandler(this.btnProductForm_Click);
+            // 
             // FrmMain
             // 
             this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
@@ -927,9 +942,10 @@
         /// <summary>
         /// 产品编号输入框
         /// </summary>
-        private System.Windows.Forms.ComboBox tbSerials;
+        public System.Windows.Forms.ComboBox tbSerials;
         private DevComponents.DotNetBar.Layout.LayoutControlItem layoutControlItem3;
         private DevComponents.DotNetBar.Controls.TextBoxX tbSerial;
+        private DevComponents.DotNetBar.ButtonX btnProductForm;
     }
 }
 

+ 40 - 4
tps/TpsLabStudio/FrmMain.cs

@@ -52,6 +52,15 @@ namespace Tps_LQ_Transmitter
         /// PCM通信
         /// </summary>
         public static PcmControl pcm = null;
+        /// <summary>
+        /// 产品序列号数组
+        /// </summary>
+        public static string[] ProductSeries = null;
+        /// <summary>
+        /// 启用的产品路数组
+        /// </summary>
+        public static bool[] ProdEnabCh = { false, false, false, false, false, false, false, false };
+        //                                    1      2      3      4      5      6      7      8
 
         FrmMsg frmMsg;
         FrmDevice frmDevice;
@@ -376,7 +385,17 @@ namespace Tps_LQ_Transmitter
             double volt = currFileNode.Tps.GloabConfigDict["电压"];
             double Current = currFileNode.Tps.GloabConfigDict["电流"];
             // ConfigParameter SetVoltPara = new ConfigParameter();
-            if (tbSerials.Items.Count > 1) //如何测试产品大于1台,则使用外部TDK电源
+            int countx = 0;//记录启用了几路(共8路)
+            for (int i = 0; i < 8; i++)
+            {
+                if (ProdEnabCh[i]==true)
+                {
+                    countx++;
+                    ShowMessage(MsgType.Info, string.Format("已启用第{0}路!",i+1));
+                }
+            }
+            //if (tbSerials.Items.Count > 1)//如果测试台数大于1,则使用外部TDK电源
+            if (countx > 1) //启用的路数大于1台,则使用外部TDK电源
             {
                 DCPower = new CommonVisaResource();
 
@@ -485,7 +504,7 @@ namespace Tps_LQ_Transmitter
                     
                 //}
                 
-                string[] ProductSeries = new string[tbSerials.Items.Count];//将产品编号载入ProductSeries字符串数组
+                
                 tbSerials.Items.CopyTo(ProductSeries, 0);
                 currFileNode.Tps.Start(isOrderByChannel, ProductSeries, DCPower, rainwormPower, SerialClient, CfigComParas);
                 TimesCounter.Stop();
@@ -506,7 +525,8 @@ namespace Tps_LQ_Transmitter
                     SerialClient.DUT_Transmitter_Ctrol1(0x00, 0x00);//todo:掉电控制
                 }
                 SerialClient.SerialClose();//需要取消注释
-                if (tbSerials.Items.Count > 1)//如果测试台数大于1,则使用外部TDK电源
+                //if (tbSerials.Items.Count > 1)//如果测试台数大于1,则使用外部TDK电源
+                if (countx > 1)//如果启用路数大于1,则使用外部TDK电源
                 {
                     DCPower.Write("GLOBal:OUTPut:STATe 0\n"); DCPower.Query("*OPC?\n");//需要取消注释
                     ShowMessage(MsgType.Info, string.Format("关闭6YYC信号源,关闭串口,关闭外部TDK电源."));
@@ -789,6 +809,12 @@ namespace Tps_LQ_Transmitter
             debuggingForm.Show();
         }
 
+        private void btnProductForm_Click(object sender, EventArgs e)
+        {
+            ProductForm productForm = new ProductForm();
+            productForm.Show();
+            
+        }
         /// <summary>
         /// 产品编号框添加、插入、删除事件处理
         /// </summary>
@@ -944,8 +970,18 @@ namespace Tps_LQ_Transmitter
                     MessageBox.Show("产品编号为空,删除无效");
                 }
             }
+           ProductSeries = new string[tbSerials.Items.Count];//将产品编号载入ProductSeries字符串数组
+            if (ProductSeries.Length>0)
+            {
+                tbSerials.Items.CopyTo(ProductSeries, 0);
+                for (int i = 0; i < ProductSeries.Length; i++)
+                {
+                    ProdEnabCh[i]= true;
+                }
+            }
+            
         }
 
-       
+
     }
 }

+ 45 - 33
tps/TpsLabStudio/MainTps.cs

@@ -707,7 +707,15 @@ namespace Tps_LQ_Transmitter
             int ControlDelay = this.TestNodes[0].Parameters.GetParameter<int>("控制延时");
             for (int i = 0; i < ProductSeries.Length; i++)
             {
-                FrmMain.dio.SupplySwitch(i+1,DioControlClass.State.ON);//打开产品供电开关
+                if (FrmMain.ProdEnabCh[i]==true)//启用的路才加电
+                {
+                    FrmMain.dio.SupplySwitch(i + 1, DioControlClass.State.ON);//打开产品供电开关
+                }
+                else
+                {
+                    FrmMain.dio.SupplySwitch(i + 1, DioControlClass.State.OFF);//打开产品供电开关
+                }
+               
             }
             //SerialClient.SerialOpen(CfigComParas.GetComPort("1"));
             //ShowMessage(MsgType.Info, string.Format("打开串口."));
@@ -824,41 +832,45 @@ namespace Tps_LQ_Transmitter
                                         currModel = testnode.TestModel;
                                         for (int i =0;i< ProductSeries.Length;i++)          //各路分别测试
                                         {
-                                            //if (FrmPara.IsRuning == false)//中途点击停止测试按钮
-                                            //{
-                                            //    //控制断电
-                                            //    StopClose(ProductSeries, DCPower, rainwormPower, SerialClient);
-                                            //    return;
-                                            //}
-                                            
-                                            Thread.Sleep(500);
-                                            this.Serial =  ProductSeries[i];
-                                            SystemChofSerial = (Array.IndexOf(ProductSeries, ProductSeries[i]) +  1).ToString();
-                                            UpDateCurrentSeries(this.Serial);
-                                            // 陷波支路用于测杂波抑制,衰减支路用于测试其他指标,
-                                            //双通道测试时:当测通道1的衰减支路指标时,在不换线的情况下,则进行通道2的陷波支路指标,然后换线,测通道2的衰减支路指标时,在不换线的情况下,则进行通道1的陷波支路指标。
-                                            //单通道测试时,当测通道1的衰减支路指标时,换线后,单独测试通道1的陷波支路指标
-                                            FrmMain.dio.OneToEight(i + 1, DioControlClass.State.ON);
-                                            if (testnode.Name.Contains("杂波抑制"))
+                                            if (FrmMain.ProdEnabCh[i] == true)              //启用的路才进行测试
                                             {
-                                                //todo:切产品同时切到陷波支路(1切8射频开关,1切2射频开关)
-                                                FrmMain.gpio.AllSwitchBandstopft();//8路全切至陷波器                                            
-                                            }
-                                            else 
-                                            {
-                                                //todo:切产品同时切到衰减支路(1切8射频开关,1切2射频开关)
-                                                FrmMain.gpio.AllSwitchAttenuator();//8路全切至衰减器
                                                
+                                                //if (FrmPara.IsRuning == false)//中途点击停止测试按钮
+                                                //{
+                                                //    //控制断电
+                                                //    StopClose(ProductSeries, DCPower, rainwormPower, SerialClient);
+                                                //    return;
+                                                //}
+
+                                                Thread.Sleep(500);
+                                                this.Serial = ProductSeries[i];
+                                                SystemChofSerial = (Array.IndexOf(ProductSeries, ProductSeries[i]) + 1).ToString();
+                                                UpDateCurrentSeries(this.Serial);
+                                                // 陷波支路用于测杂波抑制,衰减支路用于测试其他指标,
+                                                //双通道测试时:当测通道1的衰减支路指标时,在不换线的情况下,则进行通道2的陷波支路指标,然后换线,测通道2的衰减支路指标时,在不换线的情况下,则进行通道1的陷波支路指标。
+                                                //单通道测试时,当测通道1的衰减支路指标时,换线后,单独测试通道1的陷波支路指标
+                                                FrmMain.dio.OneToEight(i + 1, DioControlClass.State.ON);
+                                                if (testnode.Name.Contains("杂波抑制"))
+                                                {
+                                                    //todo:切产品同时切到陷波支路(1切8射频开关,1切2射频开关)
+                                                    FrmMain.gpio.AllSwitchBandstopft();//8路全切至陷波器                                            
+                                                }
+                                                else
+                                                {
+                                                    //todo:切产品同时切到衰减支路(1切8射频开关,1切2射频开关)
+                                                    FrmMain.gpio.AllSwitchAttenuator();//8路全切至衰减器
+
+                                                }
+                                                if (testnode.Name.Contains("功率(功率计)"))//功率测试需接入功率计其余使用频谱仪测试
+                                                {
+                                                    FrmMain.dio.RfSwitchX("功率计");//接入功率计
+                                                }
+                                                else
+                                                {
+                                                    FrmMain.dio.RfSwitchX("频谱仪");//接入频谱仪
+                                                }
+                                                testnode.TestModel.Start(testnode, nodes);
                                             }
-                                            if (testnode.Name.Contains("功率(功率计)"))//功率测试需接入功率计其余使用频谱仪测试
-                                            {
-                                                FrmMain.dio.RfSwitchX("功率计");//接入功率计
-                                            }
-                                            else
-                                            {
-                                                FrmMain.dio.RfSwitchX("频谱仪");//接入频谱仪
-                                            }
-                                            testnode.TestModel.Start(testnode, nodes);
                                         }
                                     }
                                 }

+ 434 - 0
tps/TpsLabStudio/ProductForm.Designer.cs

@@ -0,0 +1,434 @@
+
+namespace Tps_LQ_Transmitter
+{
+    partial class ProductForm
+    {
+        /// <summary>
+        /// Required designer variable.
+        /// </summary>
+        private System.ComponentModel.IContainer components = null;
+
+        /// <summary>
+        /// Clean up any resources being used.
+        /// </summary>
+        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+        protected override void Dispose(bool disposing)
+        {
+            if (disposing && (components != null))
+            {
+                components.Dispose();
+            }
+            base.Dispose(disposing);
+        }
+
+        #region Windows Form Designer generated code
+
+        /// <summary>
+        /// Required method for Designer support - do not modify
+        /// the contents of this method with the code editor.
+        /// </summary>
+        private void InitializeComponent()
+        {
+            this.txtbProd_1 = new DevComponents.DotNetBar.Controls.TextBoxX();
+            this.labelX1 = new DevComponents.DotNetBar.LabelX();
+            this.txtbProd_2 = new DevComponents.DotNetBar.Controls.TextBoxX();
+            this.txtbProd_3 = new DevComponents.DotNetBar.Controls.TextBoxX();
+            this.txtbProd_4 = new DevComponents.DotNetBar.Controls.TextBoxX();
+            this.txtbProd_5 = new DevComponents.DotNetBar.Controls.TextBoxX();
+            this.txtbProd_6 = new DevComponents.DotNetBar.Controls.TextBoxX();
+            this.txtbProd_7 = new DevComponents.DotNetBar.Controls.TextBoxX();
+            this.txtbProd_8 = new DevComponents.DotNetBar.Controls.TextBoxX();
+            this.labelX2 = new DevComponents.DotNetBar.LabelX();
+            this.labelX3 = new DevComponents.DotNetBar.LabelX();
+            this.labelX4 = new DevComponents.DotNetBar.LabelX();
+            this.labelX5 = new DevComponents.DotNetBar.LabelX();
+            this.labelX6 = new DevComponents.DotNetBar.LabelX();
+            this.labelX7 = new DevComponents.DotNetBar.LabelX();
+            this.labelX8 = new DevComponents.DotNetBar.LabelX();
+            this.chkEnableCh_1 = new DevComponents.DotNetBar.Controls.CheckBoxX();
+            this.chkEnableCh_2 = new DevComponents.DotNetBar.Controls.CheckBoxX();
+            this.chkEnableCh_3 = new DevComponents.DotNetBar.Controls.CheckBoxX();
+            this.chkEnableCh_4 = new DevComponents.DotNetBar.Controls.CheckBoxX();
+            this.chkEnableCh_5 = new DevComponents.DotNetBar.Controls.CheckBoxX();
+            this.chkEnableCh_6 = new DevComponents.DotNetBar.Controls.CheckBoxX();
+            this.chkEnableCh_7 = new DevComponents.DotNetBar.Controls.CheckBoxX();
+            this.chkEnableCh_8 = new DevComponents.DotNetBar.Controls.CheckBoxX();
+            this.SuspendLayout();
+            // 
+            // txtbProd_1
+            // 
+            // 
+            // 
+            // 
+            this.txtbProd_1.Border.Class = "TextBoxBorder";
+            this.txtbProd_1.Border.CornerType = DevComponents.DotNetBar.eCornerType.Square;
+            this.txtbProd_1.Font = new System.Drawing.Font("宋体", 15.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+            this.txtbProd_1.Location = new System.Drawing.Point(89, 41);
+            this.txtbProd_1.Name = "txtbProd_1";
+            this.txtbProd_1.PreventEnterBeep = true;
+            this.txtbProd_1.Size = new System.Drawing.Size(197, 31);
+            this.txtbProd_1.TabIndex = 0;
+            // 
+            // labelX1
+            // 
+            // 
+            // 
+            // 
+            this.labelX1.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square;
+            this.labelX1.Font = new System.Drawing.Font("宋体", 15.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+            this.labelX1.Location = new System.Drawing.Point(38, 45);
+            this.labelX1.Name = "labelX1";
+            this.labelX1.Size = new System.Drawing.Size(45, 27);
+            this.labelX1.TabIndex = 1;
+            this.labelX1.Text = "CH1";
+            // 
+            // txtbProd_2
+            // 
+            // 
+            // 
+            // 
+            this.txtbProd_2.Border.Class = "TextBoxBorder";
+            this.txtbProd_2.Border.CornerType = DevComponents.DotNetBar.eCornerType.Square;
+            this.txtbProd_2.Font = new System.Drawing.Font("宋体", 15.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+            this.txtbProd_2.Location = new System.Drawing.Point(89, 78);
+            this.txtbProd_2.Name = "txtbProd_2";
+            this.txtbProd_2.PreventEnterBeep = true;
+            this.txtbProd_2.Size = new System.Drawing.Size(197, 31);
+            this.txtbProd_2.TabIndex = 0;
+            // 
+            // txtbProd_3
+            // 
+            // 
+            // 
+            // 
+            this.txtbProd_3.Border.Class = "TextBoxBorder";
+            this.txtbProd_3.Border.CornerType = DevComponents.DotNetBar.eCornerType.Square;
+            this.txtbProd_3.Font = new System.Drawing.Font("宋体", 15.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+            this.txtbProd_3.Location = new System.Drawing.Point(89, 115);
+            this.txtbProd_3.Name = "txtbProd_3";
+            this.txtbProd_3.PreventEnterBeep = true;
+            this.txtbProd_3.Size = new System.Drawing.Size(197, 31);
+            this.txtbProd_3.TabIndex = 0;
+            // 
+            // txtbProd_4
+            // 
+            // 
+            // 
+            // 
+            this.txtbProd_4.Border.Class = "TextBoxBorder";
+            this.txtbProd_4.Border.CornerType = DevComponents.DotNetBar.eCornerType.Square;
+            this.txtbProd_4.Font = new System.Drawing.Font("宋体", 15.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+            this.txtbProd_4.Location = new System.Drawing.Point(89, 152);
+            this.txtbProd_4.Name = "txtbProd_4";
+            this.txtbProd_4.PreventEnterBeep = true;
+            this.txtbProd_4.Size = new System.Drawing.Size(197, 31);
+            this.txtbProd_4.TabIndex = 0;
+            // 
+            // txtbProd_5
+            // 
+            // 
+            // 
+            // 
+            this.txtbProd_5.Border.Class = "TextBoxBorder";
+            this.txtbProd_5.Border.CornerType = DevComponents.DotNetBar.eCornerType.Square;
+            this.txtbProd_5.Font = new System.Drawing.Font("宋体", 15.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+            this.txtbProd_5.Location = new System.Drawing.Point(89, 189);
+            this.txtbProd_5.Name = "txtbProd_5";
+            this.txtbProd_5.PreventEnterBeep = true;
+            this.txtbProd_5.Size = new System.Drawing.Size(197, 31);
+            this.txtbProd_5.TabIndex = 0;
+            // 
+            // txtbProd_6
+            // 
+            // 
+            // 
+            // 
+            this.txtbProd_6.Border.Class = "TextBoxBorder";
+            this.txtbProd_6.Border.CornerType = DevComponents.DotNetBar.eCornerType.Square;
+            this.txtbProd_6.Font = new System.Drawing.Font("宋体", 15.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+            this.txtbProd_6.Location = new System.Drawing.Point(89, 226);
+            this.txtbProd_6.Name = "txtbProd_6";
+            this.txtbProd_6.PreventEnterBeep = true;
+            this.txtbProd_6.Size = new System.Drawing.Size(197, 31);
+            this.txtbProd_6.TabIndex = 0;
+            // 
+            // txtbProd_7
+            // 
+            // 
+            // 
+            // 
+            this.txtbProd_7.Border.Class = "TextBoxBorder";
+            this.txtbProd_7.Border.CornerType = DevComponents.DotNetBar.eCornerType.Square;
+            this.txtbProd_7.Font = new System.Drawing.Font("宋体", 15.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+            this.txtbProd_7.Location = new System.Drawing.Point(89, 263);
+            this.txtbProd_7.Name = "txtbProd_7";
+            this.txtbProd_7.PreventEnterBeep = true;
+            this.txtbProd_7.Size = new System.Drawing.Size(197, 31);
+            this.txtbProd_7.TabIndex = 0;
+            // 
+            // txtbProd_8
+            // 
+            // 
+            // 
+            // 
+            this.txtbProd_8.Border.Class = "TextBoxBorder";
+            this.txtbProd_8.Border.CornerType = DevComponents.DotNetBar.eCornerType.Square;
+            this.txtbProd_8.Font = new System.Drawing.Font("宋体", 15.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+            this.txtbProd_8.Location = new System.Drawing.Point(89, 300);
+            this.txtbProd_8.Name = "txtbProd_8";
+            this.txtbProd_8.PreventEnterBeep = true;
+            this.txtbProd_8.Size = new System.Drawing.Size(197, 31);
+            this.txtbProd_8.TabIndex = 0;
+            // 
+            // labelX2
+            // 
+            // 
+            // 
+            // 
+            this.labelX2.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square;
+            this.labelX2.Font = new System.Drawing.Font("宋体", 15.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+            this.labelX2.Location = new System.Drawing.Point(38, 82);
+            this.labelX2.Name = "labelX2";
+            this.labelX2.Size = new System.Drawing.Size(45, 27);
+            this.labelX2.TabIndex = 1;
+            this.labelX2.Text = "CH2";
+            // 
+            // labelX3
+            // 
+            // 
+            // 
+            // 
+            this.labelX3.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square;
+            this.labelX3.Font = new System.Drawing.Font("宋体", 15.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+            this.labelX3.Location = new System.Drawing.Point(38, 119);
+            this.labelX3.Name = "labelX3";
+            this.labelX3.Size = new System.Drawing.Size(45, 27);
+            this.labelX3.TabIndex = 1;
+            this.labelX3.Text = "CH3";
+            // 
+            // labelX4
+            // 
+            // 
+            // 
+            // 
+            this.labelX4.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square;
+            this.labelX4.Font = new System.Drawing.Font("宋体", 15.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+            this.labelX4.Location = new System.Drawing.Point(38, 156);
+            this.labelX4.Name = "labelX4";
+            this.labelX4.Size = new System.Drawing.Size(45, 27);
+            this.labelX4.TabIndex = 1;
+            this.labelX4.Text = "CH4";
+            // 
+            // labelX5
+            // 
+            // 
+            // 
+            // 
+            this.labelX5.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square;
+            this.labelX5.Font = new System.Drawing.Font("宋体", 15.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+            this.labelX5.Location = new System.Drawing.Point(38, 193);
+            this.labelX5.Name = "labelX5";
+            this.labelX5.Size = new System.Drawing.Size(45, 27);
+            this.labelX5.TabIndex = 1;
+            this.labelX5.Text = "CH5";
+            // 
+            // labelX6
+            // 
+            // 
+            // 
+            // 
+            this.labelX6.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square;
+            this.labelX6.Font = new System.Drawing.Font("宋体", 15.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+            this.labelX6.Location = new System.Drawing.Point(38, 230);
+            this.labelX6.Name = "labelX6";
+            this.labelX6.Size = new System.Drawing.Size(45, 27);
+            this.labelX6.TabIndex = 1;
+            this.labelX6.Text = "CH6";
+            // 
+            // labelX7
+            // 
+            // 
+            // 
+            // 
+            this.labelX7.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square;
+            this.labelX7.Font = new System.Drawing.Font("宋体", 15.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+            this.labelX7.Location = new System.Drawing.Point(38, 267);
+            this.labelX7.Name = "labelX7";
+            this.labelX7.Size = new System.Drawing.Size(45, 27);
+            this.labelX7.TabIndex = 1;
+            this.labelX7.Text = "CH7";
+            // 
+            // labelX8
+            // 
+            // 
+            // 
+            // 
+            this.labelX8.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square;
+            this.labelX8.Font = new System.Drawing.Font("宋体", 15.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+            this.labelX8.Location = new System.Drawing.Point(38, 304);
+            this.labelX8.Name = "labelX8";
+            this.labelX8.Size = new System.Drawing.Size(45, 27);
+            this.labelX8.TabIndex = 1;
+            this.labelX8.Text = "CH8";
+            // 
+            // chkEnableCh_1
+            // 
+            // 
+            // 
+            // 
+            this.chkEnableCh_1.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square;
+            this.chkEnableCh_1.Location = new System.Drawing.Point(301, 49);
+            this.chkEnableCh_1.Name = "chkEnableCh_1";
+            this.chkEnableCh_1.Size = new System.Drawing.Size(52, 23);
+            this.chkEnableCh_1.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled;
+            this.chkEnableCh_1.TabIndex = 2;
+            // 
+            // chkEnableCh_2
+            // 
+            // 
+            // 
+            // 
+            this.chkEnableCh_2.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square;
+            this.chkEnableCh_2.Location = new System.Drawing.Point(301, 86);
+            this.chkEnableCh_2.Name = "chkEnableCh_2";
+            this.chkEnableCh_2.Size = new System.Drawing.Size(52, 23);
+            this.chkEnableCh_2.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled;
+            this.chkEnableCh_2.TabIndex = 2;
+            // 
+            // chkEnableCh_3
+            // 
+            // 
+            // 
+            // 
+            this.chkEnableCh_3.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square;
+            this.chkEnableCh_3.Location = new System.Drawing.Point(301, 123);
+            this.chkEnableCh_3.Name = "chkEnableCh_3";
+            this.chkEnableCh_3.Size = new System.Drawing.Size(52, 23);
+            this.chkEnableCh_3.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled;
+            this.chkEnableCh_3.TabIndex = 2;
+            // 
+            // chkEnableCh_4
+            // 
+            // 
+            // 
+            // 
+            this.chkEnableCh_4.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square;
+            this.chkEnableCh_4.Location = new System.Drawing.Point(301, 160);
+            this.chkEnableCh_4.Name = "chkEnableCh_4";
+            this.chkEnableCh_4.Size = new System.Drawing.Size(52, 23);
+            this.chkEnableCh_4.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled;
+            this.chkEnableCh_4.TabIndex = 2;
+            // 
+            // chkEnableCh_5
+            // 
+            // 
+            // 
+            // 
+            this.chkEnableCh_5.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square;
+            this.chkEnableCh_5.Location = new System.Drawing.Point(301, 197);
+            this.chkEnableCh_5.Name = "chkEnableCh_5";
+            this.chkEnableCh_5.Size = new System.Drawing.Size(52, 23);
+            this.chkEnableCh_5.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled;
+            this.chkEnableCh_5.TabIndex = 2;
+            // 
+            // chkEnableCh_6
+            // 
+            // 
+            // 
+            // 
+            this.chkEnableCh_6.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square;
+            this.chkEnableCh_6.Location = new System.Drawing.Point(301, 234);
+            this.chkEnableCh_6.Name = "chkEnableCh_6";
+            this.chkEnableCh_6.Size = new System.Drawing.Size(52, 23);
+            this.chkEnableCh_6.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled;
+            this.chkEnableCh_6.TabIndex = 2;
+            // 
+            // chkEnableCh_7
+            // 
+            // 
+            // 
+            // 
+            this.chkEnableCh_7.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square;
+            this.chkEnableCh_7.Location = new System.Drawing.Point(301, 271);
+            this.chkEnableCh_7.Name = "chkEnableCh_7";
+            this.chkEnableCh_7.Size = new System.Drawing.Size(52, 23);
+            this.chkEnableCh_7.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled;
+            this.chkEnableCh_7.TabIndex = 2;
+            // 
+            // chkEnableCh_8
+            // 
+            // 
+            // 
+            // 
+            this.chkEnableCh_8.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square;
+            this.chkEnableCh_8.Location = new System.Drawing.Point(301, 308);
+            this.chkEnableCh_8.Name = "chkEnableCh_8";
+            this.chkEnableCh_8.Size = new System.Drawing.Size(52, 23);
+            this.chkEnableCh_8.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled;
+            this.chkEnableCh_8.TabIndex = 2;
+            // 
+            // ProductForm
+            // 
+            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.ClientSize = new System.Drawing.Size(382, 375);
+            this.Controls.Add(this.chkEnableCh_8);
+            this.Controls.Add(this.chkEnableCh_7);
+            this.Controls.Add(this.chkEnableCh_6);
+            this.Controls.Add(this.chkEnableCh_5);
+            this.Controls.Add(this.chkEnableCh_4);
+            this.Controls.Add(this.chkEnableCh_3);
+            this.Controls.Add(this.chkEnableCh_2);
+            this.Controls.Add(this.chkEnableCh_1);
+            this.Controls.Add(this.labelX8);
+            this.Controls.Add(this.labelX7);
+            this.Controls.Add(this.labelX6);
+            this.Controls.Add(this.labelX5);
+            this.Controls.Add(this.labelX4);
+            this.Controls.Add(this.labelX3);
+            this.Controls.Add(this.labelX2);
+            this.Controls.Add(this.labelX1);
+            this.Controls.Add(this.txtbProd_8);
+            this.Controls.Add(this.txtbProd_7);
+            this.Controls.Add(this.txtbProd_6);
+            this.Controls.Add(this.txtbProd_5);
+            this.Controls.Add(this.txtbProd_4);
+            this.Controls.Add(this.txtbProd_3);
+            this.Controls.Add(this.txtbProd_2);
+            this.Controls.Add(this.txtbProd_1);
+            this.Name = "ProductForm";
+            this.Text = "ProductForm";
+            this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.ProductForm_FormClosed);
+            this.Load += new System.EventHandler(this.ProductForm_Load);
+            this.ResumeLayout(false);
+
+        }
+
+        #endregion
+
+        private DevComponents.DotNetBar.Controls.TextBoxX txtbProd_1;
+        private DevComponents.DotNetBar.Controls.TextBoxX txtbProd_2;
+        private DevComponents.DotNetBar.LabelX labelX1;
+        private DevComponents.DotNetBar.Controls.TextBoxX txtbProd_3;
+        private DevComponents.DotNetBar.Controls.TextBoxX txtbProd_4;
+        private DevComponents.DotNetBar.Controls.TextBoxX txtbProd_5;
+        private DevComponents.DotNetBar.Controls.TextBoxX txtbProd_6;
+        private DevComponents.DotNetBar.Controls.TextBoxX txtbProd_7;
+        private DevComponents.DotNetBar.Controls.TextBoxX txtbProd_8;
+        private DevComponents.DotNetBar.LabelX labelX2;
+        private DevComponents.DotNetBar.LabelX labelX3;
+        private DevComponents.DotNetBar.LabelX labelX4;
+        private DevComponents.DotNetBar.LabelX labelX5;
+        private DevComponents.DotNetBar.LabelX labelX6;
+        private DevComponents.DotNetBar.LabelX labelX7;
+        private DevComponents.DotNetBar.LabelX labelX8;
+        private DevComponents.DotNetBar.Controls.CheckBoxX chkEnableCh_1;
+        private DevComponents.DotNetBar.Controls.CheckBoxX chkEnableCh_2;
+        private DevComponents.DotNetBar.Controls.CheckBoxX chkEnableCh_3;
+        private DevComponents.DotNetBar.Controls.CheckBoxX chkEnableCh_4;
+        private DevComponents.DotNetBar.Controls.CheckBoxX chkEnableCh_5;
+        private DevComponents.DotNetBar.Controls.CheckBoxX chkEnableCh_6;
+        private DevComponents.DotNetBar.Controls.CheckBoxX chkEnableCh_7;
+        private DevComponents.DotNetBar.Controls.CheckBoxX chkEnableCh_8;
+    }
+}

+ 66 - 0
tps/TpsLabStudio/ProductForm.cs

@@ -0,0 +1,66 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+
+namespace Tps_LQ_Transmitter
+{
+    public partial class ProductForm : Form
+    {
+        public ProductForm()
+        {
+            InitializeComponent();
+        }
+
+        private void ProductForm_Load(object sender, EventArgs e)
+        {
+            if (FrmMain.ProductSeries!=null)
+            {
+                for (int i = 0; i < FrmMain.ProductSeries.Length; i++)
+                {
+                    if (i == 0)
+                        txtbProd_1.Text = FrmMain.ProductSeries[0];
+                    if (i == 1)
+                        txtbProd_2.Text = FrmMain.ProductSeries[1];
+                    if (i == 2)
+                        txtbProd_3.Text = FrmMain.ProductSeries[2];
+                    if (i == 3)
+                        txtbProd_4.Text = FrmMain.ProductSeries[3];
+                    if (i == 4)
+                        txtbProd_5.Text = FrmMain.ProductSeries[4];
+                    if (i == 5)
+                        txtbProd_6.Text = FrmMain.ProductSeries[5];
+                    if (i == 6)
+                        txtbProd_7.Text = FrmMain.ProductSeries[6];
+                    if (i == 7)
+                        txtbProd_8.Text = FrmMain.ProductSeries[7];
+                }
+            }
+            chkEnableCh_1.Checked = FrmMain.ProdEnabCh[0];
+            chkEnableCh_2.Checked = FrmMain.ProdEnabCh[1];
+            chkEnableCh_3.Checked = FrmMain.ProdEnabCh[2];
+            chkEnableCh_4.Checked = FrmMain.ProdEnabCh[3];
+            chkEnableCh_5.Checked = FrmMain.ProdEnabCh[4];
+            chkEnableCh_6.Checked = FrmMain.ProdEnabCh[5];
+            chkEnableCh_7.Checked = FrmMain.ProdEnabCh[6];
+            chkEnableCh_8.Checked = FrmMain.ProdEnabCh[7];
+        }
+
+        private void ProductForm_FormClosed(object sender, FormClosedEventArgs e)
+        {
+            FrmMain.ProdEnabCh[0] = chkEnableCh_1.Checked;
+            FrmMain.ProdEnabCh[1] = chkEnableCh_2.Checked;
+            FrmMain.ProdEnabCh[2] = chkEnableCh_3.Checked;
+            FrmMain.ProdEnabCh[3] = chkEnableCh_4.Checked;
+            FrmMain.ProdEnabCh[4] = chkEnableCh_5.Checked;
+            FrmMain.ProdEnabCh[5] = chkEnableCh_6.Checked;
+            FrmMain.ProdEnabCh[6] = chkEnableCh_7.Checked;
+            FrmMain.ProdEnabCh[7] = chkEnableCh_8.Checked; 
+        }
+    }
+}

+ 120 - 0
tps/TpsLabStudio/ProductForm.resx

@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>

+ 9 - 0
tps/TpsLabStudio/TpsLabStudio.csproj

@@ -143,6 +143,12 @@
     <Compile Include="models\HarmonicSuppression.cs" />
     <Compile Include="models\BaseModel.cs" />
     <Compile Include="models\VoltAndCurrent.cs" />
+    <Compile Include="ProductForm.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="ProductForm.Designer.cs">
+      <DependentUpon>ProductForm.cs</DependentUpon>
+    </Compile>
     <Compile Include="Properties\AssemblyInfo.cs" />
     <Compile Include="views\FrmDevice.cs">
       <SubType>Form</SubType>
@@ -162,6 +168,9 @@
     <EmbeddedResource Include="FrmMain.resx">
       <DependentUpon>FrmMain.cs</DependentUpon>
     </EmbeddedResource>
+    <EmbeddedResource Include="ProductForm.resx">
+      <DependentUpon>ProductForm.cs</DependentUpon>
+    </EmbeddedResource>
     <EmbeddedResource Include="Properties\Resources.resx">
       <Generator>ResXFileCodeGenerator</Generator>
       <LastGenOutput>Resources.Designer.cs</LastGenOutput>

BIN
tps/TpsLabStudio/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache


+ 1 - 1
tps/TpsLabStudio/obj/Debug/TpsLabStudio.csproj.CoreCompileInputs.cache

@@ -1 +1 @@
-60fbec6b54fa85610b87ef640925469373f3f35d
+1c72fbb545dfed1eb14acec082881799f1aefbe6

+ 1 - 0
tps/TpsLabStudio/obj/Debug/TpsLabStudio.csproj.FileListAbsolute.txt

@@ -180,3 +180,4 @@ E:\LqTest\TpsLabStudio_LTS\tps\TpsLabStudio\obj\Debug\Tps_LQ_Transmitter.dll
 E:\LqTest\TpsLabStudio_LTS\tps\TpsLabStudio\obj\Debug\Tps_LQ_Transmitter.pdb
 D:\lqCode\TpsLabStudio_LTS\exe\apps\Tps_LQ_Transmitter\config\测试#常温测试#9B发射机-FSQ-8.xlsx
 D:\lqCode\TpsLabStudio_LTS\tps\TpsLabStudio\obj\Debug\TpsLabStudio.csproj.AssemblyReference.cache
+D:\lqCode\TpsLabStudio_LTS\tps\TpsLabStudio\obj\Debug\Tps_LQ_Transmitter.ProductForm.resources

BIN
tps/TpsLabStudio/obj/Debug/TpsLabStudio.csproj.GenerateResource.cache


BIN
tps/TpsLabStudio/obj/Debug/Tps_LQ_Transmitter.dll


BIN
tps/TpsLabStudio/obj/Debug/Tps_LQ_Transmitter.pdb