using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Threading;
using Microsoft.VisualBasic;
using DBFactory;
using ICommLayer;
namespace MidDataTable
{
///
/// 20200430中间表接口
/// 发送设备命令类
/// 创建者:zhangbo
///
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();
//}
///
/// 发送环形穿梭车命令
///
/// 消息编号
/// 任务编号
/// 环穿命令字
///1-取送货
///2.3... 待扩展
/// 设备编号
/// 0
/// 0
/// 环穿取货站台(或区域)
///
///
/// 环穿送货站台(或区域)
/// 发送环穿命令是否成功
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 fid = Model.CGeneralFunction.GetManageTaskIndexfromMonitor(TaskIndex);
sql.Remove(0, sql.Length);
sql.Append("SELECT * FROM RGV_TASK WHERE FID = ").Append(fid).Append(" AND RGV_TASK_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();
int HouseCode = 1;
if (dv[0]["F_DeviceIndex"].ToString() == "15001")
{
HouseCode = 2;
}
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;
}
string LaneWay = dv[0]["FLANEWAY"].ToString();
#region 通过路径类型和货物类型,选择 RGV 的任务类型
int TaskType = Convert.ToInt32(dv[0]["FCONTROLTASKTYPE"]);
int GoodsType = Convert.ToInt32(dv[0]["FREMARK"]);
sql.Clear();
sql.Append("select * from RGV_TASK_TYPE where RouteKind = ").Append(TaskType)
.Append(" and GoodsKinds LIKE '%").Append(GoodsType).Append("%' ");
dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
if (dv.Count == 0)
{
_commLayerError = "OPCClient.CSendDeviceOrder.SendDeviceOrder发生错误:找不到对应的环穿任务类型!,已转为类型13";
//return false;
TaskType = 13;//找不到对应的环穿任务类型,就写成异常残垛入库
}
else
{
TaskType = Convert.ToInt32(dv[0]["RGV_TaskType_Index"]);
}
#endregion
#region 南北出库,按组执行
sql.Clear();
sql.Append("select * from area_port where asrs_port_code =").Append(EndZ);
dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
if (dv.Count > 0 && (EndZ == 22110 || EndZ == 22116))
{
EndZ = Convert.ToInt32(dv[0]["area_code"]);
}
#endregion
string command = string.Empty;
if (DeviceIndex == 25001)
{
command = string.Format(
"INSERT INTO RGV_TASK(RGV_TASK_ID, RGV_TASK_TYPE, RGV_TASK_LEVEL, PALLET_BARCODE, START_DEVICE_CODE, END_AREA_CODE, LANE_CODE, RGV_TASK_BEGINTIME,RGV_HOUSE_CODE,FID)" +
" VALUES({0}, {1}, {2}, '{3}', '{4}', '{5}', '{6}', '{7}','{8}',{9})",
TaskIndex, TaskType, TaskLevel, PalletBarcode, StartZ, EndZ, LaneWay, dtime.ToString(), HouseCode, fid);
}
else if (DeviceIndex == 15001)
{
command = string.Format(
"INSERT INTO RGV_TASK_NORTH(RGV_TASK_ID, RGV_TASK_TYPE, RGV_TASK_LEVEL, PALLET_BARCODE, START_DEVICE_CODE, END_AREA_CODE, LANE_CODE, RGV_TASK_BEGINTIME,RGV_HOUSE_CODE,FID)" +
" VALUES({0}, {1}, {2}, '{3}', '{4}', '{5}', '{6}', '{7}','{8}',{9})",
TaskIndex, TaskType, TaskLevel, PalletBarcode, StartZ, EndZ, LaneWay, dtime.ToString(), HouseCode, fid);
}
dbo.ExecuteSql(command);
sss.Remove(0, sss.Length);
sss.Append("条码:").Append(PalletBarcode).Append("**写标志1").Append("**任务号" + TaskIndex.ToString())
.Append("**起始站台" + StartZ.ToString()).Append("**终止站台" + EndZ.ToString());
CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "发送环形穿梭车命令","", sss.ToString());
return true;
}
catch (Exception ex)
{
_commLayerError = "OPCClient.CSendDeviceOrder.SendDeviceOrder发生错误:" + ex.Message;
return false;
}
}
///
/// 发送堆垛机以外的其它设备命令
///
/// 消息编号
/// 任务编号
/// 命令字
/// 穿梭车命令字:
///1-复位
///2-左接货
///3-左送货
///4-右接货
///5-右送货
///6-停止
///7-运动到1#位置
///8-运动到2#位置
/// …
///输送机、台车命令字:
///1-入库(朝向库)
/// 2-出库(背向库)
/// 3-送货
/// 4-停止
/// 设备编号
/// 发送其它设备命令是否成功
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;
}
}
}