/// <summary> /// 从下位机读取参数值到 tpParam[] 中; /// 如发生错误,则立即停止并触发参数读取事件(附带错误信息) /// 如读取成功,则触发参数读取事件(附带 NoError 信息) /// </summary> public void UpdateParamFromDevice() { TempProtocol.Err_t err = TempProtocol.Err_t.NoError; lock (tpLocker) { for (int i = 0; i < 7; i++) { // 从下位机读取参数值 float val = 0.0f; err = tpDevice.ReadData((TempProtocol.Cmd_t)i, out val); // 调试信息 Debug.WriteLineIf(err == TempProtocol.Err_t.NoError, "温控设备参数读取成功! " + tpParamNames[i] + ": " + tpParam[i].ToString()); Debug.WriteLineIf(err != TempProtocol.Err_t.NoError, "温控设备参数读取失败! " + tpParamNames[i] + ": " + err.ToString()); // 如发生错误,则立即结束 for 循环 if (err != TempProtocol.Err_t.NoError) { break; } // 如果没有发生错误,则在上位机更新数据 tpParam[i] = val; } } // 说明: // 参数更新函数主要面向 FormSetting 窗口,分别设置主槽 / 辅槽的控温参数 // 所以事件 / 错误直接在 TempDevice 中处理,并不会返回到 Devices 中 // 结果处理 - 事件 ParamUpdatedFromDeviceEvent(err); }
/// <summary> /// 从温控设备硬件读取温度显示值,发生错误则返回上一个状态时的温度值; /// 温度值取小数点后 digits 位 /// 错误信息处理 - 返回错误标志 /// </summary> /// <param name="val">温度显示值</param> /// <param name="digits">取小数点后位数</param> /// <returns>返回错误标志</returns> public TempProtocol.Err_t GetTemperatureShow(out float val, int digits) { TempProtocol.Err_t err = TempProtocol.Err_t.NoError; lock (tpLocker) { // 从下位机读取温度显示值 err = tpDevice.ReadData(TempProtocol.Cmd_t.TempShow, out val); try { val = (float)Math.Round(val, digits); } catch { } if (err == TempProtocol.Err_t.NoError) { // 未发生错误,则加入到 temperatures 列表中 AddTemperature(val); } else { // 如发生错误,则不向列表中添加新的数据,返回上一时刻的温度显示 if (temperatures.Count > 0) { val = temperatures.Last(); } else { val = 0.0f; } } } // 返回错误标志 return(err); }
/// <summary> /// 温控设备自检 /// </summary> /// <returns></returns> public TempProtocol.Err_t SelfCheck() { float val = 0.0f; TempProtocol.Err_t err = TempProtocol.Err_t.NoError; lock (tpLocker) { // 读取温度显示值 err = tpDevice.ReadData(TempProtocol.Cmd_t.TempShow, out val); if (err != TempProtocol.Err_t.NoError) { return(err); } AddTemperature(val); Thread.Sleep(100); // 读取功率显示值 err = tpDevice.ReadData(TempProtocol.Cmd_t.PowerShow, out val); if (err != TempProtocol.Err_t.NoError) { return(err); } tpPowerShow = val; Thread.Sleep(100); // 读取温控设备其他参数 for (int i = 0; i < 7; i++) { err = tpDevice.ReadData((TempProtocol.Cmd_t)i, out val); if (err != TempProtocol.Err_t.NoError) { break; } tpParam[i] = val; // wghou // 时间间隔可以再调整 Thread.Sleep(100); } } // 从温控设备读取全部参数值,返回错误标志 return(err); }
/// <summary> /// 将参数更新入下位机,返回错误状态,触发温度参数更新事件; /// /// </summary> /// <returns></returns> internal TempProtocol.Err_t UpdateParamToDeviceReturnErr() { TempProtocol.Err_t err = TempProtocol.Err_t.NoError; // 更新硬件设备参数 lock (tpLocker) { for (int i = 0; i < 7; i++) { // 如果参数未改变,则跳过 if (Math.Abs(tpParam[i] - tpParamToSet[i]) < 10e-5) { continue; } // 向设备写入参数 err = tpDevice.SendData((TempProtocol.Cmd_t)i, tpParamToSet[i]); // 调试信息 Debug.WriteLineIf(err == TempProtocol.Err_t.NoError, "温控设备参数设置成功! " + tpParamNames[i] + ": " + tpParam[i].ToString()); Debug.WriteLineIf(err != TempProtocol.Err_t.NoError, "温控设备参数设置失败! " + tpParamNames[i] + ": " + err.ToString()); // 如发生错误,则结束 for 循环 if (err != TempProtocol.Err_t.NoError) { break; } // 将更新后的参数值写入 tpParam[] 中 tpParam[i] = tpParamToSet[i]; } } // 说明: // 参数更新函数主要面向 FormSetting 窗口,分别设置主槽 / 辅槽的控温参数 // 所以事件 / 错误直接在 TempDevice 中处理,并不会返回到 Devices 中 // 结果处理 - 事件 ParamUpdatedToDeviceEvent(err); return(err); }
/// <summary> /// 从温控设备硬件读取功率显示值,如发生错误,则返回上一状态时的功率值; /// 错误信息处理 - 返回错误标志 /// </summary> /// <param name="val">功率显示值</param> /// <returns>返回错误标志</returns> public TempProtocol.Err_t GetPowerShow(out float val) { TempProtocol.Err_t err = TempProtocol.Err_t.NoError; lock (tpLocker) { // 从下位机读取功率显示值 err = tpDevice.ReadData(TempProtocol.Cmd_t.PowerShow, out val); if (err == TempProtocol.Err_t.NoError) { // 未发生错误 tpPowerShow = val; } else { // 如发生错误,则返回上一个时刻的功率显示值 val = tpPowerShow; } } // 返回错误标志 return(err); }