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.
399 lines
17 KiB
399 lines
17 KiB
using System;
|
|
using System.Collections.Generic;
|
|
using System.Text;
|
|
using System.Data;
|
|
using ICommLayer;
|
|
using DBFactory;
|
|
using System.Security.Cryptography;
|
|
|
|
namespace MidDataTable
|
|
{
|
|
/// <summary>
|
|
/// 20230313 AGV 中间表的通讯接口派生类
|
|
/// 获得设备状态类
|
|
/// 创建者:zcy
|
|
/// </summary>
|
|
public class CGetDeviceState:IGetDeviceState
|
|
{
|
|
|
|
string _commLayerError;
|
|
|
|
public string CommLayerError
|
|
{
|
|
get { return _commLayerError; }
|
|
set { _commLayerError = value; }
|
|
}
|
|
|
|
public static DBOperator dbo = CommonClassLib.AppSettings.dbo; //20130510
|
|
public static DBOperator dboM = CommonClassLib.AppSettings.dboM; //20130510
|
|
public CGetDeviceState()
|
|
{
|
|
|
|
}
|
|
//~CGetDeviceState()
|
|
//{
|
|
//
|
|
//}
|
|
/// <summary>
|
|
public int[] GetDeviceState(int DeviceIndex, int TaskIndex)
|
|
{
|
|
|
|
return null;
|
|
}
|
|
|
|
public string GetStringData(int DeviceIndex, int TaskIndex)
|
|
{
|
|
return "";
|
|
}
|
|
|
|
//AGV 更新任务当前状态后,WCS做后续处理
|
|
//dv.AGV_TASK_ID, dv.FID, dv.AGV_TASK_STATUS
|
|
/// <summary>
|
|
/// 获取agv任务
|
|
/// </summary>
|
|
/// <param name="Fid"></param>
|
|
/// <param name="TaskIndex"></param>
|
|
/// <param name="status"></param>
|
|
/// <param name="WCS_FLAG"></param>
|
|
public void GetAGVState(int Fid, int TaskIndex, int status, int WCS_FLAG)
|
|
{
|
|
DataView valist0 = dbo.ExceSQL(string.Format("select * from t_monitor_task where F_ManageTaskIndex = {0} and F_MonitorIndex = {1}", Fid, TaskIndex)).Tables[0].DefaultView;
|
|
|
|
if (valist0.Count > 0)
|
|
{
|
|
int iAGVStatus = status;
|
|
int newTaskStart = 0;
|
|
int newTaskEnd = 0;
|
|
switch (iAGVStatus)
|
|
{
|
|
case 1: //已接收
|
|
//if (Convert.ToInt32(valist0[0]["F_Status"]) != 9)
|
|
//{
|
|
// dbo.ExceSQL(string.Format("update T_Monitor_Task set F_Status = 9 where F_ManageTaskIndex = {0} and F_MonitorIndex = {1}", Fid, TaskIndex));
|
|
// dbo.ExceSQL(string.Format("update T_Manage_Task set FCurrentLocation == 1001 where FID = {0} ", Fid));
|
|
|
|
//}
|
|
break;
|
|
case 2: //已分配
|
|
//if (Convert.ToInt32(valist0[0]["F_Status"]) != 10)
|
|
//{
|
|
// dbo.ExceSQL(string.Format("update T_Monitor_Task set F_Status =10 where F_ManageTaskIndex = {0} and F_MonitorIndex = {1}", Fid, TaskIndex));
|
|
//}
|
|
break;
|
|
case 3: //取货完成
|
|
if (Convert.ToInt32(valist0[0]["F_Status"]) != 3)
|
|
{
|
|
dbo.ExceSQL(string.Format("update T_Monitor_Task set F_Status =3 where F_ManageTaskIndex = {0} and F_MonitorIndex = {1}", Fid, TaskIndex));
|
|
}
|
|
{
|
|
#region 衢州华友出库任务 AGV 取货完成,生成自动任务,空托盘去叠盘
|
|
newTaskStart = Convert.ToInt32(valist0[0]["F_NumParam2"]); //叠盘任务起点
|
|
newTaskEnd = GetPilerLocat(newTaskStart);//叠盘任务终点
|
|
if (newTaskEnd != -1)
|
|
{
|
|
string newBarcode = "D-" + valist0[0]["F_TxtParam"];
|
|
if (WCS_FLAG == 0 )
|
|
{
|
|
if (GetManageTaskCountForStartAndEndDevice(newTaskStart, newTaskEnd, newBarcode) == 0)
|
|
{
|
|
var ssss = string.Format("INSERT INTO T_Manage_Task(FID, F_ManageTaskKindIndex,FPALLETBARCODE,FMANAGETASKTYPE,FCONTROLTASKTYPE, FTASKLEVEL, FSTARTWAREHOUSE,FENDWAREHOUSE, FSTARTCELL, FSTARTDEVICE, FENDDEVICE, FENDCELL, FSTATUS, FBEGTIME, FIntoStepOK)VALUES('{0}',{1},'{2}','{3}','{4}','{5}','{6}','{7}','{8}','{9}','{10}','{11}','{12}','{13}','{14}')"
|
|
, GetTempManageIdx(), 2, newBarcode, 1, 4, 1, 1, 1, "-", newTaskStart, newTaskEnd, "-", 0, DateTime.Now.ToString("u"), 0);
|
|
dbo.ExceSQL(ssss);
|
|
}
|
|
|
|
dbo.ExceSQL(string.Format("update AGV_TASK set WCS_FLAG =1 where AGV_TASK_ID = {0} ", TaskIndex));
|
|
|
|
CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "AGV取货完成,生成叠盘任务。", newTaskStart.ToString(), TaskIndex.ToString());
|
|
}
|
|
|
|
}
|
|
#endregion
|
|
}
|
|
//Dbo.Deleteable<T_Monitor_Task>().Where(it => it.F_ManageTaskIndex == Fid&& it.F_MonitorIndex == TaskIndex).ExecuteCommand();
|
|
|
|
break;
|
|
case 4: //送货完成
|
|
if (Convert.ToInt32(valist0[0]["F_Status"]) != 4)
|
|
{
|
|
//更新调度指令任务
|
|
dbo.ExceSQL(string.Format("update T_Monitor_Task set F_Status = 4 where F_ManageTaskIndex = {0} and F_MonitorIndex = {1}", Fid, TaskIndex));
|
|
dbo.ExceSQL(string.Format("update T_Manage_Task set FSTATUS == 999 where FID = {0} ", Fid));
|
|
//站台逻辑无货
|
|
dbo.ExceSQL(string.Format("update T_Base_Device set F_HaveGoods == 0 where F_DeviceIndex = {0} ", valist0[0]["F_NumParam5"].ToString()));
|
|
//给管理更新终点和状态
|
|
dboM.ExceSQL(string.Format("update IO_CONTROL set CONTROL_STATUS == 999,END_DEVICE_CODE = {0} where CONTROL_ID = {1} ", Fid, valist0[0]["F_NumParam5"].ToString()));
|
|
}
|
|
#region 衢州华友入库前置任务, AGV 送货完成,生成自动任务,去扫码
|
|
newTaskStart = Convert.ToInt32(valist0[0]["F_NumParam5"]); //扫码任务起点
|
|
newTaskEnd = GetScannerLocat(newTaskStart);//扫码任务终点
|
|
if (newTaskEnd != -1)
|
|
{
|
|
string newBarcode = "S-" + valist0[0]["F_TxtParam"];
|
|
if (WCS_FLAG != 2)
|
|
{
|
|
if (GetManageTaskCountForStartAndEndDevice(newTaskStart, newTaskEnd, newBarcode) == 0)
|
|
{
|
|
object ob = new object[15] { GetTempManageIdx(), 2, "S-" + valist0[0]["F_TxtParam"], 1, 4, 1, 1, 1, "-", newTaskStart, newTaskEnd, "-", 0, DateTime.Now.ToString("u"), 0 };
|
|
dbo.ExceSQL(string.Format("INSERT INTO T_Manage_Task(FID, F_ManageTaskKindIndex,FPALLETBARCODE,FMANAGETASKTYPE,FCONTROLTASKTYPE, FTASKLEVEL, FSTARTWAREHOUSE,FENDWAREHOUSE, FSTARTCELL, FSTARTDEVICE, FENDDEVICE, FENDCELL, FSTATUS, FBEGTIME, FIntoStepOK)VALUES({0},{1},'{2}',{3},{4},{5},{6},'{7}','{8}','{9}',{10},{11},'{12}',{13},'{14}'})", ob));
|
|
|
|
}
|
|
|
|
|
|
dbo.ExceSQL(string.Format("update AGV_TASK set WCS_FLAG =2 where AGV_TASK_ID = {0} ", TaskIndex));
|
|
|
|
CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "AGV送货完成,生成扫码任务。", newTaskStart.ToString(), TaskIndex.ToString());
|
|
}
|
|
}
|
|
#endregion
|
|
|
|
//删除AGV任务
|
|
dbo.ExceSQL(string.Format("delete AGV_TASK where FID = {0} and AGV_TASK_ID = {1}", Fid, TaskIndex));
|
|
//删除调度指令
|
|
dbo.ExceSQL(string.Format("delete T_Monitor_Task where F_ManageTaskIndex = {0} and F_MonitorIndex = {1}", Fid, TaskIndex));
|
|
//删除调度任务
|
|
dbo.ExceSQL(string.Format("delete T_Manage_Task where FID = {0}", Fid));
|
|
|
|
break;
|
|
case 5: //任务完成
|
|
|
|
//删除AGV任务
|
|
dbo.ExceSQL(string.Format("delete AGV_TASK where FID = {0} and AGV_TASK_ID = {1}", Fid, TaskIndex));
|
|
//删除调度指令
|
|
dbo.ExceSQL(string.Format("delete T_Monitor_Task where F_ManageTaskIndex = {0} and F_MonitorIndex = {1}", Fid, TaskIndex));
|
|
//删除调度任务
|
|
dbo.ExceSQL(string.Format("delete T_Manage_Task where FID = {0}", Fid));
|
|
break;
|
|
case 6: //申请删除
|
|
if (Convert.ToInt32(valist0[0]["F_Status"]) != 900)
|
|
{
|
|
if (Convert.ToInt32(valist0[0]["F_Status"]) == 9 || Convert.ToInt32(valist0[0]["F_Status"]) == 10)
|
|
{
|
|
//调度指令更新标记
|
|
dbo.ExceSQL(string.Format("update T_Monitor_Task set F_Status = 900 where F_ManageTaskIndex = {0} and F_MonitorIndex = {1}", Fid, TaskIndex));
|
|
|
|
//删除AGV任务
|
|
dbo.ExceSQL(string.Format("delete AGV_TASK where FID = {0} and AGV_TASK_ID = {1}", Fid, TaskIndex));
|
|
}
|
|
else if (Convert.ToInt32(valist0[0]["F_Status"]) == 3)
|
|
{
|
|
int start = Convert.ToInt32(valist0[0]["F_NumParam2"]);
|
|
int end = Convert.ToInt32(valist0[0]["F_NumParam5"]);
|
|
if (GetPilerLocat(start) != -1) //出库任务取完货,AGV删除,调度认为完成,管理报完成
|
|
{
|
|
//调度指令更新标记
|
|
dbo.ExceSQL(string.Format("update T_Monitor_Task set F_Status = 900 where F_ManageTaskIndex = {0} and F_MonitorIndex = {1}", Fid, TaskIndex));
|
|
|
|
//删除AGV任务
|
|
dbo.ExceSQL(string.Format("delete AGV_TASK where FID = {0} and AGV_TASK_ID = {1}", Fid, TaskIndex));
|
|
|
|
//调度任务完成(已经出到输送线了,不可能回到货位了)
|
|
dbo.ExceSQL(string.Format("update T_Manage_Task set FSTATUS == 999 where FID = {0} ", Fid));
|
|
//给管理更新终点和状态
|
|
dboM.ExceSQL(string.Format("update IO_CONTROL set CONTROL_STATUS == 999,END_DEVICE_CODE = {0} where CONTROL_ID = {1} ", Fid, valist0[0]["F_NumParam5"].ToString()));
|
|
|
|
//删除调度指令
|
|
dbo.ExceSQL(string.Format("delete T_Monitor_Task where F_ManageTaskIndex = {0} and F_MonitorIndex = {1}", Fid, TaskIndex));
|
|
//删除调度任务
|
|
dbo.ExceSQL(string.Format("delete T_Manage_Task where FID = {0}", Fid));
|
|
}
|
|
else if (GetPilerLocat(end) != -1) //入库任务,AGV删除,调度也删除,并将状态更新管理,生成叠盘任务
|
|
{
|
|
|
|
}
|
|
else //AGV站台间移库,AGV删除,调度也删除,状态更新管理
|
|
{
|
|
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
//残留的AGV任务处理 zcy 20230310
|
|
|
|
dbo.ExceSQL(string.Format("delete AGV_TASK where FID = {0} and AGV_TASK_ID = {1}", Fid, TaskIndex));
|
|
CommonClassLib.CCarryConvert.WriteDarkCasket("RGVTASK", "AGV 任务被删除", Fid.ToString(), "找不到对应的调度任务,自动将RGV任务删除!");
|
|
|
|
}
|
|
}
|
|
public int GetManageTaskCountForStartAndEndDevice(int start, int end, string barcode)
|
|
{
|
|
DataView dv = new DataView();
|
|
string sql = string.Empty;
|
|
try
|
|
{
|
|
|
|
{
|
|
sql = string.Format("SELECT * FROM T_Manage_Task WHERE FSTARTDEVICE = '{0}' and FENDDEVICE = '{1}' and FPALLETBARCODE = '{2}'",
|
|
start, end, barcode);
|
|
}
|
|
dv = dbo.ExceSQL(sql).Tables[0].DefaultView;
|
|
|
|
return dv.Count;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
throw ex;
|
|
}
|
|
finally
|
|
{
|
|
dv.Dispose();
|
|
}
|
|
|
|
}
|
|
|
|
//根据输送线,返回拆叠盘机所在输送线的位置
|
|
public int GetPilerLocat(int device)
|
|
{
|
|
DataView valist = dbo.ExceSQL(string.Format("select * from T_Base_PLC_Ask where F_DeviceIndex = {0} and F_Askkind = 9", device)).Tables[0].DefaultView;
|
|
|
|
|
|
if (valist.Count > 0)
|
|
{
|
|
return Convert.ToInt32(valist[0]["F_TempFirstProject"]);
|
|
}
|
|
else
|
|
{
|
|
return -1;
|
|
}
|
|
|
|
|
|
}
|
|
//根据输送线,返回扫码器所在输送线的位置
|
|
public int GetScannerLocat(int device)
|
|
{
|
|
DataView valist = dbo.ExceSQL(string.Format("select * from T_Base_PLC_Ask where F_DeviceIndex = {0} and F_Askkind = 9", device)).Tables[0].DefaultView;
|
|
|
|
|
|
if (valist.Count > 0)
|
|
{
|
|
return Convert.ToInt32(valist[0]["F_FirstProject"]);
|
|
}
|
|
else
|
|
{
|
|
return -1;
|
|
}
|
|
|
|
}
|
|
|
|
StringBuilder sql = new StringBuilder();
|
|
public static int GetTempManageIdx()
|
|
{
|
|
//20100108
|
|
DataSet ds = new DataSet();
|
|
try
|
|
{
|
|
int maxIdx = 10001;
|
|
|
|
ds = dbo.ExceSQL("SELECT F_ManageTaskIndex FROM T_Base_Manage_Task_Index_Temp_Task");
|
|
if (ds.Tables[0].DefaultView.Count > 0)
|
|
{
|
|
if ((Convert.ToInt32(ds.Tables[0].DefaultView[0]["F_ManageTaskIndex"]) + 1) >= 19998)
|
|
{
|
|
maxIdx = 10001;
|
|
}
|
|
else
|
|
{
|
|
maxIdx = (Convert.ToInt32(ds.Tables[0].DefaultView[0]["F_ManageTaskIndex"]) + 1);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
maxIdx = 10001;
|
|
}
|
|
//判断临时调度任务表是否有重复值
|
|
if (IFExitTempManageIndex(maxIdx) == true)
|
|
{
|
|
RecordMaxTempManageTaskFID(maxIdx);
|
|
maxIdx = GetTempManageIdx();
|
|
return maxIdx;
|
|
}
|
|
|
|
RecordMaxTempManageTaskFID(maxIdx);
|
|
return maxIdx;
|
|
}
|
|
catch (Exception ex)
|
|
{//20100108
|
|
|
|
throw ex;
|
|
//return 0;
|
|
}
|
|
finally
|
|
{//20100108
|
|
ds.Dispose();
|
|
}
|
|
|
|
}
|
|
public static bool IFExitTempManageIndex(int fid)
|
|
{
|
|
//20100108
|
|
DataView dv = new DataView();
|
|
try
|
|
{
|
|
dv = dbo.ExceSQL(string.Format("SELECT fid FROM T_Manage_Task WHERE F_ManageTaskKindIndex=2 and fid = {0}", fid)).Tables[0].DefaultView;
|
|
if (dv.Count > 0)
|
|
{
|
|
return true;
|
|
}
|
|
else
|
|
{
|
|
return false;
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{//20100108
|
|
throw ex;
|
|
}
|
|
finally
|
|
{//20100108
|
|
dv.Dispose();
|
|
}
|
|
}
|
|
public static void RecordMaxTempManageTaskFID(int fid)
|
|
{//20100108
|
|
DataView dv = new DataView();
|
|
try
|
|
{//20100108
|
|
dv = dbo.ExceSQL("select F_ManageTaskIndex from T_Base_Manage_Task_Index_Temp_Task").Tables[0].DefaultView;
|
|
if (dv.Count > 0)
|
|
{
|
|
//if (fid == 19998)
|
|
//{
|
|
// dbo.ExceSQL("UPDATE T_Base_Manage_Task_Index_Temp_Task SET F_ManageTaskIndex =10001");
|
|
// return;
|
|
//}
|
|
//if (fid > Convert.ToInt32(dv[0]["F_ManageTaskIndex"]))
|
|
//{
|
|
//20101124
|
|
|
|
dbo.ExceSQL(string.Format("UPDATE T_Base_Manage_Task_Index_Temp_Task SET F_ManageTaskIndex ={0}", fid));
|
|
return;
|
|
//}
|
|
}
|
|
else
|
|
{
|
|
|
|
dbo.ExceSQL(string.Format("INSERT INTO T_Base_Manage_Task_Index_Temp_Task (F_ManageTaskIndex)VALUES ({0})", fid));
|
|
return;
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{//20100108
|
|
|
|
throw ex;
|
|
//return 0;
|
|
}
|
|
finally
|
|
{//20100108
|
|
dv.Dispose();
|
|
}
|
|
}
|
|
}
|
|
}
|