Files
2026-05-29 10:07:05 +08:00

174 lines
7.8 KiB
C#

using System;
using System.Configuration;
using System.Data;
using bizFacade;
//using SystemFramework;
using MesServerWork;
namespace MesServerFunctions
{
partial class Functions_BASE_26
{
/// <summary>
/// 申请上线
/// </summary>
/// <param name="OpName"></param>
/// <param name="tagValue"></param>
private void PartLoad(object e)
{
try
{
//object locker = new object();
//lock (locker)
{
DoWhatPlc.CustomeEvetnArgs msgEvent = (DoWhatPlc.CustomeEvetnArgs)e;
string OpName = Convert.ToString(msgEvent.OpName);
int tagValue = Convert.ToInt32(msgEvent.TagValue);
PartLoad(OpName, tagValue.ToString());
}
}
catch (Exception err)
{
////ApplicationLog.WriteLog(err, "Function03:PartLoad");
}
}
/// <summary>
/// MES将盆子码(DB24-63)[74]、小车号(DBB20)[112]、机型代码(DBB22)[73]、机型(DBB64-103)[75]信息写到交互DB块中
/// (DBX0.1=1)[5] MES传递机型
/// </summary>
public void PartLoad(string OpName, string tagValue)
{
//获得 盆子码(发动机号)、小车号、机型代码、机型 取最小的一个
try
{
int desType = 1;
int engineTypeID;
string engineID;
string engineType;
byte kuweiNum;
string kuweiNumStr;
//小车是否需要报警
Boolean carIsWarning = false;
if (tagValue == "1")
{
//订单完成 1 没完成 0
//DtWebApi.ReadWritePLC.WritePLC("52", OpName, true);
//DtWebApi.ReadWritePLC.WritePLC("52", OpName, false);
//
// BaseDataSystemMES.MesServer_Process_EngineTypeOver(OpName);
DataTable dt;
BaseDataSystemMES.GetUpLoadBarCodeEngineID(OpName, out dt);
if (dt.Rows.Count == 0)
{
// 库里无件时去判断需不需要给清料信号
// 1.根据工位号获取上个订单盆子过站数量 判断是否全部订单都绑定了盆子 绑定了就给清料
DataTable dt4;
BaseDataSystemMES.GetMaxPartCount(OpName, out dt4);
// 3.判断是否全部订单都绑定了盆子 绑定了就给清料
if (Convert.ToInt32(dt4.Rows[0]["未绑定数"]) == 0)
{
// 4.返回清料信号
DtWebApi.ReadWritePLC.WritePLC("52", OpName, true);
//5.删除工位小车所有信息,上料位置,抓取位置等
//BaseDataSystemMES.ClearOpCarData(OpName);
}
// 告诉PLC MES 程序处理完成了
DtWebApi.ReadWritePLC.WritePLC("26", OpName, true);
return;
}
// 有件时去把清料信号给去掉
DtWebApi.ReadWritePLC.WritePLC("52", OpName, false);
engineTypeID = Convert.ToInt32(dt.Rows[0]["机型代码"]);
desType = Convert.ToInt32(dt.Rows[0]["加工方式"]);
engineID = dt.Rows[0]["发动机号"].ToString();
engineType = dt.Rows[0]["发动机型号"].ToString();
kuweiNum = Convert.ToByte(dt.Rows[0]["库位号"]);
kuweiNumStr = dt.Rows[0]["库位号"].ToString();
string OrderForm = dt.Rows[0]["订单号"].ToString();
MIS_BASE.Read_PalletCode(OpName, out int PartPallet_Code);
//BaseDataSystemMES.OpName_MIS_MOBY_Insert(OpName, OrderForm, engineTypeID, engineType, engineID, PartPallet_Code, 0, 0, "");
//判断对应小车的低车位是否有料
String[] carSensorStr = { "76", "61", "62", "63", "64", "65" };
String carCheckStr = carSensorStr[Convert.ToInt32(kuweiNumStr) -1];
Boolean checkGo = Convert.ToBoolean(DtWebApi.ReadWritePLC.ReadPLC(carCheckStr, OpName));
//如果当前车位无工件信号就报警
carIsWarning = !checkGo;
// 在高车位时判断低车位是否有件
if (Convert.ToInt32(kuweiNumStr) % 2 == 0 && !carIsWarning)
{
String checkLowCar = carSensorStr[Convert.ToInt32(kuweiNumStr) - 2];
carIsWarning = Convert.ToBoolean(DtWebApi.ReadWritePLC.ReadPLC(checkLowCar, OpName));
}
//判断三个小车位是否存在信号
String[] carSensorStr2 = { "33", "34", "35" };
String carCheckStr2 = carSensorStr2[((Convert.ToInt32(kuweiNumStr) + 1) / 2) - 1];
//如果车位无信号就报警
if (!Convert.ToBoolean(DtWebApi.ReadWritePLC.ReadPLC(carCheckStr2, OpName)))
{
carIsWarning = true;
}
//判断是否需要给报警信号
if (carIsWarning)
{
DtWebApi.ReadWritePLC.WritePLC("25", OpName, true);
return;
}
DtWebApi.ReadWritePLC.WritePLC("25", OpName, false);
////将产品信息写入PLC
MIS_BASE.Write_EngineTypeID_MES(OpName, engineTypeID);
MIS_BASE.Write_EngineType_MES(OpName, engineType);
MIS_BASE.Write_EngineID_MES(OpName, engineID);
MIS_BASE.Write_TagTypeID(116, OpName, OrderForm);
// 库位号
DtWebApi.ReadWritePLC.WritePLC("112", OpName, kuweiNum);
// DES1 DES2
DtWebApi.ReadWritePLC.WritePLC("88", OpName, desType);
//获取订单号,发动机型号,发动机型号代码(在线首工位将选择的订单,机型等信息保存到监控表中)
// bizFacade.BaseDataSystemMES.OpName_MIS_CreateMoby_Select(OpName, out string orderForm, out engineTypeID, out engineType, out engineID, out string palletCode, out int isRepair, out string repairCode);
// 判断空死盆子 发送到地址变量 70
DataTable dt2 = BaseDataSystemMES.WorkPlatePartSelect(OpName, engineType);
if (dt2.Rows.Count > 0)
{
if (dt2.Rows[0]["零件名称"].ToString() == "通盆子")
{
MIS_BASE.WritePLC(70, OpName, 1);
}
else
{
MIS_BASE.WritePLC(70, OpName, 0);
}
}
// 写入MES传递机型
MIS_BASE.Write_EngineTypeGetOver_MES(OpName, true);
// 写占用盆子 更新数据库是否占用 = 1
//BaseDataSystemMES.UpdateKuWeiStatus(OpName, kuweiNumStr);
// 告诉PLC MES 程序处理完成了
DtWebApi.ReadWritePLC.WritePLC("26", OpName, true);
}
}
catch (Exception err)
{
////ApplicationLog.WriteLog(err, "Function03:PartLoad");
}
}
}
}