/// <summary> /// 把染色机对象转换成设备状态 /// </summary> /// <param name="rsj">染色机对象</param> /// <param name="num">缸号</param> /// <param name="SBYXZT">设备运行状态</param> /// <param name="errorString">错误词典</param> /// <returns></returns> private static List <DeviceState> GetDeviceState(RSJ rsj, Dictionary <int, string> errorString) { List <DeviceState> dsList = new List <DeviceState>(); foreach (RG rg in rsj.RGS) { DeviceState ds = new DeviceState(); ds.DAQTime = DateTime.Now; ds.DeviceID = rsj.SBBH; ds.VatID = (short)rg.RGBH; if (rg.SBYXZT == 9) { rsj.SBZDXX = "网络错误"; //ds.OperatorID = (short)0; } else { ds.OperatorID = (short)rsj.CZRBH; ds.OperatingState = rg.SBYXZT; ds.FaultMessage = GetFaultMessage(rsj.SBZDXX, errorString, rg.RGBH); rsj.SBZDXX = ds.FaultMessage; dsList.Add(ds); } } return(dsList); }
/// <summary> /// 根据控制字改变设备运行状态 /// </summary> /// <param name="rsj"></param> /// <returns></returns> private static RSJ SetKZZ(RSJ rsj) { foreach (RG rg in rsj.RGS) { if (rg.KZZ1[9] == '1') { rg.SBYXZT = 11; } if (rg.KZZ2[11] == '1') { rg.SBYXZT = 12; } else if (rg.KZZ2[12] == '1') { rg.SBYXZT = 13; } else if (rg.KZZ2[14] == '1') { rg.SBYXZT = 14; } else if (rg.KZZ2[15] == '1') { rg.SBYXZT = 15; } if (rg.KZZ3[5] == '1') { rg.SBYXZT = 16; } else if (rg.KZZ3[6] == '1') { rg.SBYXZT = 17; } else if (rg.KZZ3[7] == '1') { rg.SBYXZT = 18; } } return(rsj); }
/// <summary> /// 获取绕带机对象列表 /// </summary> /// <param name="deviceInfoList">设备基本信息列表</param> /// <param name="port">端口号</param> /// <param name="startAddress">读取数据的开始地址</param> /// <param name="numRegister">需要读取的寄存器数量</param> /// <param name="deviceTemplateList">RDJ数据模板</param> /// <param name="isHour">是否整点,把设备状态写入数据库,true表示写入,默认值为false</param> /// <returns></returns> public static List <RSJ> GetRSJList(List <DeviceInfo> deviceInfoList, int port, short startAddress, short numRegister, List <DeviceTemplate> deviceTemplateList, bool isHour = false) { //1.获取错误状态解析词典 Dictionary <int, string> errorStringDic = GetErrorStringDic(); //2.创建连接对象列表 List <ConnectData> ConnectDataList = GetConnetData(deviceInfoList, port, startAddress, numRegister); //3.错误ip列表 List <String> ErrorIPS; //4.获取设备源数据 List <byte[]> ResultDataList = Read(ConnectDataList, out ErrorIPS); //5.创建绕带机对象列表 List <RSJ> RSJList = new List <RSJ>(); //6.判断是否有数据,有则处理。 if (ResultDataList.Count > 0) { //循环遍历数据列表,获取每台设备的数据 foreach (byte[] resultData in ResultDataList) { //创建RDJ实例对象 RSJ rsj = RSJConvertData(resultData, deviceTemplateList); //根据控制字改变设备运行状态 rsj = SetKZZ(rsj); //添加到列表中 RSJList.Add(rsj); } } //7.判断是否有出现读取错误的设备,有则处理 if (ErrorIPS.Count > 0) { //遍历错误对象列表 for (int i = 0; i < ErrorIPS.Count; i++) { DeviceInfo deviceInfo = BL_DeviceInfo.GetDeviceInfoByIP(ErrorIPS[i]); RSJ errorRSJ = new RSJ(); errorRSJ.RGS = new List <RG>(); //如果染色机链接不上,则添加5个钢对象,全部设置为9网络无法链接 for (int n = 0; n < 5; n++) { RG r = new RG(); r.RGBH = (short)(n + 1); r.SBYXZT = (short)9; errorRSJ.RGS.Add(r); } errorRSJ.SBBH = deviceInfo.DeviceID; errorRSJ.SBZDXX = "网络故障"; //添加到RDJ对象列表的后面 RSJList.Add(errorRSJ); } } //8.将状态添加到数据库 foreach (RSJ rsj in RSJList) { List <DeviceState> errorList = GetDeviceState(rsj, errorStringDic); //调用胡老师的状态判断函数 foreach (DeviceState errords in errorList) { //如果为真,表明调用整点数据直接写到数据库 if (isHour) { BL_DeviceState.AddDeviceState(errords, DateTime.Now); } else { BL_DeviceState.AddDeviceState(errords); } } } return(RSJList); }
/// <summary> /// 将RSJ的源数据转换 /// </summary> /// <param name="resultData">源数据</param> /// <param name="project">项目名称</param> /// <param name="startAddress">数据起始地址</param> /// <param name="length">数据长度</param> /// <returns></returns> private static RSJ RSJConvertData(byte[] resultData, List <DeviceTemplate> deviceTemplateList) { RSJ rsj = new RSJ(); #region 初始化染缸对象 DeviceTemplate dvTemplate = BL_DeviceTemplate.GetDeviceTemplate(deviceTemplateList, "染缸数量"); int gangNum = rsj.RGSL = (short)ReadData.GetData(resultData, dvTemplate.Address, dvTemplate.Length); List <RG> listRG = new List <RG>(); for (int i = 0; i < gangNum; i++) { RG rg = new RG(); rg.RGBH = (short)(i + 1); listRG.Add(rg); } #endregion #region 染色机数据封装 foreach (DeviceTemplate deviceTamplate in deviceTemplateList) { switch (deviceTamplate.Project) { case "设备型号": rsj.SBXH = (short)ReadData.GetData(resultData, deviceTamplate.Address, deviceTamplate.Length); break; case "设备诊断信息": rsj.PLCZT = ReadData.GetIntArrayData(resultData, deviceTamplate.Address + 20, deviceTamplate.Length - 20, 1); break; case "设备规格": rsj.SBGG = (short)ReadData.GetData(resultData, deviceTamplate.Address, deviceTamplate.Length); break; case "设备编号": rsj.SBBH = (short)ReadData.GetData(resultData, deviceTamplate.Address, deviceTamplate.Length); break; case "染缸数量": rsj.RGSL = (short)ReadData.GetData(resultData, deviceTamplate.Address, deviceTamplate.Length); break; case "操作人编号": rsj.CZRBH = ReadData.GetData(resultData, deviceTamplate.Address, deviceTamplate.Length); break; #region //case "设备运行状态1": // rsj.RG[1].SBYXZT = (short)ReadData.GetData(resultData, deviceTamplate.Address, deviceTamplate.Length); // break; //case "设备运行状态2": // rsj.RG[2].SBYXZT = (short)ReadData.GetData(resultData, deviceTamplate.Address, deviceTamplate.Length); // break; //case "设备运行状态3": // rsj.RG[3].SBYXZT = (short)ReadData.GetData(resultData, deviceTamplate.Address, deviceTamplate.Length); // break; //case "设备运行状态4": // rsj.RG[4].SBYXZT = (short)ReadData.GetData(resultData, deviceTamplate.Address, deviceTamplate.Length); // break; //case "设备运行状态5": // rsj.RG[5].SBYXZT = (short)ReadData.GetData(resultData, deviceTamplate.Address, deviceTamplate.Length); // break; //case "运行时间1": // rsj.RG[1].YXSJ = (short)ReadData.GetData(resultData, deviceTamplate.Address, deviceTamplate.Length); // break; //case "运行时间2": // rsj.RG[2].YXSJ = (short)ReadData.GetData(resultData, deviceTamplate.Address, deviceTamplate.Length); // break; //case "运行时间3": // rsj.RG[3].YXSJ = (short)ReadData.GetData(resultData, deviceTamplate.Address, deviceTamplate.Length); // break; //case "运行时间4": // rsj.RG[4].YXSJ = (short)ReadData.GetData(resultData, deviceTamplate.Address, deviceTamplate.Length); // break; //case "运行时间5": // rsj.RG[5].YXSJ = (short)ReadData.GetData(resultData, deviceTamplate.Address, deviceTamplate.Length); // break; //case "工艺段号1": // rsj.RG[1].GYDH = (short)ReadData.GetData(resultData, deviceTamplate.Address, deviceTamplate.Length); // break; //case "工艺段号2": // rsj.RG[2].GYDH = (short)ReadData.GetData(resultData, deviceTamplate.Address, deviceTamplate.Length); // break; //case "工艺段号3": // rsj.RG[3].GYDH = (short)ReadData.GetData(resultData, deviceTamplate.Address, deviceTamplate.Length); // break; //case "工艺段号4": // rsj.RG[4].GYDH = (short)ReadData.GetData(resultData, deviceTamplate.Address, deviceTamplate.Length); // break; //case "工艺段号5": // rsj.RG[5].GYDH = (short)ReadData.GetData(resultData, deviceTamplate.Address, deviceTamplate.Length); // break; //case "工艺步号1": // rsj.RG[1].GYBH = (short)ReadData.GetData(resultData, deviceTamplate.Address, deviceTamplate.Length); // break; //case "工艺步号2": // rsj.RG[2].GYBH = (short)ReadData.GetData(resultData, deviceTamplate.Address, deviceTamplate.Length); // break; //case "工艺步号3": // rsj.RG[3].GYBH = (short)ReadData.GetData(resultData, deviceTamplate.Address, deviceTamplate.Length); // break; //case "工艺步号4": // rsj.RG[4].GYBH = (short)ReadData.GetData(resultData, deviceTamplate.Address, deviceTamplate.Length); // break; //case "工艺步号5": // rsj.RG[5].GYBH = (short)ReadData.GetData(resultData, deviceTamplate.Address, deviceTamplate.Length); // break; //case "工艺名称1": // rsj.RG[1].GYMC = (short)ReadData.GetData(resultData, deviceTamplate.Address, deviceTamplate.Length); // break; //case "工艺名称2": // rsj.RG[2].GYMC = (short)ReadData.GetData(resultData, deviceTamplate.Address, deviceTamplate.Length); // break; //case "工艺名称3": // rsj.RG[3].GYMC = (short)ReadData.GetData(resultData, deviceTamplate.Address, deviceTamplate.Length); // break; //case "工艺名称4": // rsj.RG[4].GYMC = (short)ReadData.GetData(resultData, deviceTamplate.Address, deviceTamplate.Length); // break; //case "工艺名称5": // rsj.RG[5].GYMC = (short)ReadData.GetData(resultData, deviceTamplate.Address, deviceTamplate.Length); // break; //case "泵速度1": // rsj.RG[1].BSD = (short)ReadData.GetData(resultData, deviceTamplate.Address, deviceTamplate.Length); // break; //case "泵速度2": // rsj.RG[2].BSD = (short)ReadData.GetData(resultData, deviceTamplate.Address, deviceTamplate.Length); // break; //case "泵速度3": // rsj.RG[3].BSD = (short)ReadData.GetData(resultData, deviceTamplate.Address, deviceTamplate.Length); // break; //case "泵速度4": // rsj.RG[4].BSD = (short)ReadData.GetData(resultData, deviceTamplate.Address, deviceTamplate.Length); // break; //case "泵速度5": // rsj.RG[5].BSD = (short)ReadData.GetData(resultData, deviceTamplate.Address, deviceTamplate.Length); // break; //case "温度1": // rsj.RG[1].WD = (short)ReadData.GetData(resultData, deviceTamplate.Address, deviceTamplate.Length); // break; //case "温度2": // rsj.RG[2].WD = (short)ReadData.GetData(resultData, deviceTamplate.Address, deviceTamplate.Length); // break; //case "温度3": // rsj.RG[3].WD = (short)ReadData.GetData(resultData, deviceTamplate.Address, deviceTamplate.Length); // break; //case "温度4": // rsj.RG[4].WD = (short)ReadData.GetData(resultData, deviceTamplate.Address, deviceTamplate.Length); // break; //case "温度5": // rsj.RG[5].WD = (short)ReadData.GetData(resultData, deviceTamplate.Address, deviceTamplate.Length); // break; //case "压力1": // rsj.RG[1].YL = (short)ReadData.GetData(resultData, deviceTamplate.Address, deviceTamplate.Length); // break; //case "压力2": // rsj.RG[2].YL = (short)ReadData.GetData(resultData, deviceTamplate.Address, deviceTamplate.Length); // break; //case "压力3": // rsj.RG[3].YL = (short)ReadData.GetData(resultData, deviceTamplate.Address, deviceTamplate.Length); // break; //case "压力4": // rsj.RG[4].YL = (short)ReadData.GetData(resultData, deviceTamplate.Address, deviceTamplate.Length); // break; //case "压力5": // rsj.RG[5].YL = (short)ReadData.GetData(resultData, deviceTamplate.Address, deviceTamplate.Length); // break; //case "控制字11": // rsj.RG[1].KZZ1 = ReadData.GetStringData(resultData, deviceTamplate.Address, deviceTamplate.Length, 2); // break; //case "控制字12": // rsj.RG[2].KZZ1 = ReadData.GetStringData(resultData, deviceTamplate.Address, deviceTamplate.Length, 2); // break; //case "控制字13": // rsj.RG[3].KZZ1 = ReadData.GetStringData(resultData, deviceTamplate.Address, deviceTamplate.Length, 2); // break; //case "控制字14": // rsj.RG[4].KZZ1 = ReadData.GetStringData(resultData, deviceTamplate.Address, deviceTamplate.Length, 2); // break; //case "控制字15": // rsj.RG[5].KZZ1 = ReadData.GetStringData(resultData, deviceTamplate.Address, deviceTamplate.Length, 2); // break; //case "控制字21": // rsj.RG[1].KZZ2 = ReadData.GetStringData(resultData, deviceTamplate.Address, deviceTamplate.Length, 2); // break; //case "控制字22": // rsj.RG[2].KZZ2 = ReadData.GetStringData(resultData, deviceTamplate.Address, deviceTamplate.Length, 2); // break; //case "控制字23": // rsj.RG[3].KZZ2 = ReadData.GetStringData(resultData, deviceTamplate.Address, deviceTamplate.Length, 2); // break; //case "控制字24": // rsj.RG[4].KZZ2 = ReadData.GetStringData(resultData, deviceTamplate.Address, deviceTamplate.Length, 2); // break; //case "控制字25": // rsj.RG[5].KZZ2 = ReadData.GetStringData(resultData, deviceTamplate.Address, deviceTamplate.Length, 2); // break; //case "控制字31": // rsj.RG[1].KZZ3 = ReadData.GetStringData(resultData, deviceTamplate.Address, deviceTamplate.Length, 2); // break; //case "控制字32": // rsj.RG[2].KZZ3 = ReadData.GetStringData(resultData, deviceTamplate.Address, deviceTamplate.Length, 2); // break; //case "控制字33": // rsj.RG[3].KZZ3 = ReadData.GetStringData(resultData, deviceTamplate.Address, deviceTamplate.Length, 2); // break; //case "控制字34": // rsj.RG[4].KZZ3 = ReadData.GetStringData(resultData, deviceTamplate.Address, deviceTamplate.Length, 2); // break; //case "控制字35": // rsj.RG[5].KZZ3 = ReadData.GetStringData(resultData, deviceTamplate.Address, deviceTamplate.Length, 2); // break; //case "卷筒编号1": // rsj.RG[1].JTBH = (short)ReadData.GetData(resultData, deviceTamplate.Address, deviceTamplate.Length); // break; //case "卷筒编号2": // rsj.RG[2].JTBH = (short)ReadData.GetData(resultData, deviceTamplate.Address, deviceTamplate.Length); // break; //case "卷筒编号3": // rsj.RG[3].JTBH = (short)ReadData.GetData(resultData, deviceTamplate.Address, deviceTamplate.Length); // break; //case "卷筒编号4": // rsj.RG[4].JTBH = (short)ReadData.GetData(resultData, deviceTamplate.Address, deviceTamplate.Length); // break; //case "卷筒编号5": // rsj.RG[5].JTBH = (short)ReadData.GetData(resultData, deviceTamplate.Address, deviceTamplate.Length); // break; #endregion default: break; } } #endregion #region 染缸数据封装 DeviceTemplate dvtRGYXZT = BL_DeviceTemplate.GetDeviceTemplate(deviceTemplateList, "设备运行状态1"); DeviceTemplate dvtRGZDXX = BL_DeviceTemplate.GetDeviceTemplate(deviceTemplateList, "设备诊断信息"); //"设备诊断信息" DeviceTemplate dvtRGYXSJ = BL_DeviceTemplate.GetDeviceTemplate(deviceTemplateList, "运行时间1"); DeviceTemplate dvtRGGYDH = BL_DeviceTemplate.GetDeviceTemplate(deviceTemplateList, "工艺段号1"); DeviceTemplate dvtRGGYBH = BL_DeviceTemplate.GetDeviceTemplate(deviceTemplateList, "工艺步号1"); DeviceTemplate dvtRGGYMC = BL_DeviceTemplate.GetDeviceTemplate(deviceTemplateList, "工艺名称1"); DeviceTemplate dvtRGBSD = BL_DeviceTemplate.GetDeviceTemplate(deviceTemplateList, "泵速度1"); DeviceTemplate dvtRGWD = BL_DeviceTemplate.GetDeviceTemplate(deviceTemplateList, "温度1"); DeviceTemplate dvtRGYL = BL_DeviceTemplate.GetDeviceTemplate(deviceTemplateList, "压力1"); DeviceTemplate dvtRGKZZ1 = BL_DeviceTemplate.GetDeviceTemplate(deviceTemplateList, "控制字11"); DeviceTemplate dvtRGKZZ2 = BL_DeviceTemplate.GetDeviceTemplate(deviceTemplateList, "控制字21"); DeviceTemplate dvtRGKZZ3 = BL_DeviceTemplate.GetDeviceTemplate(deviceTemplateList, "控制字31"); DeviceTemplate dvtRGJTBH = BL_DeviceTemplate.GetDeviceTemplate(deviceTemplateList, "卷筒编号1"); for (int i = 0; i < listRG.Count; i++) { listRG[i].SBYXZT = (short)ReadData.GetData(resultData, dvtRGYXZT.Address, dvtRGYXZT.Length + i * 2); listRG[i].SBZDXX = ReadData.GetStringData(resultData, dvtRGZDXX.Address + i * 2, 4, 2); listRG[i].YXSJ = (short)ReadData.GetData(resultData, dvtRGYXSJ.Address, dvtRGYXSJ.Length + i * 2); //染色机诊断信息 listRG[i].GYDH = (short)ReadData.GetData(resultData, dvtRGGYDH.Address, dvtRGGYDH.Length + i * 2); listRG[i].GYBH = (short)ReadData.GetData(resultData, dvtRGGYBH.Address, dvtRGGYBH.Length + i * 2); listRG[i].GYMC = (short)ReadData.GetData(resultData, dvtRGGYMC.Address, dvtRGGYMC.Length + i * 4); listRG[i].BSD = (short)ReadData.GetData(resultData, dvtRGBSD.Address, dvtRGBSD.Length + i * 2); listRG[i].WD = (short)ReadData.GetData(resultData, dvtRGWD.Address, dvtRGWD.Length + i * 2); listRG[i].YL = (short)ReadData.GetData(resultData, dvtRGYL.Address, dvtRGYL.Length + i * 2); listRG[i].KZZ1 = ReadData.GetStringData(resultData, dvtRGKZZ1.Address + i * 2, 2, 2); listRG[i].KZZ2 = ReadData.GetStringData(resultData, dvtRGKZZ2.Address + i * 2, 2, 2); listRG[i].KZZ3 = ReadData.GetStringData(resultData, dvtRGKZZ3.Address + i * 2, 2, 2); listRG[i].JTBH = ReadData.GetData(resultData, dvtRGJTBH.Address + i * 2, 4); } rsj.RGS = listRG; #endregion return(rsj); }