using iWareSda.Common; using System; using System.Collections.Generic; using System.Threading; namespace iWareSda { public class LineEntity : IDevice { public LineEntity() { this.View = new LineView(); } #region OPC相关 /// /// 线体 写的DB块 /// public LineDBForWrite DBBlockForWrite { get; set; } /// /// 线体 读的DB块 /// public LineDBForRead DBBlockForRead { get; set; } /// /// 读取PLC实例 /// public PLCService plcService { get; set; } /// /// 视图对象 /// public LineView View { get; set; } #endregion /// /// 初始化数据 /// public void InitData() { //IsConnected = false; //IsHeartBeat = false; } public LineEntity(string DeviceName, int deviceId, LineDBForWrite _dbBlockForWrite, LineDBForRead _dbBlockForRead, PLCService _plcService) { this.View = new LineView(); this.View.DeviceName = DeviceName; this.View.DeviceId = deviceId; plcService = _plcService; DBBlockForWrite = _dbBlockForWrite; DBBlockForRead = _dbBlockForRead; } public void SetPropertyValueForRead() { var r_dbHeader = Line_CacheEntity.R_DBHeader; var r_dbBlock = this.DBBlockForRead; SdaHelper.SetPropertyValueForDB(r_dbBlock, this.View, this.plcService, r_dbHeader); //this.R_HeartBeat = Convert.ToInt16(this.S7.ReadValuePoint(r_dbHeader, this.DBBlockForRead.R_HeartBeat, typeof(short))); //this.R_InOutWay = Convert.ToInt16(this.S7.ReadValuePoint(r_dbHeader, this.DBBlockForRead.R_InOutWay, typeof(short))); //this.R_InOutStoreFlag = Convert.ToInt16(this.S7.ReadValuePoint(r_dbHeader, this.DBBlockForRead.R_InOutStoreFlag, typeof(short))); //this.R_IsHasCargo = Convert.ToInt16(this.S7.ReadValuePoint(r_dbHeader, this.DBBlockForRead.R_IsHasCargo, typeof(short))); //this.R_IsInPlace = Convert.ToBoolean(this.S7.ReadValuePoint(r_dbHeader, this.DBBlockForRead.R_IsInPlace, typeof(bool))); //this.R_MouldNo = Convert.ToInt16(this.S7.ReadValuePoint(r_dbHeader, this.DBBlockForRead.R_MouldNo, typeof(short))); } public void SetPropertyValueForWrite() { var w_dbHeader = Line_CacheEntity.W_DBHeader; var w_dbBlock = this.DBBlockForWrite; SdaHelper.SetPropertyValueForDB(w_dbBlock, this.View, this.plcService, w_dbHeader); //this.W_HeartBeat = Convert.ToInt16(this.S7.ReadValuePoint(w_dbHeader, this.DBBlockForWrite.W_HeartBeat, typeof(short))); //this.W_IsHasCargo = Convert.ToInt16(this.S7.ReadValuePoint(w_dbHeader, this.DBBlockForWrite.W_IsHasCargo, typeof(short))); //this.W_IsHasEmptyPlace = Convert.ToInt16(this.S7.ReadValuePoint(w_dbHeader, this.DBBlockForWrite.W_IsHasEmptyPlace, typeof(short))); } public bool IsHaveHeatBeat() { try { var r_dbHeader = Line_CacheEntity.R_DBHeader; var r_dbBlock = this.DBBlockForRead; short value = Convert.ToInt16(this.plcService.ReadValuePoint(r_dbHeader, r_dbBlock.R_HeartBeat, typeof(short))); //约定 等待2秒 Thread.Sleep(2000); short value_next = Convert.ToInt16(this.plcService.ReadValuePoint(r_dbHeader, r_dbBlock.R_HeartBeat, typeof(short))); if (value == value_next) {//没有心跳 return false; } else {//有心跳 return true; } } catch (Exception ex) { throw ex; } } #region 获取当前报警信息 /// /// 获取当前报警信息 /// /// public System.Collections.Generic.List GetAlertDatas() { List db_warningList = new List(); try { System.Collections.Generic.List alertList = new System.Collections.Generic.List(); string _dbValue; var isHasAlert = false; IDictionary srmAlertDict = new Dictionary(); //srmAlertDict = WareSdaStruct.lineAlertDict_1; foreach (var item in srmAlertDict) { _dbValue = item.Key; isHasAlert = Convert.ToBoolean(this.plcService.ReadValuePoint(Line_CacheEntity.R_DBHeader, item.Key, typeof(bool))); if (isHasAlert) { db_warningList.Add(item.Value.Trim()); } } } catch (Exception ex) { throw ex; } return db_warningList; } #endregion } }