init: 潍柴发动机线 中央控制程序 项目首次入库

This commit is contained in:
XingCheng3
2026-06-08 12:05:16 +08:00
commit 196c66b9ff
547 changed files with 379162 additions and 0 deletions

View File

@@ -0,0 +1,324 @@
<?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>{A8D0B4EF-E223-4B9A-B2D9-0156B7B8B073}</ProjectGuid>
<OutputType>WinExe</OutputType>
<RootNamespace>CentralControl</RootNamespace>
<AssemblyName>AMS_CentralControl</AssemblyName>
<TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<Deterministic>true</Deterministic>
<PublishUrl>publish\</PublishUrl>
<Install>true</Install>
<InstallFrom>Disk</InstallFrom>
<UpdateEnabled>false</UpdateEnabled>
<UpdateMode>Foreground</UpdateMode>
<UpdateInterval>7</UpdateInterval>
<UpdateIntervalUnits>Days</UpdateIntervalUnits>
<UpdatePeriodically>false</UpdatePeriodically>
<UpdateRequired>false</UpdateRequired>
<MapFileExtensions>true</MapFileExtensions>
<ApplicationRevision>0</ApplicationRevision>
<ApplicationVersion>1.0.0.%2a</ApplicationVersion>
<IsWebBootstrapper>false</IsWebBootstrapper>
<UseApplicationTrust>false</UseApplicationTrust>
<BootstrapperEnabled>true</BootstrapperEnabled>
<TargetFrameworkProfile />
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>..\WC_AssembleControl_Exe\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</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>
</PropertyGroup>
<PropertyGroup>
<ApplicationIcon>任务管理.ico</ApplicationIcon>
</PropertyGroup>
<PropertyGroup />
<PropertyGroup>
<ApplicationManifest>app.manifest</ApplicationManifest>
</PropertyGroup>
<ItemGroup>
<Reference Include="BasicData">
<HintPath>..\DLL\BasicData.dll</HintPath>
</Reference>
<Reference Include="BouncyCastle.Crypto">
<HintPath>..\DLL\BouncyCastle.Crypto.dll</HintPath>
</Reference>
<Reference Include="ConLink">
<HintPath>..\DLL\ConLink.dll</HintPath>
</Reference>
<Reference Include="DataLinkMesWork">
<HintPath>..\DLL\DataLinkMesWork.dll</HintPath>
</Reference>
<Reference Include="ICSharpCode.SharpZipLib">
<HintPath>..\DLL\ICSharpCode.SharpZipLib.dll</HintPath>
</Reference>
<Reference Include="MesWork.DeviceDriver">
<HintPath>..\DLL\MesWork.DeviceDriver.dll</HintPath>
</Reference>
<Reference Include="MesWork.MQTT">
<HintPath>..\DLL\MesWork.MQTT.dll</HintPath>
</Reference>
<Reference Include="MQTTnet">
<HintPath>..\DLL\MQTTnet.dll</HintPath>
</Reference>
<Reference Include="MQTTnet.Extensions.ManagedClient">
<HintPath>..\DLL\MQTTnet.Extensions.ManagedClient.dll</HintPath>
</Reference>
<Reference Include="Newtonsoft.Json">
<HintPath>..\DLL\Newtonsoft.Json.dll</HintPath>
</Reference>
<Reference Include="NPOI">
<HintPath>..\DLL\NPOI.dll</HintPath>
</Reference>
<Reference Include="NPOI.OOXML">
<HintPath>..\DLL\NPOI.OOXML.dll</HintPath>
</Reference>
<Reference Include="NPOI.OpenXml4Net">
<HintPath>..\DLL\NPOI.OpenXml4Net.dll</HintPath>
</Reference>
<Reference Include="NPOI.OpenXmlFormats">
<HintPath>..\DLL\NPOI.OpenXmlFormats.dll</HintPath>
</Reference>
<Reference Include="Opc.Ua.Client">
<HintPath>..\DLL\Opc.Ua.Client.dll</HintPath>
</Reference>
<Reference Include="Opc.Ua.Configuration">
<HintPath>..\DLL\Opc.Ua.Configuration.dll</HintPath>
</Reference>
<Reference Include="Opc.Ua.Core">
<HintPath>..\DLL\Opc.Ua.Core.dll</HintPath>
</Reference>
<Reference Include="OpcUaHelper">
<HintPath>..\DLL\OpcUaHelper.dll</HintPath>
</Reference>
<Reference Include="Rhino3dm">
<HintPath>..\DLL\Rhino3dm.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Buffers, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\DLL\System.Buffers.dll</HintPath>
</Reference>
<Reference Include="System.Configuration" />
<Reference Include="System.Core" />
<Reference Include="System.Data" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="System.Drawing" />
<Reference Include="System.Net.Http" />
<Reference Include="System.Net.Http.Formatting, Version=5.2.7.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\DLL\System.Net.Http.Formatting.dll</HintPath>
</Reference>
<Reference Include="System.Runtime.CompilerServices.Unsafe, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\DLL\System.Runtime.CompilerServices.Unsafe.dll</HintPath>
</Reference>
<Reference Include="System.Runtime.InteropServices.RuntimeInformation" />
<Reference Include="System.Web.Cors">
<HintPath>..\DLL\System.Web.Cors.dll</HintPath>
</Reference>
<Reference Include="System.Web.Extensions" />
<Reference Include="System.Web.Http">
<HintPath>..\DLL\System.Web.Http.dll</HintPath>
</Reference>
<Reference Include="System.Web.Http.Cors">
<HintPath>..\DLL\System.Web.Http.Cors.dll</HintPath>
</Reference>
<Reference Include="System.Web.Http.SelfHost">
<HintPath>..\DLL\System.Web.Http.SelfHost.dll</HintPath>
</Reference>
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" />
<Reference Include="System.Xml.Linq" />
<Reference Include="Ubiety.Dns.Core">
<HintPath>..\DLL\Ubiety.Dns.Core.dll</HintPath>
</Reference>
<Reference Include="WeifenLuo.WinFormsUI.Docking">
<HintPath>..\DLL\WeifenLuo.WinFormsUI.Docking.dll</HintPath>
</Reference>
</ItemGroup>
<ItemGroup>
<Compile Include="Cache_Run\MES_QueryCache.cs" />
<Compile Include="Core\FuncOperation.cs" />
<Compile Include="Core\PLC_W.cs" />
<Compile Include="MES_A95\MIS_upload_QC.cs" />
<Compile Include="Page_Manager\Manager_Plan\PlanExecute.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Page_Manager\Manager_Plan\PlanExecute.Designer.cs">
<DependentUpon>PlanExecute.cs</DependentUpon>
</Compile>
<Compile Include="Page_Manager\Manager_Station\F_StationManage.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Page_Manager\Manager_Station\F_StationManage.Designer.cs">
<DependentUpon>F_StationManage.cs</DependentUpon>
</Compile>
<Compile Include="Core\PLC_R.cs" />
<Compile Include="MainGuide\MW.Register.cs" />
<Compile Include="MainGuide\MW.Event.cs" />
<Compile Include="MainGuide\MW.PageDelayRefresh.cs" />
<Compile Include="MES_A95\MIS_Statement.cs" />
<Compile Include="Page_Manager\Manager_Config\ParamConfigPage.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Page_Manager\Manager_Config\ParamConfigPage.Designer.cs">
<DependentUpon>ParamConfigPage.cs</DependentUpon>
</Compile>
<Compile Include="Core\MyPlcData.cs" />
<Compile Include="Core\OExcel.cs" />
<Compile Include="Core\Tools.cs" />
<Compile Include="WebAPI\AnalysisMsg.cs" />
<Compile Include="WebAPI\CALL_Interfalce_WebAPI.cs" />
<Compile Include="WebAPI\HttpCli.cs" />
<Compile Include="WebAPI\InitServer.cs" />
<Compile Include="WebAPI\IOrderController.cs" />
<Compile Include="WebAPI\PP.cs" />
<Compile Include="数据测试\F_TestPage.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="数据测试\F_TestPage.Designer.cs">
<DependentUpon>F_TestPage.cs</DependentUpon>
</Compile>
<Compile Include="Init\Hanger.cs" />
<Compile Include="Page_Manager\Manager_Log\LogRecord.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Page_Manager\Manager_Log\LogRecord.Designer.cs">
<DependentUpon>LogRecord.cs</DependentUpon>
</Compile>
<Compile Include="MES_A95\MIS_Device.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="MES_A95\MIS_Save_QC.cs" />
<Compile Include="Sql_Biz\MES_ExecuteDB.cs" />
<Compile Include="Page_Manager\Manager_Monitor\TagDataEngineStatusShowDialog.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Page_Manager\Manager_Monitor\TagDataEngineStatusShowDialog.Designer.cs">
<DependentUpon>TagDataEngineStatusShowDialog.cs</DependentUpon>
</Compile>
<Compile Include="MainGuide\MW.Lyout.cs" />
<Compile Include="MainGuide\MW.OnStart.cs" />
<Compile Include="Core\AppConfig.cs" />
<Compile Include="MES_A95\MIS_Funtion.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="DC_A95_Page.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="DC_A95_Page.Designer.cs">
<DependentUpon>DC_A95_Page.cs</DependentUpon>
</Compile>
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Core\TagTypeCodeID.cs" />
<Compile Include="Core\SqlOperation.cs" />
<Compile Include="Core\From_Opera.cs" />
<Compile Include="弹出窗口\D_Station.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="弹出窗口\D_Station.Designer.cs">
<DependentUpon>D_Station.cs</DependentUpon>
</Compile>
<EmbeddedResource Include="Page_Manager\Manager_Config\ParamConfigPage.resx">
<DependentUpon>ParamConfigPage.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Page_Manager\Manager_Plan\PlanExecute.resx">
<DependentUpon>PlanExecute.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Page_Manager\Manager_Station\F_StationManage.resx">
<DependentUpon>F_StationManage.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Include="DC_A95_Page.resx">
<DependentUpon>DC_A95_Page.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Include="数据测试\F_TestPage.resx">
<DependentUpon>F_TestPage.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Page_Manager\Manager_Log\LogRecord.resx">
<DependentUpon>LogRecord.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Page_Manager\Manager_Monitor\TagDataEngineStatusShowDialog.resx">
<DependentUpon>TagDataEngineStatusShowDialog.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>
<EmbeddedResource Include="弹出窗口\D_Station.resx">
<DependentUpon>D_Station.cs</DependentUpon>
</EmbeddedResource>
<None Include="App.config" />
<None Include="app.manifest" />
<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>
<Content Include="任务管理.ico" />
</ItemGroup>
<ItemGroup>
<WCFMetadata Include="Connected Services\" />
</ItemGroup>
<ItemGroup>
<BootstrapperPackage Include=".NETFramework,Version=v4.6.1">
<Visible>False</Visible>
<ProductName>Microsoft .NET Framework 4.6.1 %28x86 和 x64%29</ProductName>
<Install>true</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
<Visible>False</Visible>
<ProductName>.NET Framework 3.5 SP1</ProductName>
<Install>false</Install>
</BootstrapperPackage>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\MW_Log\01_MW_Log.csproj">
<Project>{1ac112c4-2400-4d03-a26d-2e3ace6fe6d4}</Project>
<Name>01_MW_Log</Name>
</ProjectReference>
<ProjectReference Include="..\SAP\SYNC_ProductPlan_AMS.csproj">
<Project>{5C516CC1-ABD5-4561-84C0-8B19B3DE6FA1}</Project>
<Name>SYNC_ProductPlan_AMS</Name>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<PackageReference Include="S7netplus">
<Version>0.20.0</Version>
</PackageReference>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>

32
SCADA/App.config Normal file
View File

@@ -0,0 +1,32 @@
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<appSettings>
<add key="NotHandlerSignal" value="0" />
<add key="IsDemoMesServer" value="1" />
<add key="IsAllowWrite" value="1" />
<add key="BasicDataTableFile" value="WC_CONTROL.xlsx" />
<!--是启用写监控报错日志-->
<add key="IsWriteMonitorLog" value="0" />
<add key="IsWriteLog4" value="1" />
<!--数据库连接-->
<!--<add key="ConnectionString" value="server=.\V2019;database=WC_WP12T_13L;uid=sa;pwd=126.com;Connection Reset=FALSE;Max Pool Size = 1000" />-->
<add key="ConnectionString" value="server=.,1333;database=WC_WP12T_13L;uid=sa;pwd=126.com;Connection Reset=FALSE;Max Pool Size = 1000" />
<!--上线工位名称-->
<add key="OPCodes_LineSet" value="OP3020" />
<add key="LineID_Product" value="120000001" />
<!--BOM接口 测试环境-->
<add key="WebAPI_Url_Boms" value="http://10.0.11.40:9000/open/listBoms" />
<!--BOM接口 正式环境-->
<!--<add key="WebAPI_Url_Boms" value="http://mes4api.weichai.com/open/listBoms" />-->
<add key="WebAPI_Url_Quality" value="http://mes4api.weichai.com/open/saveTwoPlant" />
<add key="ProgramPartial" value="2" />
<add key="WebSvrPort" value="9981" />
</appSettings>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8" />
</startup>
</configuration>

View File

@@ -0,0 +1,134 @@
using DC_A95.MES_A95;
using NPOI.OpenXmlFormats.Dml;
using NPOI.Util;
using Opc.Ua;
using OpcBasic;
using Rhino.DocObjects;
using SlMesDbIterface;
using System;
using System.Collections;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
using SystemFramework;
/// <summary>
///
/// </summary>
namespace MesWork
{
/// <summary>
///
/// </summary>
public class MES_QueryCache
{
/// <summary>
/// 根据发动机编号,获取计划信息
/// </summary>
/// <param name="engineNo"></param>
/// <returns></returns>
public static void Get_ProductPlan_ByEngineNo(string engineNo, out string engineTypeNo, out string orderNum, out int orderNo, out int orderSum,out int if_codetest,out int if_hottest)
{
engineTypeNo = "";
orderNum = "";
orderNo = -1;
orderSum = -1;
if_codetest=0;
if_hottest=0;
var sql =
$" SELECT" +
$" [订单类型],[生产日期],[班次],[上线序号],[上线总排序]" +
$" ,[发动机流水号],[机型号],[托盘号],[订单号],[订单序号],[订单数量]" +
$" ,[起始流水号],[终止流水号],[创建时间],[执行状态],[状态变更时间],[操作标记],isnull([是否冷试],0) as 是否冷试,isnull([是否热试],0) as 是否热试" +
$" FROM [潍柴_接口_生产计划_执行计划]" +
$" WHERE [发动机流水号] = '{engineNo}'";
SqlOperation.ExecuteSql(sql, out DataTable dt, out string err);
if (dt.Rows.Count > 0)
{
engineTypeNo = dt.Rows[0]["机型号"].ToString();
orderNum = dt.Rows[0]["订单号"].ToString();
orderNo = int.Parse(dt.Rows[0]["订单序号"].ToString());
orderSum = int.Parse(dt.Rows[0]["订单数量"].ToString());
if_codetest= int.Parse(dt.Rows[0]["是否冷试"].ToString());
if_hottest = int.Parse(dt.Rows[0]["是否热试"].ToString());
}
if (err.Length > 0)
{
LogRecord.LogRecord.Insert_Log(Type_Log.Alarm, "", $"Get_ProductPlan_ByEngineNo 报错!,,{err}");
}
}
/// <summary>
/// 根据工位号,获取工序信息
/// </summary>
/// <param name="stationName"></param>
/// <param name="processNum"></param>
/// <param name="processName"></param>
public static void Get_ProductProcess_ByOP(string opCode, out string processCode, out string processName, out string opName, out string AreaCode)
{
processCode = "";
processName = "";
opName = "";
AreaCode = "";
var sql = $"SELECT [工序号],[工序名称],[工位名称],[区域编码] FROM [MES_计划BOM_工位与名称] WHERE [工位号]='{opCode}'";
SqlOperation.ExecuteSql(sql, out DataTable dt, out string err);
if (dt.Rows.Count > 0)
{
processCode = dt.Rows[0]["工序号"].ToString();
processName = dt.Rows[0]["工序名称"].ToString();
opName = dt.Rows[0]["工位名称"].ToString();
AreaCode = dt.Rows[0]["区域编码"].ToString();
}
if (err.Length > 0)
{
LogRecord.LogRecord.Insert_Log(Type_Log.Alarm, "", $"Get_ProductProcess_ByOP报错{err}");
}
}
//public static DataTable Get_QCData_Configure(string opCode)
//{
// var sql = $"SELECT [修改时间],[机型号],[工序编号],[工序名称],[工位编号],[工位名称],[数据编码],[组顺序号],[列位置],[变量排序]," +
// $"[测量位置],[测量项目],[数据单位],[理论值],[下限值],[上限值],[数据说明]" +
// $" FROM [大柴_质量数据_配置信息]" +
// $" WHERE 工位编号='{opCode}'";
// SqlOperation.ExecuteSql(sql, out DataTable dt, out string err);
// return dt;
//}
public static int Get_EngineTypeID(string EngineType)
{
var sql = $"SELECT [AID] FROM [配方_大柴_机型] WHERE [机型号]='{EngineType}'";
SqlOperation.ExecuteSql(sql, out DataTable dt, out string err);
if(dt.Rows.Count>0)return int.Parse(dt.Rows[0][0].ToString());
else return 0;
}
public static void Get_StationInfo(string OPName, out string PLC, out string StartDB)
{
var rows = MesWorkForm.dt_OPNameInfo.Select($"工位号='{OPName}'");
if (rows.Length > 0)
{
PLC = rows[0]["PLC"].ToString();
StartDB = "DB" + rows[0]["工位起始DB号"].ToString();
}
else
{
PLC = "";
StartDB = "";
}
}
public static void Get_OPCode_ByAGVCode(string agvcode, out string OPCode)
{
string sql = $"SELECT [操作工位] FROM [大柴_上线记录_外装线] WHERE AGV号={agvcode}";
SqlOperation.ExecuteSql(sql, out DataTable dt, out string err);
if (dt.Rows.Count > 0)
{
OPCode = dt.Rows[0][0].ToString();
}
else OPCode = "";
}
}
}

477
SCADA/Core/AppConfig.cs Normal file
View File

@@ -0,0 +1,477 @@
using DataLinkMesWork;
using ExternalDataSync;
using NPOI.POIFS.Properties;
using OpcBasic;
using System;
using System.Collections;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.IO;
using System.Threading;
using System.Windows.Forms;
using SystemFramework;
using static System.Configuration.ConfigurationManager;
namespace MesWork
{
/// <summary>
///
/// </summary>
public partial class Temp {
public static MesWorkForm mesWorkForm = null;
}
/// <summary>
/// 配置信息
/// </summary>
public partial class MesWorkForm
{
public static int workerThreads = 4000;
public static int completionPortThreads = 2000;
public static string NotHandlerSignal = AppSettings["NotHandlerSignal"];
public static string BasicDataTableFile = AppSettings["BasicDataTableFile"];
public static int IsDemoMesServer = Convert.ToInt32(AppSettings["IsDemoMesServer"]);
public static int IsAllowWrite = Convert.ToInt32(AppSettings["IsAllowWrite"]);
public static int IsWriteMonitorLog = Convert.ToInt32(AppSettings["IsWriteMonitorLog"]);
public static int IsWriteLog4 = Convert.ToInt32(AppSettings["IsWriteLog4"]);
public static string ConnectionString = AppSettings["ConnectionString"];
public static string LineID_Product = AppSettings["LineID_Product"];
//所有上线工位的工位名称
public static string OPCodes_LineSet = AppSettings["OPCodes_LineSet"];
public static string WebAPI_Url_Boms = AppSettings["WebAPI_Url_Boms"];
public static string WebAPI_Url_Quality = AppSettings["WebAPI_Url_Quality"];
public static string ProgramPartial = AppSettings["ProgramPartial"];
public static int WebSvrPort = Convert.ToInt32(AppSettings["WebSvrPort"]);
public static Color color_Faw = Color.FromArgb(0, 44, 101);//蓝色大众0,44,101
public static Color color_Good = Color.FromArgb(132, 185, 235);//浅蓝,自定义
public static Color color_Wait = Color.FromArgb(240, 230, 140);//淡黄,显示等待状态
public static Color color_Bad = SystemColors.ActiveBorder;//灰色,显示操作过程
public static Color color_Control = SystemColors.Control;//控件默认颜色
public static Color color_Grey = Color.FromArgb(192, 192, 192);//灰色Table底色
public static Color color_Green = Color.FromArgb(22, 161, 136);//绿色
public static Color color_Yellow = Color.FromArgb(246, 227, 74);//黄色
public static Color color_Red = Color.FromArgb(255, 0, 0);//红色
/// <summary>
///
/// </summary>
public static ConcurrentQueue<OpcData.CustomeEvetnArgs> taskSql = new ConcurrentQueue<OpcData.CustomeEvetnArgs>();
/// <summary>
/// 在线状态
/// </summary>
public static bool OnLine_Sql = false;
/// <summary>
/// PMC列表
/// </summary>
public static DataTable dt_pmc_Simplify = null;
/// <summary>
/// PLC数据
/// </summary>
public static DataTable dt_PLC_Data = null;
/// <summary>
/// PMC列表
/// </summary>
public static Hashtable ht_PLM_Old = new Hashtable();
/// <summary>
/// PMC列表
/// </summary>
public static Hashtable ht_PLM_Curr = new Hashtable();
/// <summary>
/// ht_OpName_PMCReadTagIDArray
/// </summary>
public static Hashtable ht_OpName_PMCReadTagIDArray = new Hashtable();
/// <summary>
/// 工位打开记录
/// </summary>
public static List<String> list_OpenForm = new List<String>();
/// <summary>
/// IP和工位号的对应关系
/// </summary>
public static Dictionary<String, List<String>> G_DC_IP_OP = null;
/// <summary>
/// 设备的在线状态
/// </summary>
public static Hashtable ht_IP_OnLine = new Hashtable();
/// <summary>
/// 任务类型信息
/// </summary>
public static Hashtable ht_TaskTypeInfo = new Hashtable();
/// <summary>
/// 工位的自动信号
/// </summary>
public static Hashtable ht_Signal__Station_Auto = new Hashtable();
/// <summary>
/// 工位的运行信号
/// </summary>
public static Hashtable ht_Signal__Station_Running = new Hashtable();
/// <summary>
/// 工位的手动信号
/// </summary>
public static Hashtable ht_Signal__Station_Manual = new Hashtable();
/// <summary>
/// 工位的报警信号
/// </summary>
public static Hashtable ht_Signal__Station_Alarm = new Hashtable();
/// <summary>
/// 工位的掉线信号
/// </summary>
public static Hashtable ht_Signal__Station_OffLine = new Hashtable();
/// <summary>
/// 主界面显示的当前上线型号
/// </summary>
public static string RunSort = "6DM-1";
/// <summary>
/// 允许移动
/// </summary>
public static bool allowDrag = false;
/// <summary>
/// 鼠标状态
/// </summary>
private static bool isMouseDown = false;
/// <summary>
/// 记录鼠标指针的坐标
/// </summary>
private static Point mouseOffset;
/// <summary>
/// 工位内容
/// </summary>
public static Hashtable ht_Station_Content = null;
/// <summary>
/// 工位文本描述
/// </summary>
public static Hashtable ht_Station_Label = null;
/// <summary>
/// Agv的DB地址
/// </summary>
public static DataTable dt_OPNameInfo = null;
/// <summary>
/// 监控数据的所有变化,从这里产生
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
public override void OPCTagData_TagDataOnChangeMIS(object sender, OpcData.CustomeEvetnArgs e)
{
//ThreadPool.QueueUserWorkItem(new WaitCallback(MIS_Funtion), e);
//// 设备状态日志
//ThreadPool.QueueUserWorkItem(TagTypeCodeID_TagDataOnChange, e);
MesWorkForm.taskSql.Enqueue(e);
}
/// <summary>
/// 定时触发检测PLC在线状态周期3 s
/// </summary>
/// <param name="sender"></param>
/// <param name="eState"></param>
public override void PlcStateEvent(object sender, OpcData.PlcStateEvetnArgs eState)
{
ThreadPool.QueueUserWorkItem(new WaitCallback(MIS_Device), eState);
}
/// <summary>
///
/// </summary>
/// <param name="t"></param>
/// <param name="location"></param>
/// <param name="content"></param>
public override void E_WriteLog(Enum_LogType t, string location, string content)
{
if (content .Contains("GetTagIDByTagTypeCodeID()"))
{
return;
}
WriteLog_Info(t.ToString(), $"<[<{location}>]>{content}");
}
/// <summary>
///
/// </summary>
[STAThread]
static void Main()
{
new System.Threading.Mutex(true, $"WC_MES_{MesWorkForm.ProgramPartial}1", out bool bCanRun);
if (!bCanRun)
{
MessageBox.Show("MES采集系统 已经在运行!不可重复启动!");
return;
}
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(Temp.mesWorkForm = new MesWorkForm());
}
/// <summary>
/// 读写取方法
/// </summary>
/// <param name="readWhat"></param>
/// <param name="opOrIp"></param>
private void DemoRead(string doWhat, string opOrIp)
{
try
{
string opName = "OP1010";
object tagValue = 1;
bool result = false;
ConcurrentDictionary<string, object> tagAdrListTagFormat = null;
switch (doWhat)
{
case "TagID":
tagValue = ReadPLC("71010001");
result = WritePLC("71010001", tagValue);
break;
case "TagTypeCodeID":
tagValue = ReadPLC(10, opName);
result = WritePLC(10, opName, tagValue);
break;
//case "Cmd":
// tagValue = ReadPLC((int)EnumTagTypeCodeID.EngineID, opName);
// result = WritePLC((int)EnumTagTypeCodeID.EngineID, opName, tagValue);
// break;
case "OpAllTag"://OP所有点
tagAdrListTagFormat = ReadPLC_GroupData(opOrIp);
break;
case "OpMonitorTag"://OP监控点
tagAdrListTagFormat = ReadPLC_GroupMonitor(opOrIp);
break;
case "IpAllTag"://IP所有点
tagAdrListTagFormat = ReadPLC_IpTag(opOrIp);
break;
case "IpMonitorTag"://IP监控点
tagAdrListTagFormat = ReadPLC_IpMonitorTag(opOrIp);
break;
case "RegionRead"://按区域读取(起始地址 + 长度)
{
string tagStartAdr = "DB411.10";
ushort tagAdrListMaxLength = 100;
GetDbAndMaxLengthByOpName(opOrIp, out tagStartAdr, out tagAdrListMaxLength);
tagAdrListTagFormat = ReadQualityDataList(opOrIp, tagStartAdr, tagAdrListMaxLength);
}
break;
case "ReadBytes"://按区域读取(起始地址 + 长度)
{
string tagStartAdr = "DB411.10";
ushort tagAdrListMaxLength = 100;
var bates1 = ReadByteData_Op(opOrIp, tagStartAdr, tagAdrListMaxLength);
var bates2 = ReadByteData_Ip(opOrIp, tagStartAdr, tagAdrListMaxLength);
}
break;
case "WriteBytes"://按区域读取(起始地址 + 长度)
{
string tagStartAdr = "DB411.10";
var result1 = WritePLC_Bytes_Op(opOrIp, tagStartAdr, new byte[1024]);
var result2 = WritePLC_Bytes_Ip(opOrIp, tagStartAdr, new byte[1024]);
}
break;
default:
break;
}
//ReadByteData_Op(string opName, string startAdrr, ushort length)
foreach (System.Collections.Generic.KeyValuePair<string, object> de in tagAdrListTagFormat)//得到工位监控点哈希表
{
TagFormat TF = (TagFormat)de.Value;
string recResult = TF.OpName + " (" + TF.TagTypeCodeID + ")" + TF.TagValue.ToString(); ;
}
}
catch (System.Exception err)
{
ApplicationLog.WriteLog("listView_ShowQualityData_Init" + err);
}
}
/// <summary>
///
/// </summary>
/// <param name="args"></param>
/// <returns></returns>
private string Hello_You_All_Never_Know(string[] args)
{
return Guid.NewGuid().ToString();
}
/// <summary>
/// 测试按钮
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Button1_Click(object sender, System.EventArgs e)
{
var tagTypeCodeIDList = DriverCache[CacheType.Cache_OpTagTypeCodeIDList];
}
/// <summary>
/// 定义列
/// </summary>
/// <param name="dt_pmc"></param>
private void DatatableCol_Simplify(DataTable dt_pmc)
{
dt_pmc_Simplify = new DataTable();
dt_pmc_Simplify.Columns.Add("TagID");
dt_pmc_Simplify.Columns.Add("TagName");
dt_pmc_Simplify.Columns.Add("TagValue");
dt_pmc_Simplify.Columns.Add("工位号");
dt_pmc_Simplify.Columns.Add("数据来源");
dt_pmc_Simplify.Columns.Add("IP");
dt_pmc_Simplify.Columns.Add("TagTypeID");
dt_pmc_Simplify.Columns.Add("TagLong");
dt_pmc_Simplify.Columns.Add("DbName");
dt_pmc_Simplify.Columns.Add("变量类型");
dt_pmc_Simplify.Columns.Add("变量地址");
dt_pmc_Simplify.Columns.Add("变量其它");
dt_pmc_Simplify.Columns.Add("列位置");
dt_pmc_Simplify.Columns.Add("变量类型代码");
dt_pmc_Simplify.Columns.Add("变量类型名称");
dt_pmc_Simplify.Columns.Add("是否启用");
dt_pmc_Simplify.Columns.Add("是否监控");
var dt_pmcT = dt_pmc.Copy();
for (int i = 0; i < dt_pmcT.Rows.Count; i++)
{
var TagID = dt_pmcT.Rows[i]["TagID"].ToString();
var TagName = dt_pmcT.Rows[i]["TagName"].ToString();
var TagValue = "0";
var = dt_pmcT.Rows[i]["工位号"].ToString();
var = dt_pmcT.Rows[i]["数据来源"].ToString();
var IP = dt_pmcT.Rows[i]["IP"].ToString();
var TagTypeID = dt_pmcT.Rows[i]["TagTypeID"].ToString();
var TagLong = dt_pmcT.Rows[i]["TagLong"].ToString();
var DbName = dt_pmcT.Rows[i]["DbName"].ToString();
var = dt_pmcT.Rows[i]["变量类型"].ToString();
var = dt_pmcT.Rows[i]["变量地址"].ToString();
var = dt_pmcT.Rows[i]["变量其它"].ToString();
var = dt_pmcT.Rows[i]["列位置"].ToString();
var = dt_pmcT.Rows[i]["变量类型代码"].ToString();
var = dt_pmcT.Rows[i]["变量类型名称"].ToString();
var = dt_pmcT.Rows[i]["是否启用"].ToString();
var = dt_pmcT.Rows[i]["是否监控"].ToString();
ht_PLM_Old.Add(TagID, "-101");
dt_pmc_Simplify.Rows.Add(
TagID,
TagName,
TagValue,
,
,
IP ,
TagTypeID ,
TagLong ,
DbName ,
,
,
,
,
,
,
,
);
}
}
/// <summary>
/// 添加到窗体
/// </summary>
/// <param name="stationName"></param>
/// <param name="c"></param>
private void SetMember(string stationName, Control c)
{
panel_Lyout.Controls.Add(c);
if (c is Panel)
{
ht_Station_Content.Add(stationName, c);
}
if (c is Label)
{
ht_Station_Label.Add(stationName, c);
}
}
/// <summary>
/// 写入信号
/// </summary>
/// <param name="tagTypeCodeID"></param>
/// <param name="ststionName"></param>
/// <param name="value"></param>
public static void WritePLC_IF(int tagTypeCodeID,string ststionName,object value)
{
if (IsAllowWrite == 1)
{
WritePLC(tagTypeCodeID, ststionName, value);
}
}
public static string CVT_ReadValue(object value)
{
var result = "";
if (value == null)
{
return result;
}
if (value.ToString ().ToLower () == "true" | value.ToString().ToLower() == "1")
{
result = "1";
}
if (value.ToString().ToLower() == "false" | value.ToString().ToLower() == "0")
{
result = "0";
}
return result;
}
/// <summary>
/// 写日志
/// 2023.10.30.llx
/// </summary>
public static void WriteLog_Info(string type, string msg, Exception ex = null)
{
if (IsWriteLog4 == 1)
{
MW_Log.LoggerHelper.Info(type, msg, ex);
}
}
private void Loop()
{
while (true)
{
taskSql.TryDequeue(out OpcData.CustomeEvetnArgs e);
if (e != null)
{
MIS_Funtion(e);
TagTypeCodeID_TagDataOnChange(e);
}
if (taskSql.Count < 3)
{
Thread.Sleep(15);
}
}
}
public void UseMisFuntion(Object e)
{
MIS_Funtion(e);
}
}
}

25
SCADA/Core/From_Opera.cs Normal file
View File

@@ -0,0 +1,25 @@
using ExternalDataSync;
using MesWork;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
/// <summary>
///
/// </summary>
public enum From_Opera
{
/// <summary>
/// 增加
/// </summary>
Insert = 1,
/// <summary>
/// 修改
/// </summary>
Update = 2
}

View File

@@ -0,0 +1,54 @@
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace MesWork
{
/// <summary>
/// 功能操作
/// </summary>
public class FuncOperation
{
/// <summary>
/// 保存布局
/// </summary>
public static void SaveLyout()
{
foreach (DictionaryEntry item in MesWorkForm.ht_Station_Content)
{
var stationName = item.Key.ToString();
var control = (Panel)item.Value;
var px = control.Location.X;
var py = control.Location.Y;
ExecuteDB.SaveLyout_P(stationName, px, py);
}
foreach (DictionaryEntry item in MesWorkForm.ht_Station_Label)
{
var stationName = item.Key.ToString();
var control = (Label)item.Value;
var px = control.Location.X;
var py = control.Location.Y;
ExecuteDB.SaveLyout_PT(stationName, px, py);
}
}
}
}

130
SCADA/Core/MyPlcData.cs Normal file
View File

@@ -0,0 +1,130 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
namespace ConverterBytesAndStruct
{
#region QC_DATA TS
/// <summary>
/// 质量数据26个字节
/// </summary>
public class QC_DATA
{
/// <summary>
/// 工作类型1=拧紧2=压装4=测量8=试漏)
/// </summary>
public short Work_Type;
/// <summary>
/// 工作的程序号
/// </summary>
public short Progarm_Code;
/// <summary>
/// 具体的位置号
/// </summary>
public short Counter_Number;
/// <summary>
/// 工位被屏蔽
/// </summary>
public bool Bypass;
/// <summary>
/// 工位未工作
/// </summary>
public bool No_op;
/// <summary>
/// 工位工作完成且合格
/// </summary>
public bool Accept;
/// <summary>
/// 工位工作完成但不合格
/// </summary>
public bool Reject;
public byte SPARE1;
public short SPARE2;
/// <summary>
/// 质量数据1 (拧紧对应扭矩,压装对应压力,测量对应位移,试漏对应泄露率)
/// </summary>
public float QC_DATA1;
/// <summary>
/// 质量数据2 (拧紧对应转角,压装对应位移,测量无,试漏对应压力)
/// </summary>
public float QC_DATA2;
/// <summary>
/// 质量数据3
/// </summary>
public float QC_DATA3;
/// <summary>
/// 质量数据4
/// </summary>
public float QC_DATA4;
}
public class QC_DATA_OutSide
{
/// <summary>
/// 工作类型1=拧紧2=压装4=测量8=试漏)
/// </summary>
public short Work_Type;
/// <summary>
/// 工作的程序号
/// </summary>
public short Progarm_Code;
/// <summary>
/// 具体的位置号
/// </summary>
public short Counter_Number;
public short SPARE1;
public short SPARE2;
/// <summary>
/// 质量数据1 (拧紧对应扭矩,压装对应压力,测量对应位移,试漏对应泄露率)
/// </summary>
public float QC_DATA1;
/// <summary>
/// 质量数据2 (拧紧对应转角,压装对应位移,测量无,试漏对应压力)
/// </summary>
public float QC_DATA2;
/// <summary>
/// 质量数据3
/// </summary>
public float QC_DATA3;
/// <summary>
/// 质量数据4
/// </summary>
public float QC_DATA4;
}
/// <summary>
/// 时间戳 22
/// </summary>
public class TS
{
public byte Max_Len;
public byte Act_Len;
public char Month_B1;
public char Month_B0;
public char Slash1;
public char Day_B1;
public char Day_B0;
public char Slash2;
public char Fixed_dgt1;
public char Fixed_dgt2;
public char Year_B1;
public char Year_B0;
public char Null1;
public char Hour_B1;
public char Hour_B0;
public char Colon1;
public char Min_B1;
public char Min_B0;
public char Colon2;
public char Sec_B1;
public char Sec_B0;
public char Null2;
}
#endregion
}

517
SCADA/Core/OExcel.cs Normal file
View File

@@ -0,0 +1,517 @@
using NPOI.HPSF;
using NPOI.HSSF.UserModel;
using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel;
using System;
using System.Collections.Generic;
using System.Data;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace NPOITest
{
/// <summary>
/// Execl工具辅助类
/// </summary>
public class ExeclHelper
{
/// <summary>
/// 读取Execl数据到DataTable中
/// </summary>
/// <param name="filePath">指定Execl文件路径</param>
/// <param name="isColumnName">设置第一行是否是列名</param>
/// <returns>返回一个DataTable数据集</returns>
public static DataTable ExcelToDataTable(string filePath, string sheetName, bool isColumnName)
{
DataTable dataTable = null;
FileStream fs = null;
DataColumn column = null;
DataRow dataRow = null;
IWorkbook workbook = null;
ISheet sheet = null;
IRow row = null;
ICell cell = null;
int startRow = 0;
try
{
using (fs = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
{
// 2007版本
if (filePath.IndexOf(".xlsx") > 0)
workbook = new XSSFWorkbook(fs);
// 2003版本
else if (filePath.IndexOf(".xls") > 0)
workbook = new HSSFWorkbook(fs);
if (workbook != null)
{
sheet = workbook.GetSheet(sheetName);//读取第一个sheet当然也可以循环读取每个sheet
dataTable = new DataTable();
if (sheet != null)
{
int rowCount = sheet.LastRowNum;//总行数
if (rowCount > 0)
{
IRow firstRow = sheet.GetRow(0);//第一行
int cellCount = firstRow.LastCellNum;//列数
//构建datatable的列
if (isColumnName)
{
startRow = 1;//如果第一行是列名,则从第二行开始读取
for (int i = firstRow.FirstCellNum; i < cellCount; ++i)
{
cell = firstRow.GetCell(i);
if (cell != null)
{
if (cell.StringCellValue != null)
{
column = new DataColumn(cell.StringCellValue);
dataTable.Columns.Add(column);
}
}
}
}
else
{
for (int i = firstRow.FirstCellNum; i < cellCount; ++i)
{
column = new DataColumn("column" + (i + 1));
dataTable.Columns.Add(column);
}
}
//填充行
for (int i = startRow; i <= rowCount; ++i)
{
row = sheet.GetRow(i);
if (row == null) continue;
dataRow = dataTable.NewRow();
for (int j = row.FirstCellNum; j < cellCount; ++j)
{
cell = row.GetCell(j);
if (cell == null)
{
dataRow[j] = "";
}
else
{
//CellType(Unknown = -1,Numeric = 0,String = 1,Formula = 2,Blank = 3,Boolean = 4,Error = 5,)
switch (cell.CellType)
{
case CellType.Blank:
dataRow[j] = "";
break;
case CellType.Numeric:
short format = cell.CellStyle.DataFormat;
//对时间格式2015.12.5、2015/12/5、2015-12-5等的处理
if (format == 14 || format == 31 || format == 57 || format == 58)
dataRow[j] = cell.DateCellValue;
else
dataRow[j] = cell.NumericCellValue;
break;
case CellType.String:
dataRow[j] = cell.StringCellValue;
break;
}
}
}
dataTable.Rows.Add(dataRow);
}
}
}
}
}
return dataTable;
}
catch (Exception err)
{
if (fs != null)
{
fs.Close();
}
return null;
}
}
public static DataTable ExcelToDataTable(string filePath,int sheetIndex, bool isColumnName)
{
DataTable dataTable = null;
FileStream fs = null;
DataColumn column = null;
DataRow dataRow = null;
IWorkbook workbook = null;
ISheet sheet = null;
IRow row = null;
ICell cell = null;
int startRow = 0;
try
{
using (fs = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
{
// 2007版本
if (filePath.IndexOf(".xlsx") > 0)
workbook = new XSSFWorkbook(fs);
// 2003版本
else if (filePath.IndexOf(".xls") > 0)
workbook = new HSSFWorkbook(fs);
if (workbook != null)
{
sheet = workbook.GetSheetAt(sheetIndex);//读取第一个sheet当然也可以循环读取每个sheet
dataTable = new DataTable();
if (sheet != null)
{
int rowCount = sheet.LastRowNum;//总行数
if (rowCount > 0)
{
IRow firstRow = sheet.GetRow(0);//第一行
int cellCount = firstRow.LastCellNum;//列数
//构建datatable的列
if (isColumnName)
{
startRow = 1;//如果第一行是列名,则从第二行开始读取
for (int i = firstRow.FirstCellNum; i < cellCount; ++i)
{
cell = firstRow.GetCell(i);
if (cell != null)
{
if (cell.StringCellValue != null)
{
column = new DataColumn(cell.StringCellValue);
dataTable.Columns.Add(column);
}
}
}
}
else
{
for (int i = firstRow.FirstCellNum; i < cellCount; ++i)
{
column = new DataColumn("column" + (i + 1));
dataTable.Columns.Add(column);
}
}
//填充行
for (int i = startRow; i <= rowCount; ++i)
{
row = sheet.GetRow(i);
if (row == null) continue;
dataRow = dataTable.NewRow();
for (int j = row.FirstCellNum; j < cellCount; ++j)
{
cell = row.GetCell(j);
if (cell == null)
{
dataRow[j] = "";
}
else
{
//CellType(Unknown = -1,Numeric = 0,String = 1,Formula = 2,Blank = 3,Boolean = 4,Error = 5,)
switch (cell.CellType)
{
case CellType.Blank:
dataRow[j] = "";
break;
case CellType.Numeric:
short format = cell.CellStyle.DataFormat;
//对时间格式2015.12.5、2015/12/5、2015-12-5等的处理
if (format == 14 || format == 31 || format == 57 || format == 58 || format == 22)
dataRow[j] = cell.DateCellValue;
else
dataRow[j] = cell.NumericCellValue;
break;
case CellType.String:
dataRow[j] = cell.StringCellValue;
break;
}
}
}
dataTable.Rows.Add(dataRow);
}
}
}
}
}
return dataTable;
}
catch (Exception)
{
if (fs != null)
{
fs.Close();
}
return null;
}
}
/// <summary>
/// 将DataTable导出到Execl文档
/// </summary>
/// <param name="dt">传入一个DataTable数据集</param>
/// <returns>返回一个Bool类型的值表示是否导出成功</returns>
/// True表示导出成功Flase表示导出失败
public static bool DataTableToExcel(DataTable dt, string sheetName, string Outpath)
{
bool result = false;
IWorkbook workbook = null;
FileStream fs = null;
IRow row = null;
ISheet sheet = null;
ICell cell = null;
try
{
if (dt != null && dt.Rows.Count > 0)
{
workbook = new HSSFWorkbook();
sheet = workbook.CreateSheet(sheetName);//创建一个名称为Sheet0的表
int rowCount = dt.Rows.Count;//行数
int columnCount = dt.Columns.Count;//列数
//设置列头
row = sheet.CreateRow(0);//excel第一行设为列头
for (int c = 0; c < columnCount; c++)
{
cell = row.CreateCell(c);
cell.SetCellValue(dt.Columns[c].ColumnName);
}
//设置每行每列的单元格,
for (int i = 0; i < rowCount; i++)
{
row = sheet.CreateRow(i + 1);
for (int j = 0; j < columnCount; j++)
{
cell = row.CreateCell(j);//excel第二行开始写入数据
cell.SetCellValue(dt.Rows[i][j].ToString());
}
}
//向outPath输出数据
using (fs = File.OpenWrite(Outpath))
{
workbook.Write(fs);//向打开的这个xls文件中写入数据
result = true;
}
}
return result;
}
catch (Exception ex)
{
if (fs != null)
{
fs.Close();
}
return false;
}
}
/// <summary>
/// 读取Execl数据到DataTable(DataSet)中
/// </summary>
/// <param name="filePath">指定Execl文件路径</param>
/// <param name="isFirstLineColumnName">设置第一行是否是列名</param>
/// <returns>返回一个DataTable数据集</returns>
public static DataSet ExcelToDataSet(string filePath, bool isFirstLineColumnName)
{
DataSet dataSet = new DataSet();
int startRow = 0;
try
{
using (FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
{
IWorkbook workbook = null;
// 如果是2007+的Excel版本
if (filePath.IndexOf(".xlsx") > 0)
{
workbook = new XSSFWorkbook(fs);
}
// 如果是2003-的Excel版本
else if (filePath.IndexOf(".xls") > 0)
{
workbook = new HSSFWorkbook(fs);
}
if (workbook != null)
{
//循环读取Excel的每个sheet每个sheet页都转换为一个DataTable并放在DataSet中
for (int p = 0; p < workbook.NumberOfSheets; p++)
{
ISheet sheet = workbook.GetSheetAt(p);
DataTable dataTable = new DataTable();
dataTable.TableName = sheet.SheetName;
if (sheet != null)
{
int rowCount = sheet.LastRowNum;//获取总行数
if (rowCount > 0)
{
IRow firstRow = sheet.GetRow(0);//获取第一行
int cellCount = firstRow.LastCellNum;//获取总列数
//构建datatable的列
if (isFirstLineColumnName)
{
startRow = 1;//如果第一行是列名,则从第二行开始读取
for (int i = firstRow.FirstCellNum; i < cellCount; ++i)
{
ICell cell = firstRow.GetCell(i);
if (cell != null)
{
if (cell.StringCellValue != null)
{
DataColumn column = new DataColumn(cell.StringCellValue);
dataTable.Columns.Add(column);
}
}
}
}
else
{
for (int i = firstRow.FirstCellNum; i < cellCount; ++i)
{
DataColumn column = new DataColumn("column" + (i + 1));
dataTable.Columns.Add(column);
}
}
//填充行
for (int i = startRow; i <= rowCount; ++i)
{
IRow row = sheet.GetRow(i);
if (row == null) continue;
DataRow dataRow = dataTable.NewRow();
for (int j = row.FirstCellNum; j < cellCount; ++j)
{
ICell cell = row.GetCell(j);
if (cell == null)
{
dataRow[j] = "";
}
else
{
//CellType(Unknown = -1,Numeric = 0,String = 1,Formula = 2,Blank = 3,Boolean = 4,Error = 5,)
switch (cell.CellType)
{
case CellType.Blank:
dataRow[j] = "";
break;
case CellType.Numeric:
short format = cell.CellStyle.DataFormat;
//对时间格式2015.12.5、2015/12/5、2015-12-5等的处理
if (format == 14 || format == 31 || format == 57 || format == 58)
dataRow[j] = cell.DateCellValue;
else
dataRow[j] = cell.NumericCellValue;
break;
case CellType.String:
dataRow[j] = cell.StringCellValue;
break;
}
}
}
dataTable.Rows.Add(dataRow);
}
}
}
dataSet.Tables.Add(dataTable);
}
}
}
return dataSet;
}
catch (Exception err)
{
return null;
}
}
/// <summary>
/// 将DataTable(DataSet)导出到Execl文档
/// </summary>
/// <param name="dataSet">传入一个DataSet</param>
/// <param name="Outpath">导出路径(可以不加扩展名,不加默认为.xls</param>
/// <returns>返回一个Bool类型的值表示是否导出成功</returns>
/// True表示导出成功Flase表示导出失败
public static bool DataSetToExcel(DataSet dataSet, string Outpath)
{
bool result = false;
try
{
if (dataSet == null || dataSet.Tables == null || dataSet.Tables.Count == 0 || string.IsNullOrEmpty(Outpath))
throw new Exception("输入的DataSet或路径异常");
int sheetIndex = 0;
//根据输出路径的扩展名判断workbook的实例类型
IWorkbook workbook = null;
string pathExtensionName = Outpath.Trim().Substring(Outpath.Length - 5);
if (pathExtensionName.Contains(".xlsx"))
{
workbook = new XSSFWorkbook();
}
else if (pathExtensionName.Contains(".xls"))
{
workbook = new HSSFWorkbook();
}
else
{
Outpath = Outpath.Trim() + ".xls";
workbook = new HSSFWorkbook();
}
//将DataSet导出为Excel
foreach (DataTable dt in dataSet.Tables)
{
sheetIndex++;
if (dt != null && dt.Rows.Count > 0)
{
ISheet sheet = workbook.CreateSheet(string.IsNullOrEmpty(dt.TableName) ? ("sheet" + sheetIndex) : dt.TableName);//创建一个名称为Sheet0的表
int rowCount = dt.Rows.Count;//行数
int columnCount = dt.Columns.Count;//列数
//设置列头
IRow row = sheet.CreateRow(0);//excel第一行设为列头
for (int c = 0; c < columnCount; c++)
{
ICell cell = row.CreateCell(c);
cell.SetCellValue(dt.Columns[c].ColumnName);
}
//设置每行每列的单元格,
for (int i = 0; i < rowCount; i++)
{
row = sheet.CreateRow(i + 1);
for (int j = 0; j < columnCount; j++)
{
ICell cell = row.CreateCell(j);//excel第二行开始写入数据
cell.SetCellValue(dt.Rows[i][j].ToString());
}
}
}
}
//向outPath输出数据
using (FileStream fs = File.OpenWrite(Outpath))
{
workbook.Write(fs);//向打开的这个xls文件中写入数据
result = true;
}
return result;
}
catch (Exception ex)
{
return false;
}
}
}
}

67
SCADA/Core/PLC_R.cs Normal file
View File

@@ -0,0 +1,67 @@
using MesWork;
using Newtonsoft.Json;
using OpcBasic;
using System;
using System.Collections.Concurrent;
namespace DC_A95
{
public class PLC_R
{
/// <summary>
///
/// </summary>
/// <param name="opCode">工位号</param>
/// <param name="partCode">上线缸体码</param>
/// <param name="palletNo">托盘号</param>
/// <returns></returns>
public static bool Read_LineSet(string opCode, out string partCode, out int palletNo)
{
partCode = MesWorkForm.ReadPLC(120, opCode).ToString();
palletNo = Convert.ToInt32(MesWorkForm.ReadPLC(80, opCode));
return true;
}
public static string GetString_CleanGarbled(string inputStr)
{
return inputStr.Replace("\0", "").Replace("\n", "").Replace("\r", "").Replace(" ", "");
}
public static ConcurrentDictionary<string, TagFormat> ReadPLC_OpName(string opName)
{
if (MesWorkForm.IsDemoMesServer == 1)
{
return JsonConvert.DeserializeObject<
ConcurrentDictionary<string, TagFormat>
>(JsonConvert.SerializeObject(
PlcLinkForm.ReadPLC_GroupData(opName)
));
}
else
{
try
{
PlcLinkForm.GetDbAndMaxLengthByOpName(opName, out string tagStartAdr, out ushort tagAdrListMaxLength);
return JsonConvert.DeserializeObject<
ConcurrentDictionary<string, TagFormat>
>(JsonConvert.SerializeObject(PlcLinkForm.ReadQualityDataList(
opName
, tagStartAdr
, tagAdrListMaxLength
)
));
}
catch (Exception err)
{
return null;
}
}
}
}
}

65
SCADA/Core/PLC_W.cs Normal file
View File

@@ -0,0 +1,65 @@
using MesWork;
using System;
namespace DC_A95
{
public class PLC_W
{
/// <summary>
///
/// </summary>
/// <param name="opCode"></param>
/// <param name="partCode"></param>
/// <param name="palletNo"></param>
/// <returns></returns>
public static void Write_LineSetAlarm(string opCode, int errCode)
{
//112 发动机上线报警代码
//34 发动机上线报警标志
MesWorkForm.WritePLC_IF(112, opCode, errCode);
MesWorkForm.WritePLC_IF(34, opCode,true);
}
}
/// <summary>
///
/// </summary>
public enum Type_AlarmOnline
{
/// <summary>
/// 0-无错误
/// </summary>
Err_Not = 0,
/// <summary>
/// 1-PLC逻辑错误未申请上线
/// </summary>
Err_PLC_Logic = 1,
/// <summary>
/// 2-没有可用订单
/// </summary>
Err_NoOrder = 2,
/// <summary>
/// 3-扫描缸体码为空或格式错误
/// </summary>
Err_PartCode_Illegal = 3,
/// <summary>
/// 4-缸体机型与生产机型不匹配
/// </summary>
Err_Sort = 4,
/// <summary>
/// 5-AMS写入信息与RFID信息验证不一致
/// </summary>
Err_RW_Diff = 5,
/// <summary>
/// 255-未知错误
/// </summary>
Undefined = 255,
}
}

View File

@@ -0,0 +1,70 @@
using MesWork;
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
namespace SlMesDbIterface
{
public class SqlOperation
{
public static bool ExecuteStoredProcedure(string name, SqlParameter[] sqlParameters, out string errorMessage)
{
return DataLinkMesWork.SQLCommon.ExecuteStoredProcedure(name, MesWorkForm.ConnectionString, ref sqlParameters, out errorMessage);
}
public static bool ExecuteStoredProcedure(string name, SqlParameter[] sqlParameters, out DataTable dt, out string errorMessage)
{
return DataLinkMesWork.SQLCommon.ExecuteStoredProcedure(name, MesWorkForm.ConnectionString, ref sqlParameters, out dt, out errorMessage);
}
public static bool ExecuteStoredProcedure(string name, SqlParameter[] sqlParameters, out DataSet ds, out string errorMessage)
{
return DataLinkMesWork.SQLCommon.ExecuteStoredProcedure(name, MesWorkForm.ConnectionString, ref sqlParameters, out ds, out errorMessage);
}
public static bool ExecuteSql(string sql, out DataTable dt, out string errorMessage)
{
return DataLinkMesWork.SQLCommon.ExecuteSql(sql, MesWorkForm.ConnectionString, out dt, out errorMessage);
}
public static bool ExecuteSql(string sql, out DataSet ds, out string errorMessage)
{
return DataLinkMesWork.SQLCommon.ExecuteDataset(sql, MesWorkForm.ConnectionString, out ds, out errorMessage);
}
public static bool ExecuteSql(string sql, out string errorMessage)
{
return DataLinkMesWork.SQLCommon.ExecuteSql(sql, MesWorkForm.ConnectionString, out errorMessage);
}
/// <summary>
/// 通过SqlBulkCopy复制table数据到数据库
/// </summary>
/// <param name="dataset"></param>
public static bool SqlbulkcopyInsert(DataTable dt)
{
bool success = false;
try
{
// SqlBulkCopy sqlbulkcopy = new SqlBulkCopy(connectString, SqlBulkCopyOptions.KeepIdentity);//删除自增ID插入原始数据
SqlBulkCopy sqlbulkcopy = new SqlBulkCopy(MesWorkForm.ConnectionString, SqlBulkCopyOptions.UseInternalTransaction);//批量事务处理
sqlbulkcopy.DestinationTableName = dt.TableName;//数据库中的表名
for (int i = 0; i < dt.Columns.Count; i++)
{
var columnName = dt.Columns[i].ColumnName.ToString();
sqlbulkcopy.ColumnMappings.Add(columnName, columnName);
}
sqlbulkcopy.WriteToServer(dt);
success = true;
}
catch (Exception err)
{
}
return success;
}
}
}

466
SCADA/Core/TagTypeCodeID.cs Normal file
View File

@@ -0,0 +1,466 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
///1 X WorkStart 2 工件到位(PLC) 工件到位。托盘到达工位,并且托盘上有工件。
///2 X RepairPartStatusPLC 3 RepairPartStatusPLC 备用
///3 STRING RepairPathString 4 RepairPathString "工位返修字符串121211112222111,前2位是西门子字符串格式第一位是总长度第二位是实际长度"
///4 X EngineTypeGetOverMES 5 传递机型(MES) MES传递总成信息给PLC上线工位
///5 X PartPalletGoOver 6 PartPalletGoOver 上线工位。0正常工作1空托盘放行PLC读取到此标志不走申请上线逻辑。
///6 X MaterialVerifyOver 7 MaterialVerifyOver MES保存完质量数据物料数据等与PLC信号交互完成后通知PLC所以工步都完成才可以放行工件正常工作时工件放行的必要条件。
///7 X FalseGo 8 FalseGo 按MES界面[不合格放行]按钮MES发送此信号。操作者判断工件不合格通知设备按不合格方式放行工件工件流转到返修下线工位后返修下线。MES工作完成MES0.3=1MES合格放行MES0.5=0MES0.4=1
///8 INT EngineTypeID 9 EngineTypeID MES发动机机型标志(必须PLC)
///9 STRING EngineID 10 EngineID MES发动机编号(必须PLC)
///10 STRING EngineType 11 机型(MES) MES发动机机型(必须PLC)
///11 X PartPalletStatus 13 PartPalletStatus MES激发变量托盘到位离开(必须PLC)
///12 X HeartBeatPLC 14 HeartBeatPLC 心跳处理PLC收到MES心跳信号后PLC延时5秒后数值取反再写回PLC写回PLC开始计时如果5秒钟MES无反馈报通讯故障。
///13 X HeartBeatMIS 15 HeartBeatMIS 间隔时间5S心跳处理。收到PLC心跳信号后MES按原值回写。PLC收到MES信号后延时5秒取反写入以此循环。
///14 X TargetTimeRead 16 TargetTimeRead MES允许可读工位运行时间
///15 Int MachineTargetTime 17 MachineTargetTime 目标运行时间
///16 Int MachineActualTime 18 MachineActualTime 实际运行时间
///17 X MesRead 19 允许保存(PLC) 质量数据可以读数据
///18 X MesReadOver 20 保存完成(MES) MES保存完数据(必须MIS)
///19 INT QualityMask 21 合格标志(PLC) 质量数据工位合格标志0:没有工作1合格 2 :不合格(必须PLC)
///20 B PalletInfo 22 PalletInfo 0空托盘1合格件2不合格件
///21 INT RepairStatusPLC 23 RepairStatusPLC 0正常件1返修件
///22 INT OrderNo 24 订单号(MES) 订单号(MES)
///23 X StorageNo 25 库位号(MES) 库位号(MES)
///24 X AllowPass 26 允许放行(MES) 允许放行
///25 X PartLoadFinish 27 PartLoadFinish PartLoadFinish
///26 X Reserved_7 28 Reserved_7 备用
///27 X Reserved_8 29 Reserved_8 备用
///28 X Reserved_9 30 Reserved_9 备用
///29 X Reserved_10 31 Reserved_10 备用
///30 X Reserved_11 32 Reserved_11 备用
///31 X Reserved_12 33 Reserved_12 备用
///32 X Reserved_13 34 Reserved_13 备用
///33 X Reserved_14 35 Reserved_14 备用
///34 Int PLCSPareint1 36 PLCSPareint1 备用
///35 Int PLCSPareint2 37 PLCSPareint2 备用
///36 Int PLCSPareint3 38 PLCSPareint3 备用
///37 STRING PLCSarestring1 39 PLCSarestring1 备用
///38 STRING PLCSarestring2 40 PLCSarestring2 备用
///39 STRING MarkID 42 MarkID 机体打标号MES前2位是西门子字符串格式第一位是总长度第二位是实际长度
///40 X PartLoad 43 PartLoad 上线工位PLC向MES申请总成编号。收到该信号后MES将机型标志DBB22 ~23、总成号DBB24 ~63、总成机型DBB64 ~103写入PLC。之后MES通过信号“传递机型DBX0.1”通知PLC。
///41 X EngineTypeGetOverPLC 44 传递机型PLC PLC将机型标志DBB50…51、工件编号DBB52…101、产品型号DBB102…187、托盘编号DBB188…189准备完毕后通知MES。
///42 X PartLoadOK 48 PartLoadOK 备用
///43 X Reserved_18 49 Reserved_18 备用
///44 X PalletDown 50 PalletDown 暂时保留,项目未使用
///45 X ConfirmOkGo 51 ConfirmOkGo 按MES界面[合格放行]按钮MES发送此信号。操作者判断工件合格通知设备工件按合格方式放行工件。MES工作完成MES0.3=1MES合格放行MES0.5=1MES0.4=0
///46 X ResetDevice 52 ResetDevice 针对手动工位无HMI需要复位设备在MES页面操作。
///47 X UnloadCompleted 53 UnloadCompleted 暂时保留,项目未使用
///48 X MachineTime_ReadOver 54 MachineTime_ReadOver 备用
///49 X Reserved_19 58 Reserved_19 备用
///50 X FixOK 59 FixOK 手动拧紧工位单工步螺栓拧紧完成通知PC读取数据。
///51 X Reserved_21 61 Reserved_21 备用
///52 X Reserved_22 62 Reserved_22 备用
///53 X Reserved_23 63 Reserved_23 备用
///54 X Reserved_24 64 Reserved_24 备用
///55 X Reserved_25 65 Reserved_25 备用
///56 X FixAllow 66 FixAllow "设备工作的必须信号,对于有物料验证的工位MES验证完成给出此信号对于无物料验证工位MES直接给出此信号。"
///57 X FixOver 67 FixOver 用于手动拧紧且有质量数据工位。通知设备当前工步拧紧螺钉工作结束。
///58 X MatchingCompleted 68 MatchingCompleted 分线上总线匹配成功是1不成功是0。
///59 X Match 69 Match 分线上总线匹配成功是1不成功是0。
///60 X Reserved_2 70 Reserved_2 备用
///61 X IsAutoGetEngineID 71 IsAutoGetEngineID 自动手动申请工件编号。0是自动方式1手动方式。暂时保留生成流水号方式是在数据库中实现的
///62 X RepairUplineMES 72 RepairUplineMES 上线清空MOBY针对上线工位通知PLC从新开始申请上线流程
///63 INT EngineTypeID_MES 73 机型代码(MES) MES发动机机型标志(必须MES)
///64 STRING EngineID_MES 74 工件编号(MES) MES发动机编号(必须MES)
///65 STRING EngineType_MES 75 EngineType_MES MES发动机机型(必须MES)
///66 X Reserved_20 76 Reserved_20 备用
///67 INT ProcessCode 77 ProcessCode 手动拧紧工位由MES通知PLC拧紧序号
///68 B OnLineState 79 OnLineState 通过线体工位PC实现下达工位工作状态工位有三种状态在线、离线、屏蔽。在线0正常状态实现正常功能。1离线:设备脱离MES工作进入不交互模式。
///69 INT PartPalletCode 80 托盘号(MES) 托盘编号(B5A)
///70 INT BoltCode 88 BoltCode 手动拧紧工位指导PLC所用套筒
///71 INT RepairStatus 93 RepairStatus "0正常件1返修件。对于上线工位MES给出是正常上线还是返修上线,返修路径"
///72 DInt Reserved_15 110 Reserved_15 备用
///73 DInt Reserved_16 111 Reserved_16 备用
///74 B Reserved_17 112 Reserved_17 备用
///75 INT SPareint1 113 SPareint1 备用int1
///76 INT SPareint2 114 SPareint2 备用int2
///77 INT SPareint3 115 SPareint3 备用int3
///78 STRING Sparestring1 116 Sparestring1 备用字符串1
///79 STRING Sparestring2 117 Sparestring2 备用字符串2
///80 X MachineStatusPutOn 1000 机床上电(PLC) 机床上电(必须PLC)
///81 X MachineStatusWorkOn 1001 循环开始(PLC) 循环开始(必须PLC)
///82 X MachineStatusAlarm 1002 设备报警(PLC) 机床故障(必须PLC)
///83 X MachineStatusNoPart 1003 MachineStatusNoPart 上料无件(必须PLC)
///84 X MachineStatusBlock 1004 MachineStatusBlock 下料堵塞(必须PLC)
namespace MesWork
{
/// <summary>
/// 这是变量类型代码的配置,几乎是不变的
/// 请不要随意修改,为了保证变量版本同一,并且方便维护,请联系发行人修改!
/// 请注意,此修改为全局修改!
/// </summary>
public enum EnumTagTypeCodeID
{
/// <summary>
/// 工件到位(PLC)
/// 变量类型Bool
/// 解释:托盘到达工位,并且托盘上有工件。
/// </summary>
WorkStart = 2,
/// <summary>
///
/// </summary>
RepairPartStatusPLC = 3,
/// <summary>
/// 工位返修字符串
/// 变量类型String
/// 解释:工位返修字符串
/// </summary>
RepairPathString = 4,
/// <summary>
/// 传递机型(MES)
/// 变量类型Bool
/// 解释MES传递总成信息给PLC上线工位
/// </summary>
EngineTypeGetOverMES = 5,
/// <summary>
///
/// </summary>
PartPalletGoOver = 6,
/// <summary>
///
/// </summary>
MaterialVerifyOver = 7,
/// <summary>
///
/// </summary>
FalseGo = 8,
/// <summary>
///
/// </summary>
EngineTypeID = 9,
/// <summary>
///
/// </summary>
EngineID = 10,
/// <summary>
/// 机型(MES)
/// 变量类型String
/// </summary>
EngineType = 11,
/// <summary>
///
/// </summary>
PartPalletStatus = 13,
/// <summary>
///
/// </summary>
HeartBeatPLC = 14,
/// <summary>
///
/// </summary>
HeartBeatMIS = 15,
/// <summary>
///
/// </summary>
TargetTimeRead = 16,
/// <summary>
///
/// </summary>
MachineTargetTime = 17,
/// <summary>
///
/// </summary>
MachineActualTime = 18,
/// <summary>
/// 允许保存(PLC)
/// 变量类型Bool
/// </summary>
MesRead = 19,
/// <summary>
/// 保存完成(MES)
/// 变量类型Bool
/// </summary>
MesReadOver = 20,
/// <summary>
/// 合格标志(PLC)
/// 变量类型Int
/// </summary>
QualityMask = 21,
/// <summary>
///
/// </summary>
PalletInfo = 22,
/// <summary>
///
/// </summary>
RepairStatusPLC = 23,
/// <summary>
/// 订单号(MES)
/// 变量类型Int
/// </summary>
OrderNo = 24,
/// <summary>
/// 库位号(MES)
/// 变量类型Bool
/// </summary>
StorageNo = 25,
/// <summary>
/// 允许放行(MES)
/// 变量类型Bool
/// </summary>
AllowPass = 26,
/// <summary>
///
/// </summary>
PartLoadFinish = 27,
/// <summary>
///
/// </summary>
Reserved_7 = 28,
/// <summary>
///
/// </summary>
Reserved_8 = 29,
/// <summary>
///
/// </summary>
Reserved_9 = 30,
/// <summary>
///
/// </summary>
Reserved_10 = 31,
/// <summary>
///
/// </summary>
Reserved_11 = 32,
/// <summary>
///
/// </summary>
Reserved_12 = 33,
/// <summary>
///
/// </summary>
Reserved_13 = 34,
/// <summary>
///
/// </summary>
Reserved_14 = 35,
/// <summary>
///
/// </summary>
PLCSPareint1 = 36,
/// <summary>
///
/// </summary>
PLCSPareint2 = 37,
/// <summary>
///
/// </summary>
PLCSPareint3 = 38,
/// <summary>
/// 订单号(PLC)
/// </summary>
OrderFormPLC = 39,
/// <summary>
///
/// </summary>
PLCSarestring2 = 40,
/// <summary>
///
/// </summary>
MarkID = 42,
/// <summary>
///
/// </summary>
PartLoad = 43,
/// <summary>
/// 传递机型PLC
/// 变量类型Bool
/// </summary>
EngineTypeGetOverPLC = 44,
/// <summary>
///
/// </summary>
PartLoadOK = 48,
/// <summary>
///
/// </summary>
Reserved_18 = 49,
/// <summary>
///
/// </summary>
PalletDown = 50,
/// <summary>
///
/// </summary>
ConfirmOkGo = 51,
/// <summary>
///
/// </summary>
ResetDevice = 52,
/// <summary>
///
/// </summary>
UnloadCompleted = 53,
/// <summary>
///
/// </summary>
MachineTime_ReadOver = 54,
/// <summary>
///
/// </summary>
Reserved_19 = 58,
/// <summary>
///
/// </summary>
FixOK = 59,
/// <summary>
///
/// </summary>
Reserved_21 = 61,
/// <summary>
///
/// </summary>
Reserved_22 = 62,
/// <summary>
///
/// </summary>
Reserved_23 = 63,
/// <summary>
///
/// </summary>
Reserved_24 = 64,
/// <summary>
///
/// </summary>
Reserved_25 = 65,
/// <summary>
///
/// </summary>
FixAllow = 66,
/// <summary>
///
/// </summary>
FixOver = 67,
/// <summary>
///
/// </summary>
MatchingCompleted = 68,
/// <summary>
///
/// </summary>
Match = 69,
/// <summary>
///
/// </summary>
Reserved_2 = 70,
/// <summary>
///
/// </summary>
IsAutoGetEngineID = 71,
/// <summary>
///
/// </summary>
RepairUplineMES = 72,
/// <summary>
/// 机型代码(MES)
/// 变量类型Int
/// </summary>
EngineTypeID_MES = 73,
/// <summary>
/// 工件编号(MES)
/// 变量类型String
/// </summary>
EngineID_MES = 74,
/// <summary>
///
/// </summary>
EngineType_MES = 75,
/// <summary>
///
/// </summary>
Reserved_20 = 76,
/// <summary>
///
/// </summary>
ProcessCode = 77,
/// <summary>
///
/// </summary>
OnLineState = 79,
/// <summary>
/// 托盘号(MES)
/// 变量类型Int
/// </summary>
PartPalletCode = 80,
/// <summary>
///
/// </summary>
BoltCode = 88,
/// <summary>
///
/// </summary>
RepairStatus = 93,
/// <summary>
///
/// </summary>
Reserved_15 = 110,
/// <summary>
///
/// </summary>
Reserved_16 = 111,
/// <summary>
///
/// </summary>
Reserved_17 = 112,
/// <summary>
///
/// </summary>
SPareint1 = 113,
/// <summary>
///
/// </summary>
SPareint2 = 114,
/// <summary>
///
/// </summary>
SPareint3 = 115,
/// <summary>
///
/// </summary>
Sparestring1 = 116,
/// <summary>
///
/// </summary>
Sparestring2 = 117,
/// <summary>
/// 机床上电(PLC)
/// 变量类型Bool
/// </summary>
MachineStatusPutOn = 1000,
/// <summary>
/// 循环开始(PLC)
/// 变量类型Bool
/// </summary>
MachineStatusWorkOn = 1001,
/// <summary>
/// 设备报警(PLC)
/// 变量类型Bool
/// </summary>
MachineStatusAlarm = 1002,
/// <summary>
/// 上料无件(PLC)
/// 变量类型Bool
/// </summary>
MachineStatusNoPart = 1003,
/// <summary>
/// 下料堵塞(PLC)
/// 变量类型Bool
/// </summary>
MachineStatusBlock = 1004,
/// <summary>
/// 下料堵塞(PLC)
/// 变量类型Bool
/// </summary>
havePart70 = 10003,
}
}

170
SCADA/Core/Tools.cs Normal file
View File

@@ -0,0 +1,170 @@
using MesWork;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static System.Windows.Forms.VisualStyles.VisualStyleElement;
namespace ConverterBytesAndStruct
{
/// <summary>
/// 数据解析、数据转换
/// </summary>
public class Tools
{
#region
/// <summary>
/// 从源数据提取字符数组
/// </summary>
/// <param name="bytes"></param>
/// <param name="start"></param>
/// <param name="num"></param>
/// <returns></returns>
public static char[] convertNumber(byte[] bytes, int start, int num)
{
// TODO 长度判断
char[] res = new char[num];
for (int i = 0; i < num; i++)
{
res[i] = (char)bytes[start + i];
}
return res;
}
/// <summary>
/// 从源数据提取字节数组
/// </summary>
/// <param name="bytes"></param>
/// <param name="start"></param>
/// <param name="num"></param>
/// <returns></returns>
public static byte[] slice(byte[] bytes, int start, int num)
{
// TODO 长度判断
byte[] res = new byte[num];
for (int i = 0; i < num; i++)
{
res[i] = bytes[start + i];
}
return res;
}
/// <summary>
/// 从源数据提取结构体
/// </summary>
/// <param name="bytes"></param>
/// <param name="start"></param>
/// <returns></returns>
public static TS convetTS(byte[] bytes, int start)
{
// TODO 长度判断
TS ts = null;
ts = new TS();
ts.Max_Len = bytes[start + 0];
ts.Act_Len = bytes[start + 1];
ts.Month_B1 = (char)bytes[start + 2];
ts.Month_B0 = (char)bytes[start + 3];
ts.Slash1 = (char)bytes[start + 4];
ts.Day_B1 = (char)bytes[start + 5];
ts.Day_B0 = (char)bytes[start + 6];
ts.Slash2 = (char)bytes[start + 7];
ts.Fixed_dgt1 = (char)bytes[start + 8];
ts.Fixed_dgt2 = (char)bytes[start + 9];
ts.Year_B1 = (char)bytes[start + 10];
ts.Year_B0 = (char)bytes[start + 11];
ts.Null1 = (char)bytes[start + 12];
ts.Hour_B1 = (char)bytes[start + 13];
ts.Hour_B0 = (char)bytes[start + 14];
ts.Colon1 = (char)bytes[start + 15];
ts.Min_B1 = (char)bytes[start + 16];
ts.Min_B0 = (char)bytes[start + 17];
ts.Colon2 = (char)bytes[start + 18];
ts.Sec_B1 = (char)bytes[start + 19];
ts.Sec_B0 = (char)bytes[start + 20];
ts.Null2 = (char)bytes[start + 21];
return ts;
}
/// <summary>
/// 结构体转时间
/// </summary>
/// <param name="ts"></param>
/// <returns></returns>
public static System.DateTime Convet_ToDateTime(TS ts)
{
System.DateTime dt = System.DateTime.Parse($"1970-01-01 01:01:01.001");
try
{
var yyyy = $"20{ts.Year_B1}{ts.Year_B0}";
var MM = $"{ts.Month_B1}{ts.Month_B0}";
var dd = $"{ts.Day_B1}{ts.Day_B0}";
var HH = $"{ts.Hour_B1}{ts.Hour_B0}";
var mm = $"{ts.Min_B1}{ts.Min_B0}";
var ss = $"{ts.Sec_B1}{ts.Sec_B0}";
var dtStr = $"{yyyy}-{MM}-{dd} {HH}:{mm}:{ss}.000";
dt = System.DateTime.Parse(dtStr);
}
catch (Exception err)
{
}
return dt;
}
/// <summary>
/// 从源数据提取质量数据
/// </summary>
/// <param name="bytes"></param>
/// <param name="start"></param>
/// <returns></returns>
public static QC_DATA convertQcdata(byte[] bytes, int start)
{
QC_DATA data = null;
data = new QC_DATA();
data.Work_Type = S7.Net.Types.Int.FromByteArray(new byte[] { bytes[start + 0], bytes[start + 1] });
data.Progarm_Code = S7.Net.Types.Int.FromByteArray(new byte[] { bytes[start + 2], bytes[start + 3] });
data.Counter_Number = S7.Net.Types.Int.FromByteArray(new byte[] { bytes[start + 4], bytes[start + 5] });
var byte1 = bytes[start + 6];
data.Bypass = S7.Net.Types.Bit.FromByte(byte1, 0);
data.No_op = S7.Net.Types.Bit.FromByte(byte1, 1);
data.Accept = S7.Net.Types.Bit.FromByte(byte1, 2);
data.Reject = S7.Net.Types.Bit.FromByte(byte1, 3);
//data.Spare14 = S7.Net.Types.Bit.FromByte(byte1, 4);
//data.Spare15 = S7.Net.Types.Bit.FromByte(byte1, 5);
//data.Repair_Off = S7.Net.Types.Bit.FromByte(byte1, 6);
//data.Repair_On = S7.Net.Types.Bit.FromByte(byte1, 7);
data.SPARE1 = S7.Net.Types.Byte.FromByteArray(new byte[] { bytes[start + 7] });
data.SPARE2 = S7.Net.Types.Int.FromByteArray(new byte[] { bytes[start + 8], bytes[start + 9] });
data.QC_DATA1 = S7.Net.Types.Real.FromByteArray(slice(bytes, start + 10, 4));
data.QC_DATA2 = S7.Net.Types.Real.FromByteArray(slice(bytes, start + 14, 4));
data.QC_DATA3 = S7.Net.Types.Real.FromByteArray(slice(bytes, start + 18, 4));
data.QC_DATA4 = S7.Net.Types.Real.FromByteArray(slice(bytes, start + 22, 4));
return data;
}
/// <summary>
/// 拷贝 bytes1 内容 到 bytes 从start开始长度由 bytes1决定
/// </summary>
/// <param name="bytes"></param>
/// <param name="bytes1"></param>
/// <param name="start"></param>
public static byte[] copy(byte[] bytes, int start, byte[] bytes1)
{
for (int i = 0; i < bytes1.Length; i++)
{
bytes[start + i] = bytes1[i];
}
return bytes;
}
#endregion
}
}

526
SCADA/DC_A95_Page.Designer.cs generated Normal file
View File

@@ -0,0 +1,526 @@
using System.Windows.Forms;
namespace MesWork
{
partial class MesWorkForm : PlcLinkForm
{
/// <summary>
/// 必需的设计器变量。
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// 清理所有正在使用的资源。
/// </summary>
/// <param name="disposing">如果应释放托管资源,为 true否则为 false。</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows
/// <summary>
/// 设计器支持所需的方法 - 不要修改
/// 使用代码编辑器修改此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MesWorkForm));
this.panel_Menu = new System.Windows.Forms.Panel();
this.label_ParamConfig = new System.Windows.Forms.Label();
this.btn_QueryLog = new System.Windows.Forms.Label();
this.label_StationManage = new System.Windows.Forms.Label();
this.label_PlanManage = new System.Windows.Forms.Label();
this.label_Test_RW = new System.Windows.Forms.Label();
this.label_ExitSys = new System.Windows.Forms.Label();
this.label_Monitor_PLC = new System.Windows.Forms.Label();
this.pb_OnLine_Sql = new System.Windows.Forms.PictureBox();
this.timer_OnLine_Show = new System.Windows.Forms.Timer(this.components);
this.panel_Lyout = new System.Windows.Forms.Panel();
this.label41 = new System.Windows.Forms.Label();
this.label_Count = new System.Windows.Forms.Label();
this.label_01 = new System.Windows.Forms.Label();
this.label_SqlConn = new System.Windows.Forms.Label();
this.label18 = new System.Windows.Forms.Label();
this.label14 = new System.Windows.Forms.Label();
this.panel9 = new System.Windows.Forms.Panel();
this.label1 = new System.Windows.Forms.Label();
this.label10 = new System.Windows.Forms.Label();
this.panel7 = new System.Windows.Forms.Panel();
this.label8 = new System.Windows.Forms.Label();
this.label_RunSort = new System.Windows.Forms.Label();
this.panel8 = new System.Windows.Forms.Panel();
this.label9 = new System.Windows.Forms.Label();
this.groupBox1 = new System.Windows.Forms.GroupBox();
this.label6 = 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.label2 = new System.Windows.Forms.Label();
this.panel_OffLine = new System.Windows.Forms.Panel();
this.panel_Alarm = new System.Windows.Forms.Panel();
this.panel_Manual = new System.Windows.Forms.Panel();
this.panel_Running = new System.Windows.Forms.Panel();
this.panel_Auto = new System.Windows.Forms.Panel();
this.panel4 = new System.Windows.Forms.Panel();
this.panel3 = new System.Windows.Forms.Panel();
this.panel5 = new System.Windows.Forms.Panel();
this.label15 = new System.Windows.Forms.Label();
this.panel2 = new System.Windows.Forms.Panel();
this.label16 = new System.Windows.Forms.Label();
this.panel1 = new System.Windows.Forms.Panel();
this.label17 = new System.Windows.Forms.Label();
this.label19 = new System.Windows.Forms.Label();
this.btn_SaveLyout = new System.Windows.Forms.Button();
this.label49 = new System.Windows.Forms.Label();
this.timer_ShowStation = new System.Windows.Forms.Timer(this.components);
this.timer_ShowAlarm = new System.Windows.Forms.Timer(this.components);
this.timer_ThreadPool = new System.Windows.Forms.Timer(this.components);
this.timer_ShowCount = new System.Windows.Forms.Timer(this.components);
this.panel_Menu.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.pb_OnLine_Sql)).BeginInit();
this.panel_Lyout.SuspendLayout();
this.panel9.SuspendLayout();
this.panel7.SuspendLayout();
this.panel8.SuspendLayout();
this.groupBox1.SuspendLayout();
this.panel5.SuspendLayout();
this.panel2.SuspendLayout();
this.panel1.SuspendLayout();
this.SuspendLayout();
//
// panel_Menu
//
this.panel_Menu.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.panel_Menu.Controls.Add(this.label_ParamConfig);
this.panel_Menu.Controls.Add(this.btn_QueryLog);
this.panel_Menu.Controls.Add(this.label_StationManage);
this.panel_Menu.Controls.Add(this.label_PlanManage);
this.panel_Menu.Controls.Add(this.label_Test_RW);
this.panel_Menu.Controls.Add(this.label_ExitSys);
this.panel_Menu.Controls.Add(this.label_Monitor_PLC);
resources.ApplyResources(this.panel_Menu, "panel_Menu");
this.panel_Menu.Name = "panel_Menu";
//
// label_ParamConfig
//
resources.ApplyResources(this.label_ParamConfig, "label_ParamConfig");
this.label_ParamConfig.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
this.label_ParamConfig.Name = "label_ParamConfig";
this.label_ParamConfig.Click += new System.EventHandler(this.label_ParamConfig_Click);
//
// btn_QueryLog
//
resources.ApplyResources(this.btn_QueryLog, "btn_QueryLog");
this.btn_QueryLog.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
this.btn_QueryLog.Name = "btn_QueryLog";
this.btn_QueryLog.Click += new System.EventHandler(this.btn_QueryLog_Click);
//
// label_StationManage
//
resources.ApplyResources(this.label_StationManage, "label_StationManage");
this.label_StationManage.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
this.label_StationManage.Name = "label_StationManage";
this.label_StationManage.Click += new System.EventHandler(this.label_StationManage_Click);
//
// label_PlanManage
//
resources.ApplyResources(this.label_PlanManage, "label_PlanManage");
this.label_PlanManage.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
this.label_PlanManage.Name = "label_PlanManage";
this.label_PlanManage.Click += new System.EventHandler(this.label_PlanManage_Click);
//
// label_Test_RW
//
resources.ApplyResources(this.label_Test_RW, "label_Test_RW");
this.label_Test_RW.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
this.label_Test_RW.Name = "label_Test_RW";
this.label_Test_RW.Click += new System.EventHandler(this.label_Test_RW_Click);
//
// label_ExitSys
//
resources.ApplyResources(this.label_ExitSys, "label_ExitSys");
this.label_ExitSys.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
this.label_ExitSys.Name = "label_ExitSys";
this.label_ExitSys.Click += new System.EventHandler(this.label_ExitSys_Click);
//
// label_Monitor_PLC
//
resources.ApplyResources(this.label_Monitor_PLC, "label_Monitor_PLC");
this.label_Monitor_PLC.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
this.label_Monitor_PLC.Name = "label_Monitor_PLC";
this.label_Monitor_PLC.Click += new System.EventHandler(this.label_Monitor_PLC_Click);
//
// pb_OnLine_Sql
//
this.pb_OnLine_Sql.Image = global::CentralControl.Properties.Resources.;
resources.ApplyResources(this.pb_OnLine_Sql, "pb_OnLine_Sql");
this.pb_OnLine_Sql.Name = "pb_OnLine_Sql";
this.pb_OnLine_Sql.TabStop = false;
//
// timer_OnLine_Show
//
this.timer_OnLine_Show.Interval = 1000;
this.timer_OnLine_Show.Tick += new System.EventHandler(this.timer_OnLine_Show_Tick);
//
// panel_Lyout
//
resources.ApplyResources(this.panel_Lyout, "panel_Lyout");
this.panel_Lyout.Controls.Add(this.label41);
this.panel_Lyout.Controls.Add(this.label_Count);
this.panel_Lyout.Controls.Add(this.label_01);
this.panel_Lyout.Controls.Add(this.label_SqlConn);
this.panel_Lyout.Controls.Add(this.label18);
this.panel_Lyout.Controls.Add(this.label14);
this.panel_Lyout.Controls.Add(this.panel9);
this.panel_Lyout.Controls.Add(this.panel7);
this.panel_Lyout.Controls.Add(this.panel8);
this.panel_Lyout.Controls.Add(this.groupBox1);
this.panel_Lyout.Controls.Add(this.panel4);
this.panel_Lyout.Controls.Add(this.panel3);
this.panel_Lyout.Controls.Add(this.panel5);
this.panel_Lyout.Controls.Add(this.panel2);
this.panel_Lyout.Controls.Add(this.panel1);
this.panel_Lyout.Controls.Add(this.btn_SaveLyout);
this.panel_Lyout.Controls.Add(this.label49);
this.panel_Lyout.Name = "panel_Lyout";
//
// label41
//
resources.ApplyResources(this.label41, "label41");
this.label41.Name = "label41";
//
// label_Count
//
resources.ApplyResources(this.label_Count, "label_Count");
this.label_Count.Name = "label_Count";
//
// label_01
//
resources.ApplyResources(this.label_01, "label_01");
this.label_01.Name = "label_01";
//
// label_SqlConn
//
resources.ApplyResources(this.label_SqlConn, "label_SqlConn");
this.label_SqlConn.Name = "label_SqlConn";
//
// label18
//
resources.ApplyResources(this.label18, "label18");
this.label18.Name = "label18";
//
// label14
//
resources.ApplyResources(this.label14, "label14");
this.label14.Name = "label14";
//
// panel9
//
this.panel9.BackColor = System.Drawing.Color.Gainsboro;
this.panel9.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.panel9.Controls.Add(this.label1);
this.panel9.Controls.Add(this.label10);
resources.ApplyResources(this.panel9, "panel9");
this.panel9.Name = "panel9";
//
// label1
//
resources.ApplyResources(this.label1, "label1");
this.label1.Name = "label1";
//
// label10
//
resources.ApplyResources(this.label10, "label10");
this.label10.Name = "label10";
//
// panel7
//
this.panel7.BackColor = System.Drawing.Color.Gainsboro;
this.panel7.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.panel7.Controls.Add(this.label8);
this.panel7.Controls.Add(this.label_RunSort);
resources.ApplyResources(this.panel7, "panel7");
this.panel7.Name = "panel7";
//
// label8
//
resources.ApplyResources(this.label8, "label8");
this.label8.Name = "label8";
//
// label_RunSort
//
resources.ApplyResources(this.label_RunSort, "label_RunSort");
this.label_RunSort.Name = "label_RunSort";
//
// panel8
//
this.panel8.BackColor = System.Drawing.Color.Gainsboro;
this.panel8.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.panel8.Controls.Add(this.label9);
this.panel8.Controls.Add(this.pb_OnLine_Sql);
resources.ApplyResources(this.panel8, "panel8");
this.panel8.Name = "panel8";
//
// label9
//
resources.ApplyResources(this.label9, "label9");
this.label9.Name = "label9";
//
// groupBox1
//
this.groupBox1.Controls.Add(this.label6);
this.groupBox1.Controls.Add(this.label5);
this.groupBox1.Controls.Add(this.label4);
this.groupBox1.Controls.Add(this.label3);
this.groupBox1.Controls.Add(this.label2);
this.groupBox1.Controls.Add(this.panel_OffLine);
this.groupBox1.Controls.Add(this.panel_Alarm);
this.groupBox1.Controls.Add(this.panel_Manual);
this.groupBox1.Controls.Add(this.panel_Running);
this.groupBox1.Controls.Add(this.panel_Auto);
resources.ApplyResources(this.groupBox1, "groupBox1");
this.groupBox1.Name = "groupBox1";
this.groupBox1.TabStop = false;
//
// label6
//
resources.ApplyResources(this.label6, "label6");
this.label6.Name = "label6";
//
// label5
//
resources.ApplyResources(this.label5, "label5");
this.label5.Name = "label5";
//
// label4
//
resources.ApplyResources(this.label4, "label4");
this.label4.Name = "label4";
//
// label3
//
resources.ApplyResources(this.label3, "label3");
this.label3.Name = "label3";
//
// label2
//
resources.ApplyResources(this.label2, "label2");
this.label2.Name = "label2";
//
// panel_OffLine
//
this.panel_OffLine.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
resources.ApplyResources(this.panel_OffLine, "panel_OffLine");
this.panel_OffLine.Name = "panel_OffLine";
//
// panel_Alarm
//
this.panel_Alarm.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
resources.ApplyResources(this.panel_Alarm, "panel_Alarm");
this.panel_Alarm.Name = "panel_Alarm";
//
// panel_Manual
//
this.panel_Manual.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
resources.ApplyResources(this.panel_Manual, "panel_Manual");
this.panel_Manual.Name = "panel_Manual";
//
// panel_Running
//
this.panel_Running.BackColor = System.Drawing.Color.SpringGreen;
this.panel_Running.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
resources.ApplyResources(this.panel_Running, "panel_Running");
this.panel_Running.Name = "panel_Running";
//
// panel_Auto
//
this.panel_Auto.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
resources.ApplyResources(this.panel_Auto, "panel_Auto");
this.panel_Auto.Name = "panel_Auto";
//
// panel4
//
this.panel4.BackColor = System.Drawing.SystemColors.Info;
resources.ApplyResources(this.panel4, "panel4");
this.panel4.Name = "panel4";
//
// panel3
//
this.panel3.BackColor = System.Drawing.SystemColors.Info;
resources.ApplyResources(this.panel3, "panel3");
this.panel3.Name = "panel3";
//
// panel5
//
this.panel5.BackColor = System.Drawing.SystemColors.Info;
this.panel5.Controls.Add(this.label15);
resources.ApplyResources(this.panel5, "panel5");
this.panel5.Name = "panel5";
//
// label15
//
resources.ApplyResources(this.label15, "label15");
this.label15.Name = "label15";
//
// panel2
//
this.panel2.BackColor = System.Drawing.SystemColors.Info;
this.panel2.Controls.Add(this.label16);
resources.ApplyResources(this.panel2, "panel2");
this.panel2.Name = "panel2";
//
// label16
//
resources.ApplyResources(this.label16, "label16");
this.label16.Name = "label16";
//
// panel1
//
this.panel1.BackColor = System.Drawing.SystemColors.Info;
this.panel1.Controls.Add(this.label17);
this.panel1.Controls.Add(this.label19);
resources.ApplyResources(this.panel1, "panel1");
this.panel1.Name = "panel1";
//
// label17
//
resources.ApplyResources(this.label17, "label17");
this.label17.Name = "label17";
//
// label19
//
resources.ApplyResources(this.label19, "label19");
this.label19.Name = "label19";
//
// btn_SaveLyout
//
resources.ApplyResources(this.btn_SaveLyout, "btn_SaveLyout");
this.btn_SaveLyout.Name = "btn_SaveLyout";
this.btn_SaveLyout.UseVisualStyleBackColor = true;
this.btn_SaveLyout.Click += new System.EventHandler(this.btn_SaveLyout_Click);
//
// label49
//
resources.ApplyResources(this.label49, "label49");
this.label49.Name = "label49";
//
// timer_ShowStation
//
this.timer_ShowStation.Interval = 2000;
this.timer_ShowStation.Tick += new System.EventHandler(this.timer_ShowStation_Tick);
//
// timer_ShowAlarm
//
this.timer_ShowAlarm.Enabled = true;
this.timer_ShowAlarm.Interval = 1000;
this.timer_ShowAlarm.Tick += new System.EventHandler(this.timer_ShowAlarm_Tick);
//
// timer_ThreadPool
//
this.timer_ThreadPool.Enabled = true;
this.timer_ThreadPool.Interval = 1000;
this.timer_ThreadPool.Tick += new System.EventHandler(this.timer_ThreadPool_Tick);
//
// timer_ShowCount
//
this.timer_ShowCount.Enabled = true;
this.timer_ShowCount.Interval = 500;
this.timer_ShowCount.Tick += new System.EventHandler(this.timer_ShowCount_Tick);
//
// MesWorkForm
//
resources.ApplyResources(this, "$this");
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Controls.Add(this.panel_Lyout);
this.Controls.Add(this.panel_Menu);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
this.MaximizeBox = false;
this.Name = "MesWorkForm";
this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.MesWorkForm_FormClosing);
this.Load += new System.EventHandler(this.MesWorkForm_Load);
this.panel_Menu.ResumeLayout(false);
this.panel_Menu.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.pb_OnLine_Sql)).EndInit();
this.panel_Lyout.ResumeLayout(false);
this.panel_Lyout.PerformLayout();
this.panel9.ResumeLayout(false);
this.panel9.PerformLayout();
this.panel7.ResumeLayout(false);
this.panel7.PerformLayout();
this.panel8.ResumeLayout(false);
this.panel8.PerformLayout();
this.groupBox1.ResumeLayout(false);
this.groupBox1.PerformLayout();
this.panel5.ResumeLayout(false);
this.panel5.PerformLayout();
this.panel2.ResumeLayout(false);
this.panel2.PerformLayout();
this.panel1.ResumeLayout(false);
this.panel1.PerformLayout();
this.ResumeLayout(false);
}
#endregion
private Panel panel_Menu;
private Label label_ExitSys;
private Label label_Monitor_PLC;
private Label label_Test_RW;
private PictureBox pb_OnLine_Sql;
private Timer timer_OnLine_Show;
private Panel panel_Lyout;
private Label label_RunSort;
private Label btn_QueryLog;
private Label label49;
private Button btn_SaveLyout;
private Panel panel4;
private Panel panel3;
private Panel panel2;
private Panel panel1;
private Panel panel5;
private Label label_ParamConfig;
private GroupBox groupBox1;
private Label label6;
private Label label5;
private Label label4;
private Label label3;
private Label label2;
private Panel panel_OffLine;
private Panel panel_Alarm;
private Panel panel_Manual;
private Panel panel_Running;
private Panel panel_Auto;
private Panel panel7;
private Label label8;
private Panel panel8;
private Label label9;
private Timer timer_ShowStation;
private Timer timer_ShowAlarm;
private Panel panel9;
private Label label1;
private Label label10;
private Label label15;
private Label label16;
private Label label17;
private Label label19;
private Label label18;
private Label label14;
private Label label_StationManage;
private Label label_PlanManage;
private Label label_SqlConn;
private Label label_01;
private Timer timer_ThreadPool;
private Label label41;
private Label label_Count;
private Timer timer_ShowCount;
}
}

59
SCADA/DC_A95_Page.cs Normal file
View File

@@ -0,0 +1,59 @@
namespace MesWork
{
using System.Threading;
using System.Windows.Forms;
public partial class MesWorkForm
{
/// <summary>
///
/// </summary>
public MesWorkForm()
{
InitializeComponent();
CheckForIllegalCrossThreadCalls = false;
//this.WindowState = FormWindowState.Minimized;
panel_Auto.BackColor = color_Yellow;
panel_Running.BackColor = color_Green;
panel_Manual.BackColor = color_Faw;
panel_Alarm.BackColor = color_Red;
panel_OffLine.BackColor = color_Bad;
if (NotHandlerSignal == "1")
{
MessageBox.Show("程序不处理信号!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
}
}
private void MesWorkForm_FormClosing(object sender, System.Windows.Forms.FormClosingEventArgs e)
{
e.Cancel = true;
}
private void timer_ThreadPool_Tick(object sender, System.EventArgs e)
{
timer_ThreadPool.Enabled = false;
ThreadPool.GetAvailableThreads(out int WorkThreadCount, out int CompletionThreadcCont);//获取剩余的可用线程
label_01.Text = $"Work = {WorkThreadCount} / {workerThreads}\r\nCompl = {CompletionThreadcCont} / {completionPortThreads}";
timer_ThreadPool.Enabled = true;
}
private void MesWorkForm_Load(object sender, System.EventArgs e)
{
string Id_TagCf = "41236";
MesWork_QC_upload.SyncTask_UploadMeasureData(Id_TagCf);
}
private void timer_ShowCount_Tick(object sender, System.EventArgs e)
{
timer_ShowCount.Enabled = false;
label_Count.Text = MesWorkForm.taskSql.Count.ToString();
timer_ShowCount.Enabled = true;
}
}
}

1552
SCADA/DC_A95_Page.resx Normal file

File diff suppressed because it is too large Load Diff

139
SCADA/Init/Hanger.cs Normal file
View File

@@ -0,0 +1,139 @@
using MesToMs;
using MesWork;
using SlMesDbIterface;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace DC_A95
{
/// <summary>
/// 钩子函数
/// </summary>
public class Hanger
{
/// <summary>
/// 加载界面显示的信号值的初始值
/// </summary>
public static void Load_Station_PageShowSignal()
{
foreach (DictionaryEntry item in MesWorkForm.ht_Station_Label)
{
var stationName = item.Key.ToString();
MesWorkForm.ht_Signal__Station_Auto.Add(stationName, false);
MesWorkForm.ht_Signal__Station_Running.Add(stationName, false);
MesWorkForm.ht_Signal__Station_Manual.Add(stationName, false);
MesWorkForm.ht_Signal__Station_Alarm.Add(stationName, false);
if (!MesWorkForm.ht_Signal__Station_OffLine.ContainsKey(stationName))
{
MesWorkForm.ht_Signal__Station_OffLine.Add(stationName, false);
}
}
}
public static void Load_Table()
{
//查询出“全部原始基本数据列表”
var drs = MesWork.PlcLinkForm.dt_BasicData.Select($"是否启用 = 1 and 变量类型代码=101 or 变量类型代码 = 102 or 变量类型代码 = 105 and 监控属性代码 = '{DataLinkMesWork.ApplicationConfig.MES_Code.ToString()}'");
if (drs.Length > 1)
{
MesWork_QC.BasicDataTagValue = MesWork.PlcLinkForm.dt_BasicData.Select($"是否启用 = 1 and 变量类型代码=101 or 变量类型代码 = 102 or 变量类型代码 = 105 and 监控属性代码 = '{DataLinkMesWork.ApplicationConfig.MES_Code.ToString()}'").CopyToDataTable<DataRow>();
if (MesWork_QC.BasicDataTagValue.Columns.Contains("上限值"))
{
MesWork_QC.BasicDataTagValue.Columns["上限值"].ColumnName = "值上限";
}
if (MesWork_QC.BasicDataTagValue.Columns.Contains("下限值"))
{
MesWork_QC.BasicDataTagValue.Columns["下限值"].ColumnName = "值下限";
}
}
// BasicDataTagValue = MesWork.PlcLinkForm.dt_BasicData.Select($"是否启用 = 1 and 监控属性代码 = '{DataLinkMesWork.ApplicationConfig.MES_Code.ToString()}'").CopyToDataTable<DataRow>();
//查询出“MES_基本数据_测量范围”
MesWork_QC.BasicDataTagValueUpDown = MesWork.PlcLinkForm.dt_BasicData;
if (MesWork_QC.BasicDataTagValueUpDown.Columns.Contains("上限值"))
{
MesWork_QC.BasicDataTagValueUpDown.Columns["上限值"].ColumnName = "值上限";
}
if (MesWork_QC.BasicDataTagValueUpDown.Columns.Contains("下限值"))
{
MesWork_QC.BasicDataTagValueUpDown.Columns["下限值"].ColumnName = "值下限";
}
// 模拟时,写入质量数据
InitBasicDataTagValue();
}
/// <summary>
/// 模拟时,写入质量数据
/// </summary>
private static void InitBasicDataTagValue()
{
if (MesWorkForm.IsDemoMesServer != 1) return;
string tagID;
double tagValue;
//写工位总合格标志 变量类型代码=21
for (int i = 0; i < MesWork.PlcLinkForm.dt_BasicData.Rows.Count; i++)
{
if (MesWork.PlcLinkForm.dt_BasicData.Rows[i]["变量类型代码"].ToString() == "21")
{
tagID = MesWork.PlcLinkForm.dt_BasicData.Rows[i]["TagID"].ToString();
MesWorkForm.WritePLC(tagID, 1);
}
}
if (MesWork_QC.BasicDataTagValue != null)
{
for (int i = 0; i < MesWork_QC.BasicDataTagValue.Rows.Count; i++)
{
try
{
switch (Convert.ToInt32(MesWork_QC.BasicDataTagValue.Rows[i]["变量特点"]))
{
case 7:
tagID = MesWork_QC.BasicDataTagValue.Rows[i]["TagID"].ToString();
MesWorkForm.WritePLC(tagID, 1);
break;
case 6:
tagID = MesWork_QC.BasicDataTagValue.Rows[i]["TagID"].ToString();
tagValue = Convert.ToDouble(MesWork_QC.BasicDataTagValue.Rows[i]["列位置"]) * 100
+ Convert.ToDouble(MesWork_QC.BasicDataTagValue.Rows[i]["变量排序"]) / 100;
MesWorkForm.WritePLC(tagID, tagValue);
break;
}
}
catch { }
}
}
}
}
}

View File

@@ -0,0 +1,70 @@
using ConverterBytesAndStruct;
using DC_A95;
using OpcBasic;
using OpcData;
using System;
using System.Collections;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
using SystemFramework;
/// <summary>
///
/// </summary>
namespace MesWork
{
/// <summary>
/// 设备状态的处理
/// </summary>
public partial class MesWorkForm
{
/// <summary>
/// 设备状态的处理
/// </summary>
/// <param name="e"></param>
private void MIS_Device(object e)
{
var eState = (OpcData.PlcStateEvetnArgs)e;
var ip = eState.IP.ToString();
var onLine = eState.OnLine;
try
{
if (ht_IP_OnLine.ContainsKey(ip))
{
ht_IP_OnLine[ip] = onLine;
}
else
{
ht_IP_OnLine.Add(ip, onLine);
}
}
catch (Exception err){ }
try
{
if (G_DC_IP_OP.ContainsKey(ip))
{
var listOp = G_DC_IP_OP[ip];
foreach (var op in listOp)
{
ht_Signal__Station_OffLine[op] = onLine;
}
}
}
catch (Exception err){ }
}
}
}

View File

@@ -0,0 +1,320 @@
using DataLinkMesWork;
using DC_A95;
using SYNC_SAP_MES;
using System;
using System.Linq;
/// <summary>
///
/// </summary>
namespace MesWork
{
/// <summary>
/// 处理MIS逻辑
/// </summary>
public partial class MesWorkForm
{
/// <summary>
/// 处理MIS逻辑
/// </summary>
/// <param name="e"></param>
private void MIS_Funtion(object e)
{
try
{
if (NotHandlerSignal == "1")
{
return;
}
var msgEvent = (OpcData.CustomeEvetnArgs)e;
if (msgEvent.TagValue == null) return;
var tagID = msgEvent.TagID.ToString();
var opCode = msgEvent.OpName.ToString();//工位号
var tagTypeCodeID = (int)msgEvent.TagTypeCodeID;
var tagTypeID = (EnumTagTypeID)msgEvent.TagTypeID;
var isFirstValue = msgEvent.IsFirstValue.ToString().ToLower();
string tagValue;
switch (tagTypeID)
{
case EnumTagTypeID.BOOL:
tagValue = (Convert.ToInt32(msgEvent.TagValue)).ToString();
break;
default:
tagValue = msgEvent.TagValue.ToString();
break;
}
if (ValueT(isFirstValue))
{
//不处理第一次变化的值
return;
}
/*
15 系统健康
5 传递机型AMS
66 允许PLC工作AMS
34 发动机上线报警标志
20 AMS保存完数据AMS
112 发动机上线报警代码
73 机型标志AMS
74 变速箱总成编号AMS
75 产品型号AMS
116 缸体打印码
117 订单号
14 系统健康(PLC)
2 工件到位(PLC)
43 申请零件编号(PLC)
44 传递机型(PLC)
63 禁用MES(PLC)
9 机型标志PLC
10 变速箱总成编号PLC
11 产品型号PLC
80 托盘编号PLC
22 0空托盘1合格件2不合格件(PLC)
19 质量数据可以读数据PLC
21 质量数据工位合格标志(PLC)
23 0正常件1返修件(PLC)
39 缸体打印码(PLC)
40 订单号(PLC)
120 上线缸体码(PLC)
*/
switch (tagTypeCodeID)
{
case 2://工件到位
if (tagValue == "1")
{
WritePLC_IF(73, opCode, 0);//机型ID
WritePLC_IF(74, opCode, "");//发动机流水号(总成编号)
WritePLC_IF(75, opCode, "");//产品型号,机型号
WritePLC_IF(116, opCode, "");//缸体码
WritePLC_IF(117, opCode, "");//订单号
WritePLC_IF(118, opCode, 0); // 打印位置
MesWorkForm.WritePLC_IF(112, opCode, 0); // 清空报警点位
MesWorkForm.WritePLC_IF(34, opCode, false);
}
else
{
MesWorkForm.WritePLC_IF(112, opCode, 0); // 清空报警点位
MesWorkForm.WritePLC_IF(34, opCode, false);
WritePLC_IF(20, opCode, false); // 保存完成
}
break;
case 14://心跳
WritePLC_IF(15, opCode, tagValue);
break;
case 19://允许保存
if (tagValue == "1")
{
var sortNo_PLC = ReadPLC(9, opCode).ToString();
var engineNo_PLC = ReadPLC(10, opCode).ToString();
var sortName_PLC = ReadPLC(11, opCode).ToString();
var partCode_PLC = ReadPLC(39, opCode).ToString();
var orderNo_PLC = ReadPLC(40, opCode).ToString();
var palletNo_PLC = Convert.ToInt32(ReadPLC(80, opCode).ToString());
MesWork_QC.ProcessData_PartOff(opCode, engineNo_PLC, palletNo_PLC, sortNo_PLC);
MesWork_QC.MesRead(opCode, tagValue, tagID);
WritePLC_IF(20, opCode, true);
}
else
{
WritePLC_IF(5, opCode, false);
WritePLC_IF(66, opCode, false);
WritePLC_IF(20, opCode, false);
}
break;
case 43://申请上线
if (tagValue == "1")
{
//1、是否有下发的订单
//2、是否申请上线
//3、是否满足上线条件
//4、缸体码是否符合生产机型
if (!OPCodes_LineSet.Split(',').Contains(opCode))//非线首
{
return;
}
//SyncFunc_From_SAP.SyncDataOperationTask("手动同步");
PLC_R.Read_LineSet(opCode, out string partCode, out int palletNo);
ExecuteDB.Select_OnLine_Plan_Engine(opCode, partCode, palletNo
, out string engineNo, out int sortNo, out string sortName, out string printCode, out string orderNo
, out int errCode, out string errMessage, out int printPosition);
//*******************在此处验证***************************
//按规则拆解partCode缸体二维码再获取BOM验证该工位物料中是否存在该型号的缸体
//var res_SortType_FromBOM = CALL_Interfalce_WebAPI.Get_BOMs_ByWebAPI(MesWorkForm.LineID_Product, engineNo);
//**********************************************
//上线报警代码errCode
//0 - 无错误
//1 - PLC逻辑错误未申请上线
//2 - 没有可用订单
//3 - 扫描缸体码为空或格式错误
//4 - 缸体机型与生产机型不匹配
//5 - AMS写入信息与RFID信息验证不一致
//255 - 未知错误
if (errCode != 0)//获取计划失败
{
PLC_W.Write_LineSetAlarm(opCode, errCode);
LogRecord.LogRecord.Insert_Log(Type_Log.OnLine, opCode, $"发动机上线申请错误:({errCode}{errMessage}");
}
else
{
// 复位报警变量
//112 发动机上线报警代码
//34 发动机上线报警标志
MesWorkForm.WritePLC_IF(112, opCode, 0);
MesWorkForm.WritePLC_IF(34, opCode, false);
WritePLC_IF(73, opCode, sortNo);//机型ID
WritePLC_IF(74, opCode, engineNo);//发动机流水号(总成编号)
WritePLC_IF(75, opCode, sortName);//产品型号,机型号
WritePLC_IF(116, opCode, printCode);//缸体码
WritePLC_IF(117, opCode, orderNo);//订单号
WritePLC_IF(118, opCode, printPosition); // 打印位置
WritePLC_IF(5, opCode, true);
//【PLC读取数据到RFID中测试用】
//WritePLC_IF(9, opCode, sortNo);//机型ID
//WritePLC_IF(10, opCode, engineNo);//发动机流水号(总成编号)
//WritePLC_IF(11, opCode, sortName);//产品型号,机型号
//WritePLC_IF(39, opCode, partCode);//缸体码
//WritePLC_IF(40, opCode, orderNo);//订单号
LogRecord.LogRecord.Insert_Log(Type_Log.OnLine, opCode, $"上线数据写入成功engineNo={engineNo}sortNo={sortNo}sortName={sortName}printCode={printCode}orderNo={orderNo}");
}
}
else
{
WritePLC_IF(5, opCode, false);
}
break;
case 44://传递机型
if (tagValue == "1")
{
var sortNo_PLC = ReadPLC(9, opCode).ToString();
var engineNo_PLC = ReadPLC(10, opCode).ToString();
var sortName_PLC = ReadPLC(11, opCode).ToString();
var partCode_PLC = ReadPLC(39, opCode).ToString();
var orderNo_PLC = ReadPLC(40, opCode).ToString();
var palletNo_PLC = Convert.ToInt32(ReadPLC(80, opCode).ToString());
if (OPCodes_LineSet.Split(',').Contains(opCode))//线首
{
var sortNo = ReadPLC(73, opCode).ToString();
var engineNo = ReadPLC(74, opCode).ToString();
var sortName = ReadPLC(75, opCode).ToString();
var partCode = ReadPLC(116, opCode).ToString();
var orderNo = ReadPLC(117, opCode).ToString();
var str = $"{sortNo}|{engineNo}|{sortName}|{partCode}|{orderNo}";
var str_PLC = $"{sortNo_PLC}|{engineNo_PLC}|{sortName_PLC}|{partCode_PLC}|{orderNo_PLC}";
if (str != str_PLC)
{
var errCode = (int)Type_AlarmOnline.Err_RW_Diff;
PLC_W.Write_LineSetAlarm(opCode, errCode);
LogRecord.LogRecord.Insert_Log(Type_Log.Alarm, opCode, $"发动机上线信息读写校验不一致:({errCode}W{str}R{str_PLC}");
return;
}
//上线验证完成,消耗计划
ExecuteDB.Update_ExcutePlan_LineSetOK(opCode, engineNo);
WritePLC_IF(66, opCode, true);
LogRecord.LogRecord.Insert_Log(Type_Log.OnLine, opCode, $"【{tagTypeCodeID}】上线下载数据验证成功流水号消耗成功opCode={opCode}engineNo={engineNo}");
}
//保存进站数据
MesWork_QC.ProcessData_PartOn(opCode, engineNo_PLC, palletNo_PLC, sortNo_PLC);
WritePLC_IF(66, opCode, true);
}
else
{
WritePLC_IF(66, opCode, false);
}
break;
default:
break;
}
}
catch (Exception err)
{
LogRecord.LogRecord.Insert_Log(Type_Log.Alarm, "", $"MIS_Funtion报错{err.Message}+{err.StackTrace}");
}
}
/// <summary>
/// 数据库记录信号变化
/// </summary>
/// <param name="msg"></param>
private void TagTypeCodeID_TagDataOnChange(object msgEvent)
{
try
{
OpcData.CustomeEvetnArgs e = (OpcData.CustomeEvetnArgs)msgEvent;
string tagValue;
if (e.TagValue == null) return;
switch (e.TagValue.ToString().ToLower())
{
case "1":
case "true":
tagValue = "1";
break;
default:
tagValue = "0";
break;
}
string TagTypeCodeID;
string opName;
string TagID;
string TagValue;
DateTime arrivedTime;
DateTime leavedTime;
int TimeDiff;
opName = e.OpName.ToString();
TagValue = tagValue;
TagTypeCodeID = e.TagTypeCodeID.ToString();
TagID = e.TagID.ToString();
leavedTime = Convert.ToDateTime(e.TimeStamp);
arrivedTime = Convert.ToDateTime(e.TimeStampBefore);
TimeDiff = Convert.ToInt32(e.TagKeepTime);
if (TagTypeCodeID != "14" && TagTypeCodeID != "15")
{
string procedureName;
procedureName = "测量数据设备状态日志_增加数据";
System.Data.SqlClient.SqlParameter[] thisParms = new System.Data.SqlClient.SqlParameter[7];
thisParms[0] = new System.Data.SqlClient.SqlParameter("@工位号", opName);
thisParms[1] = new System.Data.SqlClient.SqlParameter("@信号类型代码", TagTypeCodeID);
thisParms[2] = new System.Data.SqlClient.SqlParameter("@TagID", TagID);
thisParms[3] = new System.Data.SqlClient.SqlParameter("@TagValue", TagValue);
thisParms[4] = new System.Data.SqlClient.SqlParameter("@到达时间", arrivedTime);
thisParms[5] = new System.Data.SqlClient.SqlParameter("@离开时间", leavedTime);
thisParms[6] = new System.Data.SqlClient.SqlParameter("@在线时间", TimeDiff);
DataAccess.ExecuteStoredProcedure(procedureName, ref thisParms);
}
}
catch (Exception err)
{
}
}
}
}

View File

@@ -0,0 +1,132 @@
using DC_A95;
using Opc.Ua;
using OpcBasic;
using Rhino.DocObjects;
using SlMesDbIterface;
using System;
using System.Collections;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
using SystemFramework;
/// <summary>
///
/// </summary>
namespace MesWork
{
/// <summary>
/// 即时数据的处理
/// </summary>
public partial class MesWorkForm
{
/// <summary>
/// 即时数据的处理
/// </summary>
/// <param name="e"></param>
private void MIS_ImmediateParam(object e)
{
try
{
var msgEvent = (OpcData.CustomeEvetnArgs)e;
if (msgEvent.TagValue == null) return;
var tagID = msgEvent.TagID.ToString();
var opName = msgEvent.OpName.ToString();
var tagTypeCodeID = (int)msgEvent.TagTypeCodeID;
var tagTypeID = (EnumTagTypeID)msgEvent.TagTypeID;
// var TagTypeCodeID = (EnumTagTypeCodeID)tagTypeCodeID;
string tagValue;
switch (tagTypeID)
{
case EnumTagTypeID.BOOL:
tagValue = (Convert.ToInt32(msgEvent.TagValue)).ToString();
break;
default:
tagValue = msgEvent.TagValue.ToString();
break;
}
switch (tagTypeCodeID)
{
case 100000://自动模式
case 100001://运行中
case 100002://手动模式
case 100004://故障
case 100005://警告
case 100006://堵料
case 100007://缺料
ExecuteDB.Update_ImmediateParam(opName, tagTypeCodeID, tagValue, tagID);
if (tagTypeCodeID == 100000)
{
ht_Signal__Station_Auto[opName] = tagValue;
}
if (tagTypeCodeID == 100001)
{
ht_Signal__Station_Running[opName] = tagValue;
}
if (tagTypeCodeID == 100002)
{
ht_Signal__Station_Manual[opName] = tagValue;
}
if (tagTypeCodeID == 100004)
{
ht_Signal__Station_Alarm[opName] = tagValue;
}
break;
case 200001://工件离开,这个时候复位信号
if (tagValue == "1")
{
/*
//100060 当前循环时间
//100080 上一工件的循环时间
//100100 平均循环时间
//100120 总计数(当前班次)
//100160 合格工件计数(总计)
//100200 不合格工件计数(总计)
*/
var list = new List<Int32>() { 100060, 100080, 100100, 100120, 100160, 100200 };
foreach (var _TagTypeCodeID in list)
{
if (int.Parse(opName.Replace("OP", "")) > 4000 && int.Parse(opName.Replace("OP", "")) < 4100)
{
}
else
{
var _Value = ReadPLC(_TagTypeCodeID, opName).ToString();
ExecuteDB.Update_ImmediateParam(opName, _TagTypeCodeID, _Value, $"{opName}_{_TagTypeCodeID}");
}
}
}
break;
default:
break;
}
}
catch (Exception err)
{ }
}
}
}

View File

@@ -0,0 +1,903 @@
using BasicData;
using ConverterBytesAndStruct;
using DataLinkMesWork;
using DC_A95;
using DC_A95.MES_A95;
using ExternalDataSync;
using HslCommunication.WebSocket;
using Newtonsoft.Json;
using NPOI.HSSF.Record.Chart;
using NPOI.OpenXmlFormats.Dml.Diagram;
using NPOI.SS.Formula.Functions;
using NPOI.Util;
using Opc.Ua;
using OpcBasic;
using System;
using System.Collections;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Reflection.Emit;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Web.Script.Serialization;
using System.Windows.Forms;
using System.Xml;
using SystemFramework;
/// <summary>
///
/// </summary>
namespace MesWork
{
/// <summary>
/// 质量数据的拆解和存储
/// </summary>
public class MesWork_QC
{
/// <summary>
/// 全部数据列表
/// </summary>
public static DataTable BasicDataTagValue;
/// <summary>
/// MES_基本数据_测量范围
/// </summary>
public static DataTable BasicDataTagValueUpDown;
/// <summary>
/// MOM接口保存过点数据(进站)
/// </summary>
/// <param name="opCode">工位名称</param>
/// <param name="DataFlag">1、进站2、离站</param>
public static void ProcessData_PartOn(string opCode, string engineNo,int palletNo,string sortNo_PLC)
{
MES_QueryCache.Get_ProductPlan_ByEngineNo(engineNo, out string engineTypeNo, out string orderNum, out int orderNo, out int orderSum, out int if_codetest, out int if_hottest);
MES_QueryCache.Get_ProductProcess_ByOP(opCode, out string processCode, out string processName, out string opName, out string AreaName);
int QualityOk = 0; //合格标志1-合格2-不合格
int PassStatus = 1; //过站状态1-正常工作2-因为前序不合格没工作放行过去3-工位被屏蔽
var Operator = "";
var optFlag = OptFlag.AddNew;
var passAttr = PassAttr.OPStart;
var upOrDown = -1;
//保存过点数据
ExecuteDB.Save_StationPass_Info(engineNo, engineTypeNo, palletNo, orderNum, orderNo, orderSum, processCode, processName,
opCode, opName, passAttr, Operator, QualityOk, PassStatus, upOrDown, optFlag, sortNo_PLC);
}
public static void ProcessData_PartOff(string opCode, string engineNo, int palletNo,string sortNo_PLC)
{
MES_QueryCache.Get_ProductPlan_ByEngineNo(engineNo, out string engineTypeNo, out string orderNum, out int orderNo, out int orderSum, out int if_codetest, out int if_hottest);
MES_QueryCache.Get_ProductProcess_ByOP(opCode, out string processCode, out string processName, out string opName, out string AreaName);
var Operator = "";
var QualityOk = 1;
var PassStatus = 1;
var optFlag = OptFlag.AddNew;
var passAttr = PassAttr.OPEnd;
var upOrDown = 3;
//离站信息保存
ExecuteDB.Save_StationPass_Info(engineNo, engineTypeNo, palletNo, orderNum, orderNo, orderSum, processCode, processName,
opCode, opName, passAttr, Operator, QualityOk, PassStatus, upOrDown, optFlag, sortNo_PLC);
}
/// <summary>
/// 允许保存(针对半自动和手动压装工位)
/// </summary>
/// <param name="OpName"></param>
/// <param name="tagValue"></param>
public static int MesRead(string opName, string tagValue, string tagid, bool isCheck = false)
{
return SaveQualityData(opName, Convert.ToInt32(tagValue), tagid, isCheck);
}
//public static string GetRealTimeQualityData(string opName)
//{
// string message = "";
// DataTable dt1 = new DataTable();
// DataTable dt_WWW;
// DataTable dt_WWW_Copy1;
// DataTable dt_WWW_Copy2;
// Hashtable valueList;
// try
// {
// var tagValues = PLC_R.ReadPLC_OpName(opName);
// //过滤出来质量数据 //获得带合格标志的质量数据
// valueList = ReadPLC_OpName_Qd(tagValues);
// //获得带基本信息的质量数据表
// GetQualityDataTable(valueList, opName, BasicDataTagValue, BasicDataTagValueUpDown, out dt_WWW);
// dt_WWW_Copy1 = dt_WWW.Copy().Select("变量排序 = 1").CopyToDataTable();
// DataView dv1 = dt_WWW_Copy1.DefaultView;
// dv1.Sort = "列位置 DESC";
// dt_WWW_Copy1 = dv1.ToTable();
// dt_WWW_Copy2 = dt_WWW.Copy().Select("变量排序 = 2").CopyToDataTable();
// DataView dv2 = dt_WWW_Copy2.DefaultView;
// dv2.Sort = "列位置 DESC";
// dt_WWW_Copy2 = dv2.ToTable();
// dt1.Columns.Add("列位置", System.Type.GetType("System.String"));
// dt1.Columns.Add("测量项目1", System.Type.GetType("System.String"));
// dt1.Columns.Add("测量项目2", System.Type.GetType("System.String"));
// dt1.Columns.Add("合格标志", System.Type.GetType("System.String"));
// dt1.Columns.Add("名称", System.Type.GetType("System.String"));
// for (int i = 0; i < dt_WWW_Copy1.Rows.Count; i++)
// {
// if (dt_WWW_Copy1.Rows[i]["TagValue"].ToString() != "0" || dt_WWW_Copy2.Rows[i]["TagValue"].ToString() != "0")
// {
// var dr = dt1.NewRow();
// dr["列位置"] = dt_WWW_Copy1.Rows[i]["列位置"].ToString();
// dr["测量项目1"] = dt_WWW_Copy1.Rows[i]["TagValue"].ToString();
// dr["测量项目2"] = dt_WWW_Copy2.Rows[i]["TagValue"].ToString();
// dr["合格标志"] = dt_WWW_Copy1.Rows[i]["IsGoodBad"].ToString();
// dr["名称"] = dt_WWW_Copy1.Rows[i]["测量项目"].ToString();
// dt1.Rows.Add(dr);
// }
// }
// }
// catch (Exception err)
// {
// }
// message = CreateJsonParameters(dt1);
// return message;
//}
public static string CreateJsonParameters(DataTable dt)
{
StringBuilder JsonString = new StringBuilder();
//Exception Handling
if (dt != null)
{
JsonString.Append("{ ");
JsonString.Append("\"rows\":[ ");
for (int i = 0; i < dt.Rows.Count; i++)
{
JsonString.Append("{ ");
for (int j = 0; j < dt.Columns.Count; j++)
{
if (j < dt.Columns.Count - 1)
{
//if (dt.Rows[i][j] == DBNull.Value) continue;
if (dt.Columns[j].DataType == typeof(bool))
{
JsonString.Append("\"" + dt.Columns[j].ColumnName.ToLower() + "\":" +
dt.Rows[i][j].ToString().ToLower() + ",");
}
else if (dt.Columns[j].DataType == typeof(string))
{
JsonString.Append("\"" + dt.Columns[j].ColumnName.ToLower() + "\":" +
ObjectToJson(dt.Rows[i][j]).ToString() + ",");
//JsonString.Append("\"" + dt.Columns[j].ColumnName.ToLower() + "\":" + "\"" +
// dt.Rows[i][j].ToString().Replace("\"", "\\\"") + "\",");
}
else
{
JsonString.Append("\"" + dt.Columns[j].ColumnName.ToLower() + "\":" + "\"" + dt.Rows[i][j] + "\",");
}
}
else if (j == dt.Columns.Count - 1)
{
//if (dt.Rows[i][j] == DBNull.Value) continue;
if (dt.Columns[j].DataType == typeof(bool))
{
JsonString.Append("\"" + dt.Columns[j].ColumnName.ToLower() + "\":" +
dt.Rows[i][j].ToString().ToLower());
}
else if (dt.Columns[j].DataType == typeof(string))
{
JsonString.Append("\"" + dt.Columns[j].ColumnName.ToLower() + "\":" +
ObjectToJson(dt.Rows[i][j]).ToString());
//JsonString.Append("\"" + dt.Columns[j].ColumnName.ToLower() + "\":" + "\"" +
// dt.Rows[i][j].ToString().Replace("\"", "\\\"") + "\"");
}
else
{
JsonString.Append("\"" + dt.Columns[j].ColumnName.ToLower() + "\":" + "\"" + dt.Rows[i][j] + "\"");
}
}
}
/*end Of String*/
if (i == dt.Rows.Count - 1)
{
JsonString.Append("} ");
}
else
{
JsonString.Append("}, ");
}
}
JsonString.Append("]");
JsonString.Append("}");
return JsonString.ToString().Replace("\n", "");
}
else
{
return null;
}
}
public static string ObjectToJson(object obj)
{
JavaScriptSerializer js = new JavaScriptSerializer();
js.MaxJsonLength = Int32.MaxValue; // 定义JavaScriptSerializer接受字符串的最大长度 hdk 20180524
try
{
return js.Serialize(obj);
}
catch (Exception exception)
{
throw new Exception(exception.Message);
}
}
/// <summary>
/// 返回合格标志
/// </summary>
/// <param name="opName"></param>
/// <param name="tagValue"></param>
/// <param name="tagID"></param>
/// <returns></returns>
private static int SaveQualityData(string opName, int tagValue, string tagID, bool isCheck = false)
{
int id_tagCF;
int qualityMask = 0;
int engineTypeID = 0;
string engineID = "";
string engineType = "";
string partPallet = "";
string orderFormPlc = "";
DataTable dt_WWW;
Hashtable valueList;
try
{
var tagValues = PLC_R.ReadPLC_OpName(opName);
//过滤出来质量数据 //获得带合格标志的质量数据
valueList = ReadPLC_OpName_Qd(tagValues);
engineTypeID = Convert.ToInt32(GetValueByTagTypeCodeID(tagValues, Convert.ToInt32(EnumTagTypeCodeID.EngineTypeID)));
engineID = GetValueByTagTypeCodeID(tagValues, Convert.ToInt32(EnumTagTypeCodeID.EngineID)).ToString();
engineType = GetValueByTagTypeCodeID(tagValues, Convert.ToInt32(EnumTagTypeCodeID.EngineType)).ToString();
orderFormPlc = GetValueByTagTypeCodeID(tagValues, Convert.ToInt32(EnumTagTypeCodeID.OrderFormPLC)).ToString();
qualityMask = Convert.ToInt32(GetValueByTagTypeCodeID(tagValues, Convert.ToInt32(EnumTagTypeCodeID.QualityMask)));
//获得带基本信息的质量数据表
GetQualityDataTable(valueList, opName, BasicDataTagValue,BasicDataTagValueUpDown, out dt_WWW);
DateTime lastupdatetime = DateTime.Now;
//保存质量数
BaseData_tagTable_QualityData_B5A_IndexInsert(engineID, tagID, engineType, engineTypeID, opName, qualityMask, partPallet, out id_tagCF);
BaseData_tagTable_QualityData_B5A_Insert(id_tagCF, engineTypeID, engineType, engineID, opName, dt_WWW, isCheck);
MesWork_QC_upload.SyncTask_UploadMeasureData(id_tagCF.ToString());
Material_Insert(opName, 1);
}
catch (Exception err)
{
LogRecord.LogRecord.Insert_Log(Type_Log.Alarm, "", $"SaveQualityData 报错!,,{err.Message}+{err.StackTrace }");
}
return qualityMask;
}
/// <summary>
/// AMES_MES_装配数据_零部件追溯_增加
/// </summary>
/// <param name="opName"></param>
/// <param name="m_ConfirmOkGo"></param>
/// <returns></returns>
public static bool Material_Insert(string opName, int m_ConfirmOkGo)
{
string produceName = "MES_装配数据_零部件追溯_增加";
SqlParameter[] thisParms = new SqlParameter[2];
thisParms[0] = new System.Data.SqlClient.SqlParameter("@工位号", opName);
thisParms[1] = new System.Data.SqlClient.SqlParameter("@放行方式", m_ConfirmOkGo);
return DataAccess.ExecuteStoredProcedure(produceName, ref thisParms);
}
static public void GetQualityDataTable(Hashtable valuList, string opName, DataTable BasicDataTagValue, DataTable BasicDataTagValueUpDown, out DataTable dt)
{
//78 0屏蔽MES1启用MES(必须MIS)
//79 通过线体工位PC实现下达工位工作状态工位有三种状态在线、离线、屏蔽。在线;0正常状态实现正常功能。1离线2屏蔽。(必须MIS)
//41 机体流向标志1 BYTE0普通工位1上线发动机上线2下线发动机下线(必须PLC)
//51 返修工位修改后的数据MES将数据写入PLC MES通知PLC数据修改完成。(YN)
//8 只要返修必须由mes发送此信号plc接收此信号后才能放行
//暂时没用用于有扳手拧紧工位。通知设备螺钉拧紧完成。PC已经将数据保存到数据库中。(B5A)
QualityDataType qualityData;
//是否有数据
//bool isUsing;
DataRow dr;
DataRow[] dr_WWW;
//MES_基本数据_测量范围
DataRow[] dr_WWW_UpDown;
dt = BuildDataTables_WWW();
//测量位置
string shaftID;
//测量项目
string item;
//测量单位
string unit;
//机体类型
//原始数据中的机型代码
int engineTypeID_Source;
//上限值
string tagValueUp;
//下限值
string tagValueDown;
//理论值
string tagValeNormal;
//TagValue
// 合格标志
//string IsGoodBad;
foreach (DictionaryEntry valueItem in valuList) //ht为一个Hashtable实例
{
try
{
qualityData = (QualityDataType)valueItem.Value;
//if ((qualityData.tagProperty != 2) || (qualityData.tagProperty != 6))
//{
// continue ;
//}
//if ((qualityData.tagProperty == 2) || (qualityData.tagProperty == 6))
{
//if (engineTypeID == 0)
//{
// engineTypeID = 1;
//}
dr_WWW = BasicDataTagValue.Select("TagID = " + qualityData.tagID);
try
{
dr_WWW_UpDown = BasicDataTagValueUpDown.Select("TagID = " + qualityData.tagID);
}
catch { dr_WWW_UpDown = null; }
//if (dr_WWW.Length > 0)
//{
// {
// engineTypeID_Source = Convert.ToInt32(dr_WWW[0]["机体类型"]);
// int temp;
// temp = engineTypeID_Source & engineTypeID;
// if (temp == 0)
// {
// continue;
// }
// if (qualityData.isGoodBad == -1)
// {
// continue;
// }
// }
//}
//else
//{
// continue;
//}
try
{
shaftID = dr_WWW[0]["测量位置"].ToString();
}
catch
{
shaftID = "";
}
try
{
item = dr_WWW[0]["测量项目"].ToString();
}
catch
{
item = "";
}
try
{
unit = dr_WWW[0]["测量单位"].ToString();
}
catch
{
unit = "";
}
try
{
tagValueUp = "";
if (dr_WWW_UpDown != null && dr_WWW_UpDown.Length > 0)
{
tagValueUp = dr_WWW_UpDown[0]["值上限"].ToString();
}
else
{
tagValueUp = "";
}
}
catch
{
tagValueUp = "";
}
try
{
tagValueDown = "";
if (dr_WWW_UpDown != null && dr_WWW_UpDown.Length > 0)
{
tagValueDown = dr_WWW_UpDown[0]["值下限"].ToString();
}
}
catch
{
tagValueDown = "";
}
try
{
tagValeNormal = "";
if (dr_WWW_UpDown != null && dr_WWW_UpDown.Length > 0)
{
tagValeNormal = dr_WWW_UpDown[0]["理论值"].ToString();
}
}
catch
{
tagValeNormal = "";
}
dr = dt.NewRow();
dr["TagID"] = qualityData.tagID;
dr["测量位置"] = shaftID;
dr["测量项目"] = item;
dr["测量单位"] = unit;
dr["上限值"] = tagValueUp;
dr["下限值"] = tagValueDown;
dr["理论值"] = tagValeNormal;
dr["工位号"] = opName;
dr["列位置"] = qualityData.tagOrderBy;
dr["变量排序"] = qualityData.tagItemOrderBy;
dr["IsGoodBad"] = qualityData.isGoodBad;
switch (qualityData.tagTypeID)//
{
//合格标志数组
case 8203:
dr["TagValue"] = GetQualityData_GoodBad_String((bool[])qualityData.tagValue);
break;
case 8209:
dr["TagValue"] = "";
break;
//非标准REAL
case 8210:
dr["TagValue"] = GetNoNormalReal(qualityData.tagValue);
dt.Rows.Add(dr);
break;
default:
dr["TagValue"] = Convert.ToString(qualityData.tagValue);
dt.Rows.Add(dr);
break;
}
//福田对质量数据特殊处理MA20保留4位小数点其余保留两位
if (opName == "J07MA020")
{
dr["TagValue"] = Convert.ToDouble(dr["TagValue"]).ToString("0.####");
}
else
{
dr["TagValue"] = Convert.ToDouble(dr["TagValue"]).ToString("0.##");
}
if (opName == "J07MA150")
{
dr["变量排序"] = 1;
dr["IsGoodBad"] = 1;
}
}
}
catch (Exception err)
{
//ApplicationLog.WriteLog(err, err.Message);
}
}
}
/// <summary>
/// 29 工位具体零件合格标志
/// </summary>
/// <param name="QualityData_GoodBad"></param>
static public string GetQualityData_GoodBad_String(bool[] QualityData_GoodBad)
{
string str;
str = "";
if (QualityData_GoodBad != null)
{
for (int i = 0; i < QualityData_GoodBad.Length; i++)
{
str = str + (Convert.ToInt32(QualityData_GoodBad[i])).ToString() + "|";
}
}
return str;
}
/// <summary>
/// 返回非标准real
/// </summary>
/// <param name="vDataValue"></param>
/// <returns></returns>
static public string GetNoNormalReal(object vDataValue)
{
try
{
string real_a;
string real_b;
string groupValueString;
int length;
//int real_b_Int;
length = ((System.Array)(vDataValue)).Length;
groupValueString = "";
if (length != 2)
return "0.0";
real_a = Convert.ToUInt16((((System.Array)(vDataValue)).GetValue(0))).ToString();
real_b = Convert.ToUInt16((((System.Array)(vDataValue)).GetValue(1))).ToString("00");
groupValueString = real_a + "." + real_b;
return groupValueString;
}
catch
{
////ApplicationLog.WriteLog(err, "GetNoNormalReal");
return "0.0";
}
}
/// <summary>
/// 数据表
/// </summary>
/// <returns></returns>
static public DataTable BuildDataTables_WWW()
{
DataTable table;
DataColumnCollection columns;
table = new DataTable();
columns = table.Columns;
table.Columns.Add("TagID", typeof(System.String));
table.Columns.Add("TagValue", typeof(System.String));
table.Columns.Add("IsGoodBad", typeof(System.Int32));
table.Columns.Add("测量位置", typeof(System.String));
table.Columns.Add("测量项目", typeof(System.String));
table.Columns.Add("工位号", typeof(System.String));
table.Columns.Add("理论值", typeof(System.String));
table.Columns.Add("上限值", typeof(System.String));
table.Columns.Add("下限值", typeof(System.String));
table.Columns.Add("测量单位", typeof(System.String));
table.Columns.Add("列位置", typeof(System.Int32));
table.Columns.Add("变量排序", typeof(System.Int32));
return table;
}
/// <summary>
/// 数据表
/// </summary>
/// <returns></returns>
private static object GetValueByTagTypeCodeID(ConcurrentDictionary<string, TagFormat> opTagList, int TagTypeCodeID)
{
try
{
return opTagList.Where(x => x.Value.TagTypeCodeID == TagTypeCodeID).ToList()[0].Value.TagValue;
}
catch (Exception err) { return "-3"; }
}
/// <summary>
/// 根据工位名称,读取工位对应的质量数据,带合格标志
/// </summary>
/// <param name="opName"></param>
/// <returns></returns>
public static Hashtable ReadPLC_OpName_Qd(ConcurrentDictionary<string, TagFormat> tagValues)
{
//lock (l)
{
//var tagValues = DtWebApi.ReadWritePLC.ReadPLC_OpName(opName); //GetDbAndMaxLengthByOpNameByBytes(opName);
var keyValues = tagValues.OrderBy(x => x.Key).ToDictionary(k => k.Key, v => v.Value);
TagFormat tagFormatTemp;
int tagIndex = 1;
int isOK = 0;
Hashtable ht = new Hashtable();
foreach (KeyValuePair<string, TagFormat> _cd in keyValues)
{
if (_cd.Key.ToString()[0].ToString() == "7")
{
tagFormatTemp = _cd.Value;
if (tagIndex % 3 == 1)
{
isOK = Convert.ToInt32(tagFormatTemp.TagValue);
}
else if (tagIndex % 3 == 2)
{
var TF = _cd.Value;
QualityDataType qualityDataType;
qualityDataType = GetQualityDataType(TF);
qualityDataType.isGoodBad = isOK;
ht.Add(qualityDataType.tagID, qualityDataType);
}
else if (tagIndex % 3 == 0)
{
var TF = (TagFormat)_cd.Value;
QualityDataType qualityDataType;
qualityDataType = GetQualityDataType(TF);
qualityDataType.isGoodBad = isOK;
ht.Add(qualityDataType.tagID, qualityDataType);
}
tagIndex++;
}
//Console.WriteLine($"key{kv.Key} value{kv.Value}");
}
return ht;
}
}
public static QualityDataType GetQualityDataType(TagFormat TF)
{
QualityDataType qualityDataType;
qualityDataType = new QualityDataType();
qualityDataType.tagID = TF.TagID;
qualityDataType.tagTypeID = TF.TagTypeID;//变量类型
qualityDataType.opName = TF.OpName;
// int.TryParse(TF.TagQuality.ToString(), out int TagQuality);
var TagQuality = 192;
qualityDataType.tagQuality = TagQuality;
qualityDataType.tagValueType = TF.TagTypeCodeID;
int.TryParse(TF.TagOrderBy, out int TagOrderBy);
qualityDataType.tagOrderBy = TagOrderBy;
int.TryParse(TF.TagItemOrderBy, out int TagItemOrderBy);
qualityDataType.tagItemOrderBy = TagItemOrderBy;
qualityDataType.tagProperty = Convert.ToInt32(TF.TagProperty);//变量特点
qualityDataType.tagValue = TF.TagValue;//变量值
return qualityDataType;
}
public static bool BaseData_tagTable_QualityData_B5A_IndexInsert(string EngineID, string tagID, string EngineType, int EngineTypeID, string opName, int isGoodBad, string PartPalletCode, out int Id_tagCF)
{
string procedureName;
procedureName = "测量数据合格索引_增加";
Id_tagCF = 0;
SqlParameter[] thisParms = new SqlParameter[8];
thisParms[0] = new System.Data.SqlClient.SqlParameter("@EngineID", EngineID);
thisParms[1] = new System.Data.SqlClient.SqlParameter("@TagID_CF", Convert.ToInt32(tagID));
thisParms[2] = new System.Data.SqlClient.SqlParameter("@EngineType", EngineType);
thisParms[3] = new System.Data.SqlClient.SqlParameter("@EngineTypeID", EngineTypeID);
thisParms[4] = new System.Data.SqlClient.SqlParameter("@工位号", opName);
thisParms[5] = new System.Data.SqlClient.SqlParameter("@托盘编号", PartPalletCode);
thisParms[6] = new System.Data.SqlClient.SqlParameter("@合格标志", isGoodBad);
thisParms[7] = new System.Data.SqlClient.SqlParameter("@Id_tagCF", Id_tagCF)
{ Direction = ParameterDirection.Output };
if (DataAccess.ExecuteStoredProcedure(procedureName, ref thisParms))
{
Id_tagCF = Convert.ToInt32(thisParms[7].Value.ToString());
return true;
}
return false;
}
public static bool BaseData_tagTable_QualityData_B5A_Insert(int Id_tagCF, int engineTypeID, string engineType, string engineID, string opName, DataTable dt, bool IsCheck = false)
{
string procedureName;
procedureName = "测量数据合格_增加";
SqlParameter[] thisParms = new SqlParameter[7];
thisParms[0] = new System.Data.SqlClient.SqlParameter("@Id_tagCF", Id_tagCF);
thisParms[1] = new System.Data.SqlClient.SqlParameter("@EngineTypeID", engineTypeID);
//thisParms[2] = new System.Data.SqlClient.SqlParameter("@EngineType", engineType);
thisParms[2] = new System.Data.SqlClient.SqlParameter("@EngineID", engineID);
thisParms[3] = new System.Data.SqlClient.SqlParameter("@TagID", SqlDbType.Int, 4, "TagID");
thisParms[4] = new System.Data.SqlClient.SqlParameter("@TagValue", SqlDbType.NVarChar, 100, "TagValue");
thisParms[5] = new System.Data.SqlClient.SqlParameter("@IsGoodBad", SqlDbType.Int, 4, "IsGoodBad");
//是否保存无合格标志数据数据
thisParms[6] = new System.Data.SqlClient.SqlParameter("@IsCheck", IsCheck);
//thisParms[6] = new System.Data.SqlClient.SqlParameter("@测量位置", SqlDbType.NVarChar, 50, "测量位置");
//thisParms[7] = new System.Data.SqlClient.SqlParameter("@测量项目", SqlDbType.NVarChar, 50, "测量项目");
//thisParms[8] = new System.Data.SqlClient.SqlParameter("@工位号", opName); //为了给J07MA020 保留四位精度而设置
//thisParms[9] = new System.Data.SqlClient.SqlParameter("@理论值", SqlDbType.NVarChar, 50, "理论值");
//thisParms[10] = new System.Data.SqlClient.SqlParameter("@上限值", SqlDbType.NVarChar, 50, "上限值");
//thisParms[11] = new System.Data.SqlClient.SqlParameter("@下限值", SqlDbType.NVarChar, 50, "下限值");
//thisParms[12] = new System.Data.SqlClient.SqlParameter("@测量单位", SqlDbType.NVarChar, 50, "测量单位");
//thisParms[13] = new System.Data.SqlClient.SqlParameter("@列位置", SqlDbType.Int, 4, "列位置");
//thisParms[14] = new System.Data.SqlClient.SqlParameter("@变量排序", SqlDbType.Int, 4, "变量排序");
//table.Columns.Add("TagID", typeof(System.Int32));
//table.Columns.Add("TagValue", typeof(System.String));
//table.Columns.Add("IsGoodBad", typeof(System.Int32));
//table.Columns.Add("测量位置", typeof(System.String));
//table.Columns.Add("测量项目", typeof(System.String));
//table.Columns.Add("工位号", typeof(System.String));
//table.Columns.Add("理论值", typeof(System.String));
//table.Columns.Add("上限值", typeof(System.String));
//table.Columns.Add("下限值", typeof(System.String));
//table.Columns.Add("测量单位", typeof(System.String));
//table.Columns.Add("列位置", typeof(System.Int32));
//table.Columns.Add("变量排序", typeof(System.Int32));
return DataAccess.ExecuteStoredProcedure(procedureName, ref thisParms, dt);
}
//public static int MesRead_J07MA150(string opName, string tagValue, string tagid)
//{
// int qualityMask = 0;
// if (tagValue == "0")
// {
// MIS_BASE.Write_TagTypeID(20, opName, false);
// }
// else
// {
// qualityMask = SaveQualityData_J07MA150(opName, Convert.ToInt32(tagValue), tagid);
// MIS_BASE.Write_TagTypeID(20, opName, true);
// }
// return qualityMask;
//}
/// <summary>
/// 返回合格标志, 注油工位 质量数据为字符串,读取备用点 变量类型代码 = 41
/// </summary>
/// <param name="opName"></param>
/// <param name="tagValue"></param>
/// <param name="tagID"></param>
/// <returns></returns>
private static int SaveQualityData_J07MA150(string opName, int tagValue, string tagID)
{
int id_tagCF;
int qualityMask = 0;
int engineTypeID = 0;
string engineID = "";
string engineType = "";
string partPallet = "";
string orderFormPlc = "";
DataTable dt_WWW;
Hashtable valueList;
try
{
//过滤出来质量数据 //获得带合格标志的质量数据
var tagValues = PLC_R.ReadPLC_OpName(opName);
valueList = ReadPLC_OpName_Qd_J07MA150(tagValues);
//valueList = ReadPLC_OpName_Qd(tagValues);
engineTypeID = Convert.ToInt32(GetValueByTagTypeCodeID(tagValues, Convert.ToInt32(EnumTagTypeCodeID.EngineTypeID)));
engineID = GetValueByTagTypeCodeID(tagValues, Convert.ToInt32(EnumTagTypeCodeID.EngineID)).ToString();
engineType = GetValueByTagTypeCodeID(tagValues, Convert.ToInt32(EnumTagTypeCodeID.EngineType)).ToString();
orderFormPlc = GetValueByTagTypeCodeID(tagValues, Convert.ToInt32(EnumTagTypeCodeID.OrderFormPLC)).ToString();
engineID = GetValueByTagTypeCodeID(tagValues, Convert.ToInt32(EnumTagTypeCodeID.EngineID)).ToString();
qualityMask = Convert.ToInt32(GetValueByTagTypeCodeID(tagValues, Convert.ToInt32(EnumTagTypeCodeID.QualityMask)));
//获得带基本信息的质量数据表
GetQualityDataTable(valueList, opName, BasicDataTagValue,
BasicDataTagValueUpDown, out dt_WWW);
DateTime lastupdatetime = DateTime.Now;
//保存质量数
BaseData_tagTable_QualityData_B5A_IndexInsert(engineID, tagID, engineType, engineTypeID, opName, qualityMask, partPallet, out id_tagCF);
BaseData_tagTable_QualityData_B5A_Insert(id_tagCF, engineTypeID, engineType, engineID, opName, dt_WWW);
// }
Material_Insert(opName, 1);
}
catch (Exception err)
{
}
return qualityMask;
}
public static Hashtable ReadPLC_OpName_Qd_J07MA150(ConcurrentDictionary<string, TagFormat> tagValues)
{
//lock (l)
{
//var tagValues = DtWebApi.ReadWritePLC.ReadPLC_OpName(opName); //GetDbAndMaxLengthByOpNameByBytes(opName);
var keyValues = tagValues.OrderBy(x => x.Key).ToDictionary(k => k.Key, v => v.Value);
TagFormat tagFormatTemp;
int tagIndex = 1;
int isOK = 1;
Hashtable ht = new Hashtable();
//var TF = _cd.Value;
////var TF = Read_TagTypeID(39, opName, out OrderForm);
//QualityDataType qualityDataType;
//qualityDataType = GetQualityDataType(TF);
//qualityDataType.isGoodBad = isOK;
//ht.Add(qualityDataType.tagID, qualityDataType);
foreach (KeyValuePair<string, TagFormat> _cd in keyValues)
{
if (_cd.Value.TagTypeCodeID.ToString() == "41")
{
tagFormatTemp = _cd.Value;
var TF = _cd.Value;
QualityDataType qualityDataType;
qualityDataType = GetQualityDataType(TF);
qualityDataType.isGoodBad = isOK;
qualityDataType.tagItemOrderBy = 1;
qualityDataType.tagOrderBy = 1;
ht.Add(qualityDataType.tagID, qualityDataType);
}
//Console.WriteLine($"key{kv.Key} value{kv.Value}");
}
return ht;
}
}
}
}

View File

@@ -0,0 +1,48 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DC_A95.MES_A95
{
public class OptFlag
{
public static int AddNew = 1;
public static int Modify = 2;
public static int Delete = 3;
}
public class PassAttr
{
//真的是4-进站1-出站5-上在制
public static int OPStart = 4;
public static int OPEnd = 1;
}
public class PlanExec_State
{
//1-未开始2-已上线
public static int Waiting = 1;
public static int HasExec = 2;
}
public class TaskTypeInfo
{
public short TaskTypeID;
public string TaskTypeName;
public int QCDataCount;
public string DataName1;
public string DataUnit1;
public string DataName2;
public string DataUnit2;
public string DataName3;
public string DataUnit3;
public string DataName4;
public string DataUnit4;
}
}

View File

@@ -0,0 +1,202 @@
using CentralControl;
using DataLinkMesWork;
using Newtonsoft.Json;
using SlMesDbIterface;
using System;
using System.Collections.Generic;
using System.Data;
using System.Threading;
/// <summary>
///
/// </summary>
namespace MesWork
{
/// <summary>
/// 质量数据的拆解和存储
/// </summary>
public class MesWork_QC_upload
{
/// <summary>
/// 同步执行任务
/// </summary>
public static void SyncTask_UploadMeasureData(string id_tagCF)
{
new Thread(new ThreadStart(delegate ()
{
string msg = "";
try
{
// 查询质量数据
bool isUploadOk = false;
var sql_AMS_Plan = $"SELECT * FROM 质量数据上传_视图" +
$" where [接口输出] != 1 and id_tagCF = {id_tagCF} order by [工位号],[TagID] ";
bool isOk = SqlOperation.ExecuteSql(sql_AMS_Plan, out DataTable dt_MeasureData, out string err1);
if (isOk)
{
if(dt_MeasureData.Rows.Count > 0)
{
isUploadOk = upLoadData(dt_MeasureData, out msg);
}
}
if(isUploadOk)
{
upLoadUpdate(id_tagCF, 1, msg);
}
else
{
upLoadUpdate(id_tagCF, 2, msg);
}
}
catch (Exception err)
{
msg = err.Message;
upLoadUpdate(id_tagCF, 2, msg);
}
}))
{ IsBackground = true }.Start();
}
public static bool upLoadData(DataTable dt, out string msg)
{
try
{
List<SapMeasureData> SapMeasureDataList = new List<SapMeasureData>();
string dateShort = new DateTime().ToString("yyyyMMdd");
for (int i = 0; i < dt.Rows.Count; i++)
{
SapMeasureData sapMeasureData = new SapMeasureData();
sapMeasureData.ID = dt.Rows[i]["Id"].ToString();
sapMeasureData.operationCode = dt.Rows[i]["工位代码"].ToString();
sapMeasureData.itemCode = dt.Rows[i]["订货号"].ToString();
sapMeasureData.productCode = dt.Rows[i]["EngineID"].ToString();
sapMeasureData.characterName = dt.Rows[i]["测量位置"].ToString() + dt.Rows[i]["测量项目"].ToString();
sapMeasureData.content = "";
sapMeasureData.cNumber = "";
sapMeasureData.positionNumber = dt.Rows[i]["列位置"].ToString();
sapMeasureData.specialCategory = "";
sapMeasureData.cImportance = "";
sapMeasureData.unit = dt.Rows[i]["测量单位"].ToString();
sapMeasureData.normalMin = Convert.ToInt32(dt.Rows[i]["下限值"]);
sapMeasureData.normalMax = Convert.ToInt32(dt.Rows[i]["上限值"]);
sapMeasureData.checkInput = dt.Rows[i]["TagValue"].ToString();
sapMeasureData.isNormal = Convert.ToInt32(dt.Rows[i]["IsGoodBad"]);
sapMeasureData.checkToolNumber = "";
sapMeasureData.checkToolName = "";
sapMeasureData.machineNumber = "";
sapMeasureData.machineSpindleNumber = "";
sapMeasureData.machineClampingNumber = "";
sapMeasureData.inputDate = dt.Rows[i]["操作时间"].ToString();
sapMeasureData.reMarks = "";
SapMeasureDataList.Add(sapMeasureData);
}
ResponseBody_WebAPI_Boms res = CALL_Interfalce_WebAPI.RequestPost_UploadMeasureData_To_SAP(JsonConvert.SerializeObject(SapMeasureDataList));
if (res.code == "200")
{
msg = res.message;
return true;
}
else
{
msg = res.message;
return false;
}
}
catch (Exception err)
{
msg = err.Message;
return false;
}
}
public static void upLoadUpdate(string id_tagCF, int isOk, string msg)
{
try
{
var sql_AMS_Plan = $"UPDATE [dbo].[测量数据合格] SET [接口输出] = {isOk},数据说明 = '{msg}'" +
$" where [id_tagCF] = '{id_tagCF}'";
DataAccess.ExecuteDataTable(sql_AMS_Plan, out DataTable dt_MeasureData);
}
catch (Exception err)
{
}
}
}
class SapMeasureData
{
/*
id number(12) id
line_id varchar2(10) y 生产线id
operation_code varchar2(10) y 工位编码
item_code varchar2(255) y 物料编码
product_code varchar2(16) y 序列号
character_name varchar2(255) y 特性名称
content varchar2(255) y 特性内容(产品/过程规格/公差)φ是大写
c_number varchar2(40) y 特性编号
position_number varchar2(40) y 位置编号
special_category varchar2(10) y 特殊特性分类
c_importance varchar2(10) y 特性重要度
unit varchar2(10) y 单位
normal_min number y 合格下限
normal_max number y 合格上限
check_input varchar2(255) y 质检结果
isnormal number(1) y 是否合格(01)
check_tool_number varchar2(30) y 测量设备编号
check_tool_name varchar2(80) y 测量设备名称
machine_number varchar2(40) y null 加工设备编号
machine_spindle_number varchar2(40) y null 加工设备主轴编号
machine_clamping_number varchar2(40) y 加工设备工装编号
input_date date y 录入时间
remarks varchar2(255) y 备注
*/
public string ID;
public string lineId = MesWorkForm.LineID_Product;
public string operationCode;
public string itemCode;
public string productCode;
public string characterName;
public string content;
public string cNumber;
public string positionNumber;
public string specialCategory;
public string cImportance;
public string unit;
public int normalMin;
public int normalMax;
public string checkInput;
public int isNormal;
public string checkToolNumber;
public string checkToolName;
public string machineNumber;
public string machineSpindleNumber;
public string machineClampingNumber;
public string inputDate;
public string reMarks;
}
class SapMeasureDataResult
{
public List<SapMeasureData> SapMeasureDataList;
}
}

187
SCADA/MainGuide/MW.Event.cs Normal file
View File

@@ -0,0 +1,187 @@
using SlMesDbIterface;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Drawing;
using System.ComponentModel;
using System.Windows.Forms;
using DC_A95;
using ExternalDataSync;
using MainLineRepair;
using NPOITest;
namespace MesWork
{
/// <summary>
///
/// </summary>
public partial class Temp { }
/// <summary>
/// 事件处理
/// </summary>
public partial class MesWorkForm
{
/// <summary>
/// 打开监控界面
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void label_Monitor_PLC_Click(object sender, EventArgs e)
{
new OpcForm(IsDemoMesServer).Show(this);
}
/// <summary>
/// 关闭按钮
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void label_ExitSys_Click(object sender, EventArgs e)
{
if (MessageBox.Show("是否确认退出程序?", "退出", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.OK)
{
timer_OnLine_Show.Enabled = false;
timer_ShowStation.Enabled = false;
CloseDeviceConn();
//StopServer();
LogRecord.LogRecord.Insert_Log(Type_Log.Login, "", "退出MES系统");
System.Diagnostics.Process.GetCurrentProcess().Kill();
}
}
private void label_PlanManage_Click(object sender, System.EventArgs e)
{
var planquery = new PlanExecute_Query.PlanExecute();
planquery.ShowDialog();
}
/// <summary>
/// 鼠标移动
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void C_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)
{
if (allowDrag & isMouseDown)
{
var control = (Control)sender;
int left = control.Left + e.X - mouseOffset.X;
int top = control.Top + e.Y - mouseOffset.Y;
control.Location = new Point(left, top);
}
}
/// <summary>
/// 打开调试界面
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void label_Test_RW_Click(object sender, EventArgs e)
{
new F_TestPage().Show(this);
}
/// <summary>
/// 打开监控画面
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Panel_Click(object sender, EventArgs e)
{
if (MesWorkForm.allowDrag)
{
return;
}
var panel = (Panel)sender;
var stationName = panel.Tag.ToString();
if (!MesWorkForm.list_OpenForm.Contains(stationName))
{
var stationShow = new TagDataEngineStatusShowDialog(stationName);
stationShow.Show(this);
MesWorkForm.list_OpenForm.Add(stationName);
}
}
/// <summary>
/// 查看消息提示
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Panel_MouseHover(object sender, EventArgs e)
{
var panel = (Panel)sender;
new ToolTip().SetToolTip(panel, panel.Tag.ToString());
}
/// <summary>
/// 打开日志
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btn_QueryLog_Click(object sender, EventArgs e)
{
new LogRecord.LogRecord(this.Width, this.Height).Show(this);
}
/// <summary>
/// 保存布局
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btn_SaveLyout_Click(object sender, EventArgs e)
{
FuncOperation.SaveLyout();
}
/// <summary>
/// 打开参数配置
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void label_ParamConfig_Click(object sender, EventArgs e)
{
new ParamConfigPage().ShowDialog();
}
/// <summary>
/// 按下鼠标
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void C_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
mouseOffset.X = e.X;
mouseOffset.Y = e.Y;
isMouseDown = true;
}
}
/// <summary>
/// 抬起鼠标
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void C_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
isMouseDown = false;
}
}
/// <summary>
/// 工位管理
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void label_StationManage_Click(object sender, System.EventArgs e)
{
var dlg = new F_StationManage();
dlg.ShowDialog();
}
}
}

View File

@@ -0,0 +1,92 @@
using SlMesDbIterface;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Drawing;
using System.ComponentModel;
using System.Windows.Forms;
using static System.Windows.Forms.VisualStyles.VisualStyleElement;
namespace MesWork
{
/// <summary>
///
/// </summary>
public partial class Temp { }
/// <summary>
/// 布局
/// </summary>
public partial class MesWorkForm
{
/// <summary>
/// 添加布局
/// </summary>
public void ReLoadStationIcon()
{
ht_Station_Content = new Hashtable();
ht_Station_Label = new Hashtable();
G_DC_IP_OP = new Dictionary<String, List<String>>();
ExecuteDB.Select_Station(out DataTable dt);
for (int i = 0; i < dt.Rows.Count; i++)
{
var = dt.Rows[i]["工位号"].ToString();
var = dt.Rows[i]["工位名称"].ToString();
var PLC = dt.Rows[i]["PLC"].ToString();
var PLC代码 = dt.Rows[i]["PLC代码"].ToString();
var PX = Convert.ToInt32(dt.Rows[i]["PX"]);
var PY = Convert.ToInt32(dt.Rows[i]["PY"]);
var PX_T = Convert.ToInt32(dt.Rows[i]["PX_T"]);
var PY_T = Convert.ToInt32(dt.Rows[i]["PY_T"]);
var = dt.Rows[i]["控件启用"].ToString().ToLower();
if ( == "1" | == "true")
{
SetMember(, Release(new Panel()
{
Location = new System.Drawing.Point(PX, PY),
Size = new Size(30, 30),
BackColor = color_Bad,
Tag = ,
BorderStyle = BorderStyle.Fixed3D
}));
SetMember(, Release(new Label()
{
Location = new System.Drawing.Point(PX_T, PY_T),
Size = new Size(35, 25),
Text = .Replace("OP", "")
}));
}
try
{
if (G_DC_IP_OP.ContainsKey(PLC))
{
G_DC_IP_OP[PLC].Add();
}
else
{
var list = new List<String>();
list.Add();
G_DC_IP_OP.Add(PLC, list);
}
}
catch (Exception err)
{
}
}
}
}
}

View File

@@ -0,0 +1,197 @@
using DC_A95;
using DC_A95.MES_A95;
using MesToMs;
using SlMesDbIterface;
using System;
using System.Collections.Generic;
using System.Data;
using System.Diagnostics;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
using SystemFramework;
using WebApi;
namespace MesWork
{
/// <summary>
///
/// </summary>
public partial class Temp { }
/// <summary>
/// 程式启动
/// </summary>
public partial class MesWorkForm
{
InitServer initServer = null;
/// <summary>
/// 从这里启动
/// </summary>
/// <param name="e"></param>
protected override void OnShown(EventArgs e)
{
//【0】基础信息检查
SqlOperation.ExecuteSql("select getdate()", out DataTable dt, out string error);
if (error.Length > 0)
{
MessageBox.Show($"数据库配置错误!请检查数据库连接!!\r\n\r\n{MesWorkForm.ConnectionString}");
Process.GetCurrentProcess().Kill();
}
DataLinkMesWork.ApplicationConfig.ConnectionString_MES = MesWorkForm.ConnectionString;
label_SqlConn.Text = MesWorkForm.ConnectionString;
//【1】系统基本参数设定
ThreadPool.SetMaxThreads(workerThreads, completionPortThreads);
Never_Know.Hello_You_All_Never_Know = Hello_You_All_Never_Know;
new ApplicationLog();
//【2】初始化
ReLoadStationIcon();
Visible_SaveLyoutBtn(false);
Hanger.Load_Station_PageShowSignal();
//【3】创建通讯
LoadOpcData();
Hanger.Load_Table();
// LoadOPCData(BasicDataTableFile, IsDemoMesServer, IsWriteMonitorLog, true);
Thread.Sleep(200);
StartServer();
Thread.Sleep(200);
First_TagMonitor();
//var onList = CheckDeviceOnLine();
//【4】检查在线状态
CommunicationCheckOnLine();
//【5】通讯成功的初始化设备数据
timer_OnLine_Show.Interval = 1000;
timer_OnLine_Show.Enabled = true;
timer_ShowStation.Interval = 1000;
timer_ShowStation.Enabled = true;
//【7】HashTable 加载TaskType
Upload_TaskTypeInfo();
var task1 = new Thread(new ThreadStart(Loop));
task1.IsBackground = true;
task1.Start();
Text = Text + $"【{MesWorkForm.ProgramPartial}】";
// 【8】 WebApi 相关
initServer = new WebApi.InitServer(MesWorkForm.WebSvrPort);
LogRecord.LogRecord.Insert_Log(Type_Log.Login,"", $"MES系统启动成功");
}
private void Upload_TaskTypeInfo()
{
ht_TaskTypeInfo=new System.Collections.Hashtable();
DataTable dt = ExecuteDB.Get_TaskTypeInfo();
foreach (DataRow itemRow in dt.Rows)
{
TaskTypeInfo taskTypeInfo = new TaskTypeInfo();
taskTypeInfo.TaskTypeID = short.Parse(itemRow["任务类型"].ToString());
taskTypeInfo.TaskTypeName = itemRow["任务类型名称"].ToString();
taskTypeInfo.QCDataCount = int.Parse(itemRow["质量数据数量"].ToString());
taskTypeInfo.DataName1 = itemRow["数据名称1"].ToString();
taskTypeInfo.DataUnit1 = itemRow["数据单位1"].ToString();
taskTypeInfo.DataName2 = itemRow["数据名称2"].ToString();
taskTypeInfo.DataUnit2 = itemRow["数据单位2"].ToString();
taskTypeInfo.DataName3 = itemRow["数据名称3"].ToString();
taskTypeInfo.DataUnit3 = itemRow["数据单位3"].ToString();
taskTypeInfo.DataName4 = itemRow["数据名称4"].ToString();
taskTypeInfo.DataUnit4 = itemRow["数据单位4"].ToString();
ht_TaskTypeInfo.Add(taskTypeInfo.TaskTypeID,taskTypeInfo);
}
}
private void LoadOpcData()
{
DataTable dt_Tag = null;
ExecuteDB.Select_Station(out DataTable dt_Station);
dt_OPNameInfo = dt_Station.Copy();
int tableLength = NPOITest.ExeclHelper.ExcelToDataTable(BasicDataTableFile, "MES_基本变量原始数据", true).Select($"是否启用='1'").Length;
var dt_Tag_Mes = new DataTable();
if (tableLength > 0)
{
dt_Tag_Mes = NPOITest.ExeclHelper.ExcelToDataTable(BasicDataTableFile, "MES_基本变量原始数据", true).Select($"是否启用='1'").CopyToDataTable();
}
var dt_Tag_Model = NPOITest.ExeclHelper.ExcelToDataTable(BasicDataTableFile, "MES_信号表模板", true).Select($"是否启用='1'").CopyToDataTable();
var dt_Device = NPOITest.ExeclHelper.ExcelToDataTable(BasicDataTableFile, "设备类型对应表", true).Select($"是否启用='1'").CopyToDataTable();
dt_Tag = dt_Tag_Model.Clone();
for (int i = 0; i < dt_Station.Rows.Count; i++)
{
//[工位号],[工位名称],[PLC],[PLC代码],[PX],[PY],[PX_T],[PY_T],[控件启用]
var = dt_Station.Rows[i]["工位名称"].ToString();
var PLC = dt_Station.Rows[i]["PLC"].ToString();
var stationName = dt_Station.Rows[i]["工位号"].ToString();
var DB_NAME = dt_Station.Rows[i]["PLC代码"].ToString();
var zoneCode = dt_Station.Rows[i]["区域代码"].ToString();
var dt_Op_QC_DATA = dt_Tag_Model.Copy().Select($"DbName='DB_NAME'").CopyToDataTable();
UpdateOpTable(dt_Op_QC_DATA, stationName, , PLC, DB_NAME);
dt_Tag.Merge(dt_Op_QC_DATA);
}
dt_Tag.Merge(dt_Tag_Mes);
LoadOPCData(dt_Tag, dt_Device, IsDemoMesServer, IsWriteMonitorLog, true, false, out string error);
if (error.Length > 0)
{
MessageBox.Show($"加载信号产生错误,程序不能启动!!错误:{error}");
Process.GetCurrentProcess().Kill();
}
var dt_Tag1 = dt_Tag.Copy();
dt_Tag1.TableName = "MES_基本变量_原始数据";
SqlOperation.ExecuteSql($" truncate table {dt_Tag1.TableName}", out string error1);
SqlOperation.SqlbulkcopyInsert(dt_Tag1);
var dt_Device1 = dt_Device.Copy();
dt_Device1.TableName = "MES_基本变量设备类型对应表";
SqlOperation.ExecuteSql($" truncate table {dt_Device1.TableName}", out string error2);
SqlOperation.SqlbulkcopyInsert(dt_Device1);
}
private void UpdateOpTable(DataTable dt,string opName,string opNameName,string ip, string dbName)
{
foreach (DataRow row in dt.Rows)
{
//TagID TagName 工位号 数据来源 IP DbName 变量特点 变量类型代码
var TagName = row["TagName"].ToString();
var = row["变量类型代码"].ToString();
var = row["变量特点"].ToString();
var = row["变量排序"].ToString();
row["TagID"] = $"8{opName.Substring(opName.Length - 4, 4)}{变量排序.PadLeft(3,'0')}";
//row["TagID"] = Guid.NewGuid().ToString ().ToUpper ();
row["工位号"] = opName;
row["数据来源"] = opNameName;
row["IP"] = ip;
row["DbName"] = dbName;
row["监控组"] = $"{row[""].ToString()}_{opName}";
}
}
}
}

View File

@@ -0,0 +1,209 @@
using SlMesDbIterface;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace MesWork
{
/// <summary>
///
/// </summary>
public partial class Temp { }
/// <summary>
/// 延时刷新
/// </summary>
public partial class MesWorkForm
{
/// <summary>
/// 刷新
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void timer_OnLine_Show_Tick(object sender, EventArgs e)
{
timer_OnLine_Show.Enabled = false;
Show_OnLineState();
label_RunSort.Text = $"{RunSort}";
timer_OnLine_Show.Enabled = true;
}
/// <summary>
/// 获取数据库连接状态
/// </summary>
private void CommunicationCheckOnLine()
{
//源数据库
new Thread(new ThreadStart(delegate ()
{
while (true)
{
try
{
MesWorkForm.OnLine_Sql = SqlOperation.ExecuteSql("select getdate()", out DataTable dt,out string error);
}
catch (Exception) { }
Thread.Sleep(5000);
}
}))
{ IsBackground = true }.Start();
}
/// <summary>
/// 显示通讯状态
/// </summary>
/// <param name="pb"></param>
/// <param name="onLine"></param>
private void OnLineState_C(PictureBox pb, bool onLine)
{
pb.Image = onLine ? global::CentralControl.Properties.Resources.
: global::CentralControl.Properties.Resources.;
}
/// <summary>
/// 显示通讯状态
/// </summary>
private void Show_OnLineState()
{
//状态显示
OnLineState_C(pb_OnLine_Sql, MesWorkForm.OnLine_Sql);
}
/// <summary>
/// 刷新
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void timer_ShowStation_Tick(object sender, EventArgs e)
{
timer_ShowStation.Enabled = false;
RefreshShowStation();
timer_ShowStation.Enabled = true;
}
/// <summary>
/// 显示工位状态
/// </summary>
public static void RefreshShowStation()
{
try
{
foreach (DictionaryEntry item in ht_Station_Content)
{
var stationName = item.Key.ToString();
var control = (Panel)item.Value;
var auto = ht_Signal__Station_Auto[stationName].ToString().ToLower();
var running = ht_Signal__Station_Running[stationName].ToString().ToLower();
var manual = ht_Signal__Station_Manual[stationName].ToString().ToLower();
var alarm = ht_Signal__Station_Alarm[stationName].ToString().ToLower();
var offLine = ht_Signal__Station_OffLine[stationName].ToString().ToLower();
if (ValueT(offLine))
{
if (ValueT(auto))
{
control.BackColor = color_Yellow;
}
if (ValueT(running))
{
control.BackColor = color_Green;
}
if (ValueT(manual))
{
control.BackColor = color_Faw;
}
if (ValueT(alarm))
{
control.BackColor = color_Red;
}
}
else
{
control.BackColor = color_Bad;
}
}
}
catch (Exception err)
{
}
}
/// <summary>
/// 值处理函数
/// </summary>
/// <param name="value"></param>
/// <returns></returns>
public static bool ValueT(string value)
{
bool success = false;
if (value == "true" | value == "1")
{
success = true;
}
return success;
}
/// <summary>
/// 显示报警信息
/// 临时!!!!
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void timer_ShowAlarm_Tick(object sender, EventArgs e)
{
timer_ShowAlarm.Enabled = false;
//try
//{
// var sql =
// $" SELECT [StationName],[AlarmCode],[AlarmTime],[SureTime] FROM [SP_Curr_Alarm]" +
// $" ORDER BY [ID] DESC";
// SqlOperation.ExecuteSql(sql, out DataTable dt_Alarm, out string error);
// dgv_Alarm.DataSource = dt_Alarm;
//}
//catch (Exception err) { }
//try
//{
// var sql =
// $" SELECT [StationName],[AlarmCode],[AlarmTime],[SureTime] FROM [SP_Curr_Alarm_Andon]" +
// $" ORDER BY [ID] DESC";
// SqlOperation.ExecuteSql(sql, out DataTable dt_Alarm_Andon, out string error);
// dgv_Alarm_Andon.DataSource = dt_Alarm_Andon;
//}
//catch (Exception err) { }
timer_ShowAlarm.Enabled = true;
}
/// <summary>
/// 布局按钮显示
/// </summary>
/// <param name="visible"></param>
public void Visible_SaveLyoutBtn(bool visible)
{
btn_SaveLyout.Visible = visible;
}
}
}

View File

@@ -0,0 +1,62 @@
using SlMesDbIterface;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Drawing;
using System.ComponentModel;
using System.Windows.Forms;
using static System.Windows.Forms.VisualStyles.VisualStyleElement;
namespace MesWork
{
/// <summary>
///
/// </summary>
public partial class Temp { }
/// <summary>
/// 注册事件
/// </summary>
public partial class MesWorkForm
{
/// <summary>
/// 注册事件
/// </summary>
/// <param name="panel"></param>
private Control Release(Panel panel)
{
panel.MouseDown -= C_MouseDown;
panel.MouseDown += C_MouseDown;
panel.MouseMove -= C_MouseMove;
panel.MouseMove += C_MouseMove;
panel.MouseUp -= C_MouseUp;
panel.MouseUp += C_MouseUp;
panel.MouseHover -= Panel_MouseHover;
panel.MouseHover += Panel_MouseHover;
panel.Click -= Panel_Click;
panel.Click += Panel_Click;
return panel;
}
/// <summary>
/// 注册事件
/// </summary>
/// <param name="label"></param>
private Control Release(Label label)
{
label.MouseDown -= C_MouseDown;
label.MouseDown += C_MouseDown;
label.MouseMove -= C_MouseMove;
label.MouseMove += C_MouseMove;
label.MouseUp -= C_MouseUp;
label.MouseUp += C_MouseUp;
return label;
}
}
}

View File

@@ -0,0 +1,95 @@
namespace MainLineRepair
{
partial class ParamConfigPage
{
/// <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.btn_Sure = new System.Windows.Forms.Button();
this.btn_Cancel = new System.Windows.Forms.Button();
this.cb_IsAllowUpdateLyout = new System.Windows.Forms.CheckBox();
this.SuspendLayout();
//
// btn_Sure
//
this.btn_Sure.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.btn_Sure.Location = new System.Drawing.Point(388, 379);
this.btn_Sure.Name = "btn_Sure";
this.btn_Sure.Size = new System.Drawing.Size(129, 38);
this.btn_Sure.TabIndex = 0;
this.btn_Sure.Text = "确定";
this.btn_Sure.UseVisualStyleBackColor = true;
this.btn_Sure.Click += new System.EventHandler(this.btn_Sure_Click);
//
// btn_Cancel
//
this.btn_Cancel.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.btn_Cancel.Location = new System.Drawing.Point(253, 379);
this.btn_Cancel.Name = "btn_Cancel";
this.btn_Cancel.Size = new System.Drawing.Size(129, 38);
this.btn_Cancel.TabIndex = 0;
this.btn_Cancel.Text = "取消";
this.btn_Cancel.UseVisualStyleBackColor = true;
this.btn_Cancel.Click += new System.EventHandler(this.btn_Cancel_Click);
//
// cb_IsAllowUpdateLyout
//
this.cb_IsAllowUpdateLyout.AutoSize = true;
this.cb_IsAllowUpdateLyout.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.cb_IsAllowUpdateLyout.Location = new System.Drawing.Point(103, 341);
this.cb_IsAllowUpdateLyout.Name = "cb_IsAllowUpdateLyout";
this.cb_IsAllowUpdateLyout.Size = new System.Drawing.Size(128, 20);
this.cb_IsAllowUpdateLyout.TabIndex = 23;
this.cb_IsAllowUpdateLyout.Text = "允许修改布局";
this.cb_IsAllowUpdateLyout.UseVisualStyleBackColor = true;
//
// ParamConfigPage
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(608, 432);
this.Controls.Add(this.cb_IsAllowUpdateLyout);
this.Controls.Add(this.btn_Cancel);
this.Controls.Add(this.btn_Sure);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
this.Name = "ParamConfigPage";
this.ShowIcon = false;
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "参数配置";
this.Load += new System.EventHandler(this.ParamConfig_Load);
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.Button btn_Sure;
private System.Windows.Forms.Button btn_Cancel;
private System.Windows.Forms.CheckBox cb_IsAllowUpdateLyout;
}
}

View File

@@ -0,0 +1,66 @@
using MesWork;
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 MainLineRepair
{
/// <summary>
/// 参数配置
/// </summary>
public partial class ParamConfigPage : Form
{
/// <summary>
/// 构造
/// </summary>
public ParamConfigPage()
{
InitializeComponent();
}
/// <summary>
///
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void ParamConfig_Load(object sender, EventArgs e)
{
}
/// <summary>
/// 取消按钮
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btn_Cancel_Click(object sender, EventArgs e)
{
DialogResult = DialogResult.Cancel;
}
/// <summary>
/// 确认按钮
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btn_Sure_Click(object sender, EventArgs e)
{
if (MessageBox.Show("确认修改配置吗?", "修改确认", MessageBoxButtons.YesNo) == DialogResult.Yes)
{
Temp.mesWorkForm.Visible_SaveLyoutBtn(MesWorkForm.allowDrag = cb_IsAllowUpdateLyout.Checked);
DialogResult = DialogResult.OK;
}
}
}
}

View File

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

View File

@@ -0,0 +1,798 @@
namespace LogRecord
{
partial class LogRecord
{
/// <summary>
/// 必需的设计器变量。
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// 清理所有正在使用的资源。
/// </summary>
/// <param name="disposing">如果应释放托管资源,为 true否则为 false。</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows
/// <summary>
/// 设计器支持所需的方法 - 不要修改
/// 使用代码编辑器修改此方法的内容。
/// </summary>
private void InitializeComponent()
{
System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle();
System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle2 = new System.Windows.Forms.DataGridViewCellStyle();
System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle3 = new System.Windows.Forms.DataGridViewCellStyle();
System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle4 = new System.Windows.Forms.DataGridViewCellStyle();
System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle5 = new System.Windows.Forms.DataGridViewCellStyle();
System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle6 = new System.Windows.Forms.DataGridViewCellStyle();
System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle7 = new System.Windows.Forms.DataGridViewCellStyle();
this.tabControl_LogQuery = new System.Windows.Forms.TabControl();
this.tabPage1 = new System.Windows.Forms.TabPage();
this.dtp_End = new System.Windows.Forms.DateTimePicker();
this.dtp_Start = new System.Windows.Forms.DateTimePicker();
this.cb_StationName = new System.Windows.Forms.ComboBox();
this.label2 = new System.Windows.Forms.Label();
this.cb_Type = new System.Windows.Forms.ComboBox();
this.btn_Refresh = new System.Windows.Forms.Button();
this.dgv_Log = new System.Windows.Forms.DataGridView();
this. = new System.Windows.Forms.DataGridViewTextBoxColumn();
this. = new System.Windows.Forms.DataGridViewTextBoxColumn();
this. = new System.Windows.Forms.DataGridViewTextBoxColumn();
this. = new System.Windows.Forms.DataGridViewTextBoxColumn();
this.label4 = new System.Windows.Forms.Label();
this.label3 = new System.Windows.Forms.Label();
this.label1 = new System.Windows.Forms.Label();
this.tabPage2 = new System.Windows.Forms.TabPage();
this.cmb_StationNames_WebAPI = new System.Windows.Forms.ComboBox();
this.label10 = new System.Windows.Forms.Label();
this.label9 = new System.Windows.Forms.Label();
this.txt_ResponseContext = new System.Windows.Forms.TextBox();
this.txt_RequestContext = new System.Windows.Forms.TextBox();
this.dtpicker_end = new System.Windows.Forms.DateTimePicker();
this.dtpicker_start = new System.Windows.Forms.DateTimePicker();
this.label5 = new System.Windows.Forms.Label();
this.cmb_RequestCMD = new System.Windows.Forms.ComboBox();
this.btn_WebAPILog_Query = new System.Windows.Forms.Button();
this.dgv_WebApiLog = new System.Windows.Forms.DataGridView();
this.label6 = new System.Windows.Forms.Label();
this.label7 = new System.Windows.Forms.Label();
this.label8 = new System.Windows.Forms.Label();
this.tabPage3 = new System.Windows.Forms.TabPage();
this.label16 = new System.Windows.Forms.Label();
this.txt_Key_TaskCodeOrOPName = new System.Windows.Forms.TextBox();
this.label11 = new System.Windows.Forms.Label();
this.label12 = new System.Windows.Forms.Label();
this.txt_ResponseContext_3 = new System.Windows.Forms.TextBox();
this.txt_RequestContext_3 = new System.Windows.Forms.TextBox();
this.dt_End = new System.Windows.Forms.DateTimePicker();
this.dt_Start = new System.Windows.Forms.DateTimePicker();
this.label13 = new System.Windows.Forms.Label();
this.btn_QueryALL = new System.Windows.Forms.Button();
this.dg_WebAPI_And_RunLog = new System.Windows.Forms.DataGridView();
this.StationName = new System.Windows.Forms.DataGridViewTextBoxColumn();
this.TaskCode = new System.Windows.Forms.DataGridViewTextBoxColumn();
this. = new System.Windows.Forms.DataGridViewTextBoxColumn();
this.FROM = new System.Windows.Forms.DataGridViewTextBoxColumn();
this.CMD = new System.Windows.Forms.DataGridViewTextBoxColumn();
this. = new System.Windows.Forms.DataGridViewTextBoxColumn();
this. = new System.Windows.Forms.DataGridViewTextBoxColumn();
this. = new System.Windows.Forms.DataGridViewTextBoxColumn();
this.label14 = new System.Windows.Forms.Label();
this.label15 = new System.Windows.Forms.Label();
this.tabControl_LogQuery.SuspendLayout();
this.tabPage1.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.dgv_Log)).BeginInit();
this.tabPage2.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.dgv_WebApiLog)).BeginInit();
this.tabPage3.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.dg_WebAPI_And_RunLog)).BeginInit();
this.SuspendLayout();
//
// tabControl_LogQuery
//
this.tabControl_LogQuery.Controls.Add(this.tabPage1);
this.tabControl_LogQuery.Controls.Add(this.tabPage2);
this.tabControl_LogQuery.Controls.Add(this.tabPage3);
this.tabControl_LogQuery.Location = new System.Drawing.Point(0, 2);
this.tabControl_LogQuery.Name = "tabControl_LogQuery";
this.tabControl_LogQuery.SelectedIndex = 0;
this.tabControl_LogQuery.Size = new System.Drawing.Size(1549, 829);
this.tabControl_LogQuery.TabIndex = 0;
//
// tabPage1
//
this.tabPage1.Controls.Add(this.dtp_End);
this.tabPage1.Controls.Add(this.dtp_Start);
this.tabPage1.Controls.Add(this.cb_StationName);
this.tabPage1.Controls.Add(this.label2);
this.tabPage1.Controls.Add(this.cb_Type);
this.tabPage1.Controls.Add(this.btn_Refresh);
this.tabPage1.Controls.Add(this.dgv_Log);
this.tabPage1.Controls.Add(this.label4);
this.tabPage1.Controls.Add(this.label3);
this.tabPage1.Controls.Add(this.label1);
this.tabPage1.Location = new System.Drawing.Point(4, 22);
this.tabPage1.Name = "tabPage1";
this.tabPage1.Padding = new System.Windows.Forms.Padding(3);
this.tabPage1.Size = new System.Drawing.Size(1541, 803);
this.tabPage1.TabIndex = 0;
this.tabPage1.Text = "运行日志查询";
this.tabPage1.UseVisualStyleBackColor = true;
//
// dtp_End
//
this.dtp_End.CustomFormat = "yyyy-MM-dd HH:mm:ss";
this.dtp_End.Format = System.Windows.Forms.DateTimePickerFormat.Custom;
this.dtp_End.Location = new System.Drawing.Point(240, 10);
this.dtp_End.Name = "dtp_End";
this.dtp_End.Size = new System.Drawing.Size(163, 21);
this.dtp_End.TabIndex = 87;
//
// dtp_Start
//
this.dtp_Start.CustomFormat = "yyyy-MM-dd HH:mm:ss";
this.dtp_Start.Format = System.Windows.Forms.DateTimePickerFormat.Custom;
this.dtp_Start.Location = new System.Drawing.Point(35, 10);
this.dtp_Start.Name = "dtp_Start";
this.dtp_Start.Size = new System.Drawing.Size(165, 21);
this.dtp_Start.TabIndex = 88;
//
// cb_StationName
//
this.cb_StationName.FormattingEnabled = true;
this.cb_StationName.Location = new System.Drawing.Point(707, 10);
this.cb_StationName.Name = "cb_StationName";
this.cb_StationName.Size = new System.Drawing.Size(138, 20);
this.cb_StationName.TabIndex = 86;
//
// label2
//
this.label2.AutoSize = true;
this.label2.Font = new System.Drawing.Font("宋体", 10.5F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.label2.Location = new System.Drawing.Point(640, 14);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(67, 14);
this.label2.TabIndex = 82;
this.label2.Text = "工位号:";
//
// cb_Type
//
this.cb_Type.FormattingEnabled = true;
this.cb_Type.Location = new System.Drawing.Point(472, 10);
this.cb_Type.Name = "cb_Type";
this.cb_Type.Size = new System.Drawing.Size(150, 20);
this.cb_Type.TabIndex = 81;
//
// btn_Refresh
//
this.btn_Refresh.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.btn_Refresh.Location = new System.Drawing.Point(860, 7);
this.btn_Refresh.Name = "btn_Refresh";
this.btn_Refresh.Size = new System.Drawing.Size(83, 26);
this.btn_Refresh.TabIndex = 80;
this.btn_Refresh.Text = "查询";
this.btn_Refresh.UseVisualStyleBackColor = true;
this.btn_Refresh.Click += new System.EventHandler(this.btn_Refresh_Click);
//
// dgv_Log
//
this.dgv_Log.AllowUserToAddRows = false;
this.dgv_Log.AllowUserToDeleteRows = false;
this.dgv_Log.AllowUserToResizeRows = false;
this.dgv_Log.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.dgv_Log.BackgroundColor = System.Drawing.SystemColors.ButtonHighlight;
dataGridViewCellStyle1.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft;
dataGridViewCellStyle1.BackColor = System.Drawing.SystemColors.Control;
dataGridViewCellStyle1.Font = new System.Drawing.Font("宋体", 10.5F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
dataGridViewCellStyle1.ForeColor = System.Drawing.SystemColors.WindowText;
dataGridViewCellStyle1.SelectionBackColor = System.Drawing.SystemColors.Highlight;
dataGridViewCellStyle1.SelectionForeColor = System.Drawing.SystemColors.HighlightText;
dataGridViewCellStyle1.WrapMode = System.Windows.Forms.DataGridViewTriState.True;
this.dgv_Log.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle1;
this.dgv_Log.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
this.dgv_Log.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {
this.,
this.,
this.,
this.});
this.dgv_Log.Location = new System.Drawing.Point(8, 43);
this.dgv_Log.MultiSelect = false;
this.dgv_Log.Name = "dgv_Log";
this.dgv_Log.ReadOnly = true;
this.dgv_Log.RowHeadersVisible = false;
this.dgv_Log.RowTemplate.Height = 26;
this.dgv_Log.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect;
this.dgv_Log.Size = new System.Drawing.Size(1527, 757);
this.dgv_Log.TabIndex = 79;
this.dgv_Log.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.dgv_Log_CellClick);
//
// 时间
//
this..DataPropertyName = "时间";
dataGridViewCellStyle2.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Bold);
dataGridViewCellStyle2.Format = "G";
this..DefaultCellStyle = dataGridViewCellStyle2;
this..HeaderText = "时间";
this..Name = "时间";
this..ReadOnly = true;
this..SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;
this..Width = 190;
//
// 工位号
//
this..DataPropertyName = "工位号";
dataGridViewCellStyle3.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Bold);
this..DefaultCellStyle = dataGridViewCellStyle3;
this..HeaderText = "工位号";
this..Name = "工位号";
this..ReadOnly = true;
this..SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;
this..Width = 150;
//
// 类型
//
this..DataPropertyName = "类型";
dataGridViewCellStyle4.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Bold);
this..DefaultCellStyle = dataGridViewCellStyle4;
this..HeaderText = "类型";
this..Name = "类型";
this..ReadOnly = true;
this..SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;
this..Width = 90;
//
// 内容
//
this..AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill;
this..DataPropertyName = "内容";
dataGridViewCellStyle5.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Bold);
this..DefaultCellStyle = dataGridViewCellStyle5;
this..HeaderText = "内容";
this..Name = "内容";
this..ReadOnly = true;
this..SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;
//
// label4
//
this.label4.AutoSize = true;
this.label4.Font = new System.Drawing.Font("宋体", 10.5F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.label4.Location = new System.Drawing.Point(212, 13);
this.label4.Name = "label4";
this.label4.Size = new System.Drawing.Size(22, 14);
this.label4.TabIndex = 83;
this.label4.Text = "到";
//
// label3
//
this.label3.AutoSize = true;
this.label3.Font = new System.Drawing.Font("宋体", 10.5F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.label3.Location = new System.Drawing.Point(6, 14);
this.label3.Name = "label3";
this.label3.Size = new System.Drawing.Size(22, 14);
this.label3.TabIndex = 84;
this.label3.Text = "从";
//
// label1
//
this.label1.AutoSize = true;
this.label1.Font = new System.Drawing.Font("宋体", 10.5F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.label1.Location = new System.Drawing.Point(421, 14);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(52, 14);
this.label1.TabIndex = 85;
this.label1.Text = "分类:";
//
// tabPage2
//
this.tabPage2.Controls.Add(this.cmb_StationNames_WebAPI);
this.tabPage2.Controls.Add(this.label10);
this.tabPage2.Controls.Add(this.label9);
this.tabPage2.Controls.Add(this.txt_ResponseContext);
this.tabPage2.Controls.Add(this.txt_RequestContext);
this.tabPage2.Controls.Add(this.dtpicker_end);
this.tabPage2.Controls.Add(this.dtpicker_start);
this.tabPage2.Controls.Add(this.label5);
this.tabPage2.Controls.Add(this.cmb_RequestCMD);
this.tabPage2.Controls.Add(this.btn_WebAPILog_Query);
this.tabPage2.Controls.Add(this.dgv_WebApiLog);
this.tabPage2.Controls.Add(this.label6);
this.tabPage2.Controls.Add(this.label7);
this.tabPage2.Controls.Add(this.label8);
this.tabPage2.Location = new System.Drawing.Point(4, 22);
this.tabPage2.Name = "tabPage2";
this.tabPage2.Padding = new System.Windows.Forms.Padding(3);
this.tabPage2.Size = new System.Drawing.Size(1541, 803);
this.tabPage2.TabIndex = 1;
this.tabPage2.Text = "WebApi接口传递数据日志";
this.tabPage2.UseVisualStyleBackColor = true;
//
// cmb_StationNames_WebAPI
//
this.cmb_StationNames_WebAPI.FormattingEnabled = true;
this.cmb_StationNames_WebAPI.Location = new System.Drawing.Point(759, 9);
this.cmb_StationNames_WebAPI.Name = "cmb_StationNames_WebAPI";
this.cmb_StationNames_WebAPI.Size = new System.Drawing.Size(138, 20);
this.cmb_StationNames_WebAPI.TabIndex = 102;
//
// label10
//
this.label10.AutoSize = true;
this.label10.Location = new System.Drawing.Point(1088, 522);
this.label10.Name = "label10";
this.label10.Size = new System.Drawing.Size(53, 12);
this.label10.TabIndex = 101;
this.label10.Text = "响应内容";
//
// label9
//
this.label9.AutoSize = true;
this.label9.Location = new System.Drawing.Point(1088, 37);
this.label9.Name = "label9";
this.label9.Size = new System.Drawing.Size(53, 12);
this.label9.TabIndex = 101;
this.label9.Text = "请求内容";
//
// txt_ResponseContext
//
this.txt_ResponseContext.Location = new System.Drawing.Point(1090, 537);
this.txt_ResponseContext.Multiline = true;
this.txt_ResponseContext.Name = "txt_ResponseContext";
this.txt_ResponseContext.ReadOnly = true;
this.txt_ResponseContext.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;
this.txt_ResponseContext.Size = new System.Drawing.Size(440, 260);
this.txt_ResponseContext.TabIndex = 100;
//
// txt_RequestContext
//
this.txt_RequestContext.Location = new System.Drawing.Point(1090, 52);
this.txt_RequestContext.Multiline = true;
this.txt_RequestContext.Name = "txt_RequestContext";
this.txt_RequestContext.ReadOnly = true;
this.txt_RequestContext.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;
this.txt_RequestContext.Size = new System.Drawing.Size(440, 452);
this.txt_RequestContext.TabIndex = 100;
//
// dtpicker_end
//
this.dtpicker_end.CustomFormat = "yyyy-MM-dd HH:mm:ss";
this.dtpicker_end.Format = System.Windows.Forms.DateTimePickerFormat.Custom;
this.dtpicker_end.Location = new System.Drawing.Point(261, 9);
this.dtpicker_end.Name = "dtpicker_end";
this.dtpicker_end.Size = new System.Drawing.Size(154, 21);
this.dtpicker_end.TabIndex = 97;
//
// dtpicker_start
//
this.dtpicker_start.CustomFormat = "yyyy-MM-dd HH:mm:ss";
this.dtpicker_start.Format = System.Windows.Forms.DateTimePickerFormat.Custom;
this.dtpicker_start.Location = new System.Drawing.Point(79, 9);
this.dtpicker_start.Name = "dtpicker_start";
this.dtpicker_start.Size = new System.Drawing.Size(155, 21);
this.dtpicker_start.TabIndex = 98;
//
// label5
//
this.label5.AutoSize = true;
this.label5.Font = new System.Drawing.Font("宋体", 10.5F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.label5.Location = new System.Drawing.Point(681, 12);
this.label5.Name = "label5";
this.label5.Size = new System.Drawing.Size(82, 14);
this.label5.TabIndex = 92;
this.label5.Text = "请求关键字";
//
// cmb_RequestCMD
//
this.cmb_RequestCMD.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cmb_RequestCMD.FormattingEnabled = true;
this.cmb_RequestCMD.Location = new System.Drawing.Point(488, 9);
this.cmb_RequestCMD.Name = "cmb_RequestCMD";
this.cmb_RequestCMD.Size = new System.Drawing.Size(187, 20);
this.cmb_RequestCMD.TabIndex = 91;
//
// btn_WebAPILog_Query
//
this.btn_WebAPILog_Query.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.btn_WebAPILog_Query.Location = new System.Drawing.Point(903, 5);
this.btn_WebAPILog_Query.Name = "btn_WebAPILog_Query";
this.btn_WebAPILog_Query.Size = new System.Drawing.Size(83, 26);
this.btn_WebAPILog_Query.TabIndex = 90;
this.btn_WebAPILog_Query.Text = "查询";
this.btn_WebAPILog_Query.UseVisualStyleBackColor = true;
this.btn_WebAPILog_Query.Click += new System.EventHandler(this.btn_WebAPILog_Query_Click);
//
// dgv_WebApiLog
//
this.dgv_WebApiLog.AllowUserToAddRows = false;
this.dgv_WebApiLog.AllowUserToDeleteRows = false;
this.dgv_WebApiLog.AllowUserToResizeRows = false;
this.dgv_WebApiLog.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.dgv_WebApiLog.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.Fill;
this.dgv_WebApiLog.BackgroundColor = System.Drawing.SystemColors.ButtonHighlight;
dataGridViewCellStyle6.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft;
dataGridViewCellStyle6.BackColor = System.Drawing.SystemColors.Control;
dataGridViewCellStyle6.Font = new System.Drawing.Font("宋体", 10.5F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
dataGridViewCellStyle6.ForeColor = System.Drawing.SystemColors.WindowText;
dataGridViewCellStyle6.SelectionBackColor = System.Drawing.SystemColors.Highlight;
dataGridViewCellStyle6.SelectionForeColor = System.Drawing.SystemColors.HighlightText;
dataGridViewCellStyle6.WrapMode = System.Windows.Forms.DataGridViewTriState.True;
this.dgv_WebApiLog.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle6;
this.dgv_WebApiLog.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
this.dgv_WebApiLog.Location = new System.Drawing.Point(8, 41);
this.dgv_WebApiLog.MultiSelect = false;
this.dgv_WebApiLog.Name = "dgv_WebApiLog";
this.dgv_WebApiLog.ReadOnly = true;
this.dgv_WebApiLog.RowHeadersVisible = false;
this.dgv_WebApiLog.RowTemplate.Height = 26;
this.dgv_WebApiLog.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect;
this.dgv_WebApiLog.Size = new System.Drawing.Size(1065, 757);
this.dgv_WebApiLog.TabIndex = 89;
this.dgv_WebApiLog.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.dgv_WebApiLog_CellClick);
//
// label6
//
this.label6.AutoSize = true;
this.label6.Font = new System.Drawing.Font("宋体", 10.5F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.label6.Location = new System.Drawing.Point(240, 12);
this.label6.Name = "label6";
this.label6.Size = new System.Drawing.Size(15, 14);
this.label6.TabIndex = 93;
this.label6.Text = "-";
//
// label7
//
this.label7.AutoSize = true;
this.label7.Font = new System.Drawing.Font("宋体", 10.5F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.label7.Location = new System.Drawing.Point(6, 12);
this.label7.Name = "label7";
this.label7.Size = new System.Drawing.Size(67, 14);
this.label7.TabIndex = 94;
this.label7.Text = "请求时间";
//
// label8
//
this.label8.AutoSize = true;
this.label8.Font = new System.Drawing.Font("宋体", 10.5F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.label8.Location = new System.Drawing.Point(427, 12);
this.label8.Name = "label8";
this.label8.Size = new System.Drawing.Size(61, 14);
this.label8.TabIndex = 95;
this.label8.Text = "请求CMD";
//
// tabPage3
//
this.tabPage3.Controls.Add(this.label16);
this.tabPage3.Controls.Add(this.txt_Key_TaskCodeOrOPName);
this.tabPage3.Controls.Add(this.label11);
this.tabPage3.Controls.Add(this.label12);
this.tabPage3.Controls.Add(this.txt_ResponseContext_3);
this.tabPage3.Controls.Add(this.txt_RequestContext_3);
this.tabPage3.Controls.Add(this.dt_End);
this.tabPage3.Controls.Add(this.dt_Start);
this.tabPage3.Controls.Add(this.label13);
this.tabPage3.Controls.Add(this.btn_QueryALL);
this.tabPage3.Controls.Add(this.dg_WebAPI_And_RunLog);
this.tabPage3.Controls.Add(this.label14);
this.tabPage3.Controls.Add(this.label15);
this.tabPage3.Location = new System.Drawing.Point(4, 22);
this.tabPage3.Name = "tabPage3";
this.tabPage3.Size = new System.Drawing.Size(1541, 803);
this.tabPage3.TabIndex = 2;
this.tabPage3.Text = "日志_整合查询";
this.tabPage3.UseVisualStyleBackColor = true;
//
// label16
//
this.label16.AutoSize = true;
this.label16.Font = new System.Drawing.Font("宋体", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.label16.ForeColor = System.Drawing.Color.Green;
this.label16.Location = new System.Drawing.Point(751, 13);
this.label16.Name = "label16";
this.label16.Size = new System.Drawing.Size(763, 14);
this.label16.TabIndex = 117;
this.label16.Text = "提示关键字为【WebAPI日志中请求内容】与【运行日志中LogContent】的共同关键字最好为【TaskCode】或【工位号】";
//
// txt_Key_TaskCodeOrOPName
//
this.txt_Key_TaskCodeOrOPName.Location = new System.Drawing.Point(489, 9);
this.txt_Key_TaskCodeOrOPName.Name = "txt_Key_TaskCodeOrOPName";
this.txt_Key_TaskCodeOrOPName.Size = new System.Drawing.Size(167, 21);
this.txt_Key_TaskCodeOrOPName.TabIndex = 116;
//
// label11
//
this.label11.AutoSize = true;
this.label11.Location = new System.Drawing.Point(1090, 522);
this.label11.Name = "label11";
this.label11.Size = new System.Drawing.Size(53, 12);
this.label11.TabIndex = 114;
this.label11.Text = "响应内容";
//
// label12
//
this.label12.AutoSize = true;
this.label12.Location = new System.Drawing.Point(1090, 37);
this.label12.Name = "label12";
this.label12.Size = new System.Drawing.Size(53, 12);
this.label12.TabIndex = 115;
this.label12.Text = "请求内容";
//
// txt_ResponseContext_3
//
this.txt_ResponseContext_3.Location = new System.Drawing.Point(1092, 537);
this.txt_ResponseContext_3.Multiline = true;
this.txt_ResponseContext_3.Name = "txt_ResponseContext_3";
this.txt_ResponseContext_3.ReadOnly = true;
this.txt_ResponseContext_3.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;
this.txt_ResponseContext_3.Size = new System.Drawing.Size(440, 260);
this.txt_ResponseContext_3.TabIndex = 112;
//
// txt_RequestContext_3
//
this.txt_RequestContext_3.Location = new System.Drawing.Point(1092, 52);
this.txt_RequestContext_3.Multiline = true;
this.txt_RequestContext_3.Name = "txt_RequestContext_3";
this.txt_RequestContext_3.ReadOnly = true;
this.txt_RequestContext_3.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;
this.txt_RequestContext_3.Size = new System.Drawing.Size(440, 452);
this.txt_RequestContext_3.TabIndex = 113;
//
// dt_End
//
this.dt_End.CustomFormat = "yyyy-MM-dd HH:mm:ss";
this.dt_End.Format = System.Windows.Forms.DateTimePickerFormat.Custom;
this.dt_End.Location = new System.Drawing.Point(263, 9);
this.dt_End.Name = "dt_End";
this.dt_End.Size = new System.Drawing.Size(154, 21);
this.dt_End.TabIndex = 110;
//
// dt_Start
//
this.dt_Start.CustomFormat = "yyyy-MM-dd HH:mm:ss";
this.dt_Start.Format = System.Windows.Forms.DateTimePickerFormat.Custom;
this.dt_Start.Location = new System.Drawing.Point(81, 9);
this.dt_Start.Name = "dt_Start";
this.dt_Start.Size = new System.Drawing.Size(155, 21);
this.dt_Start.TabIndex = 111;
//
// label13
//
this.label13.AutoSize = true;
this.label13.Font = new System.Drawing.Font("宋体", 10.5F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.label13.Location = new System.Drawing.Point(431, 12);
this.label13.Name = "label13";
this.label13.Size = new System.Drawing.Size(52, 14);
this.label13.TabIndex = 106;
this.label13.Text = "关键字";
//
// btn_QueryALL
//
this.btn_QueryALL.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.btn_QueryALL.Location = new System.Drawing.Point(662, 6);
this.btn_QueryALL.Name = "btn_QueryALL";
this.btn_QueryALL.Size = new System.Drawing.Size(83, 26);
this.btn_QueryALL.TabIndex = 104;
this.btn_QueryALL.Text = "查询";
this.btn_QueryALL.UseVisualStyleBackColor = true;
this.btn_QueryALL.Click += new System.EventHandler(this.btn_QueryALL_Click);
//
// dg_WebAPI_And_RunLog
//
this.dg_WebAPI_And_RunLog.AllowUserToAddRows = false;
this.dg_WebAPI_And_RunLog.AllowUserToDeleteRows = false;
this.dg_WebAPI_And_RunLog.AllowUserToResizeRows = false;
this.dg_WebAPI_And_RunLog.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.dg_WebAPI_And_RunLog.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.Fill;
this.dg_WebAPI_And_RunLog.BackgroundColor = System.Drawing.SystemColors.ButtonHighlight;
dataGridViewCellStyle7.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft;
dataGridViewCellStyle7.BackColor = System.Drawing.SystemColors.Control;
dataGridViewCellStyle7.Font = new System.Drawing.Font("宋体", 10.5F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
dataGridViewCellStyle7.ForeColor = System.Drawing.SystemColors.WindowText;
dataGridViewCellStyle7.SelectionBackColor = System.Drawing.SystemColors.Highlight;
dataGridViewCellStyle7.SelectionForeColor = System.Drawing.SystemColors.HighlightText;
dataGridViewCellStyle7.WrapMode = System.Windows.Forms.DataGridViewTriState.True;
this.dg_WebAPI_And_RunLog.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle7;
this.dg_WebAPI_And_RunLog.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
this.dg_WebAPI_And_RunLog.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {
this.StationName,
this.TaskCode,
this.,
this.FROM,
this.CMD,
this.,
this.,
this.});
this.dg_WebAPI_And_RunLog.Location = new System.Drawing.Point(10, 41);
this.dg_WebAPI_And_RunLog.MultiSelect = false;
this.dg_WebAPI_And_RunLog.Name = "dg_WebAPI_And_RunLog";
this.dg_WebAPI_And_RunLog.ReadOnly = true;
this.dg_WebAPI_And_RunLog.RowHeadersVisible = false;
this.dg_WebAPI_And_RunLog.RowTemplate.Height = 26;
this.dg_WebAPI_And_RunLog.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect;
this.dg_WebAPI_And_RunLog.Size = new System.Drawing.Size(1065, 757);
this.dg_WebAPI_And_RunLog.TabIndex = 103;
this.dg_WebAPI_And_RunLog.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.dg_WebAPI_And_RunLog_CellClick);
//
// StationName
//
this.StationName.DataPropertyName = "StationName";
this.StationName.FillWeight = 85.85372F;
this.StationName.HeaderText = "StationName";
this.StationName.Name = "StationName";
this.StationName.ReadOnly = true;
//
// TaskCode
//
this.TaskCode.DataPropertyName = "TaskCode";
this.TaskCode.FillWeight = 89.0835F;
this.TaskCode.HeaderText = "TaskCode";
this.TaskCode.Name = "TaskCode";
this.TaskCode.ReadOnly = true;
//
// 日志类型
//
this..DataPropertyName = "日志类型";
this..FillWeight = 71.00318F;
this..HeaderText = "日志类型";
this..Name = "日志类型";
this..ReadOnly = true;
//
// 请求FROM
//
this.FROM.DataPropertyName = "请求FROM";
this.FROM.FillWeight = 81.21832F;
this.FROM.HeaderText = "请求FROM";
this.FROM.Name = "请求FROM";
this.FROM.ReadOnly = true;
//
// 请求CMD
//
this.CMD.DataPropertyName = "请求CMD/Log_Type";
this.CMD.FillWeight = 118.3387F;
this.CMD.HeaderText = "请求CMD";
this.CMD.Name = "请求CMD";
this.CMD.ReadOnly = true;
//
// 发生时间
//
this..DataPropertyName = "发生时间";
this..FillWeight = 94.84125F;
this..HeaderText = "发生时间";
this..Name = "发生时间";
this..ReadOnly = true;
//
// 请求内容
//
this..DataPropertyName = "请求内容/日志内容";
this..FillWeight = 140.5793F;
this..HeaderText = "请求内容";
this..Name = "请求内容";
this..ReadOnly = true;
//
// 响应内容
//
this..DataPropertyName = "响应内容";
this..FillWeight = 119.0824F;
this..HeaderText = "响应内容";
this..Name = "响应内容";
this..ReadOnly = true;
//
// label14
//
this.label14.AutoSize = true;
this.label14.Font = new System.Drawing.Font("宋体", 10.5F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.label14.Location = new System.Drawing.Point(242, 12);
this.label14.Name = "label14";
this.label14.Size = new System.Drawing.Size(15, 14);
this.label14.TabIndex = 107;
this.label14.Text = "-";
//
// label15
//
this.label15.AutoSize = true;
this.label15.Font = new System.Drawing.Font("宋体", 10.5F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.label15.Location = new System.Drawing.Point(8, 12);
this.label15.Name = "label15";
this.label15.Size = new System.Drawing.Size(67, 14);
this.label15.TabIndex = 108;
this.label15.Text = "请求时间";
//
// LogRecord
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(1550, 834);
this.Controls.Add(this.tabControl_LogQuery);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
this.Name = "LogRecord";
this.ShowIcon = false;
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "日志";
this.Load += new System.EventHandler(this.LogRecord_Load);
this.Resize += new System.EventHandler(this.LogRecord_Resize);
this.tabControl_LogQuery.ResumeLayout(false);
this.tabPage1.ResumeLayout(false);
this.tabPage1.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.dgv_Log)).EndInit();
this.tabPage2.ResumeLayout(false);
this.tabPage2.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.dgv_WebApiLog)).EndInit();
this.tabPage3.ResumeLayout(false);
this.tabPage3.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.dg_WebAPI_And_RunLog)).EndInit();
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.TabControl tabControl_LogQuery;
private System.Windows.Forms.TabPage tabPage1;
private System.Windows.Forms.DateTimePicker dtp_End;
private System.Windows.Forms.DateTimePicker dtp_Start;
private System.Windows.Forms.ComboBox cb_StationName;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.ComboBox cb_Type;
private System.Windows.Forms.Button btn_Refresh;
private System.Windows.Forms.DataGridView dgv_Log;
private System.Windows.Forms.Label label4;
private System.Windows.Forms.Label label3;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.TabPage tabPage2;
private System.Windows.Forms.DateTimePicker dtpicker_end;
private System.Windows.Forms.DateTimePicker dtpicker_start;
private System.Windows.Forms.Label label5;
private System.Windows.Forms.ComboBox cmb_RequestCMD;
private System.Windows.Forms.Button btn_WebAPILog_Query;
private System.Windows.Forms.DataGridView dgv_WebApiLog;
private System.Windows.Forms.Label label6;
private System.Windows.Forms.Label label7;
private System.Windows.Forms.Label label8;
private System.Windows.Forms.Label label10;
private System.Windows.Forms.Label label9;
private System.Windows.Forms.TextBox txt_ResponseContext;
private System.Windows.Forms.TextBox txt_RequestContext;
private System.Windows.Forms.ComboBox cmb_StationNames_WebAPI;
private System.Windows.Forms.DataGridViewTextBoxColumn ;
private System.Windows.Forms.DataGridViewTextBoxColumn ;
private System.Windows.Forms.DataGridViewTextBoxColumn ;
private System.Windows.Forms.DataGridViewTextBoxColumn ;
private System.Windows.Forms.TabPage tabPage3;
private System.Windows.Forms.TextBox txt_Key_TaskCodeOrOPName;
private System.Windows.Forms.Label label11;
private System.Windows.Forms.Label label12;
private System.Windows.Forms.TextBox txt_ResponseContext_3;
private System.Windows.Forms.TextBox txt_RequestContext_3;
private System.Windows.Forms.DateTimePicker dt_End;
private System.Windows.Forms.DateTimePicker dt_Start;
private System.Windows.Forms.Label label13;
private System.Windows.Forms.Button btn_QueryALL;
private System.Windows.Forms.Label label14;
private System.Windows.Forms.Label label15;
private System.Windows.Forms.Label label16;
private System.Windows.Forms.DataGridView dg_WebAPI_And_RunLog;
private System.Windows.Forms.DataGridViewTextBoxColumn StationName;
private System.Windows.Forms.DataGridViewTextBoxColumn TaskCode;
private System.Windows.Forms.DataGridViewTextBoxColumn ;
private System.Windows.Forms.DataGridViewTextBoxColumn FROM;
private System.Windows.Forms.DataGridViewTextBoxColumn CMD;
private System.Windows.Forms.DataGridViewTextBoxColumn ;
private System.Windows.Forms.DataGridViewTextBoxColumn ;
private System.Windows.Forms.DataGridViewTextBoxColumn ;
}
}

View File

@@ -0,0 +1,359 @@
using ExternalDataSync;
using MesWork;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using SlMesDbIterface;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Linq;
using System.Reflection.Emit;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
using static System.Configuration.ConfigurationManager;
/// <summary>
/// 报警类型
/// </summary>
public enum Type_Log
{
/// <summary>
/// 报警
/// </summary>
Alarm = 1,
/// <summary>
/// 登录
/// </summary>
Login = 2,
/// <summary>
/// 提示
/// </summary>
Tip = 3,
/// <summary>
/// 操作(生产计划、点按钮操作)
/// </summary>
Operation = 4,
/// <summary>
/// MES处理信号
/// </summary>
MesHandler = 5,
/// <summary>
/// 配方下载
/// </summary>
RecipesDownload = 6,
/// <summary>
/// 发动机上线
/// </summary>
OnLine = 7,
/// <summary>
/// 发动机下线
/// </summary>
OffLine = 8,
/// <summary>
/// MES请求接口的日志
/// </summary>
Interface_MesReq = 9,
/// <summary>
/// MES请求接口的日志
/// </summary>
RecipesDownload_ColdTest = 10,
/// <summary>
///
/// </summary>
Undefined = 1000
}
namespace LogRecord
{
/// <summary>
/// 日志处理
/// </summary>
public partial class LogRecord : Form
{
/// <summary>
/// 构造
/// </summary>
public LogRecord()
{
InitializeComponent();
//this.WindowState = FormWindowState.Maximized;
}
/// <summary>
/// 构造
/// </summary>
/// <param name="_Width"></param>
/// <param name="_Height"></param>
public LogRecord(int _Width,int _Height)
{
InitializeComponent();
//this.Width = _Width;
//this.Height = _Height;
cb_Type.DataSource = Enum.GetNames(typeof(Type_Log));
cb_Type.Text = Type_Log.Undefined.ToString ();
cb_StationName.Items.Add("");
cmb_StationNames_WebAPI.Items.Add("");
foreach (var stationName in MesWorkForm.opNameList)
{
cb_StationName.Items.Add(stationName);
cmb_StationNames_WebAPI.Items.Add(stationName);
}
cb_StationName.SelectedIndex = 0;
cmb_StationNames_WebAPI.SelectedIndex = 0;
var end = DateTime.Now.AddDays(1);
var start = end.AddDays(-8);
dtp_Start.Value = start;
dtp_End.Value = end;
dtpicker_end.Value = DateTime.Now.AddDays(1);
dtpicker_start.Value = DateTime.Now.AddDays(-3);
dt_End.Value = DateTime.Now.AddDays(1);
dt_Start.Value = DateTime.Now.AddDays(-1);
WebAPI_LogType_Binding();
}
private void WebAPI_LogType_Binding()
{
var sql = "SELECT [请求CMD] FROM [历史_WebApi接口传递数据日志] group by [请求CMD] order by [请求CMD]";
SqlOperation.ExecuteSql(sql, out DataTable dt, out string error);
DataRow irow = dt.NewRow();
irow[0] = "";
dt.Rows.InsertAt(irow, 0);
cmb_RequestCMD.ValueMember = "请求CMD";
cmb_RequestCMD.DisplayMember= "请求CMD";
cmb_RequestCMD.DataSource = dt;
}
/// <summary>
/// 钩子
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void LogRecord_Load(object sender, EventArgs e)
{
var start = dtp_Start.Value;
var end = dtp_End.Value;
Refresh_Log(Type_Log.Undefined,"", start, end);
}
/// <summary>
/// 刷新日志的显示
/// </summary>
private void Refresh_Log(Type_Log type, string stationName, DateTime start, DateTime end)
{
var dt = Select_Log(type, stationName, start, end);
dgv_Log.DataSource = dt;
for (int i = 0; i < dt.Rows.Count; i++)
{
var = (Type_Log)Enum.Parse(typeof(Type_Log),dt.Rows[i]["类型"].ToString());
switch ()
{
case Type_Log.Alarm:
RowsColor(i, MesWorkForm.color_Red, dgv_Log);
break;
case Type_Log.Login:
RowsColor(i, MesWorkForm.color_Green, dgv_Log);
break;
case Type_Log.Tip:
RowsColor(i, MesWorkForm.color_Yellow, dgv_Log);
break;
default:
RowsColor(i, MesWorkForm.color_Grey, dgv_Log);
break;
}
}
dgv_Log.ClearSelection();
//dgv_Log.CurrentCell = null;
//dgv_Log.Rows[0].Selected = false;
}
/// <summary>
///
/// </summary>
/// <param name="row"></param>
/// <param name="color"></param>
/// <param name="dgv"></param>
private void RowsColor(int row, Color color, DataGridView dgv)
{
var dt = (System.Data.DataTable)dgv.DataSource;
for (int i = 0; i < dt.Columns.Count; i++)
{
dgv.Rows[row].Cells[i].Style.BackColor = color;
}
}
/// <summary>
/// 增加日志
/// </summary>
/// <param name="LogType"></param>
/// <param name="Log_Content"></param>
/// <returns></returns>
public static bool Insert_Log(Type_Log LogType,string stationName, string Log_Content)
{
bool success = false;
var sql =
$" INSERT INTO [记录_日志_运行日志]([Log_Station],[Log_Type],[Log_Time],[Log_Content])" +
$" VALUES('{stationName}','{LogType.ToString()}',getdate(),'{Log_Content}')";
success = DataLinkMesWork.SQLCommon.ExecuteSql(sql, MesWorkForm.ConnectionString, out string err2);
return success;
}
public static bool Insert_ScanLog_EleCraft(Type_Log LogType,string stationName, string Log_Content)
{
bool success = false;
var sql =
$" INSERT INTO [记录_日志_扫码发送电子工艺]([Log_Station],[Log_Type],[Log_Time],[Log_Content])" +
$" VALUES('{stationName}','{LogType.ToString()}',getdate(),'{Log_Content}')";
success = DataLinkMesWork.SQLCommon.ExecuteSql(sql, MesWorkForm.ConnectionString, out string err2);
return success;
}
/// <summary>
/// 查询日志
/// </summary>
/// <returns></returns>
public static DataTable Select_Log(Type_Log type,string stationName,DateTime start,DateTime end)
{
var whereStr = "";
if (type != Type_Log.Undefined)
{
whereStr = whereStr + $" AND [Log_Type] = '{type.ToString()}'";
}
if (stationName != "")
{
whereStr = whereStr + $" AND [Log_Station] = '{stationName}'";
}
if (start != null & end != null)
{
whereStr = whereStr + $" AND [Log_Time] >= '{start.ToString("G")}' AND [Log_Time] < '{end.ToString("G")}'";
}
var sql =
$" SELECT " +
$" [Log_Time] AS 时间" +
$" ,[Log_Station] AS 工位号" +
$" ,[Log_Type] AS 类型" +
$" ,[Log_Content] AS 内容" +
$" FROM [记录_日志_运行日志]" +
$" WHERE 1=1 {whereStr}" +
$" ORDER BY [Log_Time] DESC";
DataLinkMesWork.SQLCommon.ExecuteDataTable(sql, MesWorkForm.ConnectionString,out DataTable dt, out string err2);
return dt;
}
/// <summary>
/// 手动刷新
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btn_Refresh_Click(object sender, EventArgs e)
{
var type = (Type_Log)Enum.Parse(typeof(Type_Log), cb_Type.Text);
var start = dtp_Start.Value;
var end = dtp_End.Value;
var stationName = cb_StationName.Text;
Refresh_Log(type, stationName, start,end);
}
private void btn_WebAPILog_Query_Click(object sender, EventArgs e)
{
var wherestr = $"WHERE [请求时间]>='{dtpicker_start.Value}' AND [请求时间]<='{dtpicker_end.Value}'";
if (cmb_RequestCMD.Text.Trim() != "") wherestr += $" AND [请求CMD]='{cmb_RequestCMD.Text.Trim()}'";
if(cmb_StationNames_WebAPI.Text.Trim()!="") wherestr += $" AND [请求内容] LIKE '%{cmb_StationNames_WebAPI.Text.Trim()}%'";
var sql = $"SELECT Top(500) [TaskID],[请求CMD],[请求FROM],[请求时间],[请求内容],[响应时间],[响应内容] FROM [历史_WebApi接口传递数据日志] {wherestr}";
sql += " ORDER BY [请求时间] DESC";
SqlOperation.ExecuteSql(sql, out DataTable dt, out string error);
dgv_WebApiLog.DataSource = dt;
dgv_WebApiLog.Columns["请求时间"].ValueType = typeof(DateTime);
dgv_WebApiLog.Columns["请求时间"].DefaultCellStyle.Format = "yyyy-MM-dd HH:mm:ss";
dgv_WebApiLog.Columns["响应时间"].ValueType = typeof(DateTime);
dgv_WebApiLog.Columns["响应时间"].DefaultCellStyle.Format = "yyyy-MM-dd HH:mm:ss";
}
private void dgv_WebApiLog_CellClick(object sender, DataGridViewCellEventArgs e)
{
try
{
txt_RequestContext.Text = dgv_WebApiLog.CurrentRow.Cells["请求内容"].Value.ToString();
txt_ResponseContext.Text = dgv_WebApiLog.CurrentRow.Cells["响应内容"].Value.ToString();
try
{
var _msgRequest = JsonConvert.DeserializeObject<JObject>(txt_RequestContext.Text);
if (_msgRequest["content"] != null) txt_Key_TaskCodeOrOPName.Text = _msgRequest["content"]["taskCode"].ToString();
else if (_msgRequest["WorkCellCode"] != null) txt_Key_TaskCodeOrOPName.Text = _msgRequest["WorkCellCode"].ToString();
else txt_Key_TaskCodeOrOPName.Text = "";
}
catch (Exception)
{
}
}
catch (Exception)
{
throw;
}
}
private void LogRecord_Resize(object sender, EventArgs e)
{
tabControl_LogQuery.Width = this.Width-20;
tabControl_LogQuery.Height= this.Height-45;
dgv_Log.Width= tabControl_LogQuery.Width - 44;
dgv_Log.Height = tabControl_LogQuery.Height - 117;
dgv_WebApiLog.Width = tabControl_LogQuery.Width - 501;
dgv_WebApiLog.Height = tabControl_LogQuery.Height - 116;
txt_RequestContext.Left = txt_ResponseContext.Left= label10.Left = label9.Left = tabControl_LogQuery.Width-459;
dg_WebAPI_And_RunLog.Width = tabControl_LogQuery.Width - 501;
dg_WebAPI_And_RunLog.Height = tabControl_LogQuery.Height - 116;
txt_RequestContext_3.Left = txt_ResponseContext_3.Left= label11.Left = label12.Left = tabControl_LogQuery.Width-459;
}
private void btn_QueryALL_Click(object sender, EventArgs e)
{
var name = "大柴_日志查询_TaskCode";
var sqlParameters = new SqlParameter[] {
new SqlParameter("@TaskCode", this.txt_Key_TaskCodeOrOPName.Text.Trim()),
new SqlParameter("@StartTime",dt_Start.Value),
new SqlParameter("@EndTime",dt_End.Value),
};
SqlOperation.ExecuteStoredProcedure(name, sqlParameters,out DataTable dt, out string error);
dg_WebAPI_And_RunLog.DataSource = dt;
dg_WebAPI_And_RunLog.Columns["发生时间"].ValueType = typeof(DateTime);
dg_WebAPI_And_RunLog.Columns["发生时间"].DefaultCellStyle.Format = "yyyy-MM-dd HH:mm:ss";
}
private void dg_WebAPI_And_RunLog_CellClick(object sender, DataGridViewCellEventArgs e)
{
txt_RequestContext_3.Text = dg_WebAPI_And_RunLog.CurrentRow.Cells["请求内容"].Value.ToString();
txt_ResponseContext_3.Text = dg_WebAPI_And_RunLog.CurrentRow.Cells["响应内容"].Value.ToString();
}
private void dgv_Log_CellClick(object sender, DataGridViewCellEventArgs e)
{
try
{
var workcell = dgv_Log.CurrentRow.Cells["工位号"].Value.ToString().Trim();
txt_Key_TaskCodeOrOPName.Text= workcell;
}
catch (Exception)
{
throw;
}
}
}
}

View File

@@ -0,0 +1,156 @@
<?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="时间.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="工位号.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="类型.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="内容.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="StationName.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="TaskCode.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="日志类型.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="请求FROM.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="请求CMD.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="发生时间.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="请求内容.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="响应内容.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
</root>

View File

@@ -0,0 +1,447 @@
namespace MesWork
{
partial class TagDataEngineStatusShowDialog
{
/// <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(TagDataEngineStatusShowDialog));
this.label1 = new System.Windows.Forms.Label();
this.label2 = new System.Windows.Forms.Label();
this.txt_OpName = new System.Windows.Forms.TextBox();
this.txt_EngineNo = new System.Windows.Forms.TextBox();
this.pictureBox_OpName = new System.Windows.Forms.PictureBox();
this.label3 = new System.Windows.Forms.Label();
this.label4 = new System.Windows.Forms.Label();
this.label7 = new System.Windows.Forms.Label();
this.txt_SortNo = new System.Windows.Forms.TextBox();
this.txt_Order = new System.Windows.Forms.TextBox();
this.txt_CylinderBlockNo = new System.Windows.Forms.TextBox();
this.label6 = new System.Windows.Forms.Label();
this.txt_Pollet = new System.Windows.Forms.TextBox();
this.label5 = new System.Windows.Forms.Label();
this.txt_Duration_Curr = new System.Windows.Forms.TextBox();
this.label8 = new System.Windows.Forms.Label();
this.txt_Duration_Front = new System.Windows.Forms.TextBox();
this.label9 = new System.Windows.Forms.Label();
this.txt_Duration_Avg = new System.Windows.Forms.TextBox();
this.label10 = new System.Windows.Forms.Label();
this.txt_Count_Group = new System.Windows.Forms.TextBox();
this.label11 = new System.Windows.Forms.Label();
this.txt_Count_OK = new System.Windows.Forms.TextBox();
this.label12 = new System.Windows.Forms.Label();
this.txt_Count_NOK = new System.Windows.Forms.TextBox();
this.label13 = new System.Windows.Forms.Label();
this.label14 = new System.Windows.Forms.Label();
this.label15 = new System.Windows.Forms.Label();
this.txt_Time_PartOn = new System.Windows.Forms.TextBox();
this.txt_Time_PartOff = new System.Windows.Forms.TextBox();
this.txt_Time_PartComplete = new System.Windows.Forms.TextBox();
this.label16 = new System.Windows.Forms.Label();
this.txt_Time_PartComplete_Front = new System.Windows.Forms.TextBox();
this.timer_ReadPLC = new System.Windows.Forms.Timer(this.components);
((System.ComponentModel.ISupportInitialize)(this.pictureBox_OpName)).BeginInit();
this.SuspendLayout();
//
// label1
//
this.label1.AutoSize = true;
this.label1.Location = new System.Drawing.Point(343, 25);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(53, 12);
this.label1.TabIndex = 0;
this.label1.Text = "工位号:";
//
// label2
//
this.label2.AutoSize = true;
this.label2.Location = new System.Drawing.Point(343, 102);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(65, 12);
this.label2.TabIndex = 0;
this.label2.Text = "发动机号:";
//
// txt_OpName
//
this.txt_OpName.Location = new System.Drawing.Point(405, 20);
this.txt_OpName.Name = "txt_OpName";
this.txt_OpName.ReadOnly = true;
this.txt_OpName.Size = new System.Drawing.Size(159, 21);
this.txt_OpName.TabIndex = 1;
//
// txt_EngineNo
//
this.txt_EngineNo.Location = new System.Drawing.Point(405, 97);
this.txt_EngineNo.Name = "txt_EngineNo";
this.txt_EngineNo.ReadOnly = true;
this.txt_EngineNo.Size = new System.Drawing.Size(159, 21);
this.txt_EngineNo.TabIndex = 1;
//
// pictureBox_OpName
//
this.pictureBox_OpName.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.pictureBox_OpName.InitialImage = ((System.Drawing.Image)(resources.GetObject("pictureBox_OpName.InitialImage")));
this.pictureBox_OpName.Location = new System.Drawing.Point(12, 12);
this.pictureBox_OpName.Name = "pictureBox_OpName";
this.pictureBox_OpName.Size = new System.Drawing.Size(315, 259);
this.pictureBox_OpName.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage;
this.pictureBox_OpName.TabIndex = 2;
this.pictureBox_OpName.TabStop = false;
//
// label3
//
this.label3.AutoSize = true;
this.label3.Location = new System.Drawing.Point(343, 77);
this.label3.Name = "label3";
this.label3.Size = new System.Drawing.Size(53, 12);
this.label3.TabIndex = 0;
this.label3.Text = "机型号:";
//
// label4
//
this.label4.AutoSize = true;
this.label4.Location = new System.Drawing.Point(343, 51);
this.label4.Name = "label4";
this.label4.Size = new System.Drawing.Size(53, 12);
this.label4.TabIndex = 0;
this.label4.Text = "订单号:";
//
// label7
//
this.label7.AutoSize = true;
this.label7.Location = new System.Drawing.Point(343, 156);
this.label7.Name = "label7";
this.label7.Size = new System.Drawing.Size(53, 12);
this.label7.TabIndex = 0;
this.label7.Text = "缸体号:";
//
// txt_SortNo
//
this.txt_SortNo.Location = new System.Drawing.Point(405, 70);
this.txt_SortNo.Name = "txt_SortNo";
this.txt_SortNo.ReadOnly = true;
this.txt_SortNo.Size = new System.Drawing.Size(159, 21);
this.txt_SortNo.TabIndex = 3;
//
// txt_Order
//
this.txt_Order.Location = new System.Drawing.Point(405, 44);
this.txt_Order.Name = "txt_Order";
this.txt_Order.ReadOnly = true;
this.txt_Order.Size = new System.Drawing.Size(159, 21);
this.txt_Order.TabIndex = 3;
//
// txt_CylinderBlockNo
//
this.txt_CylinderBlockNo.Location = new System.Drawing.Point(405, 152);
this.txt_CylinderBlockNo.Name = "txt_CylinderBlockNo";
this.txt_CylinderBlockNo.ReadOnly = true;
this.txt_CylinderBlockNo.Size = new System.Drawing.Size(159, 21);
this.txt_CylinderBlockNo.TabIndex = 3;
//
// label6
//
this.label6.AutoSize = true;
this.label6.Location = new System.Drawing.Point(343, 128);
this.label6.Name = "label6";
this.label6.Size = new System.Drawing.Size(53, 12);
this.label6.TabIndex = 0;
this.label6.Text = "托盘号:";
//
// txt_Pollet
//
this.txt_Pollet.Location = new System.Drawing.Point(405, 124);
this.txt_Pollet.Name = "txt_Pollet";
this.txt_Pollet.ReadOnly = true;
this.txt_Pollet.Size = new System.Drawing.Size(159, 21);
this.txt_Pollet.TabIndex = 1;
//
// label5
//
this.label5.AutoSize = true;
this.label5.Location = new System.Drawing.Point(343, 203);
this.label5.Name = "label5";
this.label5.Size = new System.Drawing.Size(65, 12);
this.label5.TabIndex = 0;
this.label5.Text = "当前节拍:";
//
// txt_Duration_Curr
//
this.txt_Duration_Curr.Location = new System.Drawing.Point(405, 199);
this.txt_Duration_Curr.Name = "txt_Duration_Curr";
this.txt_Duration_Curr.ReadOnly = true;
this.txt_Duration_Curr.Size = new System.Drawing.Size(159, 21);
this.txt_Duration_Curr.TabIndex = 3;
//
// label8
//
this.label8.AutoSize = true;
this.label8.Location = new System.Drawing.Point(343, 230);
this.label8.Name = "label8";
this.label8.Size = new System.Drawing.Size(65, 12);
this.label8.TabIndex = 0;
this.label8.Text = "上一节拍:";
//
// txt_Duration_Front
//
this.txt_Duration_Front.Location = new System.Drawing.Point(405, 226);
this.txt_Duration_Front.Name = "txt_Duration_Front";
this.txt_Duration_Front.ReadOnly = true;
this.txt_Duration_Front.Size = new System.Drawing.Size(159, 21);
this.txt_Duration_Front.TabIndex = 3;
//
// label9
//
this.label9.AutoSize = true;
this.label9.Location = new System.Drawing.Point(343, 258);
this.label9.Name = "label9";
this.label9.Size = new System.Drawing.Size(65, 12);
this.label9.TabIndex = 0;
this.label9.Text = "平均节拍:";
//
// txt_Duration_Avg
//
this.txt_Duration_Avg.Location = new System.Drawing.Point(405, 254);
this.txt_Duration_Avg.Name = "txt_Duration_Avg";
this.txt_Duration_Avg.ReadOnly = true;
this.txt_Duration_Avg.Size = new System.Drawing.Size(159, 21);
this.txt_Duration_Avg.TabIndex = 3;
//
// label10
//
this.label10.AutoSize = true;
this.label10.Location = new System.Drawing.Point(343, 312);
this.label10.Name = "label10";
this.label10.Size = new System.Drawing.Size(53, 12);
this.label10.TabIndex = 0;
this.label10.Text = "班计数:";
//
// txt_Count_Group
//
this.txt_Count_Group.Location = new System.Drawing.Point(405, 308);
this.txt_Count_Group.Name = "txt_Count_Group";
this.txt_Count_Group.ReadOnly = true;
this.txt_Count_Group.Size = new System.Drawing.Size(159, 21);
this.txt_Count_Group.TabIndex = 3;
//
// label11
//
this.label11.AutoSize = true;
this.label11.Location = new System.Drawing.Point(343, 339);
this.label11.Name = "label11";
this.label11.Size = new System.Drawing.Size(65, 12);
this.label11.TabIndex = 0;
this.label11.Text = "总合格数:";
//
// txt_Count_OK
//
this.txt_Count_OK.Location = new System.Drawing.Point(405, 335);
this.txt_Count_OK.Name = "txt_Count_OK";
this.txt_Count_OK.ReadOnly = true;
this.txt_Count_OK.Size = new System.Drawing.Size(159, 21);
this.txt_Count_OK.TabIndex = 3;
//
// label12
//
this.label12.AutoSize = true;
this.label12.Location = new System.Drawing.Point(334, 366);
this.label12.Name = "label12";
this.label12.Size = new System.Drawing.Size(77, 12);
this.label12.TabIndex = 0;
this.label12.Text = "总不合格数:";
//
// txt_Count_NOK
//
this.txt_Count_NOK.Location = new System.Drawing.Point(405, 362);
this.txt_Count_NOK.Name = "txt_Count_NOK";
this.txt_Count_NOK.ReadOnly = true;
this.txt_Count_NOK.Size = new System.Drawing.Size(159, 21);
this.txt_Count_NOK.TabIndex = 3;
//
// label13
//
this.label13.AutoSize = true;
this.label13.Location = new System.Drawing.Point(31, 286);
this.label13.Name = "label13";
this.label13.Size = new System.Drawing.Size(65, 12);
this.label13.TabIndex = 0;
this.label13.Text = "到达时间:";
//
// label14
//
this.label14.AutoSize = true;
this.label14.Location = new System.Drawing.Point(31, 313);
this.label14.Name = "label14";
this.label14.Size = new System.Drawing.Size(65, 12);
this.label14.TabIndex = 0;
this.label14.Text = "离开时间:";
//
// label15
//
this.label15.AutoSize = true;
this.label15.Location = new System.Drawing.Point(30, 340);
this.label15.Name = "label15";
this.label15.Size = new System.Drawing.Size(65, 12);
this.label15.TabIndex = 0;
this.label15.Text = "完成时间:";
//
// txt_Time_PartOn
//
this.txt_Time_PartOn.Location = new System.Drawing.Point(97, 282);
this.txt_Time_PartOn.Name = "txt_Time_PartOn";
this.txt_Time_PartOn.ReadOnly = true;
this.txt_Time_PartOn.Size = new System.Drawing.Size(213, 21);
this.txt_Time_PartOn.TabIndex = 3;
//
// txt_Time_PartOff
//
this.txt_Time_PartOff.Location = new System.Drawing.Point(97, 309);
this.txt_Time_PartOff.Name = "txt_Time_PartOff";
this.txt_Time_PartOff.ReadOnly = true;
this.txt_Time_PartOff.Size = new System.Drawing.Size(213, 21);
this.txt_Time_PartOff.TabIndex = 3;
//
// txt_Time_PartComplete
//
this.txt_Time_PartComplete.Location = new System.Drawing.Point(97, 336);
this.txt_Time_PartComplete.Name = "txt_Time_PartComplete";
this.txt_Time_PartComplete.ReadOnly = true;
this.txt_Time_PartComplete.Size = new System.Drawing.Size(213, 21);
this.txt_Time_PartComplete.TabIndex = 3;
//
// label16
//
this.label16.AutoSize = true;
this.label16.Location = new System.Drawing.Point(6, 367);
this.label16.Name = "label16";
this.label16.Size = new System.Drawing.Size(89, 12);
this.label16.TabIndex = 0;
this.label16.Text = "上一完成时间:";
//
// txt_Time_PartComplete_Front
//
this.txt_Time_PartComplete_Front.Location = new System.Drawing.Point(97, 363);
this.txt_Time_PartComplete_Front.Name = "txt_Time_PartComplete_Front";
this.txt_Time_PartComplete_Front.ReadOnly = true;
this.txt_Time_PartComplete_Front.Size = new System.Drawing.Size(213, 21);
this.txt_Time_PartComplete_Front.TabIndex = 3;
//
// timer_ReadPLC
//
this.timer_ReadPLC.Interval = 5000;
this.timer_ReadPLC.Tick += new System.EventHandler(this.timer_ReadPLC_Tick);
//
// TagDataEngineStatusShowDialog
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(584, 396);
this.Controls.Add(this.txt_Time_PartComplete_Front);
this.Controls.Add(this.txt_Time_PartComplete);
this.Controls.Add(this.txt_Count_NOK);
this.Controls.Add(this.txt_Time_PartOff);
this.Controls.Add(this.txt_Count_OK);
this.Controls.Add(this.txt_Time_PartOn);
this.Controls.Add(this.txt_Count_Group);
this.Controls.Add(this.txt_Duration_Avg);
this.Controls.Add(this.txt_Duration_Front);
this.Controls.Add(this.txt_Duration_Curr);
this.Controls.Add(this.txt_CylinderBlockNo);
this.Controls.Add(this.txt_Order);
this.Controls.Add(this.txt_SortNo);
this.Controls.Add(this.label16);
this.Controls.Add(this.pictureBox_OpName);
this.Controls.Add(this.label15);
this.Controls.Add(this.txt_Pollet);
this.Controls.Add(this.label12);
this.Controls.Add(this.label14);
this.Controls.Add(this.txt_EngineNo);
this.Controls.Add(this.label11);
this.Controls.Add(this.label13);
this.Controls.Add(this.label6);
this.Controls.Add(this.label10);
this.Controls.Add(this.txt_OpName);
this.Controls.Add(this.label9);
this.Controls.Add(this.label8);
this.Controls.Add(this.label2);
this.Controls.Add(this.label5);
this.Controls.Add(this.label7);
this.Controls.Add(this.label4);
this.Controls.Add(this.label3);
this.Controls.Add(this.label1);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
this.MaximizeBox = false;
this.MinimizeBox = false;
this.Name = "TagDataEngineStatusShowDialog";
this.ShowIcon = false;
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "工位详细信息";
this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.TagDataEngineStatusShowDialog_FormClosing);
((System.ComponentModel.ISupportInitialize)(this.pictureBox_OpName)).EndInit();
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.Label label1;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.TextBox txt_OpName;
private System.Windows.Forms.TextBox txt_EngineNo;
private System.Windows.Forms.PictureBox pictureBox_OpName;
private System.Windows.Forms.Label label3;
private System.Windows.Forms.Label label4;
private System.Windows.Forms.Label label7;
private System.Windows.Forms.TextBox txt_SortNo;
private System.Windows.Forms.TextBox txt_Order;
private System.Windows.Forms.TextBox txt_CylinderBlockNo;
private System.Windows.Forms.Label label6;
private System.Windows.Forms.TextBox txt_Pollet;
private System.Windows.Forms.Label label5;
private System.Windows.Forms.TextBox txt_Duration_Curr;
private System.Windows.Forms.Label label8;
private System.Windows.Forms.TextBox txt_Duration_Front;
private System.Windows.Forms.Label label9;
private System.Windows.Forms.TextBox txt_Duration_Avg;
private System.Windows.Forms.Label label10;
private System.Windows.Forms.TextBox txt_Count_Group;
private System.Windows.Forms.Label label11;
private System.Windows.Forms.TextBox txt_Count_OK;
private System.Windows.Forms.Label label12;
private System.Windows.Forms.TextBox txt_Count_NOK;
private System.Windows.Forms.Label label13;
private System.Windows.Forms.Label label14;
private System.Windows.Forms.Label label15;
private System.Windows.Forms.TextBox txt_Time_PartOn;
private System.Windows.Forms.TextBox txt_Time_PartOff;
private System.Windows.Forms.TextBox txt_Time_PartComplete;
private System.Windows.Forms.Label label16;
private System.Windows.Forms.TextBox txt_Time_PartComplete_Front;
private System.Windows.Forms.Timer timer_ReadPLC;
}
}

View File

@@ -0,0 +1,180 @@
using SlMesDbIterface;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace MesWork
{
/// <summary>
/// 显示当前工位信息
/// </summary>
public partial class TagDataEngineStatusShowDialog : Form
{
/// <summary>
/// 当前的工位号
/// </summary>
public string opName;
/// <summary>
///
/// </summary>
public TagDataEngineStatusShowDialog()
{
InitializeComponent();
}
/// <summary>
///
/// </summary>
/// <param name="opName"></param>
public TagDataEngineStatusShowDialog(string opName)
{
InitializeComponent();
timer_ReadPLC.Interval = 5000;
timer_ReadPLC.Enabled = true;
txt_OpName.Text = this.opName = opName;
ShowOpNamePic();
SelectOpToInfoFromSQL();
FromPLCRead();
}
/// <summary>
/// 显示图片
/// </summary>
/// <param name="opName"></param>
private void ShowOpNamePic()
{
string file = "OpNamePic\\"+ opName+ ".jpg";
if (File.Exists(file))
{
pictureBox_OpName.Image = Image.FromFile(file);
}
else
{
pictureBox_OpName.Image = Image.FromFile("OpNamePic\\404.png");
}
}
/// <summary>
/// 根据工位号查询详细信息
/// </summary>
/// <param name="opName"></param>
private void SelectOpToInfoFromSQL()
{
//获取工位上前信息
var sql = $"SELECT [Last_工单号],[Last_发动机号],[Last_机型号],[Last_进站时间],[Last_离站时间],[Last_托盘号] FROM [MES_计划BOM_工位与名称] where 工位号 = '{opName}'";
SqlOperation.ExecuteSql(sql, out DataTable dt_StationInfo, out string error);
if(dt_StationInfo.Rows.Count>0)
{
var Last_工单号=dt_StationInfo.Rows[0]["Last_工单号"].ToString();
var Last_机型号 = dt_StationInfo.Rows[0]["Last_机型号"].ToString();
var Last_发动机号 = dt_StationInfo.Rows[0]["Last_发动机号"].ToString();
var Last_托盘号 = dt_StationInfo.Rows[0]["Last_托盘号"].ToString();
var Last_进站时间 = dt_StationInfo.Rows[0]["Last_进站时间"].ToString();
var Last_离站时间 = dt_StationInfo.Rows[0]["Last_离站时间"].ToString();
var Front_发动机号 = "";
var Duration_Curr = "";
var Duration_Front = "";
if (!string.IsNullOrEmpty(Last_进站时间) && !string.IsNullOrEmpty(Last_离站时间))
{
if(DateTime.Parse(Last_离站时间)> DateTime.Parse(Last_进站时间))
Duration_Curr = (DateTime.Parse(Last_离站时间) - DateTime.Parse(Last_进站时间)).TotalSeconds.ToString();
}
var sql_Front = $"SELECT top 1 [发动机流水号] FROM [大柴_过点信息] " +
$"where 工序编码='{opName}' and [发动机流水号]<>'{Last_发动机号}' and [发动机流水号]<>'' and 过点属性=1 " +
$"order by 采集时间 desc";
SqlOperation.ExecuteSql(sql_Front, out DataTable dt_front, out string err);
if(dt_front.Rows.Count>0) Front_发动机号=dt_front.Rows[0][0].ToString().Trim();
if(Front_发动机号!="")
{
var sql_frontInfo = $"SELECT top 2 发动机流水号,[工位编码],max([采集时间]) as [采集时间],[过点属性] " +
$"FROM [大柴_过点信息] where [工位编码]='{opName}' and 发动机流水号='{Front_发动机号}' "+
$"group by [工位编码],发动机流水号,[过点属性] order by [采集时间] desc";
SqlOperation.ExecuteSql(sql_frontInfo, out DataTable dt_frontEngine, out string err1);
if(dt_frontEngine.Rows.Count>0)
{
var Front_进站时间 = dt_frontEngine.Rows[1]["采集时间"].ToString();
var Front_离站时间 = dt_frontEngine.Rows[0]["采集时间"].ToString();
if (!string.IsNullOrEmpty(Front_进站时间) && !string.IsNullOrEmpty(Front_离站时间))
{
if (DateTime.Parse(Front_离站时间) > DateTime.Parse(Front_进站时间))
Duration_Front = (DateTime.Parse(Front_离站时间) - DateTime.Parse(Front_进站时间)).TotalSeconds.ToString();
}
}
}
txt_Order.Text = Last_工单号;
txt_SortNo.Text = Last_机型号;
txt_EngineNo.Text = Last_发动机号;
txt_Pollet.Text = Last_托盘号;
txt_CylinderBlockNo.Text = "";//从扫码结果中读取
txt_Duration_Curr.Text = "";
txt_Duration_Front.Text = "";
txt_Duration_Avg.Text = "";
txt_Time_PartOn.Text = Last_进站时间;
txt_Time_PartOff.Text = Last_离站时间;
txt_Time_PartComplete.Text = Duration_Curr;
txt_Time_PartComplete_Front.Text = Duration_Front;
}
}
/// <summary>
/// 关闭窗体
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void TagDataEngineStatusShowDialog_FormClosing(object sender, FormClosingEventArgs e)
{
timer_ReadPLC.Enabled = false;
MesWorkForm.list_OpenForm.Remove(opName);
}
/// <summary>
/// 刷新 设备数据
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void timer_ReadPLC_Tick(object sender, EventArgs e)
{
timer_ReadPLC.Enabled = false;
FromPLCRead();
timer_ReadPLC.Enabled = true;
}
/// <summary>
/// 刷新 设备数据
/// </summary>
private void FromPLCRead()
{
try
{
txt_Order.Text = MesWorkForm.ReadPLC(40, opName).ToString();
txt_SortNo.Text = MesWorkForm.ReadPLC(11, opName).ToString();
txt_EngineNo.Text = MesWorkForm.ReadPLC(10, opName).ToString();
txt_Pollet.Text = MesWorkForm.ReadPLC(80, opName).ToString();
//txt_Duration_Curr.Text = 当前循环时间;
//txt_Duration_Front.Text = 上一工件的循环时间;
//txt_Duration_Avg.Text = 平均循环时间;
//txt_Count_Group.Text = 班计数;
//txt_Count_OK.Text = 总合格工件计数;
//txt_Count_NOK.Text = 总不合格工件计数;
}
catch (Exception err)
{
}
}
}
}

View File

@@ -0,0 +1,618 @@
<?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="pictureBox_OpName.InitialImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
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
gg==
</value>
</data>
<metadata name="timer_ReadPLC.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
</root>

View File

@@ -0,0 +1,237 @@
namespace PlanExecute_Query
{
partial class PlanExecute
{
/// <summary>
/// 必需的设计器变量。
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// 清理所有正在使用的资源。
/// </summary>
/// <param name="disposing">如果应释放托管资源,为 true否则为 false。</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows
/// <summary>
/// 设计器支持所需的方法 - 不要修改
/// 使用代码编辑器修改此方法的内容。
/// </summary>
private void InitializeComponent()
{
System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle();
this.dgv_PlanDetail = new System.Windows.Forms.DataGridView();
this.btn_Refresh = new System.Windows.Forms.Button();
this.cb_Area = new System.Windows.Forms.ComboBox();
this.label1 = new System.Windows.Forms.Label();
this.label3 = new System.Windows.Forms.Label();
this.label4 = new System.Windows.Forms.Label();
this.dtp_Start = new System.Windows.Forms.DateTimePicker();
this.dtp_End = new System.Windows.Forms.DateTimePicker();
this.cmb_State = new System.Windows.Forms.ComboBox();
this.label2 = new System.Windows.Forms.Label();
this.label5 = new System.Windows.Forms.Label();
this.txt_OrderNum = new System.Windows.Forms.TextBox();
((System.ComponentModel.ISupportInitialize)(this.dgv_PlanDetail)).BeginInit();
this.SuspendLayout();
//
// dgv_PlanDetail
//
this.dgv_PlanDetail.AllowUserToAddRows = false;
this.dgv_PlanDetail.AllowUserToDeleteRows = false;
this.dgv_PlanDetail.AllowUserToResizeRows = false;
this.dgv_PlanDetail.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.dgv_PlanDetail.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.Fill;
this.dgv_PlanDetail.BackgroundColor = System.Drawing.SystemColors.ButtonHighlight;
dataGridViewCellStyle1.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft;
dataGridViewCellStyle1.BackColor = System.Drawing.SystemColors.Control;
dataGridViewCellStyle1.Font = new System.Drawing.Font("宋体", 10.5F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
dataGridViewCellStyle1.ForeColor = System.Drawing.SystemColors.WindowText;
dataGridViewCellStyle1.SelectionBackColor = System.Drawing.SystemColors.Highlight;
dataGridViewCellStyle1.SelectionForeColor = System.Drawing.SystemColors.HighlightText;
dataGridViewCellStyle1.WrapMode = System.Windows.Forms.DataGridViewTriState.True;
this.dgv_PlanDetail.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle1;
this.dgv_PlanDetail.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
this.dgv_PlanDetail.Location = new System.Drawing.Point(12, 42);
this.dgv_PlanDetail.MultiSelect = false;
this.dgv_PlanDetail.Name = "dgv_PlanDetail";
this.dgv_PlanDetail.ReadOnly = true;
this.dgv_PlanDetail.RowHeadersVisible = false;
this.dgv_PlanDetail.RowTemplate.Height = 26;
this.dgv_PlanDetail.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect;
this.dgv_PlanDetail.Size = new System.Drawing.Size(1425, 754);
this.dgv_PlanDetail.TabIndex = 72;
//
// btn_Refresh
//
this.btn_Refresh.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.btn_Refresh.Location = new System.Drawing.Point(719, 6);
this.btn_Refresh.Name = "btn_Refresh";
this.btn_Refresh.Size = new System.Drawing.Size(83, 26);
this.btn_Refresh.TabIndex = 74;
this.btn_Refresh.Text = "查询";
this.btn_Refresh.UseVisualStyleBackColor = true;
this.btn_Refresh.Click += new System.EventHandler(this.btn_Refresh_Click);
//
// cb_Area
//
this.cb_Area.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cb_Area.FormattingEnabled = true;
this.cb_Area.Items.AddRange(new object[] {
"内装线",
"活塞连杆分线",
"缸盖线"});
this.cb_Area.Location = new System.Drawing.Point(1139, 10);
this.cb_Area.Name = "cb_Area";
this.cb_Area.Size = new System.Drawing.Size(128, 20);
this.cb_Area.TabIndex = 75;
this.cb_Area.Visible = false;
//
// label1
//
this.label1.AutoSize = true;
this.label1.Font = new System.Drawing.Font("宋体", 10.5F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.label1.Location = new System.Drawing.Point(1070, 13);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(67, 14);
this.label1.TabIndex = 76;
this.label1.Text = "所属分线";
this.label1.Visible = false;
//
// label3
//
this.label3.AutoSize = true;
this.label3.Font = new System.Drawing.Font("宋体", 10.5F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.label3.Location = new System.Drawing.Point(9, 13);
this.label3.Name = "label3";
this.label3.Size = new System.Drawing.Size(67, 14);
this.label3.TabIndex = 76;
this.label3.Text = "生产日期";
//
// label4
//
this.label4.AutoSize = true;
this.label4.Font = new System.Drawing.Font("宋体", 10.5F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.label4.Location = new System.Drawing.Point(188, 13);
this.label4.Name = "label4";
this.label4.Size = new System.Drawing.Size(22, 14);
this.label4.TabIndex = 76;
this.label4.Text = "到";
//
// dtp_Start
//
this.dtp_Start.CustomFormat = "yyyy-MM-dd";
this.dtp_Start.Format = System.Windows.Forms.DateTimePickerFormat.Custom;
this.dtp_Start.Location = new System.Drawing.Point(80, 9);
this.dtp_Start.Name = "dtp_Start";
this.dtp_Start.Size = new System.Drawing.Size(101, 21);
this.dtp_Start.TabIndex = 78;
//
// dtp_End
//
this.dtp_End.CustomFormat = "yyyy-MM-dd";
this.dtp_End.Format = System.Windows.Forms.DateTimePickerFormat.Custom;
this.dtp_End.Location = new System.Drawing.Point(216, 9);
this.dtp_End.Name = "dtp_End";
this.dtp_End.Size = new System.Drawing.Size(101, 21);
this.dtp_End.TabIndex = 78;
//
// cmb_State
//
this.cmb_State.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cmb_State.FormattingEnabled = true;
this.cmb_State.Items.AddRange(new object[] {
"未上线",
"已上线"});
this.cmb_State.Location = new System.Drawing.Point(406, 10);
this.cmb_State.Name = "cmb_State";
this.cmb_State.Size = new System.Drawing.Size(95, 20);
this.cmb_State.TabIndex = 75;
//
// label2
//
this.label2.AutoSize = true;
this.label2.Font = new System.Drawing.Font("宋体", 10.5F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.label2.Location = new System.Drawing.Point(339, 13);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(67, 14);
this.label2.TabIndex = 76;
this.label2.Text = "执行状态";
this.label2.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
//
// label5
//
this.label5.AutoSize = true;
this.label5.Font = new System.Drawing.Font("宋体", 10.5F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.label5.Location = new System.Drawing.Point(522, 13);
this.label5.Name = "label5";
this.label5.Size = new System.Drawing.Size(52, 14);
this.label5.TabIndex = 76;
this.label5.Text = "订单号";
this.label5.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
//
// txt_OrderNum
//
this.txt_OrderNum.Location = new System.Drawing.Point(574, 9);
this.txt_OrderNum.Name = "txt_OrderNum";
this.txt_OrderNum.Size = new System.Drawing.Size(126, 21);
this.txt_OrderNum.TabIndex = 79;
//
// PlanExecute
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(1446, 808);
this.Controls.Add(this.txt_OrderNum);
this.Controls.Add(this.dtp_End);
this.Controls.Add(this.dtp_Start);
this.Controls.Add(this.cmb_State);
this.Controls.Add(this.cb_Area);
this.Controls.Add(this.btn_Refresh);
this.Controls.Add(this.dgv_PlanDetail);
this.Controls.Add(this.label4);
this.Controls.Add(this.label3);
this.Controls.Add(this.label5);
this.Controls.Add(this.label2);
this.Controls.Add(this.label1);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
this.Name = "PlanExecute";
this.ShowIcon = false;
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "计划执行情况";
this.Load += new System.EventHandler(this.PlanExecute_Query_Load);
((System.ComponentModel.ISupportInitialize)(this.dgv_PlanDetail)).EndInit();
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.DataGridView dgv_PlanDetail;
private System.Windows.Forms.Button btn_Refresh;
private System.Windows.Forms.ComboBox cb_Area;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.Label label3;
private System.Windows.Forms.Label label4;
private System.Windows.Forms.DateTimePicker dtp_Start;
private System.Windows.Forms.DateTimePicker dtp_End;
private System.Windows.Forms.ComboBox cmb_State;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.Label label5;
private System.Windows.Forms.TextBox txt_OrderNum;
}
}

View File

@@ -0,0 +1,112 @@
using DC_A95.MES_A95;
using MesWork;
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;
using static System.Configuration.ConfigurationManager;
namespace PlanExecute_Query
{
/// <summary>
/// 计划执行情况查询
/// </summary>
public partial class PlanExecute : Form
{
/// <summary>
/// 构造
/// </summary>
public PlanExecute()
{
InitializeComponent();
//this.WindowState = FormWindowState.Maximized;
var end = DateTime.Now.AddDays(5);
var start = end.AddDays(-8);
dtp_Start.Value = start;
dtp_End.Value = end;
cb_Area.SelectedItem = "内装线";
}
/// <summary>
/// 钩子
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void PlanExecute_Query_Load(object sender, EventArgs e)
{
Refresh_PlanInfo();
}
/// <summary>
/// 刷新日志的显示
/// </summary>
private void Refresh_PlanInfo()
{
var dt = Select_PlanInfo();
dgv_PlanDetail.DataSource = dt;
}
/// <summary>
/// 查询日志
/// </summary>
/// <returns></returns>
private DataTable Select_PlanInfo()
{
//var area= cb_Area.Text;
var start = dtp_Start.Value;
var end = dtp_End.Value;
var tblName = "";
//内装线
//活塞连杆分线
//缸盖线
//if (area == "内装线") tblName = "大柴_接口_SAP生产计划_执行计划";
//else if (area == "缸盖线") tblName = "大柴_接口_SAP生产计划_执行计划_缸盖";
//else if (area == "活塞连杆分线") tblName = "大柴_接口_SAP生产计划_执行计划_活塞连杆";
var whereStr = "";
whereStr = $" WHERE 计划开始时间>='{start.Date}' and 计划开始时间<='{end.Date}'";
if(cmb_State.Text.Trim()=="未上线")
{
whereStr += $" AND [执行状态] = {PlanExec_State.Waiting}";
}
else if (cmb_State.Text.Trim() == "已上线")
{
whereStr += $" AND [执行状态] = {PlanExec_State.HasExec}";
}
if (txt_OrderNum.Text != "")
{
whereStr += $" AND [订单号] = '{txt_OrderNum.Text}'";
}
//var sql = $"SELECT Top(200) a.[订单类型],a.[生产日期],a.[上线序号],a.[上线总排序],a.[发动机流水号] as 发动机号,a.[机型号],a.[订单号],a.[订单数量],a.[创建时间],a.[执行状态],a.[是否冷试],a.[是否热试],b.当前工位"
// + $" FROM [大柴_接口_SAP生产计划_执行计划] a LEFT JOIN [大柴_上线记录_内装线] b ON a.发动机流水号=b.发动机流水号 {whereStr}"
// + " order by a.[上线总排序]";
var sql = $"SELECT TOP (1000) [AID] ,[发动机编号],[订货号],[订货号ID] ,[机型号] ,[工单ID] ,[工单号] ,[BOM头ID] ,[MES计划顺序] ,[计划开始时间] ,[总装上线扫描时间] ,[计划同步时间] ,[计划状态] ,[执行状态] ,[执行时间] ,[LineID]" +
$" FROM[WC_WP12T_13L].[dbo].[潍柴_接口_生产计划_执行计划] { whereStr}"
+ " order by [MES计划顺序]";
DataLinkMesWork.SQLCommon.ExecuteDataTable(sql, MesWorkForm.ConnectionString,out DataTable dt, out string err2);
return dt;
}
/// <summary>
/// 手动刷新
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btn_Refresh_Click(object sender, EventArgs e)
{
var area = cb_Area.Text;
var start = dtp_Start.Value;
var end = dtp_End.Value;
var dt = Select_PlanInfo();
dgv_PlanDetail.DataSource = dt;
}
}
}

View File

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

View File

@@ -0,0 +1,257 @@
namespace ExternalDataSync
{
partial class F_StationManage
{
/// <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(F_StationManage));
this.btn_Station_Add = new System.Windows.Forms.Button();
this.btn_Station_Update = new System.Windows.Forms.Button();
this.btn_Station_Delete = new System.Windows.Forms.Button();
this.dgv_Station = new System.Windows.Forms.DataGridView();
this.cmb_Area = new System.Windows.Forms.ComboBox();
this.label1 = new System.Windows.Forms.Label();
this.ID = new System.Windows.Forms.DataGridViewTextBoxColumn();
this. = new System.Windows.Forms.DataGridViewTextBoxColumn();
this. = new System.Windows.Forms.DataGridViewTextBoxColumn();
this. = new System.Windows.Forms.DataGridViewTextBoxColumn();
this.MES = new System.Windows.Forms.DataGridViewTextBoxColumn();
this. = new System.Windows.Forms.DataGridViewTextBoxColumn();
this. = new System.Windows.Forms.DataGridViewTextBoxColumn();
this.PLC = new System.Windows.Forms.DataGridViewTextBoxColumn();
this. = new System.Windows.Forms.DataGridViewTextBoxColumn();
this. = new System.Windows.Forms.DataGridViewTextBoxColumn();
((System.ComponentModel.ISupportInitialize)(this.dgv_Station)).BeginInit();
this.SuspendLayout();
//
// btn_Station_Add
//
this.btn_Station_Add.Font = new System.Drawing.Font("宋体", 10F);
this.btn_Station_Add.Location = new System.Drawing.Point(239, 6);
this.btn_Station_Add.Name = "btn_Station_Add";
this.btn_Station_Add.Size = new System.Drawing.Size(53, 28);
this.btn_Station_Add.TabIndex = 47;
this.btn_Station_Add.Text = "增加";
this.btn_Station_Add.UseVisualStyleBackColor = true;
this.btn_Station_Add.Click += new System.EventHandler(this.btn_Station_Add_Click);
//
// btn_Station_Update
//
this.btn_Station_Update.Font = new System.Drawing.Font("宋体", 10F);
this.btn_Station_Update.Location = new System.Drawing.Point(298, 6);
this.btn_Station_Update.Name = "btn_Station_Update";
this.btn_Station_Update.Size = new System.Drawing.Size(53, 28);
this.btn_Station_Update.TabIndex = 47;
this.btn_Station_Update.Text = "修改";
this.btn_Station_Update.UseVisualStyleBackColor = true;
this.btn_Station_Update.Click += new System.EventHandler(this.btn_Station_Update_Click);
//
// btn_Station_Delete
//
this.btn_Station_Delete.Font = new System.Drawing.Font("宋体", 10F);
this.btn_Station_Delete.Location = new System.Drawing.Point(357, 7);
this.btn_Station_Delete.Name = "btn_Station_Delete";
this.btn_Station_Delete.Size = new System.Drawing.Size(53, 28);
this.btn_Station_Delete.TabIndex = 47;
this.btn_Station_Delete.Text = "删除";
this.btn_Station_Delete.UseVisualStyleBackColor = true;
this.btn_Station_Delete.Click += new System.EventHandler(this.btn_Station_Delete_Click);
//
// dgv_Station
//
this.dgv_Station.AllowUserToAddRows = false;
this.dgv_Station.AllowUserToDeleteRows = false;
this.dgv_Station.AllowUserToResizeColumns = false;
this.dgv_Station.AllowUserToResizeRows = false;
this.dgv_Station.BackgroundColor = System.Drawing.SystemColors.ControlLightLight;
this.dgv_Station.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
this.dgv_Station.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {
this.ID,
this.,
this.,
this.,
this.MES,
this.,
this.,
this.PLC,
this.,
this.});
this.dgv_Station.Location = new System.Drawing.Point(8, 41);
this.dgv_Station.Name = "dgv_Station";
this.dgv_Station.ReadOnly = true;
this.dgv_Station.RowHeadersVisible = false;
this.dgv_Station.RowTemplate.Height = 23;
this.dgv_Station.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect;
this.dgv_Station.Size = new System.Drawing.Size(1076, 572);
this.dgv_Station.TabIndex = 52;
this.dgv_Station.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.dgv_Station_CellClick);
//
// cmb_Area
//
this.cmb_Area.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cmb_Area.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.cmb_Area.FormattingEnabled = true;
this.cmb_Area.Location = new System.Drawing.Point(85, 8);
this.cmb_Area.Name = "cmb_Area";
this.cmb_Area.Size = new System.Drawing.Size(125, 24);
this.cmb_Area.TabIndex = 56;
this.cmb_Area.SelectedIndexChanged += new System.EventHandler(this.cmb_Area_SelectedIndexChanged);
//
// label1
//
this.label1.AutoSize = true;
this.label1.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.label1.Location = new System.Drawing.Point(12, 12);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(75, 16);
this.label1.TabIndex = 55;
this.label1.Text = "区域代码";
//
// ID
//
this.ID.DataPropertyName = "ID";
this.ID.HeaderText = "ID";
this.ID.Name = "ID";
this.ID.ReadOnly = true;
this.ID.Visible = false;
//
// 工位代码
//
this..DataPropertyName = "工位代码";
this..HeaderText = "工位代码";
this..Name = "工位代码";
this..ReadOnly = true;
this..Visible = false;
this..Width = 80;
//
// 工位号
//
this..DataPropertyName = "工位号";
this..HeaderText = "工位号";
this..Name = "工位号";
this..ReadOnly = true;
this..Width = 80;
//
// 工位名称
//
this..DataPropertyName = "工位名称";
this..HeaderText = "工位名称";
this..Name = "工位名称";
this..ReadOnly = true;
this..Width = 200;
//
// 是否启用MES
//
this.MES.DataPropertyName = "是否启用MES";
this.MES.HeaderText = "是否启用MES";
this.MES.Name = "是否启用MES";
this.MES.ReadOnly = true;
//
// 工序号
//
this..DataPropertyName = "工序号";
this..HeaderText = "工序号";
this..Name = "工序号";
this..ReadOnly = true;
this..Width = 80;
//
// 工序名称
//
this..DataPropertyName = "工序名称";
this..HeaderText = "工序名称";
this..Name = "工序名称";
this..ReadOnly = true;
this..Width = 200;
//
// PLC
//
this.PLC.DataPropertyName = "PLC";
this.PLC.HeaderText = "PLC";
this.PLC.Name = "PLC";
this.PLC.ReadOnly = true;
//
// 区域代码
//
this..DataPropertyName = "区域代码";
this..HeaderText = "区域代码";
this..Name = "区域代码";
this..ReadOnly = true;
this..Width = 150;
//
// 机床类型
//
this..DataPropertyName = "机床类型";
this..HeaderText = "机床类型";
this..Name = "机床类型";
this..ReadOnly = true;
//
// F_StationManage
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(1091, 621);
this.Controls.Add(this.cmb_Area);
this.Controls.Add(this.label1);
this.Controls.Add(this.btn_Station_Add);
this.Controls.Add(this.dgv_Station);
this.Controls.Add(this.btn_Station_Update);
this.Controls.Add(this.btn_Station_Delete);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.Margin = new System.Windows.Forms.Padding(2);
this.MaximizeBox = false;
this.Name = "F_StationManage";
this.ShowIcon = false;
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "工位管理";
this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.FormMain_FormClosing);
this.Load += new System.EventHandler(this.Form_MoveSqlTable_Load);
((System.ComponentModel.ISupportInitialize)(this.dgv_Station)).EndInit();
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.Button btn_Station_Add;
private System.Windows.Forms.Button btn_Station_Update;
private System.Windows.Forms.Button btn_Station_Delete;
private System.Windows.Forms.DataGridView dgv_Station;
private System.Windows.Forms.ComboBox cmb_Area;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.DataGridViewTextBoxColumn ID;
private System.Windows.Forms.DataGridViewTextBoxColumn ;
private System.Windows.Forms.DataGridViewTextBoxColumn ;
private System.Windows.Forms.DataGridViewTextBoxColumn ;
private System.Windows.Forms.DataGridViewTextBoxColumn MES;
private System.Windows.Forms.DataGridViewTextBoxColumn ;
private System.Windows.Forms.DataGridViewTextBoxColumn ;
private System.Windows.Forms.DataGridViewTextBoxColumn PLC;
private System.Windows.Forms.DataGridViewTextBoxColumn ;
private System.Windows.Forms.DataGridViewTextBoxColumn ;
}
}

View File

@@ -0,0 +1,247 @@
using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Net.NetworkInformation;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using static DataLinkMesWork.SQLCommon;
using System.Windows.Forms;
using SlMesDbIterface;
using MesToMs;
using System.Reflection;
using ConverterBytesAndStruct;
using MesWork;
using DC_A95;
using NPOI.SS.Formula.Functions;
using System.Security.Cryptography;
namespace ExternalDataSync
{
/// <summary>
///
/// </summary>
public partial class F_StationManage : Form
{
/// <summary>
///
/// </summary>
private static string Curr_Station_AID = "";
/// <summary>
///
/// </summary>
private static string Curr_工位代码 = "";
/// <summary>
///
/// </summary>
private static string Curr_StationName = "";
/// <summary>
///
/// </summary>
private static string Curr_工位名称 = "";
/// <summary>
///
/// </summary>
private static string Curr_工序号 = "";
/// <summary>
///
/// </summary>
private static string Curr_工序名称 = "";
/// <summary>
///
/// </summary>
private static string Curr_PLC = "";
/// <summary>
///
/// </summary>
private static string Curr_区域代码 = "";
/// <summary>
///
/// </summary>
private static string Curr_机床类型 = "";
/// <summary>
///
/// </summary>
private static string Curr_是否启用MES = "";
/// <summary>
///
/// </summary>
public F_StationManage()
{
InitializeComponent();
var sql_area = $" SELECT [区域代码] FROM [MES_计划BOM_工位与名称] group by [区域代码]";
SqlOperation.ExecuteSql(sql_area, out DataTable dt_area, out string error);
DataRow emptyRow = dt_area.NewRow();
emptyRow[0] = "";
dt_area.Rows.InsertAt(emptyRow, 0);
this.cmb_Area.ValueMember = "区域代码";
this.cmb_Area.DisplayMember = "区域代码";
this.cmb_Area.DataSource = dt_area;
Refresh_Station();
}
private void Form_MoveSqlTable_Load(object sender, EventArgs e)
{
}
private void FormMain_FormClosing(object sender, FormClosingEventArgs e)
{
//if (MessageBox.Show("确认要退出吗?", "", MessageBoxButtons.YesNo) == DialogResult.Yes)
//{
//}
//else
//{
// e.Cancel = true;
//}
}
#region
private void btn_Station_Add_Click(object sender, EventArgs e)
{
var dlg = new D_Station(From_Opera.Insert, Curr_StationName, Curr_工位名称, Curr_工序号, Curr_工序名称, Curr_PLC
, Curr_区域代码, Curr_机床类型, Curr_是否启用MES
);
if (dlg.ShowDialog() == DialogResult.OK)
{
var D_StationName = dlg.D_StationName;
var D_工位名称 = dlg.D_工位名称;
var D_工序号 = dlg.D_工序号;
var D_工序名称 = dlg.D_工序名称;
var D_PLC = dlg.D_PLC;
var D_区域代码 = dlg.D_区域代码;
var D_机床类型 = dlg.D_机床类型;
var D_是否启用MES = dlg.D_是否启用MES;
var name = "Event_工位_增加";
var sqlParameter = new SqlParameter[] {
new SqlParameter("@工位号", D_StationName),
new SqlParameter("@工位名称", D_工位名称),
new SqlParameter("@工序号", D_工序号),
new SqlParameter("@工序名称", D_工序名称),
new SqlParameter("@PLC", D_PLC),
new SqlParameter("@区域代码", D_区域代码),
new SqlParameter("@机床类型", D_机床类型),
new SqlParameter("@是否启用MES", D_是否启用MES)
};
SqlOperation.ExecuteStoredProcedure(name, sqlParameter, out string error);
Refresh_Station();
}
}
private void btn_Station_Update_Click(object sender, EventArgs e)
{
if (string.IsNullOrEmpty(Curr_StationName))
{
MessageBox.Show("请选择一个工位!");
return;
}
var dlg = new D_Station(From_Opera.Update, Curr_StationName, Curr_工位名称, Curr_工序号, Curr_工序名称, Curr_PLC
, Curr_区域代码, Curr_机床类型, Curr_是否启用MES);
if (dlg.ShowDialog() == DialogResult.OK)
{
var D_StationName = dlg.D_StationName;
var D_工位名称 = dlg.D_工位名称;
var D_工序号 = dlg.D_工序号;
var D_工序名称 = dlg.D_工序名称;
var D_PLC = dlg.D_PLC;
var D_区域代码 = dlg.D_区域代码;
var D_机床类型 = dlg.D_机床类型;
var D_是否启用MES = dlg.D_是否启用MES;
var name = "Event_工位_修改";
var sqlParameter = new SqlParameter[] {
new SqlParameter("@工位号", D_StationName),
new SqlParameter("@工位名称", D_工位名称),
new SqlParameter("@工序号", D_工序号),
new SqlParameter("@工序名称", D_工序名称),
new SqlParameter("@PLC", D_PLC),
new SqlParameter("@区域代码", D_区域代码),
new SqlParameter("@机床类型", D_机床类型),
new SqlParameter("@是否启用MES", D_是否启用MES)
};
SqlOperation.ExecuteStoredProcedure(name, sqlParameter, out string error);
Refresh_Station();
}
}
private void btn_Station_Delete_Click(object sender, EventArgs e)
{
if (string.IsNullOrEmpty(Curr_StationName))
{
MessageBox.Show("请选择一个工位!");
return;
}
if (MessageBox.Show($"确认删除工位?工位号:{Curr_StationName}", "", MessageBoxButtons.YesNo) == DialogResult.Yes)
{
if (MessageBox.Show($"再次 确认删除工位?工位号:{Curr_StationName}", "", MessageBoxButtons.YesNo) == DialogResult.Yes)
{
//SELECT[AID],[产品名称],[机型号],[机型名称],[操作时间],[备注] FROM[配方_大柴_机型]
//SELECT[AID],[机型号],[区域代码],[工位号],[配方号],[操作时间],[备注] FROM[配方_大柴_机型配方]
var name = "Event_工位_删除";
var sqlParameter = new SqlParameter[] {
new SqlParameter("@工位号", Curr_StationName)
};
SqlOperation.ExecuteStoredProcedure(name, sqlParameter, out string error);
Refresh_Station();
}
}
}
#endregion
private void Refresh_Station()
{
var sql = $@" SELECT [ID],[工位代码],[工位号],[工位名称],[工序号],[工序名称],[是否启用MES],[PLC],[区域代码],[机床类型] ";
sql += "FROM [MES_计划BOM_工位与名称] ";
sql += cmb_Area.Text!=""? $"Where 区域代码='{cmb_Area.Text}' ":"";
sql += " ORDER BY [工位号]";
SqlOperation.ExecuteSql(sql, out DataTable dt, out string error);
dgv_Station.DataSource = dt;
}
private void dgv_Station_CellClick(object sender, DataGridViewCellEventArgs e)
{
if (e.RowIndex > -1)
{
Curr_Station_AID = dgv_Station.CurrentRow.Cells["ID"].Value.ToString();
Curr_工位代码 = dgv_Station.CurrentRow.Cells["工位代码"].Value.ToString();
Curr_StationName = dgv_Station.CurrentRow.Cells["工位号"].Value.ToString();
Curr_工位名称 = dgv_Station.CurrentRow.Cells["工位名称"].Value.ToString();
Curr_工序号 = dgv_Station.CurrentRow.Cells["工序号"].Value.ToString();
Curr_工序名称 = dgv_Station.CurrentRow.Cells["工序名称"].Value.ToString();
Curr_PLC = dgv_Station.CurrentRow.Cells["PLC"].Value.ToString();
Curr_区域代码 = dgv_Station.CurrentRow.Cells["区域代码"].Value.ToString();
Curr_机床类型 = dgv_Station.CurrentRow.Cells["机床类型"].Value.ToString();
Curr_是否启用MES = dgv_Station.CurrentRow.Cells["是否启用MES"].Value.ToString();
}
}
private void cmb_Area_SelectedIndexChanged(object sender, EventArgs e)
{
StationList_Binding(cmb_Area.SelectedValue.ToString());
}
private void StationList_Binding(string areaname)
{
Refresh_Station();
}
}
}

View File

@@ -0,0 +1,230 @@
<?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="ID.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="工位代码.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="工位号.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="工位名称.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="是否启用MES.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="工序号.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="工序名称.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="PLC.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="区域代码.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="机床类型.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</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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
ADMAAAAgAgIFAAAAAAAAAAA4AAAAUgAAABsAAABwAAAAAgAAAAAAAAAAAAAAAAAAAAAAAABNAAAARQAA
ACUAAABhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAACsAAABeAAAAeAAA
ADMBAQQAAQEEAAEBAwAAAAAAAAAAAAAAADgAAABSAAAAGwAAAHAAAAACAAAAAAAAAAAAAAAAAAAAAAAA
AE0AAABFAAAAJQAAAGEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAjAAAAbQAAAGQAAAAZAAAAAAAAAAAAAAAAAAAAOAAAAFIAAAAbAAAAcAAAAAIAAAAAAAAAAAAA
AAAAAAAAAAAATQAAAEUAAAAlAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAADAAAAPQAAAEYAAAABAAAAAAAAAAAAAAA3AAAAUgAAABsAAABwAAAAAgAA
AAAAAAAAAAAAAAAAAAAAAABNAAAARQAAACQAAABmAAAAAwAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAA
AAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAACAAAABAAAAAQAAAAEAAAAAQAAAD8AAABSAAAAGwAA
AHAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAE0AAABGAAAACgAAAG0AAABuAAAAbAAAAG0AAABtAAAAbQAA
AG0AAABtAAAAbQAAAG0AAABtAAAAbQAAAG0AAABtAAAAbQAAAG0AAABsAAAAbQAAAG0AAABsAAAAeQAA
ACoAAAAcAAAAcQAAAAIAAAAAAAAAAAAAAAAAAAAAAAAARAAAAF8AAAAAAAAABgAAABMAAAATAAAAEwAA
ABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAAABMAAAATAAAAEwAA
ABQAAAAMAAAAAAAAADAAAABrAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARAAAAcQAAAGwAAABgAAAAYAAA
AGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAA
AGAAAABgAAAAYAAAAGAAAABkAAAAegAAACsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJAAAAJAAA
ACkAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAA
ACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAATAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAA///AAf4AAAD+AAAA/gAAAP4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAHAAAABwAAAAcAAAAHAAAABwPAAAcAAAAHAAAABwAA
AAcAAAAHAAAABwAAAAcAAAAH//////////8=
</value>
</data>
</root>

View File

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

953
SCADA/Properties/Resources.Designer.cs generated Normal file
View File

@@ -0,0 +1,953 @@
//------------------------------------------------------------------------------
// <auto-generated>
// 此代码由工具生成。
// 运行时版本:4.0.30319.42000
//
// 对此文件的更改可能会导致不正确的行为,并且如果
// 重新生成代码,这些更改将会丢失。
// </auto-generated>
//------------------------------------------------------------------------------
namespace CentralControl.Properties {
using System;
/// <summary>
/// 一个强类型的资源类,用于查找本地化的字符串等。
/// </summary>
// 此类是由 StronglyTypedResourceBuilder
// 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。
// 若要添加或移除成员,请编辑 .ResX 文件,然后重新运行 ResGen
// (以 /str 作为命令选项),或重新生成 VS 项目。
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.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("CentralControl.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;
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap _002_列表 {
get {
object obj = ResourceManager.GetObject("_002_列表", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap _0780fca3def52d8a02649c7aa2f8093a {
get {
object obj = ResourceManager.GetObject("_0780fca3def52d8a02649c7aa2f8093a", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap action_Cancel_16xLG {
get {
object obj = ResourceManager.GetObject("action_Cancel_16xLG", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找类似于 (图标) 的 System.Drawing.Icon 类型的本地化资源。
/// </summary>
internal static System.Drawing.Icon bitbug_favicon {
get {
object obj = ResourceManager.GetObject("bitbug_favicon", resourceCulture);
return ((System.Drawing.Icon)(obj));
}
}
/// <summary>
/// 查找类似于 (图标) 的 System.Drawing.Icon 类型的本地化资源。
/// </summary>
internal static System.Drawing.Icon BOSS_数据管理 {
get {
object obj = ResourceManager.GetObject("BOSS_数据管理", resourceCulture);
return ((System.Drawing.Icon)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap BOSS_数据管理1 {
get {
object obj = ResourceManager.GetObject("BOSS_数据管理1", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找类似于 (图标) 的 System.Drawing.Icon 类型的本地化资源。
/// </summary>
internal static System.Drawing.Icon excelICON {
get {
object obj = ResourceManager.GetObject("excelICON", resourceCulture);
return ((System.Drawing.Icon)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap HMI {
get {
object obj = ResourceManager.GetObject("HMI", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap JD {
get {
object obj = ResourceManager.GetObject("JD", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找类似于 (图标) 的 System.Drawing.Icon 类型的本地化资源。
/// </summary>
internal static System.Drawing.Icon jk {
get {
object obj = ResourceManager.GetObject("jk", resourceCulture);
return ((System.Drawing.Icon)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap MBE风格多色图标_密码 {
get {
object obj = ResourceManager.GetObject("MBE风格多色图标_密码", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap panlClose {
get {
object obj = ResourceManager.GetObject("panlClose", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap ssbj {
get {
object obj = ResourceManager.GetObject("ssbj", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap staticjd {
get {
object obj = ResourceManager.GetObject("staticjd", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap {
get {
object obj = ResourceManager.GetObject("上传", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap {
get {
object obj = ResourceManager.GetObject("上载", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap {
get {
object obj = ResourceManager.GetObject("下载", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap {
get {
object obj = ResourceManager.GetObject("业务", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap {
get {
object obj = ResourceManager.GetObject("任务监控和查询", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap {
get {
object obj = ResourceManager.GetObject("保存", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap _记录 {
get {
object obj = ResourceManager.GetObject("信息_记录", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap {
get {
object obj = ResourceManager.GetObject("关闭", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap {
get {
object obj = ResourceManager.GetObject("关闭系统", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap {
get {
object obj = ResourceManager.GetObject("写入托盘", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找类似于 (图标) 的 System.Drawing.Icon 类型的本地化资源。
/// </summary>
internal static System.Drawing.Icon {
get {
object obj = ResourceManager.GetObject("分布图", resourceCulture);
return ((System.Drawing.Icon)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap 1 {
get {
object obj = ResourceManager.GetObject("分布图1", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap {
get {
object obj = ResourceManager.GetObject("列表", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap 2 {
get {
object obj = ResourceManager.GetObject("列表2", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap {
get {
object obj = ResourceManager.GetObject("删除", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap {
get {
object obj = ResourceManager.GetObject("刷新", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap {
get {
object obj = ResourceManager.GetObject("动态数据查询", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap {
get {
object obj = ResourceManager.GetObject("合作", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap _柱 {
get {
object obj = ResourceManager.GetObject("图表_柱", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap _线_通用_统计 {
get {
object obj = ResourceManager.GetObject("图表_线_通用_统计", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap _饼 {
get {
object obj = ResourceManager.GetObject("图表_饼", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap {
get {
object obj = ResourceManager.GetObject("增加", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap _复制 {
get {
object obj = ResourceManager.GetObject("备份_复制", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap _盖章 {
get {
object obj = ResourceManager.GetObject("审核_盖章", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap {
get {
object obj = ResourceManager.GetObject("密码", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap {
get {
object obj = ResourceManager.GetObject("导入", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap {
get {
object obj = ResourceManager.GetObject("导出", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap {
get {
object obj = ResourceManager.GetObject("工作台", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap {
get {
object obj = ResourceManager.GetObject("工具", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap {
get {
object obj = ResourceManager.GetObject("布局图", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap {
get {
object obj = ResourceManager.GetObject("帮助", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap _危险 {
get {
object obj = ResourceManager.GetObject("异常_危险", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap {
get {
object obj = ResourceManager.GetObject("手动打印", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap {
get {
object obj = ResourceManager.GetObject("打印机", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap 线 {
get {
object obj = ResourceManager.GetObject("按键分割线", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap 线 {
get {
object obj = ResourceManager.GetObject("按键分割线浅", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap {
get {
object obj = ResourceManager.GetObject("搜索", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap {
get {
object obj = ResourceManager.GetObject("操作管理", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap {
get {
object obj = ResourceManager.GetObject("文档", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap {
get {
object obj = ResourceManager.GetObject("断开", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap {
get {
object obj = ResourceManager.GetObject("断开状态", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap {
get {
object obj = ResourceManager.GetObject("断开连接", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap _添加 {
get {
object obj = ResourceManager.GetObject("新增_添加", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找类似于 (图标) 的 System.Drawing.Icon 类型的本地化资源。
/// </summary>
internal static System.Drawing.Icon {
get {
object obj = ResourceManager.GetObject("日志", resourceCulture);
return ((System.Drawing.Icon)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap 1 {
get {
object obj = ResourceManager.GetObject("日志1", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap {
get {
object obj = ResourceManager.GetObject("更多", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap {
get {
object obj = ResourceManager.GetObject("权限角色管理", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap _成功 {
get {
object obj = ResourceManager.GetObject("正确_成功", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap {
get {
object obj = ResourceManager.GetObject("添加", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap _账号_我的 {
get {
object obj = ResourceManager.GetObject("用户_账号_我的", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap _账号_我的_未登录 {
get {
object obj = ResourceManager.GetObject("用户_账号_我的_未登录", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap 2 {
get {
object obj = ResourceManager.GetObject("登出2", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap {
get {
object obj = ResourceManager.GetObject("登录", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap {
get {
object obj = ResourceManager.GetObject("筛选", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap {
get {
object obj = ResourceManager.GetObject("系统管理", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap {
get {
object obj = ResourceManager.GetObject("系统管理和监控服务", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap _角色 {
get {
object obj = ResourceManager.GetObject("组群_角色", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap _修改 {
get {
object obj = ResourceManager.GetObject("编辑_修改", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap {
get {
object obj = ResourceManager.GetObject("解锁", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap 2 {
get {
object obj = ResourceManager.GetObject("记录2", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap {
get {
object obj = ResourceManager.GetObject("质控管理", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap _协助 {
get {
object obj = ResourceManager.GetObject("辅助_协助", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap 2 {
get {
object obj = ResourceManager.GetObject("返回2", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap _沙漏 {
get {
object obj = ResourceManager.GetObject("进度_沙漏", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap {
get {
object obj = ResourceManager.GetObject("连接", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap {
get {
object obj = ResourceManager.GetObject("连接状态", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap 退 {
get {
object obj = ResourceManager.GetObject("退出", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找类似于 (图标) 的 System.Drawing.Icon 类型的本地化资源。
/// </summary>
internal static System.Drawing.Icon {
get {
object obj = ResourceManager.GetObject("配置", resourceCulture);
return ((System.Drawing.Icon)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap 1 {
get {
object obj = ResourceManager.GetObject("配置1", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找类似于 (图标) 的 System.Drawing.Icon 类型的本地化资源。
/// </summary>
internal static System.Drawing.Icon 2 {
get {
object obj = ResourceManager.GetObject("配置2", resourceCulture);
return ((System.Drawing.Icon)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap 21 {
get {
object obj = ResourceManager.GetObject("配置21", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap {
get {
object obj = ResourceManager.GetObject("重新加载数据", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap {
get {
object obj = ResourceManager.GetObject("锁定", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap _失败 {
get {
object obj = ResourceManager.GetObject("错误_失败", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap {
get {
object obj = ResourceManager.GetObject("零件管理", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
}
}

View File

@@ -0,0 +1,388 @@
<?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.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="返回2" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\icon\返回2.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="HMI" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\icon\HMI.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="列表2" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\icon\列表2.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="信息_记录" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\icon\信息_记录.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="辅助_协助" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\icon\辅助_协助.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="更多" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\icon\更多.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="帮助" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\icon\帮助.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="JD" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\icon\JD.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="配置2" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\icon\配置2.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="BOSS_数据管理1" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\icon\BOSS-数据管理.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="重新加载数据" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\icon\重新加载数据.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="导出" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\icon\导出.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="MBE风格多色图标_密码" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\icon\MBE风格多色图标-密码.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="断开" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\icon\断开.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="excelICON" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\icon\excelICON.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="系统管理" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\icon\系统管理.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="关闭系统" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\icon\关闭系统.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="登录" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\icon\登录.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="刷新" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\icon\刷新.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="导入" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\icon\导入.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="零件管理" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\icon\零件管理.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="连接状态" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\icon\连接状态.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="操作管理" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\icon\操作管理.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="断开连接" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\icon\断开连接.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="按键分割线" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\icon\按键分割线.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="任务监控和查询" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\icon\任务监控和查询.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="分布图1" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\icon\分布图.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="系统管理和监控服务" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\icon\系统管理和监控服务.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="ssbj" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\icon\ssbj.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="解锁" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\icon\解锁.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="配置1" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\icon\配置.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="_002_列表" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\icon\002_列表.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="panlClose" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\icon\panlClose.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="文档" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\icon\文档.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="正确_成功" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\icon\正确_成功.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="按键分割线浅" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\icon\按键分割线浅.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="异常_危险" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\icon\异常_危险.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="bitbug_favicon" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\icon\bitbug_favicon.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="连接" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\icon\连接.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="图表_线_通用_统计" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\icon\图表_线_通用_统计.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="下载" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\icon\下载.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="搜索" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\icon\搜索.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="上传" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\icon\上传.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="图表_柱" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\icon\图表_柱.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="用户_账号_我的_未登录" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\icon\用户_账号_我的_未登录.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="工作台" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\icon\工作台.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="新增_添加" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\icon\新增_添加.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="分布图" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\icon\分布图.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="动态数据查询" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\icon\动态数据查询.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="筛选" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\icon\筛选.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="图表_饼" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\icon\图表_饼.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="action_Cancel_16xLG" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\icon\action_Cancel_16xLG.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="权限角色管理" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\icon\权限角色管理.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="_0780fca3def52d8a02649c7aa2f8093a" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\icon\0780fca3def52d8a02649c7aa2f8093a.gif;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="编辑_修改" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\icon\编辑_修改.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="关闭" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\icon\关闭.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="手动打印" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\icon\手动打印.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="上载" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\icon\上载.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="BOSS_数据管理" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\icon\BOSS-数据管理.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="保存" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\icon\保存.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="列表" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\icon\列表.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="合作" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\icon\合作.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="断开状态" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\icon\断开状态.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="配置21" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\icon\配置2.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="日志" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\icon\日志.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="错误_失败" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\icon\错误_失败.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="用户_账号_我的" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\icon\用户_账号_我的.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="业务" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\icon\业务.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="工具" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\icon\工具.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="jk" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\icon\jk.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="进度_沙漏" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\icon\进度_沙漏.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="记录2" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\icon\记录2.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="质控管理" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\icon\质控管理.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="登出2" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\icon\登出2.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="删除" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\icon\删除.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="添加" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\icon\添加.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="备份_复制" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\icon\备份_复制.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="写入托盘" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\icon\写入托盘.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="配置" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\icon\配置.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="日志1" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\icon\日志.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="密码" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\icon\密码.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="锁定" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\icon\锁定.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="staticjd" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\icon\staticjd.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="组群_角色" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\icon\组群_角色.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="增加" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\icon\增加.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="打印机" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\icon\打印机.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="审核_盖章" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\icon\审核_盖章.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="退出" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\icon\退出.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="布局图" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\icon\布局图.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
</root>

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

@@ -0,0 +1,26 @@
//------------------------------------------------------------------------------
// <auto-generated>
// 此代码由工具生成。
// 运行时版本:4.0.30319.42000
//
// 对此文件的更改可能会导致不正确的行为,并且如果
// 重新生成代码,这些更改将会丢失。
// </auto-generated>
//------------------------------------------------------------------------------
namespace CentralControl.Properties {
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.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>

View File

@@ -0,0 +1,492 @@
using DC_A95.MES_A95;
using NPOI.OpenXmlFormats.Dml;
using NPOI.SS.Formula.Eval;
using NPOI.SS.Formula.Functions;
using NPOI.Util;
using Opc.Ua;
using OpcBasic;
using Rhino.DocObjects;
using Rhino.Geometry;
using SlMesDbIterface;
using System;
using System.Collections;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Reflection.Emit;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
using SystemFramework;
/// <summary>
///
/// </summary>
namespace MesWork
{
/// <summary>
/// 操作数据库
/// </summary>
public class ExecuteDB
{
/// <summary>
/// 报警开始
/// </summary>
/// <param name="opName"></param>
/// <param name="alarming"></param>
public static void Alarm_Start(string opName,int[] alarming)
{
var ChangeTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
var name = "Event_Alarm_Start";
for (int i = 0; i < alarming.Length ; i++)
{
var alarmCode = alarming[i];
var sqlParameters = new SqlParameter[] {
new SqlParameter("@StationName", opName),
new SqlParameter("@AlarmCode", alarmCode),
new SqlParameter("@ChangeTime", ChangeTime)
};
SqlOperation.ExecuteStoredProcedure(name, sqlParameters, out DataSet ds, out string error);
}
}
/// <summary>
/// 报警结束
/// </summary>
/// <param name="opName"></param>
public static void Alarm_End(string opName)
{
var ChangeTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
var name = "Event_Alarm_End";
var sqlParameters = new SqlParameter[] {
new SqlParameter("@StationName", opName),
new SqlParameter("@ChangeTime", ChangeTime)
};
SqlOperation.ExecuteStoredProcedure(name, sqlParameters, out DataSet ds, out string error);
}
/// <summary>
/// 安东开始
/// </summary>
/// <param name="opCode"></param>
/// <param name="alarmCode">变量类型代码</param>
public static void Alarm_Andon_Start(string opCode, int alarmCode)
{
var ChangeTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
var name = "Event_Alarm_Andon_Start";
var sqlParameters = new SqlParameter[] {
new SqlParameter("@StationName", opCode),
new SqlParameter("@AlarmCode", alarmCode),
new SqlParameter("@ChangeTime", ChangeTime)
};
SqlOperation.ExecuteStoredProcedure(name, sqlParameters, out DataSet ds, out string error);
}
/// <summary>
/// 安东结束
/// </summary>
/// <param name="opCode"></param>
/// <param name="alarmCode"></param>
public static void Alarm_Andon_End(string opCode, int alarmCode)
{
var ChangeTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
var name = "Event_Alarm_Andon_End";
var sqlParameters = new SqlParameter[] {
new SqlParameter("@StationName", opCode),
new SqlParameter("@AlarmCode", alarmCode),
new SqlParameter("@ChangeTime", ChangeTime)
};
SqlOperation.ExecuteStoredProcedure(name, sqlParameters, out DataSet ds, out string error);
}
/// <summary>
/// 安东确认
/// </summary>
/// <param name="opName"></param>
/// <param name="alarmCode"></param>
public static void Alarm_Andon_Sure(string opName, int alarmCode)
{
var ChangeTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
var name = "Event_Alarm_Andon_Sure";
var sqlParameters = new SqlParameter[] {
new SqlParameter("@StationName", opName),
new SqlParameter("@AlarmCode", alarmCode),
new SqlParameter("@ChangeTime", ChangeTime)
};
SqlOperation.ExecuteStoredProcedure(name, sqlParameters, out DataSet ds, out string error);
}
public static DataTable Get_TaskTypeInfo()
{
var sql = $" SELECT [任务类型],[任务类型名称],[质量数据数量]" +
$" ,[数据名称1],[数据单位1],[数据名称2],[数据单位2],[数据名称3],[数据单位3],[数据名称4],[数据单位4]" +
$" FROM [配方_大柴_任务类型]";
SqlOperation.ExecuteSql(sql, out DataTable dt, out string err);
return dt;
}
public static void Save_StationPass_Info(string engineNo, string engineTypeNo, int palletNo, string orderNum, int orderNo,int orderSum,string processCode, string processName,
string opCode, string opName, int passAttr, string opter, int QualityOk,int PassStatus, int upOrDown, int optFlag,string sortNo_PLC)
{
var weight = -1;
var P_name = "Event_MOM_过点数据";
var ChangeTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
SqlParameter[] Parameters ={
new SqlParameter("@发动机流水号",engineNo),
new SqlParameter("@机型号",engineTypeNo),
new SqlParameter("@托盘号",palletNo),
new SqlParameter("@订单号",orderNum),
new SqlParameter("@订单序号",orderNo),
new SqlParameter("@订单数量",orderSum),
new SqlParameter("@工序编码",processCode),
new SqlParameter("@工序名称", processName),
new SqlParameter("@工位编码",opCode),
new SqlParameter("@工位名称",opName),
new SqlParameter("@过点属性",passAttr),
new SqlParameter("@采集时间",ChangeTime),
new SqlParameter("@操作者",opter),
new SqlParameter("@合格标志",QualityOk),
new SqlParameter("@过站状态",PassStatus),
new SqlParameter("@岔道上下件",upOrDown),
new SqlParameter("@重量",weight),
new SqlParameter("@操作标记",optFlag),
new SqlParameter("@机型标志",sortNo_PLC)
};
SqlOperation.ExecuteStoredProcedure(P_name, Parameters, out string err);
if (err.Length > 0)
{
LogRecord.LogRecord.Insert_Log(Type_Log.Alarm, "", $"Save_StationPass_Info 报错!,,{err}");
}
}
/// <summary>
/// 增加:测量数据索引
/// </summary>
/// <param name="tagTypeCodeID"></param>
/// <param name="engineTypeNo"></param>
/// <param name="engineNo"></param>
/// <param name="opCode"></param>
/// <param name="orderNum"></param>
/// <param name="palletNo"></param>
/// <param name="QCDataCount"></param>
/// <param name="Operator"></param>
/// <param name="QuaulityFlag"></param>
/// <param name="Id_tagCF"></param>
public static void Save_MeasureData_Index(int tagTypeCodeID, string engineTypeNo, string engineNo,string opCode,string orderNum, int palletNo,int QCDataCount, string Operator, int QuaulityFlag, out int Id_tagCF)
{
var P_name = "测量数据合格索引_增加";
Id_tagCF = 0;
SqlParameter[] thisParms = new SqlParameter[10];
thisParms[0] = new SqlParameter("@TagID_CF", tagTypeCodeID);
thisParms[1] = new SqlParameter("@EngineType", engineTypeNo);
thisParms[2] = new SqlParameter("@EngineID", engineNo);
thisParms[3] = new SqlParameter("@工位号", opCode);
thisParms[4] = new SqlParameter("@订单号", orderNum);
thisParms[5] = new SqlParameter("@托盘编号", palletNo);
thisParms[6] = new SqlParameter("@质量数据数量", QCDataCount);
thisParms[7] = new SqlParameter("@操作者工号", Operator);
thisParms[8] = new SqlParameter("@合格标志", QuaulityFlag);
thisParms[9] = new SqlParameter("@Id_tagCF", Id_tagCF);
thisParms[9].Direction = ParameterDirection.Output;
if(SqlOperation.ExecuteStoredProcedure(P_name, thisParms, out string err))
{
Id_tagCF=Convert.ToInt32(thisParms[9].Value.ToString());
}
else
{
Id_tagCF = -1;
}
}
/// <summary>
/// 即时参数存储
/// </summary>
/// <param name="opName"></param>
/// <param name="tagTypeCodeID"></param>
/// <param name="value"></param>
/// <param name="tagID"></param>
public static void Update_ImmediateParam(string opName, int tagTypeCodeID, string value, string tagID)
{
var ChangeTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
var name = "Event_MES_工位_即时参数_变化";
var sqlParameters = new SqlParameter[] {
new SqlParameter("@工位号", opName),
new SqlParameter("@变量类型代码",tagTypeCodeID ),
new SqlParameter("@值",value),
new SqlParameter("@更新时间", ChangeTime),
new SqlParameter("@TagID", tagID),
new SqlParameter("@开始时间", ChangeTime),
new SqlParameter("@结束时间", ChangeTime),
new SqlParameter("@持续时间", 0)
};
SqlOperation.ExecuteStoredProcedure(name, sqlParameters, out DataSet ds, out string error);
}
/// <summary>
/// 设备状态变化
/// </summary>
/// <param name="opName"></param>
/// <param name="tagTypeCodeID"></param>
/// <param name="value"></param>
/// <param name="tagID"></param>
/// <param name="deviceMode"></param>
public static void Event_StationStatus_Changed(string opName, string manual, string running, string alarm, string onLine = "1")
{
var ChangeTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
var name = "Event_StationStatus_Changed";
var sqlParameters = new SqlParameter[] {
new SqlParameter("@工位号", opName),
new SqlParameter("@手动模式", manual),
new SqlParameter("@运行中",running ),
new SqlParameter("@报警",alarm),
new SqlParameter("@在线",onLine),
new SqlParameter("@更新时间", ChangeTime)
};
SqlOperation.ExecuteStoredProcedure(name, sqlParameters, out DataSet ds, out string error);
}
/// <summary>
/// 保存布局
/// </summary>
/// <param name="stationName"></param>
/// <param name="px"></param>
/// <param name="py"></param>
public static void SaveLyout_P(string stationName, int px, int py)
{
var sql =
$" UPDATE [MES_计划BOM_工位与名称] SET [PX] = {px},[PY] = {py}" +
$" WHERE [工位号] = '{stationName}'";
SqlOperation.ExecuteSql(sql, out string error);
}
/// <summary>
/// 保存布局
/// </summary>
/// <param name="stationName"></param>
/// <param name="pxt"></param>
/// <param name="pyt"></param>
public static void SaveLyout_PT(string stationName, int pxt, int pyt)
{
var sql =
$" UPDATE [MES_计划BOM_工位与名称] SET [PX_T] = {pxt},[PY_T] = {pyt}" +
$" WHERE [工位号] = '{stationName}'";
SqlOperation.ExecuteSql(sql, out string error);
}
/// <summary>
/// 查询工位信息
/// </summary>
/// <param name="dt"></param>
public static void Select_Station(out DataTable dt)
{
var sql =
$" SELECT [工位号],[工位名称],[PLC],[PLC代码]," +
$"ISNULL([PX],0) AS PX,ISNULL([PY],0) AS PY,ISNULL([PX_T],0) AS PX_T,ISNULL([PY_T],0) AS PY_T,[控件启用]" +
$" ,[区域代码]" +
$" FROM [MES_计划BOM_工位与名称] WHERE [是否启用MES] = 1" + // AND [ProgramPartial] = {MesWorkForm.ProgramPartial}
$" ORDER BY [工位号]";
SqlOperation.ExecuteSql(sql, out dt, out string error);
}
/// <summary>
/// 检查上线的发动机流水号是否重复
/// </summary>
/// <param name="dt"></param>
public static void Check_Repeat_LineSet(string opcode, string engineNo, out bool ifrepeat)
{
ifrepeat = false;
var sql = $" SELECT count(AID) FROM [大柴_过点信息] where 工位编码='{opcode}' and 发动机流水号='{engineNo}'";
SqlOperation.ExecuteSql(sql, out DataTable dt, out string error);
if (int.Parse(dt.Rows[0][0].ToString()) > 0) ifrepeat = true;
}
public static void Save_ScanRecord_outLineSet(string opCode, string engineNo, string ActualNumber,string Decode_Result)
{
//保存扫码记录
string sql = $@"INSERT INTO[MES_装配数据_零部件扫码记录]([工位号],[发动机流水号],[ActualNumber],[Decode_Result],[MaterialCode], Scanner_No,[操作时间])
VALUES('{opCode}', {engineNo}, '{ActualNumber}', '{Decode_Result}', '{engineNo}', 1, getdate())";
SqlOperation.ExecuteSql(sql,out string error);
}
public static void Get_EngineInfo_OutSide(int AGVCode,out string EngineNo,out int EngineTypeID,out string EngineType,out string OrderNum)
{
//根据agvcode获取发动机信息
string sql = $@"SELECT TOP (1)[发动机流水号],[大机型ID],[机型号],[工单号] FROM [大柴_上线记录_外装线]
where AGV号={AGVCode} and 外装线绑定状态=1 and [发动机流水号]<>'' order by 操作时间 desc";
SqlOperation.ExecuteSql(sql,out DataTable dt,out string error);
if(dt.Rows.Count==1)
{
EngineNo = dt.Rows[0]["发动机流水号"].ToString();
EngineTypeID = int.Parse(dt.Rows[0]["大机型ID"].ToString());
EngineType = dt.Rows[0]["机型号"].ToString();
OrderNum = dt.Rows[0]["工单号"].ToString();
}
else
{
EngineNo = "";
EngineTypeID = 0;
EngineType = "";
OrderNum = "";
}
}
/// <summary>
/// 内装线上线工位:请求下载
/// </summary>
/// <param name="opCode"></param>
/// <param name="partCode"></param>
/// <param name="palletNo"></param>
/// <param name="engineNo"></param>
/// <param name="sortNo"></param>
/// <param name="sortName"></param>
/// <param name="printCode"></param>
/// <param name="orderNo"></param>
public static void Select_OnLine_Plan_Engine(string opCode,string partCode, int palletNo
, out string engineNo
, out int sortNo
, out string sortName
, out string printCode
, out string orderNo
, out int errCode
, out string errMessage
, out int printPosition
)
{
engineNo = "";
sortNo = 0;
sortName = "";
printCode = "";
orderNo = "";
errCode = 0;
errMessage = "";
printPosition = 0;
var name = "Event_Query_上线发动机数据";
var sqlParameters = new SqlParameter[] {
new SqlParameter("@StationName", opCode),
new SqlParameter("@PartCode",partCode ),
new SqlParameter("@PalletNo",palletNo )
};
SqlOperation.ExecuteStoredProcedure(name, sqlParameters, out DataTable dt, out string error);
if (dt.Rows.Count > 0)
{
engineNo = dt.Rows[0]["发动机编号"].ToString();
sortNo = int.Parse(dt.Rows[0]["机型ID"].ToString());
sortName = dt.Rows[0]["机型号"].ToString();
printCode = dt.Rows[0]["缸体打印码"].ToString();
orderNo = dt.Rows[0]["工单号"].ToString();
errCode = Convert.ToInt32(dt.Rows[0]["Code"]);
errMessage = dt.Rows[0]["Message"].ToString();
printPosition = Convert.ToInt32(dt.Rows[0]["PrintPosition"]);
}
}
/// <summary>
/// 执行计划成功上线的发动机更新执行计划为2
/// </summary>
/// <param name="opCode"></param>
/// <param name="engineNo"></param>
public static void Update_ExcutePlan_LineSetOK(string opCode,string engineNo)
{
var name = "Event_执行计划_验证完成";
var sqlParameters = new SqlParameter[] {
new SqlParameter("@StationName", opCode),
new SqlParameter("@EngineNo", engineNo)
};
SqlOperation.ExecuteStoredProcedure(name, sqlParameters,out DataTable dt,out string err);
if (err.Length > 0)
{
LogRecord.LogRecord.Insert_Log(Type_Log.Alarm, "", $"Update_ExcutePlan_LineSetOK 报错!,,{err}");
}
}
public static void Event_OutSide_OnLine(string opCode, string engineNo, int engineTypeID, int orderNo, string engineTypeCode, int agvCode)
{
var name = "Event_OutSide_OnLine";
var sqlParameters = new SqlParameter[] {
new SqlParameter("@StationName", opCode),
new SqlParameter("@EngineNo", engineNo),
new SqlParameter("@EngineTypeNo",engineTypeID),
new SqlParameter("@OrderNo",orderNo ),
new SqlParameter("@EngineTypeCode",engineTypeCode),
new SqlParameter("@AgvCode",agvCode),
};
SqlOperation.ExecuteStoredProcedure(name, sqlParameters, out string error);
}
public static bool Event_QueryRecipes_ColdTest(string opCode, string sortNo, out DataTable dt)
{
var name = "Event_QueryRecipes_ColdTest";
var sqlParameters = new SqlParameter[] {
new SqlParameter("@StationName", opCode),
new SqlParameter("@SortNo",sortNo),
};
return SqlOperation.ExecuteStoredProcedure(name, sqlParameters, out dt, out string error);
}
}
}

208
SCADA/WebAPI/AnalysisMsg.cs Normal file
View File

@@ -0,0 +1,208 @@
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using SlMesDbIterface;
using System.Net.Mail;
using PLMTEST;
using System.Collections;
using System.Drawing.Imaging;
using DataLinkMesWork;
using MesWork;
namespace WebApi
{
public class msgResHeader
{
/// <summary>
/// 任务ID
/// </summary>
public string taskId
{
get;
set;
}
/// <summary>
/// 返回结果
/// </summary>
public string code
{
get;
set;
}
/// <summary>
/// 返回消息
/// </summary>
public string msg
{
get;
set;
}
/// <summary>
/// 返回消息2
/// </summary>
public string message
{
get;
set;
}
/// <summary>
/// 返回结果集
/// </summary>
public string returnData
{
get;
set;
}
}
public class syncOrderReq
{
/// <summary>
/// 指令类型
/// </summary>
public string type
{
get;
set;
}
/// <summary>
/// 工位号
/// </summary>
public string opName
{
get;
set;
}
/// <summary>
/// 数值
/// </summary>
public string value
{
get;
set;
}
}
public class AnalysisMsg
{
/// <summary>
/// UUID生成
/// </summary>
/// <returns></returns>
public static string UuidUtil()
{
string result = Guid.NewGuid().ToString();
return result;
}
/// <summary>
/// 重新判断是否申请上线
/// </summary>
/// <param name="url"></param>
/// <param name="str"></param>
/// <returns></returns>
public static string MisFunction(string url, string str)
{
var result = new msgResHeader();
result.taskId = UuidUtil();
result.code = "0";
result.msg = "";
result.returnData = "";
string errorMessage = "";
try
{
/*
15 系统健康
5 传递机型AMS
66 允许PLC工作AMS
34 发动机上线报警标志
20 AMS保存完数据AMS
112 发动机上线报警代码
73 机型标志AMS
74 变速箱总成编号AMS
75 产品型号AMS
116 缸体打印码
117 订单号
14 系统健康(PLC)
2 工件到位(PLC)
43 申请零件编号(PLC)
44 传递机型(PLC)
63 禁用MES(PLC)
9 机型标志PLC
10 变速箱总成编号PLC
11 产品型号PLC
80 托盘编号PLC
22 0空托盘1合格件2不合格件(PLC)
19 质量数据可以读数据PLC
21 质量数据工位合格标志(PLC)
23 0正常件1返修件(PLC)
39 缸体打印码(PLC)
40 订单号(PLC)
120 上线缸体码(PLC)
*/
// 解析订单内容,存储数据库,根据实际业务来写
syncOrderReq BaseData = JsonHelper.JsonDeserialize<syncOrderReq>(str);
string OpName = BaseData.opName;
switch (BaseData.type)
{
case "1": // 重新申请上线
// 判断是否有工件到位与申请上线 与 没有MES传递机型
int workStart = Convert.ToInt32(MesWorkForm.ReadPLC(2, OpName));
int partLoad = Convert.ToInt32(MesWorkForm.ReadPLC(43, OpName));
int MESEngineType = Convert.ToInt32(MesWorkForm.ReadPLC(5, OpName));
if (workStart == 1 && partLoad == 1 && MESEngineType == 0)
{
// 符合条件写入 e 重新调用 申请上线
OpcData.CustomeEvetnArgs e = new OpcData.CustomeEvetnArgs();
//MesWorkForm.UseMisFuntion(e);
e.TagID = 111;
e.OpName = OpName;
e.TagTypeID = 11;
e.IsFirstValue = "0";
e.TagTypeCodeID = 43;
e.TagValue = "1";
MesWorkForm mewForm = new MesWorkForm();
mewForm.UseMisFuntion(e);
result.message = "写入数据成功";
result.code = "200";
result.returnData = "";
}
else
{
result.message = "当前不满足触发条件 workStart" + workStart + " partLoad" + partLoad + " MESEngineType" + MESEngineType;
result.code = "201";
result.returnData = "";
}
break;
default:
break;
}
if (errorMessage != "")
{
result.message = errorMessage;
result.code = "501";
result.returnData = "ERROR";
}
}
catch (Exception err)
{
result.message = "501";
result.msg = err.Message;
result.returnData = "ERROR";
}
return JsonConvert.SerializeObject(result);
}
}
}

View File

@@ -0,0 +1,39 @@
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using MesWork;
namespace CentralControl
{
internal class CALL_Interfalce_WebAPI
{
public static ResponseBody_WebAPI_Boms Get_BOMs_ByWebAPI(string lineid, string productcode)
{
var m_msgRequest = new RequestBody_WebAPI_Boms
{
lineId = lineid,
productCode = productcode
};
return RequestPost_Boms_AMS_To_SAP(m_msgRequest);
}
public static ResponseBody_WebAPI_Boms RequestPost_Boms_AMS_To_SAP(RequestBody_WebAPI_Boms m_msg)
{
var demoData = JsonConvert.SerializeObject(m_msg);
return JsonConvert.DeserializeObject<ResponseBody_WebAPI_Boms>(HttpCli.Post(MesWorkForm.WebAPI_Url_Boms, demoData));
//var Gen_ProductPlan = File.ReadAllText("C:\\项目\\AMS计划下达.json");
//return JsonConvert.DeserializeObject<ResponseBody_WebAPI_Boms>(Gen_ProductPlan);
}
public static ResponseBody_WebAPI_Boms RequestPost_UploadMeasureData_To_SAP(string demoData)
{
return JsonConvert.DeserializeObject<ResponseBody_WebAPI_Boms>(HttpCli.Post(MesWorkForm.WebAPI_Url_Quality, demoData));
}
}
}

350
SCADA/WebAPI/HttpCli.cs Normal file
View File

@@ -0,0 +1,350 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;
namespace CentralControl
{
public class HttpCli
{
/// <summary>
/// 指定Url地址使用Get 方式获取全部字符串
/// </summary>
/// <param name="url">请求链接地址</param>
/// <returns></returns>
public static string Get(string url)
{
string result = "";
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
Stream stream = resp.GetResponseStream();
try
{
//获取内容
using (StreamReader reader = new StreamReader(stream))
{
result = reader.ReadToEnd();
}
}
finally
{
stream.Close();
}
return result;
}
public static void GetFile(string url,string path)
{
WebRequest request = WebRequest.Create(url);
WebResponse response = request.GetResponse();
if (response.ContentType.ToLower().Length > 0)
{
using (Stream reader = response.GetResponseStream())
{
using (FileStream writer = new FileStream(path, FileMode.OpenOrCreate, FileAccess.Write))
{
byte[] buffer = new byte[1024];
int c = 0;
while ((c = reader.Read(buffer, 0, buffer.Length)) > 0)
{
writer.Write(buffer, 0, c);
}
}
}
//HttpContext
}
}
public static byte[] GetFile_Bytes(string url)
{
byte[] bytesAll = null;
WebRequest request = WebRequest.Create(url);
WebResponse response = request.GetResponse();
if (response.ContentType.ToLower().Length > 0)
{
using (Stream reader = response.GetResponseStream())
{
MemoryStream ms = new MemoryStream();
byte[] buffer = new byte[1024];
while (true)
{
int sz = reader.Read(buffer, 0, 1024);
if (sz == 0) break;
ms.Write(buffer, 0, sz);
}
bytesAll = ms.ToArray();
}
}
//如是图片
//System.Drawing.Image img = System.Drawing.Image.FromStream(ms);
return bytesAll;
}
public void FGHJ()
{
// Create a 'WebRequest' object with the specified url.
WebRequest myWebRequest = WebRequest.Create("http://www.contoso.com");
// Send the 'WebRequest' and wait for response.
WebResponse myWebResponse = myWebRequest.GetResponse();
// Obtain a 'Stream' object associated with the response object.
Stream ReceiveStream = myWebResponse.GetResponseStream();
Encoding encode = System.Text.Encoding.GetEncoding("utf-8");
// Pipe the stream to a higher level stream reader with the required encoding format.
StreamReader readStream = new StreamReader(ReceiveStream, encode);
Console.WriteLine("\nResponse stream received");
Char[] read = new Char[256];
// Read 256 charcters at a time.
int count = readStream.Read(read, 0, 256);
Console.WriteLine("HTML...\r\n");
while (count > 0)
{
// Dump the 256 characters on a string and display the string onto the console.
String str = new String(read, 0, count);
Console.Write(str);
count = readStream.Read(read, 0, 256);
}
Console.WriteLine("");
// Release the resources of stream object.
readStream.Close();
// Release the resources of response object.
myWebResponse.Close();
}
/// <summary>
/// 发送Get请求
/// </summary>
/// <param name="url">地址</param>
/// <param name="dic">请求参数定义</param>
/// <returns></returns>
public static string Get(string url, Dictionary<string, string> dic)
{
string result = "";
StringBuilder builder = new StringBuilder();
builder.Append(url);
if (dic.Count > 0)
{
builder.Append("?");
int i = 0;
foreach (var item in dic)
{
if (i > 0)
builder.Append("&");
builder.AppendFormat("{0}={1}", item.Key, item.Value);
i++;
}
}
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(builder.ToString());
//添加参数
HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
Stream stream = resp.GetResponseStream();
try
{
//获取内容
using (StreamReader reader = new StreamReader(stream))
{
result = reader.ReadToEnd();
}
}
finally
{
stream.Close();
}
return result;
}
/// <summary>
/// 指定Post地址使用Get 方式获取全部字符串
/// </summary>
/// <param name="url">请求后台地址</param>
/// <returns></returns>
public static string Post(string url)
{
string result = "";
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
req.Method = "POST";
HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
Stream stream = resp.GetResponseStream();
//获取内容
using (StreamReader reader = new StreamReader(stream, Encoding.UTF8))
{
result = reader.ReadToEnd();
}
return result;
}
/// <summary>
/// 指定Post地址使用Get 方式获取全部字符串
/// </summary>
/// <param name="url">请求后台地址</param>
/// <returns></returns>
public static string Post(string url, Dictionary<string, string> dic)
{
string result = "";
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
req.Method = "POST";
req.ContentType = "application/x-www-form-urlencoded";
#region Post
StringBuilder builder = new StringBuilder();
int i = 0;
foreach (var item in dic)
{
if (i > 0)
builder.Append("&");
builder.AppendFormat("{0}={1}", item.Key, item.Value);
i++;
}
byte[] data = Encoding.UTF8.GetBytes(builder.ToString());
req.ContentLength = data.Length;
using (Stream reqStream = req.GetRequestStream())
{
reqStream.Write(data, 0, data.Length);
reqStream.Close();
}
#endregion
HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
Stream stream = resp.GetResponseStream();
//获取响应内容
using (StreamReader reader = new StreamReader(stream, Encoding.UTF8))
{
result = reader.ReadToEnd();
}
return result;
}
/// <summary>
/// 指定Post地址使用Get 方式获取全部字符串
/// </summary>
/// <param name="url">请求后台地址</param>
/// <param name="content">Post提交数据内容(utf-8编码的)</param>
/// <returns></returns>
public static string Post(string url, string content)
{
string result = "";
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
req.Headers.Add("token", "factory2"); //如果接口需要鉴权, 把"token"换成自己需要的
req.Method = "POST";
req.ContentType = "application/json";
#region Post
byte[] data = Encoding.UTF8.GetBytes(content);
req.ContentLength = data.Length;
using (Stream reqStream = req.GetRequestStream())
{
reqStream.Write(data, 0, data.Length);
reqStream.Close();
}
#endregion
HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
Stream stream = resp.GetResponseStream();
//获取响应内容
using (StreamReader reader = new StreamReader(stream, Encoding.UTF8))
{
result = reader.ReadToEnd();
}
return result;
}
/// <summary>
/// Http下载文件
/// </summary>
/// <param name="uri">下载地址</param>
/// <param name="filefullpath">存放完整路径(含文件名)</param>
/// <param name="size">每次多的大小</param>
/// <returns>下载操作是否成功</returns>
public static bool DownLoadFiles(string uri, string filefullpath, int size = 1000000)
{
try
{
if (File.Exists(filefullpath))
{
try
{
File.Delete(filefullpath);
}
catch (Exception ex)
{
return false;
}
}
string fileDirectory = System.IO.Path.GetDirectoryName(filefullpath);
if (!Directory.Exists(fileDirectory))
{
Directory.CreateDirectory(fileDirectory);
}
FileStream fs = new FileStream(filefullpath, FileMode.Create);
byte[] buffer = new byte[size];
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(uri);
request.Timeout = 100000;
request.AddRange((int)fs.Length);
Stream ns = request.GetResponse().GetResponseStream();
long contentLength = request.GetResponse().ContentLength;
int length = ns.Read(buffer, 0, buffer.Length);
while (length > 0)
{
fs.Write(buffer,0 , length);
buffer = new byte[size];
length = ns.Read(buffer, 0, buffer.Length);
}
fs.Close();
return true;
}
catch (Exception ex)
{
return false;
}
}
}
}

View File

@@ -0,0 +1,52 @@
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Net.Http;
using System.Text;
using System.Web;
using System.Web.Http;
using System.Collections.Concurrent;
using Newtonsoft.Json.Linq;
using System.Threading;
using SlMesDbIterface;
using PLMTEST;
using System.Net;
using System.Net.Http.Headers;
using System.IO;
using ExternalDataSync;
/////http://127.0.0.1:9981/api/IOrder/InsertOrder
/// <summary>
///
/// </summary>
namespace WebApi
{
/// <summary>
///
/// </summary>
[RoutePrefix("api/IOrder")]
public class IOrderController : ApiController
{
readonly string headUrl = "IOrder/";
/// <summary>
/// 生产工单下发
/// </summary>
/// <param name="jobj"></param>
/// <returns></returns>
[HttpPost]
public HttpResponseMessage MisFunction([FromBody] JObject jobj)
{
return new HttpResponseMessage
{
Content = new StringContent(AnalysisMsg.MisFunction(headUrl + System.Reflection.MethodBase.GetCurrentMethod().Name, jobj.ToString()), Encoding.GetEncoding("UTF-8"), "application/json")
};
}
}
}

151
SCADA/WebAPI/InitServer.cs Normal file
View File

@@ -0,0 +1,151 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Net;
using System.Net.Http;
using System.Net.Http.Formatting;
using System.Net.Http.Headers;
using System.Text;
using System.Web.Http;
using System.Web.Http.Cors;
using System.Web.Http.SelfHost;
namespace WebApi
{
/// <summary>
///
/// </summary>
public class InitServer
{
/// <summary>
///
/// </summary>
HttpSelfHostConfiguration config = null;
/// <summary>
///
/// </summary>
HttpSelfHostServer server = null;
/// <summary>
///
/// </summary>
/// <param name="port"></param>
public InitServer(int port)
{
config = new HttpSelfHostConfiguration($"http://0.0.0.0:{port}");
config.EnableCors(new EnableCorsAttribute("*", "*", "*"));
config.MapHttpAttributeRoutes();
//config.Routes.MapHttpRoute(
// name: "DefaultApi",
// routeTemplate: "api/{controller}/{id}",
// defaults: new { id = RouteParameter.Optional }
//);
// 自定义路由匹配到action
config.Routes.MapHttpRoute(
name: "API Default",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
server = new HttpSelfHostServer(config);
server.OpenAsync().Wait();
}
/// <summary>
///
/// </summary>
/// <param name="port"></param>
public void Init(int port)
{
}
public void Close()
{
server.CloseAsync();
}
/// <summary>
///
/// </summary>
public class JsonContentNegotiator : IContentNegotiator
{
/// <summary>
///
/// </summary>
private readonly JsonMediaTypeFormatter _jsonFormatter;
/// <summary>
///
/// </summary>
/// <param name="formatter"></param>
public JsonContentNegotiator(JsonMediaTypeFormatter formatter)
{
_jsonFormatter = formatter;
}
/// <summary>
///
/// </summary>
/// <param name="type"></param>
/// <param name="request"></param>
/// <param name="formatters"></param>
/// <returns></returns>
public ContentNegotiationResult Negotiate(Type type, HttpRequestMessage request, IEnumerable<MediaTypeFormatter> formatters)
{
var result = new ContentNegotiationResult(_jsonFormatter, new MediaTypeHeaderValue("application/json"));
return result;
}
public static string Postring1(string url, string token, Dictionary<string, string> dic)
{
string results = "";
//url = "http://172.16.22.15:8000/" + url;
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
req.Method = "POST";
req.ContentType = "application/x-www-form-urlencoded";
req.Headers.Add("Authorization", "Bearer " + token);
StringBuilder builder = new StringBuilder();
int i = 0;
foreach (var item in dic)
{
if (i > 0)
builder.Append("&");
builder.AppendFormat("{0}={1}", item.Key, item.Value);
i++;
}
byte[] data = Encoding.UTF8.GetBytes(builder.ToString());
req.ContentLength = data.Length;
try
{
using (Stream reqStream = req.GetRequestStream())
{
reqStream.Write(data, 0, data.Length);
reqStream.Close();
}
HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
Stream stream = resp.GetResponseStream();
//获取响应内容
using (StreamReader reader = new StreamReader(stream, Encoding.UTF8))
{
results = reader.ReadToEnd();
}
return results;
}
catch (Exception e)
{
Console.WriteLine(e.Message);
return e.Message;
throw;
}
}
}
}
}

111
SCADA/WebAPI/PP.cs Normal file
View File

@@ -0,0 +1,111 @@
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml.Linq;
namespace CentralControl
{
public class RequestBody_WebAPI_Boms
{
public string lineId
{
get;
set;
}
public string productCode
{
get;
set;
}
}
public class ResponseBody_WebAPI_Boms
{
public string code
{
get;
set;
} = "";
public string message
{
get;
set;
} = "";
public List<DataBody_WebAPI_Boms> Data
{
get;
set;
}
}
public class DataBody_WebAPI_Boms
{
/*
(name="bomHeaderId",value="bom头id")
(name ="materialId",value ="物料id")
(name="materialCode".value="物料编码")
(name="materialName" value="物料名称"
(name="quanity",value="量”
(name="keyFlag",value="是否关键件1是0否")
(name ="operationId",value="工位id")
(name=operationCode,value="工位编码")
(name="assginedSupplierId",value="指定供应商id")
(name="assginedSupplierCode".value="指定供应商code")
*/
public string bomHeaderId
{
get;
set;
}
public string materialId
{
get;
set;
}
public string materialCode
{
get;
set;
}
public string materialName
{
get;
set;
}
public string quanity
{
get;
set;
}
public string keyFlag
{
get;
set;
}
public string operationId
{
get;
set;
}
public string operationCode
{
get;
set;
}
public string assginedSupplierId
{
get;
set;
}
public string assginedSupplierCode
{
get;
set;
}
}
}

79
SCADA/app.manifest Normal file
View File

@@ -0,0 +1,79 @@
<?xml version="1.0" encoding="utf-8"?>
<assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1">
<assemblyIdentity version="1.0.0.0" name="MyApplication.app"/>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
<!-- UAC 清单选项
如果想要更改 Windows 用户帐户控制级别,请使用
以下节点之一替换 requestedExecutionLevel 节点。
<requestedExecutionLevel level="asInvoker" uiAccess="false" />
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
<requestedExecutionLevel level="highestAvailable" uiAccess="false" />
指定 requestedExecutionLevel 元素将禁用文件和注册表虚拟化。
如果你的应用程序需要此虚拟化来实现向后兼容性,则移除此
元素。
-->
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
</requestedPrivileges>
</security>
</trustInfo>
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
<application>
<!-- 设计此应用程序与其一起工作且已针对此应用程序进行测试的
Windows 版本的列表。取消评论适当的元素,
Windows 将自动选择最兼容的环境。 -->
<!-- Windows Vista -->
<!--<supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}" />-->
<!-- Windows 7 -->
<!--<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}" />-->
<!-- Windows 8 -->
<!--<supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}" />-->
<!-- Windows 8.1 -->
<!--<supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}" />-->
<!-- Windows 10 -->
<!--<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}" />-->
</application>
</compatibility>
<!-- 指示该应用程序可感知 DPI 且 Windows 在 DPI 较高时将不会对其进行
自动缩放。Windows Presentation Foundation (WPF)应用程序自动感知 DPI无需
选择加入。选择加入此设置的 Windows 窗体应用程序(面向 .NET Framework 4.6)还应
在其 app.config 中将 "EnableWindowsFormsHighDpiAutoResizing" 设置设置为 "true"。
将应用程序设为感知长路径。请参阅 https://docs.microsoft.com/windows/win32/fileio/maximum-file-path-limitation -->
<!--
<application xmlns="urn:schemas-microsoft-com:asm.v3">
<windowsSettings>
<dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</dpiAware>
<longPathAware xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">true</longPathAware>
</windowsSettings>
</application>
-->
<!-- 启用 Windows 公共控件和对话框的主题(Windows XP 和更高版本) -->
<!--
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="*"
publicKeyToken="6595b64144ccf1df"
language="*"
/>
</dependentAssembly>
</dependency>
-->
</assembly>

View File

@@ -0,0 +1,28 @@
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<appSettings>
<add key="NotHandlerSignal" value="0" />
<add key="IsDemoMesServer" value="1" />
<add key="IsAllowWrite" value="1" />
<add key="BasicDataTableFile" value="WC_CONTROL.xlsx" />
<!--是启用写监控报错日志-->
<add key="IsWriteMonitorLog" value="0" />
<add key="IsWriteLog4" value="1" />
<!--数据库连接-->
<!--<add key="ConnectionString" value="server=.\V2019;database=WC_WP12T_13L;uid=sa;pwd=126.com;Connection Reset=FALSE;Max Pool Size = 1000" />-->
<add key="ConnectionString" value="server=.;database=WC_WP12T_13L;uid=sa;pwd=hl@123;Connection Reset=FALSE;Max Pool Size = 1000" />
<!--上线工位名称-->
<add key="OPCodes_LineSet" value="OP1010" />
</appSettings>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8" />
</startup>
<runtime>
<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.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,35 @@
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
</configSections>
<log4net>
<!--Info日志-->
<appender name="InfoAppender" type="log4net.Appender.RollingFileAppender">
<!--日志文件存放位置,可以为绝对路径也可以为相对路径 -->
<param name="File" value="C:\MWLOG" />
<!--是否支持分割文件-->
<param name="AppendToFile" value="true" />
<param name="MaxFileSize" value="10240" />
<!--当日志文件达到MaxFileSize大小就自动创建备份文件。-->
<param name="MaxSizeRollBackups" value="100" />
<!-- 当将日期作为日志文件的名字时必须将staticLogFileName的值设置为false -->
<param name="StaticLogFileName" value="false" />
<!-- 日志文件的命名规则 -->
<param name="DatePattern" value="\\yyyy_MM\\yyyy_MM_dd'.log'" />
<!--日志文件的记录形式-->
<param name="RollingStyle" value="Date" />
<!--日志文件的布局格式:%newline【%date】【级别%-5level】【线程ID%thread】%n【内容】%message%newline %n%n-->
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="【%date】【线程ID%thread】%message%newline %n%n" />
</layout>
</appender>
<!--Info日志-->
<logger name="LogInfo">
<level value="INFO" />
<appender-ref ref="InfoAppender" />
</logger>
</log4net>
</configuration>

Binary file not shown.

BIN
SCADA/icon/002_列表.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

BIN
SCADA/icon/HMI.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

BIN
SCADA/icon/JD.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.4 KiB

Some files were not shown because too many files have changed in this diff Show More