using EnumType;
|
using iWareSda_QQJF.OPCService;
|
using iWareSda_QQJF.SRM.SrmModel;
|
using System;
|
using System.Collections.Generic;
|
using System.Linq;
|
using System.Runtime.Serialization;
|
using System.ServiceModel;
|
using System.Text;
|
using System.Threading;
|
using Newtonsoft.Json;
|
using logtxtWrite;
|
using iWareSda_QQJF.WCSNEW.EDM;
|
using iWareSda_QQJF.WCSNEW;
|
using iWareSda_QQJF.WCSNEW.生成主任务;
|
|
namespace iWareSda_QQJF.SRM.SrmService
|
{
|
// 注意: 使用“重构”菜单上的“重命名”命令,可以同时更改代码和配置文件中的类名“SrmService”。
|
public class SrmService : ISrmService
|
{
|
List<int> oldHandShake = new List<int> { 0, 0, 0, 0, 0, 0, 0, 0, 0 };
|
List<int> times = new List<int> { 0, 0, 0, 0, 0, 0, 0, 0, 0 };
|
/// <summary>获取SrmEntity实体集合
|
///
|
/// </summary>
|
/// <returns></returns>
|
public string GetSrmInfo(int srmId)
|
{
|
//循环读取信息 频率太高 不加日志
|
if (srmId < 1 || srmId > 9) return "ID号超出范围";
|
|
EntitySrmView srm = new EntitySrmView();
|
|
//中间显示类转换任务ID
|
try
|
{
|
|
srm.SrmName = Srm_CacheEntity.Srms[srmId - 1].SrmName;
|
srm.DeviceId = Srm_CacheEntity.Srms[srmId - 1].DeviceId;
|
srm.RhandShake = Srm_CacheEntity.Srms[srmId - 1].RhandShake;
|
srm.Rmode = Srm_CacheEntity.Srms[srmId - 1].Rmode;
|
srm.Ralarm = Srm_CacheEntity.Srms[srmId - 1].Ralarm;
|
srm.RliftFull = Srm_CacheEntity.Srms[srmId - 1].RliftFull;
|
srm.Rposx = Srm_CacheEntity.Srms[srmId - 1].Rposx;
|
srm.Rposy = Srm_CacheEntity.Srms[srmId - 1].Rposy;
|
srm.Rposz = Srm_CacheEntity.Srms[srmId - 1].Rposz;
|
srm.Rposxmm = Srm_CacheEntity.Srms[srmId - 1].Rposxmm;
|
srm.Rposymm = Srm_CacheEntity.Srms[srmId - 1].Rposymm;
|
srm.Rposzmm = Srm_CacheEntity.Srms[srmId - 1].Rposzmm;
|
srm.RpickFinish = Srm_CacheEntity.Srms[srmId - 1].RpickFinish;
|
srm.RdeliveryFinish = Srm_CacheEntity.Srms[srmId - 1].RdeliveryFinish;
|
srm.RtaskFinish = Srm_CacheEntity.Srms[srmId - 1].RtaskFinish;
|
srm.RalarmNumber = Srm_CacheEntity.Srms[srmId - 1].RalarmNumber;
|
srm.Rstate = Srm_CacheEntity.Srms[srmId - 1].Rstate;
|
srm.Ractuallane = Srm_CacheEntity.Srms[srmId - 1].Ractuallane;
|
srm.RDevicetaskNO = Srm_CacheEntity.Srms[srmId - 1].RtaskNO;
|
srm.RtaskNO = Srm_CacheEntity.Srms[srmId - 1].RtaskNO;
|
srm.ack = Srm_CacheEntity.Srms[srmId - 1].ack;
|
|
using (Model edm = new Model())
|
{
|
if (srm.RtaskNO != 0)
|
{
|
//srm.RtaskNO = edm.SrmTask.FirstOrDefault(x => x.ID == srm.RtaskNO).MainTask.TASKID;
|
srm.RtaskNO = edm.SrmTask.OrderByDescending(x => x.ID).FirstOrDefault(x => (x.ID % 32767) + 1 == srm.RtaskNO).TASK_TASK.ID;
|
}
|
}
|
}
|
catch
|
{
|
|
}
|
|
return JsonConvert.SerializeObject(srm);
|
}
|
|
/// <summary>
|
/// 读取更新数据
|
/// </summary>
|
/// <param name="srmId"></param>
|
public void ReadPlc(int srmId)
|
{
|
try
|
{
|
//object o = FormMain.srmgs[(int)srmId - 1].ReadValuePoint(FormMain.srmDBS[(int)srmId - 1].handShakeR);
|
Srm_CacheEntity.Srms[srmId - 1].RhandShake = Convert.ToInt32(FormMain.srmgs[(int)srmId - 1].ReadValuePoint(FormMain.srmDBS[(int)srmId - 1].handShakeR));
|
if (Srm_CacheEntity.Srms[srmId - 1].RhandShake == oldHandShake[srmId - 1])
|
{
|
times[srmId - 1]++;
|
}
|
else
|
{
|
times[srmId - 1] = 0;
|
}
|
if (times[srmId - 1] > 3)
|
{
|
//断线重连
|
FormMain.srmgs[srmId - 1].Close();
|
Thread.Sleep(1000);
|
FormMain.srmgs[srmId - 1].Open();
|
}
|
|
int value = Srm_CacheEntity.Srms[srmId - 1].RhandShake;
|
oldHandShake[srmId - 1] = value;
|
|
if (FormMain.srmgs[(int)srmId - 1].IsConnected)
|
{
|
int Rmode = Convert.ToInt32(FormMain.srmgs[(int)srmId - 1].ReadValuePoint(FormMain.srmDBS[(int)srmId - 1].modeR));
|
int Ralarm = Convert.ToInt32(FormMain.srmgs[(int)srmId - 1].ReadValuePoint(FormMain.srmDBS[(int)srmId - 1].alarmISR));
|
int RliftFull = Convert.ToInt32(FormMain.srmgs[(int)srmId - 1].ReadValuePoint(FormMain.srmDBS[(int)srmId - 1].liftFullR));
|
int Rposx = Convert.ToInt32(FormMain.srmgs[(int)srmId - 1].ReadValuePoint(FormMain.srmDBS[(int)srmId - 1].posXR));
|
int Rposy = Convert.ToInt32(FormMain.srmgs[(int)srmId - 1].ReadValuePoint(FormMain.srmDBS[(int)srmId - 1].posYR));
|
int Rposz = Convert.ToInt32(FormMain.srmgs[(int)srmId - 1].ReadValuePoint(FormMain.srmDBS[(int)srmId - 1].posZR));
|
long Rposxmm = Convert.ToInt64(FormMain.srmgs[(int)srmId - 1].ReadValuePoint(FormMain.srmDBS[(int)srmId - 1].posxmmR));
|
long Rposymm = Convert.ToInt64(FormMain.srmgs[(int)srmId - 1].ReadValuePoint(FormMain.srmDBS[(int)srmId - 1].posymmR));
|
long Rposzmm = Convert.ToInt64(FormMain.srmgs[(int)srmId - 1].ReadValuePoint(FormMain.srmDBS[(int)srmId - 1].poszmmR));
|
int RpickFinish = Convert.ToInt32(FormMain.srmgs[(int)srmId - 1].ReadValuePoint(FormMain.srmDBS[(int)srmId - 1].pickFinishR));
|
int RtaskFinish = Convert.ToInt32(FormMain.srmgs[(int)srmId - 1].ReadValuePoint(FormMain.srmDBS[(int)srmId - 1].taskFinishR));
|
int RalarmNumber = Convert.ToInt32(FormMain.srmgs[(int)srmId - 1].ReadValuePoint(FormMain.srmDBS[(int)srmId - 1].alarmNOR));
|
int Rstate = Convert.ToInt32(FormMain.srmgs[(int)srmId - 1].ReadValuePoint(FormMain.srmDBS[(int)srmId - 1].stateR));
|
int Ractuallane = Convert.ToInt32(FormMain.srmgs[(int)srmId - 1].ReadValuePoint(FormMain.srmDBS[(int)srmId - 1].actualLaneR));
|
int RtaskNO = Convert.ToInt32(FormMain.srmgs[(int)srmId - 1].ReadValuePoint(FormMain.srmDBS[(int)srmId - 1].tasknoR));
|
string ack = FormMain.srmgs[(int)srmId - 1].ReadValuePoint(FormMain.srmDBS[(int)srmId - 1].ackW).ToString();
|
|
|
//校验信号
|
if (true)
|
{
|
//验证正确,统一赋值
|
//Srm_CacheEntity.Srms[srmId - 1].RhandShake = RhandShake;
|
Srm_CacheEntity.Srms[srmId - 1].Rmode = Rmode;
|
Srm_CacheEntity.Srms[srmId - 1].Ralarm = Ralarm;
|
Srm_CacheEntity.Srms[srmId - 1].RliftFull = RliftFull;
|
Srm_CacheEntity.Srms[srmId - 1].Rposx = Rposx;
|
Srm_CacheEntity.Srms[srmId - 1].Rposy = Rposy;
|
Srm_CacheEntity.Srms[srmId - 1].Rposz = Rposz;
|
Srm_CacheEntity.Srms[srmId - 1].Rposxmm = Rposxmm;
|
Srm_CacheEntity.Srms[srmId - 1].Rposymm = Rposymm;
|
Srm_CacheEntity.Srms[srmId - 1].Rposzmm = Rposzmm;
|
Srm_CacheEntity.Srms[srmId - 1].RpickFinish = RpickFinish;
|
Srm_CacheEntity.Srms[srmId - 1].RtaskFinish = RtaskFinish;
|
Srm_CacheEntity.Srms[srmId - 1].RalarmNumber = RalarmNumber;
|
Srm_CacheEntity.Srms[srmId - 1].Rstate = Rstate;
|
Srm_CacheEntity.Srms[srmId - 1].Ractuallane = Ractuallane;
|
Srm_CacheEntity.Srms[srmId - 1].RtaskNO = RtaskNO;
|
Srm_CacheEntity.Srms[srmId - 1].ack = ack;
|
}
|
}
|
}
|
catch (Exception)
|
{ }
|
}
|
|
/// <summary>删除堆垛机任务
|
///
|
/// </summary>
|
/// <param name="srmId"></param>
|
public int SendSrmDelete(int srmId)
|
{
|
|
if (srmId < 1 || srmId > 9)
|
{
|
logtxt.txtWrite("类名:SrmService,函数名:SendSrmDelete 错误srmId:" + srmId.ToString(), 0);
|
return 0;
|
}
|
try
|
{
|
FormMain.srmgs[srmId - 1].WriteValuePoint(FormMain.srmDBS[srmId - 1].commandW, 4);
|
logtxt.txtWrite("类名:SrmService,函数名:SendSrmDelete srmId:" + srmId.ToString(), 1);
|
return 1;
|
|
}
|
catch (Exception ex)
|
{
|
logtxt.txtWrite("类名:SrmService/函数名:SendSrmDelete/ srmId:" + srmId.ToString() + logtxt.oneRow(ex.ToString()), 2);
|
return 0;
|
}
|
}
|
|
/// <summary>堆垛机任务完成确认信号发送
|
/// </summary>
|
/// <param name="srmId">设备号</param>
|
/// <returns></returns>
|
public int SendSrmTaskFinishConfirm(int srmId)
|
{
|
|
if (srmId < 1 || srmId > 9)
|
{
|
logtxt.txtWrite("类名:SrmService,函数名:SendSrmTaskFinishConfirm 错误srmId:" + srmId.ToString(), 0);
|
return 0;
|
}
|
try
|
{
|
FormMain.srmgs[srmId - 1].WriteValuePoint(FormMain.srmDBS[srmId - 1].taskFinishW, 1);
|
logtxt.txtWrite("类名:SrmService/函数名:SendSrmTaskFinishConfirm/ srmId:" + srmId.ToString(), 1);
|
return 1;
|
}
|
catch (Exception ex)
|
{
|
logtxt.txtWrite("类名:SrmService/函数名:SendSrmTaskFinishConfirm/ srmId:" + srmId.ToString() + logtxt.oneRow(ex.ToString()), 2);
|
return 0;
|
}
|
}
|
|
|
/// <summary>发送急停
|
///
|
/// </summary>
|
/// <param name="srmId"></param>
|
public int SendSrmEStop(int srmId)
|
{
|
if (srmId < 1 || srmId > 9)
|
{
|
logtxt.txtWrite("类名:SrmService,函数名:SendSrmEStop 错误srmId:" + srmId.ToString(), 0);
|
return 0;
|
}
|
try
|
{
|
FormMain.srmgs[srmId - 1].WriteValuePoint(FormMain.srmDBS[srmId - 1].emergencyStopW, 1);
|
logtxt.txtWrite("类名:SrmService/函数名:SendSrmEStop/ srmId:" + srmId.ToString(), 1);
|
return 1;
|
}
|
catch (Exception ex)
|
{
|
logtxt.txtWrite("类名:SrmService/函数名:SendSrmEStop/ srmId:" + srmId.ToString() + logtxt.oneRow(ex.ToString()), 2);
|
return 0;
|
}
|
}
|
|
|
/// <summary>发送堆垛机单放和移动任务
|
///
|
/// </summary>
|
/// <param name="srmID"></param>堆垛机号
|
/// <param name="taskID"></param>任务id
|
/// <param name="toPlace"></param>目的地址
|
/// <param name="command"></param>2是单放,3是移动
|
/// <returns></returns>
|
///
|
public int SendSrmMove(int srmId, int taskId, string toPlace, int command, int palletType, int taskFather)
|
{
|
if (command < 2 || command > 3 || srmId < 1 || srmId > 9)
|
{
|
logtxt.txtWrite("类名:SrmService,函数名:SendSrmEStop 错误srmId:" + srmId.ToString(), 0);
|
return 2;
|
}
|
|
try
|
{
|
UInt16 taskid;
|
bool istaskid = UInt16.TryParse(taskId.ToString(), out taskid);
|
if (!istaskid)
|
{
|
logtxt.txtWrite("类名:SrmService,函数名:SendSrmEStop 错误taskID:" + taskId.ToString(), 0);
|
return 2;
|
}
|
string[] places = toPlace.Split('-');
|
if (places.Length != 3)
|
{
|
logtxt.txtWrite("类名:SrmService,函数名:SendSrmEStop 错误toPlace:" + toPlace.ToString(), 0);
|
return 2;
|
}
|
int[] placenos = new int[3];
|
for (int i = 0; i < 3; i++)
|
{
|
bool isconso = int.TryParse(places[i], out placenos[i]);
|
if (!isconso)
|
{
|
logtxt.txtWrite("类名:SrmService,函数名:SendSrmEStop 错误toPlace:" + toPlace.ToString(), 0);
|
return 2;
|
}
|
}
|
FormMain.srmgs[srmId - 1].WriteValuePoint(FormMain.srmDBS[srmId - 1].taskNOW, taskId);
|
FormMain.srmgs[srmId - 1].WriteValuePoint(FormMain.srmDBS[srmId - 1].taskFather, taskFather);
|
|
|
FormMain.srmgs[srmId - 1].WriteValuePoint(FormMain.srmDBS[srmId - 1].palletTypeW, palletType);//暂时强写
|
FormMain.srmgs[srmId - 1].WriteValuePoint(FormMain.srmDBS[srmId - 1].destinationPosXW, placenos[1]);
|
FormMain.srmgs[srmId - 1].WriteValuePoint(FormMain.srmDBS[srmId - 1].destinationPosYW, placenos[2]);
|
FormMain.srmgs[srmId - 1].WriteValuePoint(FormMain.srmDBS[srmId - 1].destinationPosZW, placenos[0]);
|
FormMain.srmgs[srmId - 1].WriteValuePoint(FormMain.srmDBS[srmId - 1].commandW, command);
|
FormMain.srmgs[srmId - 1].WriteValuePoint(FormMain.srmDBS[srmId - 1].stbW, 1);
|
logtxt.txtWrite("类名:SrmService/函数名:SendSrmMove/ srmId:" + srmId.ToString() + "taskID:" + taskId.ToString()
|
+ "toPlace" + toPlace.ToString() + "command" + command.ToString(), 1);
|
}
|
catch (Exception ex)
|
{
|
logtxt.txtWrite("类名:SrmService/函数名:SendSrmMove/ srmId:" + srmId.ToString() + "taskID:" + taskId.ToString()
|
+ "toPlace" + toPlace.ToString() + "command" + command.ToString() + logtxt.oneRow(ex.ToString()), 2);
|
return 0;
|
}
|
//发送握手确认
|
isack(srmId);
|
return 1;
|
|
//返回1 执行成功 ,0 执行失败 2 参数格式错误
|
}
|
|
|
/// <summary> 发送堆垛机搬运任务
|
///
|
/// </summary>
|
/// <param name="srmId"></param>堆垛机号
|
/// <param name="taskId"></param>任务ID
|
/// <param name="sourcePlace"></param>起始位
|
/// <param name="toPlace"></param>货物放置目的地
|
/// <param name="pallet"></param>托盘类型 1-6暂定
|
/// <returns></returns>
|
public int SendSrmTask(int srmId, int taskId, string sourcePlace, string toPlace, int pallet, int fatherId)
|
{
|
if (pallet < 1 || pallet > 13 || srmId < 1 || srmId > 13)
|
{
|
logtxt.txtWrite("类名:SrmService,函数名:sendSrmTask 错误pallet:" + pallet.ToString() + "错误srmId:" + srmId.ToString(), 0);
|
return 0;
|
}
|
|
try
|
{
|
UInt16 taskID;
|
bool istaskId = UInt16.TryParse(taskId.ToString(), out taskID);
|
if (!istaskId)
|
{
|
logtxt.txtWrite("类名:SrmService,函数名:sendSrmTask 错误taskId:" + taskId.ToString(), 0);
|
return 0;
|
}
|
string[] places = (sourcePlace + "-" + toPlace).Split('-');
|
if (places.Length != 6)
|
{
|
logtxt.txtWrite("类名:SrmService,函数名:sendSrmTask 错误taskId:" + taskId.ToString(), 0);
|
return 0;
|
}
|
|
int[] placenos = new int[6];
|
for (int i = 0; i < 6; i++)
|
{
|
bool isconso = int.TryParse(places[i], out placenos[i]);
|
if (!isconso)
|
{
|
logtxt.txtWrite("类名:SrmService,函数名:sendSrmTask 错误taskId:" + taskId.ToString(), 0);
|
return 0;
|
}
|
}
|
#region opc写值
|
FormMain.srmgs[srmId - 1].WriteValuePoint(FormMain.srmDBS[srmId - 1].taskNOW, taskId);
|
FormMain.srmgs[srmId - 1].WriteValuePoint(FormMain.srmDBS[srmId - 1].taskFather, fatherId);
|
|
FormMain.srmgs[srmId - 1].WriteValuePoint(FormMain.srmDBS[srmId - 1].palletTypeW, pallet);
|
FormMain.srmgs[srmId - 1].WriteValuePoint(FormMain.srmDBS[srmId - 1].sourcePosXW, placenos[1]);
|
FormMain.srmgs[srmId - 1].WriteValuePoint(FormMain.srmDBS[srmId - 1].sourcePosYW, placenos[2]);
|
FormMain.srmgs[srmId - 1].WriteValuePoint(FormMain.srmDBS[srmId - 1].sourcePosZW, placenos[0]);
|
FormMain.srmgs[srmId - 1].WriteValuePoint(FormMain.srmDBS[srmId - 1].destinationPosXW, placenos[4]);
|
FormMain.srmgs[srmId - 1].WriteValuePoint(FormMain.srmDBS[srmId - 1].destinationPosYW, placenos[5]);
|
FormMain.srmgs[srmId - 1].WriteValuePoint(FormMain.srmDBS[srmId - 1].destinationPosZW, placenos[3]);
|
FormMain.srmgs[srmId - 1].WriteValuePoint(FormMain.srmDBS[srmId - 1].commandW, 1);
|
FormMain.srmgs[srmId - 1].WriteValuePoint(FormMain.srmDBS[srmId - 1].stbW, 1);
|
logtxt.txtWrite("类名:SrmService/函数名:sendSrmTask/ srmId:" + srmId.ToString() + "taskId:" + taskId.ToString()
|
+ "sourcePlace" + sourcePlace.ToString() + "toPlace" + toPlace.ToString() + "pallet" + pallet.ToString(), 1);
|
|
#endregion
|
WZ.Useful.Commons.LogTextHelper.WriteLine("堆垛机", "任务下发成功:", "堆垛机:" + srmId + " 任务号:" + taskId + "主任务号:" + fatherId);
|
}
|
catch (Exception ex)
|
{
|
logtxt.txtWrite("类名:SrmService/函数名:sendSrmTask/ srmId:" + srmId.ToString() + "taskId:" + taskId.ToString()
|
+ "sourcePlace" + sourcePlace.ToString() + "toPlace" + toPlace.ToString() + "pallet" + pallet.ToString() + logtxt.oneRow(ex.ToString()), 2);
|
return 0;
|
}
|
//发送握手确认
|
isack(srmId);
|
return 1;
|
|
//返回1 执行成功 ,0 执行失败 2 参数格式错误
|
}
|
|
|
/// <summary>堆垛机ACK确认 握手通信
|
///
|
/// </summary>
|
/// <param name="srmid"></param>
|
/// <returns></returns>
|
public void isack(int srmid)
|
{
|
Thread th = new Thread(new ParameterizedThreadStart(ack));
|
th.IsBackground = true;
|
th.Start(srmid);
|
}
|
public void ack(object srmid)
|
{
|
string srmAck = string.Empty;
|
int times = 0;
|
while (true)
|
{
|
//超过5秒 ack不置1返回失败
|
if (times > 10)
|
{
|
times = 0;
|
logtxt.txtWrite("类名:SrmService/函数名:ack(握手确认)/ srmid:" + srmid.ToString() + "ACK超时不置1,返回失败", 1);
|
//更新数据库
|
using (Model edm = new Model())
|
{
|
int sid = (int)srmid;
|
SrmTask task = edm.SrmTask.OrderByDescending(x => x.ID).FirstOrDefault(x => x.USESRMID == sid && x.ISRELEASED == 1 && x.HASFINISHED == 0);
|
task.ISRELEASED = 0;//初始化任务进行重发
|
edm.SaveChanges();
|
}
|
break;
|
}
|
Thread.Sleep(500);
|
try
|
{
|
//读取ack值
|
srmAck = Srm_CacheEntity.Srms[(int)srmid - 1].ack;
|
if (srmAck == "1")
|
{
|
//ack为1时stb改为0 一次握手执行完成
|
FormMain.srmgs[(int)srmid - 1].WriteValuePoint(FormMain.srmDBS[(int)srmid - 1].stbW, 0);
|
logtxt.txtWrite("类名:SrmService/函数名:ack(握手确认)/ srmid:" + srmid.ToString(), 1);
|
WZ.Useful.Commons.LogTextHelper.WriteLine("stbW", "写入:", "0");
|
break;
|
}
|
}
|
catch (Exception ex)
|
{ logtxt.txtWrite("类名:SrmService/函数名:ack(握手确认)/ srmid:" + srmid.ToString() + logtxt.oneRow(ex.ToString()), 2); }
|
|
times++;
|
}
|
|
}
|
|
|
/// <summary>堆垛机解警
|
///
|
/// </summary>
|
/// <param name="srmId"></param>
|
public void SrmRlsAlert(int srmId)
|
{
|
if (srmId < 1 || srmId > 9)
|
{
|
logtxt.txtWrite("类名:SrmService,函数名:SrmRlsAlert 错误srmId:" + srmId.ToString(), 0);
|
return;
|
}
|
try
|
{
|
FormMain.srmgs[srmId - 1].WriteValuePoint(FormMain.srmDBS[srmId - 1].alarmAckW, 1);
|
logtxt.txtWrite("类名:SrmService/函数名:SrmRlsAlert(解警)/ srmid:" + srmId.ToString(), 1);
|
}
|
catch (Exception ex)
|
{
|
logtxt.txtWrite("类名:SrmService/函数名:SrmRlsAlert(解警)/ srmid:" + srmId.ToString() + logtxt.oneRow(ex.ToString()), 2);
|
}
|
|
|
}
|
|
/// <summary>任务是否完成
|
///
|
/// </summary>
|
/// <param name="srmId"></param>
|
/// <param name="taskId"></param>
|
/// <returns></returns>
|
public int IsTaskFinish(int srmId)
|
{
|
//GetSrmInfo(srmId);
|
if (srmId < 1 || srmId > 9)
|
{
|
logtxt.txtWrite("类名:SrmService,函数名:IsTaskFinish 错误srmId:" + srmId.ToString(), 0);
|
return 2;
|
}
|
logtxt.txtWrite("类名:SrmService,函数名:IsTaskFinish 任务完成srmId:" + srmId.ToString(), 0);
|
if (Srm_CacheEntity.Srms[srmId - 1].RtaskFinish == 1)
|
{
|
WZ.Useful.Commons.LogTextHelper.WriteLine("堆垛机", "任务完成:", "堆垛机:" + srmId + " 任务号:" + (Srm_CacheEntity.Srms[srmId - 1].RtaskNO - 1));
|
}
|
return Srm_CacheEntity.Srms[srmId - 1].RtaskFinish;
|
}
|
|
/// <summary>
|
/// 获取完成任务号
|
/// </summary>
|
/// <param name="srmid"></param>
|
/// <returns></returns>
|
public int FinishTask(int srmId)
|
{
|
//GetSrmInfo(srmId);
|
int taskid = Srm_CacheEntity.Srms[srmId - 1].RtaskNO;
|
return taskid;
|
}
|
|
/// <summary>堆垛机是否准备好
|
///
|
/// </summary>
|
/// <param name="srmId"></param>
|
/// <returns></returns>
|
public bool IsReady(int srmId)
|
{
|
if (srmId < 1 || srmId > 9)
|
{
|
logtxt.txtWrite("类名:SrmService,函数名:IsReady 错误IsReady:" + srmId.ToString(), 0);
|
return false;
|
}
|
//GetSrmInfo(srmId);
|
int mode = Srm_CacheEntity.Srms[srmId - 1].Rmode;
|
int alarm = Srm_CacheEntity.Srms[srmId - 1].Ralarm;
|
int liftFull = Srm_CacheEntity.Srms[srmId - 1].RliftFull;
|
int state = Srm_CacheEntity.Srms[srmId - 1].Rstate;
|
|
if (mode != 1 || alarm == 1 || liftFull == 1 || state != 0)
|
{
|
|
logtxt.txtWrite("类名:SrmService,函数名:IsReady 没准备好srmId:" + srmId.ToString(), 0);
|
return false;
|
}
|
logtxt.txtWrite("类名:SrmService,函数名: IsReady: 准备好srmId:" + srmId.ToString(), 0);
|
return true;
|
}
|
|
|
/// <summary>堆垛机是否故障
|
///
|
/// </summary>
|
/// <param name="srmId"></param>
|
/// <returns>true:表示堆垛机没有故障,false:表示堆垛机有故障</returns>
|
public bool IsNotAlarm(int srmId)
|
{
|
if (srmId < 1 || srmId > 9)
|
{
|
logtxt.txtWrite("类名:SrmService,函数名:IsReady 错误IsReady:" + srmId.ToString(), 0);
|
return false;
|
}
|
//GetSrmInfo(srmId);
|
int mode = Srm_CacheEntity.Srms[srmId - 1].Rmode;
|
int alarm = Srm_CacheEntity.Srms[srmId - 1].Ralarm;
|
|
if (mode != 1 || alarm == 1)
|
{
|
|
logtxt.txtWrite("类名:SrmService,函数名:IsReady 没准备好srmId:" + srmId.ToString(), 0);
|
return false;
|
}
|
logtxt.txtWrite("类名:SrmService,函数名: IsReady: 准备好srmId:" + srmId.ToString(), 0);
|
return true;
|
}
|
|
|
/// <summary>堆垛机是否准备好
|
///
|
/// </summary>
|
/// <param name="srmId"></param>
|
/// <returns></returns>
|
public bool IsNotUse(int srmId)
|
{
|
if (srmId < 1 || srmId > 9)
|
{
|
logtxt.txtWrite("类名:SrmService,函数名:IsReady 错误IsReady:" + srmId.ToString(), 0);
|
return false;
|
}
|
|
int mode = Srm_CacheEntity.Srms[srmId - 1].Rmode;
|
int liftFull = Srm_CacheEntity.Srms[srmId - 1].RliftFull;
|
int state = Srm_CacheEntity.Srms[srmId - 1].Rstate;
|
|
if (mode != 1 || liftFull == 1 || state != 0)
|
{
|
|
logtxt.txtWrite("类名:SrmService,函数名:IsReady 没准备好srmId:" + srmId.ToString(), 0);
|
return false;
|
}
|
logtxt.txtWrite("类名:SrmService,函数名: IsReady: 准备好srmId:" + srmId.ToString(), 0);
|
return true;
|
}
|
|
///// <summary>
|
///// 获取任务是否完成
|
///// </summary>
|
///// <param name="taskId"></param>
|
//public iWareSda_QQJF.WCS.TaskFinishClass TaskFinish(int taskId)
|
//{
|
// iWareSda_QQJF.WCS.TaskFinishClass result = new WCS.TaskFinishClass();
|
// using (Model edm = new Model())
|
// {
|
// TASK_TASK task = edm.TASK_TASK.FirstOrDefault(x => x.ID == taskId);
|
// if (task == null)
|
// {
|
// result.result = false;
|
// result.statusId = 0;
|
// result.message = "无此任务号";
|
// result.isError = 0;
|
// }
|
// else
|
// {
|
// if (task.HASFINISHED == 1 || task.HASFINISHED == 2)
|
// {
|
// result.result = true;
|
// result.statusId = 0;
|
// if (task.ISERROR == 1)
|
// {
|
// result.result = false;
|
// result.statusId = task.ERRORMSG ?? 0;
|
// result.isError = 1;
|
// string msg = "";
|
// switch (result.statusId)
|
// {
|
// case 1: msg = "输送线"; break;
|
// case 2: msg = "RGV"; break;
|
// case 3: msg = "堆垛机"; break;
|
// default: msg = "输送线"; break;
|
// }
|
// result.message = msg + " 设备ID:" + task.ERRORDEVICEID;
|
// }
|
// }
|
// else
|
// {
|
// result.result = false;
|
// result.statusId = 0;
|
// result.message = "此任务号未完成";
|
// result.isError = 0;
|
// }
|
// }
|
// }
|
// WZ.Useful.Commons.LogTextHelper.WriteLine("任务完成接口", result.result.ToString(), "任务号:"+taskId);
|
// WZ.Useful.Commons.LogTextHelper.WriteLine("任务完成接口详情", result.message, "任务号:" + result.statusId.ToString());
|
// return result;
|
//}
|
|
///// <summary>
|
///// 下发主任务
|
///// </summary>
|
///// <param name="palletType"></param>
|
///// <param name="sourcePlace"></param>
|
///// <param name="toPlace"></param>
|
///// <param name="taskId"></param>
|
///// <param name="taskType"></param>
|
///// <returns></returns>
|
//public iWareSda_QQJF.WCS.SendTaskClass SendTask(int palletType, string sourcePlace, string toPlace, int taskId, int taskType, int outType)
|
//{
|
// WZ.Useful.Commons.LogTextHelper.WriteLine("任务开始下发", taskId.ToString(), "");
|
// //初始化服务对象
|
// iWareSda_QQJF.RGV.RgvService.RgvService rgvService = new RGV.RgvService.RgvService();
|
// iWareSda_QQJF.SRMTRAN.SrmTranService.SrmTranService srmService = new SRMTRAN.SrmTranService.SrmTranService();
|
|
// iWareSda_QQJF.WCS.SendTaskClass result = new WCS.SendTaskClass();
|
// result.result = false;
|
// result.statusId = 0;
|
// result.deviceId = 0;
|
// result.outTransId = 0;//出库时根据出口状态计算
|
// result.outType = outType;
|
// int statusId = 0;
|
// int deviceId = 0;
|
// using (Model edm = new Model())
|
// {
|
// MainTask oldTask = edm.MainTask.FirstOrDefault(x => x.TASKID == taskId);
|
// if (oldTask != null)
|
// {
|
// result.result = true;
|
// result.statusId = 90;
|
// return result;
|
// }
|
// //判断设备是否允许下发
|
// if (Helper.TaskCouldSend(sourcePlace, toPlace, taskType, out statusId, out deviceId))//调试状态先屏蔽,不然太麻烦
|
// {
|
// MainTask task = new MainTask();
|
// task.TASKID = taskId;
|
// task.SOURCEPLACE = sourcePlace;
|
// if (taskType != 2)//入库移库
|
// {
|
// task.TOPLACE = toPlace;
|
// }
|
// else//出库
|
// {
|
// WZ.Useful.Commons.LogTextHelper.WriteLine("出库", toPlace.ToString(), outType.ToString());
|
// //指定出库
|
// //if (!string.IsNullOrEmpty(toPlace))
|
// if (toPlace != "999" && toPlace != "997")
|
// {
|
// result.outTransId = int.Parse(toPlace);
|
// task.TOPLACE = toPlace;
|
// }
|
// //类型出库
|
// else
|
// {
|
// if (toPlace == "999")
|
// {
|
// outType = 1;
|
// }
|
// if (toPlace == "997")
|
// {
|
// outType = 5;
|
// }
|
// result.outTransId = Helper.GetOutTran(outType, sourcePlace);
|
// task.TOPLACE = result.outTransId.ToString();
|
// }
|
// }
|
// bool allowSend = true;
|
// //检测是否会造成RGV堵塞(单出口只能发2条)
|
// if (taskType == 2)
|
// {
|
// SRMTRAN.SrmTranService.SrmTranService srm = new SRMTRAN.SrmTranService.SrmTranService();
|
// int tranNum2 = 0;
|
// if (task.TOPLACE == "19")
|
// {
|
// tranNum2 = srm.GetSrmConveyorStationHasGoods(int.Parse(task.TOPLACE) + 1) == 1 ? 1 : 0;
|
// }
|
// else if (task.TOPLACE != "67" && task.TOPLACE != "34")
|
// {
|
// tranNum2 = srm.GetSrmConveyorStationHasGoods(int.Parse(task.TOPLACE) - 1) == 1 ? 1 : 0;
|
// }
|
// else if (task.TOPLACE == "67" || task.TOPLACE == "34")
|
// {
|
// tranNum2 = 1;//分拣出口就一段
|
// }
|
// int taskNum = edm.MainTask.Where(x => x.TOPLACE == task.TOPLACE && x.HASFINISHED == 0).Count();
|
// int tranNum1 = srm.GetSrmConveyorStationHasGoods(int.Parse(task.TOPLACE)) == 1 ? 1 : 0;
|
// if (taskNum + tranNum1 + tranNum2 >= 2)
|
// {
|
// allowSend = false;
|
// }
|
// }
|
// if (allowSend)
|
// {
|
// task.UPDATETIME = DateTime.Now;
|
// task.HASFINISHED = 0;
|
// task.ISERROR = 0;
|
// task.TASKTYPE = taskType;
|
// task.OUTTYPE = outType;
|
// task.HASREADED = 0;
|
// task.HASPUSHED = 0;
|
// task.PALLETTYPE = palletType;
|
// edm.MainTask.Add(task);
|
// if (edm.SaveChanges() > 0)
|
// {
|
// result.result = true;
|
// }
|
// else
|
// {
|
// result.result = false;
|
// result.statusId = 99;
|
// }
|
// }
|
// else
|
// {
|
// result.result = false;
|
// result.statusId = 88;//出口堵塞
|
// }
|
|
// }
|
// else
|
// {
|
// //获取不可下发原因
|
// result.result = false;
|
// result.statusId = statusId;
|
// result.deviceId = deviceId;
|
// WZ.Useful.Commons.LogTextHelper.WriteLine("下发失败", result.deviceId.ToString(), "状态:" + result.statusId.ToString());
|
// }
|
// }
|
// //WZ.Useful.Commons.LogTextHelper.WriteLine("出库", result.outTransId.ToString(), result.result.ToString());
|
// WZ.Useful.Commons.LogTextHelper.WriteLine("任务:" + taskId, "成功:"+result.result.ToString()," "+sourcePlace+" "+toPlace+" "+taskType);
|
// WZ.Useful.Commons.LogTextHelper.WriteLine("任务下发", result.statusId.ToString(), result.result.ToString());
|
// return result;
|
//}
|
|
///// <summary>
|
///// 关联删除
|
///// </summary>
|
///// <param name="srmID"></param>
|
///// <returns></returns>
|
//public int SendSrmDeleteAll(int srmID)
|
//{
|
// List<int> tranDoingId = new List<int>();
|
// List<int> rgvDoingId = new List<int>();
|
// List<int> srmDoingId = new List<int>();
|
|
// int srmTaskId = Srm_CacheEntity.Srms[srmID - 1].RtaskNO;
|
// //删除未执行的任务和删除已执行的任务
|
// bool result = WCS.Helper.DeleteAllBySrmTaskId(srmTaskId, out tranDoingId, out rgvDoingId, out srmDoingId);
|
// //删除设备任务
|
// foreach (var i in rgvDoingId)
|
// {
|
// RGV.RgvService.RgvService srv = new RGV.RgvService.RgvService();
|
// srv.SendRgvDelete(i);
|
// }
|
// foreach (var i in tranDoingId)
|
// {
|
// SRMTRAN.SrmTranService.SrmTranService srv = new SRMTRAN.SrmTranService.SrmTranService();
|
// srv.SendTranDelete(i);
|
// }
|
// foreach (var i in srmDoingId)
|
// {
|
// SRM.SrmService.SrmService srv = new SRM.SrmService.SrmService();
|
// srv.SendSrmDelete(i);
|
// }
|
|
// if (result)
|
// {
|
// return 1;
|
// }
|
// else
|
// {
|
// return 0;
|
// }
|
//}
|
|
/// <summary>
|
/// 切换自动优化
|
/// </summary>
|
/// <param name="srmId"></param>
|
/// <returns></returns>
|
public bool UseAutoMove(int srmId)
|
{
|
if (srmId < 1 || srmId > 9)
|
{
|
return false;
|
}
|
CreateMainTask.needMove[srmId - 1] = !CreateMainTask.needMove[srmId - 1];
|
return CreateMainTask.needMove[srmId - 1];
|
}
|
|
/// <summary>
|
/// 根据任务号删除任务
|
/// </summary>
|
/// <param name="id"></param>
|
/// <param name="tranDoingId"></param>
|
/// <param name="rgvDoingId"></param>
|
/// <param name="srmDoingId"></param>
|
public bool DeleteMainTask(int id, out List<int> tranDoingId, out List<int> rgvDoingId, out List<int> srmDoingId, out List<string> placeList, out int dir)
|
{
|
dir = 0;
|
WZ.Useful.Commons.LogTextHelper.WriteLine("任务关联删除", "任务号", id.ToString());
|
bool result = WCSNEW.Helper.DeleteAllTask(id, out tranDoingId, out rgvDoingId, out srmDoingId, out placeList, out dir);
|
if (result)
|
{
|
//删除设备任务
|
foreach (var i in rgvDoingId)
|
{
|
RGV.RgvService.RgvService srv = new RGV.RgvService.RgvService();
|
srv.SendRgvDelete(i);
|
}
|
foreach (var i in tranDoingId)
|
{
|
SRMTRAN.SrmTranService.SrmTranService srv = new SRMTRAN.SrmTranService.SrmTranService();
|
srv.SendTranDelete(i);
|
}
|
foreach (var i in srmDoingId)
|
{
|
SRM.SrmService.SrmService srv = new SRM.SrmService.SrmService();
|
srv.SendSrmDelete(i);
|
}
|
WCSNEW.Helper.GetAlarmDevice(id);
|
}
|
return result;
|
}
|
|
/// <summary>
|
/// 根据托盘号删除任务
|
/// </summary>
|
/// <param name="id"></param>
|
/// <param name="tranDoingId"></param>
|
/// <param name="rgvDoingId"></param>
|
/// <param name="srmDoingId"></param>
|
public bool DeleteMainTaskByContainerName(string containerName, out List<int> tranDoingId, out List<int> rgvDoingId, out List<int> srmDoingId, out List<string> placeList, out int dir)
|
{
|
dir = 0;
|
WZ.Useful.Commons.LogTextHelper.WriteLine("任务关联删除", "托盘:", containerName);
|
TASK_TASK task = new TASK_TASK();
|
using (Model edm = new Model())
|
{
|
//task = edm.TASK_TASK.FirstOrDefault(x => x.BASE_CONTAINER.CONTAINERNAME == containerName && (x.HASFINISHED ?? 0) == 0);
|
task = edm.TASK_TASK.OrderByDescending(x => x.CREATETIME).FirstOrDefault(x => x.BASE_CONTAINER.CONTAINERNAME == containerName);
|
|
}
|
if (task != null)
|
{
|
bool result = DeleteMainTask(task.ID, out tranDoingId, out rgvDoingId, out srmDoingId, out placeList, out dir);
|
return result;
|
|
}
|
else
|
{
|
tranDoingId = new List<int>();
|
rgvDoingId = new List<int>();
|
srmDoingId = new List<int>();
|
placeList = new List<string>();
|
dir = 0;
|
return false;
|
}
|
}
|
}
|
}
|