实例介绍
【实例截图】
【核心代码】
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using ONU.FunctionMatrix; using BOSA.Common; using INIHelper; using System.IO; using STD.Terminal; namespace BOB_RTL_8290_CAL { public partial class BOB_RTL_Calibration : Form { #region 变量声明 private ONU_RTL_Solution onu; private static string INIFilePath = Path.Combine(System.IO.Directory.GetCurrentDirectory() "\\Config.ini"); PONConfiguration TestConfig; System.Timers.Timer ATimer = new System.Timers.Timer(); private string onuIP = string.Empty; #endregion #region 构造函数 public BOB_RTL_Calibration() { InitializeComponent(); btn_Connect.Enabled = false; btn_Disconnect.Enabled = false; btn_Initialization.Enabled = false; INIFileHelper.FilePath = INIFilePath; string[] ININodes = INIFileHelper.INIGetAllSectionNames(); // Array.Sort(iniNodes); foreach(string node in ININodes) { cbo_Solution.Items.Add(node); } cbo_Solution.SelectedIndex = -1; gpb_Telnet.Enabled = false; splitContainer2.Panel2.Enabled = false; btn_Rx_2nd.Enabled = false; btn_Tx_DDM_CAL.Enabled = false; pict_DUT_Online.Image = Resource1.Gray; // 禁用线程安全检查 Control.CheckForIllegalCrossThreadCalls = false; } #endregion #region 委托事件实现函数 private void EnableTimer() { ATimer = new System.Timers.Timer(); ATimer.Interval = 1000; // Hook up the Elapsed event for the timer. ATimer.Elapsed = new System.Timers.ElapsedEventHandler(OnTimedEvent); // Have the timer fire repeated events (true is the default) ATimer.AutoReset = true; // Start the timer ATimer.Enabled = true; } private void DisableTimer() { // Hook up the Elapsed event for the timer. ATimer.Elapsed -= OnTimedEvent; // Start the timer ATimer.Enabled = false; } internal void OnTimedEvent(Object source, System.Timers.ElapsedEventArgs e) { if (!PingHelper.PingWithCMD(onuIP)) { btn_Disconnect_Click(null, null); ShowTestStepToGUI_Args("离线"); } //ShowTestStepToGUI_Args("online\r\n"); Application.DoEvents(); } internal void ShowDataToGUI_Args(string data) { if (rtb_Test_Data_Log.InvokeRequired) { // 当一个控件的InvokeRequired属性值为真时,说明有一个创建它以外的线程想访问它 Action<string> actionDelegate = (x) => { //LimitsRichTextBoxLineCount(ctrl); rtb_Test_Data_Log.AppendText(string.Format("{0}", x)); rtb_Test_Data_Log.ScrollToCaret(); }; // 或者 // Action<string> actionDelegate = delegate(string txt) { this.label2.Text = txt; }; rtb_Test_Data_Log.BeginInvoke(actionDelegate, data); } else { //LimitsRichTextBoxLineCount(ctrl); rtb_Test_Data_Log.AppendText(data "\r\n"); rtb_Test_Data_Log.ScrollToCaret(); } } internal void ShowTestStepToGUI_Args(string data) { if (txt_Test_Step.InvokeRequired) { // 当一个控件的InvokeRequired属性值为真时,说明有一个创建它以外的线程想访问它 Action<string> actionDelegate = (x) => { //LimitsRichTextBoxLineCount(ctrl); if (x.Contains("*")) { txt_Test_Step.SelectionStart = txt_Test_Step.TextLength; txt_Test_Step.SelectionLength = 0; txt_Test_Step.SelectionColor = Color.Red; txt_Test_Step.AppendText(string.Format("{0}\r\n", x)); } else { txt_Test_Step.AppendText(string.Format("{0}\r\n", x)); } txt_Test_Step.ScrollToCaret(); }; // 或者 // Action<string> actionDelegate = delegate(string txt) { this.label2.Text = txt; }; txt_Test_Step.BeginInvoke(actionDelegate, data); } else { //LimitsRichTextBoxLineCount(ctrl); if (data.Contains("*")) { txt_Test_Step.SelectionStart = txt_Test_Step.TextLength; txt_Test_Step.SelectionLength = 0; txt_Test_Step.SelectionColor = Color.Red; txt_Test_Step.AppendText(string.Format("{0}\r\n", data)); } else { txt_Test_Step.AppendText(string.Format("{0}\r\n", data)); } txt_Test_Step.ScrollToCaret(); } } #endregion #region Telnet连接 private void btn_Connect_Click(object sender, EventArgs e) { onu = new ONU_RTL_Solution(TestConfig); onu.OnSendDataToGUI_Events = new DataToGuiEventHandler(ShowDataToGUI_Args); onu.OnTestStepToGUI_Events = new StepToGuiEventHandler(ShowTestStepToGUI_Args); if (onu.ConnectDUT(cbo_ONU_IP.Text)) { if (onu.LoginDUT()) { int portID=onu.ConfirmPortID(); if (portID == -1) { onu.Disconnect(); ShowTestStepToGUI_Args("***Port ID获取失败***"); } lbl_Port_ID.Text = string.Format("Port ID: {0}", portID); PONMode p = onu.PonMode; //cbo_PON_Mode.Text = Enum.GetName(p.GetType(), p); if (p == PONMode.EPON) { btn_Initialization.Enabled = true; btn_Connect.Enabled = false; btn_Disconnect.Enabled = true; splitContainer2.Panel2.Enabled = true; pict_DUT_Online.Image = Resource1.Green; EnableTimer(); btn_GPON_Prbs.Enabled = true; btn_GPON_Prbs.Text = "GPON Prbs ON"; btn_EPON_Prbs.Enabled = true; btn_EPON_Prbs.Text = "EPON Prbs ON"; } else { //onu.Disconnect(); cbo_PON_Mode.Text = Enum.GetName(p.GetType(), p); ShowTestStepToGUI_Args("ONU模式不对,请设置"); } } else { onu.Disconnect(); ShowTestStepToGUI_Args("***产品登录失败***"); } } else { ShowTestStepToGUI_Args("***产品连接失败***"); } } #endregion #region Telnet断开连接 private void btn_Disconnect_Click(object sender, EventArgs e) { if(onu.Disconnect()) { pict_DUT_Online.Image = Resource1.Gray; DisableTimer(); ShowTestStepToGUI_Args("产品已断开"); } else { ShowTestStepToGUI_Args("***产品断开失败***"); } btn_Initialization.Enabled = false; btn_Connect.Enabled = true; btn_Disconnect.Enabled = false; rtb_Test_Data_Log.Clear(); splitContainer2.Panel2.Enabled = false; ClearControlValue(splitContainer2.Panel2); } #endregion #region 工作模式操作 private void btn_Mode_Get_Click(object sender, EventArgs e) { if(onu.IsConnected) cbo_PON_Mode.Text = Enum.GetName(onu.PonMode.GetType(), onu.PonMode); } private void btn_Mode_Set_Click(object sender, EventArgs e) { if (onu.IsConnected) { ShowTestStepToGUI_Args("重启"); onu.PonMode = (PONMode)Enum.Parse(typeof(PONMode), cbo_PON_Mode.Text); onu.Reboot(); btn_Disconnect_Click(null, null); } } #endregion #region 初始化 private void btn_Initialization_Click(object sender, EventArgs e) { if (onu.IsConnected) { splitContainer2.Panel2.Enabled = false; btn_Initialization.Enabled = false; onu.Initialization(); btn_Initialization.Enabled = true; splitContainer2.Panel2.Enabled = true; } } #endregion #region RichTextBox按键无输入 private void rtb_Test_Data_Log_KeyDown(object sender, KeyEventArgs e) { e.Handled = true; } private void rtb_Test_Data_Log_KeyPress(object sender, KeyPressEventArgs e) { e.Handled = true; } #endregion #region 芯片方案选择 private void cbo_Solution_SelectedIndexChanged(object sender, EventArgs e) { if (cbo_Solution.SelectedIndex > -1) { TestConfig.IsLogin = INIFileHelper.INIGetStringValue(cbo_Solution.Text, "登录", "1")=="1"?true:false; TestConfig.User = INIFileHelper.INIGetStringValue(cbo_Solution.Text, "用户名", "admin"); TestConfig.Password = INIFileHelper.INIGetStringValue(cbo_Solution.Text, "密码", "admin"); TestConfig.R_Upper = Convert.ToInt32(INIFileHelper.INIGetStringValue(cbo_Solution.Text, "上拉电阻", "3300")); TestConfig.R_Down = Convert.ToInt32(INIFileHelper.INIGetStringValue(cbo_Solution.Text, "下拉电阻", "680")); TestConfig.RSSI = Convert.ToInt32(INIFileHelper.INIGetStringValue(cbo_Solution.Text, "RSSI", "50")); TestConfig.CMPD = Convert.ToInt32(INIFileHelper.INIGetStringValue(cbo_Solution.Text, "cmpd", "50")); TestConfig.LPF = Convert.ToInt32(INIFileHelper.INIGetStringValue(cbo_Solution.Text, "lpf", "50")); TestConfig.SensitivityTestTime = Convert.ToInt32(INIFileHelper.INIGetStringValue(cbo_Solution.Text, "灵敏度测试时间", "3")); cbo_ONU_IP.SelectedIndex = 0; gpb_Telnet.Enabled = true; } } #endregion #region IP选择 private void cbo_ONU_IP_SelectedIndexChanged(object sender, EventArgs e) { if (cbo_Solution.SelectedIndex > -1) { onuIP = cbo_ONU_IP.Text; btn_Connect.Enabled = true; } } #endregion #region GPON码型长发光 private void btn_GPON_Prbs_Click(object sender, EventArgs e) { if (onu.IsConnected) { if (btn_GPON_Prbs.Text == "GPON Prbs ON") { ShowTestStepToGUI_Args("GPON长发光"); onu.GponPrbsLaserON(); btn_GPON_Prbs.Text = "GPON Prbs OFF"; btn_EPON_Prbs.Enabled = false; group_EPON_ER.Enabled = false; group_GPON_ER.Enabled = true; } else { ShowTestStepToGUI_Args("关闭GPON长发光"); onu.GponPrbsLaserOFF(); btn_GPON_Prbs.Text = "GPON Prbs ON"; btn_EPON_Prbs.Enabled = true; group_EPON_ER.Enabled = true; } } } #endregion #region EPON码型长发光 private void btn_EPON_Prbs_Click(object sender, EventArgs e) { if (onu.IsConnected) { if (btn_EPON_Prbs.Text == "EPON Prbs ON") { ShowTestStepToGUI_Args("EPON长发光"); onu.EPONPrbsLaserON(); btn_EPON_Prbs.Text = "EPON Prbs OFF"; btn_GPON_Prbs.Enabled = false; group_EPON_ER.Enabled = true; group_GPON_ER.Enabled = false; } else { ShowTestStepToGUI_Args("关闭EPON长发光"); onu.EPONPrbsLaserOFF(); btn_EPON_Prbs.Text = "EPON Prbs ON"; btn_GPON_Prbs.Enabled = true; } } } #endregion #region Tx功率调试 private void btn_Tx_Adjust_Click(object sender, EventArgs e) { if (onu.IsConnected) { if (txt_Act_Power.Text == "" || cbo_Target_Power.Text == "") { ShowTestStepToGUI_Args("功率输入不能为空"); } else { ShowTestStepToGUI_Args("TX功率调试"); onu.TransmitterAdjustment(txt_Act_Power.Text, cbo_Target_Power.Text); btn_Tx_DDM_CAL.Enabled = true; } } } #endregion #region Tx DDM校准 private void btn_Tx_DDM_CAL_Click(object sender, EventArgs e) { if (onu.IsConnected) { if (txt_Act_Power.Text == "" ) { txt_Act_Power.BackColor = Color.Red; } else if (cbo_Target_Power.Text == "") { cbo_Target_Power.BackColor = Color.Red; } else { try { ShowTestStepToGUI_Args("TX DDM校准"); onu.TxCalibration(cbo_Target_Power.Text); onu.EnterDiagMode(); Single s = onu.ReadTxDDM; onu.ExitDiagMode(); } catch (Exception ex) { ShowTestStepToGUI_Args(string.Format("***{0}***", ex.Message)); } } } } #endregion #region GPON粗调 private void nud_GPON_Coarse_ValueChanged(object sender, EventArgs e) { if (onu.IsConnected) { int data = Convert.ToInt32(nud_GPON_Coarse.Value); onu.GPON_ER_Coarse(data); } } #endregion #region GPON微调 private void nud_GPON_Fine_ValueChanged(object sender, EventArgs e) { if (onu.IsConnected) { int data = Convert.ToInt32(nud_GPON_Fine.Value); onu.GPON_ER_Fine(data); } } #endregion #region 交叉点 private void nud_Crossing_Up_ValueChanged(object sender, EventArgs e) { if (onu.IsConnected) { int data = Convert.ToInt32(nud_Crossing_Up.Value); onu.CrossingUP(data); } } private void nud_Crossing_Down_ValueChanged(object sender, EventArgs e) { if (onu.IsConnected) { int data = Convert.ToInt32(nud_Crossing_Down.Value); onu.CrossingDown(data); } } #endregion #region GPON档位 private void nud_GPON_Comperc_ValueChanged(object sender, EventArgs e) { if (onu.IsConnected) { int data = Convert.ToInt32(nud_GPON_Comperc.Value); onu.GPON_ER_Comperc(data); } } #endregion #region EPON粗调 private void nud_EPON_Coarse_ValueChanged(object sender, EventArgs e) { if (onu.IsConnected) { int data = Convert.ToInt32(nud_EPON_Coarse.Value); onu.EPON_ER_Coarse(data); } } #endregion #region EPON微调 private void nud_EPON_Fine_ValueChanged(object sender, EventArgs e) { if (onu.IsConnected) { int data = Convert.ToInt32(nud_EPON_Fine.Value); onu.EPON_ER_Fine(data); } } #endregion #region EPON档位 private void nud_EPON_Comperc_ValueChanged(object sender, EventArgs e) { if (onu.IsConnected) { int data = Convert.ToInt32(nud_EPON_Comperc.Value); onu.EPON_ER_Comperc(data); } } #endregion #region BOSA电流 private void btn_Bosa_Current_Click(object sender, EventArgs e) { if (onu.IsConnected) { onu.EPONPrbsLaserOFF(); //onu.PonMode = PONMode.GPON; //onu.DirectlyWriteCommand("rmmod europa_drv"); //onu.DirectlyWriteCommand("/bin/sh /etc/scripts/insert_europa.sh"); onu.GponPrbsLaserON(); onu.OpenImpedanceMatch(); txt_Bias.Text = string.Format("{0}", onu.ReadBiasCurrent()); txt_MOD.Text = string.Format("{0}", onu.ReadModulationCurrent()); onu.GponPrbsLaserOFF(); } } #endregion #region DDM读取 private void btn_Read_DDM_Click(object sender, EventArgs e) { if (onu.IsConnected) { onu.EnterDiagMode(); txt_DDM_Tx.Text = string.Format("{0}", onu.ReadTxDDM); txt_DDM_Rx.Text = string.Format("{0}", onu.ReadRxDDM); this.txt_DDM_Bias.Text = string.Format("{0}", onu.ReadBiasCurrentDDM); this.txt_DDM_Temp.Text = string.Format("{0}", onu.ReadTempDDM); this.txt_DDM_V.Text = string.Format("{0}", onu.ReadVoltageDDM); onu.ExitDiagMode(); } } #endregion #region 温度校准 private void btn_Temp_CAL_Click(object sender, EventArgs e) { if (onu.IsConnected) { ShowTestStepToGUI_Args("温度校准"); int offset = Convert.ToInt32(nud_Temp_Offset.Value); onu.TempOffsetSetup(offset); Single temp=onu.Europacli_ReadTemp; Single bosaTemp = temp - offset; txt_Temp.Text = string.Format("{0}℃", temp); txt_Bosa_Temp.Text = string.Format("{0}℃", bosaTemp); } } #endregion #region Rx DDM校准 private void btn_Rx_1st_Click(object sender, EventArgs e) { if (onu.IsConnected) { if (txt_Rx_1st_Pow.Text!="") { try { btn_Rx_1st.Enabled = false; ShowTestStepToGUI_Args("RX DDM校准"); onu.ResetRxCALData(); onu.RxCalibration(1, txt_Rx_1st_Pow.Text); btn_Rx_2nd.Enabled = true; } catch (Exception ex) { ShowTestStepToGUI_Args(string.Format("***{0}***", ex.Message)); } } } } private void btn_Rx_2nd_Click(object sender, EventArgs e) { if (onu.IsConnected) { if (txt_Rx_2nd_Pow.Text!="") { try { btn_Rx_2nd.Enabled = false; onu.RxCalibration(2, txt_Rx_2nd_Pow.Text); onu.FinishRxCalibration(); onu.EnterDiagMode(); Single rxPower = onu.ReadRxDDM; onu.ExitDiagMode(); btn_Rx_1st.Enabled = true; } catch (Exception ex) { ShowTestStepToGUI_Args(string.Format("***{0}***", ex.Message)); } } } } #endregion #region Rx LOS调试 private void btn_Rx_Los_Auto_Click(object sender, EventArgs e) { if (onu.IsConnected) { ShowTestStepToGUI_Args("RX LOS调试"); btn_Rx_Los_Auto.Enabled = false; onu.RxLOS_Auto_CAL(); if (onu.RxLosState) { pict_Rx_Los_State.Image = Resource1.Green; } else { pict_Rx_Los_State.Image = Resource1.Red; } btn_Rx_Los_Auto.Enabled = true; } } private void nud_Rx_Los_ValueChanged(object sender, EventArgs e) { if (onu.IsConnected) { btn_Rx_Los_Auto.Enabled = false; onu.RxLOS_HystCAL = Convert.ToInt32(nud_Rx_Los.Value); int data = onu.RxLOS_HystCAL; if (onu.RxLosState) { pict_Rx_Los_State.Image = Resource1.Green; } else { pict_Rx_Los_State.Image = Resource1.Red; } btn_Rx_Los_Auto.Enabled = true; } } #endregion #region Tx功率文本改变事件 private void txt_Act_Power_TextChanged(object sender, EventArgs e) { txt_Act_Power.BackColor = Color.White; } private void cbo_Target_Power_TextChanged(object sender, EventArgs e) { txt_Act_Power.BackColor = Color.White; } #endregion #region 灵敏度调试 private void btn_SEN_Init_Click(object sender, EventArgs e) { if (onu.IsConnected) { //ShowTestStepToGUI_Args("转为GPON模式"); //onu.PonMode = PONMode.GPON; ShowTestStepToGUI_Args("关闭EPON PRBS"); onu.EPONPrbsLaserOFF(); ShowTestStepToGUI_Args("关闭GPON PRBS"); onu.GponPrbsLaserON(); ResetGponSensitivity(); } } private void btn_SEN_测试_Click(object sender, EventArgs e) { if (onu.IsConnected) { TestGponSensitivity(); } } private void ResetGponSensitivity() { onu.SetRegister("0x022540", "0x0"); /*激活EPON PRBS*/ ShowTestStepToGUI_Args("清除PRBS误码计数"); onu.SetRegister("0x22094", "0x809e"); /*清除PRBS误码计数*/ ShowTestStepToGUI_Args("开始PRBS误码计数"); onu.SetRegister("0x22094", "0x409e"); /*开始PRBS误码计数*/ ShowTestStepToGUI_Args("激活GPON PRBS"); onu.SetRegister("0x22098", "0x1"); /*激活GPON PRBS*/ ShowTestStepToGUI_Args("激活EPON PRBS"); onu.SetRegister("0x022540", "0x30"); /*激活EPON PRBS*/ pict_SEN_State.Image = Resource1.Gray; } private void TestGponSensitivity() { //ShowTestStepToGUI_Args("清除PRBS误码计数"); //onu.SetRegister("0x22094", "0x809e"); /*清除PRBS误码计数*/ //ShowTestStepToGUI_Args("开始PRBS误码计数"); //onu.SetRegister("0x22094", "0x409e"); /*开始PRBS误码计数*/ //ShowTestStepToGUI_Args(string.Format("延时{0}秒",TestConfig.SensitivityTestTime)); //System.Threading.Thread.Sleep(TestConfig.SensitivityTestTime*1000); ShowTestStepToGUI_Args("获取PRBS误码状态"); long errorStatusCounter = Convert.ToInt64(onu.GetRegister("0x220A0"), 16); /*获取PRBS误码状态*/ ShowTestStepToGUI_Args("获取PRBS误码计数"); long errorCounter = Convert.ToInt64(onu.GetRegister("0x2209c"), 16); /*获取PRBS误码计数*/ if(errorCounter==0) { pict_SEN_State.Image = Resource1.Green; onu.SetRegister("0x022540", "0x0"); /*激活EPON PRBS*/ } else { pict_SEN_State.Image = Resource1.Red; } } #endregion private void btn_Format_Click(object sender, EventArgs e) { if (onu.IsConnected) { onu.FormatAll(); } } private void btn_Restory_Factory_Click(object sender, EventArgs e) { if (onu.IsConnected) { onu.RestoreFactory(); } } private void btn_Reboot_Click(object sender, EventArgs e) { if (onu.IsConnected) { onu.Reboot(); btn_Disconnect_Click(null, null); } } private void ClearControlValue(Control parContainer) { for(int index=0;index<parContainer.Controls.Count;index ) { if(parContainer.Controls[index].HasChildren) { ClearControlValue(parContainer.Controls[index]); } else { switch(parContainer.Controls[index].GetType().Name) { case "TextBox": parContainer.Controls[index].Text = ""; break; case "ComBox": parContainer.Controls[index].Text = ""; break; case "NumericUpDown": break; } } } } } }
标签: 程序
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论