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.
205 lines
8.3 KiB
205 lines
8.3 KiB
using System;
|
|
using System.Data;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading;
|
|
using Microsoft.VisualBasic;
|
|
using ICommLayer;
|
|
using DBFactory;
|
|
|
|
namespace AGVDataBaseCommunication
|
|
{
|
|
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>
|
|
/// 发送堆垛机命令
|
|
/// </summary>
|
|
/// <param name="MessageIndex">消息编号</param>
|
|
/// <param name="TaskIndex">任务编号</param>
|
|
/// <param name="Order">堆垛机命令字</param>
|
|
///单叉单进伸:
|
|
///1-复位
|
|
///2-将取
|
|
///3-将送
|
|
///4-取货
|
|
///5-放货
|
|
///6-取放货
|
|
///双叉单进伸:
|
|
///1-复位
|
|
///2-将取
|
|
///3-将送
|
|
///4-左叉取货
|
|
///5-左叉放货
|
|
///6-左叉取放货
|
|
///14-右叉取货
|
|
///15-右叉放货
|
|
///16-右叉取放货
|
|
///24-双叉取货
|
|
///25-双叉放货
|
|
///26-双叉取放货
|
|
///单叉双进伸:
|
|
///1-复位
|
|
///2-将取
|
|
///3-将送
|
|
///4-近位取货
|
|
///5-近位放货
|
|
///6-近位取放货
|
|
///14-远位取货
|
|
///15-远位放货
|
|
///16-远位取放货
|
|
/// <param name="DeviceIndex">设备编号</param>
|
|
/// <param name="StartX">起始x坐标,排-沿轨道方向</param>
|
|
/// <param name="StartY">起始y坐标,层-高度方向</param>
|
|
/// <param name="StartZ">起始z坐标,列-面向堆垛机操作面板,1-左侧,2-右侧</param>
|
|
/// <param name="EndX">目标x坐标,排-沿轨道方向</param>
|
|
/// <param name="EndY">目标y坐标,层-高度方向</param>
|
|
/// <param name="EndZ">目标z坐标,列-面向堆垛机操作面板,1-左侧,2-右侧</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;
|
|
}
|
|
/// <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;
|
|
}
|
|
|
|
public bool SendDeviceOrder(int MessageIndex, int TaskIndex, int DeviceIndex, int StartDevice, int EndDevice,
|
|
int Order, int BoxQuality, int BoxCount, int PalletBufferNum)
|
|
{
|
|
return true;
|
|
}
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
/// <param name="TaskIndex">任务号即调度指令号</param>
|
|
/// <param name="TASK_LEVEL">优先级 1-8 越大优先级越高</param>
|
|
/// <param name="PALLET_BARCODE">托盘码</param>
|
|
/// <param name="START_DEVICE_CODE">取货地址</param>
|
|
/// <param name="FINISH_DEVICE_CODE">送货地址</param>
|
|
/// <param name="status">任务状态
|
|
/// 0. 新任务(WCS生成任务数据时给出)
|
|
/// 1. AGV接收任务
|
|
///2. AGV分配任务
|
|
///3. AGV取货完成
|
|
///4. AGV送货完成
|
|
///5. 整体任务完成
|
|
///6. 删除任务(AGV系统删除完的任务状态)
|
|
/// <param name="agvcode">指定车号,不指定为0</param>
|
|
/// <param name="time">任务开始时间</param>
|
|
/// <returns></returns>
|
|
public bool SendDeviceOrder(int TaskIndex, int TASK_LEVEL, string PALLET_BARCODE, string START_DEVICE_CODE, string FINISH_DEVICE_CODE, int status, int agvcode, DateTime time)
|
|
{
|
|
StringBuilder sql = new StringBuilder();
|
|
StringBuilder sss = new StringBuilder();
|
|
DataView dvmm = new DataView();
|
|
sql.Remove(0, sql.Length);
|
|
sql.Append("SELECT * FROM T_Monitor_Task WHERE F_MonitorIndex = ").Append(TaskIndex).Append(" AND F_Status = 0");
|
|
dvmm = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
|
|
if (dvmm.Count == 0)
|
|
{
|
|
_commLayerError = "AGVDataBaseCommunication.CSendDeviceOrder.SendDeviceOrder发生错误:不存在对应的空闲指令!";
|
|
return false;
|
|
}
|
|
|
|
sql.Remove(0, sql.Length);
|
|
sql.Append("SELECT * FROM T_Monitor_Task WHERE F_DeviceIndex = 50001 and (F_Status = 1 or F_Status = 2) ").Append("and F_NumParam2 = ").Append(START_DEVICE_CODE);//and F_MonitorIndex != .Append(TaskIndex)
|
|
dvmm = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
|
|
if (dvmm.Count > 0)
|
|
{
|
|
//StringBuilder AheadDetectUnallow = new StringBuilder();
|
|
//AheadDetectUnallow.Clear();
|
|
//AheadDetectUnallow.Append("等待发送:存在此起点已发送或以获取但未取完货的任务!");
|
|
//UpdateAheadDetectUnallow(AheadDetectUnallow, MonitorIndex);
|
|
//_commLayerError = "AGVDataBaseCommunication.CSendDeviceOrder.SendDeviceOrder等待发送:存在此起点已发送或以获取但未取完货的任务!";
|
|
return false;
|
|
}
|
|
|
|
try
|
|
{
|
|
sql.Remove(0, sql.Length);
|
|
sql.Append("SELECT * FROM AGV_TASK WHERE FID = ").Append(TaskIndex);
|
|
if (dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView.Count > 0)
|
|
{
|
|
_commLayerError = "AGVDataBaseCommunication.CSendDeviceOrder.SendDeviceOrder发生错误:AGV已存在该指令";
|
|
return false;
|
|
}
|
|
|
|
StringBuilder dtime = new StringBuilder(DateTime.Now.ToString("u"));
|
|
dtime.Remove(dtime.Length - 1, 1);
|
|
|
|
dbo.ExecuteSql(string.Format(
|
|
"INSERT INTO AGV_TASK(FID, AGV_TASK_LEVEL, PALLET_BARCODE,START_DEVICE_CODE, FINISH_DEVICE_CODE, AGV_TASK_STATUS, AGV_CODE, AGV_TASK_BEGINTIME,AGV_TASK_ENDTIME, ERROR_TEXT,INSERT_TIME )VALUES ({0}, {1}, '{2}', '{3}', '{4}', {5}, {6}, '{7}', '{8}', '{9}','{10}')",
|
|
TaskIndex, TASK_LEVEL.ToString(), PALLET_BARCODE, START_DEVICE_CODE, FINISH_DEVICE_CODE, status.ToString(), agvcode.ToString(), 0, 0, 0, dtime.ToString()));
|
|
|
|
return true;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
_commLayerError = "AGVDataBaseCommunication.CSendDeviceOrder.SendDeviceOrder发生错误:" + ex.Message;
|
|
return false;
|
|
}
|
|
}
|
|
|
|
|
|
}
|
|
}
|