/// <summary> /// Determine i there is any error in communication /// </summary> /// <returns>Is Error?</returns> private Err_t IsError(string cmd) { Err_t err = Err_t.NoError; if (cmd[3] == errorFlag) { err = (Err_t)(Array.IndexOf(errorWords, cmd[4].ToString()) + 1); } return(err); }
/// <summary> /// 从温控设备读取数据,返回错误代码 /// </summary> /// <param name="cmd">参数指令符</param> /// <param name="value">参数值</param> /// <returns></returns> internal Err_t ReadData(Cmd_t cmd, out float val) { // 读取 温度设定值 / 温度调整值 / 超前调整值 / 模糊系数 / 比例系数 / 积分系数 / 功率系数 / 温度显示值 / 功率显示值 // 创建指令 string command = ConstructCommand(cmd, 0.0f, false); // 用于存放返回的数据 string data = string.Empty; try { if (!sPort.IsOpen) { this.sPort.Open(); } // 写入数据 this.sPort.Write(command + "\r\n"); // 读取返回数据 Thread.Sleep(intervalOfWR); data = this.sPort.ReadTo(cmdFinish); //Improve: Add BCC checker sPort.DiscardInBuffer(); sPort.Close(); } catch (Exception ex) { val = 0.0f; Debug.WriteLine("温控设备读取参数 " + cmd.ToString() + " 异常: " + ex.Message); // 关闭串口 try { sPort.Close(); } catch { } return(Err_t.ComError); } // 检查错误并提取参数值 Err_t err = IsError(data); if (err != Err_t.NoError) { // 发生错误 val = 0.0f; } else { // 未发生错误 // 如果格式转化错误,则返回 ComErr if (!float.TryParse(data.Substring(5), out val)) { err = Err_t.ComError; } } return(err); }