|
|
using Mesnac.Compressor.Data;
|
|
|
using Mesnac.Compressor.Entity;
|
|
|
using System;
|
|
|
using System.Collections.Generic;
|
|
|
using System.Linq;
|
|
|
using System.Text;
|
|
|
namespace Mesnac.Compressor.Station
|
|
|
{
|
|
|
public class NormarlStation : Common, IStation
|
|
|
{
|
|
|
|
|
|
public bool PrepareWork(StationInfo station)
|
|
|
{
|
|
|
//主线产品码未扫描到条码下发PLC报警
|
|
|
if (station.stationID == "24")
|
|
|
{
|
|
|
if (string.IsNullOrEmpty(station.Data.ProductBarcode) || station.Data.ProductBarcode.Equals("ERROR"))
|
|
|
{
|
|
|
ICSharpCode.Core.LoggingService.Error(station.StationCode + "未收到PLC传递的条码");
|
|
|
this.DaoWeiQingQiuHandle(station, (int)DaoWeiResult.NoBarCode);
|
|
|
return false;
|
|
|
}
|
|
|
if (station.Data.Restart)
|
|
|
{
|
|
|
this.DaoWeiQingQiuHandle(station, (int)DaoWeiResult.OK);
|
|
|
|
|
|
return Chongtou(station);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
//是否重投
|
|
|
if (station.Data.Restart)
|
|
|
{
|
|
|
return Chongtou(station);
|
|
|
}
|
|
|
|
|
|
//是否当前工位重做
|
|
|
if (station.Data.ReWork)
|
|
|
{
|
|
|
ICSharpCode.Core.LoggingService.Debug(station.StationCode + "检测到当前工位重做信号,下发可以工作信号");
|
|
|
this.DaoWeiQingQiuHandle(station, (int)DaoWeiResult.OK);
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
bool iflag = IsOpen(station.stationID);
|
|
|
if (iflag)
|
|
|
{
|
|
|
#region 测试暂时去掉
|
|
|
|
|
|
|
|
|
//动静盘工位支线上线互锁逻辑
|
|
|
if (station.stationID == "13")
|
|
|
{
|
|
|
//根据静盘条码判断在上工位是否合格;不合格则下发NG物料拿取
|
|
|
string JP_BarCode = station.Data.subLineList[4].barcode;
|
|
|
//获取静盘条码在上工位是否合格(该工位需要试错,由于不合格品较多,暂时屏蔽互锁功能)
|
|
|
//if (!GetJPProductionQuality(JP_BarCode))
|
|
|
//{
|
|
|
// ICSharpCode.Core.LoggingService.Debug(station.StationCode + "静盘检测工位不合格");
|
|
|
// this.DaoWeiQingQiuHandle(station, (int)DaoWeiResult.TakeNG);
|
|
|
// return false;
|
|
|
//}
|
|
|
//动盘扫码开关是否打开
|
|
|
if (!station.Data.DP_OpenFlag)
|
|
|
{
|
|
|
//判断动盘与静盘是否匹配
|
|
|
string DP_BarCode = station.Data.subLineList[3].barcode;
|
|
|
//根据静盘码查询库表中动静盘关系
|
|
|
DJPBarCodeRelationShip dJPBarCodeRelationShip = new DJPBarCodeRelationShip();
|
|
|
dJPBarCodeRelationShip = GetProductQuality(JP_BarCode);
|
|
|
if (dJPBarCodeRelationShip.DPBarCode != "" && dJPBarCodeRelationShip.DPBarCode != null)
|
|
|
{
|
|
|
if (DP_BarCode != dJPBarCodeRelationShip.DPBarCode || JP_BarCode != dJPBarCodeRelationShip.JPBarCode)
|
|
|
{
|
|
|
ICSharpCode.Core.LoggingService.Error(station.StationCode + "静盘不匹配");
|
|
|
this.DaoWeiQingQiuHandle(station, (int)DaoWeiResult.MaterialNoMatch);
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
else
|
|
|
{
|
|
|
this.DaoWeiQingQiuHandle(station, (int)DaoWeiResult.OK);
|
|
|
return true;
|
|
|
}
|
|
|
}
|
|
|
//应该不存在这种情况
|
|
|
else
|
|
|
{
|
|
|
ICSharpCode.Core.LoggingService.Error(station.StationCode + "动静盘没有动盘码");
|
|
|
this.DaoWeiQingQiuHandle(station, (int)DaoWeiResult.PreNoWork);
|
|
|
return false;
|
|
|
}
|
|
|
}
|
|
|
//动盘扫码枪未打开
|
|
|
else
|
|
|
{
|
|
|
//只判断静盘在上工位是否完成
|
|
|
string LastWorkInfo = LastWorkProductionInfo(station.Data.subLineList[4].barcode, "T_RP_StationPara_S320");
|
|
|
if (string.IsNullOrEmpty(LastWorkInfo))
|
|
|
{
|
|
|
ICSharpCode.Core.LoggingService.Error(station.StationCode + "检测无上工位信息");
|
|
|
this.DaoWeiQingQiuHandle(station, (int)DaoWeiResult.PreNoWork);
|
|
|
return false;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
//NG物料拿取
|
|
|
if (LastWorkInfo != "1")
|
|
|
{
|
|
|
ICSharpCode.Core.LoggingService.Error(station.StationCode + "检测上工位不合格");
|
|
|
this.DaoWeiQingQiuHandle(station, (int)DaoWeiResult.TakeNG);
|
|
|
return false;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
WorkTray tray = new WorkTray();
|
|
|
//如果托盘是空的,直接放行,这里可能有个问题,PLC已经判断不是空托盘了,如果是空托盘肯定是系统数据有问题
|
|
|
if (this.TrayIsNull(station, out tray))
|
|
|
{
|
|
|
ICSharpCode.Core.LoggingService.Debug(station.StationCode + "检测到托盘未绑定");
|
|
|
this.DaoWeiQingQiuHandle(station, (int)DaoWeiResult.OK);
|
|
|
return true;
|
|
|
}
|
|
|
//判断当前工位是否已经合格
|
|
|
//if (this.CurrentStationInfo(station, tray.RfidNum))
|
|
|
//{
|
|
|
// ICSharpCode.Core.LoggingService.Debug(station.StationCode + "检测当前工位已合格");
|
|
|
// this.DaoWeiQingQiuHandle(station, (int)DaoWeiResult.NG);
|
|
|
// return false;
|
|
|
//}
|
|
|
//这里应该判断一下是不是重投的
|
|
|
//if (IsReStartProduction(station.Data.semibacode))
|
|
|
//{
|
|
|
// ICSharpCode.Core.LoggingService.Debug(station.StationCode + "检测为重投");
|
|
|
// if (station.stationID == "4")
|
|
|
// {
|
|
|
// this.DaoWeiQingQiuHandle(station, (int)DaoWeiResult.NG);
|
|
|
// return false;
|
|
|
// }
|
|
|
//}
|
|
|
//这里要过滤掉重投的,不然重投的到本工位会报警
|
|
|
bool ReSatrtWork = IsReStartWork(station);
|
|
|
//如果是重投并且到了重做工位(此处并不是重投口,而是对应拆解台选择的重做工位)
|
|
|
if (ReSatrtWork)
|
|
|
{
|
|
|
//已经重投到了本工位,可以工作
|
|
|
//获取重投的工位号
|
|
|
string CurrentStationID = GetCurrentStationByRFID(tray.RfidNum);
|
|
|
if (int.Parse(station.stationID) < int.Parse(CurrentStationID))
|
|
|
{
|
|
|
ICSharpCode.Core.LoggingService.Debug(station.StationCode + "检测到未到重做工位");
|
|
|
this.DaoWeiQingQiuHandle(station, (int)DaoWeiResult.NG);
|
|
|
return false;
|
|
|
}
|
|
|
else if(int.Parse(station.stationID) == int.Parse(CurrentStationID))
|
|
|
{
|
|
|
ICSharpCode.Core.LoggingService.Debug(station.StationCode + "检测到已到重做工位");
|
|
|
this.DaoWeiQingQiuHandle(station, (int)DaoWeiResult.OK);
|
|
|
return false;
|
|
|
}
|
|
|
else if(int.Parse(station.stationID) > int.Parse(CurrentStationID))
|
|
|
{
|
|
|
//这里需要判断一下上工位开关是否打开
|
|
|
string preStationID = GetFirstStationIDByStationID(station.stationID);
|
|
|
bool iPreflag = IsOpen(preStationID);
|
|
|
if (iPreflag)
|
|
|
{
|
|
|
if (!this.PreStationInfo(station, tray.RfidNum))
|
|
|
{
|
|
|
ICSharpCode.Core.LoggingService.Debug(station.StationCode + "检测无上工位信息");
|
|
|
this.DaoWeiQingQiuHandle(station, (int)DaoWeiResult.PreNoWork);
|
|
|
return false;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
//这里需要判断一下上工位开关是否打开
|
|
|
string preStationID = GetFirstStationIDByStationID(station.stationID);
|
|
|
if (!string.IsNullOrEmpty(preStationID))
|
|
|
{
|
|
|
bool iPreflag = IsOpen(preStationID);
|
|
|
if (iPreflag)
|
|
|
{
|
|
|
//判断上一工位是否有工作信息
|
|
|
|
|
|
if (!this.PreStationInfo(station, tray.RfidNum))
|
|
|
{
|
|
|
ICSharpCode.Core.LoggingService.Debug(station.StationCode + "检测无上工位信息");
|
|
|
this.DaoWeiQingQiuHandle(station, (int)DaoWeiResult.PreNoWork);
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
//如果不是空托盘,判断当前是否合格f
|
|
|
if (tray.OKNG != 1)
|
|
|
{
|
|
|
ICSharpCode.Core.LoggingService.Debug(station.StationCode + "检测上工位信息不合格");
|
|
|
//这里要判断当前工位是否是NG拿取工位=====
|
|
|
if (station.NGTakeStation)
|
|
|
{
|
|
|
this.DaoWeiQingQiuHandle(station, (int)DaoWeiResult.TakeNG);
|
|
|
//托盘状态清空(这里加了当前工位重做逻辑,不需要清空)
|
|
|
//UpdateTray(tray.RfidNum, tray.RfidNum, "", "", 0);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
this.DaoWeiQingQiuHandle(station, (int)DaoWeiResult.NG);
|
|
|
}
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
#endregion
|
|
|
}
|
|
|
this.DaoWeiQingQiuHandle(station, (int)DaoWeiResult.OK);
|
|
|
//这里加一个物料是否匹配=======//还要加判断,当前工位是否需要判断
|
|
|
return true;
|
|
|
}
|
|
|
public bool HandleData(StationInfo station)
|
|
|
{
|
|
|
try
|
|
|
{
|
|
|
//暂时不用
|
|
|
//if (!CheckNewData(station, ""))
|
|
|
//{
|
|
|
// ICSharpCode.Core.LoggingService.Debug("工位:" + station.StationCode + "的RFID:" + station.Data.RFIDNo + "数据已上传。条码号:" + station.Data.ProductBarcode + " 任务号:" + station.Data.MaskID.ToString());
|
|
|
// return false;
|
|
|
//}
|
|
|
//保存数据
|
|
|
base.SaveStationData(station,StationType.NormarlStation);
|
|
|
|
|
|
}
|
|
|
catch (Exception e)
|
|
|
{
|
|
|
ICSharpCode.Core.LoggingService.Info(e.ToString());
|
|
|
return false;
|
|
|
}
|
|
|
finally
|
|
|
{
|
|
|
//这里要加一个OK放行
|
|
|
FinishSavePLCWork(station);
|
|
|
}
|
|
|
return true;
|
|
|
}
|
|
|
}
|
|
|
}
|