TabPageCaliData_AcqSync.cs 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading;
  6. using System.Drawing;
  7. using System.Windows.Forms;
  8. using System.Threading.Tasks;
  9. using Uestc.Auto6.Dso.Hardware.Calibration.Data.Base;
  10. namespace Uestc.Auto6.Dso.Hardware.Calibration.Tool
  11. {
  12. public partial class TabPageCaliData_AcqSync : UserControl,IMainFormTabPage
  13. {
  14. public TabPageCaliData_AcqSync()
  15. {
  16. InitializeComponent();
  17. Init();
  18. }
  19. public CaliDataType CaliDataType { get => CaliDataType.TiAdc_SyncSampleClock; }
  20. private IInstrumentSession currInstrument = null;
  21. private void Init()
  22. {
  23. dataGridViewCaliData_AcqSync.RowCount = CaliConstants.Fixed_PerChannelMergeAdcMaxCount;
  24. for (int adcIndex = 0; adcIndex < CaliConstants.Fixed_PerChannelMergeAdcMaxCount; adcIndex++)
  25. {
  26. dataGridViewCaliData_AcqSync.Rows[adcIndex].Cells[0].ReadOnly = true;
  27. dataGridViewCaliData_AcqSync.Rows[adcIndex].Cells[0].Value = $"Adc{adcIndex + 1}";
  28. }
  29. comboBoxCaliDataChannelSelectedChannel.SelectedIndex = 0;
  30. dataGridViewCaliData_AcqSync.Columns[0].Frozen = true;
  31. dataGridViewCaliData_AcqSync.Columns[0].DefaultCellStyle.BackColor = Color.DarkGray;
  32. //目前暂时没有使用
  33. dataGridViewCaliData_AcqSync.Columns[2].Visible = false;
  34. dataGridViewCaliData_AcqSync.Columns[3].Visible = false;
  35. dataGridViewCaliData_AcqSync.Columns[4].Visible = false;
  36. dataGridViewCaliData_AcqSync.Columns[5].Visible = false;
  37. RefreshData();
  38. }
  39. public void SetInstrumentInteract(IInstrumentSession instrumentInteract)
  40. {
  41. currInstrument = instrumentInteract;
  42. }
  43. enum AcqSyncColumnIndex : int
  44. {
  45. Start = 1,
  46. SampleClock = 1,
  47. SyncReset = 2,
  48. RM = 3,
  49. Serdes = 4,
  50. WriteEnable = 5,
  51. End = 5
  52. }
  53. public void RefreshData()
  54. {
  55. int currChannelID = comboBoxCaliDataChannelSelectedChannel.SelectedIndex;
  56. for (int adcIndex = 0; adcIndex < CaliConstants.Fixed_PerChannelMergeAdcMaxCount; adcIndex++)
  57. {
  58. dataGridViewCaliData_AcqSync.Rows[adcIndex].Cells[(int)AcqSyncColumnIndex.SampleClock].Value = TiAdc_SyncSampleClock.Default[currChannelID,adcIndex].SampleClockDelay.ToString();
  59. dataGridViewCaliData_AcqSync.Rows[adcIndex].Cells[(int)AcqSyncColumnIndex.SyncReset].Value = TiAdc_SyncSampleClock.Default[currChannelID, adcIndex].SyncResetDelay.ToString();
  60. dataGridViewCaliData_AcqSync.Rows[adcIndex].Cells[(int)AcqSyncColumnIndex.RM].Value = TiAdc_SyncSampleClock.Default[currChannelID, adcIndex].RMDelay.ToString();
  61. dataGridViewCaliData_AcqSync.Rows[adcIndex].Cells[(int)AcqSyncColumnIndex.Serdes].Value = TiAdc_SyncSampleClock.Default[currChannelID, adcIndex].SerdesDelay.ToString();
  62. dataGridViewCaliData_AcqSync.Rows[adcIndex].Cells[(int)AcqSyncColumnIndex.WriteEnable].Value = TiAdc_SyncSampleClock.Default[currChannelID, adcIndex].WriteEnableDelay.ToString();
  63. }
  64. }
  65. private void CaliData_AcqSync_SendGridData(int rowIndex, int columnIndex, bool bNeedSend)
  66. {
  67. DataGridViewCell currCell = dataGridViewCaliData_AcqSync.Rows[rowIndex].Cells[columnIndex];
  68. UInt32 data = 0;
  69. UInt32.TryParse(currCell.Value.ToString(), out data);
  70. AcqSyncColumnIndex enumColumn = (AcqSyncColumnIndex)columnIndex;
  71. //AcqSyncItem 是结构,不是引用类型的,之后需要拷贝
  72. int currChannelID = comboBoxCaliDataChannelSelectedChannel.SelectedIndex;
  73. AcqSyncItem currAcqSyncItem = TiAdc_SyncSampleClock.Default[currChannelID,rowIndex];
  74. UInt32 oldData = enumColumn switch
  75. {
  76. AcqSyncColumnIndex.SampleClock => currAcqSyncItem.SampleClockDelay,
  77. AcqSyncColumnIndex.SyncReset => currAcqSyncItem.SyncResetDelay,
  78. AcqSyncColumnIndex.RM => currAcqSyncItem.RMDelay,
  79. AcqSyncColumnIndex.Serdes => currAcqSyncItem.SerdesDelay,
  80. AcqSyncColumnIndex.WriteEnable => currAcqSyncItem.WriteEnableDelay,
  81. _ => data
  82. };
  83. if (oldData == data) //判断新旧值,避免连续发送
  84. return;
  85. switch (enumColumn)
  86. {
  87. case AcqSyncColumnIndex.SampleClock: currAcqSyncItem.SampleClockDelay = data; currCell.Value = currAcqSyncItem.SampleClockDelay.ToString(); break;
  88. case AcqSyncColumnIndex.SyncReset: currAcqSyncItem.SyncResetDelay = data; currCell.Value = currAcqSyncItem.SyncResetDelay.ToString(); break;
  89. case AcqSyncColumnIndex.RM: currAcqSyncItem.RMDelay = data; currCell.Value = currAcqSyncItem.RMDelay.ToString(); break;
  90. case AcqSyncColumnIndex.Serdes: currAcqSyncItem.SerdesDelay = data; currCell.Value = currAcqSyncItem.SerdesDelay.ToString(); break;
  91. case AcqSyncColumnIndex.WriteEnable: currAcqSyncItem.WriteEnableDelay = data; currCell.Value = currAcqSyncItem.WriteEnableDelay.ToString(); break;
  92. };
  93. TiAdc_SyncSampleClock.Default[currChannelID,rowIndex] = currAcqSyncItem;
  94. if (bNeedSend && currInstrument != null)
  95. InstrumentInteract.CaliData_Send(currInstrument, CaliDataType.TiAdc_SyncSampleClock);
  96. }
  97. private void buttonCaliData_AcqSyncLoadFromFile_Click(object sender, EventArgs e)
  98. {
  99. if (currInstrument == null)
  100. {
  101. MessageBox.Show("请先连接仪器!");
  102. return;
  103. }
  104. bool bResult = InstrumentInteract.CaliData_LoadFromFile(currInstrument, CaliDataType.TiAdc_SyncSampleClock);
  105. RefreshData();
  106. MessageBox.Show(bResult ? "OK!" : "错误!");
  107. }
  108. private void buttonCaliData_AcqSyncSaveToFile_Click(object sender, EventArgs e)
  109. {
  110. if (currInstrument == null)
  111. {
  112. MessageBox.Show("请先连接仪器!");
  113. return;
  114. }
  115. bool bResult = InstrumentInteract.CaliData_SaveToFile(this.currInstrument, CaliDataType.TiAdc_SyncSampleClock);
  116. RefreshData();
  117. MessageBox.Show(bResult ? "OK!" : "错误!");
  118. }
  119. private void onCaliData_AcqSync_NeedRefreshGrid(object sender, DataGridViewCellEventArgs e)
  120. {
  121. CaliData_AcqSync_SendGridData(e.RowIndex, e.ColumnIndex, checkBoxCaliData_AcqSync_AutoSend.Checked);
  122. }
  123. private void buttonCaliData_AcqSync_Send_Click(object sender, EventArgs e)
  124. {
  125. if (currInstrument == null)
  126. {
  127. MessageBox.Show("请先连接仪器!");
  128. return;
  129. }
  130. for (int rowIndex = 0; rowIndex < CaliConstants.Fixed_PerChannelMergeAdcMaxCount; rowIndex++)
  131. {
  132. for (int columnIndex = (int)AcqSyncColumnIndex.Start; columnIndex <= (int)AcqSyncColumnIndex.End; columnIndex++)
  133. CaliData_AcqSync_SendGridData(rowIndex, columnIndex, false);
  134. }
  135. bool bResult = InstrumentInteract.CaliData_Send(this.currInstrument, CaliDataType.TiAdc_SyncSampleClock);
  136. MessageBox.Show(bResult ? "OK!" : "错误!");
  137. }
  138. private void buttonCaliData_LoadDefualtValue_AcqSync_Click(object sender, EventArgs e)
  139. {
  140. if (MessageBox.Show("装载缺省值将覆盖现有数据,\r\n您确认要执行此操作吗?", "警告", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) != DialogResult.Yes)
  141. return;
  142. TiAdc_SyncSampleClock.Default.LoadDefaultValue();
  143. RefreshData();
  144. if (currInstrument!=null)
  145. InstrumentInteract.CaliData_Send(this.currInstrument, CaliDataType.TiAdc_SyncSampleClock);
  146. }
  147. private void comboBoxCaliDataChannelSelectedChannel_SelectedIndexChanged(object sender, EventArgs e)
  148. {
  149. RefreshData();
  150. }
  151. private void buttonRead5200AdcWindow_Click(object sender, EventArgs e)
  152. {
  153. if (currInstrument == null)
  154. {
  155. MessageBox.Show("请先连接仪器!");
  156. return;
  157. }
  158. string scpiCmd = InstrumentInteract.GetCmdStr(ScpiCmd.Factory_SpecailData);
  159. scpiCmd += " ? " + "ADC5200SyncWindowRegValue";
  160. currInstrument.WriteString(scpiCmd);
  161. Thread.Sleep(1000);
  162. richTextBoxAdc5200SyncWindows.Text= currInstrument.ReadString();
  163. }
  164. }
  165. }