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.
622 lines
28 KiB
C#
622 lines
28 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 Logic1004OffLine
|
|
{ /// <summary>
|
|
/// plc 正在读取
|
|
/// </summary>
|
|
bool IsPlcRead { get; set; }
|
|
|
|
Thread OffMaterialThriftThread;
|
|
PlcHelper plcHelper;
|
|
string LineNo { get; set; }
|
|
int Thriftpoint { get; set; }
|
|
int UseButton { set; get; }
|
|
NodeSetting ScanPoint { get; set; }
|
|
/// <summary>
|
|
/// 出库操作点
|
|
/// </summary>
|
|
NodeSetting OpteratePoint { get; set; }
|
|
|
|
/// <summary>
|
|
/// 物料到位后,推送给客户端
|
|
/// </summary>
|
|
|
|
Thread OffClientThread { get; set; }
|
|
/// <summary>
|
|
/// 当前到位的小车物料
|
|
/// </summary>
|
|
string OffMaterialId { get; set; }
|
|
|
|
|
|
string offThriftIp { get; set; }
|
|
|
|
string offThriftPort { get; set; }
|
|
|
|
/// <summary>
|
|
/// 是否运行发车中
|
|
/// </summary>
|
|
bool IsRuning { get; set; }
|
|
|
|
public Logic1004OffLine(PlcHelper plc, string LineNo, int thriftpoint, int useBackButton)
|
|
{
|
|
this.UseButton = useBackButton;
|
|
NodeSetting linenode1 = StaticData.NodeSettingList.FirstOrDefault(t => t.LineCatchArea != null && t.LineCatchArea.LineNo == LineNo && t.LineCatchArea.AreaType == 2 && t.NodeType == 6);
|
|
|
|
//1号上件点 空车信号
|
|
this.OpteratePoint = StaticData.NodeSettingList.FirstOrDefault(t => t.NodeType == 7);
|
|
if (linenode1 != null)
|
|
{
|
|
this.ScanPoint = linenode1;
|
|
}
|
|
else
|
|
{
|
|
Logger logger = new Logger();
|
|
logger.Log("创建线体,未找到扫描点位");
|
|
}
|
|
|
|
|
|
this.LineNo = LineNo;
|
|
this.plcHelper = plc;
|
|
this.Thriftpoint = thriftpoint;
|
|
this.offThriftIp = System.Configuration.ConfigurationManager.AppSettings["offThriftIp"];
|
|
this.offThriftPort = System.Configuration.ConfigurationManager.AppSettings["offThriftport"];
|
|
|
|
///回写plc状态处理完成,plc会清理数据
|
|
object wcsend = this.plcHelper.Read(ScanPoint.PlcSetting5);
|
|
//if (Convert.ToInt32(wcsend) == 1)
|
|
//{
|
|
//默认启动,清理plc的上位机写入点位值
|
|
this.plcHelper.Write(this.ScanPoint.PlcSetting4, 0);
|
|
this.plcHelper.Write(this.ScanPoint.PlcSetting5, 0);
|
|
// 1 已下件 , ,0 未下件
|
|
// this.plcHelper.Write(this.OpteratePoint.PlcSetting1, 0);
|
|
// 1 已下件 , ,0 未下件
|
|
// this.plcHelper.Write(this.OpteratePoint.PlcSetting2, 0);
|
|
//}
|
|
}
|
|
|
|
|
|
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();
|
|
|
|
|
|
|
|
while (true)
|
|
{
|
|
try
|
|
{
|
|
|
|
///读取小车号
|
|
object carno = this.plcHelper.Read(this.ScanPoint.PlcSetting1);
|
|
//小车是否到位
|
|
object carstate = this.plcHelper.Read(this.ScanPoint.PlcSetting2);
|
|
//小车是否离开
|
|
object carrun = this.plcHelper.Read(this.ScanPoint.PlcSetting3);
|
|
///上位机写入岔道信息
|
|
object wcsstate = this.plcHelper.Read(ScanPoint.PlcSetting4);
|
|
///回写plc状态处理完成,plc会清理数据
|
|
object wcsend = this.plcHelper.Read(ScanPoint.PlcSetting5);
|
|
// 1 已下件 , ,0 未下件
|
|
//this.plcHelper.Write(this.OpteratePoint.PlcSetting1, 0);
|
|
|
|
|
|
|
|
if (Convert.ToInt32(carno) > 0 && Convert.ToInt32(wcsend) == 0 && Convert.ToInt32(wcsstate) == 0 && Convert.ToInt32(carstate) == 1 && Convert.ToInt32(carrun) == 0 && IsPlcRead == false)
|
|
{
|
|
logger.Log("[" + carno + "]小车到了 [" + this.LineNo + "]号下件件点");
|
|
|
|
//中一系统 在点位配置维护的时候, 一个节点的子级 不需要维护多个,只需要把特定线路的点维护,然后根据线体去找到库位口位置
|
|
// ScanPoint.CarNo = carno.ToString();
|
|
|
|
//判断小车号是否存在 ,使用内存记录
|
|
// CarRealInfo car = DBService.GetCarModel(carno.ToString());
|
|
CarRealInfo car = StaticData.CarRealList.Where(t => t.CarNo == carno.ToString()).FirstOrDefault();
|
|
DBService.AddSystemLog(this.ScanPoint.NodeNo, car);
|
|
//正常下件
|
|
/*******测试数据***********/
|
|
//int? downmaterialstate = 1; //this.plcHelper.Read(this.OpteratePoint.PlcSetting1);
|
|
// int? backmaterialstate = 0;// this.plcHelper.Read(this.OpteratePoint.PlcSetting2);
|
|
object downmaterialstate = this.plcHelper.Read(this.OpteratePoint.PlcSetting1);
|
|
//拉回指令
|
|
object backmaterialstate = this.plcHelper.Read(this.OpteratePoint.PlcSetting2);
|
|
var canoutcar = false;
|
|
if (this.UseButton == 1 && backmaterialstate != null && Convert.ToInt32(backmaterialstate) == 1)
|
|
{
|
|
canoutcar = true;
|
|
}
|
|
else if (downmaterialstate != null && Convert.ToInt32(downmaterialstate) == 1)
|
|
{
|
|
if (car != null)
|
|
{
|
|
car.MaterialBarNo = "";
|
|
car.MaterialNo = "";
|
|
car.MaterialInfo = null;
|
|
//car.LocatorNodeId = null;
|
|
//car.LocatorNodeSetting = null;
|
|
car.IsOutLocator = 0;
|
|
car.IsOver = 0;
|
|
car.IsProOutLocator = 0;
|
|
car.LocatorId = 0;
|
|
car.LocatorArea = null;
|
|
car.CurrNodeId = this.ScanPoint.Id;
|
|
car.Number = 0;
|
|
car.HadNumber = 0;
|
|
car.CurrNodeSetting = this.ScanPoint;
|
|
DBService.ModifyRealCarinfoRecord(car);
|
|
|
|
////点位记录小车编号
|
|
//ScanPoint.CarNo = car.CarNo;
|
|
lock (StaticData.offMaterialCarLock)
|
|
{
|
|
|
|
|
|
OffLineMaterialList offfirst = StaticData.OffMaterialList.OrderBy(t=>t.CreateTime).FirstOrDefault(t => t.CarCode == car.CarNo);
|
|
if (offfirst != null)
|
|
{
|
|
logger.Log("下件到位 ,到位小车号 " + offfirst.Id + " 小车号:小车号:"+ car.CarNo + " 条码"+ offfirst.ProductBarNo);
|
|
|
|
offfirst.IsOver = 1;
|
|
offfirst.IsDeleted = 1;
|
|
offfirst.ModifyTime = DateTime.Now;
|
|
DBService.UpdateOffLineMaterialList(offfirst);
|
|
|
|
//移除当前下件的门体前的所有数据
|
|
List<OffLineMaterialList> offlinebefore = StaticData.OffMaterialList.Where(t => t.CreateTime < offfirst.CreateTime).ToList();
|
|
foreach (var off in offlinebefore)
|
|
{
|
|
|
|
off.IsOver = 1;
|
|
off.IsDeleted = 1;
|
|
off.ModifyTime = DateTime.Now;
|
|
DBService.UpdateOffLineMaterialList(off);
|
|
logger.Log("下件到位 ,删除前面得" + off.Id + " 小车号:小车号" + off.CarCode + " 条码号:" + off.ProductBarNo);
|
|
|
|
}
|
|
}
|
|
List<OffLineMaterialList> offline = StaticData.OffMaterialList.Where(t => t.CarCode == car.CarNo && t.Id != offfirst.Id).ToList();
|
|
foreach (var off in offline)
|
|
{
|
|
off.LineNo = "1";
|
|
DBService.UpdateOffLineMaterialList(off);
|
|
logger.Log("下件到位 ,修改出库信息变色 id "+ off .Id+ " 小车号:" + off.CarCode+" 条码号:"+off.ProductBarNo);
|
|
}
|
|
|
|
|
|
//else
|
|
//{
|
|
// logger.Log("下件到位 ,物料号不存在成品队列中");
|
|
//}
|
|
}
|
|
|
|
}
|
|
else
|
|
{
|
|
logger.Log("下件到位小车号不存在");
|
|
}
|
|
canoutcar = true;
|
|
}
|
|
|
|
|
|
if (canoutcar)
|
|
{
|
|
///回写plc状态,起点的分支线路为1
|
|
var processNode = StaticData.NodeRelation.FirstOrDefault(t => t.PreNodeId == ScanPoint.Id && t.NodeValue == 1001);
|
|
this.plcHelper.Write(ScanPoint.PlcSetting4, processNode.AfterNodeSetting.NodeNo);
|
|
///回写plc状态处理完成,plc会清理数据
|
|
this.plcHelper.Write(ScanPoint.PlcSetting5, 1);
|
|
// IsPlcRead = true;
|
|
DBService.AddSystemLog(this.ScanPoint.NodeNo, car);
|
|
logger.Log("node:" + this.ScanPoint.NodeNo + " plc:" + this.ScanPoint.PlcSetting4.PlcNo + " mu:" + processNode.AfterNodeSetting.NodeNo);
|
|
|
|
}
|
|
}//小车移动中指定点位后,并且到位了
|
|
else if (Convert.ToInt32(carno) > 0 && Convert.ToInt32(carrun) == 1 && Convert.ToInt32(wcsend) == 1)
|
|
{
|
|
|
|
///回写plc状态,,plc会清理数据
|
|
this.plcHelper.Write(ScanPoint.PlcSetting4, 0);
|
|
///回写plc状态处理完成,plc会清理数据
|
|
this.plcHelper.Write(ScanPoint.PlcSetting5, 0);
|
|
}
|
|
|
|
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
logger.Error("小车下件到位通知异常:" + ex.Message + ex.StackTrace);
|
|
IsRuning = false;
|
|
logger = null;
|
|
// return "系统异常";
|
|
}
|
|
|
|
Thread.Sleep(1000);
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
//private void NoticeMaterialInfo()
|
|
//{
|
|
|
|
|
|
|
|
// Logger logger = new Logger();
|
|
|
|
|
|
|
|
// while (true)
|
|
// {
|
|
// try
|
|
// {
|
|
|
|
// ///读取小车号
|
|
// object carno = this.plcHelper.Read(this.ScanPoint.PlcSetting1);
|
|
// //小车是否到位
|
|
// object carstate = this.plcHelper.Read(this.ScanPoint.PlcSetting2);
|
|
// //小车是否离开
|
|
// object carrun = this.plcHelper.Read(this.ScanPoint.PlcSetting3);
|
|
// ///上位机写入岔道信息
|
|
// object wcsstate = this.plcHelper.Read(ScanPoint.PlcSetting4);
|
|
// ///回写plc状态处理完成,plc会清理数据
|
|
// object wcsend = this.plcHelper.Read(ScanPoint.PlcSetting5);
|
|
|
|
|
|
// if (Convert.ToInt32(carno) > 0 && Convert.ToInt32(wcsend) == 0 && Convert.ToInt32(wcsstate) == 0 && Convert.ToInt32(carstate) == 1 && Convert.ToInt32(carrun) == 0 && IsPlcRead == false)
|
|
// {
|
|
|
|
// CarRealInfo car = StaticData.CarRealList.Where(t => t.CarNo == carno.ToString()).FirstOrDefault();
|
|
// if (car == null)
|
|
// {
|
|
// var offmaterial = StaticData.OffMaterialAreaList.FirstOrDefault(t => t.Id == car.OffMaterialId);
|
|
// if (car.OffMaterialId > 0 && offmaterial != null)
|
|
// {
|
|
|
|
// TTransport transport = new TSocket(this.offThriftIp, Convert.ToInt32(this.offThriftPort));
|
|
// TProtocol protocol = new TBinaryProtocol(transport);
|
|
// ThriftService.Client client = new ThriftService.Client(protocol);
|
|
// transport.Open();
|
|
// string ret = client.GetUnloadMaterial(car.CarNo, car.MaterialNo, offmaterial.MaterialDes, offmaterial.OrderCode, offmaterial.ProductBarNo, offmaterial.MaterialNo, "");
|
|
// transport.Close();
|
|
// this.OffMaterialId = car.OffMaterialId.ToString();
|
|
// logger.Log("下件点小车到位了,通知客户端物料信息 id:" + car.OffMaterialId + " CarNo:" + car.CarNo + " MaterialNo:" + car.MaterialNo + " MaterialDes:" + offmaterial.MaterialDes + " OrderCode: " + offmaterial.OrderCode + " ProductBarNo:" + offmaterial.ProductBarNo + " MaterialNo:" + offmaterial.MaterialNo);
|
|
// }
|
|
// else
|
|
// {
|
|
// logger.Log("下件点小车到位了,但是没有匹配到下件物料信息:" + car.OffMaterialId);
|
|
// }
|
|
// }
|
|
// else
|
|
// {
|
|
// logger.Log("下件点小车到位了,但是没有匹配到小车信息");
|
|
// }
|
|
// }
|
|
|
|
// }
|
|
// catch (Exception ex)
|
|
// {
|
|
// logger.Error("小车下件到位通知异常:" + ex.Message + ex.StackTrace);
|
|
// IsRuning = false;
|
|
// logger = null;
|
|
// // 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();
|
|
|
|
XGL.Thrift.ThriftCommon thriftCommon = new XGL.Thrift.ThriftCommon();
|
|
thriftCommon.Start(business, point);
|
|
|
|
}
|
|
|
|
/// <summary>
|
|
/// 下位机点击发车
|
|
/// </summary>
|
|
/// <param name="carlist"></param>
|
|
/// <returns></returns>
|
|
public string OffMaterialFromCar(string Temp)
|
|
{
|
|
List<UpLineScanCarList> mlist = new List<UpLineScanCarList>();
|
|
Logger logger = new Logger();
|
|
if (!IsRuning)
|
|
{
|
|
IsRuning = true;
|
|
|
|
try
|
|
{
|
|
|
|
while (true)
|
|
{
|
|
|
|
|
|
|
|
if (!string.IsNullOrEmpty(this.OffMaterialId))
|
|
{
|
|
///读取小车号
|
|
object carno = this.plcHelper.Read(this.ScanPoint.PlcSetting1);
|
|
//小车是否到位
|
|
object carstate = this.plcHelper.Read(this.ScanPoint.PlcSetting2);
|
|
//小车是否离开
|
|
object carrun = this.plcHelper.Read(this.ScanPoint.PlcSetting3);
|
|
///上位机写入岔道信息
|
|
object wcsstate = this.plcHelper.Read(ScanPoint.PlcSetting4);
|
|
///回写plc状态处理完成,plc会清理数据
|
|
object wcsend = this.plcHelper.Read(ScanPoint.PlcSetting5);
|
|
|
|
|
|
if (Convert.ToInt32(carno) > 0 && Convert.ToInt32(wcsend) == 0 && Convert.ToInt32(wcsstate) == 0 && Convert.ToInt32(carstate) == 1 && Convert.ToInt32(carrun) == 0 && IsPlcRead == false)
|
|
{
|
|
logger.Log("[" + carno + "]小车到了 [" + this.LineNo + "]号下件件点");
|
|
|
|
//中一系统 在点位配置维护的时候, 一个节点的子级 不需要维护多个,只需要把特定线路的点维护,然后根据线体去找到库位口位置
|
|
// ScanPoint.CarNo = carno.ToString();
|
|
|
|
//判断小车号是否存在 ,使用内存记录
|
|
// CarRealInfo car = DBService.GetCarModel(carno.ToString());
|
|
CarRealInfo car = StaticData.CarRealList.Where(t => t.CarNo == carno.ToString()).FirstOrDefault();
|
|
if (car != null)
|
|
{
|
|
car.MaterialBarNo = "";
|
|
car.MaterialNo = "";
|
|
car.MaterialInfo = null;
|
|
//car.LocatorNodeId = null;
|
|
//car.LocatorNodeSetting = null;
|
|
car.IsOutLocator = 0;
|
|
car.IsOver = 0;
|
|
car.IsProOutLocator = 0;
|
|
car.LocatorId = 0;
|
|
car.LocatorArea = null;
|
|
car.CurrNodeId = this.ScanPoint.Id;
|
|
car.CurrNodeSetting = this.ScanPoint;
|
|
DBService.ModifyRealCarinfoRecord(car);
|
|
}
|
|
////点位记录小车编号
|
|
//ScanPoint.CarNo = car.CarNo;
|
|
lock (StaticData.offMaterialCarLock)
|
|
{
|
|
OffLineMaterialList offline = StaticData.OffMaterialList.FirstOrDefault(t => t.Id == car.OffMaterialId);
|
|
if (offline != null)
|
|
{
|
|
logger.Log("匹配到下件信息,");
|
|
if (offline.Number == 0)
|
|
{
|
|
logger.Log("匹配到下件信息数量=0 ,删除队列信息,");
|
|
DBService.DeleteOffLineMaterial(offline.Id);
|
|
StaticData.OffMaterialList.Remove(offline);
|
|
}
|
|
}
|
|
}
|
|
|
|
///回写plc状态,起点的分支线路为1
|
|
var processNode = StaticData.NodeRelation.FirstOrDefault(t => t.PreNodeId == ScanPoint.Id && t.NodeValue == 1001);
|
|
this.plcHelper.Write(ScanPoint.PlcSetting4, processNode.AfterNodeSetting.NodeNo);
|
|
///回写plc状态处理完成,plc会清理数据
|
|
this.plcHelper.Write(ScanPoint.PlcSetting5, 1);
|
|
// IsPlcRead = true;
|
|
DBService.AddSystemLog(this.ScanPoint.NodeNo, car);
|
|
logger.Log("node:" + this.ScanPoint.NodeNo + " plc:" + this.ScanPoint.PlcSetting4.PlcNo + " mu:" + processNode.AfterNodeSetting.NodeNo);
|
|
|
|
}//小车移动中指定点位后,并且到位了
|
|
else if (Convert.ToInt32(carno) > 0 && Convert.ToInt32(carrun) == 1 && Convert.ToInt32(wcsend) == 1)
|
|
{
|
|
///回写plc状态,,plc会清理数据
|
|
this.plcHelper.Write(ScanPoint.PlcSetting4, 0);
|
|
///回写plc状态处理完成,plc会清理数据
|
|
this.plcHelper.Write(ScanPoint.PlcSetting5, 0);
|
|
IsRuning = false;
|
|
mlist = null;
|
|
// logger = null;
|
|
return "";
|
|
|
|
}
|
|
|
|
|
|
}
|
|
else
|
|
{
|
|
logger.Log("[" + this.LineNo + "] 请求下件的小车 物料信息不存在");
|
|
IsRuning = false;
|
|
//logger = null;
|
|
return "小车号错误";
|
|
}
|
|
|
|
Thread.Sleep(1000);
|
|
}
|
|
|
|
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
logger.Error("发车操作异常:" + ex.Message + ex.StackTrace);
|
|
IsRuning = false;
|
|
mlist = null;
|
|
//logger = null;
|
|
return "系统异常";
|
|
}
|
|
|
|
}
|
|
else
|
|
{
|
|
Console.WriteLine("小车运行中,等待plc反馈中");
|
|
// logger = null;
|
|
mlist = null;
|
|
return "小车运行中";
|
|
}
|
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// 下位机点击拉回
|
|
/// </summary>
|
|
/// <param name="carlist"></param>
|
|
/// <returns></returns>
|
|
public string OffMaterialBackCar(List<string> materialcarno)
|
|
{
|
|
List<UpLineScanCarList> mlist = new List<UpLineScanCarList>();
|
|
Logger logger = new Logger();
|
|
if (!IsRuning)
|
|
{
|
|
IsRuning = true;
|
|
|
|
try
|
|
{
|
|
|
|
while (true)
|
|
{
|
|
if (!string.IsNullOrEmpty(this.OffMaterialId))
|
|
{
|
|
///读取小车号
|
|
object carno = this.plcHelper.Read(this.ScanPoint.PlcSetting1);
|
|
//小车是否到位
|
|
object carstate = this.plcHelper.Read(this.ScanPoint.PlcSetting2);
|
|
//小车是否离开
|
|
object carrun = this.plcHelper.Read(this.ScanPoint.PlcSetting3);
|
|
///上位机写入岔道信息
|
|
object wcsstate = this.plcHelper.Read(ScanPoint.PlcSetting4);
|
|
///回写plc状态处理完成,plc会清理数据
|
|
object wcsend = this.plcHelper.Read(ScanPoint.PlcSetting5);
|
|
|
|
|
|
if (Convert.ToInt32(carno) > 0 && Convert.ToInt32(wcsend) == 0 && Convert.ToInt32(wcsstate) == 0 && Convert.ToInt32(carstate) == 1 && Convert.ToInt32(carrun) == 0 && IsPlcRead == false)
|
|
{
|
|
logger.Log("[" + carno + "]小车到了 [" + this.LineNo + "]号下件件点");
|
|
|
|
CarRealInfo car = StaticData.CarRealList.Where(t => t.CarNo == carno.ToString()).FirstOrDefault();
|
|
if (car != null)
|
|
{
|
|
car.MaterialBarNo = "";
|
|
//car.LocatorNodeId = null;
|
|
//car.LocatorNodeSetting = null;
|
|
car.IsOutLocator = 0;
|
|
car.IsOver = 0;
|
|
car.IsProOutLocator = 0;
|
|
car.LocatorId = 0;
|
|
car.LocatorArea = null;
|
|
car.CurrNodeId = this.ScanPoint.Id;
|
|
car.CurrNodeSetting = this.ScanPoint;
|
|
DBService.ModifyRealCarinfoRecord(car);
|
|
}
|
|
////点位记录小车编号
|
|
//ScanPoint.CarNo = car.CarNo;
|
|
lock (StaticData.offMaterialCarLock)
|
|
{
|
|
OffLineMaterialList offline = StaticData.OffMaterialList.FirstOrDefault(t => t.Id == car.OffMaterialId);
|
|
if (offline != null)
|
|
{
|
|
offline.Number += 1;
|
|
logger.Log("拉回操作:匹配到下件信息数量+1 ,");
|
|
DBService.UpdateOffLineMaterialList(offline);
|
|
}
|
|
}
|
|
|
|
///回写plc状态,起点的分支线路为1
|
|
var processNode = StaticData.NodeRelation.FirstOrDefault(t => t.PreNodeId == ScanPoint.Id && t.NodeValue == 1001);
|
|
this.plcHelper.Write(ScanPoint.PlcSetting4, processNode.AfterNodeSetting.NodeNo);
|
|
///回写plc状态处理完成,plc会清理数据
|
|
this.plcHelper.Write(ScanPoint.PlcSetting5, 1);
|
|
// IsPlcRead = true;
|
|
DBService.AddSystemLog(this.ScanPoint.NodeNo, car);
|
|
logger.Log("node:" + this.ScanPoint.NodeNo + " plc:" + this.ScanPoint.PlcSetting4.PlcNo + " mu:" + processNode.AfterNodeSetting.NodeNo);
|
|
|
|
}//小车移动中指定点位后,并且到位了
|
|
else if (Convert.ToInt32(carno) > 0 && Convert.ToInt32(carrun) == 1 && Convert.ToInt32(wcsend) == 1)
|
|
{
|
|
|
|
///回写plc状态,,plc会清理数据
|
|
this.plcHelper.Write(ScanPoint.PlcSetting4, 0);
|
|
///回写plc状态处理完成,plc会清理数据
|
|
this.plcHelper.Write(ScanPoint.PlcSetting5, 0);
|
|
IsRuning = false;
|
|
mlist = null;
|
|
// logger = null;
|
|
return "";
|
|
|
|
}
|
|
|
|
|
|
}
|
|
else
|
|
{
|
|
logger.Log("[" + this.LineNo + "] 请求下件的小车 物料信息不存在");
|
|
IsRuning = false;
|
|
logger = null;
|
|
return "小车号错误";
|
|
}
|
|
|
|
Thread.Sleep(1000);
|
|
}
|
|
|
|
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
logger.Error("发车操作异常:" + ex.Message + ex.StackTrace);
|
|
IsRuning = false;
|
|
mlist = null;
|
|
logger = null;
|
|
return "系统异常";
|
|
}
|
|
|
|
}
|
|
else
|
|
{
|
|
Console.WriteLine("小车运行中,等待plc反馈中");
|
|
// logger = null;
|
|
mlist = null;
|
|
return "小车运行中";
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
}
|