/// <summary> /// 获取绕带机对象列表 /// </summary> /// <param name="deviceInfoList">设备基本信息列表</param> /// <param name="port">端口号</param> /// <param name="startAddress">读取数据的开始地址</param> /// <param name="numRegister">需要读取的寄存器数量</param> /// <param name="deviceTemplateList">DXJ数据模板</param> /// <param name="isHour">是否整点,把设备状态写入数据库,true表示写入,默认值为false</param> /// <returns></returns> public static List <DXJ> GetDXJList(List <DeviceInfo> deviceInfoList, int port, short startAddress, short numRegister, List <DeviceTemplate> deviceTemplateList, bool isHour = false) { //获取错误状态解析词典 Dictionary <int, string> errorStringDic = GetErrorStringDic(); //创建连接对象列表 List <ConnectData> ConnectDataList = GetConnetData(deviceInfoList, port, startAddress, numRegister); //错误ip列表 List <String> ErrorIPS; //获取设备源数据 List <byte[]> ResultDataList = Read(ConnectDataList, out ErrorIPS); //创建绕带机对象列表 List <DXJ> DXJList = new List <DXJ>(); //判断是否有数据,有则处理。 if (ResultDataList.Count > 0) { //循环遍历数据列表,获取每台设备的数据 foreach (byte[] resultData in ResultDataList) { //创建RDJ实例对象 DXJ dxj = DXJConvertData(resultData, deviceTemplateList); //添加到列表中 DXJList.Add(dxj); } } //判断是否有出现读取错误的设备,有则处理 if (ErrorIPS.Count > 0) { //遍历错误对象列表 for (int i = 0; i < ErrorIPS.Count; i++) { DeviceInfo deviceInfo = BL_DeviceInfo.GetDeviceInfoByIP(ErrorIPS[i]); DXJ errorDXJ = new DXJ(); errorDXJ.SBBH = deviceInfo.DeviceID; errorDXJ.SBYXZT = (short)9; errorDXJ.SBZDXX = "网络故障"; //添加到RDJ对象列表的后面 DXJList.Add(errorDXJ); } } //生成设备状态对象添加到数据库 foreach (DXJ dxj in DXJList) { //创建设备状态对象 DeviceState ds = GetDeviceState(dxj, errorStringDic); //调用胡老师的状态判断函数 if (isHour) { BL_DeviceState.AddDeviceState(ds, DateTime.Now); } else { BL_DeviceState.AddDeviceState(ds); } } return(DXJList); }
/// <summary> /// 返回设备状态对象 /// </summary> /// <param name="dxj">设备对象</param> /// <param name="errorStringDic">错误解析表</param> /// <returns></returns> private static DeviceState GetDeviceState(DXJ dxj, Dictionary <int, string> errorStringDic) { DeviceState ds = new DeviceState(); ds.DAQTime = DateTime.Now; ds.DeviceID = dxj.SBBH; ds.VatID = 0; ds.OperatingState = dxj.SBYXZT; ds.FaultMessage = GetFaultMessage(dxj.SBZDXX, errorStringDic); dxj.SBZDXX = ds.FaultMessage; return(ds); }
/// <summary> /// 将DXJ的源数据转换 /// </summary> /// <param name="resultData">源数据</param> /// <param name="project">项目名称</param> /// <param name="startAddress">数据起始地址</param> /// <param name="length">数据长度</param> /// <returns></returns> private static DXJ DXJConvertData(byte[] resultData, List <DeviceTemplate> deviceTemplateList) { DXJ dxj = new DXJ(); foreach (DeviceTemplate deviceTamplate in deviceTemplateList) { switch (deviceTamplate.Project) { case "设备型号": dxj.SBXH = (short)ReadData.GetData(resultData, deviceTamplate.Address, deviceTamplate.Length); break; case "设备规格": dxj.SBGG = (short)ReadData.GetData(resultData, deviceTamplate.Address, deviceTamplate.Length); break; case "设备编号": dxj.SBBH = (short)ReadData.GetData(resultData, deviceTamplate.Address, deviceTamplate.Length); break; case "备用": dxj.BY = (short)ReadData.GetData(resultData, deviceTamplate.Address, deviceTamplate.Length); break; case "设备运行状态": dxj.SBYXZT = (short)ReadData.GetData(resultData, deviceTamplate.Address, deviceTamplate.Length); break; case "设备诊断信息": dxj.SBZDXX = ReadData.GetStringData(resultData, deviceTamplate.Address, deviceTamplate.Length - 108, 2); dxj.PLCZT = ReadData.GetIntArrayData(resultData, deviceTamplate.Address + 10, deviceTamplate.Length - 20, 1); break; case "反转马达速度": dxj.FZMDSD = (short)ReadData.GetData(resultData, deviceTamplate.Address, deviceTamplate.Length); break; case "第一级速度": dxj.SD1 = (short)ReadData.GetData(resultData, deviceTamplate.Address, deviceTamplate.Length); break; case "第二级速度": dxj.SD2 = (short)ReadData.GetData(resultData, deviceTamplate.Address, deviceTamplate.Length); break; case "第三级速度": dxj.SD3 = (short)ReadData.GetData(resultData, deviceTamplate.Address, deviceTamplate.Length); break; case "第四级速度": dxj.SD4 = (short)ReadData.GetData(resultData, deviceTamplate.Address, deviceTamplate.Length); break; case "第五级速度": dxj.SD5 = (short)ReadData.GetData(resultData, deviceTamplate.Address, deviceTamplate.Length); break; case "循环马达速度": dxj.XHMDSD = (short)ReadData.GetData(resultData, deviceTamplate.Address, deviceTamplate.Length); break; case "出口马达速度": dxj.CKMDSD = (short)ReadData.GetData(resultData, deviceTamplate.Address, deviceTamplate.Length); break; case "鲜风马达速度": dxj.XFMDSD = (short)ReadData.GetData(resultData, deviceTamplate.Address, deviceTamplate.Length); break; case "上左温度": dxj.ULWD = (short)ReadData.GetData(resultData, deviceTamplate.Address, deviceTamplate.Length); break; case "上中温度": dxj.UMWD = (short)ReadData.GetData(resultData, deviceTamplate.Address, deviceTamplate.Length); break; case "上右温度": dxj.URWD = (short)ReadData.GetData(resultData, deviceTamplate.Address, deviceTamplate.Length); break; case "下左温度": dxj.DLWD = (short)ReadData.GetData(resultData, deviceTamplate.Address, deviceTamplate.Length); break; case "下中温度": dxj.DMWD = (short)ReadData.GetData(resultData, deviceTamplate.Address, deviceTamplate.Length); break; case "下右温度": dxj.DRWD = (short)ReadData.GetData(resultData, deviceTamplate.Address, deviceTamplate.Length); break; case "炉内温度1": dxj.LNWD1 = (short)ReadData.GetData(resultData, deviceTamplate.Address, deviceTamplate.Length); break; case "炉内温度2": dxj.LNWD2 = (short)ReadData.GetData(resultData, deviceTamplate.Address, deviceTamplate.Length); break; case "加热部温度": dxj.JRBWD = (short)ReadData.GetData(resultData, deviceTamplate.Address, deviceTamplate.Length); break; case "出口温度": dxj.CKWD = (short)ReadData.GetData(resultData, deviceTamplate.Address, deviceTamplate.Length); break; case "交换部温度": dxj.JHBWD = (short)ReadData.GetData(resultData, deviceTamplate.Address, deviceTamplate.Length); break; case "加热功率": dxj.JRGL = (short)ReadData.GetData(resultData, deviceTamplate.Address, deviceTamplate.Length); break; default: break; } } return(dxj); }