Beispiel #1
0
        /// <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);
        }
Beispiel #2
0
        /// <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);
        }
Beispiel #3
0
        /// <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);
        }
Beispiel #4
0
        /// <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);
        }
Beispiel #5
0
        /// <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);
        }