你好,欢迎来到电脑编程技巧与维护杂志社! 杂志社简介广告服务读者反馈编程社区  
合订本订阅
 
 
您的位置:杂志经典 / 网络与通信
异种基站告警系统的融合(五)
 

2)数据分析

数据分析模块的主要功能是不断地循环读取包数据缓冲区的内容,按规则分离出告警信息,将这些信息保存到数据库表AlarmLog中。

核心代码如下:

private void MessageDecode()

{

//信息包解码

for(;;)

{

if( MessagePacket.Count>0 )

{

try

{

Message m = (Message)MessagePacket[0];

if (savePacket)

{

    //保存包数据到文件

    string headString = "BSCType:" + m.BSCType + "  BSC:" + m.BSC + "  Time:" + System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "  PacketLength:" + m.length.ToString() + "\r\n";

    string outString = "";

    for (int i = 0; i < m.length; i++)

        outString += m.buffer[i].ToString("x2") + " ";

    outString += "\r\n";

    FileStream aFile = new FileStream("Log\\PacketLog" + System.DateTime.Now.ToString("yyyyMMdd") + ".txt", FileMode.Append);

    StreamWriter sw = new StreamWriter(aFile);

    sw.WriteLine(headString);

    sw.WriteLine(outString);

    sw.Close();

}

 

//解码

if (m.BSCType == "HuaWei")

{

    if (m.length >= 165)

        huaweiAlarmDecode(m.buffer, m.length, m.BSC);//华为通信包解码

}

else

    motoAlarmDecode(m.buffer, m.length);//MOTOROLA通信包解码

MessagePacket.Remove(m);

}

catch (Exception ex)

{

    SaveError("MessageDecode", ex);//保存错误信息

}

}

Thread.Sleep(500);

}

}

 

private string huaweiAlarmDecode(byte[] buffer, uint length, string BSC)

{

//华为告警信息包解码

string serialNo="", moduleID, siteID, siteName, siteEnName, alarmID, alarmName, alarmType, alarmLevel, alarmDate ;

uint restoreFlag, temp, startPos=0, i;

try

{

int forFlag = 1;

while (forFlag == 1)

{

//告警信息长度

if (buffer[startPos + 28] == 0x73 && buffer[startPos + 29] == 0x00)

{

//告警流水号

serialNo = "0x" + buffer[startPos + 144].ToString("x2") + buffer[startPos + 143].ToString("x2") + buffer[startPos + 142].ToString("x2") + buffer[startPos + 141].ToString("x2");

temp = Convert.ToUInt32(serialNo, 16);

serialNo = temp.ToString();

...

if (alarmType == "1")

{

    //播放告警声音

    dr["Flag"] = AlarmSound(dr);

}

AddNewRecord("HuaWei", dr);

}

startPos += 30;

for (i = startPos; i < length; i++)

{

if (buffer[i] == 0xff && buffer[i + 1] == 0xff && buffer[i + 2] == 0xff && buffer[i + 3] == 0xff)

{

    startPos = i - 20;//继续下条告警

    break;

}

}

if (i >= length)

forFlag = 0;//退出

}

}

catch (Exception ex)

{

SaveError("huaweiAlarmDecode", ex);//保存错误信息

serialNo = ex.Message;

}

 

return serialNo;

}

 

3)声音告警

声音告警模块的功能是根据预先设置的条件,播放对应的告警录音波形文件。

核心代码如下:

private int AlarmSound(DataRow dr)

{

string waveFile, alarmLevel, alarmName;

DateTime startTime;

int i,returnFlag=0, reCount=0;

bool findFlag=false;

.....

try

{

returnFlag = Convert.ToInt32(dr["Flag"]);

alarmName = dr["告警名称"].ToString().Trim();

startTime = Convert.ToDateTime(dr["告警时间"].ToString()).AddMinutes(0 - Convert.ToInt32(intervalTime));

 

if (waveFile != null && waveFile != "")

{

    //告警级别声音

    FileInfo file = new FileInfo(waveFile);

    if (file.Exists)

    {

        SoundPlayer player = new SoundPlayer();

        player.SoundLocation = waveFile;

        player.Load();//装载播放器

        for (i = 0; i < reCount; i++)

        {

            player.PlaySync();//播放声音

        }

        player.Dispose();

    }

}

FileInfo fileAlarmName = new FileInfo(alarmName + ".wav");

if (fileAlarmName.Exists)

{

    //告警名称声音

    SoundPlayer player = new SoundPlayer();

    player.SoundLocation = alarmName + ".wav";

    player.Load();//装载播放器

    for (i = 0; i < reCount; i++)

    {

        player.PlaySync();//播放声音

    }

    player.Dispose();

}

returnFlag = 0 - returnFlag;    //播放声音后返回负数, 否则返回正数

}

}

catch (Exception ex)

{

    SaveError("AlarmSound", ex); //保存错误信息

}

return returnFlag;

}

  推荐精品文章

·2024年12月目录 
·2024年11月目录 
·2024年10月目录 
·2024年9月目录 
·2024年8月目录 
·2024年7月目录 
·2024年6月目录 
·2024年5月目录 
·2024年4月目录 
·2024年3月目录 
·2024年2月目录 
·2024年1月目录
·2023年12月目录
·2023年11月目录

  联系方式
TEL:010-82561037
Fax: 010-82561614
QQ: 100164630
Mail:gaojian@comprg.com.cn

  友情链接
 
Copyright 2001-2010, www.comprg.com.cn, All Rights Reserved
京ICP备14022230号-1,电话/传真:010-82561037 82561614 ,Mail:gaojian@comprg.com.cn
地址:北京市海淀区远大路20号宝蓝大厦E座704,邮编:100089