init: 导入项目到 meswork Gitea

This commit is contained in:
XingCheng3
2026-05-29 10:07:05 +08:00
commit ad9a4106fb
3582 changed files with 460312 additions and 0 deletions

View File

@@ -0,0 +1,108 @@
<?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>{90E76FB4-646D-45E2-95DB-0B8AB4E465D6}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>MesDataFunction</RootNamespace>
<AssemblyName>09MesDataFunction</AssemblyName>
<TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<Deterministic>true</Deterministic>
<TargetFrameworkProfile />
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>..\..\dll\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="MQTTnet">
<HintPath>..\..\dll\MQTTnet.dll</HintPath>
</Reference>
<Reference Include="MQTTnet.Extensions.ManagedClient">
<HintPath>..\..\dll\MQTTnet.Extensions.ManagedClient.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Configuration" />
<Reference Include="System.Core" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Net.Http" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="LoadTagTypeCodeID.cs" />
<Compile Include="MesDataFunction\InitTagValueListData.cs" />
<Compile Include="MesDataFunction\MIS.Functions.Barcode.cs" />
<Compile Include="MesDataFunction\MIS.Functions.ConfirmOkGo.cs" />
<Compile Include="MesDataFunction\MIS.Functions.EngineTypeGetOver_PLC_Work.cs" />
<Compile Include="MesDataFunction\MIS.Functions.FalseGO.cs" />
<Compile Include="MesDataFunction\MIS.Functions.Material_Insert.cs" />
<Compile Include="MesDataFunction\MIS.Functions.MesReadOver.cs" />
<Compile Include="MesDataFunction\MIS.Functions.SendMessage.cs" />
<Compile Include="MesDataFunction\MIS.Functions.WebSubmit.cs" />
<Compile Include="MesDataFunction\MIS.Functions.WorkStart.cs" />
<Compile Include="MesDataFunction\MIS.Hashtable.TagID.cs" />
<Compile Include="MesDataFunction\MIS.Machine.ServicePlan.cs" />
<Compile Include="MesDataFunction\MIS.OpcServerMIS.Read.cs" />
<Compile Include="MesDataFunction\MIS.OpcServerMIS.Write.cs" />
<Compile Include="MesDataFunction\MIS.QualityData.Read.cs" />
<Compile Include="MesDataFunction\MIS.SendMessage.cs" />
<Compile Include="MisDataFunction\Heartbeat.cs" />
<Compile Include="MisDataFunction\MesRead.cs" />
<Compile Include="MisDataFunction\MIS.Interface.cs" />
<Compile Include="MisDataFunction\WorkStart.cs" />
<Compile Include="OpcOperation.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\00-1Json8.3\Json8.3\00-0Json8.3.1.csproj">
<Project>{1a10fdb2-1a6a-44a8-ab4d-33387563247e}</Project>
<Name>00-0Json8.3.1</Name>
</ProjectReference>
<ProjectReference Include="..\..\00MesWorkMqtt\MesWorkMqtt\00MesWorkMqtt.csproj">
<Project>{f55da1a0-a982-4479-8c47-0d9a5aaf3e18}</Project>
<Name>00MesWorkMqtt</Name>
</ProjectReference>
<ProjectReference Include="..\..\01DoWhatPlc\01_01DoWhatPlc.csproj">
<Project>{0d1af432-439a-4920-8692-43ae139f5530}</Project>
<Name>01_01DoWhatPlc</Name>
</ProjectReference>
<ProjectReference Include="..\..\02WebApiCall\02_02WebApiCallPLC.csproj">
<Project>{3e6d1dd5-01c9-435f-9941-61f906ce35bb}</Project>
<Name>02_02WebApiCallPLC</Name>
</ProjectReference>
<ProjectReference Include="..\..\04DataBaseAccess\DataBaseAccess\04-DataBaseAccess.csproj">
<Project>{f434e066-4c59-47c8-aa82-6f48cc84501a}</Project>
<Name>04-DataBaseAccess</Name>
</ProjectReference>
<ProjectReference Include="..\..\07WebBusinessFacade\BusinessFacade\07BusinessFacade.csproj">
<Project>{f0a0c525-03fd-428a-9b17-7f54aa0e4475}</Project>
<Name>07BusinessFacade</Name>
</ProjectReference>
<ProjectReference Include="..\..\08WebFun_base\WebFun_base\08-WebFun_base.csproj">
<Project>{d98be764-adeb-488d-9714-61e308aa8201}</Project>
<Name>08-WebFun_base</Name>
</ProjectReference>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>

View File

@@ -0,0 +1,81 @@
//using BasicData;
//using MesWork;
//using OpcBasic;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace MesDataFunction
{
public class LoadTagTypeCodeID
{
//public static void Load(string path)
//{
// //OpcOperation.hashtable_TagType = new NameValueCollection() ;
// //OpcOperation.hashtable_TagTypeTagName = new NameValueCollection();
// //OpcOperation.hashtable_TagTypeChange = new NameValueCollection();
// //OpcOperation.hashtable_MesTagTypeChange = new NameValueCollection();
// //OpcOperation.hashtable_WebTagTypeChange = new NameValueCollection();
// //OpcOperation.hashtable_TagTypeDataType = new NameValueCollection();
// //var dt = NPOITest.ExeclHelper.ExcelToDataTable(path, "变量类型代码", true);
// //for (int i = 0; i < dt.Rows.Count; i++)
// //{
// // //序号 变量类型 TagTypeDataType TagName 变量类型代码 TagTypeChange MesTagTypeChange WebTagTypeChange 信号点名称 变量类型名称
// // var TagTypeDataType = dt.Rows[i]["TagTypeDataType"].ToString();
// // var TagName = dt.Rows[i]["TagName"].ToString();
// // var 变量类型代码 = dt.Rows[i]["变量类型代码"].ToString();
// // var TagTypeChange = dt.Rows[i]["TagTypeChange"].ToString();
// // var WebTagTypeChange = dt.Rows[i]["WebTagTypeChange"].ToString();
// // var MesTagTypeChange = dt.Rows[i]["MesTagTypeChange"].ToString();
// // OpcOperation.hashtable_TagType.Add(TagName, 变量类型代码);
// // OpcOperation.hashtable_TagTypeTagName.Add(变量类型代码, TagName);
// // OpcOperation.hashtable_TagTypeChange.Add(TagName, TagTypeChange);
// // OpcOperation.hashtable_MesTagTypeChange.Add(TagName, MesTagTypeChange);
// // OpcOperation.hashtable_WebTagTypeChange.Add(TagName, WebTagTypeChange);
// // OpcOperation.hashtable_TagTypeDataType.Add(变量类型代码, TagTypeDataType);
// //}
//}
//public static void Load(DataTable dt)
//{
// //OpcOperation.hashtable_TagType = new NameValueCollection();
// //OpcOperation.hashtable_TagTypeTagName = new NameValueCollection();
// //OpcOperation.hashtable_TagTypeChange = new NameValueCollection();
// //OpcOperation.hashtable_MesTagTypeChange = new NameValueCollection();
// //OpcOperation.hashtable_WebTagTypeChange = new NameValueCollection();
// //OpcOperation.hashtable_TagTypeDataType = new NameValueCollection();
// for (int i = 0; i < dt.Rows.Count; i++)
// {
// //序号 变量类型 TagTypeDataType TagName 变量类型代码 TagTypeChange MesTagTypeChange WebTagTypeChange 信号点名称 变量类型名称
// var TagTypeDataType = dt.Rows[i]["TagTypeDataType"].ToString();
// var TagName = dt.Rows[i]["TagName"].ToString();
// var 变量类型代码 = dt.Rows[i]["变量类型代码"].ToString();
// var TagTypeChange = dt.Rows[i]["TagTypeChange"].ToString();
// var WebTagTypeChange = dt.Rows[i]["WebTagTypeChange"].ToString();
// var MesTagTypeChange = dt.Rows[i]["MesTagTypeChange"].ToString();
// OpcOperation.hashtable_TagType.Add(TagName, 变量类型代码);
// OpcOperation.hashtable_TagTypeTagName.Add(变量类型代码, TagName);
// OpcOperation.hashtable_TagTypeChange.Add(TagName, TagTypeChange);
// OpcOperation.hashtable_MesTagTypeChange.Add(TagName, MesTagTypeChange);
// OpcOperation.hashtable_WebTagTypeChange.Add(TagName, WebTagTypeChange);
// OpcOperation.hashtable_TagTypeDataType.Add(变量类型代码, TagTypeDataType);
// }
//}
}
}

View File

@@ -0,0 +1,84 @@
//using DataLinkMesWork;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
//using SystemFramework;
namespace MesServerWork
{
public class InitTagValueListData
{
public InitTagValueListData()
{
DataTable dt = ReadMesServerData();
InitMesReadTagKey();
initAllItemValue(dt);
}
DataTable ReadMesServerData()
{
return null;// MesWork.PlcLinkForm.dt_BasicData.Select($"是否启用 = 1 and 监控属性代码 = '{1}'").CopyToDataTable<DataRow>();
}
void InitMesReadTagKey()
{
DataTable dt = null;// MesWork.PlcLinkForm.dt_BasicData.Select($"是否启用 = 1 and 变量类型代码=19 and 监控属性代码 = '{1}'").CopyToDataTable<DataRow>(); ;
for (int i = 0; i < dt.Rows.Count; i++)
{
if (MesReadTagKey_Hash.ContainsKey(dt.Rows[i]["工位号"].ToString()))
{
MesReadTagKey_Hash[dt.Rows[i]["工位号"].ToString()] = dt.Rows[i]["TagID"].ToString();
}
else
{
MesReadTagKey_Hash.Add(dt.Rows[i]["工位号"].ToString(), dt.Rows[i]["TagID"].ToString());
}
}
}
void initAllItemValue(DataTable dt)
{
for (int i = 0; i < dt.Rows.Count; i++)
{
if (ItemValue_Hash.ContainsKey(dt.Rows[i]["TagID"]))
{
if (Convert.ToInt32(dt.Rows[i]["列位置"]) != 0)
{
ItemValue_Hash[dt.Rows[i]["TagID"]] = dt.Rows[i]["测量项目"].ToString() + "(" + dt.Rows[i]["列位置"].ToString() + ")";
}
else
{
ItemValue_Hash[dt.Rows[i]["TagID"]] = dt.Rows[i]["测量项目"].ToString();
}
}
else
{
if (Convert.ToInt32(dt.Rows[i]["列位置"]) != 0)
{
ItemValue_Hash[dt.Rows[i]["TagID"]] = dt.Rows[i]["测量项目"].ToString() + "(" + dt.Rows[i]["列位置"].ToString() + ")";
}
else
{
ItemValue_Hash[dt.Rows[i]["TagID"]] = dt.Rows[i]["测量项目"].ToString();
}
}
}
}
public static Hashtable MesReadTagKey_Hash = new Hashtable();
public static Hashtable ItemValue_Hash = new Hashtable();
}
}

View File

@@ -0,0 +1,95 @@
using System;
using System.Data;
using System.Collections;
using System.Windows.Forms;
//using bizFacade;
using System.Collections.Specialized;
//using MesWork;
//using SystemFramework;
using bizFacade;
namespace MesServerWork
{
public partial class MIS_BASE
{
static object lockerBarcode = new object();
/// <summary>
///1.扫描配送单号用于接收物料扫描单号的时候将接收的物料信息显示在“物料拉动”Tab区域
///2.扫描料箱标签/看板卡,用于追溯物料批次信息
///3.扫描零件条码,根据零件图号进行防错
///第一步,判断条码类型,根据条码类型,执行对应的存储过程
///第二步,条码类型(将扫描的条码保存到对应的表中)
///第三步,扫描完成之后给出允许工作信号
/// 处理页面扫描条码
/// </summary>
/// <param name="OpName"></param>
/// <param name="barcode"></param>
static public void Barcode(object e)
{
lock (lockerBarcode)
{
try
{
DoWhatPlc.CustomeEvetnArgs msgEvent = (DoWhatPlc.CustomeEvetnArgs)e;
string OpName = Convert.ToString(msgEvent.OpName);
string barcode = Convert.ToString(msgEvent.TagValue);
string AlarmStr = "";
int IsAllowWork;
bool IsSuccess = false;
bool EngineGetOver_PLC_NextWorkStep;
//传递机型是否到位
MIS_BASE.Read_EngineGetOver_PLC(OpName, out EngineGetOver_PLC_NextWorkStep);
BaseDataSystemMES.PartMaterial_DM_Update(OpName, barcode, out IsSuccess);
if (!IsSuccess)
{
AsyncSendMessage_Notice(OpName, "条码无效,请确认");
return;
}
else
{
SendInfomation("MaterialList", "1", OpName);//通知界面更新零件信息
}
//获取是否允许工作
BaseDataSystemMES.MesServer_Judge_IsCanWork(OpName, out IsAllowWork);
//此处逻辑有问题 需要考虑到批次扫描 提示PLC未传递机型的情况
if (EngineGetOver_PLC_NextWorkStep && IsSuccess)
{
if (IsAllowWork == 1)
{
BaseDataSystemMES.Material_Insert(OpName, 1);
//if (!BaseDataSystemMES.QualityVerifyStatusOutline(OpName, out AlarmStr))
//{
// SendInfomation("LineoutAlert", AlarmStr, OpName);
// return;
//}
//通知PLC允许工作,允许工作在保存完成时清空
MIS_BASE.Write_FixAllow(OpName, true);
}
else
{
AsyncSendMessage_Notice(OpName, "请扫描物料!");
}
}
else
{
AsyncSendMessage_Notice(OpName, "PLC未传递机型");
}
}
catch (Exception err)
{
////ApplicationLog.WriteLog(err, "Function02:Barcode");
}
}
}
}
}

View File

@@ -0,0 +1,47 @@
using System;
using System.Data;
using System.Collections;
using System.Windows.Forms;
//using bizFacade;
using System.Collections.Specialized;
//using MesWork;
//using SystemFramework;
namespace MesServerWork
{
public partial class MIS_BASE
{
static object lockerConfirmOkGo = new object();
static public void ConfirmOkGo(object e)
{
lock (lockerConfirmOkGo)
{
try
{
DoWhatPlc.CustomeEvetnArgs msgEvent = (DoWhatPlc.CustomeEvetnArgs)e;
string OpName = Convert.ToString(msgEvent.OpName);
int tagValue = Convert.ToInt32(msgEvent.TagValue);
if (tagValue == 1)
{
//BaseDataSystemMES.Material_Insert(OpName, 1);
//更新订单完工数量及物料
Sendmessage("24", "11", OpName);
//工作完成
MIS_BASE.Write_MaterialVerifyOver(OpName, true);
}
}
catch (Exception err)
{
////ApplicationLog.WriteLog(err, "Function02:ConfirmOkGo");
}
}
}
}
}

View File

@@ -0,0 +1,139 @@
using System;
using System.Data;
using System.Collections;
using System.Windows.Forms;
//using bizFacade;
using System.Collections.Specialized;
//using MesWork;
//using SystemFramework;
using bizFacade;
namespace MesServerWork
{
public partial class MIS_BASE
{
static object lockerEngineTypeGetOver_PLC_Work = new object();
static public void EngineTypeGetOver_PLC_Work(string OpName, int EngineTypeID, string EngineType, string EngineID, int PartPallet_Code,string OrderForm)
{
lock (lockerEngineTypeGetOver_PLC_Work)
{
int IsAllowWork;
int RepairPartStatusPLC = 0;
int MES_QualityMask = 1;
//string OrderForm = "";//订单号
DataTable dt;
if (EngineTypeID <= 0)
{
AsyncSendMessage_Notice(OpName, "PLC传递机型为空");
return;
}
//第一步,查询订单号,保存机型、机型代码、总成号、托盘号、订单号到数据库
BaseDataSystemMES.GetEngineID_Select(OpName, EngineID, out dt);
if (dt != null && dt.Rows.Count > 0)
{
OrderForm = Convert.ToString(dt.Rows[0]["订单号"]);
}
BaseDataSystemMES.OpName_MIS_MOBY_Insert(OpName, OrderForm, EngineTypeID, EngineType, EngineID, PartPallet_Code, 0, 0, "");
SaveMobyMessage(OpName, EngineTypeID, EngineType, EngineID, OrderForm);
//第二步将零件信息转移到零件_临时表中本地BOM与订单BOM的选择显示关系
BaseDataSystemMES.MesServer_Process_EngineTypeOver(OpName);
//通知web显示
Sendmessage("5123", "1111", OpName);
MIS_BASE.Read_PalletInfo(OpName, out MES_QualityMask);//合格标志
MIS_BASE.Read_RepairStatus_PLC(OpName, out RepairPartStatusPLC);//返修标志
SendInfomation("QualityMask", Convert.ToString(MES_QualityMask), OpName);//显示合格标志
SendInfomation("RepairPartStatusPLC", Convert.ToString(RepairPartStatusPLC), OpName);//显示返修标志
if (MES_QualityMask == 2)
{
//工作完成
MIS_BASE.Write_MaterialVerifyOver(OpName, true);
SendInfomation("NgGO", "1", OpName);//显示不合格标志
return;
}
//第三步,用于工件离开后完工数量统计及工件编号追溯
BaseDataSystemMES.MaterialPush_EngineIDStatus_Insert(OpName);//更新订单产量
//第四步,获取是否允许工作
BaseDataSystemMES.MesServer_Judge_IsCanWork(OpName, out IsAllowWork);
//暂时先定义为扫描完成才能进行压装工作,因为考虑到工作完成后,操作工未必会去扫描物料的情况
if (IsAllowWork == 1)
{
//通知PLC允许工作,允许工作在保存完成时清空
MIS_BASE.Write_FixAllow(OpName, true);
}
else
{
AsyncSendMessage_Notice(OpName, "请扫描物料!");
}
}
}
/// <summary>
/// 保存MOBY信息
/// </summary>
/// <param name="OpName"></param>
/// <param name="engineTypeID"></param>
/// <param name="engineType"></param>
/// <param name="engineID"></param>
static private void SaveMobyMessage(string OpName, int engineTypeID, string engineType, string engineID, string orderForm)
{
if (MIS_BASE.hashtable_EngineGetOver_EngineTypeID == null)
{
MIS_BASE.InitHashtable_MesServerCode();
}
if (MIS_BASE.hashtable_EngineGetOver_EngineTypeID.ContainsKey(OpName))
{
MIS_BASE.hashtable_EngineGetOver_EngineTypeID[OpName] = engineTypeID;
}
if (MIS_BASE.hashtable_EngineGetOver_EngineType.ContainsKey(OpName))
{
MIS_BASE.hashtable_EngineGetOver_EngineType[OpName] = engineType;
}
if (MIS_BASE.hashtable_EngineGetOver_EngineID.ContainsKey(OpName))
{
MIS_BASE.hashtable_EngineGetOver_EngineID[OpName] = engineID;
}
if (MIS_BASE.hashtable_EngineGetOver_OrderForm.ContainsKey(OpName))
{
MIS_BASE.hashtable_EngineGetOver_OrderForm[OpName] = orderForm;
}
}
/// <summary>
/// 返修件需要工作
/// </summary>
/// <param name="OpName">工位号</param>
static private void IsNeedRepaire_OK(string OpName)
{
string orderForm = "";
int engineTypeID;
string engineType = "";
string engineID = "";
string palletCode = "";
int isRepair;
string repairCode = "";
//从监控系统中查询出本工位信息
BaseDataSystemMES.OpName_MIS_Moby_Select(OpName,
out orderForm, out engineTypeID, out engineType,
out engineID, out palletCode, out isRepair, out repairCode);
EngineTypeGetOver_PLC_Work(OpName, engineTypeID, engineType, engineID, Convert.ToInt32(palletCode),orderForm);
}
}
}

View File

@@ -0,0 +1,48 @@
using System;
using System.Data;
using System.Collections;
using System.Windows.Forms;
//using bizFacade;
using System.Collections.Specialized;
//using MesWork;
//using SystemFramework;
namespace MesServerWork
{
public partial class MIS_BASE
{
static object lockerFalseGO = new object();
static public void FalseGO(object e)
{
lock (lockerConfirmOkGo)
{
try
{
DoWhatPlc.CustomeEvetnArgs msgEvent = (DoWhatPlc.CustomeEvetnArgs)e;
string OpName = Convert.ToString(msgEvent.OpName);
int tagValue = Convert.ToInt32(msgEvent.TagValue);
if (tagValue == 1)
{
//总合格标志2不合格
//BaseDataSystemMES.Material_Insert_NG(OpName, 2);
Sendmessage("24", "11", OpName);
//工作完成
MIS_BASE.Write_MaterialVerifyOver(OpName, true);
}
}
catch (Exception err)
{
////ApplicationLog.WriteLog(err, "Function02:FalseGO");
}
}
}
}
}

View File

@@ -0,0 +1,59 @@
using System;
using System.Data;
using System.Collections;
using System.Windows.Forms;
//using bizFacade;
using System.Collections.Specialized;
//using MesWork;
//using SystemFramework;
using bizFacade;
namespace MesServerWork
{
public partial class MIS_BASE
{
static object lockerMaterial_Insert = new object();
static public void Material_Insert(string OpName)
{
lock (lockerMaterial_Insert)
{
try
{
//int tagValue = Convert.ToInt32(msgEvent.TagValue);
int IsAllowWork;
//第四步,获取是否允许工作
BaseDataSystemMES.MesServer_Judge_IsCanWork(OpName, out IsAllowWork);
bool EngineGetOver_PLC_NextWorkStep;
//传递机型是否到位
MIS_BASE.Read_EngineGetOver_PLC(OpName, out EngineGetOver_PLC_NextWorkStep);
//暂时先定义为扫描完成才能进行压装工作,因为考虑到工作完成后,操作工未必会去扫描物料的情况
if (EngineGetOver_PLC_NextWorkStep&&IsAllowWork == 1)
{
BaseDataSystemMES.Material_Insert(OpName, 1);
//更新订单完工数量及物料
Sendmessage("24", "11", OpName);
//工作完成
MIS_BASE.Write_MaterialVerifyOver(OpName, true);
//通知PLC允许工作,允许工作在保存完成时清空
MIS_BASE.Write_FixAllow(OpName, true);
}
else
{
AsyncSendMessage_Notice(OpName, "请扫描物料!");
}
}
catch (Exception err)
{
////ApplicationLog.WriteLog(err, "Function02:ConfirmOkGo");
}
}
}
}
}

View File

@@ -0,0 +1,66 @@
using System;
using System.Data;
using System.Collections;
using System.Windows.Forms;
//using bizFacade;
using System.Collections.Specialized;
//using MesWork;
//using SystemFramework;
namespace MesServerWork
{
public partial class MIS_BASE
{
static object lockerMesReadOver = new object();
/// <summary>
/// 保存完成(针对半自动和手动压装工位)
/// </summary>
/// <param name="OpName"></param>
/// <param name="tagValue"></param>
static public void MesReadOver(object e)
{
lock (lockerMesReadOver)
{
try
{
DoWhatPlc.CustomeEvetnArgs msgEvent = (DoWhatPlc.CustomeEvetnArgs)e;
string OpName = Convert.ToString(msgEvent.OpName);
var tagValue = msgEvent.TagValue.ToString();
if (tagValue == "1" | tagValue.ToLower() == "true")
{
int qualityMask;
MIS_BASE.Read_QualityMask(OpName, out qualityMask);
SendInfomation("ShowTimelyQuality", "1&" + qualityMask.ToString(), OpName);//发给Web页面显示质量数据
if (qualityMask == 1)//全部OK给出合格放行
{
//如果存在线外扫描工位,根据扫描条码绑定线外数据 需要时解除禁用
//BaseDataSystemMES.TransLaunchDataByMainMaterial(OpName, EngineType, EngineID, EngineTypeID);
//如果存在线外排队工位,根据排队编号绑定线外数据 需要时解除禁用
////BaseDataSystemMES.MailLineAndSubLineData_InsertByEngineID_Subline(OpName,EngineID, EngineTypeID, EngineType);
MIS_BASE.Write_ConfirmOkGo(OpName, true);
//MIS_BASE.Write_FalseGO(OpName, false);
}
else
{
//MIS_BASE.Write_ConfirmOkGo(OpName, false);
MIS_BASE.Write_FalseGO(OpName, true);
}
}
}
catch (Exception err)
{
////ApplicationLog.WriteLog(err, "Function02:MesReadOver");
}
}
}
}
}

View File

@@ -0,0 +1,162 @@
using System;
using System.Data;
using System.Collections;
using System.Windows.Forms;
//using bizFacade;
using System.Collections.Specialized;
//using MesWork;
//using SystemFramework;
using bizFacade;
namespace MesServerWork
{
public partial class MIS_BASE
{
/// <summary>
/// 发送提示消息
/// </summary>
/// <param name="Message"></param>
static private void AsyncSendMessage_Notice(string opname, string notice)
{
//通知Web界面
BaseDataSystemMES.Web_Notice_Insert(opname, notice);
string SendMessage = "MES|Notice|" + opname + "|" + "1";
MIS_BASE.asyncSendMessage(SendMessage);
}
/// <summary>
/// 向WEB发送信息value为字符串
/// </summary>
/// <param name="Command">消息种类</param>
/// <param name="Value">消息内容</param>
/// <param name="OpName">工位号</param>
static string SendInfomation(string Command, string Value, string OpName)
{
string SendMessage = "MES|" + Command + "|" + OpName + "|" + Value;
return AsyncSendMessage(SendMessage);
}
/// <summary>
/// 发送信息到MES通讯服务器或者其他的
/// </summary>
/// <param name="Message"></param>
static private string AsyncSendMessage(string Message)
{
return MIS_BASE.asyncSendMessage(Message);
}
/// <summary>
/// 批量发送WEB消息Value为BOOL值
/// </summary>
/// <param name="MessageNumm">消息编号组合</param>
/// <param name="Value">消息值组合</param>
/// <param name="OpName">工位号</param>
static void Sendmessage(string MessageNumm, string Value, string OpName)
{
for (int i = 0; i < MessageNumm.Length; i++)
{
Sendmessage(MessageNumm[i], Value[i].ToString(), OpName);
}
}
/// <summary>
/// 选择发送给WEB的消息
/// </summary>
/// <param name="Num">消息类型</param>
/// <param name="OpName">消息工位</param>
static string Sendmessage(char Num, string Value, string OpName)
{
string SendMessage;
string result = "";
switch (Num)
{
case '1':
//1直接在界面通过选择机型确认工序内容
SendMessage = "MES|ProcessList|" + OpName + "|" + Value;
result = AsyncSendMessage(SendMessage);
break;
case '2':
//2显示物料
SendMessage = "MES|MaterialList|" + OpName + "|" + Value;
result = AsyncSendMessage(SendMessage);
break;
case '3':
//3显示操作指导图片
SendMessage = "MES|PicShow|" + OpName + "|" + Value;
result = AsyncSendMessage(SendMessage);
break;
case '4':
//4订单完工模块刷新完成数量
SendMessage = "MES|OrderFormList|" + OpName + "|" + Value;
AsyncSendMessage(SendMessage);
break;
case '5':
SendMessage = "MES|ShowMoby|" + OpName + "|" + Value;
result = AsyncSendMessage(SendMessage);
break;
case '6':
SendMessage = "MES|MaterialCheckPosition|" + OpName + "|" + Value;
result = AsyncSendMessage(SendMessage);
break;
case '7':
SendMessage = "MES|WorkStart|" + OpName + "|" + Value;
result = AsyncSendMessage(SendMessage);
break;
case '8'://清除MES生成编号
break;
case '9':
SendMessage = "MES|ConfirmOkGo|" + OpName + "|" + Value;
result = AsyncSendMessage(SendMessage);
break;
case 'a':
SendMessage = "MES|FixAllow|" + OpName + "|" + Value;
result = AsyncSendMessage(SendMessage);
break;
}
return result;
}
///// <summary>
///// 向WEB发送信息value为字符串
///// </summary>
///// <param name="Command">消息种类</param>
///// <param name="Value">消息内容</param>
///// <param name="OpName">工位号</param>
//string SendInfomation(string Command, string Value, string OpName)
//{
// string SendMessage = "MES|" + Command + "|" + OpName + "|" + Value;
// return AsyncSendMessage(SendMessage);
//}
/// <summary>
/// 发送在线产量、在线节拍
/// </summary>
/// <param name="OpName"></param>
/// <param name="tagValue"></param>
private void SendActuallyCount(string OpName, int tagValue)
{
//当工件离开时,更新在线产量、在线节拍
if (tagValue == 0)
{
try
{
int opNameCount = 0;//在线产量
int opNameCountTime = 0;//在线节拍
//基本数据_工作日历_班次产量查询_New
BaseDataSystemMES.OpNameCount_New(OpName, out opNameCount, out opNameCountTime);
string SendMessage;
SendMessage = "MES|ActuallyCount|" + OpName + "|" + opNameCount.ToString() + "&" + opNameCountTime.ToString();
AsyncSendMessage(SendMessage);
}
catch (Exception err)
{
////ApplicationLog.WriteLog(err, "Function02:SendActuallyCount");
}
}
}
}
}

View File

@@ -0,0 +1,282 @@
using System;
using System.Data;
using System.Collections;
using System.Windows.Forms;
//using bizFacade;
using System.Collections.Specialized;
//using MesWork;
//using SystemFramework;
using System.Threading;
using bizFacade;
namespace MesServerWork
{
public partial class MIS_BASE
{
static object lockerWebSubmit = new object();
/// <summary>
/// 处理WEB页面发送过来的请求m_Command + "|" + m_Value;
/// </summary>
/// <param name="OpName"></param>
/// <param name="Content"></param>
static public void WebSubmit(object e)
{
lock (lockerWebSubmit)
{
try
{
DoWhatPlc.CustomeEvetnArgs msgEvent = (DoWhatPlc.CustomeEvetnArgs)e;
string OpName = Convert.ToString(msgEvent.OpName);
string Content = Convert.ToString(msgEvent.TagValue);
string[] dataArray = Content.Split('|');
if (dataArray.Length != 2)
return;
//消息类型
string m_Command = dataArray[0].ToString();
//消息参数
string m_Value = dataArray[1].ToString();
//消息参数数量
string[] m_Value_array = m_Value.Split('&');
//消息参数长度
int m_Value_length = m_Value_array.Length;
//工件信息
string engineID = "";
if (MIS_BASE.hashtable_EngineGetOver_EngineTypeID == null)
{
MIS_BASE.InitHashtable_MesServerCode();
}
if (MIS_BASE.hashtable_EngineGetOver_EngineID.ContainsKey(OpName))
{
engineID = MIS_BASE.hashtable_EngineGetOver_EngineID[OpName].ToString();
}
DoWhatPlc.CustomeEvetnArgs _e = new DoWhatPlc.CustomeEvetnArgs();
_e.OpName = OpName;
_e.TagValue = m_Value;
//根据请求的命令处理逻辑
switch (m_Command)
{
case "Barcode":
if (m_Value_length > 1) return;
fun_Barcode(_e);
break;
case "ConfirmOkGo"://合格放行
//删除不合格放行记录
//修改托盘状态
//Update_PalletStatus(OpName, 1, false);
BaseDataSystemMES.BaseData_tagTable_Engine_IsNG_Delete(OpName, engineID);
MIS_BASE.Write_ConfirmOkGo(OpName, true);
MIS_BASE.Write_FalseGO(OpName, false);
break;
case "FalseGO"://返修放行
//修改托盘状态
//Update_PalletStatus(OpName, 3, false);
BaseDataSystemMES.BaseData_tagTable_Engine_IsNG_Delete(OpName, engineID);
MIS_BASE.Write_FalseGO(OpName, true);
MIS_BASE.Write_ConfirmOkGo(OpName, false);
break;
case "NgGO"://不合格放行
//修改托盘状态
//Update_PalletStatus(OpName, 2, false);
//保存不合格信息(必须保存不合格放行信息由于B5A的Moby没有不合格标志位)
BaseDataSystemMES.BaseData_tagTable_Engine_IsNG_Insert(OpName, engineID, "", "");
MIS_BASE.Write_FalseGO(OpName, true);
MIS_BASE.Write_ConfirmOkGo(OpName, false);
break;
case "OnLineState"://在线0、离线1、屏蔽2
try
{
if (m_Value_length > 1) return;
int a = Convert.ToInt32(m_Value);
if (a <= 2)
{
BaseDataSystemMES.IsOnLine_Update(OpName, m_Value.ToString());
MIS_BASE.Write_OnLineState(OpName, Convert.ToInt32(m_Value));
}
}
catch
{
}
break;
case "Reset"://复位将MES所有的信息都复位了
SetMoby(OpName);//将MES所有信号清空
break;
case "FixAllow"://重新拧紧
MIS_BASE.Write_FixAllow(OpName, false);
MIS_BASE.Write_FixAllow(OpName, true);
break;
case "IsAutoGetEngineID"://自动手动申请编号(线首)
if (m_Value_length > 1) return;
MIS_BASE.Write_IsAutoGetEngineID(OpName, Convert.ToInt32(m_Value));
break;
case "PartPalletGoOver"://空托盘放行
int Is_PartPalletGoOver;
MIS_BASE.Read_PartPalletGoOver(OpName, out Is_PartPalletGoOver);
if (Is_PartPalletGoOver == 1)
{
MIS_BASE.Write_PartPalletGoOver(OpName, 1);
}
else
{
MIS_BASE.Write_PartPalletGoOver(OpName, 0);
}
break;
case "SetMoby"://清空托盘(线首)
SetMoby(OpName);//将MES所有信号清空
//MIS_BASE.Write_PartPalletCode_PLC(OpName, 1);
break;
case "RepairUplineMES"://返修上线
MIS_BASE.Write_RepairUpline_MES(OpName, true);
break;
case "CancelRepair"://将返修件置为正常件
break;
case "PartPalletCode"://申请写入托盘号
//MIS_BASE.Write_PartPalletCode_PLC(OpName, 1);
break;
case "WritePartPalletCode"://写入托盘号
if (m_Value_length > 1) return;
MIS_BASE.Write_PalletCode(OpName, Convert.ToInt32(m_Value));
break;
case "Normal"://启用正常拧紧工位
MIS_BASE.Write_Normal(OpName, 1);
MIS_BASE.Write_UnNormal(OpName, 0);
break;
case "UnNormal"://启用备用拧紧工位
MIS_BASE.Write_Normal(OpName, 0);
MIS_BASE.Write_UnNormal(OpName, 1);
break;
case "ResetDevice"://复位设备
MIS_BASE.Write_ResetDevice(OpName, true);
System.Threading.Thread.Sleep(1000);
MIS_BASE.Write_ResetDevice(OpName, false);
break;
case "IsNeedRepaire"://返修上线(返修上线点)
if (Convert.ToInt32(m_Value) == 1)
{
//修改托盘状态
MIS_BASE.Write_PalletInfo(OpName, 3);
//通知修改成功
MIS_BASE.Write_UpdatePalletOK(OpName, true);
IsNeedRepaire_OK(OpName);
}
else if (Convert.ToInt32(m_Value) == 0)
{
//通知修改成功
MIS_BASE.Write_UpdatePalletOK(OpName, true);
//直接给出工作完成
MIS_BASE.Write_MaterialVerifyOver(OpName, true);
}
else
{ }
break;
case "ContinueMatch":
BaseDataSystemMES.QualityVerifyStatus_Hash_Write(OpName, true);
break;
//初始化网页信号
case "IniSingalToWeb":
InitializeSingalToWeb(OpName);
break;
case "Reset_Engine"://返修上线(返修上线点)
SetMoby(OpName);//将MES所有信号清空
//fun_EngineTypeGetOverPLC(OpName, 0);
//fun_EngineTypeGetOverPLC(OpName, 1);
break;
default: break;
}
}
catch (Exception err)
{
////ApplicationLog.WriteLog(err, "Function02:WebSubmit");
}
}
}
//1.工件到位后PLC给MES传递机型(DBX0.4)(44)
//MES判断条码是否全部扫描完成
//PLC给出允许保存(DBX100.2)(19)MES见到(DBX100.2)(19)为1后给出保存完成(DBX102.2)(20)
//PLC见到保存完成(DBX102.2)(20)为1后清空允许保存(DBX100.2)(19)
//MES见到允许保存(DBX100.2)(19)为0后清空保存完成(DBX102.2)(20)
//MES判断总合格标志(INT104)(21)为1后给出合格放行(DBX2.5)(51)
/// <summary>
/// 扫描条码
/// </summary>
/// <param name="OpName"></param>
/// <param name="barcode"></param>
static public void fun_Barcode(DoWhatPlc.CustomeEvetnArgs e)
{
ThreadPool.QueueUserWorkItem(Barcode, e);
}
static private void SetMoby(string OpName)
{
try
{
//清空Moby时需要将MES信号清空
MIS_BASE.Write_ClearMesMoby(OpName);
BaseDataSystemMES.MesServer_Process_EngineTypeOver(OpName);
Sendmessage("5123", "1111", OpName);
MIS_BASE.Write_ResetDevice(OpName, true);
System.Threading.Thread.Sleep(1000);
MIS_BASE.Write_ResetDevice(OpName, false);
}
catch
{
}
}
/// 网页重现登录,恢复关闭前的页面状态
/// </summary>
/// <param name="Opname">工位号</param>
static private void InitializeSingalToWeb(string Opname)
{
//工件到位 DBX0.1
bool S_WorkStart;
bool S_FixAllow;
bool S_EngineGetOver;
bool S_MaterialVerifyOver;
MIS_BASE.Read_WorkStart(Opname, out S_WorkStart);
MIS_BASE.Read_FixAllow(Opname, out S_FixAllow);
MIS_BASE.Read_EngineGetOver_PLC(Opname, out S_EngineGetOver);
MIS_BASE.Read_MaterialVerifyOver(Opname, out S_MaterialVerifyOver);
if (S_WorkStart == true)
{
SendInfomation("WorkStart", Convert.ToString(Convert.ToInt32(S_WorkStart)), Opname);
}
if (S_EngineGetOver == true)
{
SendInfomation("EngineTypeGetOverPLC", Convert.ToString(Convert.ToInt32(S_EngineGetOver)), Opname);
Sendmessage("5123", "1111", Opname);
}
if (S_FixAllow == true)
{
SendInfomation("FixAllow", Convert.ToString(Convert.ToInt32(S_FixAllow)), Opname);
}
if (S_MaterialVerifyOver == true)
{
SendInfomation("MaterialVerifyOver", Convert.ToString(Convert.ToInt32(S_MaterialVerifyOver)), Opname);
}
}
}
}

View File

@@ -0,0 +1,45 @@
using System;
using System.Data;
using System.Collections;
using System.Windows.Forms;
////using bizFacade;
using System.Collections.Specialized;
//using MesWork;
//using SystemFramework;
using System.Threading;
namespace MesServerWork
{
public partial class MIS_BASE
{
static object lockerWorkStart = new object();
/// <summary>
/// 工件到位与离开时清空MES自身信号
/// </summary>
/// <param name="OpName"></param>
/// <param name="tagValue"></param>
static private void WorkStart(object e)
{
lock (lockerWorkStart)
{
try
{
DoWhatPlc.CustomeEvetnArgs msgEvent = (DoWhatPlc.CustomeEvetnArgs)e;
string OpName = Convert.ToString(msgEvent.OpName);
int tagValue = Convert.ToInt32(msgEvent.TagValue);
}
catch (Exception err)
{
////ApplicationLog.WriteLog(err, "Function02:WorkStart");
}
}
}
}
}

View File

@@ -0,0 +1,832 @@
using System;
using System.Data;
using System.Collections;
using System.Windows.Forms;
//using bizFacade;
using System.Collections.Specialized;
//using MesWork;
using bizFacade;
using DoWhatPlc;
namespace MesServerWork
{
public partial class MIS_BASE
{
/// <summary>
/// 全部数据列表
/// </summary>
public static DataTable BasicDataTagValue;
/// <summary>
/// MES_基本数据_测量范围
/// </summary>
public static DataTable BasicDataTagValueUpDown;
/// <summary>
/// 是否通过监控系统保存数据
/// 1:通过监控系统保存采集的质量数据;0:不通过监控系统保存采集的质量数据
/// </summary>
static public Hashtable hashtable_tagTable_OpName_SaveData;
/// <summary>
/// 变量代码与列位置
/// </summary>
static public Hashtable hashtable_tagTable_TagID_TagOrderBy;
/// <summary>
/// 变量代码与变量排序
/// </summary>
static public Hashtable hashtable_tagTable_TagID_TagItemOrderBy;
/// <summary>
/// 变量代码与变量特点
/// 0:没定义1工位合格标志2需要合格标志的测量数据3每个工位的合格标志4:物料5:IQA码6:压装数据7:压装合格标志8(自动拧紧)工位合格标志
/// </summary>
static public Hashtable hashtable_tagTable_TagID_TagProperty;
/// <summary>
/// 发动机类型转换表
/// SELECT ID,发动机机型代码 FROM MES_计划BOM_发动机型号代码
/// </summary>
public static Hashtable hashtable_EngineTypeID;
/// <summary>
/// 工位号与工位上下线类型
/// 0普通工位1正常上线2正常下线3返修上线4返修下线
/// 5分线上线 总线6分线上线 分线)
/// </summary>
public static Hashtable hashtableOpName_OpType;
/// <summary>
/// 工位号与大屏幕代码
/// 对应LED大屏幕1234
/// </summary>
public static Hashtable hashtableOpName_LedID;
/// <summary>
/// 大屏幕显示产量端口(41104)
/// </summary>
public static Hashtable hashtableOpName_LedID_Port;
/// <summary>
/// 大屏幕显示Andon大屏幕代码 1
/// </summary>
public static Hashtable hashtableOpName_AndonID;
/// <summary>
/// 大屏幕显示Andon端口 (41105)
/// </summary>
public static Hashtable hashtableOpName_AndonID_Port;
/// <summary>
/// 是否有打印机(0,1)
/// </summary>
public static Hashtable hashtableOpName_IsPrinter;
/// <summary>
/// 打印机通讯端口
/// </summary>
public static Hashtable hashtableOpName_IsPrinter_Port;
/// <summary>
/// 工位号与目标循环时间
/// </summary>
public static Hashtable hashtableOpName_TargetTime;
/// <summary>
/// 工位号与线体类型
/// </summary>
public static Hashtable hashtableOpName_LineType;
/// <summary>
/// 是否有工位计算机
/// </summary>
public static Hashtable hashtableOpName_IsHaveComputer;
/// <summary>
/// 变量名称
/// </summary>
public static Hashtable hashtableTagID_TagName;
/// <summary>
/// 工位号
/// </summary>
public static Hashtable hashtableTagID_OpName;
/// <summary>
/// 数据来源
/// </summary>
public static Hashtable hashtableTagID_OpNameFrom;
/// <summary>
/// 工位名称
/// </summary>
static Hashtable hashtableTagID_OpName_Name;
/// <summary>
/// 测量位置
/// </summary>
public static Hashtable hashtableTagID_ShaftID;
/// <summary>
/// 测量项目
/// </summary>
public static Hashtable hashtableTagID_ItemVale;
/// <summary>
/// 变量代码与变量类型
/// </summary>
public static Hashtable hashtable_tagTable_TagID_TagTypeID_All;
/// <summary>
///工位号与机床状态
/// [测量数据机床状态]
/// </summary>
public static Hashtable m_MachineStatus_OpName;
/// <summary>
///工位号与工件离开 1->0 =0 无工件或工件离开
///工位号与工件到位 0->1 =1 有工件或工件到达
///[测量数据发动机在线状态]
/// </summary>
public static Hashtable m_WorkStart_OpName;
/// <summary>
///工位号与工件到位时间
///工位号与工件到位 0->1
///[测量数据发动机在线状态]
/// </summary>
public static Hashtable m_WorkStart_OpName_Time;
/// <summary>
///工位号与工件到位时间
///工位号与工件到位 0->1零件运动方向
/// </summary>
public static Hashtable m_WorkStart_OpName_PartMoveDirection;
/// <summary>
///工位号与发动机号
/// </summary>
public static Hashtable m_EngineTrace_OpName;
/// <summary>
///工位号与发动机号_时间
/// </summary>
public static Hashtable m_EngineTrace_OpName_Time;
/// <summary>
///工位号与合格标志
///[测量数据发动机在线状态]
/// </summary>
public static Hashtable m_QualityMask_OpName;
/// <summary>
///工位号与机型
///[测量数据发动机在线状态]
/// </summary>
public static Hashtable m_EngineNumberType_OpName;
/// <summary>
///工位号与发动机号
///[测量数据发动机在线状态]
/// </summary>
public static Hashtable m_EngineNumber_OpName;
/// <summary>
///工位号与订单号
///[测量数据发动机在线状态]
/// </summary>
public static Hashtable m_OrderForm_OpName;
/// <summary>
///工位号与操作者工号
///[测量数据发动机在线状态]
/// </summary>
public static Hashtable m_OperatorCode_OpName;
/// <summary>
/// 测量合格标志
/// 全部测量数据的测量工位
/// 全部测量数据的测量工位的数据来源
/// 全部测量数据的测量工位的数据来源的测量变量
/// </summary>
public static Hashtable hashtable_QualityData_GoodBad_MIS_OpName;
/// <summary>
/// 列位置
/// </summary>
public static Hashtable hashtable_QualityData_GoodBad_Index;
/// <summary>
/// MesServerCode
/// </summary>
public static Hashtable hashtable_MesServerCode;
/// <summary>
/// MesDll
/// </summary>
public static Hashtable hashtable_MesDll;
/// <summary>
/// 各个工位是否允许工作
/// </summary>
public static Hashtable hashtable_IsAllowWork;
/// <summary>
/// 返修工位是否需要强制合格放行
/// //20141104 ljl
/// </summary>
public static Hashtable hashtable_IsConfirmOkGo;
/// <summary>
/// 工步属性哈西表
/// </summary>
public static Hashtable hashtable_workStepProperty;
/// <summary>
/// 工作顺序哈西表
/// </summary>
public static Hashtable hashtable_WorkGroupIndex;
/// <summary>
/// 返修工位哈西表
/// </summary>
public static Hashtable hashtable_OpNameRepair;
/// <summary>
/// 记录工件到位的发动机机型代码
/// </summary>
public static Hashtable hashtable_EngineGetOver_EngineTypeID;
/// <summary>
/// 记录工件到位的发动机机型
/// </summary>
public static Hashtable hashtable_EngineGetOver_EngineType;
/// <summary>
/// 记录工件到位的发动机号
/// </summary>
public static Hashtable hashtable_EngineGetOver_EngineID;
/// <summary>
/// 记录工件到位的订单号
/// </summary>
public static Hashtable hashtable_EngineGetOver_OrderForm;
/// <summary>
/// 拧紧/压装过程中的合格标志
/// </summary>
public static Hashtable hashtable_QualityMesRead;
/// <summary>
/// 物料检测哈希表
/// </summary>
public static Hashtable hashtable_CheckMaterial;
/// <summary>
/// 托盘状态哈希表
/// </summary>
public static Hashtable hashtable_PalletInfo;
/// <summary>
///[测量数据机床状态_分拆统计]
///各个工位机床上电开始时间
///机床上电产生 0->1
///机床上电解除 1->0
/// </summary>
public static Hashtable m_MachineStatusPutOn_OpName_Time;
/// <summary>
///[测量数据机床状态_分拆统计]
///各个工位循环开始 开始时间
///循环开始产生 0->1
///循环开始解除 1->0
/// </summary>
public static Hashtable m_MachineStatusWorkOn_OpName_Time;
/// <summary>
///[测量数据机床状态_分拆统计]
///各个工位机床故障开始时间
///机床故障产生 0->1
///机床故障解除 1->0
/// </summary>
public static Hashtable m_MachineStatusAlarm_OpName_Time;
/// <summary>
///[测量数据机床状态_分拆统计]
///各个工位上料无件开始时间
///上料无件产生 0->1
///上料无件解除 1->0
/// </summary>
public static Hashtable m_MachineStatusNoPart_OpName_Time;
/// <summary>
///[测量数据机床状态_分拆统计]
///各个工位下料堵塞开始时间
///下料堵塞产生 0->1
///下料堵塞解除 1->0
/// </summary>
public static Hashtable m_MachineStatusBlock_OpName_Time;
/// <summary>
///工位号与托盘离开 1->0
///工位号与托盘到位 0->1
///[测量数据_监控系统_托盘到位]
/// </summary>
public static Hashtable m_PartPalletStatus_OpName;
/// <summary>
///工位号与托盘离开 1->0
///工位号与托盘到位 0->1
///[测量数据_监控系统_托盘到位]
/// </summary>
public static Hashtable m_PartPalletStatus_OpName_Time;
/// <summary>
/// 托盘到位(1)托盘离开(0) (DBX101.7)(13)
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
/// <summary>
///[测量数据机床状态_分拆统计]
///各个工位机床上电开始时间
///机床上电产生 0->1
///机床上电解除 1->0
/// </summary>
public static Hashtable m_MachineStatusPutOn_OpName;
/// <summary>
///[测量数据机床状态_分拆统计]
///各个工位循环开始 开始时间
///循环开始产生 0->1
///循环开始解除 1->0
/// </summary>
public static Hashtable m_MachineStatusWorkOn_OpName;
/// <summary>
///[测量数据机床状态_分拆统计]
///各个工位机床故障开始时间
///机床故障产生 0->1
///机床故障解除 1->0
/// </summary>
public static Hashtable m_MachineStatusAlarm_OpName;
/// <summary>
///[测量数据机床状态_分拆统计]
///各个工位上料无件开始时间
///上料无件产生 0->1
///上料无件解除 1->0
/// </summary>
public static Hashtable m_MachineStatusNoPart_OpName;
/// <summary>
///[测量数据机床状态_分拆统计]
///各个工位下料堵塞开始时间
///下料堵塞产生 0->1
///下料堵塞解除 1->0
/// </summary>
public static Hashtable m_MachineStatusBlock_OpName;
public static Hashtable hashtable_TagTypeDataType ;
public static Hashtable hashtable_TagType;
/// <summary>
/// 托盘代码(DBB86)(80)
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
/// <summary>
/// 创建MesServerCode哈西表
/// </summary>
static public void InitHashtable_MesServerCode()
{
hashtable_MesServerCode = new Hashtable();
hashtable_IsAllowWork = new Hashtable();
hashtable_WorkGroupIndex = new Hashtable();
hashtable_QualityMesRead = new Hashtable();
hashtable_CheckMaterial = new Hashtable();
hashtable_PalletInfo = new Hashtable();
hashtable_IsConfirmOkGo = new Hashtable();
hashtable_MesDll=new Hashtable();
HashtableList htList = DtWebApi.OpcDemo.GetHashtableList();
hashtable_EngineGetOver_EngineTypeID = htList.hashtable_EngineGetOver_EngineTypeID;
hashtable_EngineGetOver_EngineType = htList.hashtable_EngineGetOver_EngineType;
hashtable_EngineGetOver_EngineID = htList.hashtable_EngineGetOver_EngineID;
hashtable_EngineGetOver_OrderForm = htList.hashtable_EngineGetOver_OrderForm;
hashtable_tagTable_OpName_SaveData = htList.hashtable_tagTable_OpName_SaveData;
/// <summary>
/// 工位号与工位上下线类型
/// 0普通工位1正常上线2正常下线3返修上线4返修下线
/// 5 分线上线(总线) 6 分线上线(分线)
hashtableOpName_OpType = htList.hashtableOpName_OpType;
/// <summary>
/// 返修工位哈西表
/// </summary>
hashtable_OpNameRepair = htList.hashtable_OpNameRepair;
/// <summary>
/// MesServerCode
/// </summary>
hashtable_MesServerCode = htList.hashtable_MesServerCode;
/// <summary>
/// MesDll
/// </summary>
hashtable_MesDll = htList.hashtable_MesDll;
hashtable_TagTypeDataType = htList.hashtable_TagTypeDataType;
hashtable_TagType = htList.hashtable_TagType;
hashtable_OpNameRepair = htList.hashtable_OpNameRepair;
hashtable_workStepProperty = htList.hashtable_workStepProperty;
hashtable_QualityMesRead = htList.hashtable_QualityMesRead;
hashtable_IsAllowWork = htList.hashtable_IsAllowWork;
hashtable_WorkGroupIndex = htList.hashtable_WorkGroupIndex;
BasicDataTagValue = htList.BasicDataTagValue; ;
BasicDataTagValueUpDown = htList.BasicDataTagValueUpDown; ;
hashtable_EngineTypeID = htList.hashtable_EngineTypeID; ;
hashtable_tagTable_OpName_SaveData = htList.hashtable_tagTable_OpName_SaveData; ;
//string OpName;
//string MesServerCode;
//string MesDll;
//string workStepProperty;
//string OpNameRepair;
//DataTable dt;
//dt = BaseDataSystemMES.GetMesServerCodeFromMIS();
//if (dt != null)
//{
// for (int i = 0; i < dt.Rows.Count; i++)
// {
// OpName = dt.Rows[i]["工位号"].ToString();
// MesServerCode = dt.Rows[i]["MesServerCode"].ToString();
// MesDll = dt.Rows[i]["MesDll"].ToString();
// hashtable_MesDll.Add(OpName, MesDll);
// hashtable_MesServerCode.Add(OpName, MesServerCode);
// hashtable_IsAllowWork.Add(OpName, 1);
// hashtable_IsConfirmOkGo.Add(OpName, 0);//20141104 ljl
// hashtable_PalletInfo.Add(OpName, 0);//20141104 ljl
// hashtable_WorkGroupIndex.Add(OpName, 1);
// hashtable_EngineGetOver_EngineTypeID.Add(OpName, 0);
// hashtable_EngineGetOver_EngineType.Add(OpName, "");
// hashtable_EngineGetOver_EngineID.Add(OpName, "");
// hashtable_EngineGetOver_OrderForm.Add(OpName, "");
// hashtable_QualityMesRead.Add(OpName, 0);
// hashtable_CheckMaterial.Add(OpName, new bool[16]);
// }
//}
////初始化工步属性
//hashtable_workStepProperty = new Hashtable();
//dt = BaseDataSystemMES.GetworkStepPropertyFromMIS();
//if (dt != null)
//{
// for (int i = 0; i < dt.Rows.Count; i++)
// {
// OpName = dt.Rows[i]["工位号"].ToString();
// workStepProperty = dt.Rows[i]["工步属性"].ToString();
// hashtable_workStepProperty.Add(OpName, workStepProperty);
// }
//}
////返修工位
//hashtable_OpNameRepair = new Hashtable();
//dt = BaseDataSystemMES.GetOpNameRepairFromMIS();
//if (dt != null)
//{
// for (int i = 0; i < dt.Rows.Count; i++)
// {
// OpName = dt.Rows[i]["工位号"].ToString();
// OpNameRepair = dt.Rows[i]["返修工位号"].ToString();
// hashtable_OpNameRepair.Add(OpName, OpNameRepair);
// }
//}
}
/// <summary>
/// 创建合格标志哈西表
/// </summary>
private void InitHashtable_QualityData_GoodBad()
{
//列位置
string index;
//
int tagID;
DataTable dt ;
dt = BaseDataSystemMES.BaseData_tagTable_All_B5A();
hashtable_QualityData_GoodBad_Index = new Hashtable();
for (int i = 0; i < dt.Rows.Count; i++)
{
tagID = Convert.ToInt32(dt.Rows[i]["TagID"]);
index = (dt.Rows[i]["列位置"]).ToString();
hashtable_QualityData_GoodBad_Index.Add(tagID, index);
}
hashtable_EngineTypeID = new Hashtable();
dt = BaseDataSystemMES.BaseData_tagTable_QualityData_EngineTypeID();
for (int i = 0; i < dt.Rows.Count; i++)
{
tagID = Convert.ToInt32(dt.Rows[i]["发动机机型代码"]);
index = (dt.Rows[i]["ID"]).ToString();
hashtable_EngineTypeID.Add(tagID, index);
}
//工位号
DataTable dt_OpName;
//工位号数据来源
DataTable dt_OpNameFrom;
//数据来源对应的TagID
DataTable dt_OpNameTagID;
string opName;
string opNameFrom;
hashtable_QualityData_GoodBad_MIS_OpName = new Hashtable();
// 测量合格标志
// 全部测量数据的测量工位的数据来源
Hashtable hashtable_QualityData_GoodBad_MIS_OpName_OpNameFrom;
// 测量合格标志
// 全部测量数据的测量工位的数据来源的测量变量
Hashtable hashtable_QualityData_GoodBad_MIS_OpName_OpNameFrom_TagID;
dt_OpName = BaseDataSystemMES.BaseData_tagTable_QualityData_GoodBad_MIS_OpName_B5A();
if (dt_OpName != null)
{
//有不合格标志的测量工位
for (int i = 0; i < dt_OpName.Rows.Count; i++)
{
//有不合格标志的测量工位 对应的 数据来源工位号
hashtable_QualityData_GoodBad_MIS_OpName_OpNameFrom = new Hashtable();
opName = dt_OpName.Rows[i]["工位号"].ToString();
dt_OpNameFrom = BaseDataSystemMES.BaseData_tagTable_QualityData_GoodBad_MIS_OpName(opName);
if (dt_OpNameFrom != null)
{
for (int j = 0; j < dt_OpNameFrom.Rows.Count; j++)
{
opNameFrom = dt_OpNameFrom.Rows[j]["数据来源"].ToString();
dt_OpNameTagID = BaseDataSystemMES.BaseData_tagTable_QualityData_GoodBad_MIS_OpName(opName, opNameFrom);
//
hashtable_QualityData_GoodBad_MIS_OpName_OpNameFrom_TagID = new Hashtable();
if (dt_OpNameTagID != null)
{
for (int k = 0; k < dt_OpNameTagID.Rows.Count; k++)
{
tagID = Convert.ToInt32(dt_OpNameTagID.Rows[k]["TagID"]);
hashtable_QualityData_GoodBad_MIS_OpName_OpNameFrom_TagID.Add(tagID, tagID);
}
}
tagID = Convert.ToInt32(dt_OpNameFrom.Rows[j]["TagID"]);
//全部测量数据的测量工位的数据来源的测量变量
hashtable_QualityData_GoodBad_MIS_OpName_OpNameFrom.Add(tagID, hashtable_QualityData_GoodBad_MIS_OpName_OpNameFrom_TagID);
}
}
hashtable_QualityData_GoodBad_MIS_OpName.Add(opName, hashtable_QualityData_GoodBad_MIS_OpName_OpNameFrom);
}
}
}
public static NameValueCollection hashtable_TagTypeID_OpName_ToTagID;
/// <summary>
/// 变量代码与其他字段的对应关系
/// </summary>
public void InitHashtableTagID()
{
//变量代码
string tagID;
//变量名称
string tagName;
//工位号
string opNmae;
//测量位置
string shaftID;
//测量项目
string itemVale;
//变量排序
int tagItemOrderBy;
//变量特点
// 0:没定义1工位合格标志2需要合格标志的测量数据3每个工位的合格标志4:物料5:IQA码6:压装数据7:压装合格标志8(自动拧紧)工位合格标志
int tagProperty;
//列位置
int tagOrderBy;
InitHashtable_QualityData_GoodBad();
//MesServerCode哈希表创建
InitHashtable_MesServerCode();
//列位置
hashtable_tagTable_TagID_TagOrderBy = new Hashtable();
// 变量代码与变量排序
hashtable_tagTable_TagID_TagItemOrderBy = new Hashtable();
// 变量代码与变量特点
// 0:没定义1工位合格标志2需要合格标志的测量数据3每个工位的合格标志4:物料5:IQA码6:压装数据7:压装合格标志8(自动拧紧)工位合格标志
hashtable_tagTable_TagID_TagProperty = new Hashtable();
hashtable_tagTable_OpName_SaveData = new Hashtable();
//工位号与机床状态
//[测量数据发动机在线状态]
m_MachineStatus_OpName = new Hashtable();
////工位号与工件离开 0
////工位号与工件到位 1
////[测量数据发动机在线状态]
//m_WorkStart_OpName = new Hashtable();
////工位号与工件到位时间
////工位号与工件到位 0->1
////[测量数据发动机在线状态]
//m_WorkStart_OpName_Time = new Hashtable();
//工位号与发动机号
//[测量数据发动机在线状态]
m_EngineTrace_OpName = new Hashtable();
m_EngineTrace_OpName_Time = new Hashtable();
//工位号与合格标志
//[测量数据发动机在线状态]
m_QualityMask_OpName = new Hashtable();
//工位号与目标循环时间
hashtableOpName_TargetTime = new Hashtable();
//工位号与线体类型
hashtableOpName_LineType = new Hashtable();
//是否有工位计算机
hashtableOpName_IsHaveComputer = new Hashtable();
//工位号与机型
//[测量数据发动机在线状态]
m_EngineNumberType_OpName = new Hashtable();
//工位号与发动机号
//[测量数据发动机在线状态]
m_EngineNumber_OpName = new Hashtable();
//工位号与订单号
//[测量数据发动机在线状态]
m_OrderForm_OpName = new Hashtable();
//工位号与操作者工号
//[测量数据发动机在线状态]
m_OperatorCode_OpName = new Hashtable();
// <summary>
// 变量名称
// </summary>
hashtableTagID_TagName = new Hashtable();
// <summary>
// 工位号
// </summary>
hashtableTagID_OpName = new Hashtable();
// <summary>
// 数据来源
// </summary>
hashtableTagID_OpNameFrom = new Hashtable();
// <summary>
// 工位名称
// </summary>
hashtableTagID_OpName_Name = new Hashtable();
// <summary>
// 测量位置
// </summary>
hashtableTagID_ShaftID = new Hashtable();
// <summary>
// 测量项目
// </summary>
hashtableTagID_ItemVale = new Hashtable();
hashtable_tagTable_TagID_TagTypeID_All = new Hashtable();
// 工位号与工位上下线类型
// 0普通工位1正常上线2正常下线3返修上线4返修下线
// (5 分线上线 总线) 6 分线上线 总线)
hashtableOpName_OpType = new Hashtable();
// 工位号与大屏幕代码
// 对应LED大屏幕1234
hashtableOpName_LedID = new Hashtable();
// 大屏幕显示产量端口(41104)
hashtableOpName_LedID_Port = new Hashtable();
// 大屏幕显示Andon大屏幕代码 1
hashtableOpName_AndonID = new Hashtable();
// 大屏幕显示Andon端口 (41105)
hashtableOpName_AndonID_Port = new Hashtable();
// 是否有打印机(0,1)
hashtableOpName_IsPrinter = new Hashtable();
// 打印机通讯端口 (缸盖打印机 41101 (发动机上线打印机 41102 (发动机下线打印机 41103
hashtableOpName_IsPrinter_Port = new Hashtable();
m_WorkStart_OpName_Time = new Hashtable();
m_WorkStart_OpName = new Hashtable();
m_MachineStatusPutOn_OpName_Time = new Hashtable();
m_MachineStatusPutOn_OpName = new Hashtable();
m_MachineStatusWorkOn_OpName_Time = new Hashtable();
m_MachineStatusWorkOn_OpName = new Hashtable();
m_MachineStatusAlarm_OpName_Time = new Hashtable();
m_MachineStatusAlarm_OpName = new Hashtable();
m_MachineStatusNoPart_OpName_Time = new Hashtable();
m_MachineStatusNoPart_OpName = new Hashtable();
m_MachineStatusBlock_OpName_Time = new Hashtable();
m_MachineStatusBlock_OpName = new Hashtable();
m_WorkStart_OpName_PartMoveDirection = new Hashtable();
m_PartPalletStatus_OpName_Time = new Hashtable();
m_PartPalletStatus_OpName = new Hashtable();
hashtable_TagTypeID_OpName_ToTagID = new NameValueCollection();
DataTable dt;
DateTime dateTime;
dateTime = DateTime.Now;
dt = BaseDataSystemMES.BaseData_tagTable_All();
//变量类型代码
int TagTypeID;
for (int i = 0; i < dt.Rows.Count; i++)
{
tagID = dt.Rows[i]["TagID"].ToString ();
tagName = Convert.ToString(dt.Rows[i]["TagName"]);
opNmae = Convert.ToString(dt.Rows[i]["工位号"]);
shaftID = Convert.ToString(dt.Rows[i]["测量位置"]);
itemVale = Convert.ToString(dt.Rows[i]["测量项目"]);
TagTypeID = Convert.ToInt32(dt.Rows[i]["变量类型代码"]);
tagItemOrderBy = Convert.ToInt32(dt.Rows[i]["变量排序"]);
tagProperty = Convert.ToInt32(dt.Rows[i]["变量特点"]);
tagOrderBy = Convert.ToInt32(dt.Rows[i]["列位置"]);
hashtableTagID_TagName.Add(tagID, tagName);
hashtableTagID_OpName.Add(tagID, opNmae);
hashtableTagID_ShaftID.Add(tagID, shaftID);
hashtableTagID_ItemVale.Add(tagID, itemVale);//列位置
hashtable_tagTable_TagID_TagTypeID_All.Add(tagID, TagTypeID);
hashtable_tagTable_TagID_TagItemOrderBy.Add(tagID, tagItemOrderBy);
hashtable_tagTable_TagID_TagProperty.Add(tagID, tagProperty);
hashtable_tagTable_TagID_TagOrderBy.Add(tagID, tagOrderBy);
}
dt = BaseDataSystemMES.BaseData_tagTable_OpName();
for (int i = 0; i < dt.Rows.Count; i++)
{
//是否通过监控系统保存数据
// 1:通过监控系统保存采集的质量数据;0:不通过监控系统保存采集的质量数据
hashtable_tagTable_OpName_SaveData.Add(Convert.ToString(dt.Rows[i]["工位号"]), Convert.ToInt32(dt.Rows[i]["是否通过监控系统保存数据"]));
hashtableOpName_TargetTime.Add(Convert.ToString(dt.Rows[i]["工位号"]), Convert.ToString(dt.Rows[i]["目标循环时间"]));
hashtableOpName_LineType.Add(Convert.ToString(dt.Rows[i]["工位号"]), Convert.ToString(dt.Rows[i]["线体类型"]));
hashtableOpName_IsHaveComputer.Add(Convert.ToString(dt.Rows[i]["工位号"]), Convert.ToString(dt.Rows[i]["是否有工位计算机"]));
//用于LED显示
// [MES_计划BOM_工位与名称]
// 工位上下线类型
//0普通工位1正常上线2正常下线3返修上线4返修下线
hashtableOpName_OpType.Add(Convert.ToString(dt.Rows[i]["工位号"]), Convert.ToInt32(dt.Rows[i]["工位上下线类型"]));
hashtableOpName_LedID.Add(Convert.ToString(dt.Rows[i]["工位号"]), Convert.ToInt32(dt.Rows[i]["大屏幕代码"]));
m_WorkStart_OpName_Time.Add(Convert.ToString(dt.Rows[i]["工位号"]), dateTime);
m_WorkStart_OpName.Add(Convert.ToString(dt.Rows[i]["工位号"]), 0);
m_MachineStatusPutOn_OpName_Time.Add(Convert.ToString(dt.Rows[i]["工位号"]), dateTime);
m_MachineStatusPutOn_OpName.Add(Convert.ToString(dt.Rows[i]["工位号"]), 0);
m_MachineStatusWorkOn_OpName_Time.Add(Convert.ToString(dt.Rows[i]["工位号"]), dateTime);
m_MachineStatusWorkOn_OpName.Add(Convert.ToString(dt.Rows[i]["工位号"]), 0);
m_MachineStatusAlarm_OpName_Time.Add(Convert.ToString(dt.Rows[i]["工位号"]), dateTime);
m_MachineStatusAlarm_OpName.Add(Convert.ToString(dt.Rows[i]["工位号"]), 0);
m_MachineStatusNoPart_OpName_Time.Add(Convert.ToString(dt.Rows[i]["工位号"]), dateTime);
m_MachineStatusNoPart_OpName.Add(Convert.ToString(dt.Rows[i]["工位号"]), 0);
m_MachineStatusBlock_OpName_Time.Add(Convert.ToString(dt.Rows[i]["工位号"]), dateTime);
m_MachineStatusBlock_OpName.Add(Convert.ToString(dt.Rows[i]["工位号"]), 0);
m_WorkStart_OpName_PartMoveDirection.Add(Convert.ToString(dt.Rows[i]["工位号"]), 0);
m_PartPalletStatus_OpName_Time.Add(Convert.ToString(dt.Rows[i]["工位号"]), dateTime);
m_PartPalletStatus_OpName.Add(Convert.ToString(dt.Rows[i]["工位号"]), 0);
try
{
hashtableOpName_LedID_Port.Add(Convert.ToString(dt.Rows[i]["工位号"]), Convert.ToInt32(dt.Rows[i]["大屏幕显示产量端口"]));
}
catch { }
try
{
hashtableOpName_AndonID.Add(Convert.ToString(dt.Rows[i]["工位号"]), Convert.ToInt32(dt.Rows[i]["大屏幕显示Andon大屏幕代码"]));
}
catch { }
try
{
hashtableOpName_AndonID_Port.Add(Convert.ToString(dt.Rows[i]["工位号"]), Convert.ToInt32(dt.Rows[i]["大屏幕显示Andon端口"]));
}
catch { }
try { hashtableOpName_IsPrinter.Add(Convert.ToString(dt.Rows[i]["工位号"]), Convert.ToInt32(dt.Rows[i]["是否有打印机"])); }
catch { }
try
{
hashtableOpName_IsPrinter_Port.Add(Convert.ToString(dt.Rows[i]["工位号"]), Convert.ToInt32(dt.Rows[i]["打印机通讯端口"]));
}
catch { }
}
//20170310 CLB新加
dt = BaseDataSystemMES.BaseData_tagTable_OpcServerMES_ALL_CF();
for (int i = 0; i < dt.Rows.Count; i++)
{
try
{
hashtable_TagTypeID_OpName_ToTagID.Add(Convert.ToString(dt.Rows[i]["工位号"]) + "_" + Convert.ToString(dt.Rows[i]["变量类型代码"]), Convert.ToString(dt.Rows[i]["TagID"]));
//hashtable_TagTypeID_OpName_ToTagID;
}
catch(Exception err)
{
}
}
}
}
}

View File

@@ -0,0 +1,98 @@
using System;
using System.Data;
using System.Windows.Forms;
//using bizFacade;
//using DataLinkMesWork;
//using SystemFramework;
namespace MesServerWork
{
public partial class MIS_BASE
{
/// <summary>
/// 设备保养计划
/// </summary>
/// <param name="OpName"></param>
/// <param name="MachineType"></param>
/// <param name="PlanID"></param>
public delegate void MachinePlan_Invoke(string OpName, string MachineType, string PlanID);
/// <summary>
/// 设备保养计划
/// </summary>
public MachinePlan_Invoke machinePlan_Invoke;
/// <summary>
/// 设备保养
/// </summary>
/// <param name="OpName"></param>
/// <param name="MachineType">设备保养类型</param>
/// <param name="PlanID">工作日历流水号</param>
public void MachinePlan(string OpName, string MachineType, string PlanID)
{
try
{
string SendMessage;
SendMessage = "MES|MachinePlan|" + OpName + "|" + MachineType + "&" + PlanID;
asyncSendMessage(SendMessage);
}
catch (Exception err)
{
////ApplicationLog.WriteLog(err, "MachinePlan");
}
}
/// <summary>
/// 设备保养计划Timer
/// </summary>
private Timer timer_Machine;
/// <summary>
/// 初始化设备保养计划
/// </summary>
public void InitMachinePlan(MachinePlan_Invoke machinePlan_Invoke)
{
this.machinePlan_Invoke = machinePlan_Invoke;
timer_Machine = new Timer();
timer_Machine.Interval = 60000;//每隔一分钟查询一次
timer_Machine.Tick += new EventHandler(timer_Machine_Tick);
timer_Machine.Start();
}
/// <summary>
/// 分钟调度
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void timer_Machine_Tick(object sender, EventArgs e)
{
try
{
//if (ApplicationConfig.Is_MachinePlan == 1)
//{
// DataTable dt;
// string opName;
// string machineType;//保养类型代码
// string planID;//工作日历流水号
// BaseDataSystemMES.MachinePlan_Select(out dt);
// if (dt != null)
// {
// if (dt.Rows.Count > 0)
// {
// for (int i = 0; i < dt.Rows.Count; i++)
// {
// opName = dt.Rows[i]["工位号"].ToString();
// machineType = dt.Rows[i]["保养类型代码"].ToString();
// planID = dt.Rows[i]["工作日历流水号"].ToString();
// BaseDataSystemMES.Rolling_news_Add(opName, opName + "工位有设备保养计划,请相关人员进行保养!!!");
// BeginInvoke(machinePlan_Invoke, new object[] { opName, machineType, planID });
// }
// }
// }
//}
}
catch (Exception err)
{
////ApplicationLog.WriteLog(err, "timer_Machine_Tick");
}
}
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,535 @@
using DoWhatPlc;
using System;
//using SystemFramework;
//using OpcData;
namespace MesServerWork
{
public partial class MIS_BASE
{
static public void WritePLC(int tagType, string opName, object tagValue)
{
Write_TagTypeID(tagType, opName, tagValue);
}
/// <summary>
///
/// </summary>
/// <param name="message"></param>
public delegate void DemoHandler(object sender, CustomeEvetnArgs e);
/// <summary>
///
/// </summary>
public static event DemoHandler OPCTagDataDemo;
//static private void Write_MesReadOver(string opName, object tagValue)
//{
// int tagTypeID = 0;
// string msg;
// try
// {
// string tagTypeCodeID = "20";
// DtWebApi.ReadWritePLC.Write_TagValueByTagTypeID(tagTypeCodeID, opName, tagValue); ;
// }
// catch (Exception err)
// {
// ////ApplicationLog.WriteLog(err, "Write_TagValueByTagTypeName_FUNC");
// }
//}
/// <summary>
/// 根据tagType,工位号写入PLC对应值
/// </summary>
/// <param name="opName"></param>
/// <param name="tagValue"></param>
static private void Write_TagValueByTagTypeName(string cmd, string opName,object tagValue)
{
int tagTypeID = 0;
string msg;
try
{
DtWebApi.ReadWritePLC.Write_TagValueByTagTypeName( cmd, opName, tagValue);
//tagTypeID = Convert.ToInt32(MesDataFunction.OpcOperation.hashtable_TagType[cmd]);
//MesDataFunction.OpcOperation.WriteTagValue(tagTypeID, opName, tagValue);
}
catch (Exception err)
{
////ApplicationLog.WriteLog(err, "Write_TagValueByTagTypeName_FUNC");
}
}
/// <summary>
/// 根据TagTypeID,工位号写入PLC对应值
/// </summary>
/// <param name="TagTypeID"></param>
/// <param name="tagValue"></param>
static private void Write_TagValueByTagTypeID(int tagTypeID, string opName, object tagValue)
{
string msg;
object tagValueOb;
object newTagValue= tagValue;
try
{
DtWebApi.ReadWritePLC.Write_TagValueByTagTypeID(tagTypeID.ToString(), opName, tagValue);
// MesDataFunction.OpcOperation.WriteTagValue(tagTypeID, opName, tagValue);
}
catch (Exception err)
{
////ApplicationLog.WriteLog(err, "Write_TagValueByTagTypeID_FUNC");
}
}
/// <summary>
/// 通过TagID写入PLC数据
/// </summary>
/// <param name="opName"></param>
/// <param name="tagValue"></param>
static private void Write_TagValueByTagID(string TagID, object tagValue)
{
string msg;
//tagValue = "0";
try
{
DtWebApi.ReadWritePLC.Write_TagValueByTagID(TagID, tagValue);
//MesDataFunction.OpcOperation.WritePLC(TagID, tagValue);
}
catch (Exception err)
{
////ApplicationLog.WriteLog(err, "Write_TagValueByTagID_FUNC");
}
}
public static void Write_TagTypeID(int tagTypeID, string opName, object tagValue)
{
Write_TagValueByTagTypeID(tagTypeID, opName, tagValue);
}
public static void Write_TagID(string TagID, object tagValue)
{
Write_TagValueByTagID(TagID, tagValue);
}
/// <summary>
/// 清空MES信号 MES传递机型(5) 允许工作(66) 合格放行(51) 不合格放行(8) 拧紧结束(67) 工作完成(7) 保存完成(20) 加工时间保存完成(54) 匹配完成(68) 默认false
/// </summary>
/// <param name="opName"></param>
/// <param name="false"></param>
public static void Write_ClearMesMoby(string opName)
{
MIS_BASE.Write_EngineTypeGetOver_MES(opName, false);
MIS_BASE.Write_FixAllow(opName, false);
MIS_BASE.Write_ConfirmOkGo(opName, false);
MIS_BASE.Write_FalseGO(opName, false);
MIS_BASE.Write_FixOver(opName, false);
MIS_BASE.Write_MaterialVerifyOver(opName, false);
MIS_BASE.Write_MesReadOver(opName, false);
MIS_BASE.Write_MachineTime_ReadOver(opName, false);
MIS_BASE.Write_MatchingCompleted(opName, false);
}
/// <summary>
/// 订单号(string)(25)
/// </summary>
/// <param name="opName"></param>
/// <param name="tagValue"></param>
public static void Write_OrderForm(string opName, string tagValue)
{
string cmd = "OrderForm";
Write_TagValueByTagTypeName(cmd, opName, tagValue);
}
/// <summary>
/// 总成编号(string)(26)
/// </summary>
/// <param name="opName"></param>
/// <param name="tagValue"></param>
public static void Write_AssemblyCode(string opName, string tagValue)
{
string cmd = "AssemblyCode";
Write_TagValueByTagTypeName(cmd, opName, tagValue);
}
/// <summary>
/// 配方号1(dint)(27)
/// </summary>
/// <param name="opName"></param>
/// <param name="tagValue"></param>
public static void Write_Recipe1(string opName, int tagValue)
{
string cmd = "Recipe1";
Write_TagValueByTagTypeName(cmd, opName, tagValue);
}
/// <summary>
/// 配方号2(dint)(28)
/// </summary>
/// <param name="opName"></param>
/// <param name="tagValue"></param>
public static void Write_Recipe2(string opName, int tagValue)
{
tagValue = 0;
string cmd = "Recipe2";
Write_TagValueByTagTypeName(cmd, opName, tagValue);
}
/// <summary>
/// 订单号(string)(61)
/// </summary>
/// <param name="opName"></param>
/// <param name="tagValue"></param>
public static void Write_OrderForm_MES(string opName, string tagValue)
{
string cmd = "OrderForm_MES";
Write_TagValueByTagTypeName(cmd, opName, tagValue);
}
/// <summary>
/// 总成编号(string)(62)
/// </summary>
/// <param name="opName"></param>
/// <param name="tagValue"></param>
public static void Write_AssemblyCode_MES(string opName, string tagValue)
{
string cmd = "AssemblyCode_MES";
Write_TagValueByTagTypeName(cmd, opName, tagValue);
}
/// <summary>
/// 配方号1(dint)(63)
/// </summary>
/// <param name="opName"></param>
/// <param name="tagValue"></param>
public static void Write_Recipe1_MES(string opName, int tagValue)
{
string cmd = "Recipe1_MES";
Write_TagValueByTagTypeName(cmd, opName, tagValue);
}
/// <summary>
/// 配方号2(dint)(64)
/// </summary>
/// <param name="opName"></param>
/// <param name="tagValue"></param>
public static void Write_Recipe2_MES(string opName, int tagValue)
{
string cmd = "Recipe2_MES";
Write_TagValueByTagTypeName(cmd, opName, tagValue);
}
/// <summary>
/// 各个工位返修状态(4)
/// </summary>
/// <param name="opName"></param>
/// <param name="tagValue"></param>
public static void Write_RepairPathString(string opName, string tagValue)
{
string cmd = "RepairPathString";
Write_TagValueByTagTypeName(cmd, opName, tagValue);
}
/// <summary>
/// MES保存完数据(必须MIS)(X102.2)(20)
/// </summary>
/// <param name="opName"></param>
/// <param name="tagValue"></param>
public static void Write_MesReadOver(string opName, bool tagValue)
{
string cmd = "MesReadOver";
Write_TagValueByTagTypeName(cmd, opName, tagValue);
}
/// <summary>
/// 加工时间保存完数据 DBX102.1 (54)
/// </summary>
/// <param name="opName"></param>
/// <param name="tagValue"></param>
public static void Write_MachineTime_ReadOver(string opName, bool tagValue)
{
string cmd = "MachineTime_ReadOver";
Write_TagValueByTagTypeName(cmd, opName, tagValue);
}
/// <summary>
/// 工位三种状态在线、离线、屏蔽012(DBB116)(79)
/// </summary>
/// <param name="opName"></param>
/// <param name="tagValue"></param>
public static void Write_OnLineState(string opName, int tagValue)
{
string cmd = "OnLineState";
Write_TagValueByTagTypeName(cmd, opName,Convert .ToInt16 ( tagValue));
}
/// <summary>
/// 托盘编号PLC)(80)
/// </summary>
/// <param name="opName"></param>
/// <param name="tagValue"></param>
public static void Write_PalletCode(string opName, int tagValue)
{
string cmd = "PartPalletCode";
Write_TagValueByTagTypeName(cmd, opName, Convert.ToInt16(tagValue));
}
/// <summary>
/// MES向PLC传递机型(5)
/// </summary>
/// <param name="opName"></param>
/// <param name="tagValue"></param>
public static void Write_EngineTypeGetOver_MES(string opName, bool tagValue)
{
string cmd = "EngineTypeGetOverMES";
Write_TagValueByTagTypeName(cmd, opName, tagValue);
}
/// <summary>
/// 工作完成(7)
/// </summary>
/// <param name="opName"></param>
/// <param name="tagValue"></param>
public static void Write_MaterialVerifyOver(string opName, bool tagValue)
{
string cmd = "MaterialVerifyOver";
Write_TagValueByTagTypeName(cmd, opName, tagValue);
}
/// <summary>
/// 合格方式放行(51)
/// </summary>
/// <param name="opName"></param>
/// <param name="tagValue"></param>
public static void Write_ConfirmOkGo(string opName, bool tagValue)
{
string cmd = "ConfirmOkGo";
Write_TagValueByTagTypeName(cmd, opName, tagValue);
}
/// <summary>
/// 允许拧紧(66)
/// </summary>
/// <param name="opName"></param>
/// <param name="tagValue"></param>
public static void Write_FixAllow(string opName, bool tagValue)
{
string cmd = "FixAllow";
Write_TagValueByTagTypeName(cmd, opName, tagValue);
}
/// <summary>
/// 拧紧结束(67)
/// </summary>
/// <param name="opName"></param>
/// <param name="tagValue"></param>
public static void Write_FixOver(string opName, bool tagValue)
{
string cmd = "FixOver";
Write_TagValueByTagTypeName(cmd, opName, tagValue);
}
/// <summary>
///返修上线,在上线工位MES依据工件情况设定为返修件PLC见到MES设定为1后将返修标志写入到DBX0.2为1
///MES设定完返修返修上线后MES清空该信号
///DBX3.7(72)
/// </summary>
/// <param name="opName"></param>
/// <param name="tagValue"></param>
public static void Write_RepairUpline_MES(string opName, bool tagValue)
{
string cmd = "RepairUplineMES";
Write_TagValueByTagTypeName(cmd, opName, tagValue);
}
/// <summary>
/// 匹配完成(68)
/// </summary>
/// <param name="opName"></param>
/// <param name="tagValue"></param>
public static void Write_MatchingCompleted(string opName, bool tagValue)
{
string cmd = "MatchingCompleted";
Write_TagValueByTagTypeName(cmd, opName, tagValue);
}
/// <summary>
/// 不合格放行(8)
/// </summary>
/// <param name="opName"></param>
/// <param name="tagValue"></param>
public static void Write_FalseGO(string opName, bool tagValue)
{
string cmd = "FalseGo";
Write_TagValueByTagTypeName(cmd, opName, tagValue);
}
/// <summary>
/// 匹配结果(69)
/// </summary>
/// <param name="opName"></param>
/// <param name="tagValue"></param>
public static void Write_Match(string opName, bool tagValue)
{
string cmd = "Match";
Write_TagValueByTagTypeName(cmd, opName, tagValue);
}
/// <summary>
/// 变量类型代码=73机型代码。DBB404~405 机型标志
/// </summary>
/// <param name="opName"></param>
/// <param name="tagValue"></param>
public static void Write_EngineTypeID_MES(string opName, int tagValue)
{
string cmd = "EngineTypeID_MES";
Write_TagValueByTagTypeName(cmd, opName, Convert.ToInt16(tagValue));
}
/// <summary>
/// 变量类型代码=74零件编号。DBB406~445 发动机编号
/// </summary>
/// <param name="opName"></param>
/// <param name="tagValue"></param>
public static void Write_EngineID_MES(string opName, string tagValue)
{
string cmd = "EngineID_MES";
Write_TagValueByTagTypeName(cmd, opName, tagValue);
}
//public static void Write_OrderForm_MES(string opName, string tagValue)
//{
// string tagTypeCodeID = "116";
// DtWebApi.ReadWritePLC.WritePLC(tagTypeCodeID, opName, tagValue);
//}
//WritePLC(string tagTypeCodeID, string opName, object tagValue)
/// <summary>
/// 变量类型代码=75零件机型。DBB446~485 发动机机型
/// </summary>
/// <param name="opName"></param>
/// <param name="tagValue"></param>
public static void Write_EngineType_MES(string opName, string tagValue)
{
string cmd = "EngineType_MES";
Write_TagValueByTagTypeName(cmd, opName, tagValue);
}
/// <summary>
/// 拧紧序号(77)
/// </summary>
/// <param name="opName"></param>
/// <param name="tagValue"></param>
public static void Write_ProcessCode(string opName, int tagValue)
{
string cmd = "ProcessCode";
Write_TagValueByTagTypeName(cmd, opName, Convert.ToInt16(tagValue));
}
/// <summary>
/// 套筒号(88)
/// </summary>
/// <param name="opName"></param>
/// <param name="tagValue"></param>
public static void Write_BoltCode(string opName, int tagValue)
{
string cmd = "BoltCode";
Write_TagValueByTagTypeName(cmd, opName, Convert.ToInt16(tagValue));
}
/// <summary>
/// 空托盘放行(DBX2.2)(6)
/// </summary>
/// <param name="opName"></param>
/// <param name="tagValue"></param>
public static void Write_PartPalletGoOver(string opName, int tagValue)
{
string cmd = "PartPalletGoOver";
Write_TagValueByTagTypeName(cmd, opName, Convert.ToInt16(tagValue));
}
/// <summary>
/// 自动手动申请工件编号,0是自动方式1手动方式。切换时(DBX2.1)(71)
/// </summary>
/// <param name="opName"></param>
/// <param name="tagValue"></param>
public static void Write_IsAutoGetEngineID(string opName, int tagValue)
{
string cmd = "IsAutoGetEngineID";
Write_TagValueByTagTypeName(cmd, opName, Convert.ToInt16(tagValue));
}
/// <summary>
/// 正常拧紧时选择(DBX100.3)(81)
/// </summary>
/// <param name="opName"></param>
/// <param name="tagValue"></param>
public static void Write_Normal(string opName, int tagValue)
{
string cmd = "Normal";
Write_TagValueByTagTypeName(cmd, opName, Convert.ToInt16(tagValue));
}
/// <summary>
/// 备用拧紧时选择(DBX100.4)(82)
/// </summary>
/// <param name="opName"></param>
/// <param name="tagValue"></param>
public static void Write_UnNormal(string opName, int tagValue)
{
string cmd = "UnNormal";
Write_TagValueByTagTypeName(cmd, opName, Convert.ToInt16(tagValue));
}
/// <summary>
/// 变量类型代码=52复位设备MESDBX0.6
/// 通知PLC复位设备
/// </summary>
/// <param name="opName"></param>
/// <param name="tagValue"></param>
public static void Write_ResetDevice(string opName, bool tagValue)
{
string cmd = "PartLoadFinish";
Write_TagValueByTagTypeName(cmd, opName, tagValue);
}
/// <summary>
///托盘状态(22)
/// </summary>
/// <param name="opName"></param>
/// <param name="tagValue"></param>
public static void Write_PalletInfo(string opName, int tagValue)
{
string cmd = "PalletInfo";
Write_TagValueByTagTypeName(cmd, opName, Convert.ToInt16(tagValue));
}
/// <summary>
/// 返修标志(93)
/// </summary>
/// <param name="opName"></param>
/// <param name="tagValue"></param>
public static void Write_RepairStatusMES(string opName, int tagValue)
{
string cmd = "RepairStatusMES";
Write_TagValueByTagTypeName(cmd, opName, Convert.ToInt16(tagValue));
}
/// <summary>
/// MES通知PLC修改托盘状态成功
/// </summary>
/// <param name="opName"></param>
/// <param name="tagValue"></param>
public static void Write_UpdatePalletOK(string opName, bool tagValue)
{
string cmd = "UpdatePalletOK";
Write_TagValueByTagTypeName(cmd, opName, tagValue);
}
}
}

View File

@@ -0,0 +1,68 @@
using System;
using System.Data;
using System.Collections;
//using BasicData;
//using bizFacade;
//using SystemFramework;
using System.Configuration;
using bizFacade;
using DoWhatPlc;
namespace MesServerWork
{
public partial class MIS_BASE
{
/// <summary>
/// 读取质量数据
/// </summary>
/// <param name="valueList"></param>
public static void ReadPLC_Sync_ValueList(string opName, out Hashtable valueList)
{
valueList = null;
ReadPLCData(opName, out valueList);
}
/// <summary>
/// 根据工位号 同步读取数据
/// </summary>
/// <param name="opName">工位号</param>
/// <param name="valueList">PLC仅仅值列表</param>
private static void ReadPLCData(string opName, out Hashtable valueList)
{
valueList = new Hashtable();
QualityDataType qualityDataType;
qualityDataType = new QualityDataType();
System.Data.DataTable dt;
dt = BaseDataSystemMES.BaseData_tagTable_QualityData_Item_B5A();
object tagValueStr = "0";
for (int i = 0; i < dt.Rows.Count; i++)
{
if (opName == dt.Rows[i]["工位号"].ToString())
{
qualityDataType.tagID = dt.Rows[i]["TagID"].ToString ();
qualityDataType.tagTypeID = Convert.ToInt32(dt.Rows[i]["TagTypeID"]);//变量类型
qualityDataType.opName = opName;//
qualityDataType.isGoodBad = 192;//
qualityDataType.tagQuality = 192;//
qualityDataType.tagValueType = Convert.ToInt32(dt.Rows[i]["变量类型代码"]);
qualityDataType.tagOrderBy = Convert.ToInt32(dt.Rows[i]["列位置"]);
qualityDataType.tagItemOrderBy = Convert.ToInt32(dt.Rows[i]["变量排序"]);
qualityDataType.tagProperty = Convert.ToInt32(dt.Rows[i]["变量特点"]); ;//变量特点
MIS_BASE.Read_TagID(qualityDataType.tagID, out tagValueStr);
if (qualityDataType.tagTypeID == 18)
{
qualityDataType.tagValue = Convert.ToInt32(tagValueStr);//变量值
}
else
{
qualityDataType.tagValue = tagValueStr;//变量值
}
valueList.Add(qualityDataType.tagID, qualityDataType);
}
}
}
}
}

View File

@@ -0,0 +1,106 @@
using System;
using System.Data;
using System.Collections;
//using BasicData;
////using bizFacade;
//using SystemFramework;
using System.Configuration;
//using MesWork;
using MQTTnet.Client.Connecting;
using MQTTnet.Client.Disconnecting;
using MQTTnet.Client.Receiving;
using MQTTnet;
using MesWorkMqtt;
using System.Threading.Tasks;
namespace MesServerWork
{
public partial class MIS_BASE
{
/// <summary>
///
/// </summary>
public static string MqttTargetTopic = ConfigurationManager.AppSettings["MqttTargetTopic"];
/// <summary>
///
/// </summary>
static new MesWebFun_base.MisWebInterface misWebInterface = new MesWebFun_base.MisWebInterface();
/// <summary>
///
/// </summary>
static readonly Object locker = new Object();
/// <summary>
/// 发消息给通讯服务器
/// </summary>
/// <param name="Message"></param>
public static string asyncSendMessage(string Message)
{
lock (locker)
{
//"MES|MachinePlan|OpName|Value
var array = Message.Split('|');
var cmd = array[1];
var opName = array[2];
var topic = $"{MqttTargetTopic}/{opName}";
Task.Run(() => Mqtt.Publish(topic, Message));
var responseStr = misWebInterface.WebSocket_Function(Message);
if (responseStr.Length > 0)
{
Task.Run(() => Mqtt.Publish(topic, $"MES|{cmd}_Resources|{opName}|{responseStr}"));
}
return responseStr;
}
}
//public static string asyncSendMessage(Mqtt Mqtt1, string Message)
//{
// lock (locker)
// {
// //"MES|MachinePlan|OpName|Value
// var array = Message.Split('|');
// var cmd = array[1];
// var opName = array[2];
// var topic = $"{MqttTargetTopic}/{opName}";
// Task.Run(() => Mqtt1.Publish(topic, Message));
// var responseStr = misWebInterface.WebSocket_Function(Message);
// if (responseStr.Length > 0)
// {
// Task.Run(() => Mqtt1.Publish(topic, $"MES|{cmd}_Resources|{opName}|{responseStr}"));
// }
// return responseStr;
// return "";
// }
//}
public static string asyncSendMessageDemo(string Message)
{
lock (locker)
{
//"MES|MachinePlan|OpName|Value
var array = Message.Split('|');
var cmd = array[1];
var opName = array[2];
var topic = $"{MqttTargetTopic}/{opName}";
//Mqtt.Publish(topic, Message);
string responseStr = "";
//var responseStr = misWebInterface.WebSocket_Function(Message);
//if (responseStr.Length > 0)
//{
// Mqtt.Publish(topic, $"MES|{cmd}_Resources|{opName}|{responseStr}");
//}
return responseStr;
}
}
}
}

View File

@@ -0,0 +1,25 @@
//using bizFacade;
using System;
using System.Collections;
using System.Data;
//using SystemFramework;
namespace MisDataFunction
{
partial class Function
{
private static void Heartbeat(string opName, string tagValue)
{
if (tagValue == "1")
{
Write_TagTypeID(15, opName, true);
}
else
{
Write_TagTypeID(15, opName, false);
}
}
}
}

View File

@@ -0,0 +1,326 @@
using bizFacade;
using DoWhatPlc;
using MesServerWork;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
//using SystemFramework;
namespace MisDataFunction
{
public partial class Function: MIS_BASE
{
///<summary>
/// 处理MIS逻辑 TagName 变量类型代码 变量类型名称
/// WorkStart 2 工件到位。托盘到达工位,并且托盘上有工件。
///RepairPartStatusPLC 3 备用
///RepairPathString 4 工位返修字符串121211112222111,前2位是西门子字符串格式第一位是总长度第二位是实际长度
///EngineTypeGetOverMES 5 MES传递总成信息给PLC上线工位
///PartPalletGoOver 6 上线工位。0正常工作1空托盘放行PLC读取到此标志不走申请上线逻辑。
///MaterialVerifyOver 7 MES保存完质量数据物料数据等与PLC信号交互完成后通知PLC所以工步都完成才可以放行工件正常工作时工件放行的必要条件。
///FalseGo 8 按MES界面[不合格放行] 按钮MES发送此信号。操作者判断工件不合格通知设备按不合格方式放行工件工件流转到返修下线工位后返修下线。MES工作完成MES0.3=1MES合格放行MES0.5=0MES0.4=1
///EngineTypeID 9 MES发动机机型标志(必须PLC)
///EngineID 10 MES发动机编号(必须PLC)
///EngineType 11 MES发动机机型(必须PLC)
///PartPalletStatus 13 MES激发变量托盘到位离开(必须PLC)
///HeartBeatPLC 14 心跳处理PLC收到MES心跳信号后PLC延时5秒后数值取反再写回PLC写回PLC开始计时如果5秒钟MES无反馈报通讯故障。
///HeartBeatMIS 15 间隔时间5S心跳处理。收到PLC心跳信号后MES按原值回写。PLC收到MES信号后延时5秒取反写入以此循环。
///TargetTimeRead 16 MES允许可读工位运行时间
///MachineTargetTime 17 目标运行时间
///MachineActualTime 18 实际运行时间
///MesRead 19 质量数据可以读数据
///MesReadOver 20 MES保存完数据(必须MIS)
///QualityMask 21 质量数据工位合格标志0:没有工作1合格 2 :不合格(必须PLC)
///PalletInfo 22 0空托盘1合格件2不合格件
///RepairStatusPLC 23 0正常件1返修件
///Reserved_3 24 备用
///Reserved_4 25 备用
///Reserved_5 26 备用
///Reserved_6 27 备用
///Reserved_7 28 备用
///Reserved_8 29 备用
///Reserved_9 30 备用
///Reserved_10 31 备用
///Reserved_11 32 备用
///Reserved_12 33 备用
///Reserved_13 34 备用
///Reserved_14 35 备用
///PLCSPareint1 36 备用
///PLCSPareint2 37 备用
///PLCSPareint3 38 备用
///PLCSarestring1 39 备用
///PLCSarestring2 40 备用
///MarkID 42 机体打标号MES前2位是西门子字符串格式第一位是总长度第二位是实际长度
///PartLoad 43 上线工位PLC向MES申请总成编号。收到该信号后MES将机型标志DBB22 ~23、总成号DBB24 ~63、总成机型DBB64 ~103写入PLC。之后MES通过信号“传递机型DBX0.1”通知PLC。
///EngineTypeGetOverPLC 44 PLC将机型标志DBB50…51、工件编号DBB52…101、产品型号DBB102…187、托盘编号DBB188…189准备完毕后通知MES。
///PartLoadOK 48 备用
///Reserved_18 49 备用
///PalletDown 50 暂时保留,项目未使用
///ConfirmOkGo 51 按MES界面[合格放行] 按钮MES发送此信号。操作者判断工件合格通知设备工件按合格方式放行工件。MES工作完成MES0.3=1MES合格放行MES0.5=1MES0.4=0
///ResetDevice 52 针对手动工位无HMI需要复位设备在MES页面操作。
///UnloadCompleted 53 暂时保留,项目未使用
///MachineTime_ReadOver 54 备用
///Reserved_19 58 备用
///FixOK 59 手动拧紧工位单工步螺栓拧紧完成通知PC读取数据。
///Reserved_21 61 备用
///Reserved_22 62 备用
///Reserved_23 63 备用
///Reserved_24 64 备用
///Reserved_25 65 备用
///FixAllow 66 设备工作的必须信号,对于有物料验证的工位MES验证完成给出此信号对于无物料验证工位MES直接给出此信号。
///FixOver 67 用于手动拧紧且有质量数据工位。通知设备当前工步拧紧螺钉工作结束。
///MatchingCompleted 68 分线上总线匹配成功是1不成功是0。
///Match 69 分线上总线匹配成功是1不成功是0。
///Reserved_2 70 备用
///IsAutoGetEngineID 71 自动手动申请工件编号。0是自动方式1手动方式。暂时保留生成流水号方式是在数据库中实现的
///RepairUplineMES 72 上线清空MOBY针对上线工位通知PLC从新开始申请上线流程
///EngineTypeID_MES 73 MES发动机机型标志(必须MES)
///EngineID_MES 74 MES发动机编号(必须MES)
///EngineType_MES 75 MES发动机机型(必须MES)
///Reserved_20 76 备用
///ProcessCode 77 手动拧紧工位由MES通知PLC拧紧序号
///OnLineState 79 通过线体工位PC实现下达工位工作状态工位有三种状态在线、离线、屏蔽。在线0正常状态实现正常功能。1离线:设备脱离MES工作进入不交互模式。
///PartPalletCode 80 托盘编号(B5A)
///BoltCode 88 手动拧紧工位指导PLC所用套筒
///RepairStatus 93 0正常件1返修件。对于上线工位MES给出是正常上线还是返修上线,返修路径
///Reserved_15 110 备用
///Reserved_16 111 备用
///Reserved_17 112 备用
///SPareint1 113 备用int1
///SPareint2 114 备用int2
///SPareint3 115 备用int3
///Sparestring1 116 备用字符串1
///Sparestring2 117 备用字符串2
///MachineStatusPutOn 1000 机床上电(必须PLC)
///MachineStatusWorkOn 1001 循环开始(必须PLC)
///MachineStatusAlarm 1002 机床故障(必须PLC)
///MachineStatusNoPart 1003 上料无件(必须PLC)
///MachineStatusBlock 1004 下料堵塞(必须PLC)
///Alarm 103 设备报警
/// </summary>
/// <param name = "e" ></ param >
public static void MIS_Funtion(object e)
{
try
{
string recData = e.ToString();
string[] dataArray = recData.Split('|');
if (dataArray.Length != 4)
return;
//消息来源
string m_Source = dataArray[0].ToString();
//消息类型
string m_Command = dataArray[1].ToString();
//工位号
string m_OpName = dataArray[2].ToString();
//消息参数
string m_Value = dataArray[3].ToString();
DoWhatPlc.ReturnValueString rv = Newtonsoft.Json.JsonConvert.DeserializeObject<DoWhatPlc.ReturnValueString>(m_Value);
//Console.WriteLine($"【【{rv.TagID}【【【【{ rv.TagKeepTime}");
int tagType;
string opName;
string tagValue;
int tagid;
DoWhatPlc.ReturnValueString msgEvent = rv;
if (msgEvent.TagValue == null) return;
tagType = Convert.ToInt32(msgEvent.TagTypeID);
opName = msgEvent.OpName.ToString();
tagid = Convert.ToInt32(msgEvent.TagID);
//int tagType;
//string opName;
//string tagValue;
//int tagid;
//DoWhatPlc.CustomeEvetnArgs msgEvent = (DoWhatPlc.CustomeEvetnArgs)e;
//if (msgEvent.TagValue == null) return;
//tagType = Convert.ToInt32(msgEvent.TagType);
//opName = msgEvent.OpName.ToString();
//tagid = Convert.ToInt32(msgEvent.TagKey);
switch (Convert.ToInt32(msgEvent.TagTypeCodeID))
{
case 11:
switch (msgEvent.TagValue.ToLower())
{
case "1":
case "true":
tagValue = "1";
break;
default:
tagValue = "0";
break;
}
break;
default:
tagValue = msgEvent.TagValue.ToString();
break;
}
///根据信号处理逻辑
switch (tagType)
{
case 19:
//允许保存
MesRead(opName, tagValue, tagid);
break;
case 14:
//心跳
Heartbeat(opName, tagValue);
break;
case 44://PLC传递机型过后 才允许保存过站信息,否则不允许保存
//if (tagValue == "1")
//{
// IsEngTypeGetOver_Write(opName, true);
// EngineData Enginedata = new EngineData(DtWebApi.ReadWritePLC.ReadPLC("10", opName).ToString(), Convert.ToInt32(DtWebApi.ReadWritePLC.ReadPLC("80", opName)));
// //EngineData Enginedata = new EngineData(MesDataFunction.OpcOperation.ReadPLC(10, opName).ToString(), Convert.ToInt32(MesDataFunction.OpcOperation.ReadPLC(80, opName)));
// //保存产品编号、托盘号 保存过站信息用
// EngineData_Hash_Write(opName, Enginedata);
//}
break;
case 2://工件到位
WorkStart( rv);
//WorkStart(opName, tagValue);
break;
case 51:
if (hashtableOpName_IsHaveComputer[opName].ToString() == "1")
{
SaveProductLeaveData(opName, 1);
}
break;
case 8:
if (hashtableOpName_IsHaveComputer[opName].ToString() == "1")
{
SaveProductLeaveData(opName, 2);
}
break;
case 103:
Alarm_Insert(rv);
break;
}
}
catch (Exception err)
{
////ApplicationLog.WriteLog(err, err.Message);
}
}
private static void Alarm_Insert(ReturnValueString rv)
{
string TagID;
string opName;
string tagTypeID;
int TagValue;
DateTime alarmStartTime;
DateTime alarmEndTime;
int TimeDiff;
string TagOrderBy;
string Text1;
string Text2;
TagID = rv.TagID;
tagTypeID = rv.TagTypeID;
opName = rv.OpName;
TagValue = Convert.ToInt32( rv.TagValue);
alarmStartTime = Convert.ToDateTime( rv.TimeStampBefore);
alarmEndTime = Convert.ToDateTime( rv.TimeStamp);
TimeDiff = Convert.ToInt32(rv.TagKeepTime);
TagOrderBy = rv.TagOrderBy;
Text1 = rv.ItemName;
Text2 = rv.ShaftID;
BaseDataSystemMES.Alarm_Insert(TagID, tagTypeID, opName, TagValue,
alarmStartTime, alarmEndTime, TimeDiff, Text1, Text2, TagOrderBy);
}
private static void WorkStart(ReturnValueString rv)
{
var ro = rv.ReturnValueToObject();
string opName = ro.OpName;
DateTime arrivedTime = ro.TimeStampBefore;
DateTime leavedTime = ro.TimeStamp;
int TimeDiff = ro.TagKeepTime;
int targetTime = 0;
string isPass = "";
int QualityMark=0;
string tagValue="0";
switch (ro.TagValue.ToString().ToLower())
{
case "1":
case "true":
tagValue = "1";
break;
default:
tagValue = "0";
break;
}
//if (ro.TagValue.ToString() == "0")
//{
// //Write_TagTypeID(5, opName, false);//MES传递机型
// //Write_TagTypeID(66, opName, false);//允许工作
// //Write_TagTypeID(51, opName, false);//合格放行
// //Write_TagTypeID(8, opName, false);//不合格放行
// //Write_TagTypeID(7, opName, false);//工作完成
// //Write_TagTypeID(20, opName, false);//保存完成
// //string isHaveComputer = hashtableOpName_IsHaveComputer[opName].ToString();
// //if (Convert.ToInt32(isHaveComputer) == 0)//自动工位 读合格标志
// //{
// // if (IsEngTypeGetOver_Read(opName))
// // {
// // //PLC未传递机型 不保存过站信息
// // SaveProductLeaveData_AutoWorkStation(opName, Convert.ToInt32(DtWebApi.ReadWritePLC.ReadPLC("21", opName)));
// // //SaveProductLeaveData_AutoWorkStation(opName, Convert.ToInt32(MesDataFunction.OpcOperation.ReadPLC(21, opName)));
// // }
// //}
// ////清空信号
// ////m_WorkStart_OpName[opName] = 0;//清空工件到位标志
// ////通知WEB更新产量
// //SendActuallyCount(opName, 0);
//}
QualityMark = Convert.ToInt32(DtWebApi.ReadWritePLC.ReadPLC("21", opName));
if (QualityMark == 1)
{
isPass = "1";
}
else
{
isPass = "0";
}
int EngineTypeID;//机型代码
int PartPallet_Code;//托盘编号
string EngineType;//机型
string EngineID;//工件编号
string OrderForm;
MIS_BASE.GetEngineTypeFromPLC(opName, out EngineTypeID, out EngineType, out EngineID, out PartPallet_Code,out OrderForm);
//EngineData Enginedata = (EngineData)EngineData_Hash_Read(opName);
BaseDataSystemMES.WorkStartInsert_AutoWorkStation(opName, EngineID, PartPallet_Code, arrivedTime, leavedTime, TimeDiff, targetTime, null, isPass, 0);
}
}
}

View File

@@ -0,0 +1,464 @@
//using BasicData;
using bizFacade;
using DoWhatPlc;
using Newtonsoft.Json;
//using bizFacade;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
//using SystemFramework;
namespace MisDataFunction
{
partial class Function
{
/// <summary>
/// 获取质量数据Hashtable
/// </summary>
/// <param name="opName"></param>
/// <returns></returns>
//static public Hashtable ReadPLC_Sync_DataList_MesRead(string opName)
//{
// return (Hashtable)MesDataFunction.OpcOperation.ReadPLC_Sync_DataList_MesRead(opName);
//}
static object lockerReadPLC_Sync_DataList_MesRead1 = new object();
public static void ReadPLC_Sync_DataList_MesRead(string opName, out Hashtable valueList, out DataTable BasicDataTagValue, out DataTable BasicDataTagValueUpDown, out Hashtable hashtable_EngineTypeID, out Hashtable hashtable_tagTable_OpName_SaveData)
{
//QualityDataSaveList QualityDataType
valueList = new Hashtable();
var qualityDataSaveList = DtWebApi.SaveData.ReadPLC_Sync_DataList_MesRead(opName);
foreach (DictionaryEntry de in qualityDataSaveList.valuList)
{
valueList.Add(de.Key, JsonConvert.DeserializeObject<QualityDataType>(de.Value.ToString()));
}
BasicDataTagValue = qualityDataSaveList.BasicDataTagValue;
BasicDataTagValueUpDown = qualityDataSaveList.BasicDataTagValueUpDown;
hashtable_EngineTypeID = qualityDataSaveList.hashtable_EngineTypeID;
hashtable_tagTable_OpName_SaveData = qualityDataSaveList.hashtable_tagTable_OpName_SaveData;
}
public static Hashtable ReadPLC_Sync_DataList_MesRead(string opName)
{
lock (lockerReadPLC_Sync_DataList_MesRead1)
{
Hashtable ht = new Hashtable();
var cd = DtWebApi.OpcDemo.ReadPLC_GroupData(opName);
//var cd = PlcLinkForm.ReadPLC_GroupData(opName);
foreach (var _cd in cd)
{
var tagID = Convert.ToInt32(_cd.TagID);
var TF =_cd.TF;
QualityDataType qualityDataType;
qualityDataType = new QualityDataType();
qualityDataType.tagID = TF.TagID;
qualityDataType.tagTypeID = TF.TagTypeID;//变量类型
qualityDataType.opName = opName;
qualityDataType.isGoodBad = 192;
int.TryParse(TF.TagQuality, out int TagQuality);
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 = TF.TagProperty;//变量特点
qualityDataType.tagValue = TF.TagValue;//变量值
ht.Add(tagID, qualityDataType);
}
return ht;
}
}
/// <summary>
/// 允许保存(针对半自动和手动压装工位)
/// </summary>
/// <param name="OpName"></param>
/// <param name="tagValue"></param>
private static void MesRead(string opName, string tagValue, int tagid)
{
if (tagValue == "0")
{
Write_TagTypeID(20, opName, false);
}
else
{
SaveQualityData(opName, Convert.ToInt32(tagValue), tagid);
}
}
private static void SaveQualityData(string opName, int tagValue, int tagID)
{
try
{
int id_tagCF;
int qualityMask = 0;
int engineTypeID = 0;
string engineID = "";
string engineType = "";
string engineTraceCode = "";
string engineCap = "";
string partPallet = "";
DataTable dt_WWW;
dt_WWW = BaseDataSystemMES.BuildDataTables_WWW();
Hashtable valueList;
//valueList = ReadPLC_Sync_DataList_MesRead(opName);
ReadPLC_Sync_DataList_MesRead(opName, out valueList, out BasicDataTagValue, out BasicDataTagValueUpDown, out hashtable_EngineTypeID, out hashtable_tagTable_OpName_SaveData);
valueList = GetQualityData_GoodBad_Values(valueList);
int mes_MustTest = 0;
int onLineState = 0;
int partMoveDirection = 0;
int pressIsOK = 0;
int pressIsNoOK = 0;
BaseDataSystemMES.GetQualityDataTable_B5A(valueList, opName, BasicDataTagValue,
BasicDataTagValueUpDown,
out dt_WWW,//数据列表
out qualityMask,//工位合格标志
out engineTypeID,//发动机类型代码
out engineID,//发动机编号
out engineType, //发动机型号
out partPallet,//托盘编号
out engineTraceCode, //发动机条码
out engineCap,//缸盖号,
hashtable_EngineTypeID,//发动机类型转换表
out mes_MustTest, out onLineState, out partMoveDirection, out pressIsOK, out pressIsNoOK);
// 1:通过监控系统保存采集的质量数据;0:不通过监控系统保存采集的质量数据
if (Convert.ToInt32(hashtable_tagTable_OpName_SaveData[opName]) != 0)
{
DateTime lastupdatetime = DateTime.Now;
BaseDataSystemMES.BaseData_tagTable_QualityData_B5A_IndexInsert(engineID, tagID, engineType, engineTypeID, opName, qualityMask, partPallet, out id_tagCF);
BaseDataSystemMES.BaseData_tagTable_QualityData_B5A_Insert(id_tagCF, engineTypeID, engineID, opName, dt_WWW);
}
Write_TagTypeID(20, opName, true);
#region
//string orderForm = "";
//string operatorCode = "";
//int shiftCode = 1;
//DateTime arrivedTime;
//DateTime leavedTime;
//int TimeDiff;
//int targetTime = 0;
//string lineType = "";
//string isPass;
//int machineWorkOn = 0;
//int arrivedOrLeaved = 2;
//int cartColorOpName = 0;
//int cartColorConfirm = 0;
//// int partMoveDirection;
//int partGoOver = 0;
//if (qualityMask == 1)
//{
// isPass = "PASS";
//}
//else
//{
// isPass = "FAIL";
//}
////工位上下线类型
////0普通工位1正常上线2正常下线3返修上线4返修下线
//int OpNameUpDownType;
//OpNameUpDownType = Convert.ToInt32(hashtableOpName_OpType[opName]);
//arrivedTime = (DateTime)m_WorkStart_OpName_Time[opName];
//leavedTime = DateTime.Now;
//TimeDiff = Convert.ToInt32(leavedTime.Subtract(arrivedTime).TotalSeconds);
//lineType = hashtableOpName_LineType[opName].ToString();
//string isHaveComputer = hashtableOpName_IsHaveComputer[opName].ToString();
////isHaveComputer = MIS_BASE.hashtable_tagTable_OpName_SaveData[opName].ToString();
////有计算机的工位,通过工位计算机保存[测量数据发动机在线状态]。
//if (Convert.ToInt32(isHaveComputer) == 0)
//{
// //1->0 工件离开 工件刚刚离开
// if (Convert.ToInt32(m_WorkStart_OpName[opName]) == 1)
// {
// //[测量数据发动机在线状态]
// QualityDataSystem.WorkStartInsert
// (opName, orderForm, engineTypeID, engineType, engineID, partPallet.ToString(), operatorCode, shiftCode,
// arrivedTime, leavedTime, TimeDiff, targetTime, lineType, isPass, machineWorkOn,
// arrivedOrLeaved, cartColorOpName, cartColorConfirm, partMoveDirection, partGoOver, mes_MustTest, onLineState, OpNameUpDownType);
// }
//}
#endregion
}
catch (Exception err)
{
Write_TagTypeID(20, opName, true);
////ApplicationLog.WriteLog(err, err.Message);
}
}
public static void SaveQualityData_Mes(string opName, int tagID)
{
try
{
int id_tagCF;
int qualityMask = 0;
int engineTypeID = 0;
string engineID = "";
string engineType = "";
string engineTraceCode = "";
string engineCap = "";
string partPallet = "";
DataTable dt_WWW;
dt_WWW = BaseDataSystemMES.BuildDataTables_WWW();
Hashtable valueList;
valueList = ReadPLC_Sync_DataList_MesRead(opName);
valueList = GetQualityData_GoodBad_Values(valueList);
int mes_MustTest = 0;
int onLineState = 0;
int partMoveDirection = 0;
int pressIsOK = 0;
int pressIsNoOK = 0;
BaseDataSystemMES.GetQualityDataTable_B5A(valueList, opName, BasicDataTagValue,
BasicDataTagValueUpDown,
out dt_WWW,//数据列表
out qualityMask,//工位合格标志
out engineTypeID,//发动机类型代码
out engineID,//发动机编号
out engineType, //发动机型号
out partPallet,//托盘编号
out engineTraceCode, //发动机条码
out engineCap,//缸盖号,
hashtable_EngineTypeID,//发动机类型转换表
out mes_MustTest, out onLineState, out partMoveDirection, out pressIsOK, out pressIsNoOK);
// 1:通过监控系统保存采集的质量数据;0:不通过监控系统保存采集的质量数据
if (Convert.ToInt32(hashtable_tagTable_OpName_SaveData[opName]) != 0)
{
DateTime lastupdatetime = DateTime.Now;
BaseDataSystemMES.BaseData_tagTable_QualityData_B5A_IndexInsert(engineID, tagID, engineType, engineTypeID, opName, qualityMask, partPallet, out id_tagCF);
//BaseDataSystemMES.BaseData_tagTable_QualityData_B5A_Insert(id_tagCF, engineTypeID, engineID, opName, dt_WWW);
}
}
catch (Exception err)
{
Write_TagTypeID(20, opName, true);
////ApplicationLog.WriteLog(err, err.Message);
}
}
/// <summary>
/// 确定合格标志
/// </summary>
/// <param name="valuList"></param>
/// <returns></returns>
static public Hashtable GetQualityData_GoodBad_Values(Hashtable valuList)
{
try
{
Hashtable valuList_Temp;
valuList_Temp = (Hashtable)valuList.Clone();
int[] value_GoodBad_New = new int[128];
int tagID;
QualityDataType value;
//1获得合格标志
foreach (DictionaryEntry de in valuList) //ht为一个Hashtable实例
{
tagID = Convert.ToInt32(de.Key);
value = (QualityDataType)de.Value;
//拧紧数据合格标志
if (value.tagProperty == 1)
{
if (value.tagTypeID == 8203)
{
value_GoodBad_New = (int[])value.tagValue;
break;
}
else
{
value_GoodBad_New[value.tagOrderBy - 1] = Convert.ToInt32(value.tagValue);
}
}
//拧紧数据合格标志
if (value.tagProperty == 8)
{
if (value.tagTypeID == 8203)
{
value_GoodBad_New = (int[])value.tagValue;
break;
}
else
{
value_GoodBad_New[value.tagOrderBy - 1] = Convert.ToInt32(value.tagValue);
}
}
//压装数据合格标志
if (value.tagProperty == 7)
{
value_GoodBad_New[value.tagOrderBy - 1] = Convert.ToInt32(value.tagValue);
}
}
//将合格标志赋予每个变量
foreach (DictionaryEntry de in valuList) //ht为一个Hashtable实例
{
tagID = Convert.ToInt32(de.Key);
value = (QualityDataType)de.Value;
//201706061720新加
if (value .tagTypeID ==11)
{
if (value.tagValue.ToString ()=="False")
{
value.tagValue ="0";
}
else
{
value.tagValue = "1";
}
valuList_Temp[tagID] = value;
//value.tagValue = Convert.ToInt32(value.tagValue);
}
//测量变量
if (value.tagProperty == 2 || value.tagProperty == 6)
{
try
{
if (value_GoodBad_New != null)
{
value.isGoodBad = Convert.ToInt32(value_GoodBad_New[value.tagOrderBy - 1]);
valuList_Temp[tagID] = value;
}
else
{
value.isGoodBad = 0;
valuList_Temp[tagID] = value;
}
}
catch (Exception err)
{
////ApplicationLog.WriteLog(err, err.Message);
}
}
}
return valuList_Temp;
}
catch//转换出了故障时
{
return valuList;
}
}
/// <summary>
/// 制定工位PLC是否传递过机型 (默认不传递机型不保存过站信息)
/// </summary>
static Hashtable EngTypeGetOver = new Hashtable();
static Hashtable EngineData_Hash = new Hashtable(); //保存
public static void IsEngTypeGetOver_Write(string OpName, bool value)
{
if (EngTypeGetOver.ContainsKey(OpName))
{
EngTypeGetOver[OpName] = value;
}
else
{
EngTypeGetOver.Add(OpName, value);
}
}
public static bool IsEngTypeGetOver_Read(string OpName)
{
if (EngTypeGetOver.ContainsKey(OpName))
{
return Convert.ToBoolean(EngTypeGetOver[OpName]);
}
else
{
return true;
}
}
public static void EngineData_Hash_Write(string OpName, object value)
{
if (EngineData_Hash.ContainsKey(OpName))
{
EngineData_Hash[OpName] = value;
}
else
{
EngineData_Hash.Add(OpName, value);
}
}
public static object EngineData_Hash_Read(string OpName)
{
if (EngineData_Hash.ContainsKey(OpName))
{
return EngineData_Hash[OpName];
}
else
{
return null;
}
}
private DataTable ChangeQualificationMark(DataTable dt)
{
var dtNew = dt.Copy();
for (int i = 0; i < dt.Rows.Count; i++)
{
var = dt.Rows[i]["变量排序"].ToString();
if ( == "0")
{
}
}
return dtNew;
}
}
struct EngineData
{
public EngineData(string engineID, int pallet)
{
EngineID = engineID;
Pallet = pallet;
}
public string EngineID;//工件编号
//public string EngineType;
//public int EngineTypeID;
public int Pallet;//托盘号
}
}

View File

@@ -0,0 +1,236 @@
//using BasicData;
using bizFacade;
//using DataBaseAccess;
//using bizFacade;
using DataLinkMesWork;
using MesServerWork;
using System;
using System.Collections;
using System.Data;
using System.Data.SqlClient;
//using SystemFramework;
namespace MisDataFunction
{
partial class Function
{
/// <summary>
/// 工件到位与离开时清空MES自身信号
/// </summary>
/// <param name="OpName"></param>
/// <param name="tagValue"></param>
private static void WorkStart(string opName, string tagValue)
{
try
{
//工位没有工件,或工件刚刚离开 工件离开工位后,清空该工位的发动机号
if (tagValue == "0")
{
Write_TagTypeID(5, opName, false);//MES传递机型
Write_TagTypeID(66, opName, false);//允许工作
Write_TagTypeID(51, opName, false);//合格放行
Write_TagTypeID(8, opName, false);//不合格放行
Write_TagTypeID(7, opName, false);//工作完成
Write_TagTypeID(20, opName, false);//保存完成
//string isHaveComputer = hashtableOpName_IsHaveComputer[opName].ToString();
//if (Convert.ToInt32(isHaveComputer) == 0)//自动工位 读合格标志
{
if (IsEngTypeGetOver_Read(opName))
{
//PLC未传递机型 不保存过站信息
SaveProductLeaveData_AutoWorkStation(opName, Convert.ToInt32(DtWebApi.ReadWritePLC.ReadPLC("21", opName)));
//SaveProductLeaveData_AutoWorkStation(opName, Convert.ToInt32(MesDataFunction.OpcOperation.ReadPLC(21, opName)));
}
}
//清空信号
//m_WorkStart_OpName[opName] = 0;//清空工件到位标志
//通知WEB更新产量
SendActuallyCount(opName,0);
}
else
{
//保存工件到达数据
//m_WorkStart_OpName_Time[opName] = DateTime.Now;
//m_WorkStart_OpName[opName] = 1;
}
}
catch (Exception err)
{
////ApplicationLog.WriteLog(err, err.Message);
}
}
/// <summary>
/// 保存过站信息 (数据库读机型信息)
/// </summary>
/// <param name="opName"></param>
/// <param name="QualityMark"></param>
static void SaveProductLeaveData(string opName, int QualityMark)
{
try
{
if (!IsEngTypeGetOver_Read(opName))
{
//PLC未传递机型 不保存过站信息
return;
}
IsEngTypeGetOver_Write(opName, false);//清空传递机型标志
DateTime arrivedTime;
DateTime leavedTime;
int TimeDiff;
int targetTime = 0;
string lineType = "";
string isPass;
if (QualityMark == 1)
{
isPass = "PASS";
}
else
{
isPass = "FAIL";
}
//工位上下线类型
//0普通工位1正常上线2正常下线3返修上线4返修下线
int OpNameUpDownType;
OpNameUpDownType = Convert.ToInt32(hashtableOpName_OpType[opName]);
arrivedTime = (DateTime)m_WorkStart_OpName_Time[opName];
leavedTime = DateTime.Now;
TimeDiff = Convert.ToInt32(leavedTime.Subtract(arrivedTime).TotalSeconds);
lineType = hashtableOpName_LineType[opName].ToString();
//1->0 工件离开 工件刚刚离开
//if (Convert.ToInt32(m_WorkStart_OpName[opName]) == 1)
//{
// WorkStartInsert(opName, arrivedTime, leavedTime, TimeDiff, targetTime, lineType, isPass, OpNameUpDownType);
//}
//通知WEB更新产量
SendActuallyCount(opName, 0);
}
catch (Exception err)
{
////ApplicationLog.WriteLog(err, err.Message);
}
}
/// <summary>
/// 保存过站信息 (数据库读机型信息)
/// </summary>
/// <param name="opName"></param>
/// <param name="QualityMark"></param>
static void SaveProductLeaveData_AutoWorkStation(string opName, int QualityMark)
{
try
{
if (!IsEngTypeGetOver_Read(opName))
{
//PLC未传递机型 不保存过站信息
return;
}
IsEngTypeGetOver_Write(opName, false);//清空传递机型标志
DateTime arrivedTime;
DateTime leavedTime;
int TimeDiff;
int targetTime = 0;
string lineType = "";
string isPass;
if (QualityMark == 1)
{
isPass = "PASS";
}
else
{
isPass = "FAIL";
}
//工位上下线类型
//0普通工位1正常上线2正常下线3返修上线4返修下线
int OpNameUpDownType;
//OpNameUpDownType = Convert.ToInt32(hashtableOpName_OpType[opName]);
// arrivedTime = (DateTime)m_WorkStart_OpName_Time[opName];
leavedTime = DateTime.Now;
//TimeDiff = Convert.ToInt32(leavedTime.Subtract(arrivedTime).TotalSeconds);
//lineType = hashtableOpName_LineType[opName].ToString();
//1->0 工件离开 工件刚刚离开
//if (Convert.ToInt32(m_WorkStart_OpName[opName]) == 1)
//{
// //查询工件编号、托盘号
//EngineData Enginedata = (EngineData)EngineData_Hash_Read(opName);
//WorkStartInsert_AutoWorkStation(opName, Enginedata.EngineID, Enginedata.Pallet, arrivedTime, leavedTime, TimeDiff, targetTime, lineType, isPass, OpNameUpDownType);
//}
}
catch (Exception err)
{
////ApplicationLog.WriteLog(err, err.Message);
}
}
/// <summary>
/// 测量数据发动机在线状态_增加数据
/// </summary>
/// <param name="opName"></param>
/// <param name="arrivedTime"></param>
/// <param name="leavedTime"></param>
/// <param name="TimeDiff"></param>
/// <param name="Target"></param>
/// <param name="isPass"></param>
static public void WorkStartInsert(string opName, DateTime arrivedTime, DateTime leavedTime, int TimeDiff, int Target, string lineType, string isPass, int OpNameUpDownType)
{
string procedureName;
procedureName = "测量数据发动机在线状态_增加数据";
SqlParameter[] thisParms = new SqlParameter[8];
thisParms[0] = new System.Data.SqlClient.SqlParameter("@工位号", opName);
thisParms[1] = new System.Data.SqlClient.SqlParameter("@到达时间", arrivedTime);
thisParms[2] = new System.Data.SqlClient.SqlParameter("@离开时间", leavedTime);
thisParms[3] = new System.Data.SqlClient.SqlParameter("@在线时间", TimeDiff);
thisParms[4] = new System.Data.SqlClient.SqlParameter("@目标时间", Target);
thisParms[5] = new System.Data.SqlClient.SqlParameter("@线体类型", lineType);
thisParms[6] = new System.Data.SqlClient.SqlParameter("@是否合格", isPass);
thisParms[7] = new System.Data.SqlClient.SqlParameter("@工位上下线类型", OpNameUpDownType);
DataAccess.ExecuteStoredProcedure(procedureName, ref thisParms);
}
/// <summary>
/// 发送在线产量、在线节拍
/// </summary>
/// <param name="OpName"></param>
/// <param name="tagValue"></param>
static void SendActuallyCount(string OpName, int tagValue)
{
//当工件离开时,更新在线产量、在线节拍
if (tagValue == 0)
{
try
{
int opNameCount = 0;//在线产量
int opNameCountTime = 0;//在线节拍
//基本数据_工作日历_班次产量查询_New
BaseDataSystemMES.OpNameCount_New(OpName, out opNameCount, out opNameCountTime);
string SendMessage;
SendMessage = "MES|ActuallyCount|" + OpName + "|" + opNameCount.ToString() + "&" + opNameCountTime.ToString();
MIS_BASE.asyncSendMessage(SendMessage);
}
catch (Exception err)
{
////ApplicationLog.WriteLog(err, "Function01:SendActuallyCount");
}
}
}
}
}

View File

@@ -0,0 +1,291 @@
//using BasicData;
//using MesWork;
//using OpcBasic;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace MesDataFunction
{
/*
HeartBeatMIS 15
EngineTypeGetOverMES 5
PartPalletGoOver 6
MaterialVerifyOver 7
FalseGo 8
ConfirmOkGo 51
PartLoadFinish 52
UnloadCompleted 53
MachineTime_ReadOver 54
FixAllow 66
FixOver 67
MatchingCompleted 68
Match 69
Reserved_1 70
IsAutoGetEngineID 71
RepairUplineMES 72
ProcessCode 77
BoltCode 88
RepairStatus 93
Reserved_3 24
Reserved_4 25
Reserved_5 26
Reserved_6 27
Reserved_7 28
Reserved_8 29
Reserved_9 30
Reserved_10 31
Reserved_11 32
Reserved_12 33
Reserved_13 34
Reserved_14 35
MesReadOver 20
Reserved_15 110
Reserved_16 111
Reserved_17 112
OnLineState 79
EngineTypeID_MES 73
EngineID_MES 74
EngineType_MES 75
MarkID 42
RepairPathString 4
SPareint1 113
SPareint2 114
SPareint3 115
Sparestring1 116
Sparestring2 117
HeartBeatPLC 14
WorkStart 2
RepairPartStatusPLC 3
PartLoad 43
EngineTypeGetOverPLC 44
PartLoadOK 48
Reserved_18 49
PalletDown 50
Reserved_19 58
FixOK 59
Reserved_20 76
Reserved_21 61
Reserved_22 62
Reserved_23 63
Reserved_24 64
Reserved_25 65
EngineTypeID 9
EngineID 10
EngineType 11
PartPalletCode 80
PalletInfo 22
MesRead 19
PutOn 1000
WorkOn 1001
Alarm 1002
NoPart 1003
Block 1004
PartPalletStatus 13
TargetTimeRead 16
QualityMask 21
RepairStatusPLC 23
MachineTargetTime 17
MachineActualTime 18
PLCSPareint1 36
PLCSPareint2 37
PLCSPareint3 38
PLCSarestring1 39
PLCSarestring2 40
*/
public class OpcOperation
{
///// <summary>
/////引用程序集Hashtable
///// </summary>
//public static Hashtable Hashtable_assembly = new Hashtable();
///// <summary>
/////
///// </summary>
//static public NameValueCollection hashtable_TagType = null;
///// <summary>
/////
///// </summary>
//static public NameValueCollection hashtable_TagTypeTagName = null;
///// <summary>
/////
///// </summary>
//static public NameValueCollection hashtable_TagTypeChange = null;
///// <summary>
/////
///// </summary>
//static public NameValueCollection hashtable_WebTagTypeChange = null;
///// <summary>
/////
///// </summary>
//static public NameValueCollection hashtable_MesTagTypeChange = null;
///// <summary>
/////
///// </summary>
//static public NameValueCollection hashtable_TagTypeDataType = null;
///// <summary>
/////
///// </summary>
//static readonly object l = new object();
///// <summary>
/////
///// </summary>
///// <param name="tagTypeCodeID"></param>
///// <param name="opName"></param>
///// <returns></returns>
//public static object ReadPLC(int tagTypeCodeID, string opName)
//{
// return PlcLinkForm.ReadPLC(tagTypeCodeID, opName);
//}
///// <summary>
/////
///// </summary>
///// <param name="tagID"></param>
///// <param name="tagValue"></param>
//public static void ReadPLC(string tagID, out object tagValue)
//{
// tagValue = PlcLinkForm.ReadPLC(tagID);
//}
///// <summary>
/////
///// </summary>
///// <param name="opName"></param>
///// <returns></returns>
//public static object ReadPLC_Sync_DataList_MesRead(string opName)
//{
// lock (l)
// {
// Hashtable ht = new Hashtable();
// var cd = PlcLinkForm.ReadPLC_GroupData(opName);
// foreach (KeyValuePair<string,object> _cd in cd)
// {
// var tagID = Convert.ToInt32(_cd.Key);
// var TF = (TagFormat)_cd.Value;
// QualityDataType qualityDataType;
// qualityDataType = new QualityDataType();
// qualityDataType.tagID = TF.TagID;
// qualityDataType.tagTypeID = TF.TagTypeID ;//变量类型
// qualityDataType.opName = opName;
// qualityDataType.isGoodBad = 192;
// int.TryParse(TF.TagQuality, out int TagQuality);
// 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 = TF.TagProperty;//变量特点
// qualityDataType.tagValue = TF.TagValue;//变量值
// ht.Add(tagID , qualityDataType);
// }
// return ht;
// }
//}
///// <summary>
/////
///// </summary>
///// <param name="tagTypeCodeID"></param>
///// <param name="opName"></param>
///// <param name="tagValue"></param>
//public static void ReadTagValue(string tagID, out string tagValue)
//{
// tagValue = "0";
// var tagValueObj = PlcLinkForm.ReadPLC(tagID);
// var type = tagValueObj.GetType().Name.ToLower();
// if (type == "bool" | type == "boolean")
// {
// var val = tagValueObj.ToString().ToLower();
// if (val == "true")
// {
// tagValue = "1";
// }
// }
// else
// {
// tagValue = tagValueObj.ToString();
// }
//}
///// <summary>
/////
///// </summary>
///// <param name="tagTypeCodeID"></param>
///// <param name="opName"></param>
///// <param name="tagValue"></param>
//public static void ReadTagValue(int tagTypeCodeID, string opName, out string tagValue)
//{
// tagValue = "0";
// var tagValueObj = PlcLinkForm.ReadPLC(tagTypeCodeID, opName);
// var type = tagValueObj.GetType().Name.ToLower();
// if (type == "bool" | type == "boolean")
// {
// var val = tagValueObj.ToString().ToLower();
// if (val == "true")
// {
// tagValue = "1";
// }
// }
// else
// {
// tagValue = tagValueObj.ToString();
// }
//}
///// <summary>
/////
///// </summary>
///// <param name="tagID"></param>
///// <param name="tagValue"></param>
///// <returns></returns>
//public static bool WritePLC(string tagID, object tagValue)
//{
// return PlcLinkForm.WritePLC(tagID, tagValue);
//}
///// <summary>
/////
///// </summary>
///// <param name="tagTypeCodeID"></param>
///// <param name="opName"></param>
///// <param name="tagValue"></param>
///// <returns></returns>
//public static bool WritePLC(int tagTypeCodeID, string opName, object tagValue)
//{
// return PlcLinkForm.WritePLC(tagTypeCodeID, opName, tagValue);
//}
///// <summary>
/////
///// </summary>
///// <param name="tagTypeCodeID"></param>
///// <param name="opName"></param>
///// <param name="tagValue"></param>
///// <returns></returns>
//public static bool WriteTagValue(int tagTypeCodeID, string opName, object tagValue)
//{
// return PlcLinkForm.WritePLC(tagTypeCodeID, opName, tagValue);
//}
}
}

View File

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