You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
693 lines
39 KiB
693 lines
39 KiB
using CommLayerFactory;
|
|
using CommonLib;
|
|
using DBFactory;
|
|
using ICommLayer;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Data;
|
|
using System.Text;
|
|
using System.Text.RegularExpressions;
|
|
namespace WcfControlMonitorLib
|
|
{
|
|
/// <summary>
|
|
/// Creator:ZCY
|
|
/// 环型穿梭车通用库
|
|
/// </summary>
|
|
public class CCommonFunctionSSAR
|
|
{
|
|
string _DisassembleTaskError;
|
|
public string DisassembleTaskError
|
|
{
|
|
get { return _DisassembleTaskError; }
|
|
set { _DisassembleTaskError = value; }
|
|
}
|
|
DBOperator dboM = CStaticClass.dboM;
|
|
DBOperator dbo = CStaticClass.dbo;
|
|
static CGetState cgs = new CGetState();
|
|
CCommonFunction ccf = new CCommonFunction();
|
|
Model.MDevice devinfo;
|
|
StringBuilder sql = new StringBuilder();
|
|
|
|
public static event CDataSourceChangeEventHandler DataChange;
|
|
public static void OnDataChange(object sender, CDataChangeEventArgs e)
|
|
{
|
|
if (DataChange != null)
|
|
{
|
|
DataChange(sender, e);
|
|
}
|
|
}
|
|
public static event RefreshMonitorEventHandler RefreshMonitor;
|
|
public static void OnRefreshMonitor(object sender, RefreshMonitorEventArgs e)
|
|
{
|
|
if (RefreshMonitor != null)
|
|
{
|
|
RefreshMonitor(e);
|
|
}
|
|
}
|
|
public CCommonFunctionSSAR()
|
|
{
|
|
|
|
}
|
|
|
|
public const int SOUTHLRGV = 1;
|
|
public const int NORTHLRGV = 2;
|
|
/// <summary>
|
|
/// 得到环穿任务状态
|
|
/// </summary>
|
|
/// <param name="errText"></param>
|
|
/// <returns></returns>
|
|
public bool GetARGVDeviceState(int SSAR, out string errText)
|
|
{
|
|
StringBuilder sql = new StringBuilder();
|
|
StringBuilder ss = new StringBuilder();
|
|
DataView dv = new DataView();
|
|
DataView dvM = new DataView();
|
|
// MidDataTable.CGetDeviceState gds = new CGetDeviceState();// 为了自动生成到debug文件夹下
|
|
bool bReturnState = true;
|
|
errText = string.Empty;
|
|
try
|
|
{
|
|
#region 处理改道,20210512(如果改道在处理环穿状态后面,当WCS关闭时,SSAR已执行完改道,则WCS可能会将环穿任务完成)
|
|
sql.Remove(0, sql.Length);
|
|
sql.Append("SELECT * FROM apply_task");
|
|
dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
|
|
if (dv.Count > 0)
|
|
{
|
|
for (int i = 0; i < dv.Count; i++)
|
|
{
|
|
int endrgvdevicecode = Convert.ToInt32(dv[i]["DEVICE_CODE"]);
|
|
int enddevicecode = endrgvdevicecode + 1;
|
|
int status = Convert.ToInt32(dv[i]["APPLY_STATUS"]);
|
|
|
|
switch (status)
|
|
{
|
|
case 0://SSAR未处理
|
|
break;
|
|
case 1://允许改道
|
|
#region 先进行改道后的处理,成功后再删除申请
|
|
int fid = 0;
|
|
int routeid = 0;
|
|
|
|
sql.Clear();
|
|
sql.Append("select * from t_monitor_task where F_MonitorIndex =").Append(dv[i]["RGV_TASK_ID"]);
|
|
dvM = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
|
|
if (dvM.Count > 0)
|
|
{
|
|
fid = Convert.ToInt32(dvM[0]["F_ManageTaskIndex"]);
|
|
routeid = (Convert.ToInt32(dvM[i]["f_routeid"]) - 1) / 1000;
|
|
sql.Clear();
|
|
sql.Append("select * from T_base_route where f_enddevice = ").Append(enddevicecode)
|
|
.Append(" and f_startdevice = (select f_startdevice from t_base_route where f_routeid = ")
|
|
.Append(routeid).Append(")");
|
|
dvM = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
|
|
|
|
if (dvM.Count > 0)
|
|
{
|
|
int newrouteid = Convert.ToInt32(dvM[0]["f_routeid"]);
|
|
string errtext;
|
|
|
|
if (PalletInChangeLocation(fid, enddevicecode, endrgvdevicecode, newrouteid, out errtext) == true)
|
|
{
|
|
#region 再删除SSAR改道申请
|
|
sql.Remove(0, sql.Length);
|
|
sql.Append("DELETE FROM APPLY_TASK WHERE APPLY_ID = ")
|
|
.Append(dv[i]["APPLY_ID"].ToString());
|
|
dbo.ExecuteSql(sql.ToString());
|
|
#endregion
|
|
}
|
|
else
|
|
{
|
|
//SSAR改道成功,但进行后续处理时失败了,则不能删除SSAR改道申请
|
|
CommonClassLib.CCarryConvert.WriteDarkCasket("SSAR", "改道允许,但后续处理失败,已回滚", endrgvdevicecode.ToString(), "改道任务:" + fid);
|
|
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
//如果调度中的任务没了,处理有点复杂,先不处理。
|
|
//1.去查大任务,有大任务,则继续
|
|
//2.大任务也没了,则很麻烦,需要人工接入吧
|
|
}
|
|
|
|
#endregion
|
|
break;
|
|
case 2://拒绝改道
|
|
#region 先删除SSAR改道申请
|
|
sql.Remove(0, sql.Length);
|
|
sql.Append("DELETE FROM APPLY_TASK WHERE APPLY_ID = ")
|
|
.Append(dv[i]["APPLY_ID"].ToString());
|
|
dbo.ExecuteSql(sql.ToString());
|
|
#endregion
|
|
#region 再向管理申请空托盘垛
|
|
string dtime = ccf.GetDateTime();
|
|
|
|
string barcode = "0000000";
|
|
int errordevice = 0;
|
|
int applydev = Convert.ToInt32(dv[i]["DEVICE_CODE"]); //RGV送货站台,即申请站台
|
|
int enddevice = applydev + 1;//终点站台
|
|
|
|
int palletkind = 0;
|
|
#region 托盘类型 palletkind
|
|
sql.Remove(0, sql.Length);
|
|
sql.Append("SELECT * FROM RGV_TASK_TYPE where RGV_TaskType_Index = ").Append(dv[i]["APPLY_TYPE"]);
|
|
dvM = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
|
|
if (dvM.Count > 0)
|
|
{
|
|
try
|
|
{
|
|
palletkind = Convert.ToInt32(dvM[0]["GoodsKinds"]);
|
|
}
|
|
catch (FormatException ex)
|
|
{
|
|
//没找到托盘类型,应该人工处理
|
|
//errText =
|
|
//RefreshMonitorEventArgs rmea = new RefreshMonitorEventArgs("SSAR", "改道拒绝,托盘类型获取失败!环穿任务类型:" + dv[i]["APPLY _TYPE"].ToString() + "!托盘类型:" + dvM[0]["GoodsKinds"].ToString());
|
|
//OnRefreshMonitor(rmea);
|
|
CommonClassLib.CCarryConvert.WriteDarkCasket("SSAR", "改道拒绝,托盘类型获取失败!", "环穿任务类型:" + applydev.ToString(), "托盘类型:" + dvM[0]["GoodsKinds"].ToString());
|
|
|
|
}
|
|
}
|
|
else
|
|
{
|
|
//没找到托盘类型,应该人工处理
|
|
}
|
|
#endregion
|
|
|
|
object[] ob = new object[13]
|
|
{
|
|
2, enddevice, barcode, 0, dtime, "",
|
|
"1",0,0,
|
|
palletkind,errordevice,0,0
|
|
};
|
|
//将向管理申请时的 SQL 放入 WMSApply 方法中
|
|
if (ccf.WMSApply(ob, applydev, enddevice) == false)
|
|
{
|
|
CommonClassLib.CCarryConvert.WriteDarkCasket("SSAR", "改道拒绝,向管理申请缓存失败", applydev.ToString(), "");
|
|
}
|
|
else
|
|
{
|
|
CommonClassLib.CCarryConvert.WriteDarkCasket("SSAR", "改道拒绝,向管理申请缓存", applydev.ToString(), "");
|
|
}
|
|
#endregion
|
|
|
|
break;
|
|
default:
|
|
break;
|
|
|
|
}
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
#region 处理环穿状态
|
|
string table = string.Empty;
|
|
|
|
if (SSAR == NORTHLRGV)
|
|
{
|
|
table = "RGV_TASK_NORTH";
|
|
}
|
|
else
|
|
{
|
|
table = "RGV_TASK";
|
|
}
|
|
sql.Remove(0, sql.Length);
|
|
sql.Append("SELECT * FROM ").Append(table);
|
|
|
|
dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
|
|
if (dv.Count > 0)
|
|
{
|
|
for (int i = 0; i < dv.Count; i++)
|
|
{
|
|
sql.Remove(0, sql.Length);
|
|
sql.Append("SELECT * FROM T_Monitor_Task WHERE F_ManageTaskIndex = ")
|
|
.Append(dv[i]["FID"].ToString()).Append(" AND F_MonitorIndex = ")
|
|
.Append(dv[i]["RGV_TASK_ID"].ToString());
|
|
dvM = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
|
|
if (dvM.Count > 0)
|
|
{
|
|
int iARGVStatus = Convert.ToInt32(dv[i]["RGV_TASK_STATUS"]);
|
|
switch (iARGVStatus)
|
|
{
|
|
case 7: //已接收
|
|
if (dvM[0]["F_Status"].ToString() != "7")
|
|
{
|
|
sql.Remove(0, sql.Length);
|
|
sql.Append("UPDATE T_Monitor_Task SET F_Status = 7 WHERE F_ManageTaskIndex = ")
|
|
.Append(dv[i]["FID"].ToString()).Append(" AND F_MonitorIndex = ")
|
|
.Append(dv[i]["RGV_TASK_ID"].ToString());
|
|
dbo.ExecuteSql(sql.ToString());
|
|
|
|
sql.Remove(0, sql.Length);
|
|
sql.Append("UPDATE T_Manage_Task SET FCurrentLocation =")
|
|
.Append(dvM[0]["F_DeviceIndex"].ToString())
|
|
.Append(" where FID = ").Append(dv[i]["FID"].ToString());
|
|
dbo.ExecuteSql(sql.ToString());
|
|
}
|
|
break;
|
|
case 10: //执行中
|
|
if (dvM[0]["F_Status"].ToString() != "10")
|
|
{
|
|
sql.Remove(0, sql.Length);
|
|
sql.Append("UPDATE T_Monitor_Task SET F_Status = 10 WHERE F_ManageTaskIndex = ")
|
|
.Append(dv[i]["FID"].ToString()).Append(" AND F_MonitorIndex = ")
|
|
.Append(dv[i]["RGV_TASK_ID"].ToString());
|
|
dbo.ExecuteSql(sql.ToString());
|
|
|
|
int rgv = Convert.ToInt32(dv[i]["RGV_CODE"]);
|
|
if (rgv < 15000)
|
|
{
|
|
rgv -= 14000; //南侧环穿14001-14021
|
|
}
|
|
else
|
|
{
|
|
rgv -= 15000; //北侧环穿15001-15014
|
|
}
|
|
int rgv_code = Convert.ToInt32(dvM[0]["F_DeviceIndex"]) - 1 + rgv;
|
|
sql.Remove(0, sql.Length);
|
|
sql.Append("UPDATE T_Manage_Task SET FCurrentLocation =")
|
|
.Append(rgv_code)
|
|
.Append(" where FID = ").Append(dv[i]["FID"].ToString());
|
|
dbo.ExecuteSql(sql.ToString());
|
|
//HWHX 可能不需要同步到管理系统。待定
|
|
int fid = ccf.GetManageTaskIndexfromMonitor(Convert.ToInt32(dv[i]["RGV_TASK_ID"]));
|
|
sql.Remove(0, sql.Length);
|
|
sql.Append("update IO_CONTROL set CONTROL_STATUS=10 where CONTROL_ID=").Append(fid);
|
|
dboM.ExecuteSql(sql.ToString());
|
|
}
|
|
break;
|
|
case 999: //已完成
|
|
#region 20200922 双鹿电池,环穿出库任务完成,更新下一条MonitorTask中任务的设备号,终点设备号,检测条件
|
|
if (Convert.ToInt32(dv[i]["RGV_TASK_TYPE"]) == 2)
|
|
{
|
|
int iFihishDevice = Convert.ToInt32(dv[i]["FINISH_DEVICE_CODE"]);
|
|
int routeIDsub = ccf.GetRouteIDsub(iFihishDevice);
|
|
|
|
#region 出库成组
|
|
int endDevice = 0;
|
|
sql.Clear();
|
|
sql.Append("select * from area_port where asrs_port_code =").Append(iFihishDevice);
|
|
dvM = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
|
|
if (dvM.Count > 0)
|
|
{
|
|
endDevice = Convert.ToInt32(dv[0]["port_code"]);
|
|
|
|
|
|
//更新manage表,更新IO_CONTROL表
|
|
sql.Clear();
|
|
sql.Append("update t_manage_task set FENDDEVICE = ").Append(endDevice)
|
|
.Append(" where fid = ").Append(dv[i]["FID"].ToString());
|
|
dbo.ExceSQL(sql.ToString());
|
|
sql.Clear();
|
|
sql.Append("update IO_CONTROL set END_DEVICE_CODE = ").Append(endDevice)
|
|
.Append(" where CONTROL_ID = ").Append(dv[i]["FID"].ToString());
|
|
dboM.ExceSQL(sql.ToString());
|
|
#endregion
|
|
|
|
sql.Remove(0, sql.Length);
|
|
sql.Append("UPDATE T_Monitor_Task SET F_DeviceIndex = ").Append(iFihishDevice)
|
|
.Append(",F_NumParam1 = ").Append(iFihishDevice)
|
|
.Append(",F_AheadDetect = 'I").Append(iFihishDevice).Append(";D-").Append(iFihishDevice).Append(".0'")
|
|
.Append(",F_RouteID = ").Append(routeIDsub)
|
|
.Append(",F_NumParam4 = ").Append(endDevice)
|
|
.Append("WHERE F_ManageTaskIndex = ").Append(dv[i]["FID"].ToString());
|
|
dbo.ExecuteSql(sql.ToString());
|
|
}
|
|
|
|
|
|
}
|
|
#endregion
|
|
cgs.ActionComplete(Convert.ToInt32(dvM[0]["F_DeviceIndex"]), Convert.ToInt32(dvM[0]["F_MonitorIndex"]), 0);
|
|
|
|
#region 将送货输送线写入Manage中的当前设备
|
|
sql.Remove(0, sql.Length);
|
|
sql.Append("UPDATE T_Manage_Task SET FCurrentLocation =")
|
|
.Append(dv[i]["FINISH_DEVICE_CODE"].ToString())
|
|
.Append(" where FID = ").Append(dv[i]["FID"].ToString());
|
|
dbo.ExecuteSql(sql.ToString());
|
|
#endregion
|
|
|
|
sql.Remove(0, sql.Length);
|
|
sql.Append("DELETE FROM ").Append(table).Append(" WHERE FID = ")
|
|
.Append(dv[i]["FID"].ToString()).Append(" AND RGV_TASK_ID = ")
|
|
.Append(dv[i]["RGV_TASK_ID"].ToString());
|
|
dbo.ExecuteSql(sql.ToString());
|
|
break;
|
|
case 900: //申请删除
|
|
if (dvM[0]["F_Status"].ToString() != "900")
|
|
{
|
|
sql.Remove(0, sql.Length);
|
|
sql.Append("UPDATE T_Monitor_Task SET F_Status = 900 WHERE F_ManageTaskIndex = ")
|
|
.Append(dv[i]["FID"].ToString()).Append(" AND F_MonitorIndex = ")
|
|
.Append(dv[i]["RGV_TASK_ID"].ToString());
|
|
dbo.ExecuteSql(sql.ToString());
|
|
}
|
|
#region 删除环穿任务 zcy 20210315
|
|
sql.Remove(0, sql.Length);
|
|
sql.Append("DELETE FROM ").Append(table).Append(" WHERE FID = ")
|
|
.Append(dv[i]["FID"].ToString()).Append(" AND RGV_TASK_ID = ")
|
|
.Append(dv[i]["RGV_TASK_ID"].ToString());
|
|
dbo.ExecuteSql(sql.ToString());
|
|
#endregion
|
|
break;
|
|
case 0: //已发送
|
|
if (dvM[0]["F_Status"].ToString() != "1")
|
|
{
|
|
sql.Remove(0, sql.Length);
|
|
sql.Append("UPDATE T_Monitor_Task SET F_Status = 1 WHERE F_ManageTaskIndex = ")
|
|
.Append(dv[i]["FID"].ToString()).Append(" AND F_MonitorIndex = ")
|
|
.Append(dv[i]["RGV_TASK_ID"].ToString());
|
|
dbo.ExecuteSql(sql.ToString());
|
|
}
|
|
break;
|
|
case 960: //已改道
|
|
#region HWHX 待测试j
|
|
if (Convert.ToInt32(dv[i]["RGV_TASK_TYPE"]) == 1)
|
|
{
|
|
#region 删除入库任务
|
|
cgs.ActionComplete(Convert.ToInt32(dvM[0]["F_DeviceIndex"]), Convert.ToInt32(dvM[0]["F_MonitorIndex"]), 0);
|
|
sql.Remove(0, sql.Length);
|
|
sql.Append("DELETE FROM RGV_TASK WHERE FID = ")
|
|
.Append(dv[i]["FID"].ToString()).Append(" AND RGV_TASK_ID = ")
|
|
.Append(dv[i]["RGV_TASK_ID"].ToString());
|
|
dbo.ExecuteSql(sql.ToString());
|
|
#endregion
|
|
sql.Remove(0, sql.Length);
|
|
sql.Append("UPDATE T_Monitor_Task SET F_Status = 10, F_NumParam4 = '").Append(dv[0]["END_AREA_CODE"]) //更改状态
|
|
.Append("' WHERE F_ManageTaskIndex = ")
|
|
.Append(dv[i]["FID"].ToString()).Append(" AND F_MonitorIndex = ")
|
|
.Append(dv[i]["RGV_TASK_ID"].ToString());
|
|
dbo.ExecuteSql(sql.ToString());
|
|
}
|
|
#endregion
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
//残留的环穿任务处理 zcy 20210315
|
|
bReturnState = false;
|
|
errText += "环形穿梭车系统任务:任务号:" + dv[i]["FID"].ToString() + ",指令号:" +
|
|
dv[i]["RGV_TASK_ID"].ToString() + "在调度系统中不存在,已自动删除并记录。";
|
|
|
|
sql.Remove(0, sql.Length);
|
|
sql.Append("DELETE FROM ").Append(table).Append(" WHERE FID = ")
|
|
.Append(dv[i]["FID"].ToString()).Append(" AND RGV_TASK_ID = ")
|
|
.Append(dv[i]["RGV_TASK_ID"].ToString());
|
|
dbo.ExecuteSql(sql.ToString());
|
|
CommonClassLib.CCarryConvert.WriteDarkCasket("RGVTASK", "RGV任务被删除", dv[i]["FID"].ToString(), "找不到对应的调度任务,自动将RGV任务删除!");
|
|
continue;
|
|
}
|
|
|
|
}
|
|
}
|
|
#endregion
|
|
|
|
|
|
|
|
#region 出库成组
|
|
|
|
#endregion
|
|
|
|
//#region 处理AGV任务表
|
|
//sql.Remove(0, sql.Length);
|
|
//sql.Append("SELECT * FROM AGV_TASK");
|
|
//dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
|
|
//if (dv.Count > 0)
|
|
//{
|
|
// for (int i = 0; i < dv.Count; i++)
|
|
// {
|
|
// sql.Remove(0, sql.Length);
|
|
// sql.Append("SELECT * FROM T_Monitor_Task WHERE F_ManageTaskIndex = ")
|
|
// .Append(dv[i]["FID"].ToString()).Append(" AND F_MonitorIndex = ")
|
|
// .Append(dv[i]["AGV_TASK_ID"].ToString());
|
|
// dvM = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
|
|
// if (dvM.Count > 0)
|
|
// {
|
|
// int iARGVStatus = Convert.ToInt32(dv[i]["AGV_TASK_STATUS"]);
|
|
// switch (iARGVStatus)
|
|
// {
|
|
// case 7: //已接收
|
|
// if (dvM[0]["F_Status"].ToString() != "7")
|
|
// {
|
|
// sql.Remove(0, sql.Length);
|
|
// sql.Append("UPDATE T_Monitor_Task SET F_Status = 7 WHERE F_ManageTaskIndex = ")
|
|
// .Append(dv[i]["FID"].ToString()).Append(" AND F_MonitorIndex = ")
|
|
// .Append(dv[i]["AGV_TASK_ID"].ToString());
|
|
// dbo.ExecuteSql(sql.ToString());
|
|
// }
|
|
// break;
|
|
// case 10: //执行中
|
|
// if (dvM[0]["F_Status"].ToString() != "10")
|
|
// {
|
|
// sql.Remove(0, sql.Length);
|
|
// sql.Append("UPDATE T_Monitor_Task SET F_Status = 10 WHERE F_ManageTaskIndex = ")
|
|
// .Append(dv[i]["FID"].ToString()).Append(" AND F_MonitorIndex = ")
|
|
// .Append(dv[i]["AGV_TASK_ID"].ToString());
|
|
// dbo.ExecuteSql(sql.ToString());
|
|
|
|
// int fid = ccf.GetManageTaskIndexfromMonitor(Convert.ToInt32(dv[i]["AGV_TASK_ID"]));
|
|
// sql.Remove(0, sql.Length);
|
|
// sql.Append("update IO_CONTROL set CONTROL_STATUS=10 where CONTROL_ID=").Append(fid);
|
|
// dboMan.ExecuteSql(sql.ToString());
|
|
// }
|
|
// break;
|
|
// case 999: //已完成
|
|
|
|
// cgs.ActionComplete(Convert.ToInt32(dvM[0]["F_DeviceIndex"]), Convert.ToInt32(dvM[0]["F_MonitorIndex"]), 0);
|
|
// sql.Remove(0, sql.Length);
|
|
// sql.Append("DELETE FROM AGV_TASK WHERE FID = ")
|
|
// .Append(dv[i]["FID"].ToString()).Append(" AND AGV_TASK_ID = ")
|
|
// .Append(dv[i]["AGV_TASK_ID"].ToString());
|
|
// dbo.ExecuteSql(sql.ToString());
|
|
// break;
|
|
// case 900: //申请删除
|
|
// if (dvM[0]["F_Status"].ToString() != "900")
|
|
// {
|
|
// sql.Remove(0, sql.Length);
|
|
// sql.Append("UPDATE T_Monitor_Task SET F_Status = 900 WHERE F_ManageTaskIndex = ")
|
|
// .Append(dv[i]["FID"].ToString()).Append(" AND F_MonitorIndex = ")
|
|
// .Append(dv[i]["AGV_TASK_ID"].ToString());
|
|
// dbo.ExecuteSql(sql.ToString());
|
|
// }
|
|
// break;
|
|
// case 0: //已发送
|
|
// if (dvM[0]["F_Status"].ToString() != "1")
|
|
// {
|
|
// sql.Remove(0, sql.Length);
|
|
// sql.Append("UPDATE T_Monitor_Task SET F_Status = 1 WHERE F_ManageTaskIndex = ")
|
|
// .Append(dv[i]["FID"].ToString()).Append(" AND F_MonitorIndex = ")
|
|
// .Append(dv[i]["AGV_TASK_ID"].ToString());
|
|
// dbo.ExecuteSql(sql.ToString());
|
|
// }
|
|
// break;
|
|
// default:
|
|
// break;
|
|
// }
|
|
// }
|
|
// else
|
|
// {
|
|
// bReturnState = false;
|
|
// errText += "AGV系统任务:任务号:" + dv[i]["FID"].ToString() + ",指令号:" +
|
|
// dv[i]["RGV_TASK_ID"].ToString() + "在调度系统中不存在,请通知管理人员处理";
|
|
// continue;
|
|
// }
|
|
|
|
// }
|
|
//}
|
|
//#endregion
|
|
|
|
return bReturnState;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
//RefreshMonitorEventArgs rmea = new RefreshMonitorEventArgs("tsStatus", "SControlMonitor.GetARGVDeviceState时" + ex.StackTrace + ex.Message);
|
|
//OnRefreshMonitor(rmea);
|
|
bReturnState = false;
|
|
return bReturnState;
|
|
}
|
|
finally
|
|
{
|
|
dv.Dispose();
|
|
dvM.Dispose();
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
//托盘缓存申请,有托盘入库任务,确定改道时的处理,只处理环穿及环穿后的指令
|
|
public bool PalletInChangeLocation(int fid, int newEndDevice, int newRgvEndDevice, int routeid, out string errtext)
|
|
{
|
|
StringBuilder sql = new StringBuilder();
|
|
DataView dvbc = new DataView();
|
|
string dtime = ccf.GetDateTime();
|
|
if (routeid != 0)
|
|
{
|
|
routeid = routeid * 1000 + 1;
|
|
}
|
|
try
|
|
{
|
|
dbo.TransBegin(IsolationLevel.ReadCommitted);
|
|
|
|
//1.环穿之前的指令不变,2.更改环穿终点,3.删除指令大于环穿的所有指令,4.添加输送线的送出指令,5.将manage任务插入bak,
|
|
//6.修改manage终点,任务类型不变,7.更改所有指令的routeid, 8.IO_CONTROL任务更改状态900
|
|
sql.Clear();
|
|
sql.Append("select * from t_monitor_task where F_ManageTaskIndex = ").Append(fid).Append("order by F_monitorIndex ");
|
|
dvbc = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
|
|
int rgvMonitorId = 0; string palletcode = "";
|
|
StringBuilder AheadDetect = new StringBuilder();
|
|
int conveyorIndex = 0;
|
|
for (int i = 0; i < dvbc.Count; i++)
|
|
{
|
|
if (Convert.ToInt32(dvbc[i]["F_DeviceIndex"]) == 25001)
|
|
{ //2
|
|
rgvMonitorId = Convert.ToInt32(dvbc[i]["F_MonitorIndex"]); //记录rgv的指令
|
|
//更新 RGV 终点,时间
|
|
sql.Remove(0, sql.Length);
|
|
sql.Append("update t_monitor_task set F_NumParam4=").Append(newRgvEndDevice).Append(", F_SplitTime='").Append(dtime).Append("' where F_ManageTaskIndex = ").Append(fid).Append(" and F_MonitorIndex = ").Append(rgvMonitorId);
|
|
dbo.ExecuteSql(sql.ToString());
|
|
palletcode = dvbc[i]["F_TxtParam"].ToString();
|
|
}
|
|
|
|
if (rgvMonitorId != 0 && Convert.ToInt32(dvbc[i]["F_MonitorIndex"]) > rgvMonitorId)
|
|
{//3
|
|
sql.Remove(0, sql.Length);
|
|
sql.Append("delete from t_monitor_task where F_MonitorIndex = ").Append(dvbc[i]["F_MonitorIndex"].ToString());
|
|
dbo.ExecuteSql(sql.ToString());
|
|
conveyorIndex = Convert.ToInt32(dvbc[i]["F_MonitorIndex"]); //记录一个已删除的指令索引
|
|
}
|
|
}
|
|
|
|
#region 4 要保证添加的指令索引大于环穿的指令索引
|
|
AheadDetect.Append(";D-").Append(newRgvEndDevice).Append(".0");
|
|
AheadDetect.Append(";D").Append(newEndDevice).Append(".0");
|
|
AheadDetect.Append(";I").Append(newRgvEndDevice);
|
|
AheadDetect.Append(";I").Append(newEndDevice);
|
|
//int mindex = ccf.GetMonitorIndex(fid, 2); //与任务拆分的间隔太久了,本行可能导致索引从最大变成最小
|
|
int mindex = conveyorIndex;
|
|
|
|
sql.Remove(0, sql.Length);
|
|
sql.Append("INSERT INTO T_Monitor_Task ").Append(
|
|
"(F_ManageTaskIndex, F_ManageTASKKINDINDEX, F_MonitorIndex,F_MonitorTaskLevel,").Append(
|
|
" F_DeviceIndex, F_DeviceCommandIndex, F_RouteID, F_Status,F_NumParam1, F_NumParam4,").Append(
|
|
" F_AheadDetect,F_TxtParam)").Append(
|
|
"VALUES (").Append(fid).Append(",").Append(1).Append(",").Append(mindex).Append(",").Append(9
|
|
).Append(",").Append(newRgvEndDevice).Append(",").Append(6).Append(",").Append(routeid).Append(",").Append(0).Append(",").Append(newRgvEndDevice).Append(",").Append(newEndDevice
|
|
).Append(",'").Append(AheadDetect.ToString()).Append("','").Append(palletcode).Append("')");
|
|
dbo.ExceSQL(sql.ToString());
|
|
#endregion
|
|
|
|
//5
|
|
//待添加
|
|
|
|
//6
|
|
sql.Remove(0, sql.Length);
|
|
//sql.Append("update t_manage_task set FENDDEVICE=").Append(newEndDevice).Append(",FENDCELL='-' ,FBEGTIME='").Append(dtime).Append("',FLANEWAY='',FSTACK='' where fid=").Append(fid);
|
|
sql.Append("update t_manage_task set goods_num = 905, FENDDEVICE=").Append(newEndDevice).Append(",FENDUCODE='' ,FBEGTIME='").Append(dtime).Append("',FLANEWAY='',FSTACK='' where fid=").Append(fid);
|
|
dbo.ExecuteSql(sql.ToString());
|
|
|
|
//7
|
|
sql.Remove(0, sql.Length);
|
|
sql.Append("update t_monitor_task set F_RouteID=").Append(routeid).Append(" where F_ManageTaskIndex=").Append(fid);
|
|
dbo.ExecuteSql(sql.ToString());
|
|
|
|
dbo.TransCommit();
|
|
//8入库改道,管理需要从缓存区中删除库存,定义状态905
|
|
sql.Remove(0, sql.Length);
|
|
sql.Append("UPDATE IO_CONTROL SET CONTROL_STATUS =905 WHERE CONTROL_ID=").Append(fid);
|
|
int count = dboM.ExecuteSql(sql.ToString());
|
|
if (count != 1)
|
|
{
|
|
CommonClassLib.CCarryConvert.WriteDarkCasket("PalletInChangeLocation", "空托盘垛改道", "原任务:" + fid, "IO_CONTROL更新行数:" + count.ToString());
|
|
}
|
|
|
|
//9 更改 环穿 任务,RGV_TASK 已接收的任务
|
|
sql.Remove(0, sql.Length);
|
|
sql.Append("update RGV_TASK set LANE_CODE = 0, END_AREA_CODE=").Append(newRgvEndDevice).Append(" where fid = ").Append(fid);
|
|
dbo.ExecuteSql(sql.ToString());
|
|
|
|
CommonClassLib.CCarryConvert.WriteDarkCasket("PalletInChangeLocation", "空托盘垛改道成功", "原任务:" + fid, "改道终点:" + newEndDevice.ToString());
|
|
|
|
errtext = "";
|
|
return true;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
//RefreshMonitorEventArgs rmea = new RefreshMonitorEventArgs("tsStatus", "SControlMonitor.PalletChangeLocation" + ex.Message + ex.StackTrace);
|
|
//OnRefreshMonitor(rmea);
|
|
errtext = ex.Message + ex.StackTrace;
|
|
dbo.TransRollback();
|
|
CommonClassLib.CCarryConvert.WriteDarkCasket("PalletInChangeLocation", "空托盘垛改道失败", "改道终点:" + newEndDevice.ToString(), "");
|
|
|
|
return false;
|
|
}
|
|
finally
|
|
{
|
|
dvbc.Dispose();
|
|
}
|
|
}
|
|
//叠盘机入库,有缓存出库任务,确定改道时的处理,删除出库任务
|
|
public bool PalletOutChangeLocation(int fid, int newStartDevice, int newEnddevice, string barcodes, out string errtext)
|
|
{
|
|
StringBuilder sql = new StringBuilder();
|
|
DataView dvbc = new DataView();
|
|
string dtime = ccf.GetDateTime();
|
|
|
|
int AutoManageIdx = ccf.GetTempManageIdx();//调度任务索引
|
|
int stack = 0;//堆垛机FSTACK
|
|
int Laneindex = 0;
|
|
int controltype = 4;//站台间移库
|
|
int managetaskkind = 2; //自动任务
|
|
//string barcodes = "";
|
|
errtext = "";
|
|
object[] ob = new object[16]
|
|
{
|
|
AutoManageIdx, barcodes, controltype, managetaskkind, 1, newStartDevice, "-", 1,
|
|
newEnddevice, "-", Laneindex, stack, "-", dtime, 0, 0
|
|
};
|
|
try
|
|
{
|
|
string sqlstr = string.Format("insert into T_Manage_Task(FID,FPALLETBARCODE,FCONTROLTASKTYPE,F_ManageTaskKindIndex,FSTARTWAREHOUSE,FSTARTDEVICE,FSTARTCELL,FENDWAREHOUSE,FENDDEVICE,FENDCELL,FLANEWAY,FSTACK,FUseAwayFork,FBEGTIME,FStartCol,FStartLayer) " +
|
|
"values ({0},'{1}',{2},{3},{4},{5},'{6}',{7},{8},'{9}',{10},{11},'{12}','{13}',{14},{15})", ob);
|
|
dbo.ExceSQL(sqlstr);
|
|
CommonClassLib.CCarryConvert.WriteDarkCasket("PalletOutChangeLocation", "空托盘垛改道成功", "原任务:" + fid, "新任务:" + AutoManageIdx.ToString());
|
|
|
|
sql.Remove(0, sql.Length);
|
|
sql.Append("delete from t_monitor_task where F_ManageTaskIndex = ").Append(fid);
|
|
dbo.ExecuteSql(sql.ToString());
|
|
|
|
sql.Remove(0, sql.Length);
|
|
sql.Append("delete T_Manage_Task where fid = ").Append(fid);
|
|
dbo.ExecuteSql(sql.ToString());
|
|
|
|
sql.Remove(0, sql.Length);
|
|
sql.Append("UPDATE IO_CONTROL SET CONTROL_STATUS =900 WHERE CONTROL_ID=").Append(fid);
|
|
dboM.ExecuteSql(sql.ToString());
|
|
return true;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
//RefreshMonitorEventArgs rmea =
|
|
// new RefreshMonitorEventArgs("tsStatus",
|
|
// "调度生成拆盘机补货任务时发生错误:" + ex.StackTrace +
|
|
// ex.Message);
|
|
//OnRefreshMonitor(rmea);
|
|
errtext = ex.Message + ex.StackTrace;
|
|
return false;
|
|
}
|
|
finally
|
|
{
|
|
dvbc.Dispose();
|
|
}
|
|
}
|
|
|
|
#region 环穿的提前检测
|
|
//某一站台如果入库任务超过一定数量,则暂停改站台的入库任务(业务描述:优先级低的站台)
|
|
//public int SSARGateINTaskCount
|
|
|
|
#endregion
|
|
}
|
|
}
|