实例介绍
【实例截图】
【核心代码】
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小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明


网友评论
我要评论