按照客户要求将excel导出文件保存为一个条码一条记录,名称为SN_结果_时间.xslx

This commit is contained in:
LL
2025-11-14 17:27:29 +08:00
commit 883060d140
79 changed files with 166110 additions and 0 deletions

18
SLZ_4/App.config Normal file
View File

@@ -0,0 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
</startup>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="HslCommunication" publicKeyToken="3d72ad3b6b5ec0e3" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-12.5.1.0" newVersion="12.5.1.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>

71
SLZ_4/AutoResizeForm.cs Normal file
View File

@@ -0,0 +1,71 @@
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace SLZ_4
{
public class AutoResizeForm : Form
{
private Dictionary<Control, Rectangle> originalRects = new Dictionary<Control, Rectangle>();
private Size originalSize;
public AutoResizeForm()
{
this.Load += (s, e) =>
{
originalSize = this.ClientSize;
StoreOriginalSizes(this);
};
this.Resize += Form_Resize;
}
private void StoreOriginalSizes(Control parent)
{
foreach (Control ctrl in parent.Controls)
{
originalRects[ctrl] = new Rectangle(
ctrl.Left, ctrl.Top, ctrl.Width, ctrl.Height);
if (ctrl.Controls.Count > 0)
StoreOriginalSizes(ctrl);
}
}
private void Form_Resize(object sender, EventArgs e)
{
if (originalSize.Width == 0 || originalSize.Height == 0) return;
float xRatio = (float)ClientSize.Width / originalSize.Width;
float yRatio = (float)ClientSize.Height / originalSize.Height;
foreach (var entry in originalRects)
{
Control ctrl = entry.Key;
Rectangle rect = entry.Value;
ctrl.Left = (int)(rect.Left * xRatio);
ctrl.Top = (int)(rect.Top * yRatio);
ctrl.Width = (int)(rect.Width * xRatio);
ctrl.Height = (int)(rect.Height * yRatio);
// 字体自适应(可选)
if (ctrl.Font != null)
{
if (xRatio > 1 && yRatio > 1)
{
ctrl.Font = new Font(ctrl.Font.FontFamily, ctrl.Font.Size * (float)1.2);
}
else
{
ctrl.Font = new Font(ctrl.Font.FontFamily, ctrl.Font.Size * (float)0.8);
}
}
}
//originalSize.Width = ClientSize.Width;
//originalSize.Height = ClientSize.Height;
}
}
}

447
SLZ_4/Config.cs Normal file
View File

@@ -0,0 +1,447 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace SLZ_4
{
class Config
{
public static void loadConfig()
{
FormMain.form.arrDevParam[0].iPort = 9600;
//FormMain.form.arrDevParam[1].iPort = 9600;
string strRead = FormMain.form.configIni.IniReadValue("Device", "CH1IP", "");
if (strRead != null)
{
FormMain.form.arrDevParam[0].sDevAddr = strRead;
}
strRead = FormMain.form.configIni.IniReadValue("Device", "CH1Port", "");
if (strRead != null && strRead.Length > 0)
{
FormMain.form.arrDevParam[0].iPort = int.Parse(strRead);
}
//strRead = FormMain.form.configIni.IniReadValue("Device", "CH2IP", "");
//if (strRead != null)
//{
// FormMain.form.arrDevParam[1].sDevAddr = strRead;
//}
//strRead = FormMain.form.configIni.IniReadValue("Device", "CH2Port", "");
//if (strRead != null && strRead.Length > 0)
//{
// FormMain.form.arrDevParam[1].iPort = int.Parse(strRead);
//}
//密码信息
strRead = FormMain.form.configIni.IniReadValue("User", "Password", "123456");
if (strRead != null)
{
FormMain.form.logonForm.password = strRead;
}
//操作员
strRead = FormMain.form.configIni.IniReadValue("User", "Operator", "");
if (strRead != null)
{
FormMain.form.strOperator = strRead;
}
}
public static void savePassword(string password)
{
FormMain.form.configIni.IniWriteValue("User", "Password", password);
}
public static void saveOperator(string sOperator)
{
FormMain.form.configIni.IniWriteValue("User", "Operator", sOperator);
}
public static bool saveDevParam(int i)
{
if (i == 0)
{
FormMain.form.configIni.IniWriteValue("Device", "CH1IP", FormMain.form.arrDevParam[i].sDevAddr);
FormMain.form.configIni.IniWriteValue("Device", "CH1Port", FormMain.form.arrDevParam[i].iPort.ToString());
}
else if (i == 1)
{
FormMain.form.configIni.IniWriteValue("Device", "CH2IP", FormMain.form.arrDevParam[i].sDevAddr);
FormMain.form.configIni.IniWriteValue("Device", "CH2Port", FormMain.form.arrDevParam[i].iPort.ToString());
}
return true;
}
public static void loadScanParam()
{
string strRead = FormMain.form.configIni.IniReadValue("Code", "CH1CheckCode", "false");
if (strRead != null && strRead.Length > 0)
{
FormMain.form.arrScanParam[0].bCheckLen = bool.Parse(strRead);
}
strRead = FormMain.form.configIni.IniReadValue("Code", "CH1CodeLength", "0");
if (strRead != null && strRead.Length > 0)
{
FormMain.form.arrScanParam[0].iCodeLength = int.Parse(strRead);
}
strRead = FormMain.form.configIni.IniReadValue("Code", "CH1ScanStart", "false");
if (strRead != null && strRead.Length > 0)
{
FormMain.form.arrScanParam[0].bStart = bool.Parse(strRead);
}
strRead = FormMain.form.configIni.IniReadValue("Code", "CH2CheckCode", "false");
if (strRead != null && strRead.Length > 0)
{
FormMain.form.arrScanParam[1].bCheckLen = bool.Parse(strRead);
}
strRead = FormMain.form.configIni.IniReadValue("Code", "CH2CodeLength", "0");
if (strRead != null && strRead.Length > 0)
{
FormMain.form.arrScanParam[1].iCodeLength = int.Parse(strRead);
}
strRead = FormMain.form.configIni.IniReadValue("Code", "CH2ScanStart", "false");
if (strRead != null && strRead.Length > 0)
{
FormMain.form.arrScanParam[1].bStart = bool.Parse(strRead);
}
}
public static bool saveScanParam(int i)
{
if (i == 0)
{
FormMain.form.configIni.IniWriteValue("Code", "CH1CheckCode", FormMain.form.arrScanParam[i].bCheckLen.ToString());
FormMain.form.configIni.IniWriteValue("Code", "CH1CodeLength", FormMain.form.arrScanParam[i].iCodeLength.ToString());
FormMain.form.configIni.IniWriteValue("Code", "CH1ScanStart", FormMain.form.arrScanParam[i].bStart.ToString());
}
else if (i == 1)
{
FormMain.form.configIni.IniWriteValue("Code", "CH2CheckCode", FormMain.form.arrScanParam[i].bCheckLen.ToString());
FormMain.form.configIni.IniWriteValue("Code", "CH2CodeLength", FormMain.form.arrScanParam[i].iCodeLength.ToString());
FormMain.form.configIni.IniWriteValue("Code", "CH2ScanStart", FormMain.form.arrScanParam[i].bStart.ToString());
}
return true;
}
public static void loadScanner()
{
string strRead = FormMain.form.configIni.IniReadValue("Scanner", "Number", "1");
if (strRead != null && strRead.Length > 0)
{
FormMain.form.scannerForm.scanNum = int.Parse(strRead);
}
strRead = FormMain.form.configIni.IniReadValue("Scanner", "ScanType", "0");
if (strRead != null && strRead.Length > 0)
{
FormMain.form.scannerForm.scanType = int.Parse(strRead);
}
//扫码枪1
FormMain.form.arrScannerObj[0].sPort = "";
FormMain.form.arrScannerObj[0].iBaudrate = 9600;
strRead = FormMain.form.configIni.IniReadValue("Scanner", "Port1", "");
if (strRead != null && strRead.Length > 0)
{
FormMain.form.arrScannerObj[0].sPort = strRead;
}
strRead = FormMain.form.configIni.IniReadValue("Scanner", "Baudrate1", "9600");
if (strRead != null && strRead.Length > 0)
{
FormMain.form.arrScannerObj[0].iBaudrate = int.Parse(strRead);
}
strRead = FormMain.form.configIni.IniReadValue("Scanner", "NetPort1", "");
if (strRead != null && strRead.Length > 0)
{
FormMain.form.arrScannerObj[0].iPort = int.Parse(strRead);
}
strRead = FormMain.form.configIni.IniReadValue("Scanner", "IpAddress1", "");
if (strRead != null && strRead.Length > 0)
{
FormMain.form.arrScannerObj[0].sIpaddr = strRead;
}
//扫码枪2
FormMain.form.arrScannerObj[1].sPort = "";
FormMain.form.arrScannerObj[1].iBaudrate = 9600;
strRead = FormMain.form.configIni.IniReadValue("Scanner", "Port2", "");
if (strRead != null && strRead.Length > 0)
{
FormMain.form.arrScannerObj[1].sPort = strRead;
}
strRead = FormMain.form.configIni.IniReadValue("Scanner", "Baudrate2", "9600");
if (strRead != null && strRead.Length > 0)
{
FormMain.form.arrScannerObj[1].iBaudrate = int.Parse(strRead);
}
strRead = FormMain.form.configIni.IniReadValue("Scanner", "NetPort2", "");
if (strRead != null && strRead.Length > 0)
{
FormMain.form.arrScannerObj[1].iPort = int.Parse(strRead);
}
strRead = FormMain.form.configIni.IniReadValue("Scanner", "IpAddress2", "");
if (strRead != null && strRead.Length > 0)
{
FormMain.form.arrScannerObj[1].sIpaddr = strRead;
}
}
/// <summary>
/// 保存扫码枪信息
/// </summary>
/// <param name="i">序号</param>
public static void saveScanner(int i)
{
if (i == 0)
{
FormMain.form.configIni.IniWriteValue("Scanner", "Port1", FormMain.form.arrScannerObj[i].sPort);
FormMain.form.configIni.IniWriteValue("Scanner", "Baudrate1", FormMain.form.arrScannerObj[i].iBaudrate.ToString());
FormMain.form.configIni.IniWriteValue("Scanner", "NetPort1", FormMain.form.arrScannerObj[i].iPort.ToString());
FormMain.form.configIni.IniWriteValue("Scanner", "IpAddress1", FormMain.form.arrScannerObj[i].sIpaddr);
}
else if (i == 1)
{
FormMain.form.configIni.IniWriteValue("Scanner", "Port2", FormMain.form.arrScannerObj[i].sPort);
FormMain.form.configIni.IniWriteValue("Scanner", "Baudrate2", FormMain.form.arrScannerObj[i].iBaudrate.ToString());
FormMain.form.configIni.IniWriteValue("Scanner", "NetPort2", FormMain.form.arrScannerObj[i].iPort.ToString());
FormMain.form.configIni.IniWriteValue("Scanner", "IpAddress2", FormMain.form.arrScannerObj[i].sIpaddr);
}
}
public static void saveScanNumber(int iNum)
{
FormMain.form.configIni.IniWriteValue("Scanner", "Number", iNum.ToString());
}
public static void saveScanType(int iType)
{
FormMain.form.configIni.IniWriteValue("Scanner", "ScanType", iType.ToString());
}
public static void loadStorage(ref STORAGE_PARAM pParam)
{
string strRead = FormMain.form.configIni.IniReadValue("Storage", "ExportTXT", "true");
if (strRead != null && strRead.Length > 0)
{
pParam.bTxt = bool.Parse(strRead);
}
else
{
pParam.bTxt = true;
}
strRead = FormMain.form.configIni.IniReadValue("Storage", "ExportCSV", "false");
if (strRead != null && strRead.Length > 0)
{
pParam.bCSV = bool.Parse(strRead);
}
strRead = FormMain.form.configIni.IniReadValue("Storage", "ExportExcel", "false");
if (strRead != null && strRead.Length > 0)
{
pParam.bExcel = bool.Parse(strRead);
}
strRead = FormMain.form.configIni.IniReadValue("Storage", "ExportSQL", "false");
if (strRead != null && strRead.Length > 0)
{
pParam.bSQL = bool.Parse(strRead);
}
strRead = FormMain.form.configIni.IniReadValue("Storage", "StoragePath", "");
if (strRead != null && strRead.Length > 0)
{
pParam.sPath = strRead;
}
else
{
pParam.sPath = AppDomain.CurrentDomain.BaseDirectory + "Storage";
}
}
public static void saveStorage(STORAGE_PARAM param)
{
FormMain.form.configIni.IniWriteValue("Storage", "ExportTXT", param.bTxt.ToString());
FormMain.form.configIni.IniWriteValue("Storage", "ExportCSV", param.bCSV.ToString());
FormMain.form.configIni.IniWriteValue("Storage", "ExportExcel", param.bExcel.ToString());
FormMain.form.configIni.IniWriteValue("Storage", "ExportSQL", param.bSQL.ToString());
FormMain.form.configIni.IniWriteValue("Storage", "StoragePath", param.sPath);
}
public static void loadPrint(ref PRINTER_PARAM pInfo)
{
string strRead = FormMain.form.configIni.IniReadValue("Printer", "PrintEnable", "false");
if (strRead != null && strRead.Length > 0)
{
pInfo.bPrint = bool.Parse(strRead);
}
strRead = FormMain.form.configIni.IniReadValue("Printer", "PrintName", "");
if (strRead != null)
{
pInfo.printName = strRead;
}
strRead = FormMain.form.configIni.IniReadValue("Printer", "PrintModel", "");
if (strRead != null)
{
pInfo.printModel = strRead;
}
strRead = FormMain.form.configIni.IniReadValue("Printer", "CodePre", "型号RSFP-76*64A-4*8Q-BL-JS-流水号HT");
if (strRead != null && strRead.Length > 0)
{
pInfo.codePre = strRead;
}
pInfo.snPre = DateTime.Now.ToString("yyyyMMdd");
strRead = FormMain.form.configIni.IniReadValue("Printer", "SN", "1");
if (strRead != null && strRead.Length > 0)
{
pInfo.sn = int.Parse(strRead);
}
strRead = FormMain.form.configIni.IniReadValue("Printer", "CodeSuffix", "-气密");
if (strRead != null && strRead.Length > 0)
{
pInfo.codeSuffix = strRead;
}
strRead = FormMain.form.configIni.IniReadValue("Printer", "CodeSuffix2", "PASS");
if (strRead != null && strRead.Length > 0)
{
pInfo.codeSuffix2 = strRead;
}
}
public static void savePrint(ref PRINTER_PARAM pInfo)
{
FormMain.form.configIni.IniWriteValue("Printer", "PrintEnable", pInfo.bPrint.ToString());
FormMain.form.configIni.IniWriteValue("Printer", "PrintName", pInfo.printName);
FormMain.form.configIni.IniWriteValue("Printer", "PrintModel", pInfo.printModel);
FormMain.form.configIni.IniWriteValue("Printer", "CodePre", pInfo.codePre);
FormMain.form.configIni.IniWriteValue("Printer", "SN", pInfo.sn.ToString());
FormMain.form.configIni.IniWriteValue("Printer", "CodeSuffix", pInfo.codeSuffix);
FormMain.form.configIni.IniWriteValue("Printer", "CodeSuffix2", pInfo.codeSuffix2);
}
public static void savePrintSN(ref PRINTER_PARAM pInfo) //保存SN号
{
FormMain.form.configIni.IniWriteValue("Printer", "SNDate", pInfo.snPre);
FormMain.form.configIni.IniWriteValue("Printer", "SN", pInfo.sn.ToString());
}
public static void loadPLC(ref PLC_PARAM plcParam)
{
string strRead = FormMain.form.configIni.IniReadValue("PLC", "Port", "");
plcParam.sPort = "";
if (strRead != null && strRead.Length > 0)
{
plcParam.sPort = strRead;
}
strRead = FormMain.form.configIni.IniReadValue("PLC", "Baudrate", "9600");
if (strRead != null && strRead.Length > 0)
{
plcParam.iBaudrate = int.Parse(strRead);
}
}
public static void savePLC(ref PLC_PARAM plcParam)
{
FormMain.form.configIni.IniWriteValue("PLC", "Port", plcParam.sPort);
FormMain.form.configIni.IniWriteValue("PLC", "Baudrate", plcParam.iBaudrate.ToString());
}
public static string loadMes(ref MES_PARAM mesParam)
{
string strRead = FormMain.form.configIni.IniReadValue("MES", "Url", "");
if (strRead != null && strRead.Length > 0)
{
mesParam.sUrl = strRead;
}
strRead = FormMain.form.configIni.IniReadValue("MES", "Port", "");
if (strRead != null && strRead.Length > 0)
{
mesParam.iPort = int.Parse(strRead);
}
strRead = FormMain.form.configIni.IniReadValue("MES", "MesCheckIn", "false");
if (strRead != null && strRead.Length > 0)
{
mesParam.bCheckIn = bool.Parse(strRead);
}
strRead = FormMain.form.configIni.IniReadValue("MES", "MesCheckOut", "false");
if (strRead != null && strRead.Length > 0)
{
mesParam.bCheckOut = bool.Parse(strRead);
}
return strRead;
}
public static void saveMes(ref MES_PARAM mesParam)
{
FormMain.form.configIni.IniWriteValue("MES", "Url", mesParam.sUrl);
FormMain.form.configIni.IniWriteValue("MES", "Port", mesParam.iPort.ToString());
FormMain.form.configIni.IniWriteValue("MES", "MesCheckIn", mesParam.bCheckIn.ToString());
FormMain.form.configIni.IniWriteValue("MES", "MesCheckOut", mesParam.bCheckOut.ToString());
}
public static void loadCount(ref STATISTICS_INFO statisticsInfo)
{
string strRead = FormMain.form.configIni.IniReadValue("Statistics", "Count", "");
if (strRead != null && strRead.Length > 0)
{
statisticsInfo.iCount = int.Parse(strRead);
}
strRead = FormMain.form.configIni.IniReadValue("Statistics", "Pass", "");
if (strRead != null && strRead.Length > 0)
{
statisticsInfo.iPass = int.Parse(strRead);
}
strRead = FormMain.form.configIni.IniReadValue("Statistics", "Failed", "");
if (strRead != null && strRead.Length > 0)
{
statisticsInfo.iFailed = int.Parse(strRead);
}
statisticsInfo.iCount = 0;
statisticsInfo.iPass = 0;
statisticsInfo.iFailed = 0;
string strTemp = "";
for (int i = 0; i < statisticsInfo.ch.Length; i++)
{
statisticsInfo.ch[i].iCount = 0;
statisticsInfo.ch[i].iPass = 0;
statisticsInfo.ch[i].iFailed = 0;
strTemp = "Statistics_CH" + (i + 1).ToString();
strRead = FormMain.form.configIni.IniReadValue(strTemp, "Count", "");
if (strRead != null && strRead.Length > 0)
{
statisticsInfo.ch[i].iCount = int.Parse(strRead);
statisticsInfo.iCount += int.Parse(strRead);
}
strRead = FormMain.form.configIni.IniReadValue(strTemp, "Pass", "");
if (strRead != null && strRead.Length > 0)
{
statisticsInfo.ch[i].iPass = int.Parse(strRead);
statisticsInfo.iPass += int.Parse(strRead);
}
strRead = FormMain.form.configIni.IniReadValue(strTemp, "Failed", "");
if (strRead != null && strRead.Length > 0)
{
statisticsInfo.ch[i].iFailed = int.Parse(strRead);
statisticsInfo.iFailed += int.Parse(strRead);
}
}
}
public static void setCount(ref STATISTICS_INFO statisticsInfo)
{
FormMain.form.configIni.IniWriteValue("Statistics", "Count", statisticsInfo.iCount.ToString());
FormMain.form.configIni.IniWriteValue("Statistics", "Pass", statisticsInfo.iPass.ToString());
FormMain.form.configIni.IniWriteValue("Statistics", "Failed", statisticsInfo.iFailed.ToString());
string strTemp = "";
for (int i = 0; i < statisticsInfo.ch.Length; i++)
{
strTemp = "Statistics_CH" + (i + 1).ToString();
FormMain.form.configIni.IniWriteValue(strTemp, "Count", statisticsInfo.ch[i].iCount.ToString());
FormMain.form.configIni.IniWriteValue(strTemp, "Pass", statisticsInfo.ch[i].iPass.ToString());
FormMain.form.configIni.IniWriteValue(strTemp, "Failed", statisticsInfo.ch[i].iFailed.ToString());
}
}
}
}

340
SLZ_4/ConfigDevice.Designer.cs generated Normal file
View File

@@ -0,0 +1,340 @@

namespace SLZ_4
{
partial class ConfigDevice
{
/// <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()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ConfigDevice));
this.label1 = new System.Windows.Forms.Label();
this.localIP = new System.Windows.Forms.Label();
this.buttonSearch = new System.Windows.Forms.Button();
this.labelPort1 = new System.Windows.Forms.Label();
this.ch1IP = new System.Windows.Forms.Label();
this.commStatus1 = new System.Windows.Forms.Label();
this.label5 = new System.Windows.Forms.Label();
this.label4 = new System.Windows.Forms.Label();
this.label3 = new System.Windows.Forms.Label();
this.labelPort2 = new System.Windows.Forms.Label();
this.ch2IP = new System.Windows.Forms.Label();
this.commStatus2 = new System.Windows.Forms.Label();
this.label8 = new System.Windows.Forms.Label();
this.label9 = new System.Windows.Forms.Label();
this.label10 = new System.Windows.Forms.Label();
this.uiGroupBox1 = new Sunny.UI.UIGroupBox();
this.labelVersion1 = new System.Windows.Forms.Label();
this.label6 = new System.Windows.Forms.Label();
this.uiGroupBox2 = new Sunny.UI.UIGroupBox();
this.labelVersion2 = new System.Windows.Forms.Label();
this.label7 = new System.Windows.Forms.Label();
this.uiGroupBox1.SuspendLayout();
this.uiGroupBox2.SuspendLayout();
this.SuspendLayout();
//
// label1
//
this.label1.AutoSize = true;
this.label1.Location = new System.Drawing.Point(19, 32);
this.label1.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(104, 16);
this.label1.TabIndex = 0;
this.label1.Text = "本机IP地址";
//
// localIP
//
this.localIP.AutoSize = true;
this.localIP.Location = new System.Drawing.Point(155, 32);
this.localIP.Name = "localIP";
this.localIP.Size = new System.Drawing.Size(104, 16);
this.localIP.TabIndex = 1;
this.localIP.Text = "192.168.1.59";
//
// buttonSearch
//
this.buttonSearch.Location = new System.Drawing.Point(309, 24);
this.buttonSearch.Name = "buttonSearch";
this.buttonSearch.Size = new System.Drawing.Size(92, 34);
this.buttonSearch.TabIndex = 2;
this.buttonSearch.Text = "搜索IP";
this.buttonSearch.UseVisualStyleBackColor = true;
this.buttonSearch.Click += new System.EventHandler(this.buttonSearch_Click);
//
// labelPort1
//
this.labelPort1.AutoSize = true;
this.labelPort1.BackColor = System.Drawing.Color.Transparent;
this.labelPort1.Location = new System.Drawing.Point(174, 145);
this.labelPort1.Name = "labelPort1";
this.labelPort1.Size = new System.Drawing.Size(40, 16);
this.labelPort1.TabIndex = 5;
this.labelPort1.Text = "9999";
//
// ch1IP
//
this.ch1IP.AutoSize = true;
this.ch1IP.BackColor = System.Drawing.Color.Transparent;
this.ch1IP.Location = new System.Drawing.Point(174, 94);
this.ch1IP.Name = "ch1IP";
this.ch1IP.Size = new System.Drawing.Size(104, 16);
this.ch1IP.TabIndex = 4;
this.ch1IP.Text = "192.168.1.59";
//
// commStatus1
//
this.commStatus1.AutoSize = true;
this.commStatus1.BackColor = System.Drawing.Color.Transparent;
this.commStatus1.Font = new System.Drawing.Font("宋体", 15F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.commStatus1.Location = new System.Drawing.Point(174, 49);
this.commStatus1.Name = "commStatus1";
this.commStatus1.Size = new System.Drawing.Size(29, 20);
this.commStatus1.TabIndex = 3;
this.commStatus1.Text = "OK";
//
// label5
//
this.label5.AutoSize = true;
this.label5.BackColor = System.Drawing.Color.Transparent;
this.label5.Location = new System.Drawing.Point(59, 145);
this.label5.Name = "label5";
this.label5.Size = new System.Drawing.Size(64, 16);
this.label5.TabIndex = 2;
this.label5.Text = "端口号:";
//
// label4
//
this.label4.AutoSize = true;
this.label4.BackColor = System.Drawing.Color.Transparent;
this.label4.Location = new System.Drawing.Point(59, 97);
this.label4.Name = "label4";
this.label4.Size = new System.Drawing.Size(64, 16);
this.label4.TabIndex = 1;
this.label4.Text = "IP地址:";
//
// label3
//
this.label3.AutoSize = true;
this.label3.BackColor = System.Drawing.Color.Transparent;
this.label3.Location = new System.Drawing.Point(59, 49);
this.label3.Name = "label3";
this.label3.Size = new System.Drawing.Size(80, 16);
this.label3.TabIndex = 0;
this.label3.Text = "通讯状态:";
//
// labelPort2
//
this.labelPort2.AutoSize = true;
this.labelPort2.BackColor = System.Drawing.Color.Transparent;
this.labelPort2.Location = new System.Drawing.Point(174, 144);
this.labelPort2.Name = "labelPort2";
this.labelPort2.Size = new System.Drawing.Size(40, 16);
this.labelPort2.TabIndex = 5;
this.labelPort2.Text = "9999";
//
// ch2IP
//
this.ch2IP.AutoSize = true;
this.ch2IP.BackColor = System.Drawing.Color.Transparent;
this.ch2IP.Location = new System.Drawing.Point(174, 93);
this.ch2IP.Name = "ch2IP";
this.ch2IP.Size = new System.Drawing.Size(104, 16);
this.ch2IP.TabIndex = 4;
this.ch2IP.Text = "192.168.1.59";
//
// commStatus2
//
this.commStatus2.AutoSize = true;
this.commStatus2.BackColor = System.Drawing.Color.Transparent;
this.commStatus2.Font = new System.Drawing.Font("宋体", 15F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.commStatus2.Location = new System.Drawing.Point(174, 48);
this.commStatus2.Name = "commStatus2";
this.commStatus2.Size = new System.Drawing.Size(29, 20);
this.commStatus2.TabIndex = 3;
this.commStatus2.Text = "OK";
//
// label8
//
this.label8.AutoSize = true;
this.label8.BackColor = System.Drawing.Color.Transparent;
this.label8.Location = new System.Drawing.Point(59, 144);
this.label8.Name = "label8";
this.label8.Size = new System.Drawing.Size(64, 16);
this.label8.TabIndex = 2;
this.label8.Text = "端口号:";
//
// label9
//
this.label9.AutoSize = true;
this.label9.BackColor = System.Drawing.Color.Transparent;
this.label9.Location = new System.Drawing.Point(59, 93);
this.label9.Name = "label9";
this.label9.Size = new System.Drawing.Size(64, 16);
this.label9.TabIndex = 1;
this.label9.Text = "IP地址:";
//
// label10
//
this.label10.AutoSize = true;
this.label10.BackColor = System.Drawing.Color.Transparent;
this.label10.Location = new System.Drawing.Point(59, 48);
this.label10.Name = "label10";
this.label10.Size = new System.Drawing.Size(80, 16);
this.label10.TabIndex = 0;
this.label10.Text = "通讯状态:";
//
// uiGroupBox1
//
this.uiGroupBox1.Controls.Add(this.labelVersion1);
this.uiGroupBox1.Controls.Add(this.label6);
this.uiGroupBox1.Controls.Add(this.labelPort1);
this.uiGroupBox1.Controls.Add(this.label3);
this.uiGroupBox1.Controls.Add(this.ch1IP);
this.uiGroupBox1.Controls.Add(this.label4);
this.uiGroupBox1.Controls.Add(this.commStatus1);
this.uiGroupBox1.Controls.Add(this.label5);
this.uiGroupBox1.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.uiGroupBox1.Location = new System.Drawing.Point(13, 71);
this.uiGroupBox1.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.uiGroupBox1.MinimumSize = new System.Drawing.Size(1, 1);
this.uiGroupBox1.Name = "uiGroupBox1";
this.uiGroupBox1.Padding = new System.Windows.Forms.Padding(0, 32, 0, 0);
this.uiGroupBox1.Size = new System.Drawing.Size(452, 226);
this.uiGroupBox1.TabIndex = 5;
this.uiGroupBox1.Text = "CH1左通道";
this.uiGroupBox1.TextAlignment = System.Drawing.ContentAlignment.MiddleLeft;
//
// labelVersion1
//
this.labelVersion1.AutoSize = true;
this.labelVersion1.BackColor = System.Drawing.Color.Transparent;
this.labelVersion1.Location = new System.Drawing.Point(174, 192);
this.labelVersion1.Name = "labelVersion1";
this.labelVersion1.Size = new System.Drawing.Size(64, 16);
this.labelVersion1.TabIndex = 7;
this.labelVersion1.Text = "vertion";
//
// label6
//
this.label6.AutoSize = true;
this.label6.BackColor = System.Drawing.Color.Transparent;
this.label6.Location = new System.Drawing.Point(59, 192);
this.label6.Name = "label6";
this.label6.Size = new System.Drawing.Size(80, 16);
this.label6.TabIndex = 6;
this.label6.Text = "软件版本:";
//
// uiGroupBox2
//
this.uiGroupBox2.Controls.Add(this.labelVersion2);
this.uiGroupBox2.Controls.Add(this.label7);
this.uiGroupBox2.Controls.Add(this.labelPort2);
this.uiGroupBox2.Controls.Add(this.label10);
this.uiGroupBox2.Controls.Add(this.ch2IP);
this.uiGroupBox2.Controls.Add(this.label9);
this.uiGroupBox2.Controls.Add(this.commStatus2);
this.uiGroupBox2.Controls.Add(this.label8);
this.uiGroupBox2.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.uiGroupBox2.Location = new System.Drawing.Point(13, 311);
this.uiGroupBox2.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.uiGroupBox2.MinimumSize = new System.Drawing.Size(1, 1);
this.uiGroupBox2.Name = "uiGroupBox2";
this.uiGroupBox2.Padding = new System.Windows.Forms.Padding(0, 32, 0, 0);
this.uiGroupBox2.Size = new System.Drawing.Size(452, 226);
this.uiGroupBox2.TabIndex = 6;
this.uiGroupBox2.Text = "CH2右通道";
this.uiGroupBox2.TextAlignment = System.Drawing.ContentAlignment.MiddleLeft;
//
// labelVersion2
//
this.labelVersion2.AutoSize = true;
this.labelVersion2.BackColor = System.Drawing.Color.Transparent;
this.labelVersion2.Location = new System.Drawing.Point(174, 189);
this.labelVersion2.Name = "labelVersion2";
this.labelVersion2.Size = new System.Drawing.Size(64, 16);
this.labelVersion2.TabIndex = 9;
this.labelVersion2.Text = "vertion";
//
// label7
//
this.label7.AutoSize = true;
this.label7.BackColor = System.Drawing.Color.Transparent;
this.label7.Location = new System.Drawing.Point(59, 189);
this.label7.Name = "label7";
this.label7.Size = new System.Drawing.Size(80, 16);
this.label7.TabIndex = 8;
this.label7.Text = "软件版本:";
//
// ConfigDevice
//
this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 16F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.BackColor = System.Drawing.Color.LightBlue;
this.ClientSize = new System.Drawing.Size(480, 543);
this.Controls.Add(this.uiGroupBox2);
this.Controls.Add(this.uiGroupBox1);
this.Controls.Add(this.buttonSearch);
this.Controls.Add(this.localIP);
this.Controls.Add(this.label1);
this.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.Margin = new System.Windows.Forms.Padding(4);
this.Name = "ConfigDevice";
this.Text = "ConfigDevice";
this.uiGroupBox1.ResumeLayout(false);
this.uiGroupBox1.PerformLayout();
this.uiGroupBox2.ResumeLayout(false);
this.uiGroupBox2.PerformLayout();
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.Label label1;
private System.Windows.Forms.Label localIP;
private System.Windows.Forms.Button buttonSearch;
private System.Windows.Forms.Label labelPort1;
private System.Windows.Forms.Label ch1IP;
private System.Windows.Forms.Label commStatus1;
private System.Windows.Forms.Label label5;
private System.Windows.Forms.Label label4;
private System.Windows.Forms.Label label3;
private System.Windows.Forms.Label labelPort2;
private System.Windows.Forms.Label ch2IP;
private System.Windows.Forms.Label commStatus2;
private System.Windows.Forms.Label label8;
private System.Windows.Forms.Label label9;
private System.Windows.Forms.Label label10;
private Sunny.UI.UIGroupBox uiGroupBox1;
private Sunny.UI.UIGroupBox uiGroupBox2;
private System.Windows.Forms.Label labelVersion1;
private System.Windows.Forms.Label label6;
private System.Windows.Forms.Label labelVersion2;
private System.Windows.Forms.Label label7;
}
}

314
SLZ_4/ConfigDevice.cs Normal file
View File

@@ -0,0 +1,314 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Net;
using System.Net.NetworkInformation;
using System.Net.Sockets;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace SLZ_4
{
public partial class ConfigDevice : Form
{
//UDP广播获取仪器IP地址
private static byte[] data;
static string UDPRecvData;
public bool SocketConn = true;
public ConfigDevice()
{
InitializeComponent();
getlocalIP();
}
public string strlocalIp;
public string getlocalIP()
{
IPAddress localIp = null;
IPAddress[] ipArray;
ipArray = Dns.GetHostAddresses(Dns.GetHostName());
foreach (var item in ipArray)
{
if (IpAddressInRange(item.ToString(), "192.168.1.0", "192.168.1.255"))
{
strlocalIp = item.ToString();
}
}
localIp = ipArray.First(ip => ip.AddressFamily == AddressFamily.InterNetwork);
localIP.Text = strlocalIp;
return strlocalIp;
}
/// <summary>
/// 判断IP地址在不在某个IP地址段
/// </summary>
/// <param name="input">需要判断的IP地址</param>
/// <param name="begin">起始地址</param>
/// <param name="ends">结束地址</param>
/// <returns></returns>
public static bool IpAddressInRange(string input, string begin, string ends)
{
uint current = IPToID(input);
return current >= IPToID(begin) && current <= IPToID(ends);
}
private static uint IPToID(string addr)
{
if (!IPAddress.TryParse(addr, out var ip))
{
return 0;
}
byte[] bInt = ip.GetAddressBytes();
if (BitConverter.IsLittleEndian)
{
Array.Reverse(bInt);
}
return BitConverter.ToUInt32(bInt, 0);
}
private static int BROADCAST_PORT = 9999;
static List<IPAddress> GetActiveNICsIP()
{
List<IPAddress> ips = new List<IPAddress>();
foreach (NetworkInterface nic in NetworkInterface.GetAllNetworkInterfaces())
{
if (nic.OperationalStatus == OperationalStatus.Up &&
!nic.Description.Contains("Loopback"))
{
foreach (UnicastIPAddressInformation ip in nic.GetIPProperties().UnicastAddresses)
{
if (ip.Address.AddressFamily == AddressFamily.InterNetwork)
{
ips.Add(ip.Address);
}
}
}
}
return ips;
}
// 为每个网卡创建独立接收线程
// private static List<Thread> receiveThreads = new List<Thread>();
static void SendBroadcast(IPAddress localIP, byte[] data)
{
using (Socket sender = new Socket(AddressFamily.InterNetwork,
SocketType.Dgram, ProtocolType.Udp))
{
//发送数据
try
{
sender.SetSocketOption(SocketOptionLevel.Socket,
SocketOptionName.Broadcast, 1);
sender.Bind(new IPEndPoint(localIP, 0));
IPEndPoint broadcastEP = new IPEndPoint(IPAddress.Broadcast, BROADCAST_PORT);
sender.SendTo(data, broadcastEP);
Console.WriteLine($"已通过 {localIP} 发送广播");
//FormMain.form.wa.InsertWarningData(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), "-", "发送广播");
}
catch (Exception ex)
{
Console.WriteLine($"{localIP} 发送失败: {ex.Message}");
FormMain.form.wa.InsertWarningData(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), "-", "发送失败:" + ex.Message);
}
//接受数据
byte[] buffer = new byte[1024];
sender.ReceiveTimeout = 2000;
while (true)
{
try
{
EndPoint remoteEP = new IPEndPoint(IPAddress.Any, 0);
int bytesRead = sender.ReceiveFrom(buffer, ref remoteEP);
string message = System.Text.Encoding.UTF8.GetString(buffer, 0, bytesRead);
Console.WriteLine($"[{localIP}] 接收到来自 {remoteEP}: {message}");
UDPRecvData += message;
UDPRecvData += "\n";
}
catch (SocketException)
{
break;/* 超时处理 */
}
catch (Exception ex)
{
Console.WriteLine($"[{localIP}] 接收错误: {ex.Message}");
FormMain.form.wa.InsertWarningData(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), "-", "接收错误" + ex.Message);
}
}
}
}
/// <summary>
/// UDP广播获取仪器IP地址
/// </summary>
public void UDPBroadcast()
{
try
{
UDPRecvData = "";
// 获取所有可用网卡IP
List<IPAddress> localIPs = GetActiveNICsIP();
if (localIPs.Count == 0)
{
Console.WriteLine("No active network interfaces found");
FormMain.form.wa.InsertWarningData(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), "-", "没有网络");
}
data = Encoding.ASCII.GetBytes("hello,udp server");
// 发送广播
foreach (IPAddress localIP in localIPs)
{
Thread t = new Thread(() => SendBroadcast(localIP, data));
t.IsBackground = true;
t.Start();
}
}
catch (Exception ex)
{
//MessageBox.Show("UDP广播:" + ex.Message);
FormMain.form.wa.InsertWarningData(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), "-", "UDP广播:" + ex.Message);
}
//创建定时器
System.Timers.Timer timer = new System.Timers.Timer(3000);
timer.Elapsed += (sender, e) => { UDP_Parse(); };
timer.AutoReset = false;
timer.Start();
}
public void UDP_Parse()
{
try
{
if (UDPRecvData.Length > 2)
{
UDPRecvData = UDPRecvData.Substring(0, UDPRecvData.Length - 1);
}
if (!String.IsNullOrEmpty(UDPRecvData))
{
FormMain.form.arrDevParam[0].iSwitch = 0;
FormMain.form.arrDevParam[1].iSwitch = 0;
string[] IPData = UDPRecvData.Split('\n');
IPData = IPData.Distinct().ToArray(); //去掉重复
int ip_num = IPData.Length;
if (ip_num > 0)
{
for (int i = 0; i < ip_num; i++)
{
string[] ipaddress = IPData[i].Split(':');
int ch_station = Convert.ToInt32(ipaddress[0]);
switch (ch_station)
{
case 1:
if (ipaddress[1] != FormMain.form.arrDevParam[0].sDevAddr)
{
FormMain.form.arrDevParam[0].sDevAddr = ipaddress[1];
FormMain.form.arrDevParam[0].iSlaveId = ch_station;
FormMain.form.deleteDevObj(0);
FormMain.form.arrDevParam[0].iSwitch = 1;
}
break;
case 2:
if (ipaddress[1] != FormMain.form.arrDevParam[1].sDevAddr)
{
FormMain.form.arrDevParam[1].sDevAddr = ipaddress[1];
FormMain.form.arrDevParam[1].iSlaveId = ch_station;
FormMain.form.deleteDevObj(1);
FormMain.form.arrDevParam[1].iSwitch = 1;
}
break;
default:
break;
}
}
}
}
}
catch (Exception ex)
{
//MessageBox.Show("UDP:" + ex.Message);
FormMain.form.wa.InsertWarningData(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), "-", "UDP:" + ex.Message);
}
bool bSwitch = false;
//删除设备
for (int i = 0; i < 2; i++)
{
if (FormMain.form.arrDevParam[i].iSwitch == 1)
{
FormMain.form.deleteDevObj(i);
bSwitch = true;
}
}
if (bSwitch)
{
Thread.Sleep(200);
//添加设备
for (int i = 0; i < 2; i++)
{
if (FormMain.form.arrDevParam[i].iSwitch == 1)
{
Config.saveDevParam(i);
FormMain.form.addDevObj(i);
}
}
}
if (FormMain.form.cfgDevForm.Visible)
{
Invoke((MethodInvoker)delegate
{
showDevInfo();
});
}
}
public void showDevInfo()
{
if (FormMain.form.arrDevObj[0] != null)
{
commStatus1.Text = FormMain.form.arrDevObj[0].bStatus ? "已连接" : "未连接";
commStatus1.BackColor = FormMain.form.arrDevObj[0].bStatus ? Color.Green : Color.Red;
labelVersion1.Text = FormMain.form.arrDevObj[0].versionInfo.sSoftWareVersion;
}
else
{
commStatus1.Text = "";
commStatus1.BackColor = Color.Transparent;
}
ch1IP.Text = FormMain.form.arrDevParam[0].sDevAddr;
if (FormMain.form.arrDevObj[1] != null)
{
commStatus2.Text = FormMain.form.arrDevObj[1].bStatus ? "已连接" : "未连接";
commStatus2.BackColor = FormMain.form.arrDevObj[1].bStatus ? Color.Green : Color.Red;
labelVersion2.Text = FormMain.form.arrDevObj[1].versionInfo.sSoftWareVersion;
}
else
{
commStatus2.Text = "";
commStatus2.BackColor = Color.Transparent;
}
ch2IP.Text = FormMain.form.arrDevParam[1].sDevAddr;
buttonSearch.Enabled = true;
}
private void buttonSearch_Click(object sender, EventArgs e)
{
buttonSearch.Enabled = false;
UDPBroadcast();
}
}
}

502
SLZ_4/ConfigDevice.resx Normal file
View File

@@ -0,0 +1,502 @@
<?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>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
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
rkJggg==
</value>
</data>
</root>

196
SLZ_4/ConfigDevicePort.Designer.cs generated Normal file
View File

@@ -0,0 +1,196 @@

namespace SLZ_4
{
partial class ConfigDevicePort
{
/// <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()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ConfigDevicePort));
this.uiGroupBox1 = new Sunny.UI.UIGroupBox();
this.label1 = new System.Windows.Forms.Label();
this.CodePort = new System.Windows.Forms.ComboBox();
this.label2 = new System.Windows.Forms.Label();
this.label3 = new System.Windows.Forms.Label();
this.CodeBaud = new System.Windows.Forms.ComboBox();
this.CodeIsComm = new System.Windows.Forms.Label();
this.CodeCon = new System.Windows.Forms.Button();
this.CodeBreak = new System.Windows.Forms.Button();
this.CodeRefresh = new System.Windows.Forms.Button();
this.uiGroupBox1.SuspendLayout();
this.SuspendLayout();
//
// uiGroupBox1
//
this.uiGroupBox1.Controls.Add(this.label1);
this.uiGroupBox1.Controls.Add(this.CodePort);
this.uiGroupBox1.Controls.Add(this.label2);
this.uiGroupBox1.Controls.Add(this.label3);
this.uiGroupBox1.Controls.Add(this.CodeBaud);
this.uiGroupBox1.Controls.Add(this.CodeIsComm);
this.uiGroupBox1.Controls.Add(this.CodeCon);
this.uiGroupBox1.Controls.Add(this.CodeBreak);
this.uiGroupBox1.Controls.Add(this.CodeRefresh);
this.uiGroupBox1.FillColor = System.Drawing.Color.Transparent;
this.uiGroupBox1.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.uiGroupBox1.Location = new System.Drawing.Point(44, 14);
this.uiGroupBox1.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.uiGroupBox1.MinimumSize = new System.Drawing.Size(1, 1);
this.uiGroupBox1.Name = "uiGroupBox1";
this.uiGroupBox1.Padding = new System.Windows.Forms.Padding(0, 32, 0, 0);
this.uiGroupBox1.Size = new System.Drawing.Size(386, 386);
this.uiGroupBox1.Style = Sunny.UI.UIStyle.Custom;
this.uiGroupBox1.TabIndex = 75;
this.uiGroupBox1.Text = "仪器串口设置";
this.uiGroupBox1.TextAlignment = System.Drawing.ContentAlignment.MiddleCenter;
//
// label1
//
this.label1.AutoSize = true;
this.label1.Font = new System.Drawing.Font("宋体", 12F);
this.label1.Location = new System.Drawing.Point(40, 172);
this.label1.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(88, 16);
this.label1.TabIndex = 70;
this.label1.Text = "串口状态:";
//
// CodePort
//
this.CodePort.FormattingEnabled = true;
this.CodePort.Location = new System.Drawing.Point(151, 66);
this.CodePort.Margin = new System.Windows.Forms.Padding(4);
this.CodePort.Name = "CodePort";
this.CodePort.Size = new System.Drawing.Size(137, 24);
this.CodePort.TabIndex = 67;
//
// label2
//
this.label2.AutoSize = true;
this.label2.Location = new System.Drawing.Point(40, 66);
this.label2.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(64, 16);
this.label2.TabIndex = 65;
this.label2.Text = "端口号:";
//
// label3
//
this.label3.AutoSize = true;
this.label3.Location = new System.Drawing.Point(40, 118);
this.label3.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.label3.Name = "label3";
this.label3.Size = new System.Drawing.Size(64, 16);
this.label3.TabIndex = 66;
this.label3.Text = "波特率:";
//
// CodeBaud
//
this.CodeBaud.FormattingEnabled = true;
this.CodeBaud.Items.AddRange(new object[] {
"115200",
"9600"});
this.CodeBaud.Location = new System.Drawing.Point(151, 115);
this.CodeBaud.Margin = new System.Windows.Forms.Padding(4);
this.CodeBaud.Name = "CodeBaud";
this.CodeBaud.Size = new System.Drawing.Size(137, 24);
this.CodeBaud.TabIndex = 68;
//
// CodeIsComm
//
this.CodeIsComm.AutoSize = true;
this.CodeIsComm.Font = new System.Drawing.Font("宋体", 12F);
this.CodeIsComm.Location = new System.Drawing.Point(148, 172);
this.CodeIsComm.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.CodeIsComm.Name = "CodeIsComm";
this.CodeIsComm.Size = new System.Drawing.Size(56, 16);
this.CodeIsComm.TabIndex = 69;
this.CodeIsComm.Text = "label6";
//
// CodeCon
//
this.CodeCon.Location = new System.Drawing.Point(151, 220);
this.CodeCon.Margin = new System.Windows.Forms.Padding(4);
this.CodeCon.Name = "CodeCon";
this.CodeCon.Size = new System.Drawing.Size(125, 45);
this.CodeCon.TabIndex = 62;
this.CodeCon.TabStop = false;
this.CodeCon.Text = "连接串口";
this.CodeCon.UseVisualStyleBackColor = true;
this.CodeCon.Click += new System.EventHandler(this.CodeCon_Click);
//
// CodeBreak
//
this.CodeBreak.Location = new System.Drawing.Point(151, 325);
this.CodeBreak.Margin = new System.Windows.Forms.Padding(4);
this.CodeBreak.Name = "CodeBreak";
this.CodeBreak.Size = new System.Drawing.Size(125, 45);
this.CodeBreak.TabIndex = 63;
this.CodeBreak.Text = "断开连接";
this.CodeBreak.UseVisualStyleBackColor = true;
this.CodeBreak.Click += new System.EventHandler(this.CodeBreak_Click);
//
// CodeRefresh
//
this.CodeRefresh.Location = new System.Drawing.Point(151, 272);
this.CodeRefresh.Margin = new System.Windows.Forms.Padding(4);
this.CodeRefresh.Name = "CodeRefresh";
this.CodeRefresh.Size = new System.Drawing.Size(125, 45);
this.CodeRefresh.TabIndex = 64;
this.CodeRefresh.Text = "刷新串口";
this.CodeRefresh.UseVisualStyleBackColor = true;
this.CodeRefresh.Click += new System.EventHandler(this.CodeRefresh_Click);
//
// ConfigDevicePort
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.BackColor = System.Drawing.Color.LightBlue;
this.ClientSize = new System.Drawing.Size(482, 433);
this.Controls.Add(this.uiGroupBox1);
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.Name = "ConfigDevicePort";
this.Text = "配置仪器串口";
this.uiGroupBox1.ResumeLayout(false);
this.uiGroupBox1.PerformLayout();
this.ResumeLayout(false);
}
#endregion
private Sunny.UI.UIGroupBox uiGroupBox1;
private System.Windows.Forms.Label label1;
public System.Windows.Forms.ComboBox CodePort;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.Label label3;
private System.Windows.Forms.ComboBox CodeBaud;
public System.Windows.Forms.Label CodeIsComm;
private System.Windows.Forms.Button CodeCon;
private System.Windows.Forms.Button CodeBreak;
private System.Windows.Forms.Button CodeRefresh;
}
}

61
SLZ_4/ConfigDevicePort.cs Normal file
View File

@@ -0,0 +1,61 @@
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 SLZ_4
{
public partial class ConfigDevicePort : Form
{
public ConfigDevicePort()
{
InitializeComponent();
refreshPort();
}
public void refreshPort()
{
CodePort.Items.Clear();
string[] ports = System.IO.Ports.SerialPort.GetPortNames();
CodePort.Items.AddRange(ports);
}
private void CodeCon_Click(object sender, EventArgs e)
{
FormMain.form.updateDevice(CodePort.Text, int.Parse(CodeBaud.Text));
Config.saveDevParam(0);
FormMain.form.addDevObj(0);
}
private void CodeRefresh_Click(object sender, EventArgs e)
{
refreshPort();
}
private void CodeBreak_Click(object sender, EventArgs e)
{
FormMain.form.deleteDevObj(0);
}
public void showDevInfo()
{
CodePort.Text = FormMain.form.arrDevParam[0].sDevAddr;
CodeBaud.Text = FormMain.form.arrDevParam[0].iPort.ToString();
if (FormMain.form.arrDevObj[0] != null)
{
CodeIsComm.Text = FormMain.form.arrDevObj[0].bStatus ? "已连接" : "未连接";
CodeIsComm.BackColor = FormMain.form.arrDevObj[0].bStatus ? Color.Green : Color.Red;
}
else
{
CodeIsComm.Text = "未配置";
}
}
}
}

502
SLZ_4/ConfigDevicePort.resx Normal file
View File

@@ -0,0 +1,502 @@
<?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>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
AAABAAEAAPoAAAAAIAAOWAAAFgAAAIlQTkcNChoKAAAADUlIRFIAAAEAAAAA+ggGAAAATgyZrQAAAARn
QU1BAACxjwv8YQUAAAABc1JHQgCuzhzpAAAAIGNIUk0AAHomAACAhAAA+gAAAIDoAAB1MAAA6mAAADqY
AAAXcJy6UTwAACAASURBVHic7J13fBRV18fPnba9pPcOhF4E6S1SjfQSFB9RHlEURVSUquaJKNWuqGDF
bmhSRCJiaCIgCNJrKiQhfXubmfv+wQsC2fSdmU3Y7+djyd7Ze042O2duOfd3EPhokqw6fJguP2dTF+Sb
VMUmkJUYnbKScpM8JkwdRxJkHEaE1uHiQywWR6jNxepcLMjsLlbtcnJylucZjgcSEGASAU8ShJNhKLuM
Ji0yGqxyijQrFUyxnKGuAuJLMYuv5BSaL/lr5Y7QAIXNX044dXrSGpYQY56V3Moh9Wfho+EgqR3wUTvp
mSfVWbnGtnnlztjiCnt4/lVjdIXBnsRyWAEI5ADA8BhojucZjBGDAMvx9TdjAFxD3+5AN/517T8YwIEQ
cpIEOAmEnBgjFwKwEySy+WtkuyNC1PmhfvL8cD/6SqS/+uTUsV0qPfSr+xAYXwDwItLTMfnHlV1RB86U
RGqVVIKL5QcYzK5WdiendnF8R5bDiMcYMI+Br+9dLRAIARAEAgIhoEgEFImOMzRl0WtkFxmEjxssrkM9
Wwddaa/T5U2f3s0ltb8+bsUXACTms21/B2XlObvsP1UwNLvQ2BEh1IbnsD+HMQkYZF5yn9cbBAAIAUYI
2SgCGXnAJ6OC1Wd6tg/9rVt75Z+T+t9VIrWPPnwBQHSeXPprm2M5xmiaJvtazY7uFid7l93BBbIc7zVP
daEgEABJEiCnCYNKTh5WK2XHXCz+vVWsNv/L+UNPQv1nKz4aiS8AiMCPP+5XbDlreOzg2dIxPMfHsxyE
czxPYgyE1L5JCbq2AMmRJCqmCHSxU4Lf9hkPxH6Q1L69WWrf7hR8AUAAvso4ptp9tLTd2ezy1jYXP9pk
cXZwuPiWXHN/xDcSkkBAkShHp2JOUST5U+tov1N92/idnp7SzSC1b80VXwDwIANSM6k4xvXUiUtl9xrM
rmEOlgfed9M3CAIhYGgC1Ar69zbR+syuLYm3X5wyzAq+aYJH8QWARvLutvOynbvOD84rNg0y25yjnS4c
73vSexYCAcgYIlutoHcE6lQZI7uF/DbroZ5Gqf1qDvgCQAMYkJpJmQtLVK3DNI+ezq0cUWFyJLk4300v
BjSJQKeW728Zqc4wGy0fRTsqK1evnu7bXmwgvgBQT6ak/Xzv8UuVQ20ufqzVzgXxGCul9ulOBCFkV8rI
YoZG+9vH6NYnjQnbNL2bL8+gvvgCQB2Y8UGmuvKqM/FyuXlWbpGxB8tBK6l98vEvFIUgIkC9Nj7S7x0l
zZ9aPW+Ib9GwjvgCQA2kfpCpPnjROLnYYBtWbrT3d3E4UGqffFQPRaAKvYY5EKRTbRvU2v/b+TP6VUjt
k7fjCwBueO7N7f65Ja6e2UXmOaUGRw8eY7nUPvmoOwQCl1ZFH20To3/D30+VufqFpFKpffJWfAHgJlat
OkzvLSgefyqn8v4yk3Mgx2Od1D75aDgkgYw6FX2gTbT+hzbRIT+mTe9mldonb8MXAAAAAKMhszZ1N9qc
aYWlll4cD1qpPfLhOUgCWYP9FX+qZMRrwYF4/9q0FKfUPnkLd3wAWJp+OHpzZs6cghLLKBfLR0ntjw/h
oEhkDtarNiT3DV+SNrXPWan98Qbu2AAwdsEvYZzLkXL+suVRk83ZQWp/fIiHQkaeaxmuW6OQkT9uWDoi
S2p/pOSODADzPtqXvGFPzmKr3dUGY2Ck9seH+CAELjlNXRwzMO7lN2b0XS+1P1JxRwWAR5b82uFSruGx
vBLLGJbDvuG+DyAIKIwIUGYkRuk/+PLloX8jhO6olM47JgA8vCjj0X0nrr5hd7A6QOiO+b191AGMMUUR
9m6JAWnrF49cJrU7YtLsb4Sn3tjR6q9zZbOvltknsDz2l9ofH94LSSBDkJ9sa6f40KWfL0w6KbU/YtBs
A0BqaipxCXqkHDxb8rLVwbeV2h8fTQeGRDndWwcsb02pP0lLS2Kl9kdImmUAWPT5oaj1ey49bzA7JzlZ
Pkxqf3w0PWiSsPlpmW+H9Y5ZtvSx3hel9kcomlUAmJieTloOEpGXi52ry02OoXfUao4PQVArqYMxIfrp
vbTqU81xNEBK7YDnwCgq+uLTly5bVhutrvYAQEntkY+mj9PFRxot9tFmGhP3TX748KHt33JS++RJmsUI
YHRqpt5qNCw7n1vpW+jzIQgkAcbIINVvWn/1E9uXJDcbSfMmr0qb9vkfd1+6WPD9meyKyb6b34dQcDxo
865ahublV6x7ceWuJKn98RRNegQw/uWMe4+fv7rU5uQ6Yt+E34cIIAQgo4lziVF+r297c9TXUvvTWJpk
AEhPP8l8+ueFmRevGB9zOLhWvsQeH2JDU0ROywjNZ6P7+L3zdEpSk61j0ORunLe/OKrffCTruawi01yW
xTKp/fFx50IRiIsOU6+8p1vAkrSpSUVS+9MQmlQAmLfmYMCvuy69XWpwTOJ43yEeH9JDIOQK0Ml+7t85
cNZ7zw7Jk9qf+tJktgEfW74z4eCxguVFZfYU3neCz4eXgAFIm4NtUVrpih867tGT/2R+26R2CJrECOD+
F38KP1ds/aTE4BiOm8HOhY/mBwLgtSpmd+vogBkblgxvMmIjXh8ARi/Y2jnrsuHNcqOjLwDyPfk9BEUi
kDOEjaGp8wxNWggETgKBgyIJE4EIG8Y8hxDieYTtPI8cCGFEYCwHIIBHiCUAyxHmVRwGGQZEYZ5XOFhO
w3Igd3G83O7kwlwu/o7TVNSrmQPx4erntiwffUBqX+qCVweAJxdtj9p/ofzzUqNjsNS+NCkwxoAQJhEA
TRM8RZEH1HKqMjJIcT4hPODv2FDVBb2cL1crFRXjhrQtBwHq7aXvuKTLKyxrV1hhSigxclHZhaZ2pQZr
otOFO7EsjzgOIwwYNccdHJWCKhrSJXTcyjlD/pTal9rw2g9/wMz1PcsqbCsqzK6+UvvSFKApAuQyMkvJ
EEUaBbO3oMT2T2CA3NQtISRrSFJCzqhuEZIr4m7bdl6251JRzLHssqisK5bAQL08keNxL7PNGWFzsO0c
Lr7ZTO+0Cjo7IUz72Na3Ru2U2pea8MoAMH3JL7H7TpWvqTQ7+0vti1eCMUfThFNGkQ5/Db01Llxzok1c
6IHIGP9DU5Pi7FK7V19+/DFPkW2/0vXCFVPnnGJLYlGpbYDV4UpwungaAGip/WsoKgWZ36ud/6g1L404
JrUv1eF1AWDU3J+65BRYVpSZnIOk9sWbQAiAochLfloml6HJTTTA0V6dIvNbtw4taoo3fU28/tnfQX+c
zosvrrDHUSSaWGpwdHCwfMumWGpdo6TzWsdop/y0ZNRuqX1xh1cFgP+kZgQfyyr9ocLkbDa51o2BJMCp
kNGVShlxOkAr+7NH+8BPXn98QLbUfonNh+uPBR84UzzqbG5lV5PFOdpqZzUsj9VS+1VXtEr6bIswTfKW
N0d73d/OawLAo4u3t/j7YvnbxeWOIQBwx2b4Xcs1J8+GB6r+VimoX4PUyj97tKMKmnK6qadIT08nfz2n
iz6Xb4oiGXigsMTW2+biOnJePzLATr2K/rNdC93z6Wmj/pbam5vxigCQ+sl+/20H8lcWllknYS/xSWxo
mjApaDJbq6R+Hd2/5aoFU7o2WxUaT/Ht1uN+X/6W9UhhqbWHzcne43BxQd58KCxYJ/ulX5fgqe89O/iq
1L5cR/KbbfGagwHrd2e/c7XCNhHjO+vJTyAAuYzKjghQ7FXLyK9CAjQnP10wqPhOk6ZuLCu+OqY6cL6g
ld3JPZBTYOprsjp7eeOoAAE4A/Xy7RMGhT/x0kMDCqX2B0DiAJCefpJZuefcK1kFxrk8f+co+BAABqWC
OitnqO3JvaN/WDLdV6bKUyxdfSDyt5MF4wtKrePNdrajNxZ4jQnRrHxiXIu5U4Z1tkjti6QB4N7nN845
k2tMc3H8HVF+myIRaJT0/k7x/ustDtuan5aOK5Pap+bKg6nbtGY7d9eVMsvcMoNjuIvlwVumBySBnG1j
dW/+t+eYl1NSkKQSY5IFgNFzN4/8J6v8TZcLt5TKB7EgSSjTKJhjYX7yH7q3C/x58RPeMfy7E0hPx+TG
szuGnc0tH11psI90snwwAJL8EByBwNGxZeAjPy8f+YOUfkgSABZ//sfda37N+sRsc3Vsjqmg1yEJBEo5
eWhA57Cldgv5y5q0pGa1X9+UeHzVYboyt6DDmXzTm0arK5HjcJi0AwKMGYq8NHZA5Oy3Zg7aLJUXot98
Y+btCLiQX/y9weoc4i1DMk9DEAi0CuqgVs18dU+P2C2v/7d7vtQ++fiX+174acqVEutjlWZnOxeH/aTy
AwGASkH+3bVtxLjvXh6UK5UPojJo1oZPz+UaHsAASrFtiwFFIHOHeP2qlCGxqd6wyOOjeh5etP3B3f8U
zmdZaCfhs8gRH6Zdv/ej8Q9KYVy0AJCamUkd2mJ45nSOYSHL881OvZcmkTPIT7YhMlD31salyX9J7Y+P
upH62d74jIOFD5VUOh52uNg4KUalBAJDy0jNe/36tX4tLaW9U0zbogWA4S9sS7iQX7rb7uAixLIpEqxK
QZ0Z0Cn0zXDb4K/T0hAvtUM+6s/yL/9K+H7XxTdKKu33YYwpsdemSBIZowPVyftWTfhDTLui/JILPz0S
s2X3uc/KTPZ+zUnUgyaJ8paRmo8jQzWffTF/SJbU/vhoHEvTD+t+3p0/+Gq5eaHVznYRezSgVTJ/je4V
9Z+lM/ufF8um4AEgNTWT2pRb9E5ppf2p5rLmhxByaeT0vrax2tT1S0buldofH54ldfW+zj/ty1tUYXYk
cTyoxLQdoJWvGdQp5sm3Z/e2iWFPcAGGM6xtUqXZOaG53PyAoCA+XLs0+a7Qqb6bv3mS9njfY33iwh7o
lug/S8GQOWLarrQ4Rp/KK5wulj1BRwDTl+1q+duRvC12J5copB2RsKkV9IVhPaIXvvds/61SO+NDHCa/
9HOHk7mGVystzmEcjxVi2GQoImv43RHTPpo7OFNoW4IFgIkT08lsLb+qsMz2qFA2xIJAYEyI1G2gGfLV
HV54ptuHsDyxIiP40hXzM+fyTS9wnDjFaAJ1st9aqaixaz9MEfQYuGBTAHl7zWMlFfZxQvUvEixDoYrE
KN2SDi3aP+G7+e9MPn5xWHHv0f7/u6dT+GS1nDqEBBBRvZ1yk7OHUy2bIbQdQUYA017L6Pz7saLdDpbX
CtG/WCjl5BF/rfzZ4YPhUFpKiqj7sz68k2nLMzofPlP2dmmFY6DQUYCmiVMJEbq5O98Z87NQNgQZAZzK
r5jelG9+hIAN0cm2DGgf+vTB1Sn7fDe/j+t8OmfYsdQpvcbGhGqXUySqENKWy8W3qzDaH0ldtVmwrFmP
B4AFK/eOLCi1j/J0v2JBEAgCdbJ1AzrGPvLpS0ObRHEHH+IyNimuMjwk8eU+7UOW0hQqFtJWaaVtTJlZ
KdhU2qNTgEkLt0f9fbHkV6uDbe3JfsWCIlFxRJDyq2cntU1LSWp/x2vw+agFjNGIOT//5+KVildNVjZW
KDMqOXWpfQv9vRteG3nB0317dARQabXfb3O4WnmyT7GgSHS5d7vAN/aHnJrru/l91AmE8NYVI75O7hs1
Tq+WCSb7bXWwCVdL7U8I0bfHRgArvjkS8+nW09vN9qb39JcxRHabKH3az2+OXiO1Lz6aJv2fWX93RaVj
ebnR0QsEULVmGDJv0F2hkz6d59lpqYdGABht3Jf1clO8+RUMkXV/Usxs383vozHseW/8X53iAiaF+Cky
AMDjB8KcTi76VHbli19kZntUPs8j0kj3zOyQlHfVMpfHoPFEf2KhlFEXO7UImLl63tAtUvvio+lzfPc3
luSUpw6b7c44s80Z52npMYuNTbyYXXw0/8g6j4nINnoE8Piqw7TZxi10cTjcEw6JhUpOnptyb/yj6xff
94vUvvhoPny2IOlifKRiZrCfahsAsJ7sm+UxYbJz81LTT3rsRG2jA4D96tUHispt3T3hjFgoZeSFzi39
Zr38SJ89Uvvio/mxNm1UXs92oc9EBKrXAYDLk31XmhztD/x5fo6n+mtUAJj/7p6goxcNkzkeN5mhv4Ih
L4zuEzs1fdHIDKl98dF8+eiFAflxIaqX/DTMTvBgEOB4UOYUWkc9tXiHR3bbGhUATuRX9jeaHX094YgY
yCgiu3sb/3krZvbbL7UvPpo/P76efKlVhO6pUH/ldsDYY/r/Ngfb6WKxcYgn+mpwAFj26T5N3lXTC6zI
ggkNhaFQbu92QQu+SxuxwVd6y4dYbFg6IismRDdHraT2A8YeSSnnMGaulNkfTk3PbHSF5AYHgMyzZY9U
mF2dG+uAGNAkgo5x/ssd7cxrpfbFx53HhiXDz4YGa6aolXSOp/o0WFwdduwsa/RaQIMCwJNL9voVlFiH
8xh7fUkvkkDGuFD1gk0rRn60NiVF0jJMPu5cdr87Nqd9TMBMiiI8UhmY57G8xGAd/mDqtsjG9NOgAFBY
aWpnMDn6NMawGCAE4KeRbYwODHgbwDfs9yEtk+4y70zuFTOHoYgiT/TncHDtzVa+UQfv6h0AMMaouNL6
FOuFVVdvBiFwBeoVG2YMbfmCrySXD28gJSWF+2j2wK+iglSfIIQrG9sfh0Fxpcwy5quMYw1eh6t3AJjy
v5/HXik1T2ioQbFQysjDd7UOWjD9wW6lUvviw8fNWLiyRbGh2kxPVB4oNdiSdh4qGNPQ99crAKSmnmSO
ZlUOYzlMNdSgGMhkxMXIQPWiz+cOOie1Lz583M6R1dNdfTrHTtWr6N8a25eLw9Sfp0qnzF6R0aBRQL0C
wO8F5wKcLnxfQwyJBULgaB/v//LvH4zzpfj68FqWTe9m6NEmcDlNwpnG9uV08nf/frY8uiHvrVcACAqS
/dfqcAU0xJAYEAgZYsPU3/RJ8BNMQ82HD0/x2cLhO2JCta9SJFHSmH5cPFapGPr5hry3zgHgiy8y5VmF
xmEYIy/d+sNYq6Iv7vtw4rS50/qapPbGh4+6MK5Vh43BevlaBNCYLWrmarm19zubjofU9411DgDrTltG
Vhid/eprQCwIQFfaJ/i/ILUfPnzUh1mzWjm6tPRfFqCVNSo93cnybbfvyRlf3/fVaR0yNTWT2phVuLLM
5Hi8/q4JD0kgZ692wak/LkpeKrUvTRwEN2neY4zRzWnTqampxP/+9z98/bXUVEwAAFyviJyenk4CXNvu
uvYzJgEAJk68JpCxdi0Qp4J2oXYlJXjixIn82rVriYqKeMLPryt/6hTgdu0AVVQcIQpamXC7khIMMBFO
wVoyPD4e+2V15QEATsGpa2fsg0quiW6UBBEAp6GpKzdPenlLv0Ony9OdHB/a0D70GvqnCT0iHkp7OqnO
knZ1CgD3Pfmt37ly7pjNwTVooUFoQv2VP66akfJQt27Io0cvAQAOHz5Mf7C9JPlMnqmNw8UxmOUJQAjB
/98EPMYE5nkCEQQPAMDxPAE3fa4YY8RjhICH/x9vIQSYv9HO8wCYx+T1Zh4AAPPo5tITPMC1zjEArmbU
huHWP6bbn2/4AEAAj3hEAOBrlggECAEEcBhKr/2MCQIR0SzmcgETGIBHFEEEYwRlHAcsgQARBEQghFgX
i4sIBIgiIA4QgTgOOwFhRJEEAzyAC/MuAAAaETQiEMFjnuN54AiEKIJAJMaY5zHPEQiRBIFInkc8Bp5D
iEAkwgxGCHM8diFAQCJgADDiMHIBBkyRiIkLV+2b2qPl4pSU9rcEgamvbwu6dMU8xeJwyQkggCBpDvOY
4LATARBAkTSHMYs4HhMIASYJmseYR5jnCB4ASILkESIwx7sIjHl07WcKczxHYMwiEjEYEYi/1gdHIERh
kiB5GQ3O9rF+6z98cVBuHb5iAAAwc+Y22T+cJTWnyDKf4xuWs8ZQREHv1sH3fPvavXXe/arTdp46WP+k
o6jYK29+mkTmsADFR0Lc/OnpmHz+8/WL84stL7Acf+1OcfO3uf4Sct8sGrfbdvvz/4tV8bd5e7uGFX/j
39evQ+Dkb7ue+9cKDwAsd+NFAABwsbdOa9lap7m3e1y7spZeLds9dUTLN1KSbr35Ry7cFHcy2/T51XLr
QB5fD4b2W6ygWn+GWn7+1+S115xAk4Q1PFCxJKgbcaVW52/i/feTHT/+mLdoxa8HOhSWmpMBoXrn6LAc
H17pcD4EAC/V9T21Gvl62wHtuRzjoAYGJUEhCVTeNTFk4ZblIwUR9si1/yOvMDsjXRwPPAbA157AVf65
jhd+RM0WBAB6NX20S0zA1NtVnDs9vFF/Mcf0bmGZdSDHX/u78Tf9g/GtrzX25+uvIYTscWHq98YlRb6Z
lpRUbzWgSZOibcF6ZoWMIQ0N+Ux4DHAu1zBq27bzdRYlrTUA7D5h7mSyue5piENCghCAv4Y5nFOa95FQ
x3tfnNLZ0jnB78sArewXhMAohA0f9QcBgFbN/DGhf/T937w+7JZ6jSOe2Rwto53pJqvzHixiRCYQ2KKC
FZ/e3T5m6exJvW0N7Wd0q8g/QwNUnxEIGtSHk+M7fLzr3Ni6Xl9rADh+oayjk/W4yGmjoQh0sXWUZuWR
1dM9PvS/ma9T781o11r74N2JQYsYmrgspC0ftYMAQK2iTnRJ8Ls/7fH+529uazFzmyzHYHm/oMw6BGMk
mk4FQsgVG6r+sk9cxIJl07s16Ol9nenTu7n6xIW+6qeRHWvI+3kew5UyS9eJ/78gWxu1BgCbkxvJe9n4
HyFwRIdofvvhtZGbxbD33fwRFRuXjnijZ9ugByKDVZ9TJPKNBiQAIQCtWvbH8K6xD3yblnxLME6avS5G
YzJsrTTYxX7yW2OC1Ws6xAW+umKuZ/JPVszta4oIki9iaMJa3/diDGCzc0MrD+rqlK9TYwD46qsMldXu
8jqtf5Wczg2P0P1PbLvfpyXvG94r6KmuiUH/lcuofzxxmMNH3UAAoFMyx0b2i5r8zvP9Tt3eXlHm+qq4
0j4AAzRaJacePvHRwaoN3VuFP/PhnCSPHPG9TvcerXYG62WbGvJem8MV1CWB6VCXa2sMABlZ/AwXy8c0
xAmhoEhUFh6ofOf7BYMELcpYHWlTk+wbFt+3/r9DYyaH+MnfoSnkEYEHH9WDEIBGSe/v1jbggWXT++Xd
3Nb7se8TOj/8Q0Zppe0uAKDF8wlbIoLU38eHyhe+Pbvhc/7qSEtp7+ySEPKejELZtV99KyyPw7ILrcPr
cm2NAeDwuZKJnJdN/0P0ysOZ/v+sklrXb+Gj/U8fiTo7e9LAuOmBWuY84RsNCAICgACt/OAT4ztMWrNw
eJWCGA6O+KLUYBuMAYn25AcAiA7WbImuxA9/nTYqr/arG8bH85IOxIZpv6lvmjDPAxw9Xz6mLrsB1QaA
J5bs6OJw8V6190+TRHlEkPIdSEvzjrCUlsYve3rApj4dQoeG+MsWyGiizokfPmqHQABqJb23bazqkVnj
O90y5x8wfWNsl6nfb7xabu1SXXKUECAE1oggVXp4ILNg7VrhJeZC/JXfKeVUVn3fZ3OwnTYdz+tU23XV
fnCnLhvieR7qfbhASLRq2fbebSP3Su3H7Xz44qDcw59NXjK2d+yUIL1sF0kgn/ZgI0EIcIBO/serjw1J
/j5t1C1P/q6Pr6KNDseq4grbCDHn/ADAhwcotyvCTz247vXR9R6aN4Tv04af7ZYY+BXRgHqD+8+Wdqvt
mmoDAMdCX17M5dRaYCiiqF2s9tsXp3S2SO1Ldbz53IA9AzqFjW0drZuhVdL/IA9XhblTQAhV+qtlexNj
tP9NSQq5Jcln1Is/hQOr+6ak0tYbAIkmTIMQWCOD1etbhKie352W5tGSX7UxoGvQxzot809930cB7g21
pPtX29j54e92lxgc/etrVCD4luGa73Z9OOEhqR2pK9OWZkYevXh1SVmFfbyL4+XXlrJ81AZCgP01st3H
v5qcdHtb7xd/0thKrBuKKx39QIAS3NWD2WC9bEtUkOrhzSvGSHLUvMOUH6ZVmGyf1OeZLGeI3EttsuJr
mjK7HQF899vxEKuDq9M2ghjIGLJSr2FWSe1Hffh0XtLlRePumtYq2v+hYJ1iD+lbJawVhFBleIDy9zZh
flNvbxs7OyPYWmL9rMRg7wUi3vwEAkt0iGZ9ixDNs1Ld/AAAHaLUO9Ry+nR93sNxmHk1bFi7mq5xGwBO
XjD2dLp4v/oYExKtitrRM15xQmo/6ktycivHr2+PWv/JzPuHxIVqltMkqgDAog4fmwoEAATqmO2HPp00
+Mdl9+bc3Dbg+c2BVwwVn5RU2keImeEHGDv9NUxGiB/51Nplwq3214XvXh+R279T2BtQj2kljyHsYpll
dE3XuA0A+08VJ3O8dyy0kwRR1C5Gu2ne9CGNSrGUkm7dkKtjouKVQB0zKMxf9SvlGw3cAoGQITJEuT06
SDn79rZBT20IMJRbVhaU2gYDIIVoPgHYIoNVP8eHymf9tHRcmVh2a0KmcHznp2HqfNQXYwx5RaY213UZ
3FElAKxadZjOKTJ29IrsXwx8sJ/84Lf/G/G91K40lvdnJTsOfz756MMDYqckxujmyWmiQmqfvAEE2BLs
L9/IhAaP3LxiTMHNbRPmbwuysdxHpZX2+zCAUkS3bP56+c9xsQFPblw+3mvOf7w/K9kZqJX9UNfreQyQ
XWCcfJk8E1zdNVUCwGmrPR7z4JHSw42FIpGDJIgmNfevjZkP9yjrpT22IsRffseXJ0cImeLCNFsCtGj2
7rRbj88OmZ2hyi8xvZl71TwCg4gFaDF2hgXIf48OUz79w8LB3pbliVtF6XbTJKpzXgDLYSgqqAysrr1K
APjjdH48D6BpqIeeRKukL9zTLvJvqf3wNKddd3csqXT0ktoPKUEITOGBqu91wbJHf317UvnNbf9JzQg2
mwxrCsqsYwFAtGE/QmAN1Mm3REXqntiyZLS33fwAALB63pB94QHKgwB1rzR84MyV8emmgwAAIABJREFU
NtW1VQkAWhmdgDH2iklqYrT/D0ue7eWVf4iGMmN5Ruejl8pXW+1so4o6NmUQwtYWYZpNMTSevTVt1C0n
3iZOTCdzik2v5l01j+SxqEk+bKi/PLNVWNCjG287aehtyChiPkUQdV4Tc7r47tW1VQkADhb1xbhuUmFC
omDIC+1ayjdK7Ycn+SrjmOrQ2YqFdgd3NyBUp/PazQ2EwBAZpP0yIkj51NoPU25J8nk4NTO0OIj4PPeq
eTIgxIjnE7YEaJmMiEj902uXef9ic/tEZZG/Tl5nFWEMEF9dW5UAYLTaExrqmMfAmAsPVOxJm5pU5fBH
U+Xw4cP0qo2XPigst43zhvVVKcCAbQnhmk1RYfxz36YlV9FUyCuvmH+pwPggz2PxpqAY4xA/xe9+yDlh
U9qt24/eyvuzkh3hwaoNdb2+1GDvXF3bLQHg620HtE4nJ+Zqq1sIkuCNNna91H54kmc+yXk5v9g0BUQ8
uOJlGOJDdZ9FaOTPrk27VcL7qfcPBgx+Zv3yrALjQxjEGxkhBNYgP0VGXJj/rN1rpjapCtLd4v0PKWVk
naYqTpaXZ2Zmuh3V3/JlLChjO7E8busJBxuDUkYceKBPVL1zn72Vx5ZlTssvMU3jeHyH3vzYnhip2bDv
4/Ezv1s6osr25/mLhc+fyzfOZjksYvIZxkF62a5jXz5w77rbdAWbAmnT+5yNj9DtQKh2LVoEKGx/DjPA
XdstX8icYjbOG87/t4sLzJg7rW9B7Vd6P+MXbB2983DePJ6HMKl9kQKEwJgQ4fepf4C6StWmZZ/u0wx7
fuOCc5cNM3gs4pFeAGtEgOrnVsF+T4llUwhUNP4SIVRZ23UYA+z+5+o4d223fOhXy8xRUuv/MRRxeWjf
qDonO3gzL396sNfxSxVvOFy89OsqkoDtCWHqH/asHDtzXdrwW7b6MMbot1Mlk8/mGl7hOF4vmksIWD8N
s0fBWifennLc1LCbnOdVcqoOWYoYyi0ut8lANwcAdKXEEif1EWB/nTzrieQOlyR1wgPc9+zW+HW/X/jA
6mBbSO2LFCAAQ4so/ZrwINnC29ve3XZeNnDm+qfO5RmXshwW8VQfQIS/cnuEXvF0U5vzu+PuoInFOo08
vbbrMADYHZwmPf1klZ2VGwHgi8xsWZnRPlhqCQCNgmzypb3ve3KrX4nFstJkc90ltS9SgAEcMcGq9N3v
j3vi+7RRpbe3b99xdkTeVctiUZ/81w72/Byt1T28/f1xTf4BA3CtJmPfDkG1ZpRiDGB3sP3+MRqqTENv
BICc/AKti+VF23t1B0kAUAR5UkofGstD8zYEFDrMHxSWWvtJHUylACFU2TJS+4OfWr7AXXvPaekPni+o
fNXp4kXNNg32V+zTyBWz1r1961SkqdNjYMABrYo+U9t1DidP5OVbgm5//UYAKCkxaQGQaKqq7pDT5OFh
3eIOS+lDY/giM1te5qJmlVbaRvNYxPx1rwHbIgIV63Z/MP6RrW9VffIPeXbTPcVG+3y7gxNtpwkDdvip
mWNRgYqH9n/SPJ78N5PSvr0zIUK/ubYDphgwsrLO6qcAxRWcAtexWKhQtIjSH3hxSmdJ5L4bS2pqJvXl
2iMzT+dWzOL4O+/mRwCG+HDtJjVDz3PXPmHh1uH5xeblDidXo0CFJ8EADj+N7FCQVjbm9pOGzQkVzf+O
CFSzWAnGiGP5KjstN14oLXcpAYNk6akIQenQLgnvSWW/sRywGO/LKTIvdLG8VmpfxAYhgCA/+T4VqXxk
58qqZ+dTFvxy14lL5a+arM6uYvqlV9Hn/NSyRzI/nNCs1ZrNFudFmkTmmq7BgJDBylZJ8vt3CmCxKTCP
JRsBaJRU6bMPtrsolf3GMClt26DsK8ZUlsc6qX0RGwRgCg9UZQTp/aZsfz/ZcXv7Cx/s63wqr/wds40V
dUFUr2aO9+kUNm7fRxOaXJJPfenfPrREztCHapoFIMAUQqiKSvCNABCsoqOknAJoFfQlaIIVtmcs/aXd
8XNlr1psbBepfREbhAB0KvqgFsGkX90srs1dtTc641DOUoPF2U/Mw09KOXlOLUMPfTJnUJP8TtWXudP6
mrQq6lRNsrMYEMIcF3H76zcCAE0T0YDEK610O3KGanLbf59sOh6y62T5RyYr21NqX8QGAUCQXv7HmKS4
ab+tTqlygu7brcf9tu/PX11hdIm6tazTMCcnDYyeePCzycfFsyo9/TuF7AQENZ4N4ImqU/x/FwUIQtK5
a2SQpkmt0KamZlKfbDm9zGhx9hOzMo03gABAIaP+7BQXMPX1aX2qzK8//Wmf5u31p94vMzqGYRBvXYmh
UW7bWL+nX3tiYJMTkG0sy2YM+F1GkTWuAyCouldw44vL8RAg1b61jCagbbhaUtXV+vKPzby8qNw25U7b
60cIQKtijj46utVjX74y9IK7a77bWfTB1Ur7ZDE/G4WMzn5yRJsH1i1K3i2eVe8ixE9e2xpa9duADoez
Wt0wIUEAoFMxmeqooCazWJM8e9OjRy6WPsjxNVddaW4gAJAz1PGurYKfmje5R5US3QAA/WesXXD+svE+
Hov32choIrd768Bn5jzc40+xbHojWjW9q6Z8AJfT5X/7a/8GAJEzs26AAAL8FLmzkltVWUH2RpZ+ubv7
hXzDfJ6HapVWmycY0zR5YULvyLlfpw5xc6NhNPXVjOdyi8xPY4wCxPKKoYiCUb0iX/4ubfhWsWx6K7yD
PQSo+nwAlquqrHwjALA8yIVyrCYQgCUxTL1ZCtv1ZXLq1vgvf83/3Obk7rjTfQqGPtulZeDspbOStrtr
n7Tw5wmZx4pmsyIee6YplNexRcC8d54f9LVYNr2ZkGj/ApIAW3XtLh5XucdvBACnixf1VNZ1EALbL3+V
/y6F7fqQ+kWmPKfQ/JrJ4mx9R037McY0SeR0bxP8zobFyVvctKPZ72cO/Ot82QoXz1fZZhIKmiSu9Gkf
8tampSN8N///ExehM1AkWe0pR5bjqygs3wgALpYVTX75ZlQKujwqCLy6nPYXX2TKDxw3zrtcah95p4l5
MhSRExmsXvFd2rDV7tpTXt7accsf+R87XXyMWD5RBHElPkL7nvOU6QOxbDYFolQqh1pOnqkuH4B1cdWP
ADhemhwApYzOGxjUts4a51KQfqK835m8iuc5HospUy05BEL2NvGBX+77aPyH7tofSN0ceOGK5X2LnUsU
a1REkVCYGKP5/Pf3xi5fuzbFqx8cYjNtTBtTsJ/ib6KaCMC6yfS9EQB4icpX8zx/EmCt1xbMXPbjP4nZ
hbbXOZa/ow74EAggSC//cFgSscxd+/2v/xZyId/2bnGFrUp6qVAgAgpD/RXfxFqiF4lls6kRHaq5VP2d
XDVdRXr9f5o4n1ZD/XIpeXzpDt2azSfeMttcd0sUHyUBIXCEB6nX/Wd4u8Uzk9tW2Z1Z8dUxVcbhrAXF
FTbRKvcQCJzBOsWvBz+5f85BMQw2UcIC1VkIIXCfAV31NiP+/R9pUlpaxvh5bQJQicE1xWxj+91Ri34A
EBag3JrUQT9r5ri2VU72paamEjuP5f73XL5hGoexKDc/QgAh/sofBvcMmCWGvaZMJEcdBAzujz67eYbd
CAAkUfe6454kIlDplaW/Hnj5l15HL5S8yIlZpEJiEABolcyB2DDVkqUzh7gVm9xR1H7k+fzKV3gsTrVe
hIAN9lNsemx0p9nLmnCJeLGYPr2blaJQlaIrAAAUIqrc4/8eBqKoavcPheL/swBrFjKQgJHzN4Uczyl/
xcXyUVL7IiZKBZ0fEaidsnbRiCPu2qet2HlPYZl1scPJV8koEwqdSra7d+ew56aPal1FYciHe5Ryyn0A
oIkq07kbAYBx0yg0KgVdpFEyVQpFSElqairhcMDTRrPTbSGF5gpNESXtY/2e+e29kW7zyZ99a2/8oRPF
850s3xaQCIefMPABWtnOsQPiZn7wzIAmkybuDagUVKG712mStN7+2o0/JEWAqDLJCADUCvLkjPHeJQGW
TfYccTa3Yh6PxStLLTUEAmOP1v5vrl+cvAncrB5hjFHmscuflBvt94jlk0JOHmsV6b/gtcd61Sp46eNW
VIzsN4CqU3qKgCoP+Ru7ADKaEHcojgA0CqrWqiZiMurFnzR/X6yYyXHSKSNJQYtI3QfhfgHvIYSq3Pyp
qZjoPX3da+Um+z1iLYaqFfTJ9rHaOesWDz8kkslmRUG55SK4CeQUhSxVXrv+PzIZUwpQpV0wEAColbIS
0QzWAYzQokqT426p/RALBICjgpXbn+zHvpKS0tttUk2pZve0ghPWaWIVjGIowpUY7f/K+iXJO8Wx2Pxg
KJK7dv/fuuxPUWSVB+7NuwBlom51IwQyxntGABPmbxpy/FLFZIzhjtH1UyvpQ53j/WanpLjPqBv8zOZB
vxzMTWV5voqevBDQJFHeuUXAs/dNvPeOP9nXGJQ0Zt2N5hBC1S8CAs+7XTkUCgQADCnikKMGHl91mM4v
dzzIcliUL7rkYIxlFDo3sk/k/I/mDXU7x567aoeuoMz8gcPFh4vhEkEgV1y4+v2NS0d8OL0bkmRLurmg
VDAu5CbrB0PVcdy/egBOLhewuLkADF17ZVMxcBaXjisqtY6X2g+xIEnC3CJCl7riqYGZ7tpf+CAzdOfh
8i+MFkdrMfxBCEytonSru7ePeVsMe80dnVpmBzdrAARf9dDdv3UBrOxlBCBaTj5CAARBSr4GMGf1gcgD
Z0rmstydcdCHQOCKDVF/Oqx3iFsNhvT0dPLg2fLHistso8WZ9mNnqJ98K6vXP7tsejdfoo8H0KkoO9w2
AkAAGJHklduvvREAglQKG0LiHctFCAHLguRZgAf+ufKg+U6R9MaYC/WXb763b8ii2ZN6u038+vQPemZ+
kekFjseiCJ0G6hQHFDKYuzstyWsPhDU11CqZA24LABiAxRhXKbt3448c6E9bgUDijQAAwOl0SjrXS/3i
qL6k0vbInSLsqVSQByMCNC/Pf7Cf2+SryWkZfbIKzVNdLBZFIVqtoE7d0zH00b0fPZAvhr07hSCt0g4I
VRkB6JTy6hOBgpWkTcwpAAAAxWBJxTWOny94wWhxxkvpg1jIaDI/qUPIip+Wj3C76Ldmx+mA09llr9ic
bHsx/GEoIvvuNv4vvf38wCYlB98U0KooO+DbFgERYJLiqywM/jsFiNQYAbBoT2QeQwnrQpLld9+fuq3j
8eyycQBI0pLoYoAQNkYGK79cvXD4T+7a/zM7Q/Vh+vFlZQbHUBChxgFNEuWdWgQs/eaV+34CN9tVPhoH
Qcur3OgIEFbL6Oq3Af0Dgww0SYinzIMAn86ukOwgUEGpZaLDziVKZV8sCAQQqlfskxmsboU9AABsjHNy
Ubl9nBjJPiSBIC5U/Skts34pvLU7E7u5gsSAb8nqkTEEHxuirLLofiMAzEpu5QzUK34VLxkIg96PkUSG
bO6qvdGFpfb774SKPmoFc+D+/tGzd3wzxW3OxWOLd9x9Mscwh+Wwn9C+IAA22E/x7ZTB8UvWpqV4tQxc
UwaRMh7BvyMrhADkMmJveFdFlUNCN98AODxQmVudnpinIQAFRvipJNHWP3ym5Dmbg42TwraYUCSCyBDV
uy9M7XPWXfu893cE7D999SWLzdVCDH/0GmZ31xbBL00d28Ur8j+aK4iS8zenASAAkMto0/Ru3arXAwAA
CAlQ5xM1lRbxLARFUKIvAs5YvL1FQbH1HjFr1kkBQmCNClJ//NyQthuru+bQWcMsg8U5VIxJuFpBHuue
GDRv1fykHBHM3dGQHE/jWw4CIPBXydyeur0lAMQGU9mkiINip6vqqqTQ7Dpd3sJsd4mS4SYleg1zLiEk
4LnkaiouPbEsc0T2VUsKxkjwgjA0iSwto/QLPn9paJV9aB+ep6S0QokA3biTEQJI6hi03t21t9zu4QHU
PxRBnhbaQYBrAxS1QiZ6RWKdkrqfb+bHfRmKuBIbqHl1TVqSW42HB1I3B+45cWWOk+UFXwQlCKhoHaN/
Lalr4C6hbfm4htnGMjeLtmDAhQnq3m6Lpt4SAB5K7mlkmKqqIUKAMQZMukSrJAMA8NX6Y8FXK+x9AaHm
vPjHJ4SqM7a+Ncrtll9qaiphtOA0k8XVTwRf2IQw7Q/b3xqztLrMQx+ex8BzDNxUnJWhCHtKCnKb5Vvl
RtAo6SwhnbsOxgCck9eLYes63+zNedLFNe+6fjo180dMmG5Bde1/GDpNOJVdcb/QW34IAPw0zJGoKO1S
YS35uJ2yCpvq5hFAkE5xtLprqwQAGcnvQ0icjEAXEKIoywIApKefZHKKzF3FX3UQD5IER1Sw8vPPFg52
e8biySV7/QpKbQtdHBZc1FNGk+efGt/mv1/PG+K1su/NFZPJLsP45nsbV6upWCUAmJzcRXdiAp4GAwa7
ixdNfGPzqcvRCPHdxbInNggBxIdqvx/aI+TH6q45V1j6ksniaiW4LwRcbhOjSXtyzF2irCf5uBULx1Nw
UyIQQxPVSqtVCQB92kZlEQgEz9DDGMBisYsmwFFYYfFjOWlKoIuBUkZeklFEWnVz7Qde3jzyfH7FBB5X
LRHtSQgCOdrEBqzb+sbY74S046N6nHYgMf43APRsE1GtsGqVANBWKc9CCM4L5dzNWOycaGsAFEnc5Wym
9f0QAgjxU/7YU6+/7P6KVOJ4lnEOxihaaF+CdPKfJwzsulBoOz6qBxGggP+vZUeTCELD9dWeuakSAKZP
7+aKDdGcEDofCGMAq4ON/nF/nijy2yyLu/BuqqM2eTDm/NXMzj0fjn85zc2Z+tTMTGpSas95Rpvwp/zk
MuJYXKR6+fRREaLsJPlwj5+KGQwANIEA4iO130VybaqV3ne7Hda7fcjPJCH8TpnJ4rqrPL9MlCozJrsr
Vgw7YkNRhEWjZF5Dt53/vk7BIXvHAyeL5/A8FnS0RVPE1T5tQxesXzTCV7tTYiwOtjXANdGd6CDdyeq2
AAGqCQDtW2oPyGhC8Io9dicHFh4JPixfdRjTZpurWZ77D9Irfup7l77abZ6T2eapLCfsYiuBwBQeqPo6
jmd2CGnHR92wOlh/AAACoYLWkWq30m/XcRsAJg/ueFUhI08I4dzNYAAoKLcECm3HmfdPnMPJtxTajthQ
JMrv2yk0vbqimQs+3HVvYYl1rNB+qFXMWZXK+j93UxAf4mOxsVoAAJIE17zsbTVWVqp2nK9U0EfFOBiY
e7kiUmgbJy6WdeKaWwIAxlyIn3zvO88M+Nld83Nvbvf/6Y/8RSzHC5ptydBEfr92gS/seNP9cWMf4vLh
+mPBGEAPAKBTMnshLa3GLf1qAwBJUnvFOBqcVWgSPADkFBgSOLFK24iETEbaVApyZXXt/+SZehitbEch
f2uSRBAXof8gzL5/n4BmfNSDvKuW7gAQCADgwvgAuJEHv5lqA0C7SHUWRSDhVXsJlDgxPV3Qo7mF5Y6w
5ib8GaRXpI/oG1Ht3L/CyL2AMQgquBKil/+SfHfE52lpac1seNV0yS2uTMD//2XvmxhUa23FagPAx/OH
HKVpJEYaZ9vQws6Cbs8ZLXZ9cwoADEXwg+8KXVtd0s/Tb+75T0mFVdBtPxlNXJXJmWdfeLCbZLqOPm4H
o8tXbfEYAygZ6ujIzjHHa3tHjXt9XVsFrRNaH8BkcUX/cuigTKj+09PTSYIkJFEeEgQMfIi/YmMn/yK3
K+4TFmyJ2HkkbwoGJNjvTJEIYkPVbz8zgPUp+noRq9KPaCvMjpGAALq0CthUnRbEzdR4ew9PCFtJU0Su
51ysit3JajrEKAXbCszHkQyFiGZT848ggDeYnV9XV9DzaoWjr8nm6i+UfQQYh/opfl7+cMxb1fngQxpK
DS651cHSJIKCFuGKjLq8p8YAMGVKZ4tSTrvVk/MUCMAvQKsfIVT/zjJOThDCq96IhZwhz3RvGeE22Wbb
tvMyu5ObhjEINqKSM9TpmBDV8m5u9OV8SMvBrIoAnsVKhYwu++uSs07b+LUO8BUMvUVInUAMAOfzKocJ
1X+h08EA5puN9n+7+MB1a9KSity17byYd8/VSttgoWwjBE69RpaR/vqIPULZ8NFwOLsjFiMkVyqYXx7r
YXCrBnU7tQaA9gnaEwwl4EIABig32cK+3nZeEHkw1kkiQOIpnQqJjCYK7usc/YG7tvT0k8y+E6WjOE64
1c5AvWLffd2DlwhmwEej4BH0QAiU4f7yo3WdntV6Zyd1ijumUdC/N94992AAMFnZ3scvFQoiTU0xcgyo
5r3QpkKIn+zwY5Pal7tr++pAVnyF0SVYiXOGIqzBGsXStOlJvlV/L6XY4BxIk+jEEwMTq1WCvp1aA8BD
ya2MiTG634V8hrIchvOFFkEy1linHQEWr9yJkNAM7VbZFQAAU6if1ckKspiKACBQJ/+lVxftXiH699F4
0tNPMgaTM7xNtP6nuqz+X6dOY3uzs+JDGUMKmhNQUWG+W7jeuSYfAAgCIDpAddFdW/rJk8zlq6apGIMg
Emsyhsga3jVmSdpU9yrDPqTnl3MF4wGwUqWRf12f99UpAHSThZuUMrJO2woNxerk+grRr05GcljkqsdC
oJRR//QLDzzmru2v3eW9Kk3OrkLYRQCcn1r+0aIZPY8I0b8Pz3Asq7yHSk792cqfrlL+qybqFADS0pLY
qHDdDooU7kFaaXHFpaZij6826mOC7AhQnYdE3ghCALFhmr3Tp3erIrSBMUbHL5T1YHksyE6HWk7lJkZp
tgnRtw/PMHtFRjDP8XeFB6l/S3s6yVyf99b5hpuQ2G6Ln5YRbA5os3PRTNShJE/3K2dIJ8fjph0AAMoG
9Qx73V3bG1//qiwxOEYLZBd6tA78+Nu05BqPlPqQln/yTTqEEDuyd/SG+r63zgFg6tQ4e3yYNgMhJNQ8
kNhyMOdpT3caZj7G8jwWReNQKGiKsM5J6eH2YNbZfFLtcLGCZDrqNczf/TprPoZaTpT5kJaQQG0bf538
xIzxnauV/qqOeg25S0ocnytlZFl9jdSV4kr76NTVezwqW52SksIhDE06a81PzWRDNTfhkQtXtTYHL4is
GgL+s2lj+gquEO2jcdgdbF+70/lhQ95brwDQWa4oZ2jkVoDCEzhdPNp5+GonT/er0zJlTXkjkKKov6tr
CwtQtHC4WI2nbWqVzIEuiWGbPN2vD8+yavNhZVZBZdCQLgn5DXl/vQLA++8nOzq38PuVIpEgq+oYAAiS
H+npfiP9FQViiJsIhd3pqrbAhoKiugIgzy4AYuCHdI9a/dVLg694tF8fHufIacPwDnH6nWluFojrQr1X
3b9+JXlDRKB6XUOM1QWDlfd46e5Wsf6nySacDRwWIK+srs3swh5PoPLTyk74UdxaT/frw7PMfHebzGpn
wwb3CK9z5t/t1DsAIIRwsF65kiKQWyHKxlJmdMQuXnOklyf7bBWvO0kKuIUpNIE6ZbUBwOFg/Txtz18n
S6/vdpIP8TmfbfNXyMmyKcM6N1iPsUH77mF6zSm9RvFHQ43WBMY4KONg1iOpqakeywmgFdpSOUOe81R/
YqPTyqu9GZ0s69HCKhSBIC5I4dP2bwJ0ahMax8shszF9NOgm+2h+v4rQQEUGIdCW4JUy238uK/okeqq/
qUlxdrWCvuCp/sRGSVHV7mKQiPToeoxOw2TG8gcb9aXyITyZmZgyGhxhnz3rvhJ0XWnwU/aeNi2/8FPT
blNTG4vdyTFnsys9ejZAraSbbC6Ak3VWK5qqklNutQEaAgIwRwYq5/tEPr2fLNsFv3tig7c0tp8GB4C5
09qYokM0b1AEeFwPHmOgbE52ano69phaMEVQp0hCmN0LoeG56j8HBUN6LAhr1fSVUqfJl/XXBCAUtCkl
pb2z0f005s0dovR7tCpGkLWAcqOr5ynjoT6e6s/FOk/QJNEki1dwUH2hxuJK+1ECeSYIK2XUzzH9ZE3y
M7qT8OT6WKM6WjKrf0nnBO13JIE8ni3m4nj5/hOFo1JTMz0iGR4RpCinKGiSx1mNDq7ahT5aQZUq5KRH
dmRaR+r3rvUJfXo9aWlp/NSkOI98lxsdSfqGhX0X6q+otQBBQ8i9ap6cBVaPFPW0JZpzeIwOeKIvsbl8
pbxaie+B8WHlCoZudAEXOUNAqxitT+b7DqPRAWD69G4utYJ8nSZRgSccuhmrw+V/ocjS0xN9rU1J4UID
FWebYj6QzcVXmx79v2d6mAJ08kYlZiEACNDKtid3ZARVgPbhfXhkLvH7++N3hQeqt3uir5vBGDNGC/uM
p/p7YGCr1RRFZnmqP7HgMWpbXRtCCHeK1x6jG1HBBSGA8CDNSZ/U952HhxYTEB7ZM2GRWk55+AmCkMni
iB8yc8N8T/Q2Y0LHLL2aaXLDXIPF2RquPajdEtvKsVOvYRoj1W3gWfixEe/3ITAYY0HGrh5bTZw/tUtO
QoTmcwTYo3vIPAa/IoO97/x3fgvxRH9KGbEHNTGVYJud1b237nC1iVGzkpMdEUGKNxu8G4AQfy7P6FP7
9VYwRivXHvLI9/92PCrBpZHLf1DIKI9n3JksrntOXLYO8kRffkr5LoYi3BbV9FYwQOD3GZfcKgJdR09z
f6mVVINyAhQMaYoNY5q0alJz5d2vD2jnfnxwFIBKkLMZHg0AP74+PH/8gPg5lIcXBF0cLy8stzz6+KrD
jS53PaBzwHm1gt7lAbdEA2OAogpb6zkrd7Wp7ppvF48v7NYy4BMCoXrP42UMUdYzLsK3/+9lzHx3m2zP
2dLHg2TE30+ntPf+AAAAsHRG383hAYpGpyjeTonB0S3n9OVHGtvPi1P6FLeI0h9savIATha3/edCRY2J
Ud26t/ghKkixHgDXM+MRWWK1IY3OKvPhOZ5fdTjwbLYzzWJxOV74792XhbIjSM2vdtH6j2UUYfRknxyH
tfmllgcefb3xawEj+4Z9JaOJbE/4JSbFBtuUmpSTZyUXfTPmAAAXdElEQVS3cnA8ekPOUCX16Rdh7HA6
y3wJQF7C8Pnbgg4dy11RbrTHbX9n7PsASLA1K0ECwKcvDTvWu33QPJJA1Z5jbwgWm7NPmdF2f2P7mXpv
l5wArWLLtcF106G00tGtUPV7jeW/Dn4y8e/u7UOep0hU5+QgDsBVULDFFwC8gEcXZ7YoKjCsMlkdwX1a
BbwotD3Bqn46TplXB/nJ6y1TXBMcD8zFAuPU59/YHdXYvjRyZgtFEE3q1BuPQbHraMGc/yzKiKv2IoTw
968M+6FlhPYjAkGdUoQJABJgoIAVYH3UxsT0dHJq2rYBh84UrK0wOwZFB6lWvzdviKDVuAAEDABr16Zw
fTqELvW0EIfB7Oq0+0zhzMaeERjbX3cg0E++y0NuiYbVzna+XGR+vLbrQqNUb8SFajeSBNSq4owQUkO4
ptmUUG+KkKfUD+85VfKF0comdIjTL3mou2OrGHYFjfrvPTvwwt2t/F+jKaLRuerX4TGGCpNz8hkwdWxM
P0+nJJkHtA99jyJQk5K+whio3GLzw48u3pkMNSQHffPiMMuej8ZPjQxUfYFqmYqxLO9/vqBAkLqCPmom
9ZP9/klPrV/258mSVx1OPiTMX/mNTsV8WNfy3o1F8GGftvjKjzoVs96Ti+4OBxt6Ide85KuMY42qhtsz
ovjnAB3zj6f8Eguniw/bd6Jg9fBn1nao7dqWYUEv92gT/BFFomoTfSwOV+CxC0ZBKgv7qJ6X3t/VYdO+
nC8vFpie4zg+IkgnOxIVHjjn27Rkjy6g14TgAWD16umuMT1jV/hrZDsBsGe2mhAiy03Ood/+kvMQ1PAU
rI2UlBROo6BXkgjKPeKXiJhtrpBiE7f4+ZWHalwPWZOWZF//evKCdnG6l1Ry6gJAVRk3HiNFXKhekPLs
PqqSmZlJJT/3U9KGP/NXlRodI3mMaYWMPNUxVj9nbZq4YqyiLPykPdkrJzRQ9YRcVr/tqZpgOQx5xZYn
JqamNy45KChwbXiwcr+H3BIRRF0ttw7feyRrxewP/6j2uPB1fl4xZnWrcF3vED/Zjio5EBgrSRJNEshR
H7exeGPFaydyK7cZLGwPjAEIEi6PG5DwzJq0ZNHFWEVb+e01SpvTMlL/JkWgCk/1abY6WxRdJT5etflw
g+evu9OS2P4dQ+bIGUKwZAvBQIgsrLCP2fv35aULPtpf4xMcIYS3vjWq9KFRradEBCqe0iqZI9drJfAY
IPeqseubP+4XpMSYj2uMeHHzXV2nfr/53GXDkzyP5YCAoEiU1yFW/79lM/r8DhLUYPSY5l5t7F6zhr/4
5/cH7h72cKuySnsiADQ6rRcDMEars0tukfVU3l9rTza0n8F3x5SXoxhtuck+sLE+SQBlsrq6XC4xt05O
eXTHsd+/rbFCTMaPq+xX/l7314dvLfixwszB1XJbOx6DwuZgoymgDp/c8221VYh8NIz09HRS3ubhBX+d
L3vbaGW7YQwyAAAEUNguLuDrX94a84ZUvom+9xsmV8/RqWT7PZWKy/EAlUbXE59t+7vBFXLT0tL4iED1
VwoZ1eQWBK9TbnIMOnbJ9PmgWRvqVFQlZUg3Q3t6xMKHByfe1SJcPyVQJ9ubW2wa/nBqplxoX+8UMMZo
xAvbhi7bzn+352RJGsvh8OttBAAXEaj4YftboxZI6aMkGfGLP//j7jW/Zn1itrk6Amp8KEAIICpYuSGy
HKWsXdvw7ZMnlv360C8HCt5hMW6SQ2EEAAxDHB/QKXSRuaVhY331/Rau3B2VqNGVT5nS8EozPq4xIDVT
rrWZ55/MKn/RxfKKm8f2BAIuxF+V/sTIDtOnjWkjafVlyY7EjFuwbeTfF0redLn4lh7qsrxzy6D5P68Y
sbqhHUxMTWfyCtF7l4vN0z3kkyRQFCoOC1B9fn9y4jvPju7osRwMH7Xz9bYD2h9+LxqTXWR53GRxduAx
aG+/JsRP/sPUkZ2enjmuba1JWkIj6Zm44c9tnHs23/g/F8t7ZNipkFM59/ePH/fajD5HG9rHSx/v6rBu
d/7nJhvbzRM+SQWBEGhVzKHEaPVr93ceuS0lBfly/QVk5rvbZGcv2VoaLexrVw320S62apY5QsBq5bJd
U+9t++CLUzoXS+BmFSQNAOnpJ5mVu8+mZhWa5vA8NFr+GwGAVk1n9OsS+uiq2Q0vbT34mY3JFwuN37lc
vK6xPkkNTRFXlXJ6fVKH4M9Wzh38t9T+NEde+nh/h+2Hch4vNTjvd3G8HgC5/S4H6+U/jRoQ/2Ta1B4e
q+bUWCQ/Fb94zcGA9buy3r1a6ZiAMZZ5oEtXqwjte/0HcAvSUlIalHiUmZlJpa0rm3vhivElANQsFsXU
ciorMVLzAyNDn657fXSTOwrtbaxadZhef/ZKDEWi/17MrxxtdXJtqztbigBcfhrm15QhCTNfntLTqz57
yQMAwLV86G0H81cWllonYQ/4RJHIGuqvWHzwk0k1ymjV6FN6pjozs/T9S4Wm+5tLECAAeJWC+lutZLb3
7x787lvTk3w6gA3go3WnWn627eQzRqtjvNXOBWCAag9SIQQQqJVvHNgp/Kl3nh9QKKafdcErAgAAwIzF
mS3+vFDwTnG5Ywgg1OiTaXKaqOiQ4Hf/T0tH/drQPu5P/TX8xKWSLQaz864mJRxQCwjAqdfIj4YFKdL9
Naqt94z0y57ukwSvkbmrDuvOnLscb3Rwj+WXWAc6XWwbvpYvBULgDPZXbhjZO25h2qPdvVKO3msCAADA
/fM3hZy8bP6+wuRM8kB3vFpBHku5J+7xRY/1O9LQTianbo0/fL5ym8Xm8li5cm8BAeZUSrpUp5Jv6p4Y
+MsHLyT9JLVP3sYXmdnyX3479fC5K6YxZouzh8PF+9XlYUAgAL1W9tXgjrHPvT27t9eeNfGqAABwLV0y
r8i0vMzk9IgKsEZBZQ7oGPjfVfPvzWloH5NTt/b/62zZZ1YH38ITPnkjFElc8dfQp8x27uMuifoLE9rZ
zoh1JNXb+OKLTPnW87ZW5UZHz2Kj7XGjxdme5+u+PkWSyB4ZqF79n6EtXp8x3jtW+6vD6wIAAMC0RRlx
f54r/bLS7Ozf2L4QAB8RrNw0e2K3qSlDEhpURBNjjJ57e0fypv1FHzpZLrqxPnktGHhAwCkZ0hbsr9jQ
pWXgzkHx+q1jx3bxqLSbt7J6/YHIA+cMo05mV/YuMzhG2Z2cHOqZsk6RKLdFmGaNf0Di62vTGl++W2i8
MgAAAPR/akOvMoN1eaXZ1dcT/UUHK94OAOVLW1ePqjFXvibGzt824diF0jebdRC4CYIAUMroM34q6oLB
yn7XLjYw+74hicc9VZlWatLTMZmZs7fdnhNX2uiV1MQyk72d2cq2buh6j4whsxJCVG/teH/8So86KiBe
GwD+r717j46quvcA/tvnMWeemZlk8n5AHhKSUFJeuWnhChEQiDXgpaAtq7oqWtrqQgtUtNXGSLkCQikX
ZRWU2oddSiglXhFEkfAmlPB+SB6EAHmRZJ6ZmTPnsc++f3BTaelSMjN5THI+f2at7PWbtWZ9Z5999v5t
AIAfrfos7cSl9t93huFxgKKQKz/DsnXX2jnLQhln+cb9c3ceaVrjE3BYbi2OFAhAYRlKMejZA2Pvs+39
zzGJHysJQn0kLh5u2FaVe7nBM/1UvXOys0v4jiBimoRwLgYBgE7L1E4fl/TKpp9P3Q79cKovWAM6AAAA
SpZXjLnW4lvn6BImAoT2doCiwJ6danljosWyrqysqIe9879U/ELFQzWNnk0BcWjMBP4dGiHeZGDrTXr2
JkXTn1AIWnNTopozc1MuLu/n/e3dSisrGf4Sk11d13mfIOIYUGCaT5QyXB4hS8LhOe+BEIDVpDmWk25d
Wl5WHHHXzw/4AAAAeKy0IqnmBv92hzMwM5SkBgBgKHBOyU949Y9K1ZtQVhZ0V+C3tp8a/dbOy9vcfnkE
9MOpyoGIoRFoWeqkQce6RqSaj34jy7Zjy9ZL9YY4g6KzOkmG06psL5+nAApTn3tCUOmrr6LLeXmoYV8G
5b5xlJpdMt5MZFJ0qrb94VsOX5YgKjkyVqK+7pVdMGgKSQnR2o9WL4h/tKgo+B+U/hQRAQAA8PSa3Znn
6zwrmjv4uV+18eJeMBRyjBxuWbn3N7PXh3LpwiMvfTSqqd23stXOP0AAjKHUNNggACAADppCWMcxbq2G
cmpYul0h4OBoStRx1Dm9jrll0nF+lqFlhGTCcYygZVgBAAATmaEUmjAspQREmfH6ZYMoiayg0LQQkLS+
gJQZkPBIRQGOIGQNCFKcLyDZRIlwCCC6t+fgWg3ddl9q1Jq0ROrPW5aVROyGqogJAACAF/94Iuazgw2/
bXcJjyoKCamhCENTHUWjE1ZpEmI2blkU/HPsE6Xvar9o1m9qc/Dfxz14VaSKTAgAazX0maxkw7pP1s/9
oL/rCVWfdQQKhyMV7/CLlz1/wOGSsIeXCkM5QKQQYrjR7i2gBT9uOFF+NNhxzh38UJ6/4KnDFM3Y3T5p
PFaI2l57kGIoBEmx+vfHpFuX71g1+/P+riccImoG0K384kXN79+pW1zb4nlKEPCIUJqK0Ag6x2XH/U7i
8Ou7yoJ/RQgA8IPXdhefvGJ/ycvLhYSEfrpRNXBoWKohb7jp3fnTMtY/PmPwNEyJyADo9l8v7y6+UGd/
nRfl0aHc8kdR4Eyx6f5wfMtjS0Kt6dk3Dqb/vab1tVtOoUjGitpqO8LRFPLazNrqtHjjsnzu5JmyEBaO
B6KIDgAAgF+/fbDggwPNr7l8wsQQF+IcKXH6gwUZcYs3vlgUcofgub/46MmLje4lXr+UAQC6UMdT9TmZ
09Bt6fHGTdnZ1o2bnu3bfv19JeIDAADg+y/usnYEpNW1NzxzZUUJ+v0uAsDWKHbfEzPSn1+2YOKVUGoi
hKDZL3yY6PYryxvb3MUYQ1bE7A4Z4igKtUUbuXPZadblOStmXChDaFD96t9pUATAbQTNWPLh4obmrp/5
BTkBAIJakUcAoNfSp8dkWpduW/nwgXBU9tgrex+5dN2+yN0lTsAR2nB0KEAIfHot05iRZN76ybqS9f1d
T18YRBtYEFlYKL6ZkWCcEmPSHAo22QgA+Hj8zVN1jopZS3Y+FY7KPlgxY+eEvLR508YnvKjj6LPhGFMV
XjQFtTnDzG+nRhsm/4fx1Ib+rqevDKIZwJdKNx9OqzjWvMTjE+aLspIY7Dgsjbyp8YYN47Li3gpXN5ef
vP5ZRlVtx0IvL30vIJJ0pTe2qKnuCUIALE21mvTsidGZ0ZveK535WX/X1NcGZQAAAMybV05rcvTz/17j
eNkv4NzgRyI41qKruC/etnD76ulBHSe+a0RC0Mtv7U+73Bx45nRtxw9lTGzhGFfVM3FW7d6SiRn/ffnm
9artZcH1j4x0gzYAuj2z9tCIkzWtS2/Z+XmyQqxBDsNbTdwX6QmGtWP1JdvKysKzKEQIQc+88Wl+1RXX
tC6/uIgX5BhCINgaVfeARqjDbOJOJcfqtk4fGbd/6dMDt1tPXxj0AdDt8df2PHX0YsfagCBHBbtxiKFR
Z26GdceeN2b/ONz1AQDM/9Wu0nO1jmJvQJ5w+y/hukBtqLu9S8Ri1Bx6qCDlf9YsnvK3/q5ooBhSX7CF
K3ePrrnZ9fTNDv8cGUNKkMM4oqO4qnE58ev+8NLU/WEtEABKt1SlVNe2TXB0iQva7P4JokxSYFAt1vYd
BAA0hTqSbLoD8Rbdu5Pyk04uWzA+Yg/u9IYhFQDdfrHp8KzthxtX8QE5h5DgbinmWOb8yDTzDqoL1obS
ZeirrP1Lte3z083L65s8swKSnKVgwgBCEXV+oz8gAJFj6asJMfojMwvSVrzyZMHN/q5poBqSAQAAUPLz
iiRC0Pzalq6FXr80KpgxKAQ+k4GtyR1m++VfV878JNw1dlu0bl/y+Tp3tk4DMztdganOLnGs+vLgbjQC
nBRr2Btl1P4pzsRdeq9sRtBXxg8VQzYAuq1479SwPUcaXmjp9D8syUpqMGNwGvp6VqJxV3qMccPmXz1Y
F+4a71RZeU27v6b5W8cutT/UZPfPDAjycBkr9GC5vKSHBIZGsl7LHk616U7OmpD8t+cXFJxHg3jnXrgN
+QC4jaCpz+ws9Iryq612XyFW7r7R9esgINioZ07HmLi/TMs1vVv2XLGnNyq900/XVCYcv9KeHmfhxnY6
+fkeXhrPB7B+sE8OWBqB2cgdT441fNzq4Pd/d2Ji/S8X3t/R33VFIjUA7rB5czV7tLXtu+cb3Y85usQp
GPc8CGgKeJtZeyQnxbw6KyXueNmi8b2yPvCvSktLqcT876Sfveb/Zl2TPafTEZgkiHiUX8QmjEmPP8eA
QUChaeTV62innmMPJ1q5s7np5rMT4ooOqDceh04NgH/jZ28fi2681v6tay3+F+xusUAhpMfTa46l7RaT
Zk96kmnbjl8XfxxK67FgrNpcba6+0Rx9vVWMSbRx99u7hG93OAMjRAmnyQoxh3J8urcxNAKWpi5ZTFxT
nFX7cdMt35Fv5CV2ZMVDZ9kPiwZFS/KBQg2Ar1D6ZqWx6mrXgna3f4bTw98vyRDT0zE0DOXKTDb/OSBK
7zwyJblu6aPf5nuj1ntRWkooKf5AwdmrrrHOLilaUkiSLCmFkoyNMgadIOMoSVb6ZLaAEADHUryGoW8x
DOVnaeRlGGq/QaOx56RFXS7Miql+fIDfqjMYqAFwD55cfcTk97uzWzoCz12/1VUgYzKiJ/9PAAQdS/nj
LPodhaNi3lv/3AMHe6vWnqisrGQqzoLR7hI1LR6RjTeStACmojUsm8wLQobHK6XyAcnm5RWLKMsGAMgj
5PaBKUIAFNK91tb9NSJAAQJEoX9sYUIATRqGajEZNHYjx3TotXQ7p2WuBgS4ihWxg0GoPdVqEGxRjJAX
18EP1evI+osaAD30g9LdxecbXQ8GRDzHH8CxCulZD0ANgzpjLdozJiO74YlZmQcipb1UaWklkzxal+Dw
EhNGNO3zCkanN2AkFKE1jFZWFIyIghFDIyElJsbBceCjFVFOTjW55kwaGPcEqO6mBkAQJpdWMuByGZPN
uoVXbjofcniEIgn36KGasDQlGA3svkk58e8XTx9ZUTI+uU8WC1WqO6kBEKINu2u5fZV10292eKZ6ebFE
lEgG7sEuHQoBWEza6hgTV6FjyfHUnGFVW/rozYFKpQZA+KB588pZfX7UTy82OGe6vdIMQVbgns/7E1Bo
CohBx56ZmJ/02wfTOz9Qn4dVvU0NgF7wZnml8Vy9mHfpujuHF/Fsr18cJUgk655nBggFDBzdFGPRfm41
avZkDzM3/ObZyRdRuK7UUqn+nxoAfWDbtmO6//3C/aOTNfY5GCsZMlaSsEIoQu7tlB/HUmCL4vaMyox+
/9PTF/6amTdWOhjC5aYqVTc1APrYT1Z9mnPhRtcwRMEknpcm+Hh5XEDEMTJW4KsmCAgBIAAfTVFd1iju
BCD4PGeYqX58VmzNmCTfjUi9nFLVv9QA6Gdbd5+OvdrIj6260v5gQ4s7HwEaiTGJVoBQQID7ujk/Q4Ev
yWbaNzzReNpiYKvONrjOxsVTYlo0x298rljokw+hilhqAAwg5eWEPnT9UNqJL1pTLSYuQ5KVyW6vMIKX
FIOMldEyJkghBIhC/mm2gBAAhRDQtzfgtHAa2sOx1BUJk3PpiabrhSNt5+IN0Pj0o0O7/ZXqbmoARIB3
Ko6Y2j10bks7P7zVFUhqueVL6/TwD0iY6BAgDoBoCBAWK6AhBFgEX55d+LL7GbFrNUxTQrS+PiaKu8pp
UDtB0OrxwIWAwHtYLa1EmxC2GHWygjQKy8nERGsVzsRi4IyKMdBMNE4sL148S1QXIwcPNQAi1OZqwrac
OW5y2AV9s9ers3tEzuEOcGk2QzpFowwgVJSIlTifT0jgZWwWJeAECRtkCWsxUTSEAE0hpDAMcmho2sNp
ab+BY90GLeMy6hiXzcy1xVoNzeYori2KIe1OBVrTSZx4+fJWYbDdjzeU/R9639sLe/u2bgAAAABJRU5E
rkJggg==
</value>
</data>
</root>

65
SLZ_4/ConfigINI.cs Normal file
View File

@@ -0,0 +1,65 @@
using System.IO;
using System.Runtime.InteropServices;
using System.Text;
namespace SLZ_4
{
public class ConfigINI
{
public string inipath;
[DllImport("kernel32")]
private static extern long WritePrivateProfileString(string section, string key, string val, string filePath);
[DllImport("kernel32")]
private static extern int GetPrivateProfileString(string section, string key, string def, StringBuilder retVal, int size, string filePath);
/// <summary>
/// 构造方法
/// </summary>
/// <param name="INIPath">文件路径</param>
public ConfigINI(string Folder, string INIPath)
{
inipath = System.AppDomain.CurrentDomain.BaseDirectory + "Config\\" + Folder + "\\";
if (!Directory.Exists(inipath))
{
Directory.CreateDirectory(inipath);
}
inipath += INIPath;
}
/// <summary>
/// 写入INI文件
/// </summary>
/// <param name="Section">项目名称(如 [TypeName] )</param>
/// <param name="Key">键</param>
/// <param name="Value">值</param>
public void IniWriteValue(string Section, string Key, string Value)
{
WritePrivateProfileString(Section, Key, Value, this.inipath);
}
/// <summary>
/// 读出INI文件
/// </summary>
/// <param name="Section">项目名称(如 [TypeName] )</param>
/// <param name="Key">键</param>
public string IniReadValue(string Section, string Key, string strDefault)
{
if (ExistINIFile())
{
StringBuilder temp = new StringBuilder(500);
int i = GetPrivateProfileString(Section, Key, strDefault, temp, 500, this.inipath);
return temp.ToString();
}
return strDefault;
}
/// <summary>
/// 验证文件是否存在
/// </summary>
/// <returns>布尔值</returns>
public bool ExistINIFile()
{
return File.Exists(inipath);
}
}
}

167
SLZ_4/ConfigMes.Designer.cs generated Normal file
View File

@@ -0,0 +1,167 @@

namespace SLZ_4
{
partial class ConfigMes
{
/// <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()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ConfigMes));
this.label1 = new System.Windows.Forms.Label();
this.uiTextUrl = new Sunny.UI.UITextBox();
this.uiButtonSet = new Sunny.UI.UIButton();
this.uiCheckMes = new Sunny.UI.UICheckBox();
this.uiCheckMesIn = new Sunny.UI.UICheckBox();
this.uiTextPort = new Sunny.UI.UITextBox();
this.label2 = new System.Windows.Forms.Label();
this.SuspendLayout();
//
// label1
//
this.label1.AutoSize = true;
this.label1.Location = new System.Drawing.Point(39, 66);
this.label1.Margin = new System.Windows.Forms.Padding(5, 0, 5, 0);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(39, 19);
this.label1.TabIndex = 0;
this.label1.Text = "IP:";
//
// uiTextUrl
//
this.uiTextUrl.Cursor = System.Windows.Forms.Cursors.IBeam;
this.uiTextUrl.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.uiTextUrl.Location = new System.Drawing.Point(127, 56);
this.uiTextUrl.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.uiTextUrl.MinimumSize = new System.Drawing.Size(1, 16);
this.uiTextUrl.Name = "uiTextUrl";
this.uiTextUrl.Padding = new System.Windows.Forms.Padding(5);
this.uiTextUrl.ShowText = false;
this.uiTextUrl.Size = new System.Drawing.Size(293, 41);
this.uiTextUrl.TabIndex = 2;
this.uiTextUrl.Text = "127.0.0.1";
this.uiTextUrl.TextAlignment = System.Drawing.ContentAlignment.MiddleLeft;
this.uiTextUrl.Watermark = "";
//
// uiButtonSet
//
this.uiButtonSet.Cursor = System.Windows.Forms.Cursors.Hand;
this.uiButtonSet.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.uiButtonSet.Location = new System.Drawing.Point(133, 318);
this.uiButtonSet.MinimumSize = new System.Drawing.Size(1, 1);
this.uiButtonSet.Name = "uiButtonSet";
this.uiButtonSet.Size = new System.Drawing.Size(175, 44);
this.uiButtonSet.TabIndex = 3;
this.uiButtonSet.Text = "设置";
this.uiButtonSet.TipsFont = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.uiButtonSet.Click += new System.EventHandler(this.uiButtonSet_Click);
//
// uiCheckMes
//
this.uiCheckMes.Cursor = System.Windows.Forms.Cursors.Hand;
this.uiCheckMes.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.uiCheckMes.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(48)))), ((int)(((byte)(48)))), ((int)(((byte)(48)))));
this.uiCheckMes.Location = new System.Drawing.Point(146, 240);
this.uiCheckMes.MinimumSize = new System.Drawing.Size(1, 1);
this.uiCheckMes.Name = "uiCheckMes";
this.uiCheckMes.Size = new System.Drawing.Size(150, 29);
this.uiCheckMes.TabIndex = 4;
this.uiCheckMes.Text = "MES在线";
//
// uiCheckMesIn
//
this.uiCheckMesIn.Cursor = System.Windows.Forms.Cursors.Hand;
this.uiCheckMesIn.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.uiCheckMesIn.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(48)))), ((int)(((byte)(48)))), ((int)(((byte)(48)))));
this.uiCheckMesIn.Location = new System.Drawing.Point(146, 203);
this.uiCheckMesIn.MinimumSize = new System.Drawing.Size(1, 1);
this.uiCheckMesIn.Name = "uiCheckMesIn";
this.uiCheckMesIn.Size = new System.Drawing.Size(150, 29);
this.uiCheckMesIn.TabIndex = 5;
this.uiCheckMesIn.Text = "MES入站";
this.uiCheckMesIn.Visible = false;
//
// uiTextPort
//
this.uiTextPort.Cursor = System.Windows.Forms.Cursors.IBeam;
this.uiTextPort.DoubleValue = 20480D;
this.uiTextPort.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.uiTextPort.IntValue = 20480;
this.uiTextPort.Location = new System.Drawing.Point(127, 125);
this.uiTextPort.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.uiTextPort.MinimumSize = new System.Drawing.Size(1, 16);
this.uiTextPort.Name = "uiTextPort";
this.uiTextPort.Padding = new System.Windows.Forms.Padding(5);
this.uiTextPort.ShowText = false;
this.uiTextPort.Size = new System.Drawing.Size(293, 41);
this.uiTextPort.TabIndex = 7;
this.uiTextPort.Text = "20480";
this.uiTextPort.TextAlignment = System.Drawing.ContentAlignment.MiddleLeft;
this.uiTextPort.Watermark = "";
//
// label2
//
this.label2.AutoSize = true;
this.label2.Location = new System.Drawing.Point(39, 135);
this.label2.Margin = new System.Windows.Forms.Padding(5, 0, 5, 0);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(57, 19);
this.label2.TabIndex = 6;
this.label2.Text = "端口:";
//
// ConfigMes
//
this.AutoScaleDimensions = new System.Drawing.SizeF(10F, 19F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.BackColor = System.Drawing.Color.LightBlue;
this.ClientSize = new System.Drawing.Size(449, 383);
this.Controls.Add(this.uiTextPort);
this.Controls.Add(this.label2);
this.Controls.Add(this.uiCheckMesIn);
this.Controls.Add(this.uiCheckMes);
this.Controls.Add(this.uiButtonSet);
this.Controls.Add(this.uiTextUrl);
this.Controls.Add(this.label1);
this.Font = new System.Drawing.Font("宋体", 14.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.Margin = new System.Windows.Forms.Padding(5);
this.Name = "ConfigMes";
this.Text = "MES配置";
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.Label label1;
private Sunny.UI.UITextBox uiTextUrl;
private Sunny.UI.UIButton uiButtonSet;
private Sunny.UI.UICheckBox uiCheckMes;
private Sunny.UI.UICheckBox uiCheckMesIn;
private Sunny.UI.UITextBox uiTextPort;
private System.Windows.Forms.Label label2;
}
}

43
SLZ_4/ConfigMes.cs Normal file
View File

@@ -0,0 +1,43 @@
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 SLZ_4
{
public partial class ConfigMes : Form
{
public MES_PARAM mesParam;
public ConfigMes()
{
InitializeComponent();
mesParam = new MES_PARAM();
}
public void SetConfig(ref MES_PARAM pParam)
{
mesParam = pParam;
uiTextUrl.Text = mesParam.sUrl;
uiTextPort.Text = mesParam.iPort.ToString();
uiCheckMesIn.Checked = mesParam.bCheckIn;
uiCheckMes.Checked = mesParam.bCheckOut;
}
private void uiButtonSet_Click(object sender, EventArgs e)
{
mesParam.sUrl = uiTextUrl.Text;
mesParam.iPort = int.Parse(uiTextPort.Text);
mesParam.bCheckIn = uiCheckMesIn.Checked;
mesParam.bCheckOut = uiCheckMes.Checked;
FormMain.form.UpdateMesConfig(ref mesParam);
MessageBox.Show("设置成功!");
Close();
}
}
}

502
SLZ_4/ConfigMes.resx Normal file
View File

@@ -0,0 +1,502 @@
<?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>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
AAABAAEAAPoAAAAAIAAOWAAAFgAAAIlQTkcNChoKAAAADUlIRFIAAAEAAAAA+ggGAAAATgyZrQAAAARn
QU1BAACxjwv8YQUAAAABc1JHQgCuzhzpAAAAIGNIUk0AAHomAACAhAAA+gAAAIDoAAB1MAAA6mAAADqY
AAAXcJy6UTwAACAASURBVHic7J13fBRV18fPnba9pPcOhF4E6S1SjfQSFB9RHlEURVSUquaJKNWuqGDF
bmhSRCJiaCIgCNJrKiQhfXubmfv+wQsC2fSdmU3Y7+djyd7Ze042O2duOfd3EPhokqw6fJguP2dTF+Sb
VMUmkJUYnbKScpM8JkwdRxJkHEaE1uHiQywWR6jNxepcLMjsLlbtcnJylucZjgcSEGASAU8ShJNhKLuM
Ji0yGqxyijQrFUyxnKGuAuJLMYuv5BSaL/lr5Y7QAIXNX044dXrSGpYQY56V3Moh9Wfho+EgqR3wUTvp
mSfVWbnGtnnlztjiCnt4/lVjdIXBnsRyWAEI5ADA8BhojucZjBGDAMvx9TdjAFxD3+5AN/517T8YwIEQ
cpIEOAmEnBgjFwKwEySy+WtkuyNC1PmhfvL8cD/6SqS/+uTUsV0qPfSr+xAYXwDwItLTMfnHlV1RB86U
RGqVVIKL5QcYzK5WdiendnF8R5bDiMcYMI+Br+9dLRAIARAEAgIhoEgEFImOMzRl0WtkFxmEjxssrkM9
Wwddaa/T5U2f3s0ltb8+bsUXACTms21/B2XlObvsP1UwNLvQ2BEh1IbnsD+HMQkYZF5yn9cbBAAIAUYI
2SgCGXnAJ6OC1Wd6tg/9rVt75Z+T+t9VIrWPPnwBQHSeXPprm2M5xmiaJvtazY7uFid7l93BBbIc7zVP
daEgEABJEiCnCYNKTh5WK2XHXCz+vVWsNv/L+UNPQv1nKz4aiS8AiMCPP+5XbDlreOzg2dIxPMfHsxyE
czxPYgyE1L5JCbq2AMmRJCqmCHSxU4Lf9hkPxH6Q1L69WWrf7hR8AUAAvso4ptp9tLTd2ezy1jYXP9pk
cXZwuPiWXHN/xDcSkkBAkShHp2JOUST5U+tov1N92/idnp7SzSC1b80VXwDwIANSM6k4xvXUiUtl9xrM
rmEOlgfed9M3CAIhYGgC1Ar69zbR+syuLYm3X5wyzAq+aYJH8QWARvLutvOynbvOD84rNg0y25yjnS4c
73vSexYCAcgYIlutoHcE6lQZI7uF/DbroZ5Gqf1qDvgCQAMYkJpJmQtLVK3DNI+ezq0cUWFyJLk4300v
BjSJQKeW728Zqc4wGy0fRTsqK1evnu7bXmwgvgBQT6ak/Xzv8UuVQ20ufqzVzgXxGCul9ulOBCFkV8rI
YoZG+9vH6NYnjQnbNL2bL8+gvvgCQB2Y8UGmuvKqM/FyuXlWbpGxB8tBK6l98vEvFIUgIkC9Nj7S7x0l
zZ9aPW+Ib9GwjvgCQA2kfpCpPnjROLnYYBtWbrT3d3E4UGqffFQPRaAKvYY5EKRTbRvU2v/b+TP6VUjt
k7fjCwBueO7N7f65Ja6e2UXmOaUGRw8eY7nUPvmoOwQCl1ZFH20To3/D30+VufqFpFKpffJWfAHgJlat
OkzvLSgefyqn8v4yk3Mgx2Od1D75aDgkgYw6FX2gTbT+hzbRIT+mTe9mldonb8MXAAAAAKMhszZ1N9qc
aYWlll4cD1qpPfLhOUgCWYP9FX+qZMRrwYF4/9q0FKfUPnkLd3wAWJp+OHpzZs6cghLLKBfLR0ntjw/h
oEhkDtarNiT3DV+SNrXPWan98Qbu2AAwdsEvYZzLkXL+suVRk83ZQWp/fIiHQkaeaxmuW6OQkT9uWDoi
S2p/pOSODADzPtqXvGFPzmKr3dUGY2Ck9seH+CAELjlNXRwzMO7lN2b0XS+1P1JxRwWAR5b82uFSruGx
vBLLGJbDvuG+DyAIKIwIUGYkRuk/+PLloX8jhO6olM47JgA8vCjj0X0nrr5hd7A6QOiO+b191AGMMUUR
9m6JAWnrF49cJrU7YtLsb4Sn3tjR6q9zZbOvltknsDz2l9ofH94LSSBDkJ9sa6f40KWfL0w6KbU/YtBs
A0BqaipxCXqkHDxb8rLVwbeV2h8fTQeGRDndWwcsb02pP0lLS2Kl9kdImmUAWPT5oaj1ey49bzA7JzlZ
Pkxqf3w0PWiSsPlpmW+H9Y5ZtvSx3hel9kcomlUAmJieTloOEpGXi52ry02OoXfUao4PQVArqYMxIfrp
vbTqU81xNEBK7YDnwCgq+uLTly5bVhutrvYAQEntkY+mj9PFRxot9tFmGhP3TX748KHt33JS++RJmsUI
YHRqpt5qNCw7n1vpW+jzIQgkAcbIINVvWn/1E9uXJDcbSfMmr0qb9vkfd1+6WPD9meyKyb6b34dQcDxo
865ahublV6x7ceWuJKn98RRNegQw/uWMe4+fv7rU5uQ6Yt+E34cIIAQgo4lziVF+r297c9TXUvvTWJpk
AEhPP8l8+ueFmRevGB9zOLhWvsQeH2JDU0ROywjNZ6P7+L3zdEpSk61j0ORunLe/OKrffCTruawi01yW
xTKp/fFx50IRiIsOU6+8p1vAkrSpSUVS+9MQmlQAmLfmYMCvuy69XWpwTOJ43yEeH9JDIOQK0Ml+7t85
cNZ7zw7Jk9qf+tJktgEfW74z4eCxguVFZfYU3neCz4eXgAFIm4NtUVrpih867tGT/2R+26R2CJrECOD+
F38KP1ds/aTE4BiOm8HOhY/mBwLgtSpmd+vogBkblgxvMmIjXh8ARi/Y2jnrsuHNcqOjLwDyPfk9BEUi
kDOEjaGp8wxNWggETgKBgyIJE4EIG8Y8hxDieYTtPI8cCGFEYCwHIIBHiCUAyxHmVRwGGQZEYZ5XOFhO
w3Igd3G83O7kwlwu/o7TVNSrmQPx4erntiwffUBqX+qCVweAJxdtj9p/ofzzUqNjsNS+NCkwxoAQJhEA
TRM8RZEH1HKqMjJIcT4hPODv2FDVBb2cL1crFRXjhrQtBwHq7aXvuKTLKyxrV1hhSigxclHZhaZ2pQZr
otOFO7EsjzgOIwwYNccdHJWCKhrSJXTcyjlD/pTal9rw2g9/wMz1PcsqbCsqzK6+UvvSFKApAuQyMkvJ
EEUaBbO3oMT2T2CA3NQtISRrSFJCzqhuEZIr4m7bdl6251JRzLHssqisK5bAQL08keNxL7PNGWFzsO0c
Lr7ZTO+0Cjo7IUz72Na3Ru2U2pea8MoAMH3JL7H7TpWvqTQ7+0vti1eCMUfThFNGkQ5/Db01Llxzok1c
6IHIGP9DU5Pi7FK7V19+/DFPkW2/0vXCFVPnnGJLYlGpbYDV4UpwungaAGip/WsoKgWZ36ud/6g1L404
JrUv1eF1AWDU3J+65BRYVpSZnIOk9sWbQAiAochLfloml6HJTTTA0V6dIvNbtw4taoo3fU28/tnfQX+c
zosvrrDHUSSaWGpwdHCwfMumWGpdo6TzWsdop/y0ZNRuqX1xh1cFgP+kZgQfyyr9ocLkbDa51o2BJMCp
kNGVShlxOkAr+7NH+8BPXn98QLbUfonNh+uPBR84UzzqbG5lV5PFOdpqZzUsj9VS+1VXtEr6bIswTfKW
N0d73d/OawLAo4u3t/j7YvnbxeWOIQBwx2b4Xcs1J8+GB6r+VimoX4PUyj97tKMKmnK6qadIT08nfz2n
iz6Xb4oiGXigsMTW2+biOnJePzLATr2K/rNdC93z6Wmj/pbam5vxigCQ+sl+/20H8lcWllknYS/xSWxo
mjApaDJbq6R+Hd2/5aoFU7o2WxUaT/Ht1uN+X/6W9UhhqbWHzcne43BxQd58KCxYJ/ulX5fgqe89O/iq
1L5cR/KbbfGagwHrd2e/c7XCNhHjO+vJTyAAuYzKjghQ7FXLyK9CAjQnP10wqPhOk6ZuLCu+OqY6cL6g
ld3JPZBTYOprsjp7eeOoAAE4A/Xy7RMGhT/x0kMDCqX2B0DiAJCefpJZuefcK1kFxrk8f+co+BAABqWC
OitnqO3JvaN/WDLdV6bKUyxdfSDyt5MF4wtKrePNdrajNxZ4jQnRrHxiXIu5U4Z1tkjti6QB4N7nN845
k2tMc3H8HVF+myIRaJT0/k7x/ustDtuan5aOK5Pap+bKg6nbtGY7d9eVMsvcMoNjuIvlwVumBySBnG1j
dW/+t+eYl1NSkKQSY5IFgNFzN4/8J6v8TZcLt5TKB7EgSSjTKJhjYX7yH7q3C/x58RPeMfy7E0hPx+TG
szuGnc0tH11psI90snwwAJL8EByBwNGxZeAjPy8f+YOUfkgSABZ//sfda37N+sRsc3Vsjqmg1yEJBEo5
eWhA57Cldgv5y5q0pGa1X9+UeHzVYboyt6DDmXzTm0arK5HjcJi0AwKMGYq8NHZA5Oy3Zg7aLJUXot98
Y+btCLiQX/y9weoc4i1DMk9DEAi0CuqgVs18dU+P2C2v/7d7vtQ++fiX+174acqVEutjlWZnOxeH/aTy
AwGASkH+3bVtxLjvXh6UK5UPojJo1oZPz+UaHsAASrFtiwFFIHOHeP2qlCGxqd6wyOOjeh5etP3B3f8U
zmdZaCfhs8gRH6Zdv/ej8Q9KYVy0AJCamUkd2mJ45nSOYSHL881OvZcmkTPIT7YhMlD31salyX9J7Y+P
upH62d74jIOFD5VUOh52uNg4KUalBAJDy0jNe/36tX4tLaW9U0zbogWA4S9sS7iQX7rb7uAixLIpEqxK
QZ0Z0Cn0zXDb4K/T0hAvtUM+6s/yL/9K+H7XxTdKKu33YYwpsdemSBIZowPVyftWTfhDTLui/JILPz0S
s2X3uc/KTPZ+zUnUgyaJ8paRmo8jQzWffTF/SJbU/vhoHEvTD+t+3p0/+Gq5eaHVznYRezSgVTJ/je4V
9Z+lM/ufF8um4AEgNTWT2pRb9E5ppf2p5rLmhxByaeT0vrax2tT1S0buldofH54ldfW+zj/ty1tUYXYk
cTyoxLQdoJWvGdQp5sm3Z/e2iWFPcAGGM6xtUqXZOaG53PyAoCA+XLs0+a7Qqb6bv3mS9njfY33iwh7o
lug/S8GQOWLarrQ4Rp/KK5wulj1BRwDTl+1q+duRvC12J5copB2RsKkV9IVhPaIXvvds/61SO+NDHCa/
9HOHk7mGVystzmEcjxVi2GQoImv43RHTPpo7OFNoW4IFgIkT08lsLb+qsMz2qFA2xIJAYEyI1G2gGfLV
HV54ptuHsDyxIiP40hXzM+fyTS9wnDjFaAJ1st9aqaixaz9MEfQYuGBTAHl7zWMlFfZxQvUvEixDoYrE
KN2SDi3aP+G7+e9MPn5xWHHv0f7/u6dT+GS1nDqEBBBRvZ1yk7OHUy2bIbQdQUYA017L6Pz7saLdDpbX
CtG/WCjl5BF/rfzZ4YPhUFpKiqj7sz68k2nLMzofPlP2dmmFY6DQUYCmiVMJEbq5O98Z87NQNgQZAZzK
r5jelG9+hIAN0cm2DGgf+vTB1Sn7fDe/j+t8OmfYsdQpvcbGhGqXUySqENKWy8W3qzDaH0ldtVmwrFmP
B4AFK/eOLCi1j/J0v2JBEAgCdbJ1AzrGPvLpS0ObRHEHH+IyNimuMjwk8eU+7UOW0hQqFtJWaaVtTJlZ
KdhU2qNTgEkLt0f9fbHkV6uDbe3JfsWCIlFxRJDyq2cntU1LSWp/x2vw+agFjNGIOT//5+KVildNVjZW
KDMqOXWpfQv9vRteG3nB0317dARQabXfb3O4WnmyT7GgSHS5d7vAN/aHnJrru/l91AmE8NYVI75O7hs1
Tq+WCSb7bXWwCVdL7U8I0bfHRgArvjkS8+nW09vN9qb39JcxRHabKH3az2+OXiO1Lz6aJv2fWX93RaVj
ebnR0QsEULVmGDJv0F2hkz6d59lpqYdGABht3Jf1clO8+RUMkXV/Usxs383vozHseW/8X53iAiaF+Cky
AMDjB8KcTi76VHbli19kZntUPs8j0kj3zOyQlHfVMpfHoPFEf2KhlFEXO7UImLl63tAtUvvio+lzfPc3
luSUpw6b7c44s80Z52npMYuNTbyYXXw0/8g6j4nINnoE8Piqw7TZxi10cTjcEw6JhUpOnptyb/yj6xff
94vUvvhoPny2IOlifKRiZrCfahsAsJ7sm+UxYbJz81LTT3rsRG2jA4D96tUHispt3T3hjFgoZeSFzi39
Zr38SJ89Uvvio/mxNm1UXs92oc9EBKrXAYDLk31XmhztD/x5fo6n+mtUAJj/7p6goxcNkzkeN5mhv4Ih
L4zuEzs1fdHIDKl98dF8+eiFAflxIaqX/DTMTvBgEOB4UOYUWkc9tXiHR3bbGhUATuRX9jeaHX094YgY
yCgiu3sb/3krZvbbL7UvPpo/P76efKlVhO6pUH/ldsDYY/r/Ngfb6WKxcYgn+mpwAFj26T5N3lXTC6zI
ggkNhaFQbu92QQu+SxuxwVd6y4dYbFg6IismRDdHraT2A8YeSSnnMGaulNkfTk3PbHSF5AYHgMyzZY9U
mF2dG+uAGNAkgo5x/ssd7cxrpfbFx53HhiXDz4YGa6aolXSOp/o0WFwdduwsa/RaQIMCwJNL9voVlFiH
8xh7fUkvkkDGuFD1gk0rRn60NiVF0jJMPu5cdr87Nqd9TMBMiiI8UhmY57G8xGAd/mDqtsjG9NOgAFBY
aWpnMDn6NMawGCAE4KeRbYwODHgbwDfs9yEtk+4y70zuFTOHoYgiT/TncHDtzVa+UQfv6h0AMMaouNL6
FOuFVVdvBiFwBeoVG2YMbfmCrySXD28gJSWF+2j2wK+iglSfIIQrG9sfh0Fxpcwy5quMYw1eh6t3AJjy
v5/HXik1T2ioQbFQysjDd7UOWjD9wW6lUvviw8fNWLiyRbGh2kxPVB4oNdiSdh4qGNPQ99crAKSmnmSO
ZlUOYzlMNdSgGMhkxMXIQPWiz+cOOie1Lz583M6R1dNdfTrHTtWr6N8a25eLw9Sfp0qnzF6R0aBRQL0C
wO8F5wKcLnxfQwyJBULgaB/v//LvH4zzpfj68FqWTe9m6NEmcDlNwpnG9uV08nf/frY8uiHvrVcACAqS
/dfqcAU0xJAYEAgZYsPU3/RJ8BNMQ82HD0/x2cLhO2JCta9SJFHSmH5cPFapGPr5hry3zgHgiy8y5VmF
xmEYIy/d+sNYq6Iv7vtw4rS50/qapPbGh4+6MK5Vh43BevlaBNCYLWrmarm19zubjofU9411DgDrTltG
Vhid/eprQCwIQFfaJ/i/ILUfPnzUh1mzWjm6tPRfFqCVNSo93cnybbfvyRlf3/fVaR0yNTWT2phVuLLM
5Hi8/q4JD0kgZ692wak/LkpeKrUvTRwEN2neY4zRzWnTqampxP/+9z98/bXUVEwAAFyviJyenk4CXNvu
uvYzJgEAJk68JpCxdi0Qp4J2oXYlJXjixIn82rVriYqKeMLPryt/6hTgdu0AVVQcIQpamXC7khIMMBFO
wVoyPD4e+2V15QEATsGpa2fsg0quiW6UBBEAp6GpKzdPenlLv0Ony9OdHB/a0D70GvqnCT0iHkp7OqnO
knZ1CgD3Pfmt37ly7pjNwTVooUFoQv2VP66akfJQt27Io0cvAQAOHz5Mf7C9JPlMnqmNw8UxmOUJQAjB
/98EPMYE5nkCEQQPAMDxPAE3fa4YY8RjhICH/x9vIQSYv9HO8wCYx+T1Zh4AAPPo5tITPMC1zjEArmbU
huHWP6bbn2/4AEAAj3hEAOBrlggECAEEcBhKr/2MCQIR0SzmcgETGIBHFEEEYwRlHAcsgQARBEQghFgX
i4sIBIgiIA4QgTgOOwFhRJEEAzyAC/MuAAAaETQiEMFjnuN54AiEKIJAJMaY5zHPEQiRBIFInkc8Bp5D
iEAkwgxGCHM8diFAQCJgADDiMHIBBkyRiIkLV+2b2qPl4pSU9rcEgamvbwu6dMU8xeJwyQkggCBpDvOY
4LATARBAkTSHMYs4HhMIASYJmseYR5jnCB4ASILkESIwx7sIjHl07WcKczxHYMwiEjEYEYi/1gdHIERh
kiB5GQ3O9rF+6z98cVBuHb5iAAAwc+Y22T+cJTWnyDKf4xuWs8ZQREHv1sH3fPvavXXe/arTdp46WP+k
o6jYK29+mkTmsADFR0Lc/OnpmHz+8/WL84stL7Acf+1OcfO3uf4Sct8sGrfbdvvz/4tV8bd5e7uGFX/j
39evQ+Dkb7ue+9cKDwAsd+NFAABwsbdOa9lap7m3e1y7spZeLds9dUTLN1KSbr35Ry7cFHcy2/T51XLr
QB5fD4b2W6ygWn+GWn7+1+S115xAk4Q1PFCxJKgbcaVW52/i/feTHT/+mLdoxa8HOhSWmpMBoXrn6LAc
H17pcD4EAC/V9T21Gvl62wHtuRzjoAYGJUEhCVTeNTFk4ZblIwUR9si1/yOvMDsjXRwPPAbA157AVf65
jhd+RM0WBAB6NX20S0zA1NtVnDs9vFF/Mcf0bmGZdSDHX/u78Tf9g/GtrzX25+uvIYTscWHq98YlRb6Z
lpRUbzWgSZOibcF6ZoWMIQ0N+Ux4DHAu1zBq27bzdRYlrTUA7D5h7mSyue5piENCghCAv4Y5nFOa95FQ
x3tfnNLZ0jnB78sArewXhMAohA0f9QcBgFbN/DGhf/T937w+7JZ6jSOe2Rwto53pJqvzHixiRCYQ2KKC
FZ/e3T5m6exJvW0N7Wd0q8g/QwNUnxEIGtSHk+M7fLzr3Ni6Xl9rADh+oayjk/W4yGmjoQh0sXWUZuWR
1dM9PvS/ma9T781o11r74N2JQYsYmrgspC0ftYMAQK2iTnRJ8Ls/7fH+529uazFzmyzHYHm/oMw6BGMk
mk4FQsgVG6r+sk9cxIJl07s16Ol9nenTu7n6xIW+6qeRHWvI+3kew5UyS9eJ/78gWxu1BgCbkxvJe9n4
HyFwRIdofvvhtZGbxbD33fwRFRuXjnijZ9ugByKDVZ9TJPKNBiQAIQCtWvbH8K6xD3yblnxLME6avS5G
YzJsrTTYxX7yW2OC1Ws6xAW+umKuZ/JPVszta4oIki9iaMJa3/diDGCzc0MrD+rqlK9TYwD46qsMldXu
8jqtf5Wczg2P0P1PbLvfpyXvG94r6KmuiUH/lcuofzxxmMNH3UAAoFMyx0b2i5r8zvP9Tt3eXlHm+qq4
0j4AAzRaJacePvHRwaoN3VuFP/PhnCSPHPG9TvcerXYG62WbGvJem8MV1CWB6VCXa2sMABlZ/AwXy8c0
xAmhoEhUFh6ofOf7BYMELcpYHWlTk+wbFt+3/r9DYyaH+MnfoSnkEYEHH9WDEIBGSe/v1jbggWXT++Xd
3Nb7se8TOj/8Q0Zppe0uAKDF8wlbIoLU38eHyhe+Pbvhc/7qSEtp7+ySEPKejELZtV99KyyPw7ILrcPr
cm2NAeDwuZKJnJdN/0P0ysOZ/v+sklrXb+Gj/U8fiTo7e9LAuOmBWuY84RsNCAICgACt/OAT4ztMWrNw
eJWCGA6O+KLUYBuMAYn25AcAiA7WbImuxA9/nTYqr/arG8bH85IOxIZpv6lvmjDPAxw9Xz6mLrsB1QaA
J5bs6OJw8V6190+TRHlEkPIdSEvzjrCUlsYve3rApj4dQoeG+MsWyGiizokfPmqHQABqJb23bazqkVnj
O90y5x8wfWNsl6nfb7xabu1SXXKUECAE1oggVXp4ILNg7VrhJeZC/JXfKeVUVn3fZ3OwnTYdz+tU23XV
fnCnLhvieR7qfbhASLRq2fbebSP3Su3H7Xz44qDcw59NXjK2d+yUIL1sF0kgn/ZgI0EIcIBO/serjw1J
/j5t1C1P/q6Pr6KNDseq4grbCDHn/ADAhwcotyvCTz247vXR9R6aN4Tv04af7ZYY+BXRgHqD+8+Wdqvt
mmoDAMdCX17M5dRaYCiiqF2s9tsXp3S2SO1Ldbz53IA9AzqFjW0drZuhVdL/IA9XhblTQAhV+qtlexNj
tP9NSQq5Jcln1Is/hQOr+6ak0tYbAIkmTIMQWCOD1etbhKie352W5tGSX7UxoGvQxzot809930cB7g21
pPtX29j54e92lxgc/etrVCD4luGa73Z9OOEhqR2pK9OWZkYevXh1SVmFfbyL4+XXlrJ81AZCgP01st3H
v5qcdHtb7xd/0thKrBuKKx39QIAS3NWD2WC9bEtUkOrhzSvGSHLUvMOUH6ZVmGyf1OeZLGeI3EttsuJr
mjK7HQF899vxEKuDq9M2ghjIGLJSr2FWSe1Hffh0XtLlRePumtYq2v+hYJ1iD+lbJawVhFBleIDy9zZh
flNvbxs7OyPYWmL9rMRg7wUi3vwEAkt0iGZ9ixDNs1Ld/AAAHaLUO9Ry+nR93sNxmHk1bFi7mq5xGwBO
XjD2dLp4v/oYExKtitrRM15xQmo/6ktycivHr2+PWv/JzPuHxIVqltMkqgDAog4fmwoEAATqmO2HPp00
+Mdl9+bc3Dbg+c2BVwwVn5RU2keImeEHGDv9NUxGiB/51Nplwq3214XvXh+R279T2BtQj2kljyHsYpll
dE3XuA0A+08VJ3O8dyy0kwRR1C5Gu2ne9CGNSrGUkm7dkKtjouKVQB0zKMxf9SvlGw3cAoGQITJEuT06
SDn79rZBT20IMJRbVhaU2gYDIIVoPgHYIoNVP8eHymf9tHRcmVh2a0KmcHznp2HqfNQXYwx5RaY213UZ
3FElAKxadZjOKTJ29IrsXwx8sJ/84Lf/G/G91K40lvdnJTsOfz756MMDYqckxujmyWmiQmqfvAEE2BLs
L9/IhAaP3LxiTMHNbRPmbwuysdxHpZX2+zCAUkS3bP56+c9xsQFPblw+3mvOf7w/K9kZqJX9UNfreQyQ
XWCcfJk8E1zdNVUCwGmrPR7z4JHSw42FIpGDJIgmNfevjZkP9yjrpT22IsRffseXJ0cImeLCNFsCtGj2
7rRbj88OmZ2hyi8xvZl71TwCg4gFaDF2hgXIf48OUz79w8LB3pbliVtF6XbTJKpzXgDLYSgqqAysrr1K
APjjdH48D6BpqIeeRKukL9zTLvJvqf3wNKddd3csqXT0ktoPKUEITOGBqu91wbJHf317UvnNbf9JzQg2
mwxrCsqsYwFAtGE/QmAN1Mm3REXqntiyZLS33fwAALB63pB94QHKgwB1rzR84MyV8emmgwAAIABJREFU
NtW1VQkAWhmdgDH2iklqYrT/D0ue7eWVf4iGMmN5Ruejl8pXW+1so4o6NmUQwtYWYZpNMTSevTVt1C0n
3iZOTCdzik2v5l01j+SxqEk+bKi/PLNVWNCjG287aehtyChiPkUQdV4Tc7r47tW1VQkADhb1xbhuUmFC
omDIC+1ayjdK7Ycn+SrjmOrQ2YqFdgd3NyBUp/PazQ2EwBAZpP0yIkj51NoPU25J8nk4NTO0OIj4PPeq
eTIgxIjnE7YEaJmMiEj902uXef9ic/tEZZG/Tl5nFWEMEF9dW5UAYLTaExrqmMfAmAsPVOxJm5pU5fBH
U+Xw4cP0qo2XPigst43zhvVVKcCAbQnhmk1RYfxz36YlV9FUyCuvmH+pwPggz2PxpqAY4xA/xe9+yDlh
U9qt24/eyvuzkh3hwaoNdb2+1GDvXF3bLQHg620HtE4nJ+Zqq1sIkuCNNna91H54kmc+yXk5v9g0BUQ8
uOJlGOJDdZ9FaOTPrk27VcL7qfcPBgx+Zv3yrALjQxjEGxkhBNYgP0VGXJj/rN1rpjapCtLd4v0PKWVk
naYqTpaXZ2Zmuh3V3/JlLChjO7E8busJBxuDUkYceKBPVL1zn72Vx5ZlTssvMU3jeHyH3vzYnhip2bDv
4/Ezv1s6osr25/mLhc+fyzfOZjksYvIZxkF62a5jXz5w77rbdAWbAmnT+5yNj9DtQKh2LVoEKGx/DjPA
XdstX8icYjbOG87/t4sLzJg7rW9B7Vd6P+MXbB2983DePJ6HMKl9kQKEwJgQ4fepf4C6StWmZZ/u0wx7
fuOCc5cNM3gs4pFeAGtEgOrnVsF+T4llUwhUNP4SIVRZ23UYA+z+5+o4d223fOhXy8xRUuv/MRRxeWjf
qDonO3gzL396sNfxSxVvOFy89OsqkoDtCWHqH/asHDtzXdrwW7b6MMbot1Mlk8/mGl7hOF4vmksIWD8N
s0fBWifennLc1LCbnOdVcqoOWYoYyi0ut8lANwcAdKXEEif1EWB/nTzrieQOlyR1wgPc9+zW+HW/X/jA
6mBbSO2LFCAAQ4so/ZrwINnC29ve3XZeNnDm+qfO5RmXshwW8VQfQIS/cnuEXvF0U5vzu+PuoInFOo08
vbbrMADYHZwmPf1klZ2VGwHgi8xsWZnRPlhqCQCNgmzypb3ve3KrX4nFstJkc90ltS9SgAEcMcGq9N3v
j3vi+7RRpbe3b99xdkTeVctiUZ/81w72/Byt1T28/f1xTf4BA3CtJmPfDkG1ZpRiDGB3sP3+MRqqTENv
BICc/AKti+VF23t1B0kAUAR5UkofGstD8zYEFDrMHxSWWvtJHUylACFU2TJS+4OfWr7AXXvPaekPni+o
fNXp4kXNNg32V+zTyBWz1r1961SkqdNjYMABrYo+U9t1DidP5OVbgm5//UYAKCkxaQGQaKqq7pDT5OFh
3eIOS+lDY/giM1te5qJmlVbaRvNYxPx1rwHbIgIV63Z/MP6RrW9VffIPeXbTPcVG+3y7gxNtpwkDdvip
mWNRgYqH9n/SPJ78N5PSvr0zIUK/ubYDphgwsrLO6qcAxRWcAtexWKhQtIjSH3hxSmdJ5L4bS2pqJvXl
2iMzT+dWzOL4O+/mRwCG+HDtJjVDz3PXPmHh1uH5xeblDidXo0CFJ8EADj+N7FCQVjbm9pOGzQkVzf+O
CFSzWAnGiGP5KjstN14oLXcpAYNk6akIQenQLgnvSWW/sRywGO/LKTIvdLG8VmpfxAYhgCA/+T4VqXxk
58qqZ+dTFvxy14lL5a+arM6uYvqlV9Hn/NSyRzI/nNCs1ZrNFudFmkTmmq7BgJDBylZJ8vt3CmCxKTCP
JRsBaJRU6bMPtrsolf3GMClt26DsK8ZUlsc6qX0RGwRgCg9UZQTp/aZsfz/ZcXv7Cx/s63wqr/wds40V
dUFUr2aO9+kUNm7fRxOaXJJPfenfPrREztCHapoFIMAUQqiKSvCNABCsoqOknAJoFfQlaIIVtmcs/aXd
8XNlr1psbBepfREbhAB0KvqgFsGkX90srs1dtTc641DOUoPF2U/Mw09KOXlOLUMPfTJnUJP8TtWXudP6
mrQq6lRNsrMYEMIcF3H76zcCAE0T0YDEK610O3KGanLbf59sOh6y62T5RyYr21NqX8QGAUCQXv7HmKS4
ab+tTqlygu7brcf9tu/PX11hdIm6tazTMCcnDYyeePCzycfFsyo9/TuF7AQENZ4N4ImqU/x/FwUIQtK5
a2SQpkmt0KamZlKfbDm9zGhx9hOzMo03gABAIaP+7BQXMPX1aX2qzK8//Wmf5u31p94vMzqGYRBvXYmh
UW7bWL+nX3tiYJMTkG0sy2YM+F1GkTWuAyCouldw44vL8RAg1b61jCagbbhaUtXV+vKPzby8qNw25U7b
60cIQKtijj46utVjX74y9IK7a77bWfTB1Ur7ZDE/G4WMzn5yRJsH1i1K3i2eVe8ixE9e2xpa9duADoez
Wt0wIUEAoFMxmeqooCazWJM8e9OjRy6WPsjxNVddaW4gAJAz1PGurYKfmje5R5US3QAA/WesXXD+svE+
Hov32choIrd768Bn5jzc40+xbHojWjW9q6Z8AJfT5X/7a/8GAJEzs26AAAL8FLmzkltVWUH2RpZ+ubv7
hXzDfJ6HapVWmycY0zR5YULvyLlfpw5xc6NhNPXVjOdyi8xPY4wCxPKKoYiCUb0iX/4ubfhWsWx6K7yD
PQSo+nwAlquqrHwjALA8yIVyrCYQgCUxTL1ZCtv1ZXLq1vgvf83/3Obk7rjTfQqGPtulZeDspbOStrtr
n7Tw5wmZx4pmsyIee6YplNexRcC8d54f9LVYNr2ZkGj/ApIAW3XtLh5XucdvBACnixf1VNZ1EALbL3+V
/y6F7fqQ+kWmPKfQ/JrJ4mx9R037McY0SeR0bxP8zobFyVvctKPZ72cO/Ot82QoXz1fZZhIKmiSu9Gkf
8tampSN8N///ExehM1AkWe0pR5bjqygs3wgALpYVTX75ZlQKujwqCLy6nPYXX2TKDxw3zrtcah95p4l5
MhSRExmsXvFd2rDV7tpTXt7accsf+R87XXyMWD5RBHElPkL7nvOU6QOxbDYFolQqh1pOnqkuH4B1cdWP
ADhemhwApYzOGxjUts4a51KQfqK835m8iuc5HospUy05BEL2NvGBX+77aPyH7tofSN0ceOGK5X2LnUsU
a1REkVCYGKP5/Pf3xi5fuzbFqx8cYjNtTBtTsJ/ib6KaCMC6yfS9EQB4icpX8zx/EmCt1xbMXPbjP4nZ
hbbXOZa/ow74EAggSC//cFgSscxd+/2v/xZyId/2bnGFrUp6qVAgAgpD/RXfxFqiF4lls6kRHaq5VP2d
XDVdRXr9f5o4n1ZD/XIpeXzpDt2azSfeMttcd0sUHyUBIXCEB6nX/Wd4u8Uzk9tW2Z1Z8dUxVcbhrAXF
FTbRKvcQCJzBOsWvBz+5f85BMQw2UcIC1VkIIXCfAV31NiP+/R9pUlpaxvh5bQJQicE1xWxj+91Ri34A
EBag3JrUQT9r5ri2VU72paamEjuP5f73XL5hGoexKDc/QgAh/sofBvcMmCWGvaZMJEcdBAzujz67eYbd
CAAkUfe6454kIlDplaW/Hnj5l15HL5S8yIlZpEJiEABolcyB2DDVkqUzh7gVm9xR1H7k+fzKV3gsTrVe
hIAN9lNsemx0p9nLmnCJeLGYPr2blaJQlaIrAAAUIqrc4/8eBqKoavcPheL/swBrFjKQgJHzN4Uczyl/
xcXyUVL7IiZKBZ0fEaidsnbRiCPu2qet2HlPYZl1scPJV8koEwqdSra7d+ew56aPal1FYciHe5Ryyn0A
oIkq07kbAYBx0yg0KgVdpFEyVQpFSElqairhcMDTRrPTbSGF5gpNESXtY/2e+e29kW7zyZ99a2/8oRPF
850s3xaQCIefMPABWtnOsQPiZn7wzIAmkybuDagUVKG712mStN7+2o0/JEWAqDLJCADUCvLkjPHeJQGW
TfYccTa3Yh6PxStLLTUEAmOP1v5vrl+cvAncrB5hjFHmscuflBvt94jlk0JOHmsV6b/gtcd61Sp46eNW
VIzsN4CqU3qKgCoP+Ru7ADKaEHcojgA0CqrWqiZiMurFnzR/X6yYyXHSKSNJQYtI3QfhfgHvIYSq3Pyp
qZjoPX3da+Um+z1iLYaqFfTJ9rHaOesWDz8kkslmRUG55SK4CeQUhSxVXrv+PzIZUwpQpV0wEAColbIS
0QzWAYzQokqT426p/RALBICjgpXbn+zHvpKS0tttUk2pZve0ghPWaWIVjGIowpUY7f/K+iXJO8Wx2Pxg
KJK7dv/fuuxPUWSVB+7NuwBlom51IwQyxntGABPmbxpy/FLFZIzhjtH1UyvpQ53j/WanpLjPqBv8zOZB
vxzMTWV5voqevBDQJFHeuUXAs/dNvPeOP9nXGJQ0Zt2N5hBC1S8CAs+7XTkUCgQADCnikKMGHl91mM4v
dzzIcliUL7rkYIxlFDo3sk/k/I/mDXU7x567aoeuoMz8gcPFh4vhEkEgV1y4+v2NS0d8OL0bkmRLurmg
VDAu5CbrB0PVcdy/egBOLhewuLkADF17ZVMxcBaXjisqtY6X2g+xIEnC3CJCl7riqYGZ7tpf+CAzdOfh
8i+MFkdrMfxBCEytonSru7ePeVsMe80dnVpmBzdrAARf9dDdv3UBrOxlBCBaTj5CAARBSr4GMGf1gcgD
Z0rmstydcdCHQOCKDVF/Oqx3iFsNhvT0dPLg2fLHistso8WZ9mNnqJ98K6vXP7tsejdfoo8H0KkoO9w2
AkAAGJHklduvvREAglQKG0LiHctFCAHLguRZgAf+ufKg+U6R9MaYC/WXb763b8ii2ZN6u038+vQPemZ+
kekFjseiCJ0G6hQHFDKYuzstyWsPhDU11CqZA24LABiAxRhXKbt3448c6E9bgUDijQAAwOl0SjrXS/3i
qL6k0vbInSLsqVSQByMCNC/Pf7Cf2+SryWkZfbIKzVNdLBZFIVqtoE7d0zH00b0fPZAvhr07hSCt0g4I
VRkB6JTy6hOBgpWkTcwpAAAAxWBJxTWOny94wWhxxkvpg1jIaDI/qUPIip+Wj3C76Ldmx+mA09llr9ic
bHsx/GEoIvvuNv4vvf38wCYlB98U0KooO+DbFgERYJLiqywM/jsFiNQYAbBoT2QeQwnrQpLld9+fuq3j
8eyycQBI0pLoYoAQNkYGK79cvXD4T+7a/zM7Q/Vh+vFlZQbHUBChxgFNEuWdWgQs/eaV+34CN9tVPhoH
Qcur3OgIEFbL6Oq3Af0Dgww0SYinzIMAn86ukOwgUEGpZaLDziVKZV8sCAQQqlfskxmsboU9AABsjHNy
Ubl9nBjJPiSBIC5U/Skts34pvLU7E7u5gsSAb8nqkTEEHxuirLLofiMAzEpu5QzUK34VLxkIg96PkUSG
bO6qvdGFpfb774SKPmoFc+D+/tGzd3wzxW3OxWOLd9x9Mscwh+Wwn9C+IAA22E/x7ZTB8UvWpqV4tQxc
UwaRMh7BvyMrhADkMmJveFdFlUNCN98AODxQmVudnpinIQAFRvipJNHWP3ym5Dmbg42TwraYUCSCyBDV
uy9M7XPWXfu893cE7D999SWLzdVCDH/0GmZ31xbBL00d28Ur8j+aK4iS8zenASAAkMto0/Ru3arXAwAA
CAlQ5xM1lRbxLARFUKIvAs5YvL1FQbH1HjFr1kkBQmCNClJ//NyQthuru+bQWcMsg8U5VIxJuFpBHuue
GDRv1fykHBHM3dGQHE/jWw4CIPBXydyeur0lAMQGU9mkiINip6vqqqTQ7Dpd3sJsd4mS4SYleg1zLiEk
4LnkaiouPbEsc0T2VUsKxkjwgjA0iSwto/QLPn9paJV9aB+ep6S0QokA3biTEQJI6hi03t21t9zu4QHU
PxRBnhbaQYBrAxS1QiZ6RWKdkrqfb+bHfRmKuBIbqHl1TVqSW42HB1I3B+45cWWOk+UFXwQlCKhoHaN/
Lalr4C6hbfm4htnGMjeLtmDAhQnq3m6Lpt4SAB5K7mlkmKqqIUKAMQZMukSrJAMA8NX6Y8FXK+x9AaHm
vPjHJ4SqM7a+Ncrtll9qaiphtOA0k8XVTwRf2IQw7Q/b3xqztLrMQx+ex8BzDNxUnJWhCHtKCnKb5Vvl
RtAo6SwhnbsOxgCck9eLYes63+zNedLFNe+6fjo180dMmG5Bde1/GDpNOJVdcb/QW34IAPw0zJGoKO1S
YS35uJ2yCpvq5hFAkE5xtLprqwQAGcnvQ0icjEAXEKIoywIApKefZHKKzF3FX3UQD5IER1Sw8vPPFg52
e8biySV7/QpKbQtdHBZc1FNGk+efGt/mv1/PG+K1su/NFZPJLsP45nsbV6upWCUAmJzcRXdiAp4GAwa7
ixdNfGPzqcvRCPHdxbInNggBxIdqvx/aI+TH6q45V1j6ksniaiW4LwRcbhOjSXtyzF2irCf5uBULx1Nw
UyIQQxPVSqtVCQB92kZlEQgEz9DDGMBisYsmwFFYYfFjOWlKoIuBUkZeklFEWnVz7Qde3jzyfH7FBB5X
LRHtSQgCOdrEBqzb+sbY74S046N6nHYgMf43APRsE1GtsGqVANBWKc9CCM4L5dzNWOycaGsAFEnc5Wym
9f0QAgjxU/7YU6+/7P6KVOJ4lnEOxihaaF+CdPKfJwzsulBoOz6qBxGggP+vZUeTCELD9dWeuakSAKZP
7+aKDdGcEDofCGMAq4ON/nF/nijy2yyLu/BuqqM2eTDm/NXMzj0fjn85zc2Z+tTMTGpSas95Rpvwp/zk
MuJYXKR6+fRREaLsJPlwj5+KGQwANIEA4iO130VybaqV3ne7Hda7fcjPJCH8TpnJ4rqrPL9MlCozJrsr
Vgw7YkNRhEWjZF5Dt53/vk7BIXvHAyeL5/A8FnS0RVPE1T5tQxesXzTCV7tTYiwOtjXANdGd6CDdyeq2
AAGqCQDtW2oPyGhC8Io9dicHFh4JPixfdRjTZpurWZ77D9Irfup7l77abZ6T2eapLCfsYiuBwBQeqPo6
jmd2CGnHR92wOlh/AAACoYLWkWq30m/XcRsAJg/ueFUhI08I4dzNYAAoKLcECm3HmfdPnMPJtxTajthQ
JMrv2yk0vbqimQs+3HVvYYl1rNB+qFXMWZXK+j93UxAf4mOxsVoAAJIE17zsbTVWVqp2nK9U0EfFOBiY
e7kiUmgbJy6WdeKaWwIAxlyIn3zvO88M+Nld83Nvbvf/6Y/8RSzHC5ptydBEfr92gS/seNP9cWMf4vLh
+mPBGEAPAKBTMnshLa3GLf1qAwBJUnvFOBqcVWgSPADkFBgSOLFK24iETEbaVApyZXXt/+SZehitbEch
f2uSRBAXof8gzL5/n4BmfNSDvKuW7gAQCADgwvgAuJEHv5lqA0C7SHUWRSDhVXsJlDgxPV3Qo7mF5Y6w
5ib8GaRXpI/oG1Ht3L/CyL2AMQgquBKil/+SfHfE52lpac1seNV0yS2uTMD//2XvmxhUa23FagPAx/OH
HKVpJEYaZ9vQws6Cbs8ZLXZ9cwoADEXwg+8KXVtd0s/Tb+75T0mFVdBtPxlNXJXJmWdfeLCbZLqOPm4H
o8tXbfEYAygZ6ujIzjHHa3tHjXt9XVsFrRNaH8BkcUX/cuigTKj+09PTSYIkJFEeEgQMfIi/YmMn/yK3
K+4TFmyJ2HkkbwoGJNjvTJEIYkPVbz8zgPUp+noRq9KPaCvMjpGAALq0CthUnRbEzdR4ew9PCFtJU0Su
51ysit3JajrEKAXbCszHkQyFiGZT848ggDeYnV9XV9DzaoWjr8nm6i+UfQQYh/opfl7+cMxb1fngQxpK
DS651cHSJIKCFuGKjLq8p8YAMGVKZ4tSTrvVk/MUCMAvQKsfIVT/zjJOThDCq96IhZwhz3RvGeE22Wbb
tvMyu5ObhjEINqKSM9TpmBDV8m5u9OV8SMvBrIoAnsVKhYwu++uSs07b+LUO8BUMvUVInUAMAOfzKocJ
1X+h08EA5puN9n+7+MB1a9KSity17byYd8/VSttgoWwjBE69RpaR/vqIPULZ8NFwOLsjFiMkVyqYXx7r
YXCrBnU7tQaA9gnaEwwl4EIABig32cK+3nZeEHkw1kkiQOIpnQqJjCYK7usc/YG7tvT0k8y+E6WjOE64
1c5AvWLffd2DlwhmwEej4BH0QAiU4f7yo3WdntV6Zyd1ijumUdC/N94992AAMFnZ3scvFQoiTU0xcgyo
5r3QpkKIn+zwY5Pal7tr++pAVnyF0SVYiXOGIqzBGsXStOlJvlV/L6XY4BxIk+jEEwMTq1WCvp1aA8BD
ya2MiTG634V8hrIchvOFFkEy1linHQEWr9yJkNAM7VbZFQAAU6if1ckKspiKACBQJ/+lVxftXiH699F4
0tNPMgaTM7xNtP6nuqz+X6dOY3uzs+JDGUMKmhNQUWG+W7jeuSYfAAgCIDpAddFdW/rJk8zlq6apGIMg
Emsyhsga3jVmSdpU9yrDPqTnl3MF4wGwUqWRf12f99UpAHSThZuUMrJO2woNxerk+grRr05GcljkqsdC
oJRR//QLDzzmru2v3eW9Kk3OrkLYRQCcn1r+0aIZPY8I0b8Pz3Asq7yHSk792cqfrlL+qybqFADS0pLY
qHDdDooU7kFaaXHFpaZij6826mOC7AhQnYdE3ghCALFhmr3Tp3erIrSBMUbHL5T1YHksyE6HWk7lJkZp
tgnRtw/PMHtFRjDP8XeFB6l/S3s6yVyf99b5hpuQ2G6Ln5YRbA5os3PRTNShJE/3K2dIJ8fjph0AAMoG
9Qx73V3bG1//qiwxOEYLZBd6tA78+Nu05BqPlPqQln/yTTqEEDuyd/SG+r63zgFg6tQ4e3yYNgMhJNQ8
kNhyMOdpT3caZj7G8jwWReNQKGiKsM5J6eH2YNbZfFLtcLGCZDrqNczf/TprPoZaTpT5kJaQQG0bf538
xIzxnauV/qqOeg25S0ocnytlZFl9jdSV4kr76NTVezwqW52SksIhDE06a81PzWRDNTfhkQtXtTYHL4is
GgL+s2lj+gquEO2jcdgdbF+70/lhQ95brwDQWa4oZ2jkVoDCEzhdPNp5+GonT/er0zJlTXkjkKKov6tr
CwtQtHC4WI2nbWqVzIEuiWGbPN2vD8+yavNhZVZBZdCQLgn5DXl/vQLA++8nOzq38PuVIpEgq+oYAAiS
H+npfiP9FQViiJsIhd3pqrbAhoKiugIgzy4AYuCHdI9a/dVLg694tF8fHufIacPwDnH6nWluFojrQr1X
3b9+JXlDRKB6XUOM1QWDlfd46e5Wsf6nySacDRwWIK+srs3swh5PoPLTyk74UdxaT/frw7PMfHebzGpn
wwb3CK9z5t/t1DsAIIRwsF65kiKQWyHKxlJmdMQuXnOklyf7bBWvO0kKuIUpNIE6ZbUBwOFg/Txtz18n
S6/vdpIP8TmfbfNXyMmyKcM6N1iPsUH77mF6zSm9RvFHQ43WBMY4KONg1iOpqakeywmgFdpSOUOe81R/
YqPTyqu9GZ0s69HCKhSBIC5I4dP2bwJ0ahMax8shszF9NOgm+2h+v4rQQEUGIdCW4JUy238uK/okeqq/
qUlxdrWCvuCp/sRGSVHV7mKQiPToeoxOw2TG8gcb9aXyITyZmZgyGhxhnz3rvhJ0XWnwU/aeNi2/8FPT
blNTG4vdyTFnsys9ejZAraSbbC6Ak3VWK5qqklNutQEaAgIwRwYq5/tEPr2fLNsFv3tig7c0tp8GB4C5
09qYokM0b1AEeFwPHmOgbE52ano69phaMEVQp0hCmN0LoeG56j8HBUN6LAhr1fSVUqfJl/XXBCAUtCkl
pb2z0f005s0dovR7tCpGkLWAcqOr5ynjoT6e6s/FOk/QJNEki1dwUH2hxuJK+1ECeSYIK2XUzzH9ZE3y
M7qT8OT6WKM6WjKrf0nnBO13JIE8ni3m4nj5/hOFo1JTMz0iGR4RpCinKGiSx1mNDq7ahT5aQZUq5KRH
dmRaR+r3rvUJfXo9aWlp/NSkOI98lxsdSfqGhX0X6q+otQBBQ8i9ap6cBVaPFPW0JZpzeIwOeKIvsbl8
pbxaie+B8WHlCoZudAEXOUNAqxitT+b7DqPRAWD69G4utYJ8nSZRgSccuhmrw+V/ocjS0xN9rU1J4UID
FWebYj6QzcVXmx79v2d6mAJ08kYlZiEACNDKtid3ZARVgPbhfXhkLvH7++N3hQeqt3uir5vBGDNGC/uM
p/p7YGCr1RRFZnmqP7HgMWpbXRtCCHeK1x6jG1HBBSGA8CDNSZ/U952HhxYTEB7ZM2GRWk55+AmCkMni
iB8yc8N8T/Q2Y0LHLL2aaXLDXIPF2RquPajdEtvKsVOvYRoj1W3gWfixEe/3ITAYY0HGrh5bTZw/tUtO
QoTmcwTYo3vIPAa/IoO97/x3fgvxRH9KGbEHNTGVYJud1b237nC1iVGzkpMdEUGKNxu8G4AQfy7P6FP7
9VYwRivXHvLI9/92PCrBpZHLf1DIKI9n3JksrntOXLYO8kRffkr5LoYi3BbV9FYwQOD3GZfcKgJdR09z
f6mVVINyAhQMaYoNY5q0alJz5d2vD2jnfnxwFIBKkLMZHg0AP74+PH/8gPg5lIcXBF0cLy8stzz6+KrD
jS53PaBzwHm1gt7lAbdEA2OAogpb6zkrd7Wp7ppvF48v7NYy4BMCoXrP42UMUdYzLsK3/+9lzHx3m2zP
2dLHg2TE30+ntPf+AAAAsHRG383hAYpGpyjeTonB0S3n9OVHGtvPi1P6FLeI0h9savIATha3/edCRY2J
Ud26t/ghKkixHgDXM+MRWWK1IY3OKvPhOZ5fdTjwbLYzzWJxOV74792XhbIjSM2vdtH6j2UUYfRknxyH
tfmllgcefb3xawEj+4Z9JaOJbE/4JSbFBtuUmpSTZyUXfTPmAAAXdElEQVS3cnA8ekPOUCX16Rdh7HA6
y3wJQF7C8Pnbgg4dy11RbrTHbX9n7PsASLA1K0ECwKcvDTvWu33QPJJA1Z5jbwgWm7NPmdF2f2P7mXpv
l5wArWLLtcF106G00tGtUPV7jeW/Dn4y8e/u7UOep0hU5+QgDsBVULDFFwC8gEcXZ7YoKjCsMlkdwX1a
BbwotD3Bqn46TplXB/nJ6y1TXBMcD8zFAuPU59/YHdXYvjRyZgtFEE3q1BuPQbHraMGc/yzKiKv2IoTw
968M+6FlhPYjAkGdUoQJABJgoIAVYH3UxsT0dHJq2rYBh84UrK0wOwZFB6lWvzdviKDVuAAEDABr16Zw
fTqELvW0EIfB7Oq0+0zhzMaeERjbX3cg0E++y0NuiYbVzna+XGR+vLbrQqNUb8SFajeSBNSq4owQUkO4
ptmUUG+KkKfUD+85VfKF0comdIjTL3mou2OrGHYFjfrvPTvwwt2t/F+jKaLRuerX4TGGCpNz8hkwdWxM
P0+nJJkHtA99jyJQk5K+whio3GLzw48u3pkMNSQHffPiMMuej8ZPjQxUfYFqmYqxLO9/vqBAkLqCPmom
9ZP9/klPrV/258mSVx1OPiTMX/mNTsV8WNfy3o1F8GGftvjKjzoVs96Ti+4OBxt6Ide85KuMY42qhtsz
ovjnAB3zj6f8Eguniw/bd6Jg9fBn1nao7dqWYUEv92gT/BFFomoTfSwOV+CxC0ZBKgv7qJ6X3t/VYdO+
nC8vFpie4zg+IkgnOxIVHjjn27Rkjy6g14TgAWD16umuMT1jV/hrZDsBsGe2mhAiy03Ood/+kvMQ1PAU
rI2UlBROo6BXkgjKPeKXiJhtrpBiE7f4+ZWHalwPWZOWZF//evKCdnG6l1Ry6gJAVRk3HiNFXKhekPLs
PqqSmZlJJT/3U9KGP/NXlRodI3mMaYWMPNUxVj9nbZq4YqyiLPykPdkrJzRQ9YRcVr/tqZpgOQx5xZYn
JqamNy45KChwbXiwcr+H3BIRRF0ttw7feyRrxewP/6j2uPB1fl4xZnWrcF3vED/Zjio5EBgrSRJNEshR
H7exeGPFaydyK7cZLGwPjAEIEi6PG5DwzJq0ZNHFWEVb+e01SpvTMlL/JkWgCk/1abY6WxRdJT5etflw
g+evu9OS2P4dQ+bIGUKwZAvBQIgsrLCP2fv35aULPtpf4xMcIYS3vjWq9KFRradEBCqe0iqZI9drJfAY
IPeqseubP+4XpMSYj2uMeHHzXV2nfr/53GXDkzyP5YCAoEiU1yFW/79lM/r8DhLUYPSY5l5t7F6zhr/4
5/cH7h72cKuySnsiADQ6rRcDMEars0tukfVU3l9rTza0n8F3x5SXoxhtuck+sLE+SQBlsrq6XC4xt05O
eXTHsd+/rbFCTMaPq+xX/l7314dvLfixwszB1XJbOx6DwuZgoymgDp/c8221VYh8NIz09HRS3ubhBX+d
L3vbaGW7YQwyAAAEUNguLuDrX94a84ZUvom+9xsmV8/RqWT7PZWKy/EAlUbXE59t+7vBFXLT0tL4iED1
VwoZ1eQWBK9TbnIMOnbJ9PmgWRvqVFQlZUg3Q3t6xMKHByfe1SJcPyVQJ9ubW2wa/nBqplxoX+8UMMZo
xAvbhi7bzn+352RJGsvh8OttBAAXEaj4YftboxZI6aMkGfGLP//j7jW/Zn1itrk6Amp8KEAIICpYuSGy
HKWsXdvw7ZMnlv360C8HCt5hMW6SQ2EEAAxDHB/QKXSRuaVhY331/Rau3B2VqNGVT5nS8EozPq4xIDVT
rrWZ55/MKn/RxfKKm8f2BAIuxF+V/sTIDtOnjWkjafVlyY7EjFuwbeTfF0redLn4lh7qsrxzy6D5P68Y
sbqhHUxMTWfyCtF7l4vN0z3kkyRQFCoOC1B9fn9y4jvPju7osRwMH7Xz9bYD2h9+LxqTXWR53GRxduAx
aG+/JsRP/sPUkZ2enjmuba1JWkIj6Zm44c9tnHs23/g/F8t7ZNipkFM59/ePH/fajD5HG9rHSx/v6rBu
d/7nJhvbzRM+SQWBEGhVzKHEaPVr93ceuS0lBfly/QVk5rvbZGcv2VoaLexrVw320S62apY5QsBq5bJd
U+9t++CLUzoXS+BmFSQNAOnpJ5mVu8+mZhWa5vA8NFr+GwGAVk1n9OsS+uiq2Q0vbT34mY3JFwuN37lc
vK6xPkkNTRFXlXJ6fVKH4M9Wzh38t9T+NEde+nh/h+2Hch4vNTjvd3G8HgC5/S4H6+U/jRoQ/2Ta1B4e
q+bUWCQ/Fb94zcGA9buy3r1a6ZiAMZZ5oEtXqwjte/0HcAvSUlIalHiUmZlJpa0rm3vhivElANQsFsXU
ciorMVLzAyNDn657fXSTOwrtbaxadZhef/ZKDEWi/17MrxxtdXJtqztbigBcfhrm15QhCTNfntLTqz57
yQMAwLV86G0H81cWllonYQ/4RJHIGuqvWHzwk0k1ymjV6FN6pjozs/T9S4Wm+5tLECAAeJWC+lutZLb3
7x787lvTk3w6gA3go3WnWn627eQzRqtjvNXOBWCAag9SIQQQqJVvHNgp/Kl3nh9QKKafdcErAgAAwIzF
mS3+vFDwTnG5Ywgg1OiTaXKaqOiQ4Hf/T0tH/drQPu5P/TX8xKWSLQaz864mJRxQCwjAqdfIj4YFKdL9
Naqt94z0y57ukwSvkbmrDuvOnLscb3Rwj+WXWAc6XWwbvpYvBULgDPZXbhjZO25h2qPdvVKO3msCAADA
/fM3hZy8bP6+wuRM8kB3vFpBHku5J+7xRY/1O9LQTianbo0/fL5ym8Xm8li5cm8BAeZUSrpUp5Jv6p4Y
+MsHLyT9JLVP3sYXmdnyX3479fC5K6YxZouzh8PF+9XlYUAgAL1W9tXgjrHPvT27t9eeNfGqAABwLV0y
r8i0vMzk9IgKsEZBZQ7oGPjfVfPvzWloH5NTt/b/62zZZ1YH38ITPnkjFElc8dfQp8x27uMuifoLE9rZ
zoh1JNXb+OKLTPnW87ZW5UZHz2Kj7XGjxdme5+u+PkWSyB4ZqF79n6EtXp8x3jtW+6vD6wIAAMC0RRlx
f54r/bLS7Ozf2L4QAB8RrNw0e2K3qSlDEhpURBNjjJ57e0fypv1FHzpZLrqxPnktGHhAwCkZ0hbsr9jQ
pWXgzkHx+q1jx3bxqLSbt7J6/YHIA+cMo05mV/YuMzhG2Z2cHOqZsk6RKLdFmGaNf0Di62vTGl++W2i8
MgAAAPR/akOvMoN1eaXZ1dcT/UUHK94OAOVLW1ePqjFXvibGzt824diF0jebdRC4CYIAUMroM34q6oLB
yn7XLjYw+74hicc9VZlWatLTMZmZs7fdnhNX2uiV1MQyk72d2cq2buh6j4whsxJCVG/teH/8So86KiBe
GwD+r717j46quvcA/tvnMWeemZlk8n5AHhKSUFJeuWnhChEQiDXgpaAtq7oqWtrqQgtUtNXGSLkCQikX
ZRWU2oddSiglXhFEkfAmlPB+SB6EAHmRZJ6ZmTPnsc++f3BTaelSMjN5THI+f2at7PWbtWZ9Z5999v5t
AIAfrfos7cSl9t93huFxgKKQKz/DsnXX2jnLQhln+cb9c3ceaVrjE3BYbi2OFAhAYRlKMejZA2Pvs+39
zzGJHysJQn0kLh5u2FaVe7nBM/1UvXOys0v4jiBimoRwLgYBgE7L1E4fl/TKpp9P3Q79cKovWAM6AAAA
SpZXjLnW4lvn6BImAoT2doCiwJ6danljosWyrqysqIe9879U/ELFQzWNnk0BcWjMBP4dGiHeZGDrTXr2
JkXTn1AIWnNTopozc1MuLu/n/e3dSisrGf4Sk11d13mfIOIYUGCaT5QyXB4hS8LhOe+BEIDVpDmWk25d
Wl5WHHHXzw/4AAAAeKy0IqnmBv92hzMwM5SkBgBgKHBOyU949Y9K1ZtQVhZ0V+C3tp8a/dbOy9vcfnkE
9MOpyoGIoRFoWeqkQce6RqSaj34jy7Zjy9ZL9YY4g6KzOkmG06psL5+nAApTn3tCUOmrr6LLeXmoYV8G
5b5xlJpdMt5MZFJ0qrb94VsOX5YgKjkyVqK+7pVdMGgKSQnR2o9WL4h/tKgo+B+U/hQRAQAA8PSa3Znn
6zwrmjv4uV+18eJeMBRyjBxuWbn3N7PXh3LpwiMvfTSqqd23stXOP0AAjKHUNNggACAADppCWMcxbq2G
cmpYul0h4OBoStRx1Dm9jrll0nF+lqFlhGTCcYygZVgBAAATmaEUmjAspQREmfH6ZYMoiayg0LQQkLS+
gJQZkPBIRQGOIGQNCFKcLyDZRIlwCCC6t+fgWg3ddl9q1Jq0ROrPW5aVROyGqogJAACAF/94Iuazgw2/
bXcJjyoKCamhCENTHUWjE1ZpEmI2blkU/HPsE6Xvar9o1m9qc/Dfxz14VaSKTAgAazX0maxkw7pP1s/9
oL/rCVWfdQQKhyMV7/CLlz1/wOGSsIeXCkM5QKQQYrjR7i2gBT9uOFF+NNhxzh38UJ6/4KnDFM3Y3T5p
PFaI2l57kGIoBEmx+vfHpFuX71g1+/P+riccImoG0K384kXN79+pW1zb4nlKEPCIUJqK0Ag6x2XH/U7i
8Ou7yoJ/RQgA8IPXdhefvGJ/ycvLhYSEfrpRNXBoWKohb7jp3fnTMtY/PmPwNEyJyADo9l8v7y6+UGd/
nRfl0aHc8kdR4Eyx6f5wfMtjS0Kt6dk3Dqb/vab1tVtOoUjGitpqO8LRFPLazNrqtHjjsnzu5JmyEBaO
B6KIDgAAgF+/fbDggwPNr7l8wsQQF+IcKXH6gwUZcYs3vlgUcofgub/46MmLje4lXr+UAQC6UMdT9TmZ
09Bt6fHGTdnZ1o2bnu3bfv19JeIDAADg+y/usnYEpNW1NzxzZUUJ+v0uAsDWKHbfEzPSn1+2YOKVUGoi
hKDZL3yY6PYryxvb3MUYQ1bE7A4Z4igKtUUbuXPZadblOStmXChDaFD96t9pUATAbQTNWPLh4obmrp/5
BTkBAIJakUcAoNfSp8dkWpduW/nwgXBU9tgrex+5dN2+yN0lTsAR2nB0KEAIfHot05iRZN76ybqS9f1d
T18YRBtYEFlYKL6ZkWCcEmPSHAo22QgA+Hj8zVN1jopZS3Y+FY7KPlgxY+eEvLR508YnvKjj6LPhGFMV
XjQFtTnDzG+nRhsm/4fx1Ib+rqevDKIZwJdKNx9OqzjWvMTjE+aLspIY7Dgsjbyp8YYN47Li3gpXN5ef
vP5ZRlVtx0IvL30vIJJ0pTe2qKnuCUIALE21mvTsidGZ0ZveK535WX/X1NcGZQAAAMybV05rcvTz/17j
eNkv4NzgRyI41qKruC/etnD76ulBHSe+a0RC0Mtv7U+73Bx45nRtxw9lTGzhGFfVM3FW7d6SiRn/ffnm
9artZcH1j4x0gzYAuj2z9tCIkzWtS2/Z+XmyQqxBDsNbTdwX6QmGtWP1JdvKysKzKEQIQc+88Wl+1RXX
tC6/uIgX5BhCINgaVfeARqjDbOJOJcfqtk4fGbd/6dMDt1tPXxj0AdDt8df2PHX0YsfagCBHBbtxiKFR
Z26GdceeN2b/ONz1AQDM/9Wu0nO1jmJvQJ5w+y/hukBtqLu9S8Ri1Bx6qCDlf9YsnvK3/q5ooBhSX7CF
K3ePrrnZ9fTNDv8cGUNKkMM4oqO4qnE58ev+8NLU/WEtEABKt1SlVNe2TXB0iQva7P4JokxSYFAt1vYd
BAA0hTqSbLoD8Rbdu5Pyk04uWzA+Yg/u9IYhFQDdfrHp8KzthxtX8QE5h5DgbinmWOb8yDTzDqoL1obS
ZeirrP1Lte3z083L65s8swKSnKVgwgBCEXV+oz8gAJFj6asJMfojMwvSVrzyZMHN/q5poBqSAQAAUPLz
iiRC0Pzalq6FXr80KpgxKAQ+k4GtyR1m++VfV878JNw1dlu0bl/y+Tp3tk4DMztdganOLnGs+vLgbjQC
nBRr2Btl1P4pzsRdeq9sRtBXxg8VQzYAuq1479SwPUcaXmjp9D8syUpqMGNwGvp6VqJxV3qMccPmXz1Y
F+4a71RZeU27v6b5W8cutT/UZPfPDAjycBkr9GC5vKSHBIZGsl7LHk616U7OmpD8t+cXFJxHg3jnXrgN
+QC4jaCpz+ws9Iryq612XyFW7r7R9esgINioZ07HmLi/TMs1vVv2XLGnNyq900/XVCYcv9KeHmfhxnY6
+fkeXhrPB7B+sE8OWBqB2cgdT441fNzq4Pd/d2Ji/S8X3t/R33VFIjUA7rB5czV7tLXtu+cb3Y85usQp
GPc8CGgKeJtZeyQnxbw6KyXueNmi8b2yPvCvSktLqcT876Sfveb/Zl2TPafTEZgkiHiUX8QmjEmPP8eA
QUChaeTV62innmMPJ1q5s7np5rMT4ooOqDceh04NgH/jZ28fi2681v6tay3+F+xusUAhpMfTa46l7RaT
Zk96kmnbjl8XfxxK67FgrNpcba6+0Rx9vVWMSbRx99u7hG93OAMjRAmnyQoxh3J8urcxNAKWpi5ZTFxT
nFX7cdMt35Fv5CV2ZMVDZ9kPiwZFS/KBQg2Ar1D6ZqWx6mrXgna3f4bTw98vyRDT0zE0DOXKTDb/OSBK
7zwyJblu6aPf5nuj1ntRWkooKf5AwdmrrrHOLilaUkiSLCmFkoyNMgadIOMoSVb6ZLaAEADHUryGoW8x
DOVnaeRlGGq/QaOx56RFXS7Miql+fIDfqjMYqAFwD55cfcTk97uzWzoCz12/1VUgYzKiJ/9PAAQdS/nj
LPodhaNi3lv/3AMHe6vWnqisrGQqzoLR7hI1LR6RjTeStACmojUsm8wLQobHK6XyAcnm5RWLKMsGAMgj
5PaBKUIAFNK91tb9NSJAAQJEoX9sYUIATRqGajEZNHYjx3TotXQ7p2WuBgS4ihWxg0GoPdVqEGxRjJAX
18EP1evI+osaAD30g9LdxecbXQ8GRDzHH8CxCulZD0ANgzpjLdozJiO74YlZmQcipb1UaWklkzxal+Dw
EhNGNO3zCkanN2AkFKE1jFZWFIyIghFDIyElJsbBceCjFVFOTjW55kwaGPcEqO6mBkAQJpdWMuByGZPN
uoVXbjofcniEIgn36KGasDQlGA3svkk58e8XTx9ZUTI+uU8WC1WqO6kBEKINu2u5fZV10292eKZ6ebFE
lEgG7sEuHQoBWEza6hgTV6FjyfHUnGFVW/rozYFKpQZA+KB588pZfX7UTy82OGe6vdIMQVbgns/7E1Bo
CohBx56ZmJ/02wfTOz9Qn4dVvU0NgF7wZnml8Vy9mHfpujuHF/Fsr18cJUgk655nBggFDBzdFGPRfm41
avZkDzM3/ObZyRdRuK7UUqn+nxoAfWDbtmO6//3C/aOTNfY5GCsZMlaSsEIoQu7tlB/HUmCL4vaMyox+
/9PTF/6amTdWOhjC5aYqVTc1APrYT1Z9mnPhRtcwRMEknpcm+Hh5XEDEMTJW4KsmCAgBIAAfTVFd1iju
BCD4PGeYqX58VmzNmCTfjUi9nFLVv9QA6Gdbd5+OvdrIj6260v5gQ4s7HwEaiTGJVoBQQID7ujk/Q4Ev
yWbaNzzReNpiYKvONrjOxsVTYlo0x298rljokw+hilhqAAwg5eWEPnT9UNqJL1pTLSYuQ5KVyW6vMIKX
FIOMldEyJkghBIhC/mm2gBAAhRDQtzfgtHAa2sOx1BUJk3PpiabrhSNt5+IN0Pj0o0O7/ZXqbmoARIB3
Ko6Y2j10bks7P7zVFUhqueVL6/TwD0iY6BAgDoBoCBAWK6AhBFgEX55d+LL7GbFrNUxTQrS+PiaKu8pp
UDtB0OrxwIWAwHtYLa1EmxC2GHWygjQKy8nERGsVzsRi4IyKMdBMNE4sL148S1QXIwcPNQAi1OZqwrac
OW5y2AV9s9ers3tEzuEOcGk2QzpFowwgVJSIlTifT0jgZWwWJeAECRtkCWsxUTSEAE0hpDAMcmho2sNp
ab+BY90GLeMy6hiXzcy1xVoNzeYori2KIe1OBVrTSZx4+fJWYbDdjzeU/R9639sLe/u2bgAAAABJRU5E
rkJggg==
</value>
</data>
</root>

196
SLZ_4/ConfigPLC.Designer.cs generated Normal file
View File

@@ -0,0 +1,196 @@

namespace SLZ_4
{
partial class ConfigPLC
{
/// <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()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ConfigPLC));
this.uiGroupBox1 = new Sunny.UI.UIGroupBox();
this.label1 = new System.Windows.Forms.Label();
this.CodePort = new System.Windows.Forms.ComboBox();
this.label2 = new System.Windows.Forms.Label();
this.label3 = new System.Windows.Forms.Label();
this.CodeBaud = new System.Windows.Forms.ComboBox();
this.CodeIsComm = new System.Windows.Forms.Label();
this.CodeCon = new System.Windows.Forms.Button();
this.CodeBreak = new System.Windows.Forms.Button();
this.CodeRefresh = new System.Windows.Forms.Button();
this.uiGroupBox1.SuspendLayout();
this.SuspendLayout();
//
// uiGroupBox1
//
this.uiGroupBox1.Controls.Add(this.label1);
this.uiGroupBox1.Controls.Add(this.CodePort);
this.uiGroupBox1.Controls.Add(this.label2);
this.uiGroupBox1.Controls.Add(this.label3);
this.uiGroupBox1.Controls.Add(this.CodeBaud);
this.uiGroupBox1.Controls.Add(this.CodeIsComm);
this.uiGroupBox1.Controls.Add(this.CodeCon);
this.uiGroupBox1.Controls.Add(this.CodeBreak);
this.uiGroupBox1.Controls.Add(this.CodeRefresh);
this.uiGroupBox1.FillColor = System.Drawing.Color.Transparent;
this.uiGroupBox1.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.uiGroupBox1.Location = new System.Drawing.Point(21, 14);
this.uiGroupBox1.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.uiGroupBox1.MinimumSize = new System.Drawing.Size(1, 1);
this.uiGroupBox1.Name = "uiGroupBox1";
this.uiGroupBox1.Padding = new System.Windows.Forms.Padding(0, 32, 0, 0);
this.uiGroupBox1.Size = new System.Drawing.Size(386, 386);
this.uiGroupBox1.Style = Sunny.UI.UIStyle.Custom;
this.uiGroupBox1.TabIndex = 74;
this.uiGroupBox1.Text = "PLC串口设置";
this.uiGroupBox1.TextAlignment = System.Drawing.ContentAlignment.MiddleCenter;
//
// label1
//
this.label1.AutoSize = true;
this.label1.Font = new System.Drawing.Font("宋体", 12F);
this.label1.Location = new System.Drawing.Point(40, 172);
this.label1.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(88, 16);
this.label1.TabIndex = 70;
this.label1.Text = "串口状态:";
//
// CodePort
//
this.CodePort.FormattingEnabled = true;
this.CodePort.Location = new System.Drawing.Point(151, 66);
this.CodePort.Margin = new System.Windows.Forms.Padding(4);
this.CodePort.Name = "CodePort";
this.CodePort.Size = new System.Drawing.Size(137, 24);
this.CodePort.TabIndex = 67;
//
// label2
//
this.label2.AutoSize = true;
this.label2.Location = new System.Drawing.Point(40, 66);
this.label2.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(64, 16);
this.label2.TabIndex = 65;
this.label2.Text = "端口号:";
//
// label3
//
this.label3.AutoSize = true;
this.label3.Location = new System.Drawing.Point(40, 118);
this.label3.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.label3.Name = "label3";
this.label3.Size = new System.Drawing.Size(64, 16);
this.label3.TabIndex = 66;
this.label3.Text = "波特率:";
//
// CodeBaud
//
this.CodeBaud.FormattingEnabled = true;
this.CodeBaud.Items.AddRange(new object[] {
"115200",
"9600"});
this.CodeBaud.Location = new System.Drawing.Point(151, 115);
this.CodeBaud.Margin = new System.Windows.Forms.Padding(4);
this.CodeBaud.Name = "CodeBaud";
this.CodeBaud.Size = new System.Drawing.Size(137, 24);
this.CodeBaud.TabIndex = 68;
//
// CodeIsComm
//
this.CodeIsComm.AutoSize = true;
this.CodeIsComm.Font = new System.Drawing.Font("宋体", 12F);
this.CodeIsComm.Location = new System.Drawing.Point(148, 172);
this.CodeIsComm.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.CodeIsComm.Name = "CodeIsComm";
this.CodeIsComm.Size = new System.Drawing.Size(56, 16);
this.CodeIsComm.TabIndex = 69;
this.CodeIsComm.Text = "label6";
//
// CodeCon
//
this.CodeCon.Location = new System.Drawing.Point(151, 220);
this.CodeCon.Margin = new System.Windows.Forms.Padding(4);
this.CodeCon.Name = "CodeCon";
this.CodeCon.Size = new System.Drawing.Size(125, 45);
this.CodeCon.TabIndex = 62;
this.CodeCon.TabStop = false;
this.CodeCon.Text = "连接串口";
this.CodeCon.UseVisualStyleBackColor = true;
this.CodeCon.Click += new System.EventHandler(this.CodeCon_Click);
//
// CodeBreak
//
this.CodeBreak.Location = new System.Drawing.Point(151, 325);
this.CodeBreak.Margin = new System.Windows.Forms.Padding(4);
this.CodeBreak.Name = "CodeBreak";
this.CodeBreak.Size = new System.Drawing.Size(125, 45);
this.CodeBreak.TabIndex = 63;
this.CodeBreak.Text = "断开连接";
this.CodeBreak.UseVisualStyleBackColor = true;
this.CodeBreak.Click += new System.EventHandler(this.CodeBreak_Click);
//
// CodeRefresh
//
this.CodeRefresh.Location = new System.Drawing.Point(151, 272);
this.CodeRefresh.Margin = new System.Windows.Forms.Padding(4);
this.CodeRefresh.Name = "CodeRefresh";
this.CodeRefresh.Size = new System.Drawing.Size(125, 45);
this.CodeRefresh.TabIndex = 64;
this.CodeRefresh.Text = "刷新串口";
this.CodeRefresh.UseVisualStyleBackColor = true;
this.CodeRefresh.Click += new System.EventHandler(this.CodeRefresh_Click);
//
// ConfigPLC
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.BackColor = System.Drawing.Color.LightBlue;
this.ClientSize = new System.Drawing.Size(425, 412);
this.Controls.Add(this.uiGroupBox1);
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.Name = "ConfigPLC";
this.Text = "配置PLC";
this.uiGroupBox1.ResumeLayout(false);
this.uiGroupBox1.PerformLayout();
this.ResumeLayout(false);
}
#endregion
private Sunny.UI.UIGroupBox uiGroupBox1;
private System.Windows.Forms.Label label1;
public System.Windows.Forms.ComboBox CodePort;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.Label label3;
private System.Windows.Forms.ComboBox CodeBaud;
public System.Windows.Forms.Label CodeIsComm;
private System.Windows.Forms.Button CodeCon;
private System.Windows.Forms.Button CodeBreak;
private System.Windows.Forms.Button CodeRefresh;
}
}

82
SLZ_4/ConfigPLC.cs Normal file
View File

@@ -0,0 +1,82 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace SLZ_4
{
public partial class ConfigPLC : Form
{
public ConfigPLC()
{
InitializeComponent();
}
private void CodeCon_Click(object sender, EventArgs e)
{
FormMain.form.updatePLC(CodePort.Text, Convert.ToInt32(CodeBaud.Text));
Thread.Sleep(100);
UpdateStatus(FormMain.form.plcObj.PLC.IsOpen());
}
public void refreshPort()
{
CodePort.Items.Clear();
string[] ports = System.IO.Ports.SerialPort.GetPortNames();
CodePort.Items.AddRange(ports);
}
private void CodeRefresh_Click(object sender, EventArgs e)
{
refreshPort();
}
private void CodeBreak_Click(object sender, EventArgs e)
{
if (FormMain.form.plcObj != null)
{
FormMain.form.plcObj.closePLC();
Thread.Sleep(100);
UpdateStatus(FormMain.form.plcObj.PLC.IsOpen());
}
}
public void UpdateStatus(bool status)
{
if (status)
{
CodeIsComm.Text = "已打开";
CodeIsComm.BackColor = Color.Green;
CodeCon.Enabled = false;
CodeBreak.Enabled = true;
}
else
{
CodeIsComm.Text = "未打开";
CodeIsComm.BackColor = Color.Red;
CodeCon.Enabled = true;
CodeBreak.Enabled = false;
}
}
public void setConfig(ref PLC_PARAM plcParam)
{
refreshPort();
CodeBaud.Text = plcParam.iBaudrate.ToString();
CodePort.Text = plcParam.sPort;
if (FormMain.form.plcObj != null)
{
UpdateStatus(FormMain.form.plcObj.PLC.IsOpen());
}
else
{
UpdateStatus(false);
}
}
}
}

502
SLZ_4/ConfigPLC.resx Normal file
View File

@@ -0,0 +1,502 @@
<?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>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
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
rkJggg==
</value>
</data>
</root>

129
SLZ_4/ConfigPassword.Designer.cs generated Normal file
View File

@@ -0,0 +1,129 @@

namespace SLZ_4
{
partial class ConfigPassword
{
/// <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()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ConfigPassword));
this.uiLabel1 = new Sunny.UI.UILabel();
this.uiLabel2 = new Sunny.UI.UILabel();
this.uiTextOldPwd = new Sunny.UI.UITextBox();
this.uiTextNewPwd = new Sunny.UI.UITextBox();
this.uiButtonSave = new Sunny.UI.UIButton();
this.SuspendLayout();
//
// uiLabel1
//
this.uiLabel1.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.uiLabel1.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(48)))), ((int)(((byte)(48)))), ((int)(((byte)(48)))));
this.uiLabel1.Location = new System.Drawing.Point(57, 51);
this.uiLabel1.Name = "uiLabel1";
this.uiLabel1.Size = new System.Drawing.Size(87, 23);
this.uiLabel1.TabIndex = 0;
this.uiLabel1.Text = "原密码:";
//
// uiLabel2
//
this.uiLabel2.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.uiLabel2.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(48)))), ((int)(((byte)(48)))), ((int)(((byte)(48)))));
this.uiLabel2.Location = new System.Drawing.Point(60, 122);
this.uiLabel2.Name = "uiLabel2";
this.uiLabel2.Size = new System.Drawing.Size(84, 23);
this.uiLabel2.TabIndex = 1;
this.uiLabel2.Text = "新密码:";
//
// uiTextOldPwd
//
this.uiTextOldPwd.Cursor = System.Windows.Forms.Cursors.IBeam;
this.uiTextOldPwd.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.uiTextOldPwd.Location = new System.Drawing.Point(196, 45);
this.uiTextOldPwd.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.uiTextOldPwd.MinimumSize = new System.Drawing.Size(1, 16);
this.uiTextOldPwd.Name = "uiTextOldPwd";
this.uiTextOldPwd.Padding = new System.Windows.Forms.Padding(5);
this.uiTextOldPwd.ShowText = false;
this.uiTextOldPwd.Size = new System.Drawing.Size(150, 29);
this.uiTextOldPwd.TabIndex = 2;
this.uiTextOldPwd.TextAlignment = System.Drawing.ContentAlignment.MiddleLeft;
this.uiTextOldPwd.Watermark = "";
//
// uiTextNewPwd
//
this.uiTextNewPwd.Cursor = System.Windows.Forms.Cursors.IBeam;
this.uiTextNewPwd.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.uiTextNewPwd.Location = new System.Drawing.Point(196, 116);
this.uiTextNewPwd.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.uiTextNewPwd.MinimumSize = new System.Drawing.Size(1, 16);
this.uiTextNewPwd.Name = "uiTextNewPwd";
this.uiTextNewPwd.Padding = new System.Windows.Forms.Padding(5);
this.uiTextNewPwd.ShowText = false;
this.uiTextNewPwd.Size = new System.Drawing.Size(150, 29);
this.uiTextNewPwd.TabIndex = 3;
this.uiTextNewPwd.TextAlignment = System.Drawing.ContentAlignment.MiddleLeft;
this.uiTextNewPwd.Watermark = "";
//
// uiButtonSave
//
this.uiButtonSave.Cursor = System.Windows.Forms.Cursors.Hand;
this.uiButtonSave.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.uiButtonSave.Location = new System.Drawing.Point(161, 206);
this.uiButtonSave.MinimumSize = new System.Drawing.Size(1, 1);
this.uiButtonSave.Name = "uiButtonSave";
this.uiButtonSave.Size = new System.Drawing.Size(100, 35);
this.uiButtonSave.TabIndex = 4;
this.uiButtonSave.Text = "保存";
this.uiButtonSave.TipsFont = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.uiButtonSave.Click += new System.EventHandler(this.uiButtonSave_Click);
//
// ConfigPassword
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.BackColor = System.Drawing.Color.LightBlue;
this.ClientSize = new System.Drawing.Size(432, 274);
this.Controls.Add(this.uiButtonSave);
this.Controls.Add(this.uiTextNewPwd);
this.Controls.Add(this.uiTextOldPwd);
this.Controls.Add(this.uiLabel2);
this.Controls.Add(this.uiLabel1);
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.Name = "ConfigPassword";
this.Text = "ConfigPassword";
this.ResumeLayout(false);
}
#endregion
private Sunny.UI.UILabel uiLabel1;
private Sunny.UI.UILabel uiLabel2;
private Sunny.UI.UITextBox uiTextOldPwd;
private Sunny.UI.UITextBox uiTextNewPwd;
private Sunny.UI.UIButton uiButtonSave;
}
}

38
SLZ_4/ConfigPassword.cs Normal file
View File

@@ -0,0 +1,38 @@
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 SLZ_4
{
public partial class ConfigPassword : Form
{
public ConfigPassword()
{
InitializeComponent();
}
public void clear()
{
uiTextOldPwd.Text = "";
uiTextNewPwd.Text = "";
}
private void uiButtonSave_Click(object sender, EventArgs e)
{
if (uiTextOldPwd.Text != FormMain.form.logonForm.password)
{
MessageBox.Show("请输入正确的原密码!");
return;
}
FormMain.form.logonForm.password = uiTextNewPwd.Text;
Config.savePassword(uiTextNewPwd.Text);
MessageBox.Show("密码已经修改!");
Close();
}
}
}

502
SLZ_4/ConfigPassword.resx Normal file
View File

@@ -0,0 +1,502 @@
<?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>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
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
rkJggg==
</value>
</data>
</root>

264
SLZ_4/ConfigScanner.cs Normal file
View File

@@ -0,0 +1,264 @@
using Microsoft.Office.Interop.Excel;
using System;
using System.Drawing;
using System.Net;
using System.Reflection.Emit;
using System.Text.RegularExpressions;
using System.Windows.Forms;
namespace SLZ_4
{
public partial class ConfigScanner : Form
{
public string[] ports;
public int scanNum; //扫码枪数量
public int scanType; //扫码枪类型 0普通扫码枪 1工业扫码枪-串口2工业扫码枪-网路
public ConfigScanner()
{
InitializeComponent();
cmbScanType.Items.Add("普通扫码枪");
cmbScanType.Items.Add("工业扫码枪-串口");
cmbScanType.Items.Add("工业扫码枪-网络");
}
private void Form_Load(object sender, EventArgs e)
{
uiGroupNetwork1.Location = uiGroupCom1.Location;
uiGroupNetwork2.Location = uiGroupCom2.Location;
}
public void setConfig()
{
refreshPort();
cmbScanType.SelectedIndex = scanType;
if (scanType == (int)SCANNER_TYPE.COMMON || scanType == (int)SCANNER_TYPE.INDUSTRY_COM)
{
CH1CodeBaud.Text = FormMain.form.arrScannerObj[0].iBaudrate.ToString();
CH1CodePort.Text = FormMain.form.arrScannerObj[0].sPort;
CH2CodeBaud.Text = FormMain.form.arrScannerObj[1].iBaudrate.ToString();
CH2CodePort.Text = FormMain.form.arrScannerObj[1].sPort;
}
else if (scanType == (int)SCANNER_TYPE.INDUSTRY_NETWORK)
{
textIP1.Text = FormMain.form.arrScannerObj[0].sIpaddr;
textPort1.Text = FormMain.form.arrScannerObj[0].iPort.ToString();
textIP2.Text = FormMain.form.arrScannerObj[1].sIpaddr;
textPort2.Text = FormMain.form.arrScannerObj[1].iPort.ToString();
}
showComm1Status();
showComm2Status();
showNetwork1Status();
showNetwork2Status();
ShowScanBox();
}
public void showComm1Status()
{
if (FormMain.form.serialPortCode1.IsOpen)
{
CH1CodeIsComm.Text = "已打开";
CH1CodeIsComm.BackColor = Color.Green;
CH1CodeCon.Enabled = false;
CH1CodeBreak.Enabled = true;
}
else
{
CH1CodeIsComm.Text = "未打开";
CH1CodeIsComm.BackColor = Color.Red;
CH1CodeCon.Enabled = true;
CH1CodeBreak.Enabled = false;
}
}
public void showComm2Status()
{
if (FormMain.form.serialPortCode2.IsOpen)
{
CH2CodeIsComm.Text = "已打开";
CH2CodeIsComm.BackColor = Color.Green;
CH2CodeCon.Enabled = false;
CH2CodeBreak.Enabled = true;
}
else
{
CH2CodeIsComm.Text = "未打开";
CH2CodeIsComm.BackColor = Color.Red;
CH2CodeCon.Enabled = true;
CH2CodeBreak.Enabled = false;
}
}
public void showNetwork1Status()
{
//网口1
if (FormMain.form.arrScanNetwork[0] != null && FormMain.form.arrScanNetwork[0].IsConnected)
{
CH1NetworkComm.Text = "已连接";
CH1NetworkComm.BackColor = Color.Green;
buttonConnect1.Enabled = false;
buttonDisconnect1.Enabled = true;
}
else
{
CH1NetworkComm.Text = "未连接";
CH1NetworkComm.BackColor = Color.Red;
buttonConnect1.Enabled = true;
buttonDisconnect1.Enabled = false;
}
}
public void showNetwork2Status()
{
//网口2
if (FormMain.form.arrScanNetwork[1] != null && FormMain.form.arrScanNetwork[1].IsConnected)
{
CH2NetworkComm.Text = "已连接";
CH2NetworkComm.BackColor = Color.Green;
buttonConnect2.Enabled = false;
buttonDisconnect2.Enabled = true;
}
else
{
CH2NetworkComm.Text = "未连接";
CH2NetworkComm.BackColor = Color.Red;
buttonConnect2.Enabled = true;
buttonDisconnect2.Enabled = false;
}
}
public void refreshPort()
{
CH1CodePort.Items.Clear();
CH2CodePort.Items.Clear();
ports = System.IO.Ports.SerialPort.GetPortNames();
if (ports.Length > 0)
{
CH1CodePort.Items.AddRange(ports);
CH2CodePort.Items.AddRange(ports);
}
}
private void CH1CodeRefresh_Click(object sender, EventArgs e)
{
refreshPort();
}
private void CH1CodeCon_Click(object sender, EventArgs e)
{
FormMain.form.arrScannerObj[0].iBaudrate = int.Parse(CH1CodeBaud.Text);
FormMain.form.arrScannerObj[0].sPort = CH1CodePort.Text;
Config.saveScanner(0);
FormMain.form.openScanner1();
showComm1Status();
}
private void CH1CodeBreak_Click(object sender, EventArgs e)
{
if (FormMain.form.serialPortCode1.IsOpen)
{
FormMain.form.serialPortCode1.Close();
}
showComm1Status();
}
private void CH2CodeCon_Click(object sender, EventArgs e)
{
FormMain.form.arrScannerObj[1].iBaudrate = int.Parse(CH1CodeBaud.Text);
FormMain.form.arrScannerObj[1].sPort = CH2CodePort.Text;
Config.saveScanner(1);
FormMain.form.openScanner2();
showComm2Status();
}
private void CH2CodeBreak_Click(object sender, EventArgs e)
{
if (FormMain.form.serialPortCode2.IsOpen)
{
FormMain.form.serialPortCode2.Close();
}
showComm2Status();
}
private void ShowScanBox()
{
cmbScanNum.SelectedIndex = scanNum - 1;
if (scanType == (int)SCANNER_TYPE.COMMON || scanType == (int)SCANNER_TYPE.INDUSTRY_COM)
{
uiGroupCom1.Visible = true;
uiGroupCom2.Visible = cmbScanNum.SelectedIndex == 1 ? true : false;
uiGroupNetwork1.Visible = false;
uiGroupNetwork2.Visible = false;
CH1CodeRefresh.Visible = true;
}
else if (scanType == (int)SCANNER_TYPE.INDUSTRY_NETWORK)
{
uiGroupNetwork1.Visible = true;
uiGroupNetwork2.Visible = cmbScanNum.SelectedIndex == 1 ? true : false;
uiGroupCom1.Visible = false;
uiGroupCom2.Visible = false;
CH1CodeRefresh.Visible = false;
}
}
private void cmbScanNum_SelectedIndexChanged(object sender, EventArgs e)
{
scanNum = cmbScanNum.SelectedIndex + 1;
Config.saveScanNumber(scanNum);
ShowScanBox();
}
private void cmbScanType_SelectedIndexChanged(object sender, EventArgs e)
{
scanType = cmbScanType.SelectedIndex;
Config.saveScanType(scanType);
ShowScanBox();
}
private void buttonConnect1_Click(object sender, EventArgs e)
{
FormMain.form.arrScannerObj[0].iPort = int.Parse(textPort1.Text);
FormMain.form.arrScannerObj[0].sIpaddr = textIP1.Text;
Config.saveScanner(0);
FormMain.form.addScanNetwork(0);
FormMain.form.openScannerNetwork(0);
showNetwork1Status();
}
private void buttonDisconnect1_Click(object sender, EventArgs e)
{
FormMain.form.closeScannerNetwork(0);
showNetwork1Status();
}
private void buttonConnect2_Click(object sender, EventArgs e)
{
FormMain.form.arrScannerObj[1].iPort = int.Parse(textPort2.Text);
FormMain.form.arrScannerObj[1].sIpaddr = textIP2.Text;
Config.saveScanner(1);
FormMain.form.addScanNetwork(1);
FormMain.form.openScannerNetwork(1);
showNetwork2Status();
}
private void buttonDisconnect2_Click(object sender, EventArgs e)
{
FormMain.form.closeScannerNetwork(1);
showNetwork2Status();
}
public static bool IsValidIp(string ip)
{
// 基础格式检查
if (!IPAddress.TryParse(ip, out _) || ip.Split('.').Length != 4)
return false;
// 每段数值范围检查
string pattern = @"^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$";
return Regex.IsMatch(ip, pattern);
}
}
}

640
SLZ_4/ConfigScanner.designer.cs generated Normal file
View File

@@ -0,0 +1,640 @@
namespace SLZ_4
{
partial class ConfigScanner
{
/// <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.components = new System.ComponentModel.Container();
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ConfigScanner));
this.ReadStatus = new System.Windows.Forms.Timer(this.components);
this.uiGroupCom2 = new Sunny.UI.UIGroupBox();
this.label1 = new System.Windows.Forms.Label();
this.CH2CodePort = new System.Windows.Forms.ComboBox();
this.label2 = new System.Windows.Forms.Label();
this.label3 = new System.Windows.Forms.Label();
this.CH2CodeBaud = new System.Windows.Forms.ComboBox();
this.CH2CodeIsComm = new System.Windows.Forms.Label();
this.CH2CodeCon = new System.Windows.Forms.Button();
this.CH2CodeBreak = new System.Windows.Forms.Button();
this.uiGroupCom1 = new Sunny.UI.UIGroupBox();
this.label7 = new System.Windows.Forms.Label();
this.CH1CodePort = new System.Windows.Forms.ComboBox();
this.label11 = new System.Windows.Forms.Label();
this.label15 = new System.Windows.Forms.Label();
this.CH1CodeBaud = new System.Windows.Forms.ComboBox();
this.CH1CodeIsComm = new System.Windows.Forms.Label();
this.CH1CodeCon = new System.Windows.Forms.Button();
this.CH1CodeBreak = new System.Windows.Forms.Button();
this.CH1CodeRefresh = new System.Windows.Forms.Button();
this.label4 = new System.Windows.Forms.Label();
this.cmbScanNum = new System.Windows.Forms.ComboBox();
this.label5 = new System.Windows.Forms.Label();
this.cmbScanType = new System.Windows.Forms.ComboBox();
this.uiGroupNetwork1 = new Sunny.UI.UIGroupBox();
this.textPort1 = new System.Windows.Forms.TextBox();
this.textIP1 = new System.Windows.Forms.TextBox();
this.label6 = new System.Windows.Forms.Label();
this.label8 = new System.Windows.Forms.Label();
this.label9 = new System.Windows.Forms.Label();
this.CH1NetworkComm = new System.Windows.Forms.Label();
this.buttonConnect1 = new System.Windows.Forms.Button();
this.buttonDisconnect1 = new System.Windows.Forms.Button();
this.uiGroupNetwork2 = new Sunny.UI.UIGroupBox();
this.textPort2 = new System.Windows.Forms.TextBox();
this.textIP2 = new System.Windows.Forms.TextBox();
this.label12 = new System.Windows.Forms.Label();
this.label13 = new System.Windows.Forms.Label();
this.label14 = new System.Windows.Forms.Label();
this.CH2NetworkComm = new System.Windows.Forms.Label();
this.buttonConnect2 = new System.Windows.Forms.Button();
this.buttonDisconnect2 = new System.Windows.Forms.Button();
this.uiGroupCom2.SuspendLayout();
this.uiGroupCom1.SuspendLayout();
this.uiGroupNetwork1.SuspendLayout();
this.uiGroupNetwork2.SuspendLayout();
this.SuspendLayout();
//
// uiGroupCom2
//
this.uiGroupCom2.Controls.Add(this.label1);
this.uiGroupCom2.Controls.Add(this.CH2CodePort);
this.uiGroupCom2.Controls.Add(this.label2);
this.uiGroupCom2.Controls.Add(this.label3);
this.uiGroupCom2.Controls.Add(this.CH2CodeBaud);
this.uiGroupCom2.Controls.Add(this.CH2CodeIsComm);
this.uiGroupCom2.Controls.Add(this.CH2CodeCon);
this.uiGroupCom2.Controls.Add(this.CH2CodeBreak);
this.uiGroupCom2.FillColor = System.Drawing.Color.Transparent;
this.uiGroupCom2.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.uiGroupCom2.Location = new System.Drawing.Point(418, 146);
this.uiGroupCom2.Margin = new System.Windows.Forms.Padding(5, 7, 5, 7);
this.uiGroupCom2.MinimumSize = new System.Drawing.Size(1, 1);
this.uiGroupCom2.Name = "uiGroupCom2";
this.uiGroupCom2.Padding = new System.Windows.Forms.Padding(0, 43, 0, 0);
this.uiGroupCom2.Size = new System.Drawing.Size(320, 278);
this.uiGroupCom2.Style = Sunny.UI.UIStyle.Custom;
this.uiGroupCom2.TabIndex = 73;
this.uiGroupCom2.Text = "扫码枪2串口设置";
this.uiGroupCom2.TextAlignment = System.Drawing.ContentAlignment.MiddleCenter;
//
// label1
//
this.label1.AutoSize = true;
this.label1.Font = new System.Drawing.Font("宋体", 12F);
this.label1.Location = new System.Drawing.Point(25, 156);
this.label1.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(88, 16);
this.label1.TabIndex = 70;
this.label1.Text = "串口状态:";
//
// CH2CodePort
//
this.CH2CodePort.FormattingEnabled = true;
this.CH2CodePort.Location = new System.Drawing.Point(116, 63);
this.CH2CodePort.Margin = new System.Windows.Forms.Padding(4);
this.CH2CodePort.Name = "CH2CodePort";
this.CH2CodePort.Size = new System.Drawing.Size(137, 24);
this.CH2CodePort.TabIndex = 67;
//
// label2
//
this.label2.AutoSize = true;
this.label2.Location = new System.Drawing.Point(25, 66);
this.label2.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(64, 16);
this.label2.TabIndex = 65;
this.label2.Text = "端口号:";
//
// label3
//
this.label3.AutoSize = true;
this.label3.Location = new System.Drawing.Point(25, 108);
this.label3.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.label3.Name = "label3";
this.label3.Size = new System.Drawing.Size(64, 16);
this.label3.TabIndex = 66;
this.label3.Text = "波特率:";
//
// CH2CodeBaud
//
this.CH2CodeBaud.FormattingEnabled = true;
this.CH2CodeBaud.Items.AddRange(new object[] {
"115200",
"9600"});
this.CH2CodeBaud.Location = new System.Drawing.Point(116, 108);
this.CH2CodeBaud.Margin = new System.Windows.Forms.Padding(4);
this.CH2CodeBaud.Name = "CH2CodeBaud";
this.CH2CodeBaud.Size = new System.Drawing.Size(137, 24);
this.CH2CodeBaud.TabIndex = 68;
//
// CH2CodeIsComm
//
this.CH2CodeIsComm.AutoSize = true;
this.CH2CodeIsComm.Font = new System.Drawing.Font("宋体", 12F);
this.CH2CodeIsComm.Location = new System.Drawing.Point(121, 156);
this.CH2CodeIsComm.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.CH2CodeIsComm.Name = "CH2CodeIsComm";
this.CH2CodeIsComm.Size = new System.Drawing.Size(56, 16);
this.CH2CodeIsComm.TabIndex = 69;
this.CH2CodeIsComm.Text = "label6";
//
// CH2CodeCon
//
this.CH2CodeCon.Location = new System.Drawing.Point(19, 209);
this.CH2CodeCon.Margin = new System.Windows.Forms.Padding(4);
this.CH2CodeCon.Name = "CH2CodeCon";
this.CH2CodeCon.Size = new System.Drawing.Size(125, 45);
this.CH2CodeCon.TabIndex = 62;
this.CH2CodeCon.TabStop = false;
this.CH2CodeCon.Text = "连接串口";
this.CH2CodeCon.UseVisualStyleBackColor = true;
this.CH2CodeCon.Click += new System.EventHandler(this.CH2CodeCon_Click);
//
// CH2CodeBreak
//
this.CH2CodeBreak.Location = new System.Drawing.Point(152, 209);
this.CH2CodeBreak.Margin = new System.Windows.Forms.Padding(4);
this.CH2CodeBreak.Name = "CH2CodeBreak";
this.CH2CodeBreak.Size = new System.Drawing.Size(125, 45);
this.CH2CodeBreak.TabIndex = 63;
this.CH2CodeBreak.Text = "断开连接";
this.CH2CodeBreak.UseVisualStyleBackColor = true;
this.CH2CodeBreak.Click += new System.EventHandler(this.CH2CodeBreak_Click);
//
// uiGroupCom1
//
this.uiGroupCom1.Controls.Add(this.label7);
this.uiGroupCom1.Controls.Add(this.CH1CodePort);
this.uiGroupCom1.Controls.Add(this.label11);
this.uiGroupCom1.Controls.Add(this.label15);
this.uiGroupCom1.Controls.Add(this.CH1CodeBaud);
this.uiGroupCom1.Controls.Add(this.CH1CodeIsComm);
this.uiGroupCom1.Controls.Add(this.CH1CodeCon);
this.uiGroupCom1.Controls.Add(this.CH1CodeBreak);
this.uiGroupCom1.FillColor = System.Drawing.Color.Transparent;
this.uiGroupCom1.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.uiGroupCom1.Location = new System.Drawing.Point(48, 146);
this.uiGroupCom1.Margin = new System.Windows.Forms.Padding(5, 7, 5, 7);
this.uiGroupCom1.MinimumSize = new System.Drawing.Size(1, 1);
this.uiGroupCom1.Name = "uiGroupCom1";
this.uiGroupCom1.Padding = new System.Windows.Forms.Padding(0, 43, 0, 0);
this.uiGroupCom1.Size = new System.Drawing.Size(320, 278);
this.uiGroupCom1.Style = Sunny.UI.UIStyle.Custom;
this.uiGroupCom1.TabIndex = 72;
this.uiGroupCom1.Text = "条码枪1串口设置";
this.uiGroupCom1.TextAlignment = System.Drawing.ContentAlignment.MiddleCenter;
//
// label7
//
this.label7.AutoSize = true;
this.label7.Font = new System.Drawing.Font("宋体", 12F);
this.label7.Location = new System.Drawing.Point(21, 156);
this.label7.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.label7.Name = "label7";
this.label7.Size = new System.Drawing.Size(88, 16);
this.label7.TabIndex = 70;
this.label7.Text = "串口状态:";
//
// CH1CodePort
//
this.CH1CodePort.FormattingEnabled = true;
this.CH1CodePort.Location = new System.Drawing.Point(121, 63);
this.CH1CodePort.Margin = new System.Windows.Forms.Padding(4);
this.CH1CodePort.Name = "CH1CodePort";
this.CH1CodePort.Size = new System.Drawing.Size(137, 24);
this.CH1CodePort.TabIndex = 67;
//
// label11
//
this.label11.AutoSize = true;
this.label11.Location = new System.Drawing.Point(21, 66);
this.label11.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.label11.Name = "label11";
this.label11.Size = new System.Drawing.Size(64, 16);
this.label11.TabIndex = 65;
this.label11.Text = "端口号:";
//
// label15
//
this.label15.AutoSize = true;
this.label15.Location = new System.Drawing.Point(21, 108);
this.label15.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.label15.Name = "label15";
this.label15.Size = new System.Drawing.Size(64, 16);
this.label15.TabIndex = 66;
this.label15.Text = "波特率:";
//
// CH1CodeBaud
//
this.CH1CodeBaud.FormattingEnabled = true;
this.CH1CodeBaud.Items.AddRange(new object[] {
"115200",
"9600"});
this.CH1CodeBaud.Location = new System.Drawing.Point(121, 105);
this.CH1CodeBaud.Margin = new System.Windows.Forms.Padding(4);
this.CH1CodeBaud.Name = "CH1CodeBaud";
this.CH1CodeBaud.Size = new System.Drawing.Size(137, 24);
this.CH1CodeBaud.TabIndex = 68;
//
// CH1CodeIsComm
//
this.CH1CodeIsComm.AutoSize = true;
this.CH1CodeIsComm.Font = new System.Drawing.Font("宋体", 12F);
this.CH1CodeIsComm.Location = new System.Drawing.Point(118, 156);
this.CH1CodeIsComm.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.CH1CodeIsComm.Name = "CH1CodeIsComm";
this.CH1CodeIsComm.Size = new System.Drawing.Size(56, 16);
this.CH1CodeIsComm.TabIndex = 69;
this.CH1CodeIsComm.Text = "label6";
//
// CH1CodeCon
//
this.CH1CodeCon.Location = new System.Drawing.Point(24, 209);
this.CH1CodeCon.Margin = new System.Windows.Forms.Padding(4);
this.CH1CodeCon.Name = "CH1CodeCon";
this.CH1CodeCon.Size = new System.Drawing.Size(125, 45);
this.CH1CodeCon.TabIndex = 62;
this.CH1CodeCon.TabStop = false;
this.CH1CodeCon.Text = "连接串口";
this.CH1CodeCon.UseVisualStyleBackColor = true;
this.CH1CodeCon.Click += new System.EventHandler(this.CH1CodeCon_Click);
//
// CH1CodeBreak
//
this.CH1CodeBreak.Location = new System.Drawing.Point(157, 209);
this.CH1CodeBreak.Margin = new System.Windows.Forms.Padding(4);
this.CH1CodeBreak.Name = "CH1CodeBreak";
this.CH1CodeBreak.Size = new System.Drawing.Size(125, 45);
this.CH1CodeBreak.TabIndex = 63;
this.CH1CodeBreak.Text = "断开连接";
this.CH1CodeBreak.UseVisualStyleBackColor = true;
this.CH1CodeBreak.Click += new System.EventHandler(this.CH1CodeBreak_Click);
//
// CH1CodeRefresh
//
this.CH1CodeRefresh.Font = new System.Drawing.Font("宋体", 12F);
this.CH1CodeRefresh.Location = new System.Drawing.Point(140, 80);
this.CH1CodeRefresh.Margin = new System.Windows.Forms.Padding(5);
this.CH1CodeRefresh.Name = "CH1CodeRefresh";
this.CH1CodeRefresh.Size = new System.Drawing.Size(136, 35);
this.CH1CodeRefresh.TabIndex = 64;
this.CH1CodeRefresh.Text = "刷新串口";
this.CH1CodeRefresh.UseVisualStyleBackColor = true;
this.CH1CodeRefresh.Click += new System.EventHandler(this.CH1CodeRefresh_Click);
//
// label4
//
this.label4.AutoSize = true;
this.label4.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.label4.Location = new System.Drawing.Point(61, 30);
this.label4.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.label4.Name = "label4";
this.label4.Size = new System.Drawing.Size(96, 16);
this.label4.TabIndex = 74;
this.label4.Text = "扫码枪数量:";
//
// cmbScanNum
//
this.cmbScanNum.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cmbScanNum.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.cmbScanNum.FormattingEnabled = true;
this.cmbScanNum.Items.AddRange(new object[] {
"1个",
"2个"});
this.cmbScanNum.Location = new System.Drawing.Point(176, 26);
this.cmbScanNum.Margin = new System.Windows.Forms.Padding(5);
this.cmbScanNum.Name = "cmbScanNum";
this.cmbScanNum.Size = new System.Drawing.Size(156, 24);
this.cmbScanNum.TabIndex = 75;
this.cmbScanNum.SelectedIndexChanged += new System.EventHandler(this.cmbScanNum_SelectedIndexChanged);
//
// label5
//
this.label5.AutoSize = true;
this.label5.Location = new System.Drawing.Point(411, 32);
this.label5.Name = "label5";
this.label5.Size = new System.Drawing.Size(96, 16);
this.label5.TabIndex = 76;
this.label5.Text = "扫码枪类型:";
//
// cmbScanType
//
this.cmbScanType.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cmbScanType.FormattingEnabled = true;
this.cmbScanType.Location = new System.Drawing.Point(523, 25);
this.cmbScanType.Name = "cmbScanType";
this.cmbScanType.Size = new System.Drawing.Size(194, 24);
this.cmbScanType.TabIndex = 77;
this.cmbScanType.SelectedIndexChanged += new System.EventHandler(this.cmbScanType_SelectedIndexChanged);
//
// uiGroupNetwork1
//
this.uiGroupNetwork1.Controls.Add(this.textPort1);
this.uiGroupNetwork1.Controls.Add(this.textIP1);
this.uiGroupNetwork1.Controls.Add(this.label6);
this.uiGroupNetwork1.Controls.Add(this.label8);
this.uiGroupNetwork1.Controls.Add(this.label9);
this.uiGroupNetwork1.Controls.Add(this.CH1NetworkComm);
this.uiGroupNetwork1.Controls.Add(this.buttonConnect1);
this.uiGroupNetwork1.Controls.Add(this.buttonDisconnect1);
this.uiGroupNetwork1.FillColor = System.Drawing.Color.Transparent;
this.uiGroupNetwork1.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.uiGroupNetwork1.Location = new System.Drawing.Point(48, 438);
this.uiGroupNetwork1.Margin = new System.Windows.Forms.Padding(5, 7, 5, 7);
this.uiGroupNetwork1.MinimumSize = new System.Drawing.Size(1, 1);
this.uiGroupNetwork1.Name = "uiGroupNetwork1";
this.uiGroupNetwork1.Padding = new System.Windows.Forms.Padding(0, 43, 0, 0);
this.uiGroupNetwork1.Size = new System.Drawing.Size(320, 274);
this.uiGroupNetwork1.Style = Sunny.UI.UIStyle.Custom;
this.uiGroupNetwork1.TabIndex = 78;
this.uiGroupNetwork1.Text = "条码枪1网络设置";
this.uiGroupNetwork1.TextAlignment = System.Drawing.ContentAlignment.MiddleCenter;
this.uiGroupNetwork1.Visible = false;
//
// textPort1
//
this.textPort1.Location = new System.Drawing.Point(121, 92);
this.textPort1.Name = "textPort1";
this.textPort1.Size = new System.Drawing.Size(152, 26);
this.textPort1.TabIndex = 72;
//
// textIP1
//
this.textIP1.Location = new System.Drawing.Point(121, 50);
this.textIP1.Name = "textIP1";
this.textIP1.Size = new System.Drawing.Size(152, 26);
this.textIP1.TabIndex = 71;
//
// label6
//
this.label6.AutoSize = true;
this.label6.Font = new System.Drawing.Font("宋体", 12F);
this.label6.Location = new System.Drawing.Point(21, 146);
this.label6.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.label6.Name = "label6";
this.label6.Size = new System.Drawing.Size(56, 16);
this.label6.TabIndex = 70;
this.label6.Text = "状态:";
//
// label8
//
this.label8.AutoSize = true;
this.label8.Location = new System.Drawing.Point(21, 56);
this.label8.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.label8.Name = "label8";
this.label8.Size = new System.Drawing.Size(64, 16);
this.label8.TabIndex = 65;
this.label8.Text = "IP地址:";
//
// label9
//
this.label9.AutoSize = true;
this.label9.Location = new System.Drawing.Point(21, 98);
this.label9.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.label9.Name = "label9";
this.label9.Size = new System.Drawing.Size(64, 16);
this.label9.TabIndex = 66;
this.label9.Text = "端口号:";
//
// CH1NetworkComm
//
this.CH1NetworkComm.AutoSize = true;
this.CH1NetworkComm.Font = new System.Drawing.Font("宋体", 12F);
this.CH1NetworkComm.Location = new System.Drawing.Point(118, 146);
this.CH1NetworkComm.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.CH1NetworkComm.Name = "CH1NetworkComm";
this.CH1NetworkComm.Size = new System.Drawing.Size(56, 16);
this.CH1NetworkComm.TabIndex = 69;
this.CH1NetworkComm.Text = "label6";
//
// buttonConnect1
//
this.buttonConnect1.Location = new System.Drawing.Point(24, 199);
this.buttonConnect1.Margin = new System.Windows.Forms.Padding(4);
this.buttonConnect1.Name = "buttonConnect1";
this.buttonConnect1.Size = new System.Drawing.Size(125, 45);
this.buttonConnect1.TabIndex = 62;
this.buttonConnect1.TabStop = false;
this.buttonConnect1.Text = "连接";
this.buttonConnect1.UseVisualStyleBackColor = true;
this.buttonConnect1.Click += new System.EventHandler(this.buttonConnect1_Click);
//
// buttonDisconnect1
//
this.buttonDisconnect1.Location = new System.Drawing.Point(157, 199);
this.buttonDisconnect1.Margin = new System.Windows.Forms.Padding(4);
this.buttonDisconnect1.Name = "buttonDisconnect1";
this.buttonDisconnect1.Size = new System.Drawing.Size(125, 45);
this.buttonDisconnect1.TabIndex = 63;
this.buttonDisconnect1.Text = "断开连接";
this.buttonDisconnect1.UseVisualStyleBackColor = true;
this.buttonDisconnect1.Click += new System.EventHandler(this.buttonDisconnect1_Click);
//
// uiGroupNetwork2
//
this.uiGroupNetwork2.Controls.Add(this.textPort2);
this.uiGroupNetwork2.Controls.Add(this.textIP2);
this.uiGroupNetwork2.Controls.Add(this.label12);
this.uiGroupNetwork2.Controls.Add(this.label13);
this.uiGroupNetwork2.Controls.Add(this.label14);
this.uiGroupNetwork2.Controls.Add(this.CH2NetworkComm);
this.uiGroupNetwork2.Controls.Add(this.buttonConnect2);
this.uiGroupNetwork2.Controls.Add(this.buttonDisconnect2);
this.uiGroupNetwork2.FillColor = System.Drawing.Color.Transparent;
this.uiGroupNetwork2.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.uiGroupNetwork2.Location = new System.Drawing.Point(418, 438);
this.uiGroupNetwork2.Margin = new System.Windows.Forms.Padding(5, 7, 5, 7);
this.uiGroupNetwork2.MinimumSize = new System.Drawing.Size(1, 1);
this.uiGroupNetwork2.Name = "uiGroupNetwork2";
this.uiGroupNetwork2.Padding = new System.Windows.Forms.Padding(0, 43, 0, 0);
this.uiGroupNetwork2.Size = new System.Drawing.Size(320, 274);
this.uiGroupNetwork2.Style = Sunny.UI.UIStyle.Custom;
this.uiGroupNetwork2.TabIndex = 79;
this.uiGroupNetwork2.Text = "条码枪1网络设置";
this.uiGroupNetwork2.TextAlignment = System.Drawing.ContentAlignment.MiddleCenter;
this.uiGroupNetwork2.Visible = false;
//
// textPort2
//
this.textPort2.Location = new System.Drawing.Point(121, 92);
this.textPort2.Name = "textPort2";
this.textPort2.Size = new System.Drawing.Size(152, 26);
this.textPort2.TabIndex = 72;
//
// textIP2
//
this.textIP2.Location = new System.Drawing.Point(121, 50);
this.textIP2.Name = "textIP2";
this.textIP2.Size = new System.Drawing.Size(152, 26);
this.textIP2.TabIndex = 71;
//
// label12
//
this.label12.AutoSize = true;
this.label12.Font = new System.Drawing.Font("宋体", 12F);
this.label12.Location = new System.Drawing.Point(21, 146);
this.label12.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.label12.Name = "label12";
this.label12.Size = new System.Drawing.Size(56, 16);
this.label12.TabIndex = 70;
this.label12.Text = "状态:";
//
// label13
//
this.label13.AutoSize = true;
this.label13.Location = new System.Drawing.Point(21, 56);
this.label13.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.label13.Name = "label13";
this.label13.Size = new System.Drawing.Size(64, 16);
this.label13.TabIndex = 65;
this.label13.Text = "IP地址:";
//
// label14
//
this.label14.AutoSize = true;
this.label14.Location = new System.Drawing.Point(21, 98);
this.label14.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.label14.Name = "label14";
this.label14.Size = new System.Drawing.Size(64, 16);
this.label14.TabIndex = 66;
this.label14.Text = "端口号:";
//
// CH2NetworkComm
//
this.CH2NetworkComm.AutoSize = true;
this.CH2NetworkComm.Font = new System.Drawing.Font("宋体", 12F);
this.CH2NetworkComm.Location = new System.Drawing.Point(118, 146);
this.CH2NetworkComm.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.CH2NetworkComm.Name = "CH2NetworkComm";
this.CH2NetworkComm.Size = new System.Drawing.Size(56, 16);
this.CH2NetworkComm.TabIndex = 69;
this.CH2NetworkComm.Text = "label6";
//
// buttonConnect2
//
this.buttonConnect2.Location = new System.Drawing.Point(24, 199);
this.buttonConnect2.Margin = new System.Windows.Forms.Padding(4);
this.buttonConnect2.Name = "buttonConnect2";
this.buttonConnect2.Size = new System.Drawing.Size(125, 45);
this.buttonConnect2.TabIndex = 62;
this.buttonConnect2.TabStop = false;
this.buttonConnect2.Text = "连接";
this.buttonConnect2.UseVisualStyleBackColor = true;
this.buttonConnect2.Click += new System.EventHandler(this.buttonConnect2_Click);
//
// buttonDisconnect2
//
this.buttonDisconnect2.Location = new System.Drawing.Point(157, 199);
this.buttonDisconnect2.Margin = new System.Windows.Forms.Padding(4);
this.buttonDisconnect2.Name = "buttonDisconnect2";
this.buttonDisconnect2.Size = new System.Drawing.Size(125, 45);
this.buttonDisconnect2.TabIndex = 63;
this.buttonDisconnect2.Text = "断开连接";
this.buttonDisconnect2.UseVisualStyleBackColor = true;
this.buttonDisconnect2.Click += new System.EventHandler(this.buttonDisconnect2_Click);
//
// ConfigScanner
//
this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 16F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.BackColor = System.Drawing.Color.LightBlue;
this.ClientSize = new System.Drawing.Size(770, 583);
this.Controls.Add(this.uiGroupNetwork2);
this.Controls.Add(this.uiGroupNetwork1);
this.Controls.Add(this.cmbScanType);
this.Controls.Add(this.label5);
this.Controls.Add(this.cmbScanNum);
this.Controls.Add(this.label4);
this.Controls.Add(this.uiGroupCom2);
this.Controls.Add(this.uiGroupCom1);
this.Controls.Add(this.CH1CodeRefresh);
this.Font = new System.Drawing.Font("宋体", 12F);
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.Margin = new System.Windows.Forms.Padding(4);
this.Name = "ConfigScanner";
this.Text = "扫码枪设置";
this.Load += new System.EventHandler(this.Form_Load);
this.uiGroupCom2.ResumeLayout(false);
this.uiGroupCom2.PerformLayout();
this.uiGroupCom1.ResumeLayout(false);
this.uiGroupCom1.PerformLayout();
this.uiGroupNetwork1.ResumeLayout(false);
this.uiGroupNetwork1.PerformLayout();
this.uiGroupNetwork2.ResumeLayout(false);
this.uiGroupNetwork2.PerformLayout();
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.Timer ReadStatus;
private Sunny.UI.UIGroupBox uiGroupCom2;
private System.Windows.Forms.Label label1;
public System.Windows.Forms.ComboBox CH2CodePort;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.Label label3;
private System.Windows.Forms.ComboBox CH2CodeBaud;
public System.Windows.Forms.Label CH2CodeIsComm;
private System.Windows.Forms.Button CH2CodeCon;
private System.Windows.Forms.Button CH2CodeBreak;
private Sunny.UI.UIGroupBox uiGroupCom1;
private System.Windows.Forms.Label label7;
public System.Windows.Forms.ComboBox CH1CodePort;
private System.Windows.Forms.Label label11;
private System.Windows.Forms.Label label15;
private System.Windows.Forms.ComboBox CH1CodeBaud;
public System.Windows.Forms.Label CH1CodeIsComm;
private System.Windows.Forms.Button CH1CodeCon;
private System.Windows.Forms.Button CH1CodeBreak;
private System.Windows.Forms.Button CH1CodeRefresh;
private System.Windows.Forms.Label label4;
public System.Windows.Forms.ComboBox cmbScanNum;
private System.Windows.Forms.Label label5;
private System.Windows.Forms.ComboBox cmbScanType;
private Sunny.UI.UIGroupBox uiGroupNetwork1;
private System.Windows.Forms.TextBox textPort1;
private System.Windows.Forms.TextBox textIP1;
private System.Windows.Forms.Label label6;
private System.Windows.Forms.Label label8;
private System.Windows.Forms.Label label9;
public System.Windows.Forms.Label CH1NetworkComm;
private System.Windows.Forms.Button buttonConnect1;
private System.Windows.Forms.Button buttonDisconnect1;
private Sunny.UI.UIGroupBox uiGroupNetwork2;
private System.Windows.Forms.TextBox textPort2;
private System.Windows.Forms.TextBox textIP2;
private System.Windows.Forms.Label label12;
private System.Windows.Forms.Label label13;
private System.Windows.Forms.Label label14;
public System.Windows.Forms.Label CH2NetworkComm;
private System.Windows.Forms.Button buttonConnect2;
private System.Windows.Forms.Button buttonDisconnect2;
}
}

508
SLZ_4/ConfigScanner.resx Normal file
View File

@@ -0,0 +1,508 @@
<?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>
<metadata name="ReadStatus.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<metadata name="$this.TrayHeight" type="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>25</value>
</metadata>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
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
rkJggg==
</value>
</data>
</root>

183
SLZ_4/ConfigStorage.Designer.cs generated Normal file
View File

@@ -0,0 +1,183 @@

namespace SLZ_4
{
partial class ConfigStorage
{
/// <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()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ConfigStorage));
this.label1 = new System.Windows.Forms.Label();
this.checkTxt = new System.Windows.Forms.CheckBox();
this.checkCSV = new System.Windows.Forms.CheckBox();
this.checkSQL = new System.Windows.Forms.CheckBox();
this.checkExcel = new System.Windows.Forms.CheckBox();
this.buttonSetSQL = new System.Windows.Forms.Button();
this.textPath = new Sunny.UI.UITextBox();
this.buttonSet = new Sunny.UI.UIButton();
this.buttonPath = new Sunny.UI.UIButton();
this.SuspendLayout();
//
// label1
//
this.label1.AutoSize = true;
this.label1.Location = new System.Drawing.Point(25, 45);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(42, 14);
this.label1.TabIndex = 0;
this.label1.Text = "路径:";
//
// checkTxt
//
this.checkTxt.AutoSize = true;
this.checkTxt.Location = new System.Drawing.Point(235, 101);
this.checkTxt.Name = "checkTxt";
this.checkTxt.Size = new System.Drawing.Size(89, 18);
this.checkTxt.TabIndex = 3;
this.checkTxt.Text = "导出到TXT";
this.checkTxt.UseVisualStyleBackColor = true;
//
// checkCSV
//
this.checkCSV.AutoSize = true;
this.checkCSV.Location = new System.Drawing.Point(235, 148);
this.checkCSV.Name = "checkCSV";
this.checkCSV.Size = new System.Drawing.Size(89, 18);
this.checkCSV.TabIndex = 4;
this.checkCSV.Text = "导出到CSV";
this.checkCSV.UseVisualStyleBackColor = true;
//
// checkSQL
//
this.checkSQL.AutoSize = true;
this.checkSQL.Location = new System.Drawing.Point(12, 206);
this.checkSQL.Name = "checkSQL";
this.checkSQL.Size = new System.Drawing.Size(131, 18);
this.checkSQL.TabIndex = 5;
this.checkSQL.Text = "导出到SQLServer";
this.checkSQL.UseVisualStyleBackColor = true;
this.checkSQL.Visible = false;
this.checkSQL.CheckedChanged += new System.EventHandler(this.checkSQL_CheckedChanged);
//
// checkExcel
//
this.checkExcel.AutoSize = true;
this.checkExcel.Location = new System.Drawing.Point(235, 206);
this.checkExcel.Name = "checkExcel";
this.checkExcel.Size = new System.Drawing.Size(103, 18);
this.checkExcel.TabIndex = 6;
this.checkExcel.Text = "导出到Excel";
this.checkExcel.UseVisualStyleBackColor = true;
//
// buttonSetSQL
//
this.buttonSetSQL.Location = new System.Drawing.Point(12, 263);
this.buttonSetSQL.Name = "buttonSetSQL";
this.buttonSetSQL.Size = new System.Drawing.Size(89, 32);
this.buttonSetSQL.TabIndex = 7;
this.buttonSetSQL.Text = "SQL设置";
this.buttonSetSQL.UseVisualStyleBackColor = true;
this.buttonSetSQL.Visible = false;
this.buttonSetSQL.Click += new System.EventHandler(this.buttonSetSQL_Click);
//
// textPath
//
this.textPath.Cursor = System.Windows.Forms.Cursors.IBeam;
this.textPath.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.textPath.Location = new System.Drawing.Point(88, 38);
this.textPath.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.textPath.MinimumSize = new System.Drawing.Size(1, 16);
this.textPath.Name = "textPath";
this.textPath.Padding = new System.Windows.Forms.Padding(5);
this.textPath.ShowText = false;
this.textPath.Size = new System.Drawing.Size(418, 29);
this.textPath.TabIndex = 9;
this.textPath.TextAlignment = System.Drawing.ContentAlignment.MiddleLeft;
this.textPath.Watermark = "";
//
// buttonSet
//
this.buttonSet.Cursor = System.Windows.Forms.Cursors.Hand;
this.buttonSet.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.buttonSet.Location = new System.Drawing.Point(235, 260);
this.buttonSet.MinimumSize = new System.Drawing.Size(1, 1);
this.buttonSet.Name = "buttonSet";
this.buttonSet.Size = new System.Drawing.Size(100, 35);
this.buttonSet.TabIndex = 10;
this.buttonSet.Text = "应用设置";
this.buttonSet.TipsFont = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.buttonSet.Click += new System.EventHandler(this.buttonSet_Click);
//
// buttonPath
//
this.buttonPath.Cursor = System.Windows.Forms.Cursors.Hand;
this.buttonPath.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.buttonPath.Location = new System.Drawing.Point(518, 34);
this.buttonPath.MinimumSize = new System.Drawing.Size(1, 1);
this.buttonPath.Name = "buttonPath";
this.buttonPath.Size = new System.Drawing.Size(100, 35);
this.buttonPath.TabIndex = 11;
this.buttonPath.Text = "选择路径";
this.buttonPath.TipsFont = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.buttonPath.Click += new System.EventHandler(this.buttonPath_Click);
//
// ConfigStorage
//
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 14F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.BackColor = System.Drawing.Color.LightBlue;
this.ClientSize = new System.Drawing.Size(630, 317);
this.Controls.Add(this.buttonPath);
this.Controls.Add(this.buttonSet);
this.Controls.Add(this.textPath);
this.Controls.Add(this.buttonSetSQL);
this.Controls.Add(this.checkExcel);
this.Controls.Add(this.checkSQL);
this.Controls.Add(this.checkCSV);
this.Controls.Add(this.checkTxt);
this.Controls.Add(this.label1);
this.Font = new System.Drawing.Font("宋体", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.Name = "ConfigStorage";
this.Text = "ConfigStorage";
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.Label label1;
private System.Windows.Forms.CheckBox checkTxt;
private System.Windows.Forms.CheckBox checkCSV;
private System.Windows.Forms.CheckBox checkSQL;
private System.Windows.Forms.CheckBox checkExcel;
private System.Windows.Forms.Button buttonSetSQL;
private Sunny.UI.UITextBox textPath;
private Sunny.UI.UIButton buttonSet;
private Sunny.UI.UIButton buttonPath;
}
}

80
SLZ_4/ConfigStorage.cs Normal file
View File

@@ -0,0 +1,80 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace SLZ_4
{
public partial class ConfigStorage : Form
{
STORAGE_PARAM storageParam;
public ConfigStorage()
{
InitializeComponent();
}
public void SetConfig(ref STORAGE_PARAM pStorage)
{
storageParam = pStorage;
textPath.Text = pStorage.sPath;
checkTxt.Checked = pStorage.bTxt;
checkCSV.Checked = pStorage.bCSV;
checkSQL.Checked = pStorage.bSQL;
checkExcel.Checked = pStorage.bExcel;
}
private void buttonPath_Click(object sender, EventArgs e)
{
FolderBrowserDialog folder = new FolderBrowserDialog();
folder.ShowDialog();
textPath.Text = folder.SelectedPath;
}
private void buttonSetSQL_Click(object sender, EventArgs e)
{
//ConfigSQL configSql = new ConfigSQL();
//configSql.SetConfig(ref FormMain.formMain.configParam.databaseParam);
//configSql.ShowDialog();
}
private void buttonSet_Click(object sender, EventArgs e)
{
storageParam.bTxt = checkTxt.Checked;
storageParam.bCSV = checkCSV.Checked;
storageParam.bSQL = checkSQL.Checked;
storageParam.bExcel = checkExcel.Checked;
storageParam.sPath = textPath.Text;
if (textPath.Text.Length <= 0 && (checkTxt.Checked || checkCSV.Checked || checkExcel.Checked))
{
MessageBox.Show("请选择存储路径!");
return;
}
FormMain.form.updateStorage(storageParam);
Config.saveStorage(storageParam);
MessageBox.Show("保存成功!");
}
private void checkSQL_CheckedChanged(object sender, EventArgs e)
{
//检查是否已经配置了数据库信息
//if (checkSQL.Checked)
//{
// if (FormMain.formMain.configParam.databaseParam.sServer.Length <= 0
// || FormMain.formMain.configParam.databaseParam.sDBName.Length <= 0
// || FormMain.formMain.configParam.databaseParam.sDBUser.Length <= 0
// || FormMain.formMain.configParam.databaseParam.sDBPassword.Length <= 0)
// {
// MessageBox.Show("请先配置数据库信息!");
// checkSQL.Checked = false;
// }
//}
}
}
}

502
SLZ_4/ConfigStorage.resx Normal file
View File

@@ -0,0 +1,502 @@
<?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>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
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
rkJggg==
</value>
</data>
</root>

223
SLZ_4/DeviceObject.cs Normal file
View File

@@ -0,0 +1,223 @@
using System.Threading;
using System.Threading.Tasks;
using LLAirtightApi;
namespace SLZ_4
{
public class DeviceObject
{
public Airtight airtightObj;
public bool bExit;
public bool bStatus;
public TEST_PARAM testInfo;
public DEVICE_PARAM pDeviceInfo;
public int groupId = -1; //测试组号
public CONFIG_PARAM configParam; //设备测试参数
public VERSION_PARAM versionInfo; //版本信息
/// <summary>
/// 创建设备对象
/// </summary>
/// <param name="type">仪器类型</param>
/// <param name="protocol">协议类型</param>
public DeviceObject(ref DEVICE_PARAM pDev)
{
pDeviceInfo = pDev;
bExit = false;
airtightObj = new Airtight(pDev.iDevType, pDev.iProtocol);
testInfo = new TEST_PARAM();
testInfo.chTest = new TEST_CHANNEL[4];
configParam = new CONFIG_PARAM();
Task.Run(() =>
{
while (!bExit)
{
if (!bStatus)
{
airtightObj.AirtightInit(pDeviceInfo.sDevAddr, pDeviceInfo.iPort, pDeviceInfo.iSlaveId);
if (airtightObj.Open())
{
Thread.Sleep(100);
//获取测试参数
if (airtightObj.GetConfig(ref configParam) > 0)
{
bStatus = true;
//airtightObj.GetVersion(ref versionInfo);
}
else
{
airtightObj.Close();
bStatus = false;
}
}
}
else
{
//if (groupId == -1)
//{
// groupId = airtightObj.GetGroupId();
//}
if (airtightObj.GetTestInfo(ref testInfo) > 0)
{
bStatus = true;
}
else
{
airtightObj.Close();
bStatus = false;
}
}
Thread.Sleep(100);
}
airtightObj.Close();
airtightObj = null;
});
}
public bool Start(bool bStart)
{
if (bStatus)
{
return airtightObj.Start(bStart);
}
return false;
}
public int GetGroupId()
{
if (bStatus)
{
return airtightObj.GetGroupId();
}
return -1;
}
public bool SetGroupId(int iId)
{
if (bStatus)
{
return airtightObj.SetGroupId(iId);
}
return false;
}
public int GetConfig(ref CONFIG_PARAM pInfo)
{
if (bStatus)
{
int nRet = airtightObj.GetConfig(ref pInfo);
if (nRet > 0)
{
configParam = pInfo;
return nRet;
}
}
return 0;
}
public bool SetConfig(ref CONFIG_PARAM configInfo)
{
if (bStatus)
{
return airtightObj.SetConfig(ref configInfo);
}
return false;
}
public int GetConfig(ref CONFIG_PARAM_LL30 configInfo)
{
if (bStatus)
{
return airtightObj.GetConfig(ref configInfo);
}
return 0;
}
public bool SetConfig(ref CONFIG_PARAM_LL30 configInfo)
{
if (bStatus)
{
return airtightObj.SetConfig(ref configInfo);
}
return false;
}
public int GetFunction(ref FUNCTION_PARAM functionInfo)
{
if (bStatus)
{
return airtightObj.GetFunction(ref functionInfo);
}
return 0;
}
public bool SetFunction(ref FUNCTION_PARAM functionInfo)
{
if (bStatus)
{
return airtightObj.SetFunction(ref functionInfo);
}
return false;
}
public int GetVersion(ref VERSION_PARAM version)
{
if (bStatus)
{
return airtightObj.GetVersion(ref version);
}
return 0;
}
public int GetLanguage()
{
if (bStatus)
{
return airtightObj.GetLanguage();
}
return 0;
}
public bool SetLanguage(int iLanguage)
{
if (bStatus)
{
return airtightObj.SetLanguage(iLanguage);
}
return false;
}
public int GetPassword(ref PASSWORD_PARAM password)
{
if (bStatus)
{
return airtightObj.GetPassword(ref password);
}
return 0;
}
public bool SetPassword(ref PASSWORD_PARAM password)
{
if (bStatus)
{
return airtightObj.SetPassword(ref password);
}
return false;
}
public int GetGroup(ref GROUP_PARAM group)
{
if (bStatus)
{
return airtightObj.GetGroup(ref group);
}
return 0;
}
public bool SetGroup(ref GROUP_PARAM group)
{
if (bStatus)
{
return airtightObj.SetGroup(ref group);
}
return false;
}
}
}

1269
SLZ_4/Electricity.Designer.cs generated Normal file

File diff suppressed because it is too large Load Diff

246
SLZ_4/Electricity.cs Normal file
View File

@@ -0,0 +1,246 @@
using LLAirtightApi;
using Sunny.UI;
using System;
using System.Linq;
using System.Windows.Forms;
namespace SLZ_4
{
public partial class Electricity : Form
{
public CONFIG_PARAM configParam;
public Electricity()
{
InitializeComponent();
configParam = new CONFIG_PARAM();
cb_MachineNum.SelectedIndex = 0;
cb_ParaNum.SelectedIndex = 0;
}
public void SetConfig()
{
checkCode1.Checked = FormMain.form.arrScanParam[0].bCheckLen;
uiTextCH1Length.Text = FormMain.form.arrScanParam[0].iCodeLength.ToString();
checkStart1.Checked = FormMain.form.arrScanParam[0].bStart;
checkCode2.Checked = FormMain.form.arrScanParam[1].bCheckLen;
uiTextCH2Length.Text = FormMain.form.arrScanParam[1].iCodeLength.ToString();
checkStart2.Checked = FormMain.form.arrScanParam[1].bStart;
//if (FormMain.form.arrDevObj[cb_MachineNum.SelectedIndex].groupId >= 0
// && FormMain.form.arrDevObj[cb_MachineNum.SelectedIndex].groupId < 10)
//{
// cb_ParaNum.SelectedIndex = FormMain.form.arrDevObj[cb_MachineNum.SelectedIndex].groupId;
//}
//else
//{
// readConfig();
//}
readConfig();
}
public void readConfig()
{
try
{
if (FormMain.form.arrDevObj[cb_MachineNum.SelectedIndex] != null
&& FormMain.form.arrDevObj[cb_MachineNum.SelectedIndex].bStatus)
{
if (FormMain.form.arrDevObj[cb_MachineNum.SelectedIndex].GetConfig(ref configParam) > 0)
{
showConfig(ref configParam);
}
else
{
MessageBox.Show("读取参数失败!");
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
BtnRead.Enabled = true;
}
}
// 读取参数 按钮
private void BtnRead_Click(object sender, EventArgs e)
{
readConfig();
}
private void showConfig(ref CONFIG_PARAM pParam)
{
tb_FullTime.Text = pParam.inflationTime.ToString();
tb_BalanTime.Text = pParam.balanceTime.ToString();
tb_TestTime1.Text = pParam.testTime1.ToString();
tb_ExhaustTime.Text = pParam.exhaustTime.ToString();
tb_Evolume.Text = pParam.fEquivalentVolume.ToString();
tb_DelayTime1.Text = pParam.delayTime1.ToString();
tb_DelayTime2.Text = pParam.delayTime2.ToString();
tb_RelieveDelay.Text = pParam.testTime2.ToString();
tb_FPtoplimit.Text = pParam.pressureUpperLimit.ToString();
tb_FPlowlimit.Text = pParam.pressureLowerLimit.ToString();
tb_BalanPreMax.Text = pParam.balanceUpperLimit.ToString();
tb_BalanPreMin.Text = pParam.balanceLowerLimit.ToString();
tb_Leaktoplimit.Text = pParam.leakageUpperLimit.ToString();
tb_Leaklowlimit.Text = pParam.leakageLowerLimit.ToString();
cb_PUnit.SelectedIndex = pParam.pressureUnit;
cb_LUnit.SelectedIndex = pParam.leakageUnit;
chk_ChkBee.Checked = pParam.bee;
BtnRead.Enabled = true;
}
// 保存参数 按钮
private void BtnSave_Click(object sender, EventArgs e)
{
configParam.inflationTime = float.Parse(tb_FullTime.Text);
configParam.balanceTime = float.Parse(tb_BalanTime.Text);
configParam.testTime1 = float.Parse(tb_TestTime1.Text);
configParam.exhaustTime = float.Parse(tb_ExhaustTime.Text);
configParam.fEquivalentVolume = float.Parse(tb_Evolume.Text);
configParam.delayTime1 = float.Parse(tb_DelayTime1.Text);
configParam.delayTime2 = float.Parse(tb_DelayTime2.Text);
configParam.testTime2 = float.Parse(tb_RelieveDelay.Text);
configParam.pressureUpperLimit = float.Parse(tb_FPtoplimit.Text);
configParam.pressureLowerLimit = float.Parse(tb_FPlowlimit.Text);
configParam.balanceUpperLimit = float.Parse(tb_BalanPreMax.Text);
configParam.balanceLowerLimit = float.Parse(tb_BalanPreMin.Text);
configParam.leakageUpperLimit = float.Parse(tb_Leaktoplimit.Text);
configParam.leakageLowerLimit = float.Parse(tb_Leaklowlimit.Text);
configParam.pressureUnit = cb_PUnit.SelectedIndex;
configParam.leakageUnit = cb_LUnit.SelectedIndex;
configParam.bee = chk_ChkBee.Checked;
if (FormMain.form.arrDevObj[cb_MachineNum.SelectedIndex] != null
&& FormMain.form.arrDevObj[cb_MachineNum.SelectedIndex].bStatus)
{
if (FormMain.form.arrDevObj[cb_MachineNum.SelectedIndex].SetConfig(ref configParam))
{
MessageBox.Show("配置成功");
}
else
{
MessageBox.Show("配置失败");
}
}
else
{
MessageBox.Show("通道" + cb_MachineNum.SelectedIndex + "未连接");
}
}
private void ParaNum_SelectedIndexChanged(object sender, EventArgs e)
{
//切换分组
if (FormMain.form.arrDevObj[cb_MachineNum.SelectedIndex] != null
&& FormMain.form.arrDevObj[cb_MachineNum.SelectedIndex].bStatus)
{
FormMain.form.arrDevObj[cb_MachineNum.SelectedIndex].SetGroupId(cb_ParaNum.SelectedIndex);
readConfig();
}
}
private void MachineNum_KeyPress(object sender, KeyPressEventArgs e)
{
e.Handled = true;
}
private void MachineNum_SelectedIndexChanged(object sender, EventArgs e)
{
}
private void CH1CHKVacuum_Click(object sender, EventArgs e)
{
}
private void CH2CHKVacuum_Click(object sender, EventArgs e)
{
}
private void radioButton1_CheckedChanged(object sender, EventArgs e)
{
if (radioButton1.Checked)
{
// Form1.f1.plc.w正压模式();
}
}
private void radioButton2_CheckedChanged(object sender, EventArgs e)
{
if (radioButton2.Checked)
{
// Form1.f1.plc.w负压模式();
}
}
// 通道1扫码
private void checkCode1_CheckedChanged(object sender, EventArgs e)
{
FormMain.form.arrScanParam[0].bCheckLen = checkCode1.Checked;
Config.saveScanParam(0);
}
// 通道2扫码
private void checkCode2_CheckedChanged(object sender, EventArgs e)
{
FormMain.form.arrScanParam[1].bCheckLen = checkCode2.Checked;
Config.saveScanParam(1);
}
private void PUnit_TextChanged(object sender, EventArgs e)
{
lb_PUnit1.Text = cb_PUnit.Text;
lb_PUnit2.Text = cb_PUnit.Text;
}
private void LUnit_TextChanged(object sender, EventArgs e)
{
lb_LUnit1.Text = cb_LUnit.Text;
lb_LUnit2.Text = cb_LUnit.Text;
}
private void checkStart1_CheckedChanged(object sender, EventArgs e)
{
FormMain.form.arrScanParam[0].bStart = checkStart1.Checked;
Config.saveScanParam(0);
FormMain.form.updataScanStart(0, checkStart1.Checked);
}
private void checkStart2_CheckedChanged(object sender, EventArgs e)
{
FormMain.form.arrScanParam[1].bStart = checkStart2.Checked;
Config.saveScanParam(1);
FormMain.form.updataScanStart(1, checkStart2.Checked);
}
private void uiButtonSaveCode_Click(object sender, EventArgs e)
{
FormMain.form.arrScanParam[0].bCheckLen = checkCode1.Checked;
FormMain.form.arrScanParam[0].iCodeLength = int.Parse(uiTextCH1Length.Text);
FormMain.form.arrScanParam[0].bStart = checkStart1.Checked;
FormMain.form.arrScanParam[1].bCheckLen = checkCode2.Checked;
FormMain.form.arrScanParam[1].iCodeLength = int.Parse(uiTextCH2Length.Text);
FormMain.form.arrScanParam[1].bStart = checkStart2.Checked;
for (int i = 0; i < 2; i++)
{
Config.saveScanParam(i);
}
MessageBox.Show("设置成功");
}
private void cb_MachineNum_SelectedIndexChanged(object sender, EventArgs e)
{
readConfig();
}
}
}

505
SLZ_4/Electricity.resx Normal file
View File

@@ -0,0 +1,505 @@
<?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>
<metadata name="$this.TrayHeight" type="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>25</value>
</metadata>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
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
rkJggg==
</value>
</data>
</root>

31
SLZ_4/FileLogger.cs Normal file
View File

@@ -0,0 +1,31 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace SLZ_4
{
public enum LogLevel
{
DEBUG,
INFO,
WARNING,
ERROR
}
class FileLogger
{
private static readonly string LogPath = Path.Combine(
AppDomain.CurrentDomain.BaseDirectory,
"logs",
$"{DateTime.Now:yyyyMMdd}.log");
public static void Log(string message, LogLevel level = LogLevel.INFO)
{
Directory.CreateDirectory(Path.GetDirectoryName(LogPath));
File.AppendAllText(LogPath,
$"[{DateTime.Now:yyyy-MM-dd HH:mm:ss}] [{level}] {message}{Environment.NewLine}");
}
}
}

1694
SLZ_4/FormMain.Designer.cs generated Normal file

File diff suppressed because it is too large Load Diff

1306
SLZ_4/FormMain.cs Normal file

File diff suppressed because it is too large Load Diff

559
SLZ_4/FormMain.resx Normal file
View File

@@ -0,0 +1,559 @@
<?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>
<metadata name="Column6.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="Column8.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="Column1.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="Column2.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="Column3.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="Column4.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="Column5.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="Column7.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="Column9.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="dataGridViewTextBoxColumn1.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="dataGridViewTextBoxColumn2.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="dataGridViewTextBoxColumn3.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="dataGridViewTextBoxColumn4.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="dataGridViewTextBoxColumn5.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="serialPortCode1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<metadata name="serialPortCode2.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>162, 17</value>
</metadata>
<metadata name="timerUser.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>307, 17</value>
</metadata>
<metadata name="timerUpdate.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>416, 17</value>
</metadata>
<metadata name="$this.TrayHeight" type="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>77</value>
</metadata>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
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
rkJggg==
</value>
</data>
</root>

168
SLZ_4/HTTPCom.cs Normal file
View File

@@ -0,0 +1,168 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;
namespace SLZ_4
{
class HTTPCom
{
private static string BaseUri;
private static string url;
public delegate bool CallbackGet(HttpWebResponse response, int nType, long nLen);
public delegate bool CallbackPost(StreamReader reader, long nLen);
public delegate bool CallbackPut(StreamReader reader, int nType, long nLen);
public void RestClient(string baseUri)
{
BaseUri = baseUri;
string[] strArray = baseUri.Split(':');
url = string.Format("{0}:{1}", strArray[0], strArray[1]);
}
#region Get请求
public static bool Get(string uri, int nType, string strToken, CallbackGet callbackGet)
{
//先根据用户请求的uri构造请求地址
// string serviceUrl = string.Format("{0}/{1}", BaseUri, uri);
// if (nType == (int)DataStruct.HTTPTYPE.GETPIC)
//{
// serviceUrl = string.Format("{0}/{1}", url, uri);
//}
//创建Web访问对 象
HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(uri);
myRequest.Headers.Add("Authorization", strToken);
myRequest.KeepAlive = false;
//通过Web访问对象获取响应内容
HttpWebResponse myResponse;
try
{
myResponse = (HttpWebResponse)myRequest.GetResponse();
}
catch (Exception)
{
return false;
throw;
}
//通过响应内容流创建StreamReader对象因为StreamReader更高级更快
bool bRet = callbackGet(myResponse, nType, myResponse.ContentLength);
//string returnXml = HttpUtility.UrlDecode(reader.ReadToEnd());//如果有编码问题就用这个方法
//bool bRet = DisplayGet(reader, nType);
myResponse.Close();
return bRet;
}
#endregion
#region Post请求
public static string Post(string data, string uri, CallbackPost callbackPost)
{
string serviceUrl = uri;
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
//创建Web访问对象
HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(serviceUrl);
myRequest.Method = "POST";
//myRequest.ContentType = "text/plain";
myRequest.ContentType = "application/json";
myRequest.MaximumAutomaticRedirections = 1;
myRequest.AllowAutoRedirect = true;
myRequest.KeepAlive = false;
myRequest.Timeout = 5000; //超时时间1S
//发送请求
if (data.Length > 0)
{
//把用户传过来的数据转成“UTF-8”的字节流
byte[] buf = System.Text.Encoding.GetEncoding("UTF-8").GetBytes(data);
myRequest.ContentLength = buf.Length;
//发送请求
try
{
Stream stream = myRequest.GetRequestStream();
stream.Write(buf, 0, buf.Length);
stream.Close();
}
catch (Exception ex)
{
FileLogger.Log("发送失败:" + ex.Message, LogLevel.ERROR);
return ex.Message;
}
}
//获取接口返回值
//通过Web访问对象获取响应内容
HttpWebResponse myResponse;
try
{
myResponse = (HttpWebResponse)myRequest.GetResponse();
}
catch (Exception ex)
{
if (ex != null)
{
FileLogger.Log("接受失败:" + ex.Message, LogLevel.ERROR);
return ex.Message;
}
else
{
return "";
}
}
//通过响应内容流创建StreamReader对象因为StreamReader更高级更快
StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8);
if (callbackPost != null)
{
callbackPost(reader, myResponse.ContentLength);
}
string strRet = reader.ReadToEnd();
reader.Close();
myResponse.Close();
return strRet;
}
#endregion
#region Put请求
public static bool Put(string data, string uri, int nType, string strToken, CallbackPut callbackPut)
{
//先根据用户请求的uri构造请求地址
string serviceUrl = string.Format("{0}/{1}", BaseUri, uri);
//创建Web访问对象
HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(serviceUrl);
//把用户传过来的数据转成“UTF-8”的字节流
byte[] buf = System.Text.Encoding.GetEncoding("UTF-8").GetBytes(data);
myRequest.Method = "PUT";
myRequest.ContentLength = buf.Length;
myRequest.ContentType = "application/json";
myRequest.MaximumAutomaticRedirections = 1;
myRequest.AllowAutoRedirect = true;
myRequest.Headers.Add("Authorization", strToken);
myRequest.KeepAlive = false;
//发送请求
Stream stream = myRequest.GetRequestStream();
stream.Write(buf, 0, buf.Length);
stream.Close();
//获取接口返回值
//通过Web访问对象获取响应内容
HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();
//通过响应内容流创建StreamReader对象因为StreamReader更高级更快
StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8);
//string returnXml = HttpUtility.UrlDecode(reader.ReadToEnd());//如果有编码问题就用这个方法
bool bRet = callbackPut(reader, nType, myResponse.ContentLength);
//string returnXml = reader.ReadToEnd();//利用StreamReader就可以从响应内容从头读到尾
//reader.Close();
myResponse.Close();
return bRet;
}
#endregion
}
}

362
SLZ_4/Log.cs Normal file
View File

@@ -0,0 +1,362 @@
using System;
using System.IO;
namespace SLZ_4
{
class Log
{
/// <summary>
/// log日志txt的
/// </summary>
/// <param name="Log1">内容</param>
/// <param name="name">名字</param>
/// <param name="path">路径</param>
public void MES_Logmsg(string Log1)
{
#region
string Log = "";
string path = System.Environment.CurrentDirectory + "\\MES_Log";
Log += Log1 + "\r\n";
//生成目录
//创建文件夹
if (Directory.Exists(path) == false)//如果不存在就创建file文件夹
{
Directory.CreateDirectory(path);
}
// 判断文件是否存在不存在则创建否则读取值显示到txt文档
if (!System.IO.File.Exists(path + "/" + DateTime.Today.ToString("yyyy-MM-dd") + ".txt"))
{
FileStream fs1 = new FileStream(path + "/" + DateTime.Today.ToString("yyyy-MM-dd") + ".txt", FileMode.Create, FileAccess.Write);//创建写入文件
StreamWriter sw = new StreamWriter(fs1);
sw.WriteLine(Log);//开始写入值
sw.Close();
fs1.Close();
}
else
{
FileStream fs = new FileStream(path + "/" + DateTime.Today.ToString("yyyy-MM-dd") + ".txt" + "", FileMode.Append, FileAccess.Write);
StreamWriter sr = new StreamWriter(fs);
sr.WriteLine(Log);//开始写入值
sr.Close();
fs.Close();
}
#endregion
}
/// <summary>
/// log日志txt的
/// </summary>
/// <param name="Log1">内容</param>
/// <param name="name">名字</param>
/// <param name="path">路径</param>
public void TCP_Logmsg(string Log1)
{
#region
//string Log = "";
string Log = DateTime.Now.ToString("yyyyMMdd HH:mm:ss") + " ";
string path = System.Environment.CurrentDirectory + "\\TCP_Log";
Log += Log1 + "\r\n";
//生成目录
//创建文件夹
if (Directory.Exists(path) == false)//如果不存在就创建file文件夹
{
Directory.CreateDirectory(path);
}
// 判断文件是否存在不存在则创建否则读取值显示到txt文档
if (!System.IO.File.Exists(path + "/" + DateTime.Today.ToString("yyyy-MM-dd") + ".txt"))
{
FileStream fs1 = new FileStream(path + "/" + DateTime.Today.ToString("yyyy-MM-dd") + ".txt", FileMode.Create, FileAccess.Write);//创建写入文件
StreamWriter sw = new StreamWriter(fs1);
sw.WriteLine(Log);//开始写入值
sw.Close();
fs1.Close();
}
else
{
FileStream fs = new FileStream(path + "/" + DateTime.Today.ToString("yyyy-MM-dd") + ".txt" + "", FileMode.Append, FileAccess.Write);
StreamWriter sr = new StreamWriter(fs);
sr.WriteLine(Log);//开始写入值
sr.Close();
fs.Close();
}
#endregion
}
/// <summary>
/// log日志txt的
/// </summary>
/// <param name="Log1">内容</param>
/// <param name="name">名字</param>
/// <param name="path">路径</param>
public void PLC_Logmsg(string Log1)
{
#region
string Log = "";
string path = System.Environment.CurrentDirectory + "\\PLC_Log";
Log += Log1 + "\r\n";
//生成目录
//创建文件夹
if (Directory.Exists(path) == false)//如果不存在就创建file文件夹
{
Directory.CreateDirectory(path);
}
// 判断文件是否存在不存在则创建否则读取值显示到txt文档
if (!System.IO.File.Exists(path + "/" + DateTime.Today.ToString("yyyy-MM-dd") + ".txt"))
{
FileStream fs1 = new FileStream(path + "/" + DateTime.Today.ToString("yyyy-MM-dd") + ".txt", FileMode.Create, FileAccess.Write);//创建写入文件
StreamWriter sw = new StreamWriter(fs1);
sw.WriteLine(Log);//开始写入值
sw.Close();
fs1.Close();
}
else
{
FileStream fs = new FileStream(path + "/" + DateTime.Today.ToString("yyyy-MM-dd") + ".txt" + "", FileMode.Append, FileAccess.Write);
StreamWriter sr = new StreamWriter(fs);
sr.WriteLine(Log);//开始写入值
sr.Close();
fs.Close();
}
#endregion
}
/// <summary>
/// log日志txt的
/// </summary>
/// <param name="Log1">内容</param>
/// <param name="name">名字</param>
/// <param name="path">路径</param>
public void CH1Port_Logmsg(string Log1)
{
#region
//string Log = "";
string Log = System.DateTime.Now.ToString("yyyyMMdd HH:mm:ss ");
string path = System.Environment.CurrentDirectory + "\\CH1Port_Log";
Log += Log1 + "\r\n";
//生成目录
//创建文件夹
if (Directory.Exists(path) == false)//如果不存在就创建file文件夹
{
Directory.CreateDirectory(path);
}
// 判断文件是否存在不存在则创建否则读取值显示到txt文档
if (!System.IO.File.Exists(path + "/" + DateTime.Today.ToString("yyyy-MM-dd") + ".txt"))
{
FileStream fs1 = new FileStream(path + "/" + DateTime.Today.ToString("yyyy-MM-dd") + ".txt", FileMode.Create, FileAccess.Write);//创建写入文件
StreamWriter sw = new StreamWriter(fs1);
sw.WriteLine(Log);//开始写入值
sw.Close();
fs1.Close();
}
else
{
FileStream fs = new FileStream(path + "/" + DateTime.Today.ToString("yyyy-MM-dd") + ".txt" + "", FileMode.Append, FileAccess.Write);
StreamWriter sr = new StreamWriter(fs);
sr.WriteLine(Log);//开始写入值
sr.Close();
fs.Close();
}
#endregion
}
public void CH2Port_Logmsg(string Log1)
{
#region
//string Log = "";
string Log = System.DateTime.Now.ToString("yyyyMMdd HH:mm:ss ");
string path = System.Environment.CurrentDirectory + "\\CH2Port_Log";
Log += Log1 + "\r\n";
//生成目录
//创建文件夹
if (Directory.Exists(path) == false)//如果不存在就创建file文件夹
{
Directory.CreateDirectory(path);
}
// 判断文件是否存在不存在则创建否则读取值显示到txt文档
if (!System.IO.File.Exists(path + "/" + DateTime.Today.ToString("yyyy-MM-dd") + ".txt"))
{
FileStream fs1 = new FileStream(path + "/" + DateTime.Today.ToString("yyyy-MM-dd") + ".txt", FileMode.Create, FileAccess.Write);//创建写入文件
StreamWriter sw = new StreamWriter(fs1);
sw.WriteLine(Log);//开始写入值
sw.Close();
fs1.Close();
}
else
{
FileStream fs = new FileStream(path + "/" + DateTime.Today.ToString("yyyy-MM-dd") + ".txt" + "", FileMode.Append, FileAccess.Write);
StreamWriter sr = new StreamWriter(fs);
sr.WriteLine(Log);//开始写入值
sr.Close();
fs.Close();
}
#endregion
}
public void CH1FlowPort_Logmsg(string Log1)
{
#region
//string Log = "";
string Log = System.DateTime.Now.ToString("yyyyMMdd HH:mm:ss ");
string path = System.Environment.CurrentDirectory + "\\CH1FlowPort_Log";
Log += Log1 + "\r\n";
//生成目录
//创建文件夹
if (Directory.Exists(path) == false)//如果不存在就创建file文件夹
{
Directory.CreateDirectory(path);
}
// 判断文件是否存在不存在则创建否则读取值显示到txt文档
if (!System.IO.File.Exists(path + "/" + DateTime.Today.ToString("yyyy-MM-dd") + ".txt"))
{
FileStream fs1 = new FileStream(path + "/" + DateTime.Today.ToString("yyyy-MM-dd") + ".txt", FileMode.Create, FileAccess.Write);//创建写入文件
StreamWriter sw = new StreamWriter(fs1);
sw.WriteLine(Log);//开始写入值
sw.Close();
fs1.Close();
}
else
{
FileStream fs = new FileStream(path + "/" + DateTime.Today.ToString("yyyy-MM-dd") + ".txt" + "", FileMode.Append, FileAccess.Write);
StreamWriter sr = new StreamWriter(fs);
sr.WriteLine(Log);//开始写入值
sr.Close();
fs.Close();
}
#endregion
}
public void CH2FlowPort_Logmsg(string Log1)
{
#region
//string Log = "";
string Log = System.DateTime.Now.ToString("yyyyMMdd HH:mm:ss ");
string path = System.Environment.CurrentDirectory + "\\CH2FlowPort_Log";
Log += Log1 + "\r\n";
//生成目录
//创建文件夹
if (Directory.Exists(path) == false)//如果不存在就创建file文件夹
{
Directory.CreateDirectory(path);
}
// 判断文件是否存在不存在则创建否则读取值显示到txt文档
if (!System.IO.File.Exists(path + "/" + DateTime.Today.ToString("yyyy-MM-dd") + ".txt"))
{
FileStream fs1 = new FileStream(path + "/" + DateTime.Today.ToString("yyyy-MM-dd") + ".txt", FileMode.Create, FileAccess.Write);//创建写入文件
StreamWriter sw = new StreamWriter(fs1);
sw.WriteLine(Log);//开始写入值
sw.Close();
fs1.Close();
}
else
{
FileStream fs = new FileStream(path + "/" + DateTime.Today.ToString("yyyy-MM-dd") + ".txt" + "", FileMode.Append, FileAccess.Write);
StreamWriter sr = new StreamWriter(fs);
sr.WriteLine(Log);//开始写入值
sr.Close();
fs.Close();
}
#endregion
}
public void CH3FlowPort_Logmsg(string Log1)
{
#region
//string Log = "";
string Log = System.DateTime.Now.ToString("yyyyMMdd HH:mm:ss ");
string path = System.Environment.CurrentDirectory + "\\CH3FlowPort_Log";
Log += Log1 + "\r\n";
//生成目录
//创建文件夹
if (Directory.Exists(path) == false)//如果不存在就创建file文件夹
{
Directory.CreateDirectory(path);
}
// 判断文件是否存在不存在则创建否则读取值显示到txt文档
if (!System.IO.File.Exists(path + "/" + DateTime.Today.ToString("yyyy-MM-dd") + ".txt"))
{
FileStream fs1 = new FileStream(path + "/" + DateTime.Today.ToString("yyyy-MM-dd") + ".txt", FileMode.Create, FileAccess.Write);//创建写入文件
StreamWriter sw = new StreamWriter(fs1);
sw.WriteLine(Log);//开始写入值
sw.Close();
fs1.Close();
}
else
{
FileStream fs = new FileStream(path + "/" + DateTime.Today.ToString("yyyy-MM-dd") + ".txt" + "", FileMode.Append, FileAccess.Write);
StreamWriter sr = new StreamWriter(fs);
sr.WriteLine(Log);//开始写入值
sr.Close();
fs.Close();
}
#endregion
}
public void CH4FlowPort_Logmsg(string Log1)
{
#region
//string Log = "";
string Log = System.DateTime.Now.ToString("yyyyMMdd HH:mm:ss ");
string path = System.Environment.CurrentDirectory + "\\CH4FlowPort_Log";
Log += Log1 + "\r\n";
//生成目录
//创建文件夹
if (Directory.Exists(path) == false)//如果不存在就创建file文件夹
{
Directory.CreateDirectory(path);
}
// 判断文件是否存在不存在则创建否则读取值显示到txt文档
if (!System.IO.File.Exists(path + "/" + DateTime.Today.ToString("yyyy-MM-dd") + ".txt"))
{
FileStream fs1 = new FileStream(path + "/" + DateTime.Today.ToString("yyyy-MM-dd") + ".txt", FileMode.Create, FileAccess.Write);//创建写入文件
StreamWriter sw = new StreamWriter(fs1);
sw.WriteLine(Log);//开始写入值
sw.Close();
fs1.Close();
}
else
{
FileStream fs = new FileStream(path + "/" + DateTime.Today.ToString("yyyy-MM-dd") + ".txt" + "", FileMode.Append, FileAccess.Write);
StreamWriter sr = new StreamWriter(fs);
sr.WriteLine(Log);//开始写入值
sr.Close();
fs.Close();
}
#endregion
}
public void DeleteFile(string DirectoryName)
{
string deletePath = System.Environment.CurrentDirectory + "\\" + DirectoryName;
DirectoryInfo log = new DirectoryInfo(deletePath);
if (log.Exists)
{
FileInfo[] files = log.GetFiles();
int deleteDays = -7;
string date = DateTime.Today.AddDays(deleteDays).ToString("yyyyMMdd_hhmmss");
foreach (FileInfo file in files)
{
if (date.CompareTo(file.LastWriteTime.ToString("yyyyMMdd_hhmmss")) > 0)
{
if (System.Text.RegularExpressions.Regex.IsMatch(file.Name, ".txt"))
File.Delete(log + "\\" + file.Name);
}
}
}
}
}
}

183
SLZ_4/LogOn.Designer.cs generated Normal file
View File

@@ -0,0 +1,183 @@
namespace SLZ_4
{
partial class LogOn
{
/// <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.components = new System.ComponentModel.Container();
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(LogOn));
this.Account = new System.Windows.Forms.ComboBox();
this.label2 = new System.Windows.Forms.Label();
this.Logtime = new System.Windows.Forms.Label();
this.label3 = new System.Windows.Forms.Label();
this.label1 = new System.Windows.Forms.Label();
this.Password = new System.Windows.Forms.TextBox();
this.Timer1 = new System.Windows.Forms.Timer(this.components);
this.label4 = new System.Windows.Forms.Label();
this.textUser = new System.Windows.Forms.TextBox();
this.Log = new Sunny.UI.UIButton();
this.SuspendLayout();
//
// Account
//
this.Account.Font = new System.Drawing.Font("宋体", 15F);
this.Account.FormattingEnabled = true;
this.Account.Location = new System.Drawing.Point(52, 344);
this.Account.Name = "Account";
this.Account.Size = new System.Drawing.Size(190, 28);
this.Account.TabIndex = 45;
this.Account.Visible = false;
this.Account.KeyDown += new System.Windows.Forms.KeyEventHandler(this.Account_KeyDown);
//
// label2
//
this.label2.AutoSize = true;
this.label2.Font = new System.Drawing.Font("宋体", 13F);
this.label2.Location = new System.Drawing.Point(80, 323);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(134, 18);
this.label2.TabIndex = 44;
this.label2.Text = "请选择账户名称";
this.label2.Visible = false;
//
// Logtime
//
this.Logtime.AutoSize = true;
this.Logtime.Font = new System.Drawing.Font("宋体", 14F);
this.Logtime.Location = new System.Drawing.Point(115, 28);
this.Logtime.Name = "Logtime";
this.Logtime.Size = new System.Drawing.Size(209, 19);
this.Logtime.TabIndex = 43;
this.Logtime.Text = "yyyy-MM-dd HH:mm:ss ";
//
// label3
//
this.label3.AutoSize = true;
this.label3.Font = new System.Drawing.Font("宋体", 13F);
this.label3.Location = new System.Drawing.Point(15, 29);
this.label3.Name = "label3";
this.label3.Size = new System.Drawing.Size(98, 18);
this.label3.TabIndex = 42;
this.label3.Text = "当前时间:";
//
// label1
//
this.label1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.label1.AutoSize = true;
this.label1.Font = new System.Drawing.Font("宋体", 13F);
this.label1.Location = new System.Drawing.Point(15, 95);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(53, 18);
this.label1.TabIndex = 40;
this.label1.Text = "密码:";
//
// Password
//
this.Password.Font = new System.Drawing.Font("宋体", 15F);
this.Password.Location = new System.Drawing.Point(117, 90);
this.Password.Name = "Password";
this.Password.Size = new System.Drawing.Size(190, 30);
this.Password.TabIndex = 39;
this.Password.UseSystemPasswordChar = true;
//
// Timer1
//
this.Timer1.Tick += new System.EventHandler(this.Timer1_Tick);
//
// label4
//
this.label4.AutoSize = true;
this.label4.Font = new System.Drawing.Font("宋体", 13F);
this.label4.Location = new System.Drawing.Point(15, 149);
this.label4.Name = "label4";
this.label4.Size = new System.Drawing.Size(71, 18);
this.label4.TabIndex = 47;
this.label4.Text = "操作员:";
this.label4.Visible = false;
//
// textUser
//
this.textUser.Font = new System.Drawing.Font("宋体", 15F);
this.textUser.Location = new System.Drawing.Point(117, 149);
this.textUser.Name = "textUser";
this.textUser.Size = new System.Drawing.Size(190, 30);
this.textUser.TabIndex = 48;
this.textUser.Visible = false;
//
// Log
//
this.Log.Cursor = System.Windows.Forms.Cursors.Hand;
this.Log.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.Log.Location = new System.Drawing.Point(128, 199);
this.Log.MinimumSize = new System.Drawing.Size(1, 1);
this.Log.Name = "Log";
this.Log.Size = new System.Drawing.Size(100, 35);
this.Log.TabIndex = 49;
this.Log.Text = "登录";
this.Log.TipsFont = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.Log.Click += new System.EventHandler(this.Log_Click);
//
// LogOn
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.BackColor = System.Drawing.Color.LightBlue;
this.ClientSize = new System.Drawing.Size(354, 278);
this.Controls.Add(this.Log);
this.Controls.Add(this.textUser);
this.Controls.Add(this.label4);
this.Controls.Add(this.Account);
this.Controls.Add(this.label2);
this.Controls.Add(this.Logtime);
this.Controls.Add(this.label3);
this.Controls.Add(this.label1);
this.Controls.Add(this.Password);
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.Name = "LogOn";
this.Text = "登录";
this.Load += new System.EventHandler(this.LogOn_Load);
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
public System.Windows.Forms.ComboBox Account;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.Label Logtime;
private System.Windows.Forms.Label label3;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.TextBox Password;
private System.Windows.Forms.Timer Timer1;
private System.Windows.Forms.Label label4;
private System.Windows.Forms.TextBox textUser;
private Sunny.UI.UIButton Log;
}
}

86
SLZ_4/LogOn.cs Normal file
View File

@@ -0,0 +1,86 @@
using System;
using System.Windows.Forms;
namespace SLZ_4
{
public partial class LogOn : Form
{
public string password;
public LogOn()
{
InitializeComponent();
}
private void LogOn_Load(object sender, EventArgs e)
{
Logtime.Text = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
Timer1.Interval = 1000;
Timer1.Start();
Password.Focus();
}
public void setOperator(string strOperator)
{
textUser.Text = strOperator;
}
private void Login()
{
FormMain.form.labelOperator.Text = textUser.Text;
Config.saveOperator(textUser.Text);
if (Password.Text == "linglong29529959" || Password.Text == "29529959" || Password.Text == "qwe")
{
FormMain.form.labelUser.Text = "厂商";
Password.Text = "";
this.Close();
}
else
{
string userpassword = DateTime.Now.ToString("ddHHmm");
//string userpassword3 = "ghkj.2021";
if (Password.Text == userpassword)
{
FormMain.form.labelUser.Text = "工程师";
Password.Text = "";
this.Close();
}
else if (Password.Text == password)
{
FormMain.form.labelUser.Text = "管理员";
Password.Text = "";
this.Close();
}
else
{
MessageBox.Show("密码错误!");
Password.ResetText();
Password.Focus();
}
}
}
private void Log_Click(object sender, EventArgs e)
{
Login();
}
private void Timer1_Tick(object sender, EventArgs e)
{
Logtime.Text = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
}
private void Account_KeyDown(object sender, KeyEventArgs e)
{
e.Handled = true;
}
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
if (keyData == Keys.Enter)
{
Login();
}
return base.ProcessCmdKey(ref msg, keyData);
}
}
}

505
SLZ_4/LogOn.resx Normal file
View File

@@ -0,0 +1,505 @@
<?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>
<metadata name="Timer1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
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
rkJggg==
</value>
</data>
</root>

154
SLZ_4/MesInfo.cs Normal file
View File

@@ -0,0 +1,154 @@
using LLAirtightApi;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace SLZ_4
{
/// <summary>
/// MES入站信息
/// </summary>
public class MesIn
{
public string name { get; set; } //接口名称
public string time { get; set; } //时间
public string operatorName { get; set; } //操作员
public int channel { get; set; } //通道号
public string sn { get; set; } //条码
}
/// <summary>
/// MES出站信息
/// </summary>
public class MesOut
{
public string name { get; set; } //接口名称
public string time { get; set; } //时间
public string operatorName { get; set; } //操作员
public int channel { get; set; } //通道号
public string result { get; set; } //测试结果 OK NG
public string sn { get; set; } //条码
public float diffPressure { get; set; } //压差
public float pressure { get; set; } //压力值
public float leakage { get; set; } //泄漏量
public float inflationTime { get; set; } //充气时间
public float balanceTime { get; set; } //平衡时间
public float testTime1 { get; set; } //检测时间1
public float testTime2 { get; set; } //检测时间2 解除输出2时间(28)
public float exhaustTime { get; set; } //排气时间
public float bypassTime { get; set; } //旁路时间
public float delayTime1 { get; set; } //输出1延时
public float delayTime2 { get; set; } //输出2延时
public float bigLeakBalanceTime { get; set; }//大漏平衡时间
public float micLeakBalanceTime { get; set; }//微漏平衡时间
public string pressureUnit { get; set; } //压力单位
public string leakageUnit { get; set; } //泄漏量单位
public float pressureUpperLimit { get; set; } //充气压力上限
public float pressureLowerLimit { get; set; } //充气压力下限
public float balanceUpperLimit { get; set; } //平衡压差上限 大漏压差
public float balanceLowerLimit { get; set; } //平衡压差下限
public float leakageUpperLimit { get; set; } //泄漏量上限 微漏上限
public float leakageLowerLimit { get; set; } //泄漏量下限 微漏下限
//public float fEquivalentVolume { get; set; } //等效容积
}
public class MesReply
{
public int code; //返回code
public string message; //返回信息
}
public class MesObj
{
public MesIn mesIn; //MES入站信息
public MesOut mesOut; //MES出站信息
public MesReply mesReply; //MES返回
public MesObj()
{
mesIn = new MesIn();
mesOut = new MesOut();
mesReply = new MesReply();
}
public string MesCheckIn(string code, int iCH, string url)
{
mesIn.name = "checkSN";
mesIn.time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
mesIn.operatorName = FormMain.form.strOperator;
mesIn.channel = iCH + 1;
mesIn.sn = code;
string body = JsonConvert.SerializeObject(mesIn);
Log log = new Log();
log.MES_Logmsg(DateTime.Now.ToString() + " 入站 CH-" + (iCH + 1).ToString() + ": " + body);
string strResult = HTTPCom.Post(body, url, null);
log.MES_Logmsg(DateTime.Now.ToString() + " 入站 CH-" + (iCH + 1).ToString() + " MES返回:" + strResult);
if (strResult.Contains("code") && strResult.Contains("message"))
{
mesReply = JsonConvert.DeserializeObject<MesReply>(strResult);
}
else
{
mesReply.code = 0;
}
return strResult;
}
public string MesCheckOut(ref TEST_CHANNEL testInfo, ref CONFIG_PARAM configParam, string code, int iCH, string url)
{
mesOut.name = "updateMes";
mesOut.time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
mesOut.operatorName = FormMain.form.strOperator;
mesOut.channel = iCH + 1;
mesOut.sn = code;
mesOut.result = FormMain.form.strResult[testInfo.ResultFlag];
mesOut.diffPressure = testInfo.fTestDiffPressure; //压差
mesOut.pressure = testInfo.fTestPressure; //压力值
mesOut.leakage = testInfo.fLeakAmount; //泄漏量
mesOut.inflationTime = configParam.inflationTime; //充气时间
mesOut.balanceTime = configParam.balanceTime; //平衡时间
mesOut.testTime1 = configParam.testTime1; //检测时间1
mesOut.testTime2 = configParam.testTime2; //检测时间2 解除输出2时间(28)
mesOut.exhaustTime = configParam.exhaustTime; //排气时间
mesOut.bypassTime = configParam.bypassTime; //旁路时间
mesOut.delayTime1 = configParam.delayTime1; //输出1延时
mesOut.delayTime2 = configParam.delayTime2; //输出2延时
mesOut.bigLeakBalanceTime = configParam.bigLeakBalanceTime;//大漏平衡时间
mesOut.micLeakBalanceTime = configParam.micLeakBalanceTime;//微漏平衡时间
mesOut.pressureUnit = FormMain.form.strListPressureUnit[configParam.pressureUnit]; //压力单位
mesOut.leakageUnit = FormMain.form.strListLeakageUnit[configParam.leakageUnit]; //泄漏量单位
mesOut.pressureUpperLimit = configParam.pressureUpperLimit; //充气压力上限
mesOut.pressureLowerLimit = configParam.pressureLowerLimit; //充气压力下限
mesOut.balanceUpperLimit = configParam.balanceUpperLimit; //平衡压差上限 大漏压差
mesOut.balanceLowerLimit = configParam.balanceLowerLimit; //平衡压差下限
mesOut.leakageUpperLimit = configParam.leakageUpperLimit; //泄漏量上限 微漏上限
mesOut.leakageLowerLimit = configParam.leakageLowerLimit; //泄漏量下限 微漏下限
string body = JsonConvert.SerializeObject(mesOut);
Log log = new Log();
log.MES_Logmsg(DateTime.Now.ToString() + " 出站 CH-" + (iCH + 1).ToString()+ ": " + body);
string strResult = HTTPCom.Post(body, url, null);
log.MES_Logmsg(DateTime.Now.ToString() + " 出站 CH-" + (iCH + 1).ToString() + " MES返回:" + strResult);
mesReply = JsonConvert.DeserializeObject<MesReply>(strResult);
return strResult;
}
}
}

82
SLZ_4/PlcObject.cs Normal file
View File

@@ -0,0 +1,82 @@
using HslCommunication;
using HslCommunication.Profinet.Melsec;
using System;
using System.Collections.Generic;
using System.IO.Ports;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace SLZ_4
{
public class PlcObject
{
public MelsecFxSerial PLC; //串口通行方式三菱FX3U
/*******耕得柜式离线式上位机点位***********/
//M600:CH1M601:CH2true:开启扫码false:关闭扫码
//D120:CH1D121:CH210扫码完成
/*******耕得柜式离线式上位机点位***********/
/*******华贝上位机点位***********/
//读实时下压力D105:CH1D107:CH2
//写:
//M600:CH1M601:CH2true:开启扫码false:关闭扫码
//D500:CH1D501:CH210扫码完成
//M602:CH1M603:CH2true:负压模式false:正压模式
/*******耕得柜式离线式上位机点位***********/
/*******航同离线式上位机点位***********/
//M600:CH1M601:CH2true:开启扫码false:关闭扫码
//D530:CH1D531:CH210扫码完成
/*******航同离线式上位机点位***********/
public PlcObject()
{
PLC = new MelsecFxSerial();
}
public void openPLC(PLC_PARAM plcParam)
{
try
{
PLC.SerialPortInni(sp =>
{
sp.PortName = plcParam.sPort;
sp.BaudRate = plcParam.iBaudrate;
sp.DataBits = 7;
sp.StopBits = System.IO.Ports.StopBits.One;
sp.Parity = System.IO.Ports.Parity.Even;
});
PLC.Open();
}
catch (Exception ex)
{
FileLogger.Log("打开PLC失败:" + ex.Message, LogLevel.ERROR);
}
}
public void closePLC()
{
PLC.Close();
}
public bool SetScan(int iCH, bool bStart)
{
bool bRet = false;
if (PLC.IsOpen())
{
bRet = PLC.Write(iCH == 0 ? "M600" : "M601", bStart).IsSuccess;
}
return bRet;
}
public bool ScanFinish(int iCH)
{
bool bRet = false;
if (PLC.IsOpen())
{
bRet = PLC.Write(iCH == 0 ? "D530" : "D531", 10).IsSuccess;
}
return bRet;
}
}
}

22
SLZ_4/Program.cs Normal file
View File

@@ -0,0 +1,22 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace SLZ_4
{
static class Program
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new FormMain());
}
}
}

View File

@@ -0,0 +1,36 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// 有关程序集的一般信息由以下
// 控制。更改这些特性值可修改
// 与程序集关联的信息。
[assembly: AssemblyTitle("SLZ_4")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("SLZ_4")]
[assembly: AssemblyCopyright("Copyright © 2025")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// 将 ComVisible 设置为 false 会使此程序集中的类型
//对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型
//请将此类型的 ComVisible 特性设置为 true。
[assembly: ComVisible(false)]
// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID
[assembly: Guid("bb3cfe8c-461b-4038-85f4-dbd50d2958e7")]
// 程序集的版本信息由下列四个值组成:
//
// 主版本
// 次版本
// 生成号
// 修订号
//
//可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值
//通过使用 "*",如下所示:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.2")]
[assembly: AssemblyFileVersion("1.0.0.2")]

63
SLZ_4/Properties/Resources.Designer.cs generated Normal file
View File

@@ -0,0 +1,63 @@
//------------------------------------------------------------------------------
// <auto-generated>
// 此代码由工具生成。
// 运行时版本:4.0.30319.42000
//
// 对此文件的更改可能会导致不正确的行为,并且如果
// 重新生成代码,这些更改将会丢失。
// </auto-generated>
//------------------------------------------------------------------------------
namespace SLZ_4.Properties {
using System;
/// <summary>
/// 一个强类型的资源类,用于查找本地化的字符串等。
/// </summary>
// 此类是由 StronglyTypedResourceBuilder
// 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。
// 若要添加或移除成员,请编辑 .ResX 文件,然后重新运行 ResGen
// (以 /str 作为命令选项),或重新生成 VS 项目。
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources {
private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal Resources() {
}
/// <summary>
/// 返回此类使用的缓存的 ResourceManager 实例。
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager {
get {
if (object.ReferenceEquals(resourceMan, null)) {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("SLZ_4.Properties.Resources", typeof(Resources).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
/// <summary>
/// 重写当前线程的 CurrentUICulture 属性,对
/// 使用此强类型资源类的所有资源查找执行重写。
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture {
get {
return resourceCulture;
}
set {
resourceCulture = value;
}
}
}
}

View File

@@ -0,0 +1,117 @@
<?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.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: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" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
</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" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
</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=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

26
SLZ_4/Properties/Settings.Designer.cs generated Normal file
View File

@@ -0,0 +1,26 @@
//------------------------------------------------------------------------------
// <auto-generated>
// 此代码由工具生成。
// 运行时版本:4.0.30319.42000
//
// 对此文件的更改可能会导致不正确的行为,并且如果
// 重新生成代码,这些更改将会丢失。
// </auto-generated>
//------------------------------------------------------------------------------
namespace SLZ_4.Properties {
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "16.10.0.0")]
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
public static Settings Default {
get {
return defaultInstance;
}
}
}
}

View File

@@ -0,0 +1,7 @@
<?xml version='1.0' encoding='utf-8'?>
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)">
<Profiles>
<Profile Name="(Default)" />
</Profiles>
<Settings />
</SettingsFile>

BIN
SLZ_4/Resources/icon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

237
SLZ_4/SLZ_4.csproj Normal file
View File

@@ -0,0 +1,237 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{BB3CFE8C-461B-4038-85F4-DBD50D2958E7}</ProjectGuid>
<OutputType>WinExe</OutputType>
<RootNamespace>SLZ_4</RootNamespace>
<AssemblyName>SLZ_4-V1.0.0.2</AssemblyName>
<TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<Deterministic>true</Deterministic>
<TargetFrameworkProfile />
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<Prefer32Bit>false</Prefer32Bit>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<Prefer32Bit>false</Prefer32Bit>
</PropertyGroup>
<PropertyGroup>
<ApplicationIcon>icon.ico</ApplicationIcon>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\x86\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<DebugType>full</DebugType>
<PlatformTarget>x86</PlatformTarget>
<LangVersion>7.3</LangVersion>
<ErrorReport>prompt</ErrorReport>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
<OutputPath>bin\x86\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<Optimize>true</Optimize>
<DebugType>pdbonly</DebugType>
<PlatformTarget>x86</PlatformTarget>
<LangVersion>7.3</LangVersion>
<ErrorReport>prompt</ErrorReport>
</PropertyGroup>
<ItemGroup>
<Reference Include="HslCommunication, Version=12.5.1.0, Culture=neutral, PublicKeyToken=3d72ad3b6b5ec0e3, processorArchitecture=MSIL">
<HintPath>..\packages\HslCommunication.12.5.1\lib\net451\HslCommunication.dll</HintPath>
</Reference>
<Reference Include="Interop.ADOX">
<HintPath>..\packages\Interop.ADOX.dll</HintPath>
<EmbedInteropTypes>True</EmbedInteropTypes>
</Reference>
<Reference Include="LLAirtightApi, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\packages\LLAirtightApi.dll</HintPath>
</Reference>
<Reference Include="Microsoft.Office.Interop.Excel, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.Office.Interop.Excel.15.0.4795.1001\lib\net20\Microsoft.Office.Interop.Excel.dll</HintPath>
<EmbedInteropTypes>True</EmbedInteropTypes>
</Reference>
<Reference Include="Newtonsoft.Json, Version=13.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\packages\Newtonsoft.Json.13.0.2\lib\net45\Newtonsoft.Json.dll</HintPath>
</Reference>
<Reference Include="SunnyUI, Version=3.8.7.0, Culture=neutral, PublicKeyToken=27d7d2e821d97aeb, processorArchitecture=MSIL">
<HintPath>..\packages\SunnyUI.3.8.7\lib\net472\SunnyUI.dll</HintPath>
</Reference>
<Reference Include="SunnyUI.Common, Version=3.8.7.0, Culture=neutral, PublicKeyToken=5a271fb7ba597231, processorArchitecture=MSIL">
<HintPath>..\packages\SunnyUI.Common.3.8.7\lib\net472\SunnyUI.Common.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Configuration" />
<Reference Include="System.Core" />
<Reference Include="System.Design" />
<Reference Include="System.Numerics" />
<Reference Include="System.Runtime" />
<Reference Include="System.Web.Extensions" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Deployment" />
<Reference Include="System.Drawing" />
<Reference Include="System.Net.Http" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="AutoResizeForm.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Config.cs" />
<Compile Include="ConfigDevice.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="ConfigDevice.Designer.cs">
<DependentUpon>ConfigDevice.cs</DependentUpon>
</Compile>
<Compile Include="ConfigDevicePort.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="ConfigDevicePort.Designer.cs">
<DependentUpon>ConfigDevicePort.cs</DependentUpon>
</Compile>
<Compile Include="ConfigINI.cs" />
<Compile Include="ConfigMes.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="ConfigMes.Designer.cs">
<DependentUpon>ConfigMes.cs</DependentUpon>
</Compile>
<Compile Include="ConfigPassword.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="ConfigPassword.Designer.cs">
<DependentUpon>ConfigPassword.cs</DependentUpon>
</Compile>
<Compile Include="ConfigPLC.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="ConfigPLC.Designer.cs">
<DependentUpon>ConfigPLC.cs</DependentUpon>
</Compile>
<Compile Include="ConfigStorage.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="ConfigStorage.designer.cs">
<DependentUpon>ConfigStorage.cs</DependentUpon>
</Compile>
<Compile Include="DeviceObject.cs" />
<Compile Include="Electricity.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Electricity.Designer.cs">
<DependentUpon>Electricity.cs</DependentUpon>
</Compile>
<Compile Include="FileLogger.cs" />
<Compile Include="FormMain.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="FormMain.Designer.cs">
<DependentUpon>FormMain.cs</DependentUpon>
</Compile>
<Compile Include="HTTPCom.cs" />
<Compile Include="Log.cs" />
<Compile Include="LogOn.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="LogOn.designer.cs">
<DependentUpon>LogOn.cs</DependentUpon>
</Compile>
<Compile Include="ConfigScanner.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="ConfigScanner.designer.cs">
<DependentUpon>ConfigScanner.cs</DependentUpon>
</Compile>
<Compile Include="MesInfo.cs" />
<Compile Include="PlcObject.cs" />
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="SaveRecord.cs" />
<Compile Include="ScanNetwork.cs" />
<Compile Include="Struct.cs" />
<Compile Include="WarningInfo.cs" />
<EmbeddedResource Include="ConfigDevice.resx">
<DependentUpon>ConfigDevice.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="ConfigDevicePort.resx">
<DependentUpon>ConfigDevicePort.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="ConfigMes.resx">
<DependentUpon>ConfigMes.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="ConfigPassword.resx">
<DependentUpon>ConfigPassword.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="ConfigPLC.resx">
<DependentUpon>ConfigPLC.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="ConfigStorage.resx">
<DependentUpon>ConfigStorage.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Electricity.resx">
<DependentUpon>Electricity.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="FormMain.resx">
<DependentUpon>FormMain.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="LogOn.resx">
<DependentUpon>LogOn.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="ConfigScanner.resx">
<DependentUpon>ConfigScanner.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
<SubType>Designer</SubType>
</EmbeddedResource>
<Compile Include="Properties\Resources.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Resources.resx</DependentUpon>
<DesignTime>True</DesignTime>
</Compile>
<None Include="packages.config" />
<None Include="Properties\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
</None>
<Compile Include="Properties\Settings.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Settings.settings</DependentUpon>
<DesignTimeSharedInput>True</DesignTimeSharedInput>
</Compile>
</ItemGroup>
<ItemGroup>
<None Include="App.config" />
</ItemGroup>
<ItemGroup>
<Content Include="icon.ico" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>

240
SLZ_4/SaveRecord.cs Normal file
View File

@@ -0,0 +1,240 @@
using LLAirtightApi;
using Microsoft.Office.Interop.Excel;
using Newtonsoft.Json;
using System;
using System.Data;
using System.Data.SqlClient;
using System.IO;
using System.Reflection;
using System.Text;
namespace SLZ_4
{
class SaveRecord
{
public static void WriteTXT(ref TEST_PARAM testInfo, string code, string strPath, int iCH)
{
string fileName = strPath + "\\" + (iCH + 1).ToString() + "_" + DateTime.Now.ToString("yyyyMMdd") + ".txt";
string str1 = "时间: " + DateTime.Now
+ "操作员: " + FormMain.form.labelOperator.Text
+ " 条形码: " + code
+ " 测试压力: " + testInfo.chTest[iCH].fTestPressure.ToString("F3")
+ " 测试压力单位: " + FormMain.form.strListPressureUnit[testInfo.iPressureUnit]
+ " 当前压差: " + testInfo.chTest[iCH].fTestDiffPressure.ToString("F3")
+ " 泄漏量: " + testInfo.chTest[iCH].fLeakAmount.ToString("F3")
+ " 泄漏量单位: " + FormMain.form.strListLeakageUnit[testInfo.iLeakUnit]
+ " 测试结果: " + FormMain.form.strResult[testInfo.chTest[iCH].ResultFlag] + " \n";
System.IO.File.AppendAllText(fileName, str1);
}
public static void WriteCSV(ref TEST_PARAM testInfo, string code, string strPath, int iCH)
{
try
{
string fileName = strPath + "\\" + (iCH + 1).ToString() + "_" + DateTime.Now.ToString("yyyyMMdd") + ".csv";
bool bWriter = false;
if (!File.Exists(fileName))
{
bWriter = true;
}
StreamWriter fileWriter = new StreamWriter(fileName, true, Encoding.UTF8);
if (bWriter)
{
fileWriter.Write("时间,操作员,条形码,测试压力,测试压力单位,当前压差,泄漏量,泄漏量单位,测试结果" + "\r\n");
fileWriter.Flush();
}
string nowdate = DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss");
fileWriter.Write(nowdate + ",");
fileWriter.Write(FormMain.form.labelOperator.Text + ",");
fileWriter.Write(code + ",");
fileWriter.Write(testInfo.chTest[iCH].fTestPressure.ToString("F3") + ",");
fileWriter.Write(FormMain.form.strListPressureUnit[testInfo.iPressureUnit] + ",");
fileWriter.Write(testInfo.chTest[iCH].fTestDiffPressure.ToString("F3") + ",");
fileWriter.Write(testInfo.chTest[iCH].fLeakAmount.ToString("F3") + ",");
fileWriter.Write(FormMain.form.strListLeakageUnit[testInfo.iLeakUnit] + ",");
fileWriter.Write(FormMain.form.strResult[testInfo.chTest[iCH].ResultFlag] + "\r\n");
fileWriter.Flush();
fileWriter.Close();
}
catch (Exception ex)
{
FileLogger.Log("写入CSV失败: " + ex.Message);
//MessageBox.Show(ex.Message);
}
}
public static bool OpenExcel(string sPath, string code, string result)
{
string path = sPath + "\\" + DateTime.Now.ToString("yyyyMMdd");
string fileName = path + "\\" + code + "_" + result + "_" + DateTime.Now.ToString("yyyyMMddHHmmssfff") + ".xlsx";
if (!Directory.Exists(path))
{
Directory.CreateDirectory(path);
}
try
{
FormMain.form.xapp = new Microsoft.Office.Interop.Excel.Application();
if (File.Exists(fileName) == false)//判断所选路径是否有文件
{
//若不存在该文件,则创建新文件
Workbooks xbook1 = FormMain.form.xapp.Workbooks;
FormMain.form.xbook = FormMain.form.xapp.Workbooks.Add(true);
Worksheet xsheet = (Worksheet)FormMain.form.xbook.Sheets[1];
//添加表头
string[] fieldArr = { "时间", "条形码", "测试压力", "测试压力单位", "当前压差", "泄漏量", "泄漏量单位", "测试结果" };
for (int i = 0; i < fieldArr.Length; i++)
{
xsheet.Cells[i + 1][1] = fieldArr[i];
}
FormMain.form.xbook.SaveAs(fileName);//按照指定路径存储新文件
}
else
{
//若存在该文件,则打开文件并写入数据
FormMain.form.xbook = FormMain.form.xapp.Workbooks._Open(fileName, Missing.Value, Missing.Value,
Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value,
Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value);
}
FormMain.form.xapp.DisplayAlerts = false;
}
catch (Exception e)
{
FileLogger.Log("打开Excel文件失败: " + e.Message, LogLevel.ERROR);
//MessageBox.Show("打开Excel文件失败: " + e.Message);
return false;
}
return true;
}
public static void WriteExcel(TEST_PARAM testInfo, string code, string strPath, int iCH)
{
try
{
if (OpenExcel(strPath, code, FormMain.form.strResult[testInfo.chTest[iCH].ResultFlag]))
{
Worksheet xsheet = (Worksheet)FormMain.form.xbook.Sheets[1];
string[] dataArr = { DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"),
code, testInfo.chTest[iCH].fTestPressure.ToString("F3"),
FormMain.form.strListPressureUnit[testInfo.iPressureUnit], testInfo.chTest[iCH].fTestDiffPressure.ToString("F1"),
testInfo.chTest[iCH].fLeakAmount.ToString("F3"),
FormMain.form.strListLeakageUnit[testInfo.iLeakUnit],
FormMain.form.strResult[testInfo.chTest[iCH].ResultFlag]};
int c = xsheet.UsedRange.Rows.Count;
for (int i = 0; i < dataArr.Length; i++)
{
xsheet.Cells[i + 1][c + 1] = dataArr[i];
}
FormMain.form.xbook.Save();
if (FormMain.form.xbook != null)
{
FormMain.form.xbook.Close();
FormMain.form.xbook = null;
if (FormMain.form.xapp != null)
{
FormMain.form.xapp.Quit();
FormMain.form.xapp = null;
}
}
}
}
catch (Exception ex)
{
FileLogger.Log("打开Excel失败: "+ ex.Message);
//MessageBox.Show("Excel:" + ex.Message);
}
}
public static bool OpenSQL()
{
if (FormMain.form.sqlConnection != null)
{
if (FormMain.form.sqlConnection.State == ConnectionState.Open)
{
return true;
}
else
{
FormMain.form.sqlConnection.Close();
FormMain.form.sqlConnection = null;
}
}
try
{
//string connectionString = "Data source=" + configParam.databaseParam.sServer;
//connectionString += ";Initial Catalog=master;User Id=" + configParam.databaseParam.sDBUser
// + ";Password=" + configParam.databaseParam.sDBPassword;//定义连接字符串
//sqlConnection = new SqlConnection(connectionString);//创建连接
//sqlConnection.Open();//打开并连接数据库
//if (configParam.databaseParam.sDBName == "")
//{
// configParam.databaseParam.sDBName = "LeakTest";
//}
//string selectString = "Select * FROM master..SYSDATABASES WHERE name ='" + configParam.databaseParam.sDBName + "'";//输入sql语句,判断是否存在名为LeakTest的数据库
//SqlCommand cmd = new SqlCommand(selectString, sqlConnection);
//var str1 = cmd.ExecuteScalar();
//if (str1 is null)
//{
// cmd.CommandText = "CREATE DATABASE " + configParam.databaseParam.sDBName;//如果不存在则新建数据库
// cmd.ExecuteNonQuery();
//}
//sqlConnection.Close();//关闭数据库
return true;
}
catch (Exception e)
{
FileLogger.Log("打开数据库失败:" + e.Message, LogLevel.ERROR);
return false;
throw;
}
}
public static void WriteSQL(ref TEST_PARAM testInfo, string code, string strPath, int iCH)
{
try
{
if (OpenSQL())
{
string nowday = DateTime.Now.ToString("yyyy_MM_dd");
string selectString2 = "select * from dbo.sysobjects where name=('test" + nowday + "')";//查询是否有名为leaktest+日期的表格
//SqlCommand cmd2 = new SqlCommand(selectString2, sqlConnection);
//var str2 = cmd2.ExecuteScalar();
//if (str2 is null)
//{
// //若没有表格则新建表格
// cmd2.CommandText = "CREATE TABLE test" + nowday +
// " ([Time] DATETIME ,[BarCode] VarChar(50),[Pressure] FLOAT,[PressureUnit] VarChar(50)," +
// "[PressureDiff] FLOAT,[Leakage] FLOAT,[LeakageUnit] VarChar(50),[Result] VarChar(50))"; //Office is the named range.
// cmd2.ExecuteNonQuery();
//}
////往表格插入数据
//cmd2.CommandText = "INSERT INTO test" + nowday +
// " (Time, BarCode, Pressure, PressureUnit, PressureDiff, Leakage, LeakageUnit, Result)" +
// " VALUES('" + DateTime.Now + "', '" + textCode.Text + "', '" + testInfo.fTestPressure.ToString("F3") + "', '" +
// strListPressureUnit[iPressureUnit] + "', '" + testInfo.fTestDiffPressure.ToString("F1") + "', '" +
// testInfo.fLeakAmount.ToString("F3") + "', '" + strListLeakageUnit[ileakageUnit] + "', '" + labelResult.Text + "')";
//cmd2.ExecuteNonQuery();
}
}
catch (SqlException ex)
{
FileLogger.Log("写入数据库失败: " + ex.Message);
//MessageBox.Show(ex.Message);
}
}
}
}

195
SLZ_4/ScanNetwork.cs Normal file
View File

@@ -0,0 +1,195 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net.Sockets;
using System.Threading;
namespace SLZ_4
{
public class ScanNetwork : IDisposable // TCP扫码枪客户端类
{
private TcpClient tcpClient;
private NetworkStream networkStream;
private string ipAddress;
private int port;
public int codeLength;
private readonly Action<string> onDataReceived;
private readonly Action<string> onErrorReceived;
private readonly Action<string> onStatusUpdate;
public bool isRunning { get; set; }
public bool IsConnected
{
get
{
return tcpClient?.Client != null &&
tcpClient.Connected &&
networkStream?.CanRead == true;
}
}
public ScanNetwork(string ip, int iport, int icodeLength,
Action<string> ionDataReceived,
Action<string> ionError,
Action<string> ionStatusUpdate)
{
ipAddress = ip;
port = iport;
codeLength = icodeLength;
onDataReceived = ionDataReceived;
onErrorReceived = ionError;
onStatusUpdate = ionStatusUpdate;
}
public bool Connect()
{
string str = "";
try
{
tcpClient = new TcpClient();
tcpClient.Connect(ipAddress, port);
networkStream = tcpClient.GetStream();
isRunning = true;
// 启动接收线程
Thread receiveThread = new Thread(ReceiveData);
receiveThread.IsBackground = true;
receiveThread.Start();
str = "TCP扫码枪连接成功:" + ipAddress + ":" + port;
onStatusUpdate?.Invoke(str);
FileLogger.Log(str, LogLevel.INFO);
return true;
}
catch (Exception ex)
{
str = $"连接TCP扫码枪失败: {ex.Message} {ipAddress} : {port}";
onStatusUpdate?.Invoke(str);
FileLogger.Log(str, LogLevel.ERROR);
return false;
}
}
public bool Reconnect(string newIp, int newPort)
{
// 先断开当前连接
Disconnect();
// 更新IP和端口
ipAddress = newIp;
port = newPort;
// 重新连接
return Connect();
}
public void Disconnect()
{
isRunning = false;
networkStream?.Close();
tcpClient?.Close();
string str = "TCP扫码枪已断开: " + ipAddress + ":" + port;
onStatusUpdate?.Invoke(str);
FileLogger.Log(str, LogLevel.WARNING);
}
public void SendStartCommand()
{
try
{
if (IsConnected)
{
string data = "73 74 61 72 74";
byte[] byt = StrtoHexbyte(data);
networkStream.Write(byt, 0, byt.Length);
}
else
{
onErrorReceived?.Invoke("发送扫码启动失败: 连接已断开");
}
}
catch (Exception ex)
{
onErrorReceived?.Invoke($"发送扫码启动失败: {ex.Message}");
Connect_Error();
}
}
private void ReceiveData()
{
byte[] buffer = new byte[1024];
while (isRunning)
{
try
{
// 检查真实连接状态
if (!IsConnected)
{
onStatusUpdate?.Invoke("扫码枪连接已断开,尝试重连...");
Reconnect(ipAddress, port); // 自动重连
Thread.Sleep(2000);
continue;
}
if (networkStream?.DataAvailable == true)
{
int bytesRead = networkStream.Read(buffer, 0, buffer.Length);
if (bytesRead > 0)
{
string code = Encoding.Default.GetString(buffer, 0, bytesRead);
string cleanCode = code.Replace("\r\n", "").Trim();
onDataReceived?.Invoke(cleanCode);
if (cleanCode.Length != codeLength)
{
onStatusUpdate?.Invoke($"当前条形码长度为{cleanCode.Length},所设置的条码长度为{codeLength}");
}
}
}
Thread.Sleep(100); // 稍微延迟以减少CPU占用
}
catch (Exception ex)
{
onErrorReceived?.Invoke($"扫码枪接收数据异常: {ex.Message}");
Connect_Error();
Thread.Sleep(1000);
}
}
}
// l连接异常
private void Connect_Error()
{
isRunning = false;
networkStream?.Close();
tcpClient?.Close();
string str = $"扫码枪连接异常,已断开: {ipAddress}:{port}";
onStatusUpdate?.Invoke(str);
FileLogger.Log(str, LogLevel.WARNING);
}
//将发送数据转为十六进制数据
public static byte[] StrtoHexbyte(string hexString)
{
hexString = hexString.Replace(" ", "");
byte[] returnBytes = new byte[hexString.Length / 2];
for (int i = 0; i < returnBytes.Length; i++)
{
returnBytes[i] = Convert.ToByte(hexString.Substring(i * 2, 2), 16);
}
return returnBytes;
}
public void Dispose()
{
Disconnect();
tcpClient?.Dispose();
networkStream?.Dispose();
}
}
}

104
SLZ_4/Struct.cs Normal file
View File

@@ -0,0 +1,104 @@
using System.Runtime.InteropServices;
namespace SLZ_4
{
public enum SCANNER_TYPE
{
COMMON, //普通扫码枪
INDUSTRY_COM, //工业扫码枪-串口
INDUSTRY_NETWORK, //工业扫码枪-网口
}
//设备信息
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct DEVICE_PARAM
{
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)] public string sDevAddr; //串口时为串口号网络时为IP地址
public int iDevType;
public int iProtocol;
public int iSlaveId; //从机id
public int iPort; //端口 波特率
public int iSwitch; //是否切换IP改变
}
//存储配置
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct STORAGE_PARAM
{
public bool bTxt; //导出TXT
public bool bCSV; //导出CSV
public bool bSQL; //导出SQL
public bool bExcel; //导出EXCEL
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)] public string sPath; //保存路径
}
//扫码配置
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct SCAN_PARAM
{
public bool bCheckLen; //扫码长度检测
public bool bStart; //扫码启动
public int iCodeLength; //条码长度
}
//扫码枪配置
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct SCANNER_PARAM
{
//串口连接
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)] public string sPort; //串口
public int iBaudrate; //波特率
//网络
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)] public string sIpaddr; //IP地址
public int iPort; //端口
}
//PLC配置
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct PLC_PARAM
{
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)] public string sPort; //串口
public int iBaudrate; //波特率
}
//PLC配置
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct PRINTER_PARAM
{
public bool bPrint; //开启打印
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)] public string printName; //打印机名称
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)] public string printModel; //打印机模板
//型号RSFP-76*64A-4*8Q-BL-JS-流水号HT 20240109 0356 -气密 11.747Pa PASS
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)] public string codePre; //条码前缀
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)] public string snPre; //序列号前缀 20251022
public int sn; //序列号四位数字 0001
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)] public string codeSuffix; //条码后缀 -气密
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)] public string codeSuffix2; //条码后缀2 PASS
}
//MES配置
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct MES_PARAM
{
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)] public string sUrl; //MESUrl
public int iPort; //端口号
public bool bCheckIn; //MES入站
public bool bCheckOut; //MES出站
}
//通道统计信息
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct STATISTICS_CHANNEL
{
public int iCount; //测试总量
public int iPass; //通过数量
public int iFailed; //不良数量
}
//统计信息
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct STATISTICS_INFO
{
public int iCount; //测试总量
public int iPass; //通过数量
public int iFailed; //不良数量
public STATISTICS_CHANNEL[] ch; //通道统计信息
}
}

176
SLZ_4/WarningInfo.cs Normal file
View File

@@ -0,0 +1,176 @@
using ADOX;
using System;
using System.Collections.Generic;
using System.Data.OleDb;
using System.IO;
namespace SLZ_4
{
public class WarningInfo
{
public class WarningRecord
{
public string { get; set; }
public string { get; set; }
public string { get; set; }
}
//将报警和解锁结果数据存储本地mdb数据库
public void InsertWarningData(string warningtime, string channel, string warning)
{
//try
//{
string filepath = System.Environment.CurrentDirectory + "\\Config\\WarningRecord\\Warning.mdb";
string constr = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + System.Environment.CurrentDirectory + "\\Config\\WarningRecord\\Warning.mdb;";
OleDbConnection con = new OleDbConnection(constr);
if (File.Exists(filepath) == false)//判断所选路径是否有文件
{
string filepath2 = System.Environment.CurrentDirectory + "\\Config\\WarningRecord\\";
Directory.CreateDirectory(filepath2);//新建文件夹
Catalog Product = new Catalog();
Product.Create("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + System.Environment.CurrentDirectory + "\\Config\\WarningRecord\\Warning.mdb;Jet OLEDB:Engine Type=5;");
con.Open();
string sql = "CREATE TABLE Warning([id] int identity(1,1),[Warningtime] VarChar(100),[Channel] VarChar(50),[Warning] VarChar(200))";
OleDbCommand cmd = new OleDbCommand(sql, con);
cmd.ExecuteNonQuery();
con.Close();
}
con.Open();
string sql2 = " INSERT INTO Warning( Warningtime, Channel, Warning) VALUES('" + warningtime + "', '" + channel + "', '" + warning + "')";
OleDbCommand cmd2 = new OleDbCommand(sql2, con);
cmd2.ExecuteNonQuery();
sql2 = "DELETE FROM Warning WHERE ID NOT IN(SELECT TOP 50 ID FROM Warning ORDER BY ID DESC)";
OleDbCommand cmd3 = new OleDbCommand(sql2, con);
cmd3.ExecuteNonQuery();
con.Close();
// return "OK";
//}
//catch (Exception ex)
//{
// return ex.Message;
//}
}
//public static string SelectWarningByTime(string begintime, string endtime)
//{
// try
// {
// //定义一个集合,用于存放对象
// List<WarningRecord> Record = new List<WarningRecord>();
// string filepath = System.Environment.CurrentDirectory + "\\Config\\WarningRecord\\Warning.mdb";
// if (File.Exists(filepath) == true)//判断所选路径是否有文件
// {
// string constr = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + System.Environment.CurrentDirectory + "\\Config\\WarningRecord\\Warning.mdb;";
// OleDbConnection con = new OleDbConnection(constr);
// con.Open();
// string sql2 = "SELECT * FROM Warning WHERE Unlocktime BETWEEN '" + begintime + "' and '" + endtime + "'";
// OleDbCommand cmd2 = new OleDbCommand(sql2, con);
// OleDbDataReader information = cmd2.ExecuteReader();
// //下移游标读取一行如果没有数据了则返回false
// while (information.Read())
// {
// WarningRecord rec = new WarningRecord();
// rec.报警时间 = Convert.ToString(information["Warningtime"]);
// rec.通道 = Convert.ToString(information["Channel"]);
// rec.报警内容 = Convert.ToString(information["Warning"]);
// Record.Add(rec);
// }
// SelectWarning.sw.DataGridView1.DataSource = Record;
// information.Close();
// con.Close();
// }
// return "OK";
// }
// catch (Exception ex)
// {
// return ex.Message;
// }
//}
public static List<WarningRecord> SelectWarning()
{
//try
//{
//定义一个集合,用于存放对象
List<WarningRecord> Record = new List<WarningRecord>();
string filepath = System.Environment.CurrentDirectory + "\\Config\\WarningRecord\\Warning.mdb";
if (File.Exists(filepath) == true)//判断所选路径是否有文件
{
string constr = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + System.Environment.CurrentDirectory + "\\Config\\WarningRecord\\Warning.mdb;";
OleDbConnection con = new OleDbConnection(constr);
con.Open();
string sql2 = "SELECT * FROM Warning";
OleDbCommand cmd2 = new OleDbCommand(sql2, con);
OleDbDataReader information = cmd2.ExecuteReader();
//下移游标读取一行如果没有数据了则返回false
while (information.Read())
{
WarningRecord rec = new WarningRecord();
rec. = Convert.ToString(information["Warningtime"]);
rec. = Convert.ToString(information["Channel"]);
rec. = Convert.ToString(information["Warning"]);
Record.Add(rec);
}
//Warning.wa.DataGridView1.DataSource = Record;
information.Close();
con.Close();
}
return Record;
// return "OK";
//}
//catch (Exception ex)
//{
// return ex.Message;
//}
}
}
}

Binary file not shown.

View File

@@ -0,0 +1,425 @@
<?xml version="1.0"?>
<doc>
<assembly>
<name>EasyModbus</name>
</assembly>
<members>
<member name="T:EasyModbus.ModbusClient">
<summary>
Implements a ModbusClient.
</summary>
</member>
<member name="M:EasyModbus.ModbusClient.#ctor(System.String,System.Int32)">
<summary>
Constructor which determines the Master ip-address and the Master Port.
</summary>
<param name="ipAddress">IP-Address of the Master device</param>
<param name="port">Listening port of the Master device (should be 502)</param>
</member>
<member name="M:EasyModbus.ModbusClient.#ctor(System.String)">
<summary>
Constructor which determines the Serial-Port
</summary>
<param name="serialPort">Serial-Port Name e.G. "COM1"</param>
</member>
<member name="M:EasyModbus.ModbusClient.#ctor">
<summary>
Parameterless constructor
</summary>
</member>
<member name="M:EasyModbus.ModbusClient.Connect">
<summary>
Establish connection to Master device in case of Modbus TCP. Opens COM-Port in case of Modbus RTU
</summary>
</member>
<member name="M:EasyModbus.ModbusClient.Connect(System.String,System.Int32)">
<summary>
Establish connection to Master device in case of Modbus TCP.
</summary>
</member>
<member name="M:EasyModbus.ModbusClient.ConvertRegistersToFloat(System.Int32[])">
<summary>
Converts two ModbusRegisters to Float - Example: EasyModbus.ModbusClient.ConvertRegistersToFloat(modbusClient.ReadHoldingRegisters(19,2))
</summary>
<param name="registers">Two Register values received from Modbus</param>
<returns>Connected float value</returns>
</member>
<member name="M:EasyModbus.ModbusClient.ConvertRegistersToFloat(System.Int32[],EasyModbus.ModbusClient.RegisterOrder)">
<summary>
Converts two ModbusRegisters to Float, Registers can by swapped
</summary>
<param name="registers">Two Register values received from Modbus</param>
<param name="registerOrder">Desired Word Order (Low Register first or High Register first</param>
<returns>Connected float value</returns>
</member>
<member name="M:EasyModbus.ModbusClient.ConvertRegistersToInt(System.Int32[])">
<summary>
Converts two ModbusRegisters to 32 Bit Integer value
</summary>
<param name="registers">Two Register values received from Modbus</param>
<returns>Connected 32 Bit Integer value</returns>
</member>
<member name="M:EasyModbus.ModbusClient.ConvertRegistersToInt(System.Int32[],EasyModbus.ModbusClient.RegisterOrder)">
<summary>
Converts two ModbusRegisters to 32 Bit Integer Value - Registers can be swapped
</summary>
<param name="registers">Two Register values received from Modbus</param>
<param name="registerOrder">Desired Word Order (Low Register first or High Register first</param>
<returns>Connecteds 32 Bit Integer value</returns>
</member>
<member name="M:EasyModbus.ModbusClient.ConvertRegistersToLong(System.Int32[])">
<summary>
Convert four 16 Bit Registers to 64 Bit Integer value Register Order "LowHigh": Reg0: Low Word.....Reg3: High Word, "HighLow": Reg0: High Word.....Reg3: Low Word
</summary>
<param name="registers">four Register values received from Modbus</param>
<returns>64 bit value</returns>
</member>
<member name="M:EasyModbus.ModbusClient.ConvertRegistersToLong(System.Int32[],EasyModbus.ModbusClient.RegisterOrder)">
<summary>
Convert four 16 Bit Registers to 64 Bit Integer value - Registers can be swapped
</summary>
<param name="registers">four Register values received from Modbus</param>
<param name="registerOrder">Desired Word Order (Low Register first or High Register first</param>
<returns>Connected 64 Bit Integer value</returns>
</member>
<member name="M:EasyModbus.ModbusClient.ConvertRegistersToDouble(System.Int32[])">
<summary>
Convert four 16 Bit Registers to 64 Bit double prec. value Register Order "LowHigh": Reg0: Low Word.....Reg3: High Word, "HighLow": Reg0: High Word.....Reg3: Low Word
</summary>
<param name="registers">four Register values received from Modbus</param>
<returns>64 bit value</returns>
</member>
<member name="M:EasyModbus.ModbusClient.ConvertRegistersToDouble(System.Int32[],EasyModbus.ModbusClient.RegisterOrder)">
<summary>
Convert four 16 Bit Registers to 64 Bit double prec. value - Registers can be swapped
</summary>
<param name="registers">four Register values received from Modbus</param>
<param name="registerOrder">Desired Word Order (Low Register first or High Register first</param>
<returns>Connected double prec. float value</returns>
</member>
<member name="M:EasyModbus.ModbusClient.ConvertFloatToRegisters(System.Single)">
<summary>
Converts float to two ModbusRegisters - Example: modbusClient.WriteMultipleRegisters(24, EasyModbus.ModbusClient.ConvertFloatToTwoRegisters((float)1.22));
</summary>
<param name="floatValue">Float value which has to be converted into two registers</param>
<returns>Register values</returns>
</member>
<member name="M:EasyModbus.ModbusClient.ConvertFloatToRegisters(System.Single,EasyModbus.ModbusClient.RegisterOrder)">
<summary>
Converts float to two ModbusRegisters Registers - Registers can be swapped
</summary>
<param name="floatValue">Float value which has to be converted into two registers</param>
<param name="registerOrder">Desired Word Order (Low Register first or High Register first</param>
<returns>Register values</returns>
</member>
<member name="M:EasyModbus.ModbusClient.ConvertIntToRegisters(System.Int32)">
<summary>
Converts 32 Bit Value to two ModbusRegisters
</summary>
<param name="intValue">Int value which has to be converted into two registers</param>
<returns>Register values</returns>
</member>
<member name="M:EasyModbus.ModbusClient.ConvertIntToRegisters(System.Int32,EasyModbus.ModbusClient.RegisterOrder)">
<summary>
Converts 32 Bit Value to two ModbusRegisters Registers - Registers can be swapped
</summary>
<param name="intValue">Double value which has to be converted into two registers</param>
<param name="registerOrder">Desired Word Order (Low Register first or High Register first</param>
<returns>Register values</returns>
</member>
<member name="M:EasyModbus.ModbusClient.ConvertLongToRegisters(System.Int64)">
<summary>
Converts 64 Bit Value to four ModbusRegisters
</summary>
<param name="longValue">long value which has to be converted into four registers</param>
<returns>Register values</returns>
</member>
<member name="M:EasyModbus.ModbusClient.ConvertLongToRegisters(System.Int64,EasyModbus.ModbusClient.RegisterOrder)">
<summary>
Converts 64 Bit Value to four ModbusRegisters - Registers can be swapped
</summary>
<param name="longValue">long value which has to be converted into four registers</param>
<param name="registerOrder">Desired Word Order (Low Register first or High Register first</param>
<returns>Register values</returns>
</member>
<member name="M:EasyModbus.ModbusClient.ConvertDoubleToRegisters(System.Double)">
<summary>
Converts 64 Bit double prec Value to four ModbusRegisters
</summary>
<param name="doubleValue">double value which has to be converted into four registers</param>
<returns>Register values</returns>
</member>
<member name="M:EasyModbus.ModbusClient.ConvertDoubleToRegisters(System.Double,EasyModbus.ModbusClient.RegisterOrder)">
<summary>
Converts 64 Bit double prec. Value to four ModbusRegisters - Registers can be swapped
</summary>
<param name="doubleValue">double value which has to be converted into four registers</param>
<param name="registerOrder">Desired Word Order (Low Register first or High Register first</param>
<returns>Register values</returns>
</member>
<member name="M:EasyModbus.ModbusClient.ConvertRegistersToString(System.Int32[],System.Int32,System.Int32)">
<summary>
Converts 16 - Bit Register values to String
</summary>
<param name="registers">Register array received via Modbus</param>
<param name="offset">First Register containing the String to convert</param>
<param name="stringLength">number of characters in String (must be even)</param>
<returns>Converted String</returns>
</member>
<member name="M:EasyModbus.ModbusClient.ConvertStringToRegisters(System.String)">
<summary>
Converts a String to 16 - Bit Registers
</summary>
<param name="registers">Register array received via Modbus</param>
<returns>Converted String</returns>
</member>
<member name="M:EasyModbus.ModbusClient.calculateCRC(System.Byte[],System.UInt16,System.Int32)">
<summary>
Calculates the CRC16 for Modbus-RTU
</summary>
<param name="data">Byte buffer to send</param>
<param name="numberOfBytes">Number of bytes to calculate CRC</param>
<param name="startByte">First byte in buffer to start calculating CRC</param>
</member>
<member name="M:EasyModbus.ModbusClient.ReadDiscreteInputs(System.Int32,System.Int32)">
<summary>
Read Discrete Inputs from Server device (FC2).
</summary>
<param name="startingAddress">First discrete input to read</param>
<param name="quantity">Number of discrete Inputs to read</param>
<returns>Boolean Array which contains the discrete Inputs</returns>
</member>
<member name="M:EasyModbus.ModbusClient.ReadCoils(System.Int32,System.Int32)">
<summary>
Read Coils from Server device (FC1).
</summary>
<param name="startingAddress">First coil to read</param>
<param name="quantity">Numer of coils to read</param>
<returns>Boolean Array which contains the coils</returns>
</member>
<member name="M:EasyModbus.ModbusClient.ReadHoldingRegisters(System.Int32,System.Int32)">
<summary>
Read Holding Registers from Master device (FC3).
</summary>
<param name="startingAddress">First holding register to be read</param>
<param name="quantity">Number of holding registers to be read</param>
<returns>Int Array which contains the holding registers</returns>
</member>
<member name="M:EasyModbus.ModbusClient.ReadInputRegisters(System.Int32,System.Int32)">
<summary>
Read Input Registers from Master device (FC4).
</summary>
<param name="startingAddress">First input register to be read</param>
<param name="quantity">Number of input registers to be read</param>
<returns>Int Array which contains the input registers</returns>
</member>
<member name="M:EasyModbus.ModbusClient.WriteSingleCoil(System.Int32,System.Boolean)">
<summary>
Write single Coil to Master device (FC5).
</summary>
<param name="startingAddress">Coil to be written</param>
<param name="value">Coil Value to be written</param>
</member>
<member name="M:EasyModbus.ModbusClient.WriteSingleRegister(System.Int32,System.Int32)">
<summary>
Write single Register to Master device (FC6).
</summary>
<param name="startingAddress">Register to be written</param>
<param name="value">Register Value to be written</param>
</member>
<member name="M:EasyModbus.ModbusClient.WriteMultipleCoils(System.Int32,System.Boolean[])">
<summary>
Write multiple coils to Master device (FC15).
</summary>
<param name="startingAddress">First coil to be written</param>
<param name="values">Coil Values to be written</param>
</member>
<member name="M:EasyModbus.ModbusClient.WriteMultipleRegisters(System.Int32,System.Int32[])">
<summary>
Write multiple registers to Master device (FC16).
</summary>
<param name="startingAddress">First register to be written</param>
<param name="values">register Values to be written</param>
</member>
<member name="M:EasyModbus.ModbusClient.ReadWriteMultipleRegisters(System.Int32,System.Int32,System.Int32,System.Int32[])">
<summary>
Read/Write Multiple Registers (FC23).
</summary>
<param name="startingAddressRead">First input register to read</param>
<param name="quantityRead">Number of input registers to read</param>
<param name="startingAddressWrite">First input register to write</param>
<param name="values">Values to write</param>
<returns>Int Array which contains the Holding registers</returns>
</member>
<member name="M:EasyModbus.ModbusClient.Disconnect">
<summary>
Close connection to Master Device.
</summary>
</member>
<member name="M:EasyModbus.ModbusClient.Finalize">
<summary>
Destructor - Close connection to Master Device.
</summary>
</member>
<member name="P:EasyModbus.ModbusClient.Connected">
<summary>
Returns "TRUE" if Client is connected to Server and "FALSE" if not. In case of Modbus RTU returns if COM-Port is opened
</summary>
</member>
<member name="P:EasyModbus.ModbusClient.IPAddress">
<summary>
Gets or Sets the IP-Address of the Server.
</summary>
</member>
<member name="P:EasyModbus.ModbusClient.Port">
<summary>
Gets or Sets the Port were the Modbus-TCP Server is reachable (Standard is 502).
</summary>
</member>
<member name="P:EasyModbus.ModbusClient.UDPFlag">
<summary>
Gets or Sets the UDP-Flag to activate Modbus UDP.
</summary>
</member>
<member name="P:EasyModbus.ModbusClient.UnitIdentifier">
<summary>
Gets or Sets the Unit identifier in case of serial connection (Default = 0)
</summary>
</member>
<member name="P:EasyModbus.ModbusClient.Baudrate">
<summary>
Gets or Sets the Baudrate for serial connection (Default = 9600)
</summary>
</member>
<member name="P:EasyModbus.ModbusClient.Parity">
<summary>
Gets or Sets the of Parity in case of serial connection
</summary>
</member>
<member name="P:EasyModbus.ModbusClient.StopBits">
<summary>
Gets or Sets the number of stopbits in case of serial connection
</summary>
</member>
<member name="P:EasyModbus.ModbusClient.ConnectionTimeout">
<summary>
Gets or Sets the connection Timeout in case of ModbusTCP connection
</summary>
</member>
<member name="P:EasyModbus.ModbusClient.SerialPort">
<summary>
Gets or Sets the serial Port
</summary>
</member>
<member name="P:EasyModbus.ModbusClient.LogFileFilename">
<summary>
Gets or Sets the Filename for the LogFile
</summary>
</member>
<member name="T:EasyModbus.Exceptions.SerialPortNotOpenedException">
<summary>
Exception to be thrown if serial port is not opened
</summary>
</member>
<member name="T:EasyModbus.Exceptions.ConnectionException">
<summary>
Exception to be thrown if Connection to Modbus device failed
</summary>
</member>
<member name="T:EasyModbus.Exceptions.FunctionCodeNotSupportedException">
<summary>
Exception to be thrown if Modbus Server returns error code "Function code not supported"
</summary>
</member>
<member name="T:EasyModbus.Exceptions.QuantityInvalidException">
<summary>
Exception to be thrown if Modbus Server returns error code "quantity invalid"
</summary>
</member>
<member name="T:EasyModbus.Exceptions.StartingAddressInvalidException">
<summary>
Exception to be thrown if Modbus Server returns error code "starting adddress and quantity invalid"
</summary>
</member>
<member name="T:EasyModbus.Exceptions.ModbusException">
<summary>
Exception to be thrown if Modbus Server returns error code "Function Code not executed (0x04)"
</summary>
</member>
<member name="T:EasyModbus.Exceptions.CRCCheckFailedException">
<summary>
Exception to be thrown if CRC Check failed
</summary>
</member>
<member name="T:EasyModbus.ModbusProtocol">
<summary>
Modbus Protocol informations.
</summary>
</member>
<member name="P:EasyModbus.TCPHandler.LocalIPAddress">
When making a server TCP listen socket, will listen to this IP address.
</member>
<member name="M:EasyModbus.TCPHandler.#ctor(System.Int32)">
<summary>
Listen to all network interfaces.
</summary>
<param name="port">TCP port to listen</param>
</member>
<member name="M:EasyModbus.TCPHandler.#ctor(System.Net.IPAddress,System.Int32)">
<summary>
Listen to a specific network interface.
</summary>
<param name="localIPAddress">IP address of network interface to listen</param>
<param name="port">TCP port to listen</param>
</member>
<member name="T:EasyModbus.ModbusServer">
<summary>
Modbus TCP Server.
</summary>
</member>
<member name="P:EasyModbus.ModbusServer.LocalIPAddress">
<summary>
When creating a TCP or UDP socket, the local IP address to attach to.
</summary>
</member>
<member name="P:EasyModbus.ModbusServer.LogFileFilename">
<summary>
Gets or Sets the Filename for the LogFile
</summary>
</member>
<member name="T:EasyModbus.StoreLogData">
<summary>
Store Log-Data in a File
</summary>
</member>
<member name="M:EasyModbus.StoreLogData.#ctor">
<summary>
Private constructor; Ensures the access of the class only via "instance"
</summary>
</member>
<member name="P:EasyModbus.StoreLogData.Instance">
<summary>
Returns the instance of the class (singleton)
</summary>
<returns>instance (Singleton)</returns>
</member>
<member name="M:EasyModbus.StoreLogData.Store(System.String)">
<summary>
Store message in Log-File
</summary>
<param name="message">Message to append to the Log-File</param>
</member>
<member name="M:EasyModbus.StoreLogData.Store(System.String,System.DateTime)">
<summary>
Store message in Log-File including Timestamp
</summary>
<param name="message">Message to append to the Log-File</param>
<param name="timestamp">Timestamp to add to the same Row</param>
</member>
<member name="P:EasyModbus.StoreLogData.Filename">
<summary>
Gets or Sets the Filename to Store Strings in a File
</summary>
</member>
</members>
</doc>

Binary file not shown.

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
</startup>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="HslCommunication" publicKeyToken="3d72ad3b6b5ec0e3" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-12.5.1.0" newVersion="12.5.1.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>

Binary file not shown.

Binary file not shown.

File diff suppressed because it is too large Load Diff

Binary file not shown.

View File

@@ -0,0 +1,24 @@
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
</startup>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="HslCommunication" publicKeyToken="3d72ad3b6b5ec0e3" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-12.5.1.0" newVersion="12.5.1.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-13.0.0.0" newVersion="13.0.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>

Binary file not shown.

BIN
SLZ_4/bin/Debug/SunnyUI.dll Normal file

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,425 @@
<?xml version="1.0"?>
<doc>
<assembly>
<name>EasyModbus</name>
</assembly>
<members>
<member name="T:EasyModbus.ModbusClient">
<summary>
Implements a ModbusClient.
</summary>
</member>
<member name="M:EasyModbus.ModbusClient.#ctor(System.String,System.Int32)">
<summary>
Constructor which determines the Master ip-address and the Master Port.
</summary>
<param name="ipAddress">IP-Address of the Master device</param>
<param name="port">Listening port of the Master device (should be 502)</param>
</member>
<member name="M:EasyModbus.ModbusClient.#ctor(System.String)">
<summary>
Constructor which determines the Serial-Port
</summary>
<param name="serialPort">Serial-Port Name e.G. "COM1"</param>
</member>
<member name="M:EasyModbus.ModbusClient.#ctor">
<summary>
Parameterless constructor
</summary>
</member>
<member name="M:EasyModbus.ModbusClient.Connect">
<summary>
Establish connection to Master device in case of Modbus TCP. Opens COM-Port in case of Modbus RTU
</summary>
</member>
<member name="M:EasyModbus.ModbusClient.Connect(System.String,System.Int32)">
<summary>
Establish connection to Master device in case of Modbus TCP.
</summary>
</member>
<member name="M:EasyModbus.ModbusClient.ConvertRegistersToFloat(System.Int32[])">
<summary>
Converts two ModbusRegisters to Float - Example: EasyModbus.ModbusClient.ConvertRegistersToFloat(modbusClient.ReadHoldingRegisters(19,2))
</summary>
<param name="registers">Two Register values received from Modbus</param>
<returns>Connected float value</returns>
</member>
<member name="M:EasyModbus.ModbusClient.ConvertRegistersToFloat(System.Int32[],EasyModbus.ModbusClient.RegisterOrder)">
<summary>
Converts two ModbusRegisters to Float, Registers can by swapped
</summary>
<param name="registers">Two Register values received from Modbus</param>
<param name="registerOrder">Desired Word Order (Low Register first or High Register first</param>
<returns>Connected float value</returns>
</member>
<member name="M:EasyModbus.ModbusClient.ConvertRegistersToInt(System.Int32[])">
<summary>
Converts two ModbusRegisters to 32 Bit Integer value
</summary>
<param name="registers">Two Register values received from Modbus</param>
<returns>Connected 32 Bit Integer value</returns>
</member>
<member name="M:EasyModbus.ModbusClient.ConvertRegistersToInt(System.Int32[],EasyModbus.ModbusClient.RegisterOrder)">
<summary>
Converts two ModbusRegisters to 32 Bit Integer Value - Registers can be swapped
</summary>
<param name="registers">Two Register values received from Modbus</param>
<param name="registerOrder">Desired Word Order (Low Register first or High Register first</param>
<returns>Connecteds 32 Bit Integer value</returns>
</member>
<member name="M:EasyModbus.ModbusClient.ConvertRegistersToLong(System.Int32[])">
<summary>
Convert four 16 Bit Registers to 64 Bit Integer value Register Order "LowHigh": Reg0: Low Word.....Reg3: High Word, "HighLow": Reg0: High Word.....Reg3: Low Word
</summary>
<param name="registers">four Register values received from Modbus</param>
<returns>64 bit value</returns>
</member>
<member name="M:EasyModbus.ModbusClient.ConvertRegistersToLong(System.Int32[],EasyModbus.ModbusClient.RegisterOrder)">
<summary>
Convert four 16 Bit Registers to 64 Bit Integer value - Registers can be swapped
</summary>
<param name="registers">four Register values received from Modbus</param>
<param name="registerOrder">Desired Word Order (Low Register first or High Register first</param>
<returns>Connected 64 Bit Integer value</returns>
</member>
<member name="M:EasyModbus.ModbusClient.ConvertRegistersToDouble(System.Int32[])">
<summary>
Convert four 16 Bit Registers to 64 Bit double prec. value Register Order "LowHigh": Reg0: Low Word.....Reg3: High Word, "HighLow": Reg0: High Word.....Reg3: Low Word
</summary>
<param name="registers">four Register values received from Modbus</param>
<returns>64 bit value</returns>
</member>
<member name="M:EasyModbus.ModbusClient.ConvertRegistersToDouble(System.Int32[],EasyModbus.ModbusClient.RegisterOrder)">
<summary>
Convert four 16 Bit Registers to 64 Bit double prec. value - Registers can be swapped
</summary>
<param name="registers">four Register values received from Modbus</param>
<param name="registerOrder">Desired Word Order (Low Register first or High Register first</param>
<returns>Connected double prec. float value</returns>
</member>
<member name="M:EasyModbus.ModbusClient.ConvertFloatToRegisters(System.Single)">
<summary>
Converts float to two ModbusRegisters - Example: modbusClient.WriteMultipleRegisters(24, EasyModbus.ModbusClient.ConvertFloatToTwoRegisters((float)1.22));
</summary>
<param name="floatValue">Float value which has to be converted into two registers</param>
<returns>Register values</returns>
</member>
<member name="M:EasyModbus.ModbusClient.ConvertFloatToRegisters(System.Single,EasyModbus.ModbusClient.RegisterOrder)">
<summary>
Converts float to two ModbusRegisters Registers - Registers can be swapped
</summary>
<param name="floatValue">Float value which has to be converted into two registers</param>
<param name="registerOrder">Desired Word Order (Low Register first or High Register first</param>
<returns>Register values</returns>
</member>
<member name="M:EasyModbus.ModbusClient.ConvertIntToRegisters(System.Int32)">
<summary>
Converts 32 Bit Value to two ModbusRegisters
</summary>
<param name="intValue">Int value which has to be converted into two registers</param>
<returns>Register values</returns>
</member>
<member name="M:EasyModbus.ModbusClient.ConvertIntToRegisters(System.Int32,EasyModbus.ModbusClient.RegisterOrder)">
<summary>
Converts 32 Bit Value to two ModbusRegisters Registers - Registers can be swapped
</summary>
<param name="intValue">Double value which has to be converted into two registers</param>
<param name="registerOrder">Desired Word Order (Low Register first or High Register first</param>
<returns>Register values</returns>
</member>
<member name="M:EasyModbus.ModbusClient.ConvertLongToRegisters(System.Int64)">
<summary>
Converts 64 Bit Value to four ModbusRegisters
</summary>
<param name="longValue">long value which has to be converted into four registers</param>
<returns>Register values</returns>
</member>
<member name="M:EasyModbus.ModbusClient.ConvertLongToRegisters(System.Int64,EasyModbus.ModbusClient.RegisterOrder)">
<summary>
Converts 64 Bit Value to four ModbusRegisters - Registers can be swapped
</summary>
<param name="longValue">long value which has to be converted into four registers</param>
<param name="registerOrder">Desired Word Order (Low Register first or High Register first</param>
<returns>Register values</returns>
</member>
<member name="M:EasyModbus.ModbusClient.ConvertDoubleToRegisters(System.Double)">
<summary>
Converts 64 Bit double prec Value to four ModbusRegisters
</summary>
<param name="doubleValue">double value which has to be converted into four registers</param>
<returns>Register values</returns>
</member>
<member name="M:EasyModbus.ModbusClient.ConvertDoubleToRegisters(System.Double,EasyModbus.ModbusClient.RegisterOrder)">
<summary>
Converts 64 Bit double prec. Value to four ModbusRegisters - Registers can be swapped
</summary>
<param name="doubleValue">double value which has to be converted into four registers</param>
<param name="registerOrder">Desired Word Order (Low Register first or High Register first</param>
<returns>Register values</returns>
</member>
<member name="M:EasyModbus.ModbusClient.ConvertRegistersToString(System.Int32[],System.Int32,System.Int32)">
<summary>
Converts 16 - Bit Register values to String
</summary>
<param name="registers">Register array received via Modbus</param>
<param name="offset">First Register containing the String to convert</param>
<param name="stringLength">number of characters in String (must be even)</param>
<returns>Converted String</returns>
</member>
<member name="M:EasyModbus.ModbusClient.ConvertStringToRegisters(System.String)">
<summary>
Converts a String to 16 - Bit Registers
</summary>
<param name="registers">Register array received via Modbus</param>
<returns>Converted String</returns>
</member>
<member name="M:EasyModbus.ModbusClient.calculateCRC(System.Byte[],System.UInt16,System.Int32)">
<summary>
Calculates the CRC16 for Modbus-RTU
</summary>
<param name="data">Byte buffer to send</param>
<param name="numberOfBytes">Number of bytes to calculate CRC</param>
<param name="startByte">First byte in buffer to start calculating CRC</param>
</member>
<member name="M:EasyModbus.ModbusClient.ReadDiscreteInputs(System.Int32,System.Int32)">
<summary>
Read Discrete Inputs from Server device (FC2).
</summary>
<param name="startingAddress">First discrete input to read</param>
<param name="quantity">Number of discrete Inputs to read</param>
<returns>Boolean Array which contains the discrete Inputs</returns>
</member>
<member name="M:EasyModbus.ModbusClient.ReadCoils(System.Int32,System.Int32)">
<summary>
Read Coils from Server device (FC1).
</summary>
<param name="startingAddress">First coil to read</param>
<param name="quantity">Numer of coils to read</param>
<returns>Boolean Array which contains the coils</returns>
</member>
<member name="M:EasyModbus.ModbusClient.ReadHoldingRegisters(System.Int32,System.Int32)">
<summary>
Read Holding Registers from Master device (FC3).
</summary>
<param name="startingAddress">First holding register to be read</param>
<param name="quantity">Number of holding registers to be read</param>
<returns>Int Array which contains the holding registers</returns>
</member>
<member name="M:EasyModbus.ModbusClient.ReadInputRegisters(System.Int32,System.Int32)">
<summary>
Read Input Registers from Master device (FC4).
</summary>
<param name="startingAddress">First input register to be read</param>
<param name="quantity">Number of input registers to be read</param>
<returns>Int Array which contains the input registers</returns>
</member>
<member name="M:EasyModbus.ModbusClient.WriteSingleCoil(System.Int32,System.Boolean)">
<summary>
Write single Coil to Master device (FC5).
</summary>
<param name="startingAddress">Coil to be written</param>
<param name="value">Coil Value to be written</param>
</member>
<member name="M:EasyModbus.ModbusClient.WriteSingleRegister(System.Int32,System.Int32)">
<summary>
Write single Register to Master device (FC6).
</summary>
<param name="startingAddress">Register to be written</param>
<param name="value">Register Value to be written</param>
</member>
<member name="M:EasyModbus.ModbusClient.WriteMultipleCoils(System.Int32,System.Boolean[])">
<summary>
Write multiple coils to Master device (FC15).
</summary>
<param name="startingAddress">First coil to be written</param>
<param name="values">Coil Values to be written</param>
</member>
<member name="M:EasyModbus.ModbusClient.WriteMultipleRegisters(System.Int32,System.Int32[])">
<summary>
Write multiple registers to Master device (FC16).
</summary>
<param name="startingAddress">First register to be written</param>
<param name="values">register Values to be written</param>
</member>
<member name="M:EasyModbus.ModbusClient.ReadWriteMultipleRegisters(System.Int32,System.Int32,System.Int32,System.Int32[])">
<summary>
Read/Write Multiple Registers (FC23).
</summary>
<param name="startingAddressRead">First input register to read</param>
<param name="quantityRead">Number of input registers to read</param>
<param name="startingAddressWrite">First input register to write</param>
<param name="values">Values to write</param>
<returns>Int Array which contains the Holding registers</returns>
</member>
<member name="M:EasyModbus.ModbusClient.Disconnect">
<summary>
Close connection to Master Device.
</summary>
</member>
<member name="M:EasyModbus.ModbusClient.Finalize">
<summary>
Destructor - Close connection to Master Device.
</summary>
</member>
<member name="P:EasyModbus.ModbusClient.Connected">
<summary>
Returns "TRUE" if Client is connected to Server and "FALSE" if not. In case of Modbus RTU returns if COM-Port is opened
</summary>
</member>
<member name="P:EasyModbus.ModbusClient.IPAddress">
<summary>
Gets or Sets the IP-Address of the Server.
</summary>
</member>
<member name="P:EasyModbus.ModbusClient.Port">
<summary>
Gets or Sets the Port were the Modbus-TCP Server is reachable (Standard is 502).
</summary>
</member>
<member name="P:EasyModbus.ModbusClient.UDPFlag">
<summary>
Gets or Sets the UDP-Flag to activate Modbus UDP.
</summary>
</member>
<member name="P:EasyModbus.ModbusClient.UnitIdentifier">
<summary>
Gets or Sets the Unit identifier in case of serial connection (Default = 0)
</summary>
</member>
<member name="P:EasyModbus.ModbusClient.Baudrate">
<summary>
Gets or Sets the Baudrate for serial connection (Default = 9600)
</summary>
</member>
<member name="P:EasyModbus.ModbusClient.Parity">
<summary>
Gets or Sets the of Parity in case of serial connection
</summary>
</member>
<member name="P:EasyModbus.ModbusClient.StopBits">
<summary>
Gets or Sets the number of stopbits in case of serial connection
</summary>
</member>
<member name="P:EasyModbus.ModbusClient.ConnectionTimeout">
<summary>
Gets or Sets the connection Timeout in case of ModbusTCP connection
</summary>
</member>
<member name="P:EasyModbus.ModbusClient.SerialPort">
<summary>
Gets or Sets the serial Port
</summary>
</member>
<member name="P:EasyModbus.ModbusClient.LogFileFilename">
<summary>
Gets or Sets the Filename for the LogFile
</summary>
</member>
<member name="T:EasyModbus.Exceptions.SerialPortNotOpenedException">
<summary>
Exception to be thrown if serial port is not opened
</summary>
</member>
<member name="T:EasyModbus.Exceptions.ConnectionException">
<summary>
Exception to be thrown if Connection to Modbus device failed
</summary>
</member>
<member name="T:EasyModbus.Exceptions.FunctionCodeNotSupportedException">
<summary>
Exception to be thrown if Modbus Server returns error code "Function code not supported"
</summary>
</member>
<member name="T:EasyModbus.Exceptions.QuantityInvalidException">
<summary>
Exception to be thrown if Modbus Server returns error code "quantity invalid"
</summary>
</member>
<member name="T:EasyModbus.Exceptions.StartingAddressInvalidException">
<summary>
Exception to be thrown if Modbus Server returns error code "starting adddress and quantity invalid"
</summary>
</member>
<member name="T:EasyModbus.Exceptions.ModbusException">
<summary>
Exception to be thrown if Modbus Server returns error code "Function Code not executed (0x04)"
</summary>
</member>
<member name="T:EasyModbus.Exceptions.CRCCheckFailedException">
<summary>
Exception to be thrown if CRC Check failed
</summary>
</member>
<member name="T:EasyModbus.ModbusProtocol">
<summary>
Modbus Protocol informations.
</summary>
</member>
<member name="P:EasyModbus.TCPHandler.LocalIPAddress">
When making a server TCP listen socket, will listen to this IP address.
</member>
<member name="M:EasyModbus.TCPHandler.#ctor(System.Int32)">
<summary>
Listen to all network interfaces.
</summary>
<param name="port">TCP port to listen</param>
</member>
<member name="M:EasyModbus.TCPHandler.#ctor(System.Net.IPAddress,System.Int32)">
<summary>
Listen to a specific network interface.
</summary>
<param name="localIPAddress">IP address of network interface to listen</param>
<param name="port">TCP port to listen</param>
</member>
<member name="T:EasyModbus.ModbusServer">
<summary>
Modbus TCP Server.
</summary>
</member>
<member name="P:EasyModbus.ModbusServer.LocalIPAddress">
<summary>
When creating a TCP or UDP socket, the local IP address to attach to.
</summary>
</member>
<member name="P:EasyModbus.ModbusServer.LogFileFilename">
<summary>
Gets or Sets the Filename for the LogFile
</summary>
</member>
<member name="T:EasyModbus.StoreLogData">
<summary>
Store Log-Data in a File
</summary>
</member>
<member name="M:EasyModbus.StoreLogData.#ctor">
<summary>
Private constructor; Ensures the access of the class only via "instance"
</summary>
</member>
<member name="P:EasyModbus.StoreLogData.Instance">
<summary>
Returns the instance of the class (singleton)
</summary>
<returns>instance (Singleton)</returns>
</member>
<member name="M:EasyModbus.StoreLogData.Store(System.String)">
<summary>
Store message in Log-File
</summary>
<param name="message">Message to append to the Log-File</param>
</member>
<member name="M:EasyModbus.StoreLogData.Store(System.String,System.DateTime)">
<summary>
Store message in Log-File including Timestamp
</summary>
<param name="message">Message to append to the Log-File</param>
<param name="timestamp">Timestamp to add to the same Row</param>
</member>
<member name="P:EasyModbus.StoreLogData.Filename">
<summary>
Gets or Sets the Filename to Store Strings in a File
</summary>
</member>
</members>
</doc>

Binary file not shown.

File diff suppressed because it is too large Load Diff

Binary file not shown.

Binary file not shown.

File diff suppressed because it is too large Load Diff

Binary file not shown.

View File

@@ -0,0 +1,24 @@
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
</startup>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="HslCommunication" publicKeyToken="3d72ad3b6b5ec0e3" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-12.5.1.0" newVersion="12.5.1.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-13.0.0.0" newVersion="13.0.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>

Binary file not shown.

Binary file not shown.

BIN
SLZ_4/icon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

8
SLZ_4/packages.config Normal file
View File

@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="HslCommunication" version="12.5.1" targetFramework="net472" />
<package id="Microsoft.Office.Interop.Excel" version="15.0.4795.1001" targetFramework="net472" />
<package id="Newtonsoft.Json" version="13.0.2" targetFramework="net472" />
<package id="SunnyUI" version="3.8.7" targetFramework="net472" />
<package id="SunnyUI.Common" version="3.8.7" targetFramework="net472" />
</packages>