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.
314 lines
11 KiB
C#
314 lines
11 KiB
C#
using CentralControl.BaseData;
|
|
using CentralControl.DBDAO;
|
|
using CommonFunc;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading;
|
|
using XGL.Thrift;
|
|
using Thrift.Protocol;
|
|
using Thrift.Server;
|
|
using Thrift.Transport;
|
|
|
|
namespace CentralControl.App_Code
|
|
{
|
|
/// <summary>
|
|
/// 下件点扫描逻辑
|
|
/// </summary>
|
|
public class Logic3001OffLine
|
|
{ /// <summary>
|
|
/// plc 正在读取
|
|
/// </summary>
|
|
bool IsPlcRead { get; set; }
|
|
|
|
Thread OffMaterialThriftThread;
|
|
PlcHelper plcHelper;
|
|
string LineNo { get; set; }
|
|
int Thriftpoint { get; set; }
|
|
|
|
NodeSetting ScanPoint { get; set; }
|
|
|
|
/// <summary>
|
|
/// 箱体出库操作点
|
|
/// </summary>
|
|
NodeSetting BoxOutPoint { get; set; }
|
|
|
|
/// <summary>
|
|
/// 物料到位后,推送给客户端
|
|
/// </summary>
|
|
|
|
Thread OffClientThread { get; set; }
|
|
/// <summary>
|
|
/// 当前到位的小车物料
|
|
/// </summary>
|
|
string OffMaterialId { get; set; }
|
|
|
|
|
|
/// <summary>
|
|
/// 是否运行发车中
|
|
/// </summary>
|
|
bool IsRuning { get; set; }
|
|
|
|
public Logic3001OffLine(PlcHelper plc, string nodeno, string outboxno, int thrifthport)
|
|
{
|
|
try {
|
|
this.ScanPoint = StaticData.NodeSettingList.FirstOrDefault(t => t.NodeNo == nodeno);
|
|
this.BoxOutPoint = StaticData.NodeSettingList.FirstOrDefault(t => t.NodeNo == outboxno);
|
|
this.Thriftpoint = thrifthport;
|
|
if (this.ScanPoint != null)
|
|
{
|
|
this.LineNo = this.ScanPoint.LineCatchArea != null ? this.ScanPoint.LineCatchArea.LineNo : "1";
|
|
|
|
}
|
|
else
|
|
{
|
|
Logger logger = new Logger();
|
|
logger.Log("创建线体,未找到扫描点位");
|
|
}
|
|
|
|
|
|
this.LineNo = LineNo;
|
|
this.plcHelper = plc;
|
|
|
|
|
|
|
|
this.plcHelper.Write(this.ScanPoint.PlcSetting4, 0);
|
|
this.plcHelper.Write(this.ScanPoint.PlcSetting5, 0);
|
|
this.plcHelper.Write(this.BoxOutPoint.PlcSetting2, 0);
|
|
|
|
// this.plcHelper.Write(this.OpteratePoint.PlcSetting2, 0);
|
|
//}
|
|
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Console.WriteLine("站点" + nodeno + " 初始化数据异常" + ex.Message);
|
|
Logger logger = new Logger();
|
|
logger.Error("站点" + nodeno + " 初始化数据异常" + ex.Message);
|
|
}
|
|
|
|
}
|
|
|
|
|
|
public void StartPoint()
|
|
{
|
|
// 启动thrift线程监视
|
|
OffMaterialThriftThread = new Thread(new ParameterizedThreadStart(StartScanThriftLogic));
|
|
OffMaterialThriftThread.Start(this.Thriftpoint);
|
|
|
|
OffClientThread = new Thread(NoticeMaterialInfo);
|
|
OffClientThread.Start();
|
|
|
|
}
|
|
|
|
|
|
private void NoticeMaterialInfo()
|
|
{
|
|
|
|
|
|
|
|
Logger logger = new Logger();
|
|
|
|
var scanmaterial = StaticData.OffMaterialList.LastOrDefault();
|
|
string lastmaterialno = "";
|
|
if (scanmaterial != null)
|
|
{
|
|
lastmaterialno = scanmaterial.ProductBarNo;
|
|
}
|
|
|
|
while (true)
|
|
{
|
|
try
|
|
{
|
|
|
|
|
|
object materialno = this.plcHelper.Read(this.BoxOutPoint.PlcSetting1);
|
|
string materialstr = materialno.ToString();
|
|
string readstate = materialstr.Substring(63, 6).ToUpper();
|
|
|
|
if (readstate == "NOREAD")
|
|
{
|
|
//无条码
|
|
}
|
|
else
|
|
{
|
|
lock (StaticData.offMaterialCarLock)
|
|
{
|
|
string materialserialno = materialstr.Substring(63, 24).ToUpper();
|
|
string material = materialstr.Substring(63, 9).ToUpper();
|
|
logger.Log("扫描物料信息" + materialserialno + " [" + material + "]");
|
|
if (lastmaterialno != material)
|
|
{
|
|
OffLineMaterialList scan = new OffLineMaterialList();
|
|
scan.MaterialNo = material.ToUpper();
|
|
var materialinfo = StaticData.MateriaList.FirstOrDefault(t => t.MaterialNo == scan.MaterialNo);
|
|
if (materialinfo != null)
|
|
{
|
|
scan.MaterialDes = materialinfo.MaterialNm;
|
|
}
|
|
scan.IsOver = 0;
|
|
scan.CreateTime = DateTime.Now;
|
|
int id = DBService.AddOffLineMaterialList(scan);
|
|
scan.Id = id;
|
|
StaticData.OffMaterialList.Add(scan);
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
///读取小车号
|
|
object carobj = this.plcHelper.Read(this.ScanPoint.PlcSetting1);
|
|
string carno = Common.getCarNoByPlcPoint(carobj);
|
|
//小车是否到位
|
|
object carstate = this.plcHelper.Read(this.ScanPoint.PlcSetting2);
|
|
//小车是否离开
|
|
object carrun = this.plcHelper.Read(this.ScanPoint.PlcSetting3);
|
|
///上位机写入岔道信息
|
|
object wcsstate = this.plcHelper.Read(this.ScanPoint.PlcSetting4);
|
|
///回写plc状态处理完成,plc会清理数据
|
|
object wcsend = this.plcHelper.Read(this.ScanPoint.PlcSetting5);
|
|
// 1 已下件 , ,0 未下件
|
|
//this.plcHelper.Write(this.OpteratePoint.PlcSetting1, 0);
|
|
|
|
|
|
|
|
if (carno != null && carstate != null && carrun != null && wcsstate != null && wcsend != null)
|
|
{
|
|
if (Convert.ToInt32(wcsend) == 0 && Convert.ToInt32(wcsstate) == 0 && Convert.ToInt32(carstate) == 1 && Convert.ToInt32(carrun) == 0 && Convert.ToInt32(carno) > 0)
|
|
{
|
|
string carNo = carno.ToString();
|
|
var car = StaticData.CarRealList.FirstOrDefault(t => t.CarNo == carNo);
|
|
if (car != null)
|
|
{
|
|
|
|
car.CurrNodeId = this.ScanPoint.Id;
|
|
car.IsOutLocator = 0;
|
|
car.IsOver = 0;
|
|
car.IsProOutLocator = 0;
|
|
car.LineAreaNo = "";
|
|
car.LocatorArea = null;
|
|
car.LocatorId = 0;
|
|
car.LocatorNodeId = 0;
|
|
car.MaterialBarNo = "";
|
|
car.MaterialInfo = null;
|
|
car.MaterialNo = "";
|
|
car.Number = 0;
|
|
|
|
car.OptDt = DateTime.Now;
|
|
car.ProLocatorArea = null;
|
|
if (car.OffMaterialId > 0)
|
|
{
|
|
var offmaterial = StaticData.OffMaterialList.FirstOrDefault(t => t.Id == car.OffMaterialId);
|
|
if (offmaterial != null)
|
|
{
|
|
offmaterial.IsDeleted = 1;
|
|
DBService.UpdateOffLineMaterialList(offmaterial);
|
|
}
|
|
}
|
|
//清除小车门体对应的产品列表
|
|
DBService.DeleteCarMaterialByCarNo(car.CarNo);
|
|
//清除小车上的门体数据列表
|
|
DBService.DeleteCarProductByCarNo(car.CarNo);
|
|
car.LoadingMaterial.Clear();
|
|
car.LoadingProduct.Clear();
|
|
car.OffMaterialId = 0;
|
|
DBService.ModifyRealCarinfoRecord(car);
|
|
this.plcHelper.Write(this.ScanPoint.PlcSetting4, 1);
|
|
this.plcHelper.Write(this.ScanPoint.PlcSetting5, 1);
|
|
|
|
|
|
}
|
|
else
|
|
{
|
|
logger.Log("下件点小车号[" + carno + "]未找到小车");
|
|
}
|
|
}
|
|
else if (Convert.ToInt32(carno) > 0 && Convert.ToInt32(carrun) == 1 && Convert.ToInt32(wcsend) == 1)
|
|
{
|
|
//下件完成 ,小车离开
|
|
// IsPlcRead = false;
|
|
var car = StaticData.CarRealList.Where(t => t.CarNo == carno.ToString()).FirstOrDefault();
|
|
if (car != null)
|
|
{
|
|
this.plcHelper.Write(this.ScanPoint.PlcSetting4, 0);
|
|
this.plcHelper.Write(this.ScanPoint.PlcSetting5, 0);
|
|
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
logger.Error("小车下件到位通知异常:" + ex.Message + ex.StackTrace);
|
|
IsRuning = false;
|
|
// return "系统异常";
|
|
}
|
|
|
|
Thread.Sleep(1000);
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
/// 启动箱体扫描交互
|
|
/// </summary>
|
|
private void StartScanThriftLogic(object thriftpoint)
|
|
{
|
|
int point = Convert.ToInt32(thriftpoint);
|
|
this.LineNo = this.LineNo;
|
|
XGL.Thrift.ThriftServiceImp business = new XGL.Thrift.ThriftServiceImp();
|
|
business.SendOutLocatorBarcodeEvent += ScanOutLocatorBarCode;
|
|
XGL.Thrift.ThriftCommon thriftCommon = new XGL.Thrift.ThriftCommon();
|
|
thriftCommon.Start(business, point);
|
|
|
|
}
|
|
|
|
|
|
private string ScanOutLocatorBarCode(string barcode)
|
|
{
|
|
string lastmaterialno = "";
|
|
Logger logger = new Logger();
|
|
lock (StaticData.offMaterialCarLock)
|
|
{
|
|
|
|
string material = barcode.Substring(0, 9).ToUpper();
|
|
logger.Log("扫描物料信息" + barcode + " [" + material + "]");
|
|
if (lastmaterialno != material)
|
|
{
|
|
OffLineMaterialList scan = new OffLineMaterialList();
|
|
scan.MaterialNo = material.ToUpper();
|
|
var materialinfo = StaticData.MateriaList.FirstOrDefault(t => t.MaterialNo == scan.MaterialNo);
|
|
if (materialinfo != null)
|
|
{
|
|
scan.MaterialDes = materialinfo.MaterialNm;
|
|
}
|
|
scan.Number = 1;
|
|
scan.IsOver = 0;
|
|
scan.CreateTime = DateTime.Now;
|
|
int id = DBService.AddOffLineMaterialList(scan);
|
|
scan.Id = id;
|
|
StaticData.OffMaterialList.Add(scan);
|
|
}
|
|
|
|
}
|
|
return "";
|
|
}
|
|
|
|
|
|
}
|
|
}
|