using iWareSda.Common;
using System.Linq;
using iWareModel;
using System;
using System.Collections.Generic;
using System.Threading;
using iWareCommon.Utils;
using iWareCommon.Common.Globle;
using iWareCommon;
using iWareSda.Devices._3_Rgv.RgvModel;
using Newtonsoft.Json;
using iWareSda.Model;
namespace iWareSda
{
//public class RgvEntity : IDevice
//{
// public RgvEntity()
// {
// }
// #region OPC相关
// ///
// /// 写的DB块
// ///
// public RgvDBForWrite DBBlockForWrite { get; set; }
// ///
// /// 读的DB块
// ///
// public RgvDBForRead DBBlockForRead { get; set; }
// ///
// /// 读取PLC实例
// ///
// public PLCService plcService { get; set; }
// ///
// /// 视图对象
// ///
// public RgvView View { get; set; }
// #endregion
// ///
// /// 初始化数据
// ///
// public void InitData()
// {
// }
// public RgvEntity(string srmName, int deviceId, RgvDBForWrite _dbBlockForWrite, RgvDBForRead _dbBlockForRead, PLCService _plcService)
// {
// this.View = new RgvView();
// this.View.DeviceName = srmName;
// this.View.DeviceId = deviceId;
// //集合赋值初始化
// this.View.R_RgvForReadCommList = new List();
// this.View.W_RgvForWriteCommList = new List();
// for (int i = 0; i < WareSdaStruct.RgvStationList.Count; i++)
// {
// this.View.R_RgvForReadCommList.Add(new RgvDB2ObjForReadComm() { StationCode = WareSdaStruct.RgvStationList[i] });
// this.View.W_RgvForWriteCommList.Add(new RgvDB2ObjForWriteComm() { StationCode = WareSdaStruct.RgvStationList[i] });
// }
// plcService = _plcService;
// DBBlockForWrite = _dbBlockForWrite;
// DBBlockForRead = _dbBlockForRead;
// }
// #region 个性化方法
// ///
// /// Rgv任务发送
// ///
// ///
// ///
// ///
// ///
// ///
// ///
// ///
// public bool SendTask(int deviceId, int taskId, string sourcePlce, string toPlace, out string msg)
// {
// try
// {
// msg = "";
// if (!CanSendTask(deviceId, out msg))
// {
// return false;
// }
// //这里特殊转换一下
// if (toPlace == ((int)EDevice.出库口1012).ToString())
// {
// toPlace = ((int)EDevice.提升机1030).ToString();
// }
// RgvDBForWriteComm w_db_source = this.DBBlockForWrite.W_RgvForWriteCommList.FirstOrDefault(x => x.StationCode == sourcePlce);
// RgvDB2ObjForWriteComm w_dbObj_source = this.View.W_RgvForWriteCommList.FirstOrDefault(x => x.StationCode == sourcePlce);
// //RgvDBForWriteComm w_db_to = this.DBBlockForWrite.W_RgvForWriteCommList.FirstOrDefault(x => x.StationCode == toPlace);
// //RgvDB2ObjForWriteComm w_dbObj_to = this.View.W_RgvForWriteCommList.FirstOrDefault(x => x.StationCode == toPlace);
// //如果ACK为true,表示不能发任务
// var readObj = this.View.R_RgvForReadCommList.FirstOrDefault(x => x.StationCode == sourcePlce);
// if (readObj.R_ACK == true)
// {
// msg = "ACK为TRUE,不允许发任务";
// return false;
// }
// MessageModel b2 = this.plcService.WriteValuePoint(w_db_source.W_Destination, Convert.ToInt16(toPlace), w_dbObj_source.W_Destination);
// if (!b2.result)
// {
// msg = string.Format("向Rgv{0},起点{1}发送任务{2},写入目标站点{3}失败,返回结果:" + b2.resMsg, this.View.DeviceName, sourcePlce, taskId, toPlace);
// return false;
// }
// b2 = this.plcService.WriteValuePoint(w_db_source.W_TaskID, Convert.ToInt32(taskId), w_dbObj_source.W_TaskID);
// if (!b2.result)
// {
// msg = string.Format("向Rgv{0},起点{1},目标点{2},写入任务号{3}失败,返回结果:" + b2.resMsg, this.View.DeviceName, sourcePlce, toPlace, taskId);
// return false;
// }
// //将STP改为TRUE
// b2 = this.plcService.WriteValuePoint(w_db_source.W_STP, true, w_dbObj_source.W_STP);
// if (!b2.result)
// {
// msg = string.Format("向Rgv{0},起点{1},目标点{2},写入STP{3}失败,返回结果:" + b2.resMsg, this.View.DeviceName, sourcePlce, toPlace, true);
// return false;
// }
// return true;
// }
// catch (Exception ex)
// {
// msg = ex.Message;
// Log4NetHelper.WriteErrorLog(Rgv_CacheEntity.curLogType, "发送任务出现异常:" + ex.Message, ex);
// return false;
// }
// }
// ///
// /// 任务下发确认(收到PLC反馈后WCS清除)
// ///
// ///
// ///
// ///
// public bool WriteStp(int deviceId, string stationCode, bool value, out string msg)
// {
// try
// {
// msg = "";
// RgvDBForWriteComm w_db = this.DBBlockForWrite.W_RgvForWriteCommList.FirstOrDefault(x => x.StationCode == stationCode);
// RgvDB2ObjForWriteComm w_dbObj = this.View.W_RgvForWriteCommList.FirstOrDefault(x => x.StationCode == stationCode);
// MessageModel b2 = this.plcService.WriteValuePoint(w_db.W_STP, value, w_dbObj.W_STP);
// if (!b2.result)
// {
// msg = string.Format("向Rgv{0},站点号{1}写 任务下发确认(收到PLC反馈后WCS清除) " + value + "失败,返回结果:" + b2.resMsg,
// this.View.DeviceName, stationCode);
// return false;
// }
// return true;
// }
// catch (Exception ex)
// {
// msg = ex.Message;
// var logcontext = string.Format("向Rgv{0},站点号{1}写 任务下发确认(收到PLC反馈后WCS清除) " + true + "出现异常:" + JsonConvert.SerializeObject(ex),
// deviceId, stationCode);
// Log4NetHelper.WriteErrorLog(Rgv_CacheEntity.curLogType, logcontext, ex);
// return false;
// }
// }
// ///
// /// 1015重新扫码
// ///
// ///
// ///
// ///
// ///
// public bool Write1015ReScan(int deviceId, bool value, out string msg)
// {
// try
// {
// msg = "";
// MessageModel b2 = this.plcService.WriteValuePoint(this.DBBlockForWrite.W_1015_ReScan, value, this.View.W_1015_ReScan);
// if (!b2.result)
// {
// msg = string.Format("向Rgv地址{0} 写 " + value + "失败,返回结果:" + b2.resMsg,
// this.DBBlockForWrite.W_1015_ReScan);
// return false;
// }
// return true;
// }
// catch (Exception ex)
// {
// msg = ex.Message;
// var logcontext = string.Format("向Rgv地址{0} " + value + "出现异常:" + JsonConvert.SerializeObject(ex),
// this.DBBlockForWrite.W_1015_ReScan);
// Log4NetHelper.WriteErrorLog(Rgv_CacheEntity.curLogType, logcontext, ex);
// return false;
// }
// }
// ///
// /// RGV的任务完成ACK赋值
// ///
// ///
// ///
// ///
// ///
// public bool WriteRGV_FinishACK(int deviceId, bool value, int plcTaskId, out string msg)
// {
// try
// {
// msg = "";
// MessageModel b2 = this.plcService.WriteValuePoint(this.DBBlockForWrite.W_RGV_FinishACK, value, this.View.W_RGV_FinishACK);
// if (!b2.result)
// {
// msg = string.Format("向Rgv地址{0} 写 " + value + "失败,返回结果:" + b2.resMsg,
// this.DBBlockForWrite.W_RGV_FinishACK);
// Log4NetHelper.WriteErrorLog(Rgv_CacheEntity.curLogType, msg, null);
// return false;
// }
// Log4NetHelper.WriteInfoLog(Rgv_CacheEntity.curLogType, "写入W_RGV_FinishACK(" + this.DBBlockForWrite.W_RGV_FinishACK + ")值为" + value + "成功!因为PLC任务号:" + plcTaskId);
// return true;
// }
// catch (Exception ex)
// {
// msg = ex.Message;
// var logcontext = string.Format("向Rgv地址{0} " + value + "出现异常:" + JsonConvert.SerializeObject(ex),
// this.DBBlockForWrite.W_RGV_FinishACK);
// Log4NetHelper.WriteErrorLog(Rgv_CacheEntity.curLogType, logcontext, ex);
// return false;
// }
// }
// ///
// /// 四个入库口扫描验证ACK赋值
// ///
// ///
// ///
// ///
// ///
// public bool WriteScanValidateACK(bool isReset, int deviceId, string stationCode, bool value, int plcTaskId, out string msg)
// {
// msg = "";
// MessageModel b2 = null;
// string address_fail = "";
// string address_success = "";
// try
// {
// switch (stationCode)
// {
// case "1002":
// address_fail = this.DBBlockForWrite.W_1002_ScanFailACK;
// address_success = this.DBBlockForWrite.W_1002_ScanSuccessACK;
// break;
// case "1004":
// address_fail = this.DBBlockForWrite.W_1004_ScanFailACK;
// address_success = this.DBBlockForWrite.W_1004_ScanSuccessACK;
// break;
// case "1006":
// address_fail = this.DBBlockForWrite.W_1006_ScanFailACK;
// address_success = this.DBBlockForWrite.W_1006_ScanSuccessACK;
// break;
// case "1007":
// address_fail = this.DBBlockForWrite.W_1007_ScanFailACK;
// address_success = this.DBBlockForWrite.W_1007_ScanSuccessACK;
// break;
// default:
// throw new Exception("不支持的站点");
// }
// if (isReset)
// {//是重置
// b2 = this.plcService.WriteValuePoint(address_success, false, this.View.W_1002_ScanSuccessACK);
// if (!b2.result)
// {
// msg = string.Format("向Rgv地址{0} 写 " + false + "失败,返回结果:" + b2.resMsg,
// address_success);
// Log4NetHelper.WriteErrorLog(Rgv_CacheEntity.curLogType, msg, null);
// return false;
// }
// b2 = this.plcService.WriteValuePoint(address_fail, false, this.View.W_1002_ScanFailACK);
// if (!b2.result)
// {
// msg = string.Format("向Rgv地址{0} 写 " + false + "失败,返回结果:" + b2.resMsg,
// address_fail);
// Log4NetHelper.WriteErrorLog(Rgv_CacheEntity.curLogType, msg, null);
// return false;
// }
// }
// else
// {//不是重置
// if (value)
// {//表示扫描验证通过
// b2 = this.plcService.WriteValuePoint(address_success, true, this.View.W_1002_ScanSuccessACK);
// if (!b2.result)
// {
// msg = string.Format("向Rgv地址{0} 写 " + true + "失败,返回结果:" + b2.resMsg,
// address_success);
// Log4NetHelper.WriteErrorLog(Rgv_CacheEntity.curLogType, msg, null);
// return false;
// }
// }
// else
// {//表示扫描验证不通过
// b2 = this.plcService.WriteValuePoint(address_fail, true, this.View.W_1002_ScanFailACK);
// if (!b2.result)
// {
// msg = string.Format("向Rgv地址{0} 写 " + true + "失败,返回结果:" + b2.resMsg,
// address_fail);
// Log4NetHelper.WriteErrorLog(Rgv_CacheEntity.curLogType, msg, null);
// return false;
// }
// }
// }
// Log4NetHelper.WriteInfoLog(Rgv_CacheEntity.curLogType, "WriteScanFailACK方法,写入 四个入库口扫描失败ACK赋值 ScanFailACK(" + address_fail + ")值为" + value + "成功!因为PLC任务号:" + plcTaskId + ",isReset:" + isReset);
// return true;
// }
// catch (Exception ex)
// {
// msg = ex.Message;
// var logcontext = string.Format("WriteScanFailACK方法,向Rgv地址{0} " + value + "出现异常:" + JsonConvert.SerializeObject(ex),
// address_fail);
// if (value)
// {
// logcontext = string.Format("WriteScanFailACK方法,向Rgv地址{0} " + value + "出现异常:" + JsonConvert.SerializeObject(ex),
// address_success);
// }
// Log4NetHelper.WriteErrorLog(Rgv_CacheEntity.curLogType, logcontext, ex);
// return false;
// }
// }
// ///
// /// 取消报警
// ///
// ///
// ///
// ///
// public bool ClearAlarm(int deviceId, out string msg)
// {
// msg = "";
// return true;
// //try
// //{
// // msg = "";
// // var dbNumber = Rgv_CacheEntity.W_DBHeader;
// // MessageModel b2 = this.plcService.WriteValuePoint( this.DBBlockForWrite.W_Reset, true, this.View.W_Reset);
// // if (!b2.result)
// // {
// // msg = string.Format("向Rgv{0}写入设备复位" + true + "失败,返回结果:" + b2.resMsg, this.View.DeviceName);
// // return false;
// // }
// // return true;
// //}
// //catch (Exception ex)
// //{
// // msg = ex.Message;
// // Log4NetHelper.WriteErrorLog(Rgv_CacheEntity.curLogType, "取消报警出现异常:" + ex.Message, ex);
// // return false;
// //}
// }
// ///
// /// 任务删除
// ///
// ///
// ///
// ///
// ///
// public bool DeleteTask(int deviceId, int taskId, out string msg)
// {
// msg = "";
// return true;
// //try
// //{
// // msg = "";
// // if (this.View.R_TaskNo != taskId)
// // {
// // msg = string.Format("RGV当前非执行taskId={0}的任务", taskId);
// // return false;
// // }
// // var dbNumber = Rgv_CacheEntity.W_DBHeader;
// // MessageModel b2 = this.plcService.WriteValuePoint( this.DBBlockForWrite.W_TaskNo, taskId, this.View.W_TaskNo);
// // if (!b2.result)
// // {
// // msg = string.Format("向Rgv{0}写入任务号" + taskId + "失败,返回结果:" + b2.resMsg, this.View.DeviceName);
// // return false;
// // }
// // b2 = this.plcService.WriteValuePoint( this.DBBlockForWrite.W_Reset, 1, this.View.W_Reset);
// // if (!b2.result)
// // {
// // msg = string.Format("向Rgv{0}写入设备复位" + 1 + "失败,返回结果:" + b2.resMsg, this.View.DeviceName);
// // return false;
// // }
// // return true;
// //}
// //catch (Exception ex)
// //{
// // msg = ex.Message;
// // Log4NetHelper.WriteErrorLog(Rgv_CacheEntity.curLogType, "任务删除出现异常:" + ex.Message, ex);
// // return false;
// //}
// }
// ///
// /// 急停
// ///
// ///
// ///
// ///
// public bool EmergencyStop(int deviceId, string stationCode, out string msg)
// {
// msg = "";
// return true;
// //try
// //{
// // msg = "";
// // var dbNumber = Rgv_CacheEntity.W_DBHeader;
// // MessageModel b2 = this.plcService.WriteValuePoint( this.DBBlockForWrite.W_RgvForWriteCommList.Find(x => x.StationCode == stationCode)., 1, this.View.W_EStop);
// // if (!b2.result)
// // {
// // msg = string.Format("向Rgv{0}写入急停" + 1 + "失败,返回结果:" + b2.resMsg, this.View.DeviceName);
// // return false;
// // }
// // return true;
// //}
// //catch (Exception ex)
// //{
// // msg = ex.Message;
// // Log4NetHelper.WriteErrorLog(Rgv_CacheEntity.curLogType, "急停出现异常:" + ex.Message, ex);
// // return false;
// //}
// }
// ///
// /// 是否可以发送任务
// ///
// ///
// ///
// ///
// ///
// public bool CanSendTask(int deviceId, out string msg)
// {
// msg = "";
// //模拟
// //if (!this.View.IsConnected)
// //{
// // msg = "已离线";
// // return false;
// //}
// //if (this.View.R_Mode != (int)ERgvMode.连机自动模式)
// //{
// // msg = "当前非自动模式";
// // return false;
// //}
// //if (this.View.R_State != (int)ERgvState.空闲)
// //{
// // msg = "设备状态非空闲,无法执行其他任务";
// // return false;
// //}
// return true;
// }
// ///
// /// RGV是否是自动待机模式
// ///
// ///
// ///
// public bool RgvIsAutoAwaitMode(string stationCode, out string msg)
// {
// msg = "";
// var readData = this.View.R_RgvForReadCommList.Where(x => x.StationCode == stationCode).FirstOrDefault();
// if (readData.R_Model != (int)ERgvMode.自动待机模式)
// {
// ERgvMode mode = (ERgvMode)Enum.Parse(typeof(ERgvMode), readData.R_Model.ToString());
// msg = "站点" + stationCode + " 当前模式是[" + mode.ToString() + "],非自动待机模式";
// return false;
// }
// return true;
// }
// ///
// /// RGV是否是自动模式
// ///
// ///
// ///
// public bool RgvIsAuto(string stationCode, out string msg)
// {
// msg = "";
// var readData = this.View.R_RgvForReadCommList.Where(x => x.StationCode == stationCode).FirstOrDefault();
// if (readData.R_Model != (int)ERgvMode.自动待机模式 && readData.R_Model != (int)ERgvMode.自动运行模式)
// {
// ERgvMode mode = (ERgvMode)Enum.Parse(typeof(ERgvMode), readData.R_Model.ToString());
// msg = "站点" + stationCode + " 当前模式是[" + mode.ToString() + "],非自动待机模式或自动运行模式";
// return false;
// }
// return true;
// }
// ///
// /// RGV是否是空闲状态
// ///
// ///
// ///
// public bool RgvIsStateFree(string stationCode, out string msg)
// {
// msg = "";
// var readData = this.View.R_RgvForReadCommList.Where(x => x.StationCode == stationCode).FirstOrDefault();
// if (readData.R_State != (int)ERgvState.空闲)
// {
// ERgvMode mode = (ERgvMode)Enum.Parse(typeof(ERgvMode), readData.R_Model.ToString());
// msg = "站点" + stationCode + " 当前状态是[" + mode.ToString() + "],非空闲";
// return false;
// }
// return true;
// }
// #endregion
// public void SetPropertyValueForRead()
// {
// var r_dbBlock = this.DBBlockForRead;
// SdaHelper.SetPropertyValueForDB(r_dbBlock, this.View, this.plcService, "");
// //特殊处理List集合
// foreach (var item in r_dbBlock.R_RgvForReadCommList)
// {
// RgvDB2ObjForReadComm rgvDB2ObjForReadComm = this.View.R_RgvForReadCommList.Where(x => x.StationCode == item.StationCode).First();
// SdaHelper.SetPropertyValueForDB(item, rgvDB2ObjForReadComm, this.plcService, "");
// }
// }
// public void SetPropertyValueForWrite()
// {
// var w_dbBlock = this.DBBlockForWrite;
// SdaHelper.SetPropertyValueForDB(w_dbBlock, this.View, this.plcService, "");
// //特殊处理List集合
// foreach (var item in w_dbBlock.W_RgvForWriteCommList)
// {
// RgvDB2ObjForWriteComm rgvDB2ObjForWriteComm = this.View.W_RgvForWriteCommList.Where(x => x.StationCode == item.StationCode).First();
// SdaHelper.SetPropertyValueForDB(item, rgvDB2ObjForWriteComm, this.plcService, "");
// }
// }
// ///
// /// 是否有心跳
// ///
// ///
// public bool IsHaveHeatBeat()
// {
// try
// {
// var r_dbBlock = this.DBBlockForRead;
// short value = Convert.ToInt16(this.plcService.ReadValuePoint(r_dbBlock.R_HandShake, typeof(short)));
// //约定 等待2秒
// Thread.Sleep(2000);
// short value_next = Convert.ToInt16(this.plcService.ReadValuePoint(r_dbBlock.R_HandShake, typeof(short)));
// if (value == value_next)
// {//没有心跳
// return false;
// }
// else
// {//有心跳
// return true;
// }
// }
// catch (Exception ex)
// {
// throw ex;
// }
// }
// #region 获取当前报警信息
// ///
// /// 获取RGV当前报警信息
// ///
// ///
// public List GetRgvAlertDatas()
// {
// List db_warningList = new List();
// try
// {
// string _dbValue;
// var isHasAlert = false;
// IDictionary rgvAlertDict = new Dictionary();
// rgvAlertDict = WareSdaStruct.RgvAlertDict;
// foreach (var item in rgvAlertDict)
// {
// _dbValue = item.Key;
// isHasAlert = Convert.ToBoolean(this.plcService.ReadValuePoint(Rgv_CacheEntity.R_DBHeader_RGV_Alert, item.Key, typeof(bool)));
// if (isHasAlert)
// {
// db_warningList.Add(new DeviceWarningInfo()
// {
// Address = item.Key,
// Code = item.Key,
// Context = item.Value.Trim()
// });
// }
// }
// }
// catch (Exception ex)
// {
// throw ex;
// }
// return db_warningList;
// }
// ///
// /// 获取输送线当前报警信息
// ///
// ///
// public List GetLineAlertDatas()
// {
// List db_warningList = new List();
// try
// {
// IDictionary srmAlertDict = new Dictionary();
// foreach (var item in this.View.R_RgvForReadCommList)
// {
// if (item.R_AlarmCode > 0)
// {
// item.R_AlarmCodeMsg = WareSdaStruct.RgvAlertDict[item.R_AlarmCode.ToString()];
// }
// }
// }
// catch (Exception ex)
// {
// throw ex;
// }
// return db_warningList;
// }
// #endregion
//}
}