/// <summary> /// 复制 /// </summary> /// <returns></returns> public CDataVal Clone() { CDataVal module = new CDataVal(); module.ACV = this.ACV; module.ACI = this.ACI; module.DCV = this.DCV; module.DCI = this.DCI; module.Status = this.Status; return(module); }
/// <summary> /// 读取模块信息 /// </summary> /// <param name="curAddr"></param> /// <param name="module"></param> /// <param name="er"></param> /// <returns></returns> public bool ReadModuleData(int curAddr, out CDataVal module, out string er) { module = new CDataVal(); er = string.Empty; try { string[] ErrCode = new string[] { "异常报警", "通信存储或逻辑", "温度报警", "输入欠压", "输出过流", "输出过压", "模块无输出", "模块忙碌", "未知错误", "其他错误", "风扇警告", "功率偏低", "制造商信息错误", "输入电流错误", "输出电流错误", "输出错误" }; string status = string.Empty; string rData = string.Empty; if (!Read(curAddr, 0x800D, 5, out rData, out er)) { return(false); } int rLen = rData.Length / 4; string[] rDataList = new string[rLen]; for (int i = 0; i < rLen; i++) { rDataList[rLen - i - 1] = rData.Substring(i * 4, 4); } //状态 if (rDataList[0] == "FFFF") { module.Status = "I2C通信异常"; return(true); } int rVal = System.Convert.ToInt32(rDataList[0], 16); for (int i = 0; i < 16; i++) { int bit = (rVal & (1 << i)); if (bit != 0) { module.Status += ErrCode[i] + ";"; } } if (module.Status == string.Empty) { module.Status = "正常"; } //输入电压 if (rDataList[1] == "FFFF") { module.ACV = 0; } else { rVal = System.Convert.ToInt32(rDataList[1], 16); module.ACV = calLinear11(rVal); } //输入电流 if (rDataList[1] == "FFFF") { module.ACI = 0; } else { rVal = System.Convert.ToInt32(rDataList[2], 16); module.ACI = calLinear11(rVal); } //输出电压 if (rDataList[1] == "FFFF") { module.DCV = 0; } else { rVal = System.Convert.ToInt32(rDataList[3], 16); module.DCV = calLinear11(rVal); } //输出电流 if (rDataList[1] == "FFFF") { module.DCI = 0; } else { rVal = System.Convert.ToInt32(rDataList[4], 16); module.DCI = calLinear11(rVal); } return(true); } catch (Exception ex) { er = ex.ToString(); return(false); } }