using iWareCommon.Utils; using iWareModel; using iWareSda.Devices._3_Conveyer.ConveyerModel; using System; using System.Collections.Generic; using System.Linq; namespace iWareSda { /// /// Conveyer实体类 /// public static class Conveyer_CacheEntity { public static LogType curLogType = LogType.ConveyerSdaService; #region Conveyer1 /// /// 写入DB /// public static string W_DBHeaderWithSeparate = "2304" + WareSdaStruct.PLCDBADDRESS_SEPARATE; /// /// 读取DB /// public static string R_DBHeaderWithSeparate = "2304" + WareSdaStruct.PLCDBADDRESS_SEPARATE; /// /// 读取DB(扫码) /// public static string R_DBHeader_AGV = "6900" + WareSdaStruct.PLCDBADDRESS_SEPARATE; /// /// 读取DB(报警专用) /// public static string R_DBHeader_Alert = "500" + WareSdaStruct.PLCDBADDRESS_SEPARATE; /// /// 读取DB(Conveyer报警专用) /// public static string R_DBHeader_Conveyer_Alert = "500"; private static ConveyerDBForWrite _dbBlockForWrite = SetW_ConveyerForWriteCommList(); private static ConveyerDBForRead _dbBlockForRead = SetR_ConveyerForWriteCommList(); private static HslCommunicationParam hslCommunicationParam = new HslCommunicationParam() { cpu = WareSdaStruct.Conveyer_SiemensPLCS, ip = WareSdaStruct.Conveyer_Address, rack = WareSdaStruct.Conveyer_Rack, slot = WareSdaStruct.Conveyer_Slot, port = WareSdaStruct.Conveyer_Port }; private static SS7Param s7Param = new SS7Param() { cpu = WareSdaStruct.Conveyer_PLC_CpuType, ip = WareSdaStruct.Conveyer_Address, rack = WareSdaStruct.Conveyer_Rack, slot = WareSdaStruct.Conveyer_Slot, }; private static PLCService PLCService = PLCFactory.GetOPCService(WareSdaStruct.System_PlcServiceTypeEnum, s7Param, hslCommunicationParam); private static ConveyerEntity Conveyer = new ConveyerEntity("Conveyer", (int)EDevice.输送线, _dbBlockForWrite, _dbBlockForRead, PLCService); #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.Add(Conveyer); } } } return Conveyer_CacheEntity._deviceObjList; } set { Conveyer_CacheEntity._deviceObjList = value; } } private static T GetDeviceObj(int deviceId) { var device = Conveyer_CacheEntity.DeviceObjs.FirstOrDefault(x => x.View.DeviceId == deviceId); return (T)(Object)device; } /// /// 获取设备对象 /// /// /// public static SdaResEntity GetDeviceObj(int deviceId) { SdaResEntity sdaResult = new SdaResEntity(); ConveyerEntity Conveyer = Conveyer_CacheEntity.GetDeviceObj(deviceId); if (Conveyer == null) { return SdaResEntity.Failure("没有找到Conveyer设备"); } return SdaResEntity.Success("成功", Conveyer); } /// /// 写入地址集合赋值 /// /// /// private static ConveyerDBForWrite SetW_ConveyerForWriteCommList() { ConveyerDBForWrite _dbBlockForWrite = new ConveyerDBForWrite() { //TODO:这里写配置的DB地址 #region 写入 W_HandShake = W_DBHeaderWithSeparate + "0.0", W_Scan1_ReceiveFinish = W_DBHeaderWithSeparate + "300.0", W_AGV_RequestIn = R_DBHeader_AGV + "2.0", W_AGV_RequestInArr = R_DBHeader_AGV + "2.1", W_AGV_RequestOut = R_DBHeader_AGV + "2.2", W_AGV_RequestOutArr = R_DBHeader_AGV + "2.3", W_AGV_TaskType = R_DBHeader_AGV + "4.0", #endregion }; //写入地址 _dbBlockForWrite.W_ConveyerForWriteCommList = new List(); double default_W_TaskID = 2.0; double default_W_Source = 6.0; double default_W_Destination = 8.0; double default_W_TaskType = 10.0; double default_W_SalverType = 12.0; double default_W_STP = 14.0; double default_W_ConfirmTaskFinish = 14.1; double addValue = 14; for (int i = 0; i < WareSdaStruct.ConveyerStationList.Count; i++) { var stationCode = WareSdaStruct.ConveyerStationList[i]; if (i > 0) { default_W_TaskID += addValue; default_W_Source += addValue; default_W_Destination += addValue; default_W_TaskType += addValue; default_W_SalverType += addValue; default_W_STP += addValue; default_W_ConfirmTaskFinish += addValue; } _dbBlockForWrite.W_ConveyerForWriteCommList.Add(new ConveyerDBForWriteComm() { StationCode = stationCode, W_TaskID = W_DBHeaderWithSeparate + default_W_TaskID.ToString("0"), W_Source = W_DBHeaderWithSeparate + default_W_Source.ToString("0"), W_Destination = W_DBHeaderWithSeparate + default_W_Destination.ToString("0"), W_TaskType = W_DBHeaderWithSeparate + default_W_TaskType.ToString("0"), W_SalverType = W_DBHeaderWithSeparate + default_W_SalverType.ToString("0"), W_STP = W_DBHeaderWithSeparate + default_W_STP.ToString("0.0"), W_ConfirmTaskFinish = W_DBHeaderWithSeparate + default_W_ConfirmTaskFinish.ToString("0.0"), }); } return _dbBlockForWrite; } /// /// 读取地址集合赋值 /// /// /// private static ConveyerDBForRead SetR_ConveyerForWriteCommList() { ConveyerDBForRead _dbBlockForRead = new ConveyerDBForRead() { //TODO:这里写配置的DB地址 #region 读取 R_HandShake = R_DBHeaderWithSeparate + "0.0", //注意:这里用的扫描的地址块 R_Scan1_Success = R_DBHeaderWithSeparate + "800.0", R_Shape = R_DBHeaderWithSeparate + "802.0", R_Scan1_Value = R_DBHeaderWithSeparate + "804", R_Mode_Auto = R_DBHeaderWithSeparate + "1100.0", R_Mode_Manua = R_DBHeaderWithSeparate + "1100.1", R_Mode_Breakdown = R_DBHeaderWithSeparate + "1100.2", R_AGV_AllowIn = R_DBHeader_AGV + "502.0", R_AGV_AllowInArr = R_DBHeader_AGV + "502.1", R_AGV_AllowOut = R_DBHeader_AGV + "502.2", R_AGV_AllowOutArr = R_DBHeader_AGV + "502.3" #endregion }; //读取地址 double default_R_TaskReciveFinish = 502.0; double default_R_HasCargo = 502.1; double default_R_TaskID = 504; double default_R_TaskType = 508; double default_R_SalverHeight = 510; double default_R_SalverReach = 512.0; double default_R_TaskFinish = 512.1; int addValue = 12; _dbBlockForRead.R_ConveyerForReadCommList = new List(); for (int i = 0; i < WareSdaStruct.ConveyerStationList.Count; i++) { var stationCode = WareSdaStruct.ConveyerStationList[i]; if (i > 0) { default_R_TaskReciveFinish += addValue; default_R_HasCargo += addValue; default_R_TaskID += addValue; default_R_TaskType += addValue; default_R_SalverHeight += addValue; default_R_SalverReach += addValue; default_R_TaskFinish += addValue; } _dbBlockForRead.R_ConveyerForReadCommList.Add(new ConveyerDBForReadComm() { StationCode = stationCode, R_TaskReciveFinish = R_DBHeaderWithSeparate + default_R_TaskReciveFinish.ToString("0.0"), R_HasCargo = R_DBHeaderWithSeparate + default_R_HasCargo.ToString("0.0"), R_TaskID = R_DBHeaderWithSeparate + default_R_TaskID.ToString("0"), R_TaskType = R_DBHeaderWithSeparate + default_R_TaskType.ToString("0"), R_SalverHeight = R_DBHeaderWithSeparate + default_R_SalverHeight.ToString("0"), R_SalverReach = R_DBHeaderWithSeparate + default_R_SalverReach.ToString("0.0"), R_TaskFinish = R_DBHeaderWithSeparate + default_R_TaskFinish.ToString("0.0") }); } return _dbBlockForRead; } } }