using iWareCommon.Utils;
using iWareModel;
using System;
using System.Collections.Generic;
using System.Linq;
namespace iWareSda
{
///
/// 堆垛机实体类
///
public static class Srm_CacheEntity
{
public static LogType curLogType = LogType.SrmSdaService;
#region 堆垛机地址
///
/// 写入DB的地址(带分隔符)
///
public static string W_DBHeaderWithSeparate = "540" + WareSdaStruct.PLCDBADDRESS_SEPARATE;
///
/// 读取DB的地址(带分隔符)
///
public static string R_DBHeaderWithSeparate = "541" + WareSdaStruct.PLCDBADDRESS_SEPARATE;
///
/// 入库取货请求 DB的地址(带分隔符)
///
public static string R_RKQH_DBHeaderWithSeparate = "221" + WareSdaStruct.PLCDBADDRESS_SEPARATE;
///
/// 读取DB(报警专用)
///
public static string R_DBHeader_Alert = "542";
private static SrmDBForWrite _dbBlockForWrite = new SrmDBForWrite()
{
//TODO:这里写配置的DB地址
#region 写入
/*
W_HandShake = W_DBHeaderWithSeparate + "0",
W_SrmNo = W_DBHeaderWithSeparate + "2",
W_PalletType = W_DBHeaderWithSeparate + "4",
W_SourcePosX = W_DBHeaderWithSeparate + "6",
W_SourcePosY = W_DBHeaderWithSeparate + "8",
W_SourcePosZ = W_DBHeaderWithSeparate + "10",
W_DestinationPosX = W_DBHeaderWithSeparate + "12",
W_DestinationPosY = W_DBHeaderWithSeparate + "14",
W_DestinationPosZ = W_DBHeaderWithSeparate + "16",
W_Command = W_DBHeaderWithSeparate + "18",
W_EmergencyStop = W_DBHeaderWithSeparate + "20",
W_CancleAlarm = W_DBHeaderWithSeparate + "22",
W_TaskFinishConfirm = W_DBHeaderWithSeparate + "24",
W_Stb = W_DBHeaderWithSeparate + "30",
W_Ack = W_DBHeaderWithSeparate + "32",
W_TaskNo = W_DBHeaderWithSeparate + "34",
*/
W_HandShake = W_DBHeaderWithSeparate + "0",
W_SrmNo = W_DBHeaderWithSeparate + "2",
W_PalletType = W_DBHeaderWithSeparate + "4",
W_SourcePosX = W_DBHeaderWithSeparate + "10",
W_SourcePosY = W_DBHeaderWithSeparate + "12",
W_SourcePosZ = W_DBHeaderWithSeparate + "14",
W_DestinationPosX = W_DBHeaderWithSeparate + "16",
W_DestinationPosY = W_DBHeaderWithSeparate + "18",
W_DestinationPosZ = W_DBHeaderWithSeparate + "20",
W_Command = W_DBHeaderWithSeparate + "22",
W_EmergencyStop = W_DBHeaderWithSeparate + "24",
W_CancleAlarm = W_DBHeaderWithSeparate + "26",
W_TaskFinishConfirm = W_DBHeaderWithSeparate + "28",
W_Taskverification = W_DBHeaderWithSeparate + "30",
W_Stb = W_DBHeaderWithSeparate + "34",
W_Ack = W_DBHeaderWithSeparate + "36",
W_TaskNo = W_DBHeaderWithSeparate + "6",
#endregion
};
private static SrmDBForRead _dbBlockForRead = new SrmDBForRead()
{
//TODO:这里写配置的DB地址
#region 读取
R_PickReqForInStore = R_RKQH_DBHeaderWithSeparate + "2.0",
R_HandShake = R_DBHeaderWithSeparate + "0",
R_SrmNo = R_DBHeaderWithSeparate + "2",
R_Mode = R_DBHeaderWithSeparate + "4",
R_Alarm = R_DBHeaderWithSeparate + "6",
R_LiftFull = R_DBHeaderWithSeparate + "8",
R_PosX = R_DBHeaderWithSeparate + "10",
R_PosY = R_DBHeaderWithSeparate + "12",
R_PosZ = R_DBHeaderWithSeparate + "14",
R_PosXmm = R_DBHeaderWithSeparate + "16",
R_PosYmm = R_DBHeaderWithSeparate + "20",
R_PosZmm = R_DBHeaderWithSeparate + "24",
R_PickFinish = R_DBHeaderWithSeparate + "28",
R_DeliveryFinish = R_DBHeaderWithSeparate + "30",
R_TaskFinish = R_DBHeaderWithSeparate + "32",
R_AlarmCode = R_DBHeaderWithSeparate + "34",
R_State = R_DBHeaderWithSeparate + "36",
R_ActualLane = R_DBHeaderWithSeparate + "38",
R_TaskNo = R_DBHeaderWithSeparate + "40",
#endregion
};
#endregion
private static List _deviceObjList = null;
private static object objLock = new object();
///
/// 生成设备实体类
///
public static List DeviceObjs
{
get
{
if (_deviceObjList == null)
{
lock (objLock)
{
if (_deviceObjList == null)
{
_deviceObjList = new List();
_deviceObjList.AddRange(GetSrmList());
}
}
}
return Srm_CacheEntity._deviceObjList;
}
set { Srm_CacheEntity._deviceObjList = value; }
}
public static T GetDeviceObj(int deviceId)
{
var device = Srm_CacheEntity.DeviceObjs.FirstOrDefault(x => x.View.DeviceId == deviceId);
return (T)(Object)device;
}
///
/// 实例化SrmEntity集合
///
///
private static List GetSrmList()
{
List srmList = new List();
srmList.Add(GetSingleSrmEntity(WareSdaStruct.Srm1_Address, EDevice.堆垛机));
//srmList.Add(GetSingleSrmEntity(WareSdaStruct.Srm2_Address, EDevice.二号堆垛机));
return srmList;
}
///
/// 实例化单个SrmEntity
///
///
///
///
private static SrmEntity GetSingleSrmEntity(string _ip, EDevice device)
{
SS7Param s7Param = new SS7Param()
{
cpu = WareSdaStruct.Srm_PLC_CpuType,
ip = _ip,
rack = WareSdaStruct.Srm_Rack,
slot = WareSdaStruct.Srm_Slot,
};
HslCommunicationParam hslCommunicationParam = new HslCommunicationParam()
{
cpu = WareSdaStruct.Srm_SiemensPLCS,
ip = _ip,
rack = WareSdaStruct.Srm_Rack,
slot = WareSdaStruct.Srm_Slot,
port = WareSdaStruct.Srm_Port
};
PLCService PLCService = PLCFactory.GetOPCService(WareSdaStruct.System_PlcServiceTypeEnum, s7Param, hslCommunicationParam);
SrmEntity srm = new SrmEntity("Srm" + (int)device, (int)device, _dbBlockForWrite, _dbBlockForRead, PLCService);
return srm;
}
}
}