在HFC+Cable Modem(以下简称CM)的网络结构中,CM的工作状态影响用户的上网体验,我们可以通过实时扫描用户的CM设备,获得在线CM的多个重要技术指标,通过专家库进行对比,对处在临界点的CM通过智能终端系统进行预警,多点故障可通过数据的汇聚分类和回溯功能确定上级设备的故障,以此类推分析故障点,就把问题消灭在萌芽之中,为网络改造和数据维护提供强大的数据依据。
以下参数是较为重要的几个参数,通过oid获得相应的参数值,获得方法参照上一边文章介绍的方法。
string receivedPowerOID = "1.3.6.1.2.1.10.127.1.3.3.1.6.";//上行接收电平 -> Opt5
string receivedNoiseOID = "1.3.6.1.2.1.10.127.1.1.4.1.5.";//上行接收信噪比-> Opt4
string CMTSDSPowerOID = "1.3.6.1.4.1.9.10.59.1.2.1.1.1."; //下行接收电平 -> Opt1
string CMTSSNRatioOID = "1.3.6.1.4.1.9.10.59.1.2.1.1.4."; //下行信噪比 -> Opt2
string CMTSUSSPowerOID = "1.3.6.1.4.1.9.10.59.1.2.1.1.2."; //上行发射电平 -> Opt3
关键的实现方法可以参考如下
public DataTable GetCMParametersFromCMTS(string mCmtsIp, string mMac, string mcmtsCommunity) //从大C获得数据的测试例子
{
DataTable dt = new DataTable();
dt.Columns.Add("CmtsIp", typeof(string));
dt.Columns.Add("CmMac", typeof(string));
dt.Columns.Add("DSPower", typeof(string));
dt.Columns.Add("USSPower", typeof(string));
dt.Columns.Add("SNRatio", typeof(string));
dt.Columns.Add("receivedPower", typeof(string));
dt.Columns.Add("receivedNoise", typeof(string));
dt.Columns.Add("CmStatus", typeof(string));
string mac = MacHexToDecimal(mMac);
Dictionary<string, string> cad = getOIDValue(mCmtsIp, cardOID + mac, mcmtsCommunity);
if (cad.Count == 0)
return null;
foreach (KeyValuePair<string, string> pair in cad)
{
if (pair.Value == "SNMP No-Such-Instance")
return null;
}
card = cad[cardOID + mac];
station = getOIDValue(mCmtsIp, stationOID + card, mcmtsCommunity)[stationOID + card];
try
{
DataRow row = dt.NewRow();
if (station.Equals("6")) //确定CM的状态为在线
{
string[] oids = { ipOID + card, interfaceOID + card, receivedPowerOID + card };
Dictionary<string, string> theGetData = getOIDValues(mCmtsIp, oids, mcmtsCommunity);
string ip = theGetData[ipOID + card];
Dictionary<string, string> theGetDataFromCM = getOIDValues(ip, new string[] { CMDSPowerOID, CMUSSPowerOID, CMSNRatioOID }, mcmtsCommunity);
DSPower = theGetDataFromCM[CMDSPowerOID];
USSPower = theGetDataFromCM[CMUSSPowerOID];
SNRatio = theGetDataFromCM[CMSNRatioOID];
interfaceNum = theGetData[interfaceOID + card];
receivedPower = theGetData[receivedPowerOID + card];
receivedNoise = getOIDValue(mCmtsIp, receivedNoiseOID + interfaceNum, mcmtsCommunity)[receivedNoiseOID + interfaceNum];
if (isNumberic(DSPower) && isNumberic(USSPower) && isNumberic(SNRatio) && isNumberic(receivedPower) && isNumberic(receivedNoise))
{
DSPower = Convert.ToString(Convert.ToDecimal(DSPower) / 10 + 60); //下行接收电平 -> Opt1
USSPower = Convert.ToString(Convert.ToDecimal(USSPower) / 10 + 60); //上行发射电平 -> Opt3
SNRatio = Convert.ToString(Convert.ToDecimal(SNRatio) / 10); //下行信噪比 -> Opt2
receivedPower = Convert.ToString(Convert.ToDecimal(receivedPower) / 10 + 60); //上行接收电平 -> Opt5
receivedNoise = Convert.ToString(Convert.ToDecimal(receivedNoise) / 10); //上行接收信噪比-> Opt4
}
row["CmtsIp"] = mCmtsIp;
row["CmMac"] = mMac;
row["DSPower"] = DSPower;
row["USSPower"] = USSPower;
row["SNRatio"] = SNRatio;
row["receivedPower"] = receivedPower;
row["receivedNoise"] = receivedNoise;
row["CmStatus"] = CmStatus("6");
dt.Rows.Add(row);
}
else
{
row["CmtsIp"] = mCmtsIp;
row["CmMac"] = mMac;
row["DSPower"] = "";
row["USSPower"] = "";
row["SNRatio"] = "";
row["receivedPower"] = "";
row["receivedNoise"] = "";
row["CmStatus"] = CmStatus(station);
dt.Rows.Add(row);
}
return dt;
}
catch
{
return null;
}
}