using Admin.Core.IService.IService_New; using Admin.Core.Model.Model_New; using Aucma.Core.DataCollector.Factory; using Aucma.Core.HwPLc; using log4net; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Aucma.Core.DataCollector { /// /// 设备数据采集 /// public abstract class DataCollectorFactory { public readonly log4net.ILog _logger = LogManager.GetLogger(typeof(DataCollectorFactory)); public readonly IBaseDeviceParamServices _deviceParamServices; public readonly IRecordDeviceAlarmInfoServices _deviceAlarmInfoServices; public readonly IRecordDeviceElectricityServices _deviceElectricityServices; public int AlarmReadTimer = (1000 * 20); public int EleReadTimer = (1000 * 20); public DataCollectorFactory(IBaseDeviceParamServices deviceParamServices, IRecordDeviceAlarmInfoServices deviceAlarmInfoServices, IRecordDeviceElectricityServices deviceElectricityServices) { _deviceParamServices = deviceParamServices; _deviceAlarmInfoServices = deviceAlarmInfoServices; _deviceElectricityServices = deviceElectricityServices; } /// /// 采集设备报警信息 /// /// public abstract void CollectDeviceAlarmInfo(out List deviceAlarmInfos); /// /// 采集设备用电 /// /// public abstract void CollectDeviceElectricity(out List deviceElectricitys); /// /// 根据PLC地址读取设备用电 /// /// /// /// public void ReadDeviceElectricity(string[] address,IPlc plc,ref Record_DeviceElectricity deviceElectricity) { var ground = plc.ReadRandomInt16(address); if (ground != null) { if (ground.Length >= 10) { //deviceElectricity.Glys = ground[0]; deviceElectricity.Va = ground[0]; deviceElectricity.Vb = ground[1]; deviceElectricity.Vc = ground[2]; deviceElectricity.Ia = ground[6]; deviceElectricity.Ib = ground[7]; deviceElectricity.Ic = ground[8]; deviceElectricity.Zxyg = ground[9]; deviceElectricity.CollectTime = DateTime.Now; deviceElectricity.RecordTime = DateTime.Now; } } else { deviceElectricity = null; } } /// /// 读取PLC数据 /// /// /// /// /// public void ReadParamValueByPlc(IPlc _plc, string addr, string dataType, out int paramValue) { object result = null; switch (dataType) { case "int": result = _plc.ReadInt16(addr); break; case "float": result = _plc.ReadFloat(addr); break; case "bool": result = _plc.ReadBool(addr); break; default: result = _plc.ReadInt16(addr); break; } if (result == null) { result = "0"; } paramValue = Convert.ToInt32(result); } } }