Files
52-NingdePDC-MesProject/MisDataFunction/Function1061/OpcServer/WebSubmit.cs
XingCheng3 02e3b2f302 chore: 清理误跟踪的编译产物并完善 .gitignore
- .gitignore 增加 bin/obj、MisDataFun_Exe 部署二进制(dll/pdb/exe)、日志、.vs、packages 等忽略规则
- 从版本库移除 bin/obj/部署目录等编译中间产物(工作区文件保留)
- 提交 MisDataFun.DB.cs、Function1055/1056/1061 等源码改动
- 删除废弃的 Function1062 模块
2026-05-31 10:19:23 +08:00

376 lines
18 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using System;
using MesServerWork;
using System.Threading;
using MisDataSaveDate;
using System.Collections;
using System.Windows.Forms;
using MisDataFunDll;
using MesDataFunction;
namespace MesServerFunctions
{
partial class FunctionMES
{
/// <summary>
/// 处理WEB页面发送过来的请求m_Command + "|" + m_Value;
/// </summary>
/// <param name="OpName"></param>
/// <param name="Content"></param>
private void WebSubmit(object e)
{
try
{
var msgEvent = (DeviceDriver_BasicData.CustomeEvetnArgs)e;
string OpName = Convert.ToString(msgEvent.OpName);
string Content = Convert.ToString(msgEvent.TagValue);
string opName_SubLine = "";
string engineID = "";//工件信息
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; //消息参数长度
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();
}
if (MIS_BASE.hashtable_OpNameRepair == null)
{
MIS_BASE.InitHashtable_MesServerCode();
}
var _e = new DeviceDriver_BasicData.CustomeEvetnArgs();
_e.OpName = OpName;
_e.TagValue = m_Value;
string msg;
bool bolVal;
//根据请求的命令处理逻辑
switch (m_Command)
{
case "Barcode":
if (m_Value_length > 1) return;
fun_Barcode(_e);
break;
case "ConfirmOkGo"://合格放行
//修改托盘状态
//BaseDataSystemMES.BaseData_tagTable_Engine_IsNG_Delete(OpName, engineID);
MIS_BASE.Write_ConfirmOkGo(OpName, true);
MIS_BASE.Write_FalseGO(OpName, false);
Thread.Sleep(1000);
MIS_BASE.Write_ConfirmOkGo(OpName, false);
break;
case "FalseGO"://返修放行
//修改托盘状态
//BaseDataSystemMES.BaseData_tagTable_Engine_IsNG_Delete(OpName, engineID);
MIS_BASE.Write_FalseGO(OpName, true);
MIS_BASE.Write_ConfirmOkGo(OpName, false);
break;
case "NgGO"://不合格放行
//修改托盘状态
//保存不合格信息(必须保存不合格放行信息由于B5A的Moby没有不合格标志位)
//BaseDataSystemMES.BaseData_tagTable_Engine_IsNG_Insert(OpName, engineID, "", "");
MIS_BASE.Write_FalseGO(OpName, true);
MIS_BASE.Write_ConfirmOkGo(OpName, false);
break;
case "FixAllow"://重新拧紧
WorkAgain(OpName);
break;
case "FixAllow_Ng"://不合格后继续拧紧
FixOK_Ng_Next(OpName);
break;
case "RepairUplineMES"://返修上线
MIS_BASE.Write_RepairUpline_MES(OpName, true);
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_MesWorkFinish(OpName, true);
}
break;
case "PalletGO":
if (Convert.ToInt32(m_Value) == 1)
{
//直接给出工作完成
MIS_BASE.Write_MesWorkFinish(opName_SubLine, true);
}
break;
case "PrintCode": // 打印条码 前端发起
PrinterCommandCenter.PrintToPrinter(OpName, m_Value);
break;
case "ContinueMatch":
//BaseDataSystemMES.QualityVerifyStatus_Hash_Write(OpName, true);
fun_EngineTypeGetOverPLC(_e);
break;
//初始化网页信号
case "IniSingalToWeb":
InitializeSingalToWeb(OpName);
break;
// 检查项 检查完成
case "checkWorkOver":
//MIS_BASE.Write_TagValueByTagTypeID(30, OpName,1);
//msg = "MES|checkWorkOverIsShow|" + OpName + "|" + 0;
//SendMessage.AsyncSendMessage(msg);
break;
// 重新申请上线
case "againPartLoad":
// 判断是否有工件到位
MIS_BASE.Read_WorkStart(OpName, out bolVal);
if (bolVal)
{
MIS_BASE.Write_TagValueByTagTypeID(35, OpName, 1);
msg = "【" + OpName + "】" + "重新申请上线完成!";
SendMessage.AsyncSendMessage_Notice(OpName, msg);
}
else
{
msg = "【" + OpName + "】" + "当前无工件到位信号,请确认是否存在工件!";
SendMessage.AsyncSendMessage_Notice(OpName, msg);
}
break;
// 跳过交互
case "skipWork":
// 判断是否有工件到位
MIS_BASE.Read_WorkStart(OpName, out bolVal);
if (bolVal)
{
MIS_BASE.Write_EngineTypeGetOver_MES(OpName, true); // 传递机型
MIS_BASE.Write_FixAllow(OpName, true); // 允许工作
MIS_BASE.Write_TagValueByTagTypeID(30, OpName, 1); // 检查完成
MIS_BASE.Write_MesReadOver(OpName, true); // 保存完成
MIS_BASE.Write_MesWorkFinish(OpName, true); // 工作完成
msg = "【" + OpName + "】" + "跳过交互完成!";
SendMessage.AsyncSendMessage_Notice(OpName, msg);
}
else
{
msg = "【" + OpName + "】" + "当前无工件到位信号,请确认是否存在工件!";
SendMessage.AsyncSendMessage_Notice(OpName, msg);
}
break;
case "twoWorkSkip"://重新工作工件跳过工作(重新工作工件)
//工作完成
EngineTypeGetOver_PLC_Work_Skip(OpName);
break;
case "twoWork"://重新工作工件重新工作(重新工作工件)
//允许工作
EngineTypeGetOver_PLC_Work_two(OpName);
break;
case "OpWorkFalseGoByWeb": // 人工不合格放行确认完毕!
MIS_BASE.Read_FalseGo(OpName, out bool S_FalseGo);
MIS_BASE.Read_MesRead(OpName, out bool S_MesRead);
if (S_FalseGo && S_MesRead)
{
//通知PLCMES工作完成
MIS_BASE.Write_MesWorkFinish(OpName, true);
MisDataFun.LogRecording_OP(OpName, "INFO", "MIS", "人工确认不合格放行成功!");
}
break;
case "UpLinModelQut": // 上线模式切换
if (Convert.ToInt32(m_Value) == 1)
{
MIS_BASE.Write_TagValueByTagTypeID(27, OpName, true); // 10.2 通知PLC当前非自动上线模式
}
else
{
MIS_BASE.Write_TagValueByTagTypeID(27, OpName, false); // 10.2 通知PLC当前自动上线模式
}
break;
default: break;
}
}
catch (Exception err)
{
////ApplicationLog.WriteLog(err, "Function08:WebSubmit");
}
}
/// <summary>
/// 网页重现登录,恢复关闭前的页面状态
/// </summary>
/// <param name="Opname">工位号</param>
private void InitializeSingalToWeb(string Opname)
{
int EngineTypeID;
string EngineType;
string EngineID;
int PartPallet_Code;
int ProcessCode;
bool S_FixOK;
bool S_FixOver;
bool S_FixAllow;//允许工作 DBX3.1
bool S_WorkStart;//工件到位 DBX0.1
bool S_PartLoad;//申请上线
bool S_EngineGetOver;//传递机型 DBX0.4
bool S_MesRead;//允许保存 DBX3.1
bool S_ReadOver;//保存完成
bool S_MaterialVerifyOver;//工作完成 DBX0.3
int BoltCode;
int workStepProperty;
bool isHaveNg;
int S_QualityMask;//合格标志 DBX588
string S_plcStatus = "false";//DBX501.5 PLC直通1 强制放行 0 正常循环
//获取Moby
MIS_BASE.GetEngineTypeFromDB(Opname, out EngineTypeID, out EngineType, out EngineID, out PartPallet_Code);
MIS_BASE.Read_FixAllow(Opname, out S_FixAllow);
MIS_BASE.Read_FixOK(Opname, out S_FixOK);
MIS_BASE.Read_FixOver(Opname, out S_FixOver);
MIS_BASE.Read_WorkStart(Opname, out S_WorkStart);
MIS_BASE.Read_PartLoad(Opname, out S_PartLoad);
MIS_BASE.Read_EngineGetOver_PLC(Opname, out S_EngineGetOver);
MIS_BASE.Read_QualityData_Read_CF(Opname, out S_MesRead);
MIS_BASE.Read_MesReadOver(Opname, out S_ReadOver);
MIS_BASE.Read_MaterialVerifyOver(Opname, out S_MaterialVerifyOver);
MIS_BASE.Read_QualityMask(Opname, out S_QualityMask);
MIS_BASE.Read_FalseGo(Opname, out bool S_FalseGo);
if (S_WorkStart == true)
{
SendMessageFun.SendInfomation("WorkStart", Convert.ToString(Convert.ToInt32(S_WorkStart)), Opname);
}
//----------------------------------------------------
if (S_PartLoad == true)
{
SendMessageFun.SendInfomation("PartLoad", Convert.ToString(Convert.ToInt32(S_PartLoad)), Opname);
}
//----------------------------------------------------
if (S_EngineGetOver == true)
{
SendMessageFun.SendInfomation("EngineTypeGetOverPLC", Convert.ToString(Convert.ToInt32(S_EngineGetOver)), Opname);
//通知web显示
SendMessageFun.SendMessage("5123", "1111", Opname);
// 判断是否还需要拧紧需要的话就发送信息给web
bool isNotTightWorkOver = GetShaftWoringStepIsWorked_WorkGroup(Opname, EngineTypeID, EngineType, out ProcessCode, out BoltCode, out workStepProperty, out isHaveNg);
// 如果有允许拧紧 显示界面UI
if (S_FixAllow)
{
if (!isNotTightWorkOver)
{
//通知web显示 拧紧位置
SendMessageFun.SendInfomation("ShaftPosition", "1", Opname);
//发动UDP通知读取质量数据,实时显示质量数据,最后一段为合格标志(根据合格标志显示哭脸笑脸2对应哭脸1对应笑脸)
SendMessageFun.SendInfomation("ShowTimelyQuality_Tight", ProcessCode.ToString() + "&" + 0, Opname);
//发动UDP,通知MES工作站拧紧第几组
SendMessageFun.SendInfomation("FixAllowGuid", Convert.ToString(ProcessCode) + "&" + Convert.ToString(BoltCode), Opname);//显示拧紧标志
}
}
else
{
// 判断最近拧紧是否不合格 如果不合格 弹窗提示重新拧紧
if (MisDataFun.OP_Tight_isShowAgainWork(Opname))
{
//通知web显示 拧紧位置
SendMessageFun.SendInfomation("ShaftPosition", "1", Opname);
//获取当前组号拧紧的合格标志及保存质量数据
int isOK = GetTagValue(Opname, EngineTypeID, EngineType, EngineID, ProcessCode, PartPallet_Code);
//发动UDP通知读取质量数据,实时显示质量数据,最后一段为合格标志(根据合格标志显示哭脸笑脸2对应哭脸1对应笑脸)
SendMessageFun.SendInfomation("ShowTimelyQuality_Tight", ProcessCode.ToString() + "&" + 2, Opname);
//发动UDP,通知MES工作站拧紧第几组
SendMessageFun.SendInfomation("FixAllowGuid", Convert.ToString(ProcessCode) + "&" + Convert.ToString(BoltCode), Opname);//显示拧紧标志
}
}
}
//----------------------------------------------------
if (S_FixAllow == true)
{
SendMessageFun.SendInfomation("FixAllow", Convert.ToString(Convert.ToInt32(S_FixAllow)), Opname);
}
//----------------------------------------------------
if (S_MesRead == true)
{
SendMessageFun.SendInfomation("MesRead", Convert.ToString(Convert.ToInt32(S_MesRead)), Opname);
if (S_FalseGo && MisDataFun.GetSpecialOpExist(Opname, "人工PC工位")) SendInfomation("showOpWorkFalseGoBox", "1", Opname); // 显示不合格刷卡放行弹窗
}
//----------------------------------------------------
if (S_ReadOver == true)
{
SendMessageFun.SendInfomation("MesReadOver", Convert.ToString(Convert.ToInt32(S_ReadOver)), Opname);
}
//----------------------------------------------------
if (S_MaterialVerifyOver == true)
{
SendMessageFun.SendInfomation("MaterialVerifyOver", Convert.ToString(Convert.ToInt32(S_MaterialVerifyOver)), Opname);
}
//----------------------------------------------------
if (S_QualityMask == 1)
{
SendMessageFun.SendInfomation("QualityMask", Convert.ToString(Convert.ToInt32(S_QualityMask)), Opname);
}
//----------------------------------------------------
if (S_plcStatus.ToLower() == "false")
{
SendMessageFun.SendInfomation("PlcStatus", "0", Opname);
}
else
{
SendMessageFun.SendInfomation("PlcStatus", "1", Opname);
}
//----------------------------------------------------
if (S_FixAllow == true)
{
SendMessageFun.SendInfomation("FixAllow", Convert.ToString(Convert.ToInt32(S_FixAllow)), Opname);
}
//----------------------------------------------------
if (S_FixOK == true)
{
SendMessageFun.SendInfomation("FixOK", Convert.ToString(Convert.ToInt32(S_FixOK)), Opname);
}
//----------------------------------------------------
if (S_FixOver == true)
{
SendMessageFun.SendInfomation("FixOver", Convert.ToString(Convert.ToInt32(S_FixOver)), Opname);
}
// 报警信息
InitAlarm(Opname);
}
private void InitAlarm(string Opname)
{
FuntionMesRead.Alarm_InitAlarm_Send(Opname, out Hashtable ht);
foreach (DictionaryEntry kv in ht)
{
var TagID = kv.Key.ToString();
var TagValue = kv.Value.ToString();
FuntionMesRead.Send_AlarmMsg(TagID, TagValue);
}
}
}
}