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.
351 lines
14 KiB
351 lines
14 KiB
3 months ago
|
using System;
|
||
|
using System.Collections.Generic;
|
||
|
using System.Text;
|
||
|
using System.Data;
|
||
|
using System.Threading;
|
||
|
using Microsoft.VisualBasic;
|
||
|
using DBFactory;
|
||
|
using ICommLayer;
|
||
|
using Model;
|
||
|
|
||
|
namespace AGVDataTable
|
||
|
{
|
||
|
/// <summary>
|
||
|
/// 20200430�м����ӿ�
|
||
|
/// �����豸������
|
||
|
///
|
||
|
/// </summary>
|
||
|
public class CSendDeviceOrder: ISendDeviceOrder
|
||
|
{
|
||
|
string _commLayerError;
|
||
|
|
||
|
public string CommLayerError
|
||
|
{
|
||
|
get { return _commLayerError; }
|
||
|
set { _commLayerError = value; }
|
||
|
}
|
||
|
DBOperator dbo = CommonClassLib.AppSettings.dbo;//20130510
|
||
|
public CSendDeviceOrder()
|
||
|
{
|
||
|
dbo.Open();
|
||
|
}
|
||
|
//~CSendDeviceOrder()
|
||
|
//{
|
||
|
// dbo.Close();
|
||
|
//}
|
||
|
/// <summary>
|
||
|
/// ����AGV������
|
||
|
/// </summary>
|
||
|
/// <param name="MessageIndex">��Ϣ����</param>
|
||
|
/// <param name="TaskIndex">��������</param>
|
||
|
/// <param name="Order">AGV������</param>
|
||
|
///1-ȡ�ͻ�
|
||
|
///2.3... ����չ
|
||
|
/// <param name="DeviceIndex">�豸����</param>
|
||
|
/// <param name="StartX">AGVȡ��վ̨����������</param>
|
||
|
/// <param name="StartY">0</param>
|
||
|
/// <param name="StartZ">0</param>
|
||
|
/// <param name="EndX">AGV�ͻ�վ̨����������</param>
|
||
|
/// <param name="EndY"></param>
|
||
|
/// <param name="EndZ">0</param>
|
||
|
/// <returns>���������Ƿ��ɹ�</returns>
|
||
|
public bool SendDeviceOrder(int MessageIndex, int TaskIndex, int Order, int DeviceIndex, int StartX, int StartY, int StartZ, int EndX, int EndY, int EndZ)
|
||
|
{
|
||
|
//return true;
|
||
|
StringBuilder sql = new StringBuilder();
|
||
|
StringBuilder sss = new StringBuilder();
|
||
|
DataView dv = new DataView();
|
||
|
sql.Remove(0, sql.Length);
|
||
|
sql.Append("SELECT * FROM T_Monitor_Task WHERE F_MonitorIndex = ").Append(TaskIndex).Append(" AND F_Status = 0");
|
||
|
dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
|
||
|
if (dv.Count == 0)
|
||
|
{
|
||
|
_commLayerError = "OPCClient.CSendDeviceOrder.SendDeviceOrder������������"+ TaskIndex +" ��Ӧ�Ŀ���ָ��!";
|
||
|
return false;
|
||
|
}
|
||
|
try
|
||
|
{
|
||
|
int checkDeviceCode = 12236;
|
||
|
if (StartX == 12113 || EndX == 12229)
|
||
|
{
|
||
|
sql.Clear();
|
||
|
sql.AppendFormat("select * from T_Monitor_Task where F_Status > 0 and {0}", StartX == 12113 ? "F_NumParam5 = 12229" : "F_NumParam2 = 12113");
|
||
|
var checkTask = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
|
||
|
if(checkTask.Count > 0)
|
||
|
{
|
||
|
_commLayerError = "�ȴ�����AGV����·�߱�����";
|
||
|
return false;
|
||
|
}
|
||
|
}
|
||
|
sql.Clear();
|
||
|
sql.AppendFormat("select * from T_Monitor_Task where F_Status > 0 and F_NumParam5 = {0}", EndX);
|
||
|
var task = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
|
||
|
if (task.Count > 0)
|
||
|
{
|
||
|
switch (EndX)
|
||
|
{
|
||
|
case 12235:
|
||
|
checkDeviceCode = 12236;
|
||
|
break;
|
||
|
case 12219:
|
||
|
checkDeviceCode = 12502;
|
||
|
break;
|
||
|
case 12229:
|
||
|
checkDeviceCode = 12230;
|
||
|
break;
|
||
|
case 12232:
|
||
|
checkDeviceCode = 12233;
|
||
|
break;
|
||
|
case 12111:
|
||
|
checkDeviceCode = 12405;
|
||
|
break;
|
||
|
case 12103:
|
||
|
checkDeviceCode = 12401;
|
||
|
break;
|
||
|
}
|
||
|
MDevice checkDeviceModel = CGetInfo.GetDeviceInfo(checkDeviceCode);
|
||
|
if (checkDeviceModel.SplitByte_0 == 1)
|
||
|
{
|
||
|
_commLayerError = StartX + "��" + EndX + "������ִ�е���������" + checkDeviceCode + "λ���л�";
|
||
|
return false;
|
||
|
}
|
||
|
}
|
||
|
int fid = Model.CGeneralFunction.GetManageTaskIndexfromMonitor(TaskIndex);
|
||
|
sql.Remove(0, sql.Length);
|
||
|
sql.Append("SELECT * FROM t_agvTask WHERE ID = ").Append(fid).Append(" AND Main_Tk_ID = ")
|
||
|
.Append(TaskIndex);
|
||
|
if (dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView.Count > 0)
|
||
|
{
|
||
|
_commLayerError = "OPCClient.CSendDeviceOrder.SendDeviceOrder�����������м����Ѵ��ڸ�ָ�"+ TaskIndex;
|
||
|
return false;
|
||
|
}
|
||
|
StringBuilder dtime = new StringBuilder(DateTime.Now.ToString("u"));
|
||
|
dtime.Remove(dtime.Length - 1, 1);
|
||
|
int TaskLevel = Convert.ToInt32(dv[0]["F_MonitorTaskLevel"]);
|
||
|
|
||
|
string PalletBarcode = dv[0]["F_TxtParam"].ToString();
|
||
|
|
||
|
sql.Clear();
|
||
|
sql.Append("select * from T_Manage_Task where FID = ").Append(fid);
|
||
|
dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
|
||
|
if (dv.Count == 0)
|
||
|
{
|
||
|
_commLayerError = "OPCClient.CSendDeviceOrder.SendDeviceOrder�����������Ҳ�����Ӧ�Ĺ�������!";
|
||
|
return false;
|
||
|
|
||
|
}
|
||
|
|
||
|
//int TaskType = Convert.ToInt32(dv[0]["FCONTROLTASKTYPE"]);
|
||
|
|
||
|
int COMPOSITE_TAG = 0;
|
||
|
|
||
|
string START_DEVICE_CODE2 = "";
|
||
|
string END_DEVICE_CODE2 = "";
|
||
|
|
||
|
sql.Remove(0, sql.Length);
|
||
|
sql.Append($"select * from [dbo].[T_AgvTask] where Tk_Out_Pos=(select F_Top from T_Base_AGV_Gate where F_AGVGateDeviceIndex='{StartX}') " +
|
||
|
$" and ((Is_GetOrSend=0 and battery_status=1) or Is_GetOrSend in(5,8)) ");// and battery_status=1
|
||
|
var dvs = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
|
||
|
if (dvs.Count > 0)
|
||
|
{
|
||
|
sql.Remove(0, sql.Length);
|
||
|
sql.Append("update T_Monitor_Task set F_IfSync='2' WHERE F_MonitorIndex = ").Append(TaskIndex).Append(" AND F_Status = 0");
|
||
|
dbo.ExecuteSql(sql.ToString());
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
|
||
|
sql.Clear();
|
||
|
sql.Append("select * from T_Base_AGV_Gate where F_AGVGateDeviceIndex= ").Append(StartX);
|
||
|
dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
|
||
|
var StartXs = dv[0]["F_Left"];
|
||
|
int TaskType= Convert.ToInt32( dv[0]["F_Input"]);
|
||
|
int palletType = Convert.ToInt32(dv[0]["F_Output"]);
|
||
|
sql.Clear();
|
||
|
sql.Append("select * from T_Base_AGV_Gate where F_AGVGateDeviceIndex= ").Append(EndX);
|
||
|
dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
|
||
|
|
||
|
var EndXs = dv[0]["F_Left"];
|
||
|
var TaskTypes = TaskType == 1 ? 1 : 3;
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
//INSERT INTO t_agvTask(MAIN_TK_ID,Agv_Tk_Type,pallet_no,Tk_In_Pos,Tk_Out_Pos,tk_sts,Tk_Ins_UserID,Tk_Ins_TM)VALUES()
|
||
|
string command = string.Format(
|
||
|
"INSERT INTO t_agvTask(MAIN_TK_ID,Agv_Tk_Type,pallet_no,Tk_In_Pos,Tk_Out_Pos,tk_sts,Tk_Ins_UserID,Tk_Ins_TM,pallet_Type,Is_FinishFlag,Is_GetOrSend)" +
|
||
|
" VALUES('{0}', '{1}', '{2}', '{3}', '{4}', '{5}', '{6}', '{7}','{8}','{9}','{10}')",
|
||
|
TaskIndex,"2",PalletBarcode,StartXs, EndXs, COMPOSITE_TAG,"WCS", dtime.ToString(), palletType,"1", TaskTypes);
|
||
|
//TaskIndex, TaskType, TaskLevel, PalletBarcode, StartXs, EndXs, COMPOSITE_TAG, dtime.ToString(), fid, START_DEVICE_CODE2, END_DEVICE_CODE2
|
||
|
MDevice device = CGetInfo.GetDeviceInfo(EndX);
|
||
|
dbo.ExecuteSql(command);
|
||
|
sss.Remove(0, sss.Length);
|
||
|
sss.Append("���룺").Append(PalletBarcode).Append("**д��־1").Append("**������" + TaskIndex.ToString())
|
||
|
.Append("**��ʼվ̨" + StartX.ToString()).Append("**��ֹվ̨" + EndX.ToString()).Append("**��������" + PalletBarcode)
|
||
|
.Append("**�ͻ�վ̨**" + EndX + ":�л�״̬��:" + device.SplitByte_0 + "," + device.HaveGoods);
|
||
|
|
||
|
|
||
|
|
||
|
CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "����AGV����","", sss.ToString());
|
||
|
return true;
|
||
|
}
|
||
|
catch (Exception ex)
|
||
|
{
|
||
|
_commLayerError = "OPCClient.CSendDeviceOrder.SendDeviceOrder����������" + ex.Message;
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
}
|
||
|
/// <summary>
|
||
|
/// ���ͶѶ��������������豸����
|
||
|
/// </summary>
|
||
|
/// <param name="MessageIndex">��Ϣ����</param>
|
||
|
/// <param name="TaskIndex">��������</param>
|
||
|
/// <param name="Order">������</param>
|
||
|
/// �����������֣�
|
||
|
///1-��λ
|
||
|
///2-���ӻ�
|
||
|
///3-���ͻ�
|
||
|
///4-�ҽӻ�
|
||
|
///5-���ͻ�
|
||
|
///6-ֹͣ
|
||
|
///7-�˶���1#λ��
|
||
|
///8-�˶���2#λ��
|
||
|
/// ��
|
||
|
///���ͻ���̨�������֣�
|
||
|
///1-���⣨�����⣩
|
||
|
/// 2-���⣨�����⣩
|
||
|
/// 3-�ͻ�
|
||
|
/// 4-ֹͣ
|
||
|
/// <param name="DeviceIndex">�豸����</param>
|
||
|
/// <returns>���������豸�����Ƿ��ɹ�</returns>
|
||
|
public bool SendDeviceOrder(int MessageIndex, int TaskIndex, int Order, int DeviceIndex, int ArrowDeviceIndex)
|
||
|
{
|
||
|
return true;
|
||
|
}
|
||
|
public bool SendDeviceOrder(int MessageIndex, int TaskIndex, int Order, int DeviceIndex, int StartX, int StartY, int StartZ, int EndX, int EndY, int EndZ, string DoubleFork)
|
||
|
{
|
||
|
return true;
|
||
|
|
||
|
}
|
||
|
public bool SendDeviceOrder(int DeviceIndex, string TobaccoCode, bool HaveFirstProjectCode, bool IfSmallTobacco, int Count)
|
||
|
{
|
||
|
return true;
|
||
|
}
|
||
|
public bool WriteDBData(StringBuilder[] ItemNames, StringBuilder[] ItemValues)
|
||
|
{
|
||
|
return true;
|
||
|
}
|
||
|
public bool WriteDBData(StringBuilder[] ItemNames, StringBuilder[] ItemValues, string PLCconnectionID)
|
||
|
{
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
/// <summary>
|
||
|
/// LHDF
|
||
|
/// </summary>
|
||
|
/// <param name="deviceindex"></param>
|
||
|
/// <param name="type"></param>
|
||
|
private void GetAGVGatePalletType(int deviceindex, out int type)
|
||
|
{
|
||
|
|
||
|
StringBuilder sql = new StringBuilder();
|
||
|
sql.Clear();
|
||
|
sql.Append(string.Format("SELECT F_TYPE FROM T_Base_AGV_Gate where F_AGVGateDeviceIndex={0}", deviceindex));
|
||
|
DataView dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
|
||
|
if (dv.Count > 0)
|
||
|
{
|
||
|
type = Convert.ToInt32(dv[0][0].ToString());
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
type = 0;
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|
||
|
int GetGoodsHigh(int taskindex)
|
||
|
{
|
||
|
DataView dv = dbo.ExceSQL(string.Format("SELECT CELL_MODEL FROM T_Manage_Task WHERE (F_ManageTaskKindIndex = {0}) AND (FID = {1})", Model.CGeneralFunction.GetManageTaskKindIndexFromMonitor(taskindex), Model.CGeneralFunction.GetManageTaskIndexfromMonitor(taskindex))).Tables[0].DefaultView;
|
||
|
if (dv.Count > 0)
|
||
|
{
|
||
|
#region
|
||
|
//int gh = 1;
|
||
|
////P��װ��,B��,G��λ,D����λ
|
||
|
//switch (dv[0][0].ToString().ToUpper())
|
||
|
//{
|
||
|
// case "P":
|
||
|
// gh = 3;
|
||
|
// break;
|
||
|
// case "B":
|
||
|
// gh = 2;
|
||
|
// break;
|
||
|
// case "G":
|
||
|
// gh = 1;
|
||
|
// break;
|
||
|
// //case "D":
|
||
|
// // gh = 4;
|
||
|
// // break;
|
||
|
// default:
|
||
|
// gh = 1;
|
||
|
// break;
|
||
|
//}
|
||
|
#endregion
|
||
|
|
||
|
int gh = 0;
|
||
|
//1С2��
|
||
|
switch (dv[0][0].ToString().ToUpper())
|
||
|
{
|
||
|
case "1":
|
||
|
gh = 1;
|
||
|
break;
|
||
|
case "2":
|
||
|
gh = 2;
|
||
|
break;
|
||
|
|
||
|
default:
|
||
|
gh = 0;
|
||
|
break;
|
||
|
}
|
||
|
return gh;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
return 0;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/// <summary>
|
||
|
/// �����豸���PALLET_SIZE,STACK_TYPE\STACK_QTY
|
||
|
/// </summary>
|
||
|
/// <param name="TaskIndx"></param>
|
||
|
/// <returns></returns>
|
||
|
private int GetManageInfo(int TaskIndx, string Field)
|
||
|
{
|
||
|
DataView dv = new DataView();
|
||
|
try
|
||
|
{
|
||
|
StringBuilder sql = new StringBuilder();
|
||
|
sql.Clear();
|
||
|
sql.Append(string.Format("select {0} from T_Manage_Task where FID in(select F_ManageTaskIndex from T_Monitor_Task where F_MonitorIndex = {1})", Field, TaskIndx));
|
||
|
dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
|
||
|
if (dv.Count > 0 && dv[0][Field].ToString().Trim()!= "")//dv[0][Field]!= DBNull.Value,int.Parse(dv[0][Field].ToString().Trim())> 0
|
||
|
{
|
||
|
return Convert.ToInt32(dv[0][Field]);
|
||
|
}
|
||
|
return -1;
|
||
|
}
|
||
|
catch (Exception ex)
|
||
|
{
|
||
|
|
||
|
throw ex;
|
||
|
}
|
||
|
finally
|
||
|
{
|
||
|
dv.Dispose();
|
||
|
}
|
||
|
|
||
|
}
|
||
|
}
|
||
|
}
|