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.
197 lines
8.4 KiB
197 lines
8.4 KiB
using System;
|
|
using System.Collections.Generic;
|
|
using System.Text;
|
|
using System.Data;
|
|
using System.Threading;
|
|
using Microsoft.VisualBasic;
|
|
using ICommLayer;
|
|
using System.Security.Cryptography;
|
|
using DBFactory;
|
|
|
|
namespace MidDataTable
|
|
{
|
|
/// <summary>
|
|
/// 20200430中间表接口
|
|
/// 发送设备命令类
|
|
/// 创建者:zhangbo
|
|
/// </summary>
|
|
public class CSendDeviceOrder: ISendDeviceOrder
|
|
{
|
|
string _commLayerError;
|
|
|
|
public string CommLayerError
|
|
{
|
|
get { return _commLayerError; }
|
|
set { _commLayerError = value; }
|
|
}
|
|
|
|
public static DBOperator dbo = CommonClassLib.AppSettings.dbo; //20130510
|
|
public CSendDeviceOrder()
|
|
{
|
|
|
|
}
|
|
//~CSendDeviceOrder()
|
|
//{
|
|
//
|
|
//}
|
|
|
|
/// <summary>
|
|
/// 发送AGV命令
|
|
/// </summary>
|
|
/// <param name="MessageIndex">消息编号</param>
|
|
/// <param name="TaskIndex">任务编号</param>
|
|
/// <param name="Order">AGV命令字</param>
|
|
/// 默认取送货
|
|
/// <param name="DeviceIndex">设备编号</param>
|
|
/// <param name="StartX">0</param>
|
|
/// <param name="StartY">0</param>
|
|
/// <param name="StartZ">环穿取货站台(或区域)</param>
|
|
/// <param name="EndX"></param>
|
|
/// <param name="EndY"></param>
|
|
/// <param name="EndZ">环穿送货站台(或区域)</param>
|
|
/// <returns>发送AGV命令是否成功</returns>
|
|
public bool SendDeviceOrder(int MessageIndex, int TaskIndex, int Order, int DeviceIndex, int StartX, int StartY, int StartZ, int EndX, int EndY, int EndZ)
|
|
{
|
|
StringBuilder sss = new StringBuilder();
|
|
|
|
DataView valist = dbo.ExceSQL(string.Format("select * from t_monitor_task where F_MonitorIndex={0} and F_Status=0 ", TaskIndex)).Tables[0].DefaultView;
|
|
if (valist.Count == 0)
|
|
{
|
|
_commLayerError = "OPCClient.CSendDeviceOrder.SendDeviceOrder发生错误:不存在"+ TaskIndex +" 对应的空闲指令!";
|
|
return false;
|
|
}
|
|
try
|
|
{
|
|
int fid = Convert.ToInt32(valist[0]["F_ManageTaskIndex"]);
|
|
int mti = Convert.ToInt32(valist[0]["F_ManageTASKKINDINDEX"]);
|
|
|
|
var dv = dbo.ExceSQL(string.Format("select * from agv_task where fid = {0} and agv_task_id = {1}", fid, TaskIndex)).Tables[0].DefaultView;
|
|
if (dv.Count > 0)
|
|
{
|
|
|
|
_commLayerError = "OPCClient.CSendDeviceOrder.SendDeviceOrder发生错误:中间表已存在该指令:"+ TaskIndex;
|
|
return false;
|
|
}
|
|
|
|
object ob = new object[11] { fid, TaskIndex, Convert.ToInt32(valist[0]["F_MonitorTaskLevel"]), 0, 0, StartX, EndX, 0,0, "", DateTime.Now.ToString("u")};
|
|
dbo.ExceSQL(string.Format("INSERT INTO agv_task(FID, AGV_TASK_ID,AGV_TASK_LEVEL,PALLET_BARCODE,PALLET_TYPE, START_DEVICE_CODE, FINISH_DEVICE_CODE,AGV_TASK_STATUS, AGV_CODE, ERROR_TEXT, INSERT_TIME,WCS_FLAG) " +
|
|
"VALUES({0},{1},'{2}','{3}','{4}','{5}','{6}','{7}','{8}','{9}','{10}','0')",
|
|
fid, TaskIndex, Convert.ToInt32(valist[0]["F_MonitorTaskLevel"]), 0, 0, StartX, EndX, 0, 0, "", DateTime.Now.ToString("u")));//ob
|
|
|
|
|
|
sss.Remove(0, sss.Length);
|
|
sss.Append("条码:").Append(0).Append("**写标志1").Append("**任务号" + TaskIndex.ToString())
|
|
.Append("**起始站台" + StartX.ToString()).Append("**终止站台" + EndX.ToString());
|
|
|
|
CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "发送AGV命令","", sss.ToString());
|
|
if (EndX == 22024 || EndX == 22023 || EndX == 22046 || EndX == 22049)
|
|
{
|
|
//站台逻辑有货
|
|
dbo.ExceSQL(string.Format("update t_base_device set F_HaveGoods = {0} where F_DeviceIndex = {1}", Convert.ToInt32(mti.ToString() + fid.ToString()), EndX));
|
|
}
|
|
|
|
{
|
|
#region 衢州华友入库AGV任务,发送时,生成拆盘任务
|
|
|
|
int newTaskEnd = EndX; //拆盘任务终点
|
|
int newTaskStart = GetPilerLocat(newTaskEnd);//拆盘任务起点
|
|
if (newTaskStart != -1)
|
|
{
|
|
Model.MDevice conveyor = Model.CGetInfo.GetDeviceInfo(newTaskEnd);
|
|
if (conveyor.SplitByte_0 == 0)
|
|
{
|
|
var dv2 = dbo.ExceSQL(string.Format("select * from agv_task where fid = {0} and agv_task_id = {1}", fid, TaskIndex)).Tables[0].DefaultView;
|
|
if ( dv2[0]["WCS_FLAG"] == null || dv2[0]["WCS_FLAG"].ToString() == "0" )
|
|
{
|
|
if (GetManageTaskCountForStartAndEndDevice(newTaskStart, newTaskEnd) == 0)
|
|
{
|
|
object obb = new object[15] { CGetDeviceState.GetTempManageIdx(), 2, "S-" + valist[0]["F_TxtParam"], 1, 4, 1, 1, 1, "-", newTaskStart, newTaskEnd, "-", 0, DateTime.Now.ToString("u"), 0 };
|
|
string strs = 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}')",
|
|
CGetDeviceState.GetTempManageIdx(), 2, "S-" + valist[0]["F_TxtParam"], 1, 4, 1, 1, 1, "-", newTaskStart, newTaskEnd, "-", 0, DateTime.Now.ToString("u"), 0);
|
|
dbo.ExceSQL(strs);
|
|
|
|
}
|
|
|
|
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
|
|
}
|
|
return true;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
_commLayerError = "OPCClient.CSendDeviceOrder.SendDeviceOrder发生错误:" + ex.Message;
|
|
return false;
|
|
}
|
|
|
|
}
|
|
public int GetManageTaskCountForStartAndEndDevice(int start, int end)
|
|
{
|
|
DataView dv = new DataView();
|
|
string sql = string.Empty;
|
|
try
|
|
{
|
|
|
|
{
|
|
sql = string.Format("SELECT * FROM T_Manage_Task WHERE FSTARTDEVICE = '{0}' and FENDDEVICE = '{1}' ",
|
|
start, end);
|
|
}
|
|
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 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;
|
|
}
|
|
}
|
|
}
|