//OK public override bool calibLOS(bosainfo _bosainfo, testinginfo _testinfo, FVA3150 FVA, variables VAR, ref bool _flag) { string result1_LOS = ""; string Reg_value_LOS = ""; string Reg_value_bin_LOS = ""; string LOS_bit = ""; string LOS_Level = ""; //string LOS_Level_Hex = ""; string LOS_SLEEP_CTRL = ""; bool Tuning_LOS_Level_Result = false; bool Check_LOS_Result = false; bool Check_SD_Result = false; string attenuation_level = (-36 - double.Parse(VAR.OLT_Power)).ToString(); _testinfo.CALIBLOSRESULT = Parameters.testStatus.Wait.ToString(); _testinfo.SYSTEMLOG += "Đã thiết lập xong máy suy hao.\r\n"; FVA.set_attenuation_level(attenuation_level); _testinfo.SYSTEMLOG += "Đang thiết lập mức suy hao = " + attenuation_level + "\r\n"; Thread.Sleep(2000); //ONT.Read(); //base.WriteLine("laser msg --set bc 1 1c"); base.WriteLine("laser msg --set bc 1 15"); //06.07.2018 đổi từ 1c sang 15 => nhầm code Thread.Sleep(100); base.WriteLine("laser msg --set 6e 1 44"); Thread.Sleep(100); base.WriteLine("laser msg --set 6e 1 04"); Thread.Sleep(100); base.Read(); base.WriteLine("laser msg --get bc 1"); Thread.Sleep(100); result1_LOS = base.Read(); _testinfo.SYSTEMLOG += "result1_LOS: " + result1_LOS + "\r\n"; //Hien_Thi.Hienthi.SetText(rtb, result1_LOS); for (int i = 0; i < result1_LOS.Split('\n').Length; i++) { if (result1_LOS.Split('\n')[i].Contains("I2C")) { Reg_value_LOS = result1_LOS.Split('\n')[i].Split(':')[1].Trim(); Reg_value_bin_LOS = hex2bin(Reg_value_LOS); } } LOS_SLEEP_CTRL = Reg_value_bin_LOS.Substring(0, 1); LOS_Level = Reg_value_bin_LOS.Substring(1, 7); //Hien_Thi.Hienthi.SetText(rtb, "LOS_Level_bin = " + LOS_Level); base.Read(); base.WriteLine("laser msg --get 6e 1"); Thread.Sleep(100); result1_LOS = base.Read(); //Hien_Thi.Hienthi.SetText(rtb, result1_LOS); for (int i = 0; i < result1_LOS.Split('\n').Length; i++) { if (result1_LOS.Split('\n')[i].Contains("I2C")) { Reg_value_LOS = result1_LOS.Split('\n')[i].Split(':')[1].Trim(); Reg_value_bin_LOS = hex2bin(Reg_value_LOS); } } LOS_bit = Reg_value_bin_LOS.Substring(6, 1); //Hien_Thi.Hienthi.SetText(rtb, "LOS_bit = " + LOS_bit); if (LOS_bit == "1") { for (int m = 0; m < 78; m++) { _testinfo.SYSTEMLOG += "...\r\n"; _testinfo.SYSTEMLOG += "Điều chỉnh giảm LOS Level\r\n"; LOS_Level = (Convert.ToInt32((LOS_Level), 2) - Convert.ToInt32("1", 2)).ToString("X"); _testinfo.SYSTEMLOG += "LOS_Level_new = " + LOS_Level + "\r\n"; base.WriteLine("laser msg --set bc 1 " + LOS_Level); Thread.Sleep(100); base.Read(); base.WriteLine("laser msg --get bc 1"); Thread.Sleep(100); result1_LOS = base.Read(); //Hien_Thi.Hienthi.SetText(rtb, result1_LOS); for (int i = 0; i < result1_LOS.Split('\n').Length; i++) { if (result1_LOS.Split('\n')[i].Contains("I2C")) { Reg_value_LOS = result1_LOS.Split('\n')[i].Split(':')[1].Trim(); Reg_value_bin_LOS = hex2bin(Reg_value_LOS); } } LOS_SLEEP_CTRL = Reg_value_bin_LOS.Substring(0, 1); LOS_Level = Reg_value_bin_LOS.Substring(1, 7); //Hien_Thi.Hienthi.SetText(rtb, "LOS_Level_bin = " + LOS_Level); base.Read(); base.WriteLine("laser msg --get 6e 1"); Thread.Sleep(100); result1_LOS = base.Read(); //Hien_Thi.Hienthi.SetText(rtb, result1_LOS); for (int i = 0; i < result1_LOS.Split('\n').Length; i++) { if (result1_LOS.Split('\n')[i].Contains("I2C")) { Reg_value_LOS = result1_LOS.Split('\n')[i].Split(':')[1].Trim(); Reg_value_bin_LOS = hex2bin(Reg_value_LOS); } } LOS_bit = Reg_value_bin_LOS.Substring(6, 1); _testinfo.SYSTEMLOG += "LOS_bit = " + LOS_bit + "\r\n"; if (LOS_bit == "0") { _testinfo.SYSTEMLOG += "Phát hiện SD. Tiếp tục điều chỉnh tăng LOS Level\r\n"; for (int n = 0; n < 58; n++) { _testinfo.SYSTEMLOG += "...\r\n"; _testinfo.SYSTEMLOG += "Tiếp tục điều chỉnh tăng LOS Level\r\n"; LOS_Level = (Convert.ToInt32((LOS_Level), 2) + Convert.ToInt32("1", 2)).ToString("X"); _testinfo.SYSTEMLOG += "LOS_Level_new = " + LOS_Level + "\r\n"; base.WriteLine("laser msg --set bc 1 " + LOS_Level); Thread.Sleep(100); base.Read(); base.WriteLine("laser msg --get bc 1"); Thread.Sleep(100); result1_LOS = base.Read(); //Hien_Thi.Hienthi.SetText(rtb, result1_LOS); for (int i = 0; i < result1_LOS.Split('\n').Length; i++) { if (result1_LOS.Split('\n')[i].Contains("I2C")) { Reg_value_LOS = result1_LOS.Split('\n')[i].Split(':')[1].Trim(); Reg_value_bin_LOS = hex2bin(Reg_value_LOS); } } LOS_SLEEP_CTRL = Reg_value_bin_LOS.Substring(0, 1); LOS_Level = Reg_value_bin_LOS.Substring(1, 7); //Hien_Thi.Hienthi.SetText(rtb, "LOS_Level_bin = " + LOS_Level); base.Read(); base.WriteLine("laser msg --get 6e 1"); Thread.Sleep(100); result1_LOS = base.Read(); //Hien_Thi.Hienthi.SetText(rtb, result1_LOS); for (int i = 0; i < result1_LOS.Split('\n').Length; i++) { if (result1_LOS.Split('\n')[i].Contains("I2C")) { Reg_value_LOS = result1_LOS.Split('\n')[i].Split(':')[1].Trim(); Reg_value_bin_LOS = hex2bin(Reg_value_LOS); } } LOS_bit = Reg_value_bin_LOS.Substring(6, 1); _testinfo.SYSTEMLOG += "LOS_bit = " + LOS_bit + "\r\n"; if (LOS_bit == "1") { _testinfo.SYSTEMLOG += "[OK] Hoàn thành Tuning LOS Level.\r\n"; Tuning_LOS_Level_Result = true; break; } } break; } } } else if (LOS_bit == "0") { for (int m = 0; m < 78; m++) { _testinfo.SYSTEMLOG += "...\r\n"; _testinfo.SYSTEMLOG += "Điều chỉnh tăng LOS Level\r\n"; LOS_Level = (Convert.ToInt32((LOS_Level), 2) + Convert.ToInt32("1", 2)).ToString("X"); _testinfo.SYSTEMLOG += "LOS_Level_new = " + LOS_Level + "\r\n"; base.WriteLine("laser msg --set bc 1 " + LOS_Level); Thread.Sleep(100); base.Read(); base.WriteLine("laser msg --get bc 1"); Thread.Sleep(100); result1_LOS = base.Read(); //Hien_Thi.Hienthi.SetText(rtb, result1_LOS); for (int i = 0; i < result1_LOS.Split('\n').Length; i++) { if (result1_LOS.Split('\n')[i].Contains("I2C")) { Reg_value_LOS = result1_LOS.Split('\n')[i].Split(':')[1].Trim(); Reg_value_bin_LOS = hex2bin(Reg_value_LOS); } } LOS_SLEEP_CTRL = Reg_value_bin_LOS.Substring(0, 1); LOS_Level = Reg_value_bin_LOS.Substring(1, 7); //Hien_Thi.Hienthi.SetText(rtb, "LOS_Level_bin = " + LOS_Level); base.Read(); base.WriteLine("laser msg --get 6e 1"); Thread.Sleep(100); result1_LOS = base.Read(); //Hien_Thi.Hienthi.SetText(rtb, result1_LOS); for (int i = 0; i < result1_LOS.Split('\n').Length; i++) { if (result1_LOS.Split('\n')[i].Contains("I2C")) { Reg_value_LOS = result1_LOS.Split('\n')[i].Split(':')[1].Trim(); Reg_value_bin_LOS = hex2bin(Reg_value_LOS); } } LOS_bit = Reg_value_bin_LOS.Substring(6, 1); _testinfo.SYSTEMLOG += "LOS_bit = " + LOS_bit + "\r\n"; if (LOS_bit == "1") { _testinfo.SYSTEMLOG += "[OK] Hoàn thành Tuning LOS Level.\r\n"; Tuning_LOS_Level_Result = true; break; } } } _testinfo.SYSTEMLOG += string.Format("- Check LOS: -36dBm\r\n"); FVA.set_attenuation_level((-36 - double.Parse(VAR.OLT_Power)).ToString()); Thread.Sleep(1000); base.Read(); base.WriteLine("laser msg --get 6e 1"); Thread.Sleep(100); result1_LOS = base.Read(); for (int i = 0; i < result1_LOS.Split('\n').Length; i++) { if (result1_LOS.Split('\n')[i].Contains("I2C")) { Reg_value_LOS = result1_LOS.Split('\n')[i].Split(':')[1].Trim(); Reg_value_bin_LOS = hex2bin(Reg_value_LOS); } } LOS_bit = Reg_value_bin_LOS.Substring(6, 1); _testinfo.SYSTEMLOG += "LOS_bit = " + LOS_bit + "\r\n"; if (LOS_bit == "1") { _testinfo.SYSTEMLOG += "Check LOS: PASS\r\n"; Check_LOS_Result = true; } _testinfo.SYSTEMLOG += "- Check LOS: -33dBm\r\n"; FVA.set_attenuation_level((-33 - double.Parse(VAR.OLT_Power)).ToString()); Thread.Sleep(1000); base.Read(); base.WriteLine("laser msg --get 6e 1"); Thread.Sleep(100); result1_LOS = base.Read(); for (int i = 0; i < result1_LOS.Split('\n').Length; i++) { if (result1_LOS.Split('\n')[i].Contains("I2C")) { Reg_value_LOS = result1_LOS.Split('\n')[i].Split(':')[1].Trim(); Reg_value_bin_LOS = hex2bin(Reg_value_LOS); } } LOS_bit = Reg_value_bin_LOS.Substring(6, 1); _testinfo.SYSTEMLOG += "LOS_bit = " + LOS_bit + "\r\n"; if (LOS_bit == "0") { _testinfo.SYSTEMLOG += "Check SD: PASS\r\n"; Check_SD_Result = true; } bool ret = Tuning_LOS_Level_Result && Check_LOS_Result && Check_SD_Result; _testinfo.CALIBLOSRESULT = ret == true?Parameters.testStatus.PASS.ToString() : Parameters.testStatus.FAIL.ToString(); return(ret); }
//OK public override bool calibDDMI(bosainfo _bosainfo, testinginfo _testinfo, FVA3150 FVA, variables VAR) { double ADC_RX_Point1 = 0; double ADC_RX_Point2 = 0; double ADC_RX_Point3 = 0; double RX_Power1 = 0.5; double RX_Power2 = 1; double RX_Power3 = 100; string Slope_P2 = ""; string Slope_P1 = ""; string Offset = ""; string value = ""; string value_register = ""; bool Calibration_RX_Result = false; string Power_DDMI = ""; string attenuation_level_1 = (-33 - double.Parse(VAR.OLT_Power)).ToString(); string attenuation_level_2 = (-30 - double.Parse(VAR.OLT_Power)).ToString(); string attenuation_level_3 = (-10 - double.Parse(VAR.OLT_Power)).ToString(); _testinfo.CALIBDDMIRESULT = Parameters.testStatus.Wait.ToString(); value = base.Read(); try { for (int i = 0; i < 3; i++) { _testinfo.SYSTEMLOG += "Đã thiết lập xong máy suy hao.\r\n"; _testinfo.SYSTEMLOG += "OLT phát công suất = -33dBm ~ 0.5uW\r\n"; // Thiết lập suy hao mức 1 cho máy điều chỉnh suy hao FVA.set_attenuation_level(attenuation_level_1); _testinfo.SYSTEMLOG += string.Format("Đang thiết lập mức suy hao = {0}\r\n", attenuation_level_1); Thread.Sleep(3000); // Đọc giá trị thanh ghi ADC RX Power:F0-F1 // Đổi Hexa -> Decimal, lưu vào biến ADC_RX_Point1 //ADC_RX_Point1 = double.Parse(Read_ADC_value_RX("F0")); //MessageBox.Show("Đọc ADC_RX 1"); base.Read(); base.WriteLine("laser msg --get F0 2"); Thread.Sleep(100); value = base.Read(); _testinfo.SYSTEMLOG += value + "\r\n"; for (int j = 0; j < value.Split('\n').Length; j++) { if (value.Split('\n')[j].Contains("I2C")) { value_register = value.Split('\n')[j].Split(':')[1].Trim(); ADC_RX_Point1 = Convert.ToDouble(HexToDec(value_register).ToString()); _testinfo.SYSTEMLOG += "ADC_RX_Point1 = " + ADC_RX_Point1 + "\r\n"; } } _testinfo.SYSTEMLOG += "OLT phát công suất = -30dBm ~ 1uW\r\n"; // Thiết lập suy hao mức 2 cho máy điều chỉnh suy hao FVA.set_attenuation_level(attenuation_level_2); _testinfo.SYSTEMLOG += "Đang thiết lập mức suy hao = " + attenuation_level_2 + "\r\n"; Thread.Sleep(3000); // Đọc giá trị thanh ghi ADC RX Power:F0-F1 // Đổi Hexa -> Decimal, lưu vào biến ADC_RX_Point2 //ADC_RX_Point2 = double.Parse(Read_ADC_value_RX("F0")); //MessageBox.Show("Đọc ADC_RX 2"); base.Read(); base.WriteLine("laser msg --get F0 2"); Thread.Sleep(100); value = base.Read(); _testinfo.SYSTEMLOG += value + "\r\n"; for (int j = 0; j < value.Split('\n').Length; j++) { if (value.Split('\n')[j].Contains("I2C")) { value_register = value.Split('\n')[j].Split(':')[1].Trim(); ADC_RX_Point2 = Convert.ToDouble(HexToDec(value_register).ToString()); _testinfo.SYSTEMLOG += "ADC_RX_Point2 = " + ADC_RX_Point2 + "\r\n"; } } _testinfo.SYSTEMLOG += "OLT phát công suất = -10dBm ~ 100uW\r\n"; // Thiết lập suy hao mức 3 cho máy điều chỉnh suy hao FVA.set_attenuation_level(attenuation_level_3); _testinfo.SYSTEMLOG += "Đang thiết lập mức suy hao = " + attenuation_level_3 + "\r\n"; Thread.Sleep(3000); // Đọc giá trị thanh ghi ADC RX Power:F0-F1 // Đổi Hexa -> Decimal, lưu vào biến ADC_RX_Point3 //ADC_RX_Point3 = double.Parse(Read_ADC_value_RX("F0")); //MessageBox.Show("Đọc ADC_RX 3"); base.Read(); base.WriteLine("laser msg --get F0 2"); Thread.Sleep(100); value = base.Read(); _testinfo.SYSTEMLOG += value + "\r\n"; for (int j = 0; j < value.Split('\n').Length; j++) { if (value.Split('\n')[j].Contains("I2C")) { value_register = value.Split('\n')[j].Split(':')[1].Trim(); ADC_RX_Point3 = Convert.ToDouble(HexToDec(value_register).ToString()); _testinfo.SYSTEMLOG += "ADC_RX_Point3 = " + ADC_RX_Point3 + "\r\n"; } } //Tính Slope-P2; Slope-P1; Offset Slope_P2 = Calculate_Slope_Offset_Polynomial(2, ADC_RX_Point1, ADC_RX_Point2, ADC_RX_Point3, RX_Power1, RX_Power2, RX_Power3); _testinfo.SYSTEMLOG += "Slope_2 DEC =" + Slope_P2 + "\r\n"; Slope_P2 = Convert_SlopeP2_RxToHex(float.Parse(Slope_P2)); Slope_P1 = Calculate_Slope_Offset_Polynomial(1, ADC_RX_Point1, ADC_RX_Point2, ADC_RX_Point3, RX_Power1, RX_Power2, RX_Power3); _testinfo.SYSTEMLOG += "Slope_1 DEC =" + Slope_P1 + "\r\n"; Slope_P1 = Convert_SlopeP1_RxToHex(float.Parse(Slope_P1)); Offset = Calculate_Slope_Offset_Polynomial(0, ADC_RX_Point1, ADC_RX_Point2, ADC_RX_Point3, RX_Power1, RX_Power2, RX_Power3); _testinfo.SYSTEMLOG += "Offset DEC =" + Offset + "\r\n"; Offset = Convert_Offset_RxToHex(float.Parse(Offset)); _testinfo.SYSTEMLOG += "--\r\n"; _testinfo.SYSTEMLOG += "Slope_2 =" + Slope_P2 + "\r\n"; _testinfo.SYSTEMLOG += "Slope_1 =" + Slope_P1 + "\r\n"; _testinfo.SYSTEMLOG += "Offset =" + Offset + "\r\n"; if (Slope_P2 != "NONE" && Slope_P1 != "NONE" && Offset != "NONE") { // Code Write Slope, Offset đến GN25L98 _testinfo.SYSTEMLOG += "Thực hiện Write Slope & Offset to EEPROM\r\n"; //MessageBox.Show(Slope_P2.Substring(0, 2)); Write_To_Register_COM("e2", Slope_P2.Substring(0, 2)); Thread.Sleep(delay); //MessageBox.Show(Slope_P2.Substring(2, 2)); Write_To_Register_COM("e3", Slope_P2.Substring(2, 2)); Thread.Sleep(delay); //MessageBox.Show(Offset.Substring(0, 2)); Write_To_Register_COM("e4", Slope_P1.Substring(0, 2)); Thread.Sleep(delay); //MessageBox.Show(Offset.Substring(2, 2)); Write_To_Register_COM("e5", Slope_P1.Substring(2, 2)); Thread.Sleep(delay); //MessageBox.Show(Slope_P2.Substring(0, 2)); Write_To_Register_COM("e6", Offset.Substring(0, 2)); Thread.Sleep(delay); //MessageBox.Show(Offset.Substring(2, 2)); Write_To_Register_COM("e7", Offset.Substring(2, 2)); Thread.Sleep(delay); base.Read(); base.WriteLine("laser power --rxread"); Thread.Sleep(100); Power_DDMI = base.Read().Split('=')[2].Trim().Substring(0, 5); _testinfo.SYSTEMLOG += "Power_DDMI = " + Power_DDMI + "\r\n"; if (Convert.ToDouble(Power_DDMI) > -11 && Convert.ToDouble(Power_DDMI) < -9) { _testinfo.SYSTEMLOG += "[OK] Hoàn thành Calibration RX Power.\r\n"; Calibration_RX_Result = true; _testinfo.CALIBDDMIRESULT = Parameters.testStatus.PASS.ToString(); } else { _testinfo.SYSTEMLOG += "[FAIL] Lỗi Calibration RX Power.\r\n"; Calibration_RX_Result = false; _testinfo.CALIBDDMIRESULT = Parameters.testStatus.FAIL.ToString(); } break; } else { continue; } } } catch (Exception ex) { _testinfo.SYSTEMLOG += ex.ToString() + "\r\n"; _testinfo.SYSTEMLOG += "[ERROR] Lỗi trong quá trình RX Calibration.\r\n"; //MessageBox.Show(Ex.ToString()); Calibration_RX_Result = false; _testinfo.CALIBDDMIRESULT = Parameters.testStatus.FAIL.ToString(); } return(Calibration_RX_Result); }