/// <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); }
/// <summary> /// 向温控设备写入数据,返回错误代码 /// </summary> /// <param name="cmd">参数指令符</param> /// <param name="value">参数值</param> /// <returns></returns> internal Err_t SendData(Cmd_t cmd, float val) { // 不支持这四条指令 Debug.Assert(cmd != Cmd_t.TempShow); Debug.Assert(cmd != Cmd_t.PowerShow); // 设置 温度设定值 / 温度调整值 / 超前调整值 / 模糊系数 / 比例系数 / 积分系数 / 功率系数 if (cmdRW[(int)cmd] != "w") { return(Err_t.CodeError); } // 创建指令 string command = ConstructCommand(cmd, val, true); // 用于存放返回的数据 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) { // 串口发生错误! Debug.WriteLine("温控设备写入参数 " + cmd.ToString() + " 异常: " + ex.Message); // 关闭串口 try { sPort.Close(); } catch { } return(Err_t.ComError); } // 返回错误状态 return(IsError(data)); }
/// <summary> /// Construct command using given name and value /// </summary> /// <param name="commandName">Name of command</param> /// <param name="value">Value of command</param> /// <param name="W_R">True for write, false for read</param> /// <returns></returns> private string ConstructCommand(Cmd_t cmdName, float val, bool W_R) { string command = ""; if (W_R) { command += cmdHead_W; command += cmdWords[(int)cmdName]; command += val.ToString(cmdFormats[(int)cmdName]); command += cmdFinish; command += BCCCal(command, false); command += cmdEnd; } else { command += cmdHead_R; command += cmdWords[(int)cmdName]; command += cmdFinish; command += BCCCal(command, false); command += cmdEnd; } return(command); }