You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

422 lines
20 KiB
C#

using Mesnac.Compressor.Data;
using Mesnac.Compressor.Entity;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using static System.Collections.Specialized.BitVector32;
namespace Mesnac.Compressor.Station
{
public class NormarlStation : Common, IStation
{
public bool PrepareWork(StationInfo station)
{
//防止PLC没给直线条码导致程序崩溃
if (station.Data.subLineList == null)
{
ICSharpCode.Core.LoggingService.Error(station.StationCode + "未收到PLC传递的条码");
this.DaoWeiQingQiuHandle(station, (int)DaoWeiResult.NoBarCode);
return false;
}
if (station.stationID == "4")
{
//锁螺丝机
if (string.IsNullOrEmpty(station.Data.subLineList[2].barcode) || station.Data.subLineList[2].barcode.Equals("ERROR"))
{
ICSharpCode.Core.LoggingService.Error(station.StationCode + "未收到PLC传递的条码");
this.DaoWeiQingQiuHandle(station, (int)DaoWeiResult.NoBarCode);
return false;
}
}
//if (station.stationID == "9")
//{
// //锁螺丝机
// if (string.IsNullOrEmpty(station.Data.subLineList[1].barcode) || station.Data.subLineList[1].barcode.Equals("ERROR"))
// {
// ICSharpCode.Core.LoggingService.Error(station.StationCode + "未收到PLC传递的条码");
// this.DaoWeiQingQiuHandle(station, (int)DaoWeiResult.NoBarCode);
// return false;
// }
// else
// {
// ICSharpCode.Core.LoggingService.Debug("工位:" + station.StationCode + ",RFID" + station.Data.RFIDNo + ",条码号:" + station.Data.subLineList[1].barcode);
// }
//}
ICSharpCode.Core.LoggingService.Debug(station.StationCode + ",打印托盘号:" + station.Data.RFIDNo);
#region 测试暂时去掉
bool iflag = IsOpen(station.stationID);
if (iflag)
{
//查询是否NG物料放行
string semibarcode = GetTraySemiBarcode(station.Data.RFIDNo);
//根据托盘号判断上工位是否为NG如果NG则放行
bool StationState = GetStateStationByRFID(station.Data.RFIDNo);
if (!StationState)
{
ICSharpCode.Core.LoggingService.Error(station.StationCode + "检测上工位信息NG放行");
this.DaoWeiQingQiuHandle(station, (int)DaoWeiResult.TakeNG);
Thread.Sleep(1000);
this.DaoWeiQingQiuHandle(station, (int)DaoWeiResult.FangXing);
return false;
}
bool ReSatrtWork = JudgeStationReWork(station);
//如果是重投并且到了重做工位(此处并不是重投口,而是对应拆解台选择的重做工位)
if (ReSatrtWork)
{
WritePLC_Result(station);
return false;
}
//不是重投
else
{
string preStationID = GetFirstStationIDByStationID(station.stationID);
if (!string.IsNullOrEmpty(preStationID))
{
bool iPreflag = IsOpen(preStationID);
if (iPreflag)
{
//判断上工位是否NG根据托盘号查询A码
string barcode = GetTraySemiBarcode(station.Data.RFIDNo);
if (!string.IsNullOrEmpty(barcode))
{
if (station.stationID == "4")
{
string JPCode = SelectJingPanCodeBySemiBarcodeA(barcode);
//根据静盘码查询螺丝机工位信息
string LastWorkInfo = LastWorkProductionInfo(JPCode, station.PreTableName, "ScanBarcode");
if (!string.IsNullOrEmpty(LastWorkInfo))
{
ICSharpCode.Core.LoggingService.DebugFormatted("查询上工位工作信息:{0}", LastWorkInfo);
if (LastWorkInfo != "1")
{
ICSharpCode.Core.LoggingService.Error(station.StationCode + "检测上工位信息不合格,NG物料拿取");
this.DaoWeiQingQiuHandle(station, (int)DaoWeiResult.TakeNG);
Thread.Sleep(1000);
this.DaoWeiQingQiuHandle(station, (int)DaoWeiResult.FangXing);
return false;
}
}
else
{
ICSharpCode.Core.LoggingService.Error(station.StationCode + "检测上工位信息为空,上工序未完成");
this.DaoWeiQingQiuHandle(station, (int)DaoWeiResult.PreNoWork);
Thread.Sleep(1000);
this.DaoWeiQingQiuHandle(station, (int)DaoWeiResult.FangXing);
return false;
}
}
else
{
//查询托盘当前的工位
if (!this.PreStationInfo(station, station.Data.RFIDNo))
{
ICSharpCode.Core.LoggingService.Error(station.StationCode + "检测无上工位信息");
this.DaoWeiQingQiuHandle(station, (int)DaoWeiResult.PreNoWork);
Thread.Sleep(1000);
this.DaoWeiQingQiuHandle(station, (int)DaoWeiResult.FangXing);
return false;
}
//查询上一工位是否NG
//根据托盘号判断上工位是否为NG如果NG则放行
bool PreStationState = GetStateStationByRFID(station.Data.RFIDNo);
if (!PreStationState)
{
ICSharpCode.Core.LoggingService.Error(station.StationCode + "检测上工位信息不合格");
this.DaoWeiQingQiuHandle(station, (int)DaoWeiResult.PreNoWork);
Thread.Sleep(1000);
this.DaoWeiQingQiuHandle(station, (int)DaoWeiResult.FangXing);
return false;
}
}
}
}
}
}
#endregion
}
this.DaoWeiQingQiuHandle(station, (int)DaoWeiResult.OK);
//这里加一个物料是否匹配=======//还要加判断,当前工位是否需要判断
return true;
}
public bool JudgeStationReWork(StationInfo station)
{
bool bFlag = false;
try
{
if (station.stationID == "4")
{
//string productcode = "";
//productcode = station.Data.subLineList[2].barcode;
//根据条码查询是否重投
//bFlag = IsReStartWorkByBarCode(station, productcode);
//根据条码查询是否有历史记录
//string IsReWork = GetReStartInfo("SemiBarcode", station.Data.subLineList[2].barcode, station.TableName, "ScanBarcode");
if (station.Data.Restart)
{
ICSharpCode.Core.LoggingService.DebugFormatted("{0}查询{1}托盘的产品为重投,条码:{2}", station.StationName, station.Data.RFIDNo, station.Data.subLineList[2].barcode);
bFlag = true;
}
}
else if (station.stationID == "5")
{
//重投到当前工位
ICSharpCode.Core.LoggingService.Debug(station.StationCode + "收到PLC传递的托盘号:" + station.Data.RFIDNo);
string isrestart = ReStartWork(station);
if (!string.IsNullOrEmpty(isrestart))
{
if (isrestart == "2" || isrestart == "3")
{
bFlag = true;
}
}
}
else if (station.stationID == "6")
{
//重投到当前工位
ICSharpCode.Core.LoggingService.Debug(station.StationCode + "收到PLC传递的托盘号:" + station.Data.RFIDNo);
//bFlag = IsReStartWork(station);
string isrestart = ReStartWork(station);
if (!string.IsNullOrEmpty(isrestart))
{
if (isrestart == "3")
{
ICSharpCode.Core.LoggingService.Debug(station.StationCode + "查询[" + station.Data.RFIDNo + "]托盘的产品为重投");
bFlag = true;
}
}
}
else if (station.stationID == "7")
{
//重投到当前工位
ICSharpCode.Core.LoggingService.Debug(station.StationCode + "收到PLC传递的托盘号:" + station.Data.RFIDNo);
//bFlag = IsReStartWork(station);
string isrestart = ReStartWork(station);
if (!string.IsNullOrEmpty(isrestart))
{
if (isrestart == "3")
{
ICSharpCode.Core.LoggingService.Debug(station.StationCode + "查询[" + station.Data.RFIDNo + "]托盘的产品为重投");
bFlag = true;
}
}
}
//else if (station.stationID == "9")
//{
// ICSharpCode.Core.LoggingService.DebugFormatted("{0}收到PLC传递的托盘号:{1},条码:{2}", station.StationCode, station.Data.RFIDNo, station.Data.subLineList[1].barcode);
// //bool ReSatrtWork = IsReStartWorkByBarCode(station, station.Data.subLineList[1].barcode);
// //bFlag = IsReStartWork(station);
// string IsReWork = GetReStartInfo("SemiBarcode", station.Data.subLineList[1].barcode, station.TableName, "ScanBarcode");
// if (!string.IsNullOrEmpty(IsReWork))
// {
// ICSharpCode.Core.LoggingService.DebugFormatted("{0}查询{1}托盘的产品为重投,条码:{2}", station.StationName, station.Data.RFIDNo, station.Data.subLineList[1].barcode);
// bFlag = true;
// }
//}
//else if (station.stationID == "10")
//{
// //重投到当前工位
// ICSharpCode.Core.LoggingService.Debug(station.StationCode + "收到PLC传递的托盘号:" + station.Data.RFIDNo);
// bFlag = IsReStartWork(station);
//}
return bFlag;
}
catch (Exception ex)
{
return false;
}
}
public bool WritePLC_Result(StationInfo station)
{
bool bIsReStartWork = false;
string stationID = "";
string ISdis = "";
try
{
if (station.stationID == "4")
{
//根据条码查询原来的组件绑定到新版上
string Abarcode = GetTraySemiBarcode(station.Data.RFIDNo);
InsertBarcodeRelationShip(Abarcode, station.Data.subLineList[2].barcode, "", 2);
if (station.Data.QGCT)
{
ICSharpCode.Core.LoggingService.Debug("前盖重投...");
stationID = "5";
ISdis = "2";
}
else
{
ICSharpCode.Core.LoggingService.Debug("曲轴组件重投...");
stationID = "8";
ISdis = "3";
}
//更新工位信息并放行
UpdateTray(stationID, station.Data.RFIDNo);
//更新T_SY_TraceState表工位状态
bool bflag = UpdateTraceReStartStation(ISdis, "4", stationID, "",Abarcode);
this.DaoWeiQingQiuHandle(station, (int)DaoWeiResult.FangXing);
return bIsReStartWork;
}
else if (station.stationID == "5")
{
string Abarcode = GetTraySemiBarcode(station.Data.RFIDNo);
//更新工位信息并放行
UpdateTray(station.stationID, station.Data.RFIDNo);
//更新当前工位
UpdateTraceReStartStation(station.stationID, Abarcode);
this.DaoWeiQingQiuHandle(station, (int)DaoWeiResult.FangXing);
return bIsReStartWork;
}
else if (station.stationID == "6")
{
string Abarcode = GetTraySemiBarcode(station.Data.RFIDNo);
//更新工位信息并放行
UpdateTray(station.stationID, station.Data.RFIDNo);
//更新当前工位
UpdateTraceReStartStation(station.stationID, Abarcode);
this.DaoWeiQingQiuHandle(station, (int)DaoWeiResult.FangXing);
return false;
}
else if (station.stationID == "7")
{
string Abarcode = GetTraySemiBarcode(station.Data.RFIDNo);
//更新工位信息并放行
UpdateTray(station.stationID, station.Data.RFIDNo);
//更新当前工位
UpdateTraceReStartStation(station.stationID, Abarcode);
this.DaoWeiQingQiuHandle(station, (int)DaoWeiResult.FangXing);
return false;
}
return bIsReStartWork;
}
catch (Exception ex)
{
return bIsReStartWork;
}
}
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;
//}
//保存数据
if (station.stationID == "4")
{
station.Data.ProductBarcode = station.Data.subLineList[2].barcode;
}
//曲轴组件装配
else if (station.stationID == "6")
{
//ok放行
if (station.Data.DP_OpenFlag)
{
ICSharpCode.Core.LoggingService.ErrorFormatted("{0}工位OK物料放行", station.StationName);
//string semibarcode = GetTraySemiBarcode(station.Data.RFIDNo);
////收到PLC OK放行信号系统强制托盘信息为合格
//UpdateTray(station.Data.RFIDNo, semibarcode, "6", 1);
//this.DaoWeiQingQiuHandle(station, (int)DaoWeiResult.FangXing);
//return false;
}
//NG放行
if (station.Data.ReWork)
{
ICSharpCode.Core.LoggingService.ErrorFormatted("{0}工位NG物料放行" , station.StationName);
//标记NG物料放行
string semibarcode = GetTraySemiBarcode(station.Data.RFIDNo);
//string mainBarcode = GetTrayBarcode(station.Data.RFIDNo);
UpdateTray(station.Data.RFIDNo, semibarcode,"6",3);
this.DaoWeiQingQiuHandle(station, (int)DaoWeiResult.FangXing);
return false;
}
}
else if (station.stationID == "7")
{
if (station.Data.ReWork)
{
ICSharpCode.Core.LoggingService.ErrorFormatted("{0}工位NG物料放行", station.StationName);
//标记NG物料放行
string semibarcode = GetTraySemiBarcode(station.Data.RFIDNo);
//string mainBarcode = GetTrayBarcode(station.Data.RFIDNo);
UpdateTray(station.Data.RFIDNo, semibarcode, "7", 3);
this.DaoWeiQingQiuHandle(station, (int)DaoWeiResult.FangXing);
return false;
}
}
else if (station.stationID == "9")
{
station.Data.ProductBarcode = station.Data.subLineList[1].barcode;
//查询是否重投
ICSharpCode.Core.LoggingService.DebugFormatted("{0}收到PLC传递的托盘号:{1},条码:{2}", station.StationCode, station.Data.RFIDNo, station.Data.subLineList[1].barcode);
//string IsReWork = GetReStartInfo("ScanBarcode", station.Data.subLineList[1].barcode, station.TableName, "ScanBarcode");
if (station.Data.Restart)
{
ICSharpCode.Core.LoggingService.DebugFormatted("{0}查询{1}托盘的产品为重投,条码:{2}", station.StationName, station.Data.RFIDNo, station.Data.subLineList[1].barcode);
string Abarcode = GetTraySemiBarcode(station.Data.RFIDNo);
//判断是否存在物料关系,如果存在则更新,反之插入数据
InsertBarcodeRelationShip(Abarcode, station.Data.subLineList[1].barcode, "", 1);
//更新工位信息并放行
UpdateTray(station.stationID, station.Data.RFIDNo);
//更新T_SY_TraceState表工位状态
bool bflag = UpdateTraceReStartStation("4","9", "10", station.Data.subLineList[1].barcode, Abarcode);
this.DaoWeiQingQiuHandle(station, (int)DaoWeiResult.FangXing);
return false;
}
//肯定是新板新组件
//根据条码查询原来的组件绑定到新版上
}
base.SaveStationData(station,StationType.NormarlStation);
FinishSavePLCWork(station);
return true;
}
catch (Exception e)
{
ICSharpCode.Core.LoggingService.Info(e.ToString());
//这里要加一个OK放行
FinishSavePLCWork(station);
return false;
}
}
}
}