예제 #1
0
        /// <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);
        }
예제 #2
0
        /// <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));
        }
예제 #3
0
        /// <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);
        }