123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211 |
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Threading;
- using System.Text;
- using System.Threading.Tasks;
- using System.Diagnostics;
- namespace Uestc.Auto6.Dso.Hardware.Driver
- {
- public class SysMonitor
- {
- internal static SysMonitor Default = new SysMonitor();
- private static List<double> _AnalogChannelTemperatures = new List<double>() { 40.0,-40.0};
- internal List<double> AnalogChannelTemperatures
- {
- get { return _AnalogChannelTemperatures; }
- }
- //Stopwatch _Stopwatch=new Stopwatch();
- internal void ReadAnalogChannelTemperatures()
- {
- ////test code
- //if (!_Stopwatch.IsRunning)
- // _Stopwatch.Start();
- //if (_Stopwatch.ElapsedMilliseconds>5000)
- //{
- // _Stopwatch.Restart();
- // _AnalogChannelTemperatures[0] = _AnalogChannelTemperatures[0] * 1.1;
- // _AnalogChannelTemperatures[1] = _AnalogChannelTemperatures[1] * 1.1;
- //}
- //return;
- ////end test code
- #region 非8G通道
- UInt32 data_H = HdIO.ReadReg(PcieBdReg.R.AnalogChCtrl_CH_temp_H);
- UInt32 data_L = HdIO.ReadReg(PcieBdReg.R.AnalogChCtrl_CH_temp_L);
- UInt32 Temperatures = (data_H << 16) | (data_L);
- if ((Temperatures & 0xff0000ff) == 0x550000aa)
- {
- Temperatures = (Temperatures >> 8) & 0xffff;
- int tmp = ComplementConvert(Temperatures);
- _AnalogChannelTemperatures[0] = tmp * 1.0 / 10;//单片机有误
- }
- #endregion
- #region 8G通道
- data_H = HdIO.ReadReg(PcieBdReg.R.AnalogChCtrl_CH_temp2_H);
- data_L = HdIO.ReadReg(PcieBdReg.R.AnalogChCtrl_CH_temp2_L);
- Temperatures = (data_H << 16) | (data_L);
- if ((Temperatures & 0xff0000ff) == 0x550000aa)
- {
- int tmp = ComplementConvert(Temperatures);
- _AnalogChannelTemperatures[1] = tmp * 1.0 / 10;//单片机有误
- }
- #endregion
- HdIO.WriteReg(PcieBdReg.W.AnalogChCtrl_ch_temp_setting, 1);
- HdIO.WriteReg(PcieBdReg.W.AnalogChCtrl_ch_temp_setting, 0);
- }
- internal string ReadAndGetAnalogChannelTemperatures(int whichType)
- {
- ReadAnalogChannelTemperatures();
- return whichType switch
- {
- 0 => _AnalogChannelTemperatures[0].ToString(),
- 1 => _AnalogChannelTemperatures[1].ToString(),
- _ => "0.0"
- };
- }
- private int ComplementConvert(UInt32 data)
- {
- data &= 0x7ff;
- int mark = 1;
- if ((data & 0x400) != 0)
- {
- mark = -1;
- data &= 0x3ff;
- data = ~data;
- data &= 0x3ff;
- data = +1;
- }
- //补码运算
- int temprature = (int)data;
- temprature *= mark;
- return temprature;
- }
- internal string Read()
- {
- StringBuilder stringBuilder = new StringBuilder();
- #region Pcie board
- string boardName = "PcieBoard:";
- HdIO.WriteReg(PcieBdReg.W.SysMon_Reset, 0);
- HdIO.WriteReg(PcieBdReg.W.SysMon_Reset, 1);
- Thread.Sleep(5);
- UInt32 data = 0;
- data = HdIO.ReadReg(PcieBdReg.R.SysMon_ReadData);
- stringBuilder.AppendLine($"{boardName}SysMon_ReadData={((uint)data).ToString()}");
- ReadAnalogChannelTemperatures();
- stringBuilder.AppendLine($"{boardName}PhyChannelTemperatures={AnalogChannelTemperatures[0].ToString()}");
- stringBuilder.AppendLine($"{boardName}PhyChannelTemperatures_8G={AnalogChannelTemperatures[1].ToString()}");
- HdIO.WriteReg(PcieBdReg.W.SysMon_Reset, 0);
- #endregion
- stringBuilder.AppendLine("======================================");
- #region S6Board
- #endregion
- stringBuilder.AppendLine("======================================");
- #region ProcessBoard
- boardName = "ProcBoard:";
- HdIO.WriteReg(ProcBdReg.W.SysMon_pro_sysmon_rst, 0);
- //HdIO.WriteReg(ProcBdReg.W.SysMon_pro_sysmon_rst, 1);
- Thread.Sleep(5);
- data = HdIO.ReadReg(ProcBdReg.R.SysMon_pro_fpga_temp);
- data &= 0xfff;
- double temprature = 0.0;
- temprature = (int)data;
- temprature = (temprature * 503.975) / 4096 - 273.15;
- stringBuilder.AppendLine($"{boardName}SysMon_pro_fpga_temp={temprature.ToString()}℃");
- data = HdIO.ReadReg(ProcBdReg.R.SysMon_pro_fpga_vccaux);
- data &= 0xfff;
- temprature = (int)data;
- temprature = temprature / 4096 * 3;
- stringBuilder.AppendLine($"{boardName}SysMon_pro_fpga_vccaux={temprature.ToString()}");
- data = HdIO.ReadReg(ProcBdReg.R.SysMon_pro_fpga_vccbram);
- data &= 0xfff;
- temprature = (int)data;
- temprature = temprature / 4096 * 3;
- stringBuilder.AppendLine($"{boardName}SysMon_pro_fpga_vccbram={temprature.ToString()}");
- data = HdIO.ReadReg(ProcBdReg.R.SysMon_pro_fpga_vccint);
- data &= 0xfff;
- temprature = (int)data;
- temprature = temprature / 4096 * 3;
- stringBuilder.AppendLine($"{boardName}SysMon_pro_fpga_vccint={temprature.ToString()}");
- //HdIO.WriteReg(ProcBdReg.W.SysMon_pro_sysmon_rst, 0);
- #endregion
- stringBuilder.AppendLine("======================================");
- #region AcqBoard
- for (int acqBdIndex = 0; acqBdIndex < Hd.currProduct!.AcqBd!.ExistsDefines.Count; acqBdIndex++)
- {
- if (Hd.currProduct!.AcqBd!.ExistsDefines[acqBdIndex])
- {
- AcqBdNo acqBdNo = (AcqBdNo)acqBdIndex;
- boardName = "AcqBoard_" + acqBdNo.ToString()+":";
- data = Hd.currProduct!.AcqBd.ReadReg(AcqBdReg.R.SysMon_acq_fpga_temp, acqBdNo);
- data &= 0x3ff;
- temprature = (int)data;
- temprature = (temprature * 501.3743) / 1024 - 273.6777;
- stringBuilder.AppendLine($"{boardName}SysMon_acq_fpga_temp={temprature.ToString()}℃");
- data = Hd.currProduct!.AcqBd.ReadReg(AcqBdReg.R.SysMon_acq_fpga_vccaux, acqBdNo);
- data &= 0x3ff;
- temprature = (int)data;
- temprature = temprature / 1024 * 3;
- stringBuilder.AppendLine($"{boardName}SysMon_acq_fpga_vccaux={temprature.ToString()}");
- data = Hd.currProduct!.AcqBd.ReadReg(AcqBdReg.R.SysMon_acq_fpga_vccbram, acqBdNo);
- data &= 0x3ff;
- temprature = (int)data;
- temprature = temprature / 1024 * 3;
- stringBuilder.AppendLine($"{boardName}SysMon_acq_fpga_vccbram={temprature.ToString()}");
- data = Hd.currProduct!.AcqBd.ReadReg(AcqBdReg.R.SysMon_acq_fpga_vccint, acqBdNo);
- data &= 0x3ff;
- temprature = (int)data;
- temprature = temprature / 1024 * 3;
- stringBuilder.AppendLine($"{boardName}SysMon_acq_fpga_vccint={temprature.ToString()}");
- data = Hd.currProduct!.AcqBd.ReadReg(AcqBdReg.R.SysMon_acq_temp_adc1, acqBdNo);
- data &= 0x3ff;
- temprature = (int)data;
- temprature = temprature * 0.125;
- stringBuilder.AppendLine($"{boardName}SysMon_acq_temp_adc1={temprature.ToString()}℃");
- data = Hd.currProduct!.AcqBd.ReadReg(AcqBdReg.R.SysMon_acq_temp_adc2, acqBdNo);
- data &= 0x3ff;
- temprature = (int)data;
- temprature = temprature * 0.125;
- stringBuilder.AppendLine($"{boardName}SysMon_acq_temp_adc2={temprature.ToString()}℃");
- data = Hd.currProduct!.AcqBd.ReadReg(AcqBdReg.R.SysMon_acq_temp_pcb1, acqBdNo);
- temprature=ComplementConvert(data)* 0.125;
- stringBuilder.AppendLine($"{boardName}SysMon_acq_temp_pcb1={temprature.ToString()}℃");
- data = Hd.currProduct!.AcqBd.ReadReg(AcqBdReg.R.SysMon_acq_temp_pcb2, acqBdNo);
- temprature = ComplementConvert(data) * 0.125;
- stringBuilder.AppendLine($"{boardName}SysMon_acq_temp_pcb2={temprature.ToString()}℃");
- stringBuilder.AppendLine("======================================");
- }
- }
- #endregion
- return stringBuilder.ToString();
- }
- public double GetAnalogChannelTemperature(int whichType=0)
- {
- ReadAnalogChannelTemperatures();
- return whichType switch
- {
- 0 => _AnalogChannelTemperatures[0],
- 1 => _AnalogChannelTemperatures[1],
- _ => 0.0,
- };
- }
- }
- }
|