EMS 能源管理系统告警模块详细设计_第1页
EMS 能源管理系统告警模块详细设计_第2页
EMS 能源管理系统告警模块详细设计_第3页
EMS 能源管理系统告警模块详细设计_第4页
EMS 能源管理系统告警模块详细设计_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

PAGE告警模块详设说明书V1.00文件编号生效日期受控编号保密级别版本号修改次数总页数正文附录编制审核批准(版权所有,翻版必究)评审记录对《告警模块详设说明书V1.00》的评审意见:上述问题修改验证后,由验证后,本文件即可发布。评审人员签字:问题修改验证结果:完成。验证人签字:时间:年月日变更日志编号版本修改内容修改人修改日期1V0.01初稿目录TOC\o"2-3"\h\z\t"标题1,1"87951引言 170381.1编写目的 1265441.2背景 1315441.3参考资料 1152201.4定义、首字母缩写词和缩略语 183751.5概述 2316732总体设计 351882.1需求规定 3123162.1.1功能边界 3178202.1.2非功能性要求 3157932.2功能模块划分 342602.2.1MMI_JK规约(MMI_JK.dll) 3305642.2.2NtsDIIU管道服务dll(NtsDIIU.dll) 3124922.2.3平台基础服务(TSServerU.exe) 3220942.2.4内存数据库(Redis) 3247102.2.5告警服务端(TSAlarmServerU.exe) 3168522.2.6短信邮件告警入库dll(PushAlarmDll.dll) 334522.2.7告警客户端dll(AClientDll.dll) 3198412.2.8告警客户端(AlarmClientU.exe) 339443模块设计 4171533.1MMI_JK规约(MMI_JK.dll) 4324443.1.1功能描述 4165523.1.2数据流程 4290533.1.3接口定义 4146893.1.4配置文件定义 5225233.1.5日志定义 5186933.1.6性能边界定义 5164663.1.7安全性设计 5103353.1.8数据结构定义 5160783.2NtsDIIU管道服务dll(NtsDIIU.dll) 598393.2.1功能描述 5273133.2.2数据流程 5308913.2.3接口定义 566373.2.4配置文件定义 65833.2.5日志定义 671103.2.6性能边界定义 6293963.2.7安全性设计 6290543.2.8数据结构定义 6242383.3平台基础服务(TSServerU.exe) 6157443.3.1功能描述 6184563.3.2数据流程 793673.3.3接口定义 715253.3.4配置文件定义 7312903.3.5日志定义 775473.3.6性能边界定义 761423.3.7安全性设计 736693.3.8数据结构定义 74113.4内存数据库(Redis) 8197343.4.1功能描述 8169473.4.2数据流程 8178893.4.3接口定义 853063.4.4配置文件定义 8209143.4.5日志定义 8145123.4.6性能边界定义 868403.4.7安全性设计 875583.4.8数据结构定义 842453.5告警服务端(TSAlarmServerU.exe) 988153.5.1功能描述 9213753.5.2数据流程 9218623.5.3接口定义 9301083.5.4配置文件定义 10132293.5.5日志定义 10112793.5.6性能边界定义 10161563.5.7安全性设计 1055143.5.8数据结构定义 1058703.6短信邮件告警入库dll(PushAlarmDll.dll) 10108583.6.1功能描述 10307033.6.2数据流程 10191043.6.3接口定义 10264333.6.4配置文件定义 11163723.6.5日志定义 1192253.6.6性能边界定义 11326223.6.7安全性设计 1181333.6.8数据结构定义 1127843.7告警客户端dll(AClientDll.dll) 11312623.7.1功能描述 1171443.7.2数据流程 1193243.7.3接口定义 12194323.7.4配置文件定义 13128783.7.5日志定义 13186203.7.6性能边界定义 13184313.7.7安全性设计 13256653.7.8数据结构定义 13236293.8告警客户端(AlarmClientU.exe) 13319713.8.1功能描述 13295383.8.2数据流程 13286223.8.3接口定义 13247693.8.4配置文件定义 1424223.8.5日志定义 14210183.8.6性能边界定义 14203723.8.7安全性设计 14127793.8.8数据结构定义 1460844系统安全设计 16102524.1应用系统安全性设计 16144464.2数据存储安全性设计 16告警模块详细设计说明书V1.00PAGE161引言1.1编写目的本文档是根据NTS-EMSV1.40告警相关模块进行了分析讨论给出了详细概要设计说明书。通过了解该相关程序的功能需求,可以更好的为系统其他模块提供相关帮助。本文档面向的读者是:NTS-EMS能源管理系统平台软件各项目组成员。1.2背景告警服务模块,是NTS-EMS能源管理系统平台软件的一个子模块,主要负责整个平台软件的告警工作,这就要求模块具有足够的高可靠性、可复用性、可维护性,但这个模块的设计文档一直不完善,现在补充一份。1.3参考资料编号资料名称说明1《VC++深入详解》2Redis设计与实现3MMI标准通讯协议4EMS1.31数据库设计说明书(除Web)V1.0.doc51.4定义、首字母缩写词和缩略语下表列出本报告中专门术语的定义、英文缩写词的原词组和意义、项目组内达成一致意见的专用词汇,同时继承全部的先前过程中定义过的词汇。词汇名称词汇含义备注TSserverNTS-9000服务器端Mmi_jk前置与TSServer之间通讯的dll NTSDLL管道服务程序TSClientNTS-9000管道通讯客户端Redis内存数据库TSAlarmServerNTS-9000告警服务端AlarmClientNTS-9000告警客户端AClient应用程序与告警服务端通讯的dllPushAlarmDll邮件短信入库接口程序1.5概述本文档将从系统总体结构、具体模块设计说明、数据结构等方面说明系统的设计思路(数据库设计见资料4)。下面设计是基于代码理解,主要阐述和告警相关的内容。2总体设计2.1需求规定2.1.1功能边界2.1.2非功能性要求1、对于一些公共的、经常使用的代码或函数,避免频繁复制,可封装成公共类或库;2、代码中做好注释,避免无用注释的出现,以增加可维护性;3、尽量减少人工配置,增加默认属性,以增强易用性;4、代码中尽量使用标准STL的内容,以增加系统可移植性;5、做系统设计时,尽量考虑以前老版本的功能,以增加系统的兼容性。2.2功能模块划分2.2.1MMI_JK规约(MMI_JK.dll)该模块主要实现接收前置程序发过来的告警报文,进行简单处理通过NTSDLL转发给TSServerU。2.2.2NtsDIIU管道服务dll(NtsDIIU.dll)该模块主要负责提供相关接口,以便将MMI_JK传过来的报文传递给TServerU.exe处理。主要作为管道服务接口。2.2.3平台基础服务(TSServerU.exe)该模块主要是接收告警消息,处理告警信息,加入到redis消息队列。并实现一些告警实时库和历史库相关查询。2.2.4内存数据库(Redis)Redis作为内存数据库,作为中间件提供相关接口给TSServerU和TSAlarmServer访问。2.2.5告警服务端(TSAlarmServerU.exe)该模块主要实现告警相关处理,包括能耗和重大设备监控,以及推送告警信息给AlarmClient端。2.2.6短信邮件告警入库dll(PushAlarmDll.dll)该模块主要实现将推送过来的告警进行过滤入库,以便给邮件短信程序服务。2.2.7告警客户端dll(AClientDll.dll)该模块主要是与TSAlarmServer进行socket通讯,并提供一些接口供第三方程序进行告警调用。2.2.8告警客户端(AlarmClientU.exe)该模块主要是显示相关告警,并给予一定的操作给用户,例如告警状态的修改。3模块设计整个告警业务流程:1.从设备产生的告警到TSserver进行识别处理入库,再通过redis到TSAlarmServer处理推送给客户端展示。2.其他应用程序通过调用AClientDll中接口,产生告警或者恢复,TSAlarmserver通过socket通讯接收处理该告警消息3.TSAlarmServer对业务告警的处理。告警业务时序图3.1MMI_JK规约(MMI_JK.dll)3.1.1功能描述该模块与前置程序建立socket通讯,前置主要推送三遥数据和一些告警信息,对收到的相关报文进行过滤处理推送给TServerU处理。3.1.2数据流程告警流程:MMI_JK通过CSendThread::InitInstance()进行socket端口的监听,通过CClientSocket::OnAccept进行端口的连接,接收到告警信息并加入到实时消息队列m_listReceMsg,同时触发m_hSocketEvent事件对象,遍历m_listReceMsg,进行消息处理并调用NTSDLL中WriteRtdbData()接口传递给TSServer处理,并停止该事件对象。3.1.3接口定义与server直接交互(遥控)接收MMI上送的三遥数据和告警数据。名称描述参数extern"C"__declspec(dllexport)intProtocolCall(void*pData,intnDataLen)Server与MMI_JK遥控告警接口pData:ProtocolCallItem结构体nDataLen:结构体长度3.1.4配置文件定义无3.1.5日志定义默认保存到NTS-9000\log\目录下。3.1.6性能边界定义无3.1.7安全性设计无3.1.8数据结构定义typedefstruct_SocketMsgHead{ DWORDdwSyncCode;//报文头 WORDwdLen;//长度 BYTEbtType;//报文类型}SocketMsgHead;//报文头//以遥信结构体为例#defineSOCKET_MSG_GROUP_YXDATA0xd7typedefstruct_SocketGroupYxUnit{ WORDDevId; WORDId; unsignedcharValue;}SocketGroupYxUnit;//遥信单元结构体typedefstruct_SocketMsgGroupYx{ BYTE btForeNo;//源机器号 BYTEbtEndNo;//目地机器号 BYTE btRtuNo;//RTU号 WORD wdYxNum;//YX包数 WORD wdYcNum;//YC包数 WORD wdYmNum;//YM包数 SocketGroupYxUnit YxUnit[1];}SocketMsgGroupYx;//其他告警结构体类似3.2NtsDIIU管道服务dll(NtsDIIU.dll)3.2.1功能描述该模块主要负责提供相关接口,以便将MMI_JK传过来的报文传递给TServerU.exe处理。3.2.2数据流程MMI_JK调用NtsDllU中WriteRtdbData接口,参数为相关窗口句柄(TSServerU.exe)和告警buf,然后NtsDllU进行相关处理,并调用winapi中SendMessage()向TSServerU.exe发送指定的消息,消息为WM_RDBDATA。3.2.3接口定义与MMI_JK的交互接收MMI上送的三遥数据和告警数据。名称描述参数AFX_EXT_APIBOOLWINAPIWriteRtdbData(HWNDhWnd,unsignedchar*buf,intlength)调用写实时库接口hWnd:窗口句柄Buf:报文Length:报文长度与TSServerU.exe的交互向TSServerU.exe发送MMI上送的三遥数据和告警数据。名称描述参数WINUSERAPILRESULTWINAPISendMessageW(__inHWNDhWnd,__inUINTMsg,__inWPARAMwParam,__inLPARAMlParam);调用写实时库接口hWnd:窗口句柄Msg:消息类型wParam:指定附加的消息特定信息。

IParam:指定附加的消息特定信息。充当其他应用程序和TSClient中介名称描述AFX_EXT_APIHANDLEWINAPIOpenRealDataPipe(BOOLbRetry=TRUE);打开与实时数据库的管道AFX_EXT_APIvoid*WINAPIGetMessage_RecordOfSql(HANDLEhRealDataPipe,CStringstrSql)从磁盘数据库查询数据AFX_EXT_APIvoid*WINAPIGetNetMessage(HANDLEhPipe,BYTE*pWrite,DWORDcbWrite)保存到实时数据库WINBASEAPIBOOLWINAPICloseHandle(__inHANDLEhObject);关闭管道连接3.2.4配置文件定义无3.2.5日志定义默认保存到NTS-9000\log\目录下。3.2.6性能边界定义无3.2.7安全性设计无3.2.8数据结构定义无3.3平台基础服务(TSServerU.exe)3.3.1功能描述该模块主要是接收告警消息,处理告警信息,加入到redis消息队列。并实现一些告警实时库和历史库相关查询。3.3.2数据流程该模块主要是接收告警消息,处理告警信息,加入到redis消息队列。并实现一些告警实时库和历史库相关查询。TSServer通过消息映射函数OnRtdbData()将收到的消息放入到消息队列m_listReceMsg。ReceMsgProcess遍历m_listReceMsg消息队列,判断相关告警信息,加入消息队列m_listTransferMsg。TransferMsgToAlarmSrv遍历消息队列m_listTransferMsg,判断相关告警信息,放入消息队列m_listRealAlarm。SendAlarmItemToRedis遍历m_listRealAlarm队列,组包,通过调用SendMessageToMsmq接口将告警信息加入redis,队列名为:AlarmInfoData。告警恢复在redis进程存在的情况下,直接通过SendAlarmItemToRedis将恢复信息写入到redis告警队列中去,不写入到m_listTransferMsg队列中去。Redis进程不在的情况:ReceMsgProcess遍历m_listReceMsg消息队列,判断相关告警信息,加入消息队列m_listTransferMsg,包括恢复的告警信息。与此同时SendAlarmItemToRedis会周期性的请求连接redis一旦连接成功,就会遍历m_listRealAlarm和m_listAlarmNoSTA队列,再将告警信息写入到redis中去。Server自己产生的告警:越限量告警:CProcessThread类通过获取点位当前实时数据,上一次越限状态,越限量配置,比较判断是否越限,越限将告警信息添加到m_listTransferMsg队列。网络节点告警:CClientManager类OnBroken接受TSClient断开的消息,并根据断开的pClient找到相关具体信息并将告警信息添加到m_listTransferMsg队列。前置退出告警:CProcessThread类20秒检测一把是否退出,比较前置最后接受到消息的时间和现在时间比较是否超过限制的时间(比如120s),超过120s就将告警信息添加到m_listTransferMsg队列。前置恢复:server收到对应前置信息,通过SetForeMachineRun更新前置在线信息,并将恢复信息写入到redis。遥控流程:TSVIEW端登录成功打开遥控对话框时,会触发TSserver中CControlPipe中相关事件(具体怎么触发的不太清楚,好像是走的CDlgControl::PreTranslateMessage函数里面代码),建立ControlPipe和Client的连接,新建带有相关pipe信息的CCtrlThread的对象,而该对象初始化中会周期性得等待管道返回过来的消息,以便产生相关告警信息,同时将该对象m_pCtrlThreadList队列中去。合闸操作会将对应的信息通过GetNetMessage接口传给server,CCtrlThread对象通过GetNetMessage取到相关遥控信息通过YkTextDump函数产生预校验告警同时CCtrlSocketInteractThread类会定时判断m_pCtrlThreadList是否为空,不为空的话,如果收到与检验命令,会通过接口GetProcAddress中调用MMI_JK中映射函数ProtocolCall,并将遥控信息通过CSendThread::SendSocketMsg发送给前置,后续告警信息和一般告警流程类似。退出操作和合闸操作类似,会产生撤销告警,并销毁CCtrlThread对象。3.3.3接口定义与server直接交互(遥控)接收MMI上送的三遥数据和告警数据。名称描述参数WINBASEAPIFARPROCWINAPIGetProcAddress(__inHMODULEhModule,__inLPCSTRlpProcName);Server与MMI_JK遥控告警接口HMODULEhModule,//DLL模块句柄LPCSTRlpProcName//函数名3.3.4配置文件定义无3.3.5日志定义默认保存到NTS-9000\log\目录下。3.3.6性能边界定义无3.3.7安全性设计无3.3.8数据结构定义MMI_JK规定中的结构体告警结构体:typedefstruct_AlarmItemDef{TCHARalarmID[37]; //告警IDBYTEgroupID1; //分组ID1BYTEgroupID2; //分组ID2BYTEgroupID3; //分组ID3addbychenxu20160301WORDalarmType; //告警类型TCHARalarmTypeName[33]; //告警类型名称BYTEalarmLevel; //告警等级TCHARalarmSource[33]; //告警来源BYTEalarmObjType; //告警对象类型1-节点2-控制对象3-模拟量4-开关量5-自定义6-区域7业态8-回路WORDprojectID; //工程IDWORDsystemID; //子系统IDintalarmObjID; //告警对象IDintdevID; //设备IDintstationID; //厂站IDTCHARalarmObjName[65]; //告警对象名称TCHARdevName[65]; //设备名称TCHARstationName[65]; //场站名称TCHARalarmContent[257]; //当前告警内容//chenxumodify20160616扩展告警内容TCHARprojectName[65]; //工程名称BYTErtAlarm; //状态标志0-不记录状态1-记录状态BYTEstatus; //告警状态time_talarmTime; //告警时间time_tcontentTime; //最新内容时间intreserve1; //预留intreserve2; //预留doublereserve3; //预留doublereserve4; //预留TCHARreserve5[33]; //预留//针对禄口机场智能照明的相关需求修改,用来保存操作人的用户名,ADDbyCHENAJ20150528TCHARreserve6[33]; //预留//针对禄口机场智能照明的相关需求修改,用来保存操作人的用户信息,ADDbyCHENAJ20150528}AlarmItemDef;3.4内存数据库(Redis)3.4.1功能描述Redis作为内存数据库,作为中间件提供相关接口给TSServerU和TSAlarmServer访问。3.4.2数据流程TSServerU.exe通过接口SendMessageToMsmq将告警信息放入到redis队列,TSAlarmServerU.exe调用RecvMessageFromMsmq取队列名为AlarmInfoData中告警消息。3.4.3接口定义(1)softbus对外交互接口名称描述键值virtualintRecvMessageFromMsmq(char*msmqname,unsignedchar**lpData);从redis接收数据AlarmInfoDatavirtualintSendMessageToMsmq(char*msmqname,unsignedchar*lpData,intnLength);往redis写入数据AlarmInfoData3.4.4配置文件定义无3.4.5日志定义默认保存到NTS-9000\redis\目录下。3.4.6性能边界定义无3.4.7安全性设计无3.4.8数据结构定义无3.5告警服务端(TSAlarmServerU.exe)3.5.1功能描述告警服务端主要是接收处理告警信息推送给AlarmClient,告警信息来源有:处理TSServerU.exe推送过来的告警信息、AClientDllsocket送过来的告警信息和自身对业务告警处理。3.5.2数据流程从设备产生的告警到TSserver进行识别处理入库,再通过redis到TSAlarmServer处理推送给AClientDll.dll。2.告警类型主要有参照表TB_ALARMTYPE中TYPE<1000的相关告警其他应用程序直接调用AClient.dll接口,与TSAlarmserver进行socket通讯。Socket连接:默认监听端口号0x3002,获取与套接口相连的客户端信息,放入队列m_connectionList中。3.TSAlarmServer对业务告警的处理。告警类型主要有参照表TB_ALARMTYPE中TYPE>1000的相关告警,主要是通过CEnergyAlarmThread和CMarjorDeviceAlarmThread两个类完成的,能耗告警监测主要由类CEnergyAlarmThread完成,重大设备告警监测主要由类CMarjorDeviceAlarmThread完成。能耗监测:每10分钟检测天气服务器状态每小时20分钟时间点进行小时诊断:对设备能耗进行总分平衡诊断每天0:20分进行天诊断:对设备能耗进行总分平衡和能耗异常诊断每天1:20分进行月诊断:对设备能耗进行总分平衡,能耗异常和定额诊断重大设备:每天10、15、30、小时、天(2:21)、月(1号3点),根据不同的时间类型,对关联的重大设备进行诊断。3.5.3接口定义(1)TSAlarmServer消息处理接口名称描述参数WINUSERAPIBOOLWINAPIPostThreadMessageW(__inDWORDidThread,__inUINTMsg,__inWPARAMwParam,__inLPARAMlParam);将消息放入指定线程消息队列的接口idThread:线程标识符Msg:消息类型wParam/lParam:制定消息特定信息WINUSERAPIBOOLWINAPIGetMessageW(__outLPMSGlpMsg,__in_optHWNDhWnd,__inUINTwMsgFilterMin,__inUINTwMsgFilterMax);从消息队列中接收消息的接口lpMsg:指向MSG结构的指针Hwnd:窗口句柄wMsgFilterMin(max):指定被检索的最小(大)消息值的整数。3.5.4配置文件定义无3.5.5日志定义默认保存到NTS-9000\log\目录下。3.5.6性能边界定义无3.5.7安全性设计无3.5.8数据结构定义structDetectItem{ intdevId;//设备ID BYTEY3Type;//三遥类型 intY3ID;//三遥ID intalarmType;//告警类型 intObjectType;//对象类型 intObjectId;//对象ID TCHARObjectName[128];//对象名字};//主要过滤生成转译告警和业务告警用的结构体structAlarmType{ intm_iAlarmType; intm_iGroupId1; intm_iGroupId2; intm_iGroupId3; intm_iAlarmLevel; CStringm_cstrName;};structAlarmInfo{ intm_iAlarmType; intm_iGroupId1; int m_iGroupId3; intm_iAlarmLevel; CStringm_cstrName; intm_iIsRealAlarm;};//用作是否加载实时库过滤的结构体3.6短信邮件告警入库dll(PushAlarmDll.dll)3.6.1功能描述该模块主要实现将推送过来的告警进行过滤入库,以便给邮件短信程序服务。3.6.2数据流程该模块主要负责处理TSAlarmServer传过来的告警,根据不同的告警类型(平台告警和业务告警)插入到不同的数据库(TE_SMSRECORD和TE_MAILRECORD),邮件短信程序再从对应的数据库中将告警信息取出。3.6.3接口定义(1)接收告警推送的接口名称描述参数extern"C"ACLIENTDLL_APIBOOLAPIENTRYPushAlarmItem(constAlarmItemDef&alarm,sourceTypesourceFrom);告警推动接口AlarmItemDef:告警结构体sourceType:告警来源3.6.4配置文件定义无3.6.5日志定义默认保存到NTS-9000\log\目录下。3.6.6性能边界定义无3.6.7安全性设计无3.6.8数据结构定义//告警推送信息结构体typedefstruct_AlarmPushItemDef{ WORD alarmType; //告警类型 int pushType; //推送方式:Email推送:短信推送 TCHAR userName[50]; //推送人姓名 TCHAR phoneNum[11]; //推送人电话 TCHAR mailAdrress[30]; //推送人邮箱}AlarmPushItemDef;//推送方式enumpushAlarmType{ mailPush=1, smsPush=2};//告警来源enumsourceType{ platType=1,//平台告警 applicationType=2//业务告警};3.7告警客户端dll(AClientDll.dll)3.7.1功能描述该模块主要是与TSAlarmServer进行socket通讯,默认端口号:0x0230,并提供一些接口供第三方程序进行告警调用。3.7.2数据流程AClientDll与TSAlarmServer建立socket连接,AClientDll接收TSAlarmServer传过来告警信息并做相关处理,线程SocketThreadProc收到socket信息后,通过回调函数进行相关处理,再通过PostThreadMessage通知工作者线程WorkerThread处理,工作者线程处理完后,通知界面更新。回调函数有3个:主要检测是否产生新的告警、是否有告警状态变化和是否TSAlarmServer与AClient处于连接状态。消息指针类型:OnNewAlarm、OnAlarmStatusChanged和OnMsg,对应AlarmClient中回调函数AddRealAlarmItem、AlarmStatusChange和MsgManage。2.第三方程序直接调用Aclient.dll中AddRealAlarm(有状态)/AddRealAlarmEvent(无状态),通过socket将告警信息发给TSAlarmServer,TSAlarmServer经过一定处理后(存实时库历史库)再通过socket传给Aclient.dll,线程SocketThreadProc收到socket信息后续处理和1一致。3.7.3接口定义(1)AClient与第三方应用程序接口名称描述参数extern"C"ACLIENTDLL_APIBOOLAPIENTRYAddRealAlarm(constAlarmItemDef&alarm);产生实时告警接口(有状态)AlarmItemDef:告警结构体extern"C"ACLIENTDLL_APIBOOLAPIENTRYAddRealAlarmEvent(constAlarmItemDef&alarm);产生实时告警接口(无状态)AlarmItemDef:告警结构体(1)AClient与AlarmClient交互名称描述参数extern"C"ACLIENTDLL_APIBOOLAPIENTRYInitAClient();初始化工作,触发线程SocketThreadProc,监听接收socket消息extern"C"ACLIENTDLL_APIvoidAPIENTRYExitAClient()退出工作,清理线程和相关实时链表extern"C"ACLIENTDLL_APIvoidAPIENTRYRegisterAlarmStatusFunc(OnAlarmStatusChangedpFunc);注册告警状态变化回调函数OnAlarmStatusChanged:回调函数指针类型extern"C"ACLIENTDLL_APIvoidAPIENTRYRegisterNewAlarmFunc(OnNewAlarmpFunc);注册告警产生回调函数OnNewAlarm:回调函数指针类型extern"C"ACLIENTDLL_APIvoidAPIENTRYRegisterMsgFunc(OnMsgpFunc);注册消息回调函数OnMsg:回调函数指针类型extern"C"ACLIENTDLL_APIBOOLAPIENTRYConfirmAlarm(constTCHAR*alarmID,CStringusername=_T(""));确认告警接口alarmID:告警IDUsername:处理人信息extern"C"ACLIENTDLL_APIBOOLAPIENTRYHandleAlarm(constTCHAR*alarmID,constAlarmManualInfo&manualInfo);处理告警接口alarmID:告警IDAlarmManualInfo:恢复告警操作信息extern"C"ACLIENTDLL_APIBOOLAPIENTRYUndoHandleAlarm(constTCHAR*alarmID,CStringusername=_T(""));撤销处理接口alarmID:告警IDUsername:处理人信息extern"C"ACLIENTDLL_APIBOOLAPIENTRYCancelAlarm(constTCHAR*alarmID,constAlarmManualInfo&manualInfo);取消告警接口alarmID:告警IDAlarmManualInfo:取消告警操作信息extern"C"ACLIENTDLL_APIBOOLAPIENTRYUndoCancelAlarm(constTCHAR*alarmID);撤销取消接口alarmID:告警ID3.7.4配置文件定义无3.7.5日志定义默认保存到NTS-9000\log\目录下。3.7.6性能边界定义无3.7.7安全性设计3.7.8数据结构定义无3.8告警客户端(AlarmClientU.exe)3.8.1功能描述该模块主要是对告警信息的显示,并给予一定的操作给用户,例如告警状态的修改、相关告警查询。3.8.2数据流程该模块工作主要是基于注册的3个回调函数,当AClientDll中SocketThreadProc线程接收到告警消息或者收到相关socket消息,根据相关消息类型会调用3个回调函数,回调实现交给AddRealAlarmItem、AlarmStatusChange和MsgManage三个函数。新增告警信息和告警恢复通过调用winapiPostThreadMessage和GetMessage来实现消息处理,加入到告警队列中去,并实时刷新页面。离线在线连接消息显示通过类COutputBar实时刷新组件。服务端通过回调函数填充修改相关组件并刷新刷新客户端界面。告警事件触发:接收到新的告警时,配置有该告警类型的告警触发事件,AfxBeginThread触发GenerateAlarmAction动作,进行声音播放告警次数:利用对应函数进行播放即可,循环调用几次。告警时间:利用对应函数进行播放即可,将时间参数设置成配置的时间。告警事件(告警至告警恢复或者确认):利用事件信号(无信号)控制进行循环声音播放,当接收到恢复或者确认时,设置对应事件为有信号,跳出循环,结束声音播放(比较接收到的alarmID和容器m_vAlarmShowInfo中对象CLabelItem中alarmID,找到该对象,设置该对象中的事件信号来达到声音的消除)3.8.3接口定义AlarmClient消息处理接口名称描述参数WINUSERAPIBOOLWINAPIPostThreadMessageW(__inDWORDidThread,__inUINTMsg,__inWPARAMwParam,__inLPARAMlParam);将消息放入指定线程消息队列的接口idThread:线程标识符Msg:消息类型wParam/lParam:制定消息特定信息WINUSERAPIBOOLWINAPIGetMessageW(__outLPMSGlpMsg,__in_optHWNDhWnd,__inUINTwMsgFilterMin,__inUINTwMsgFilterMax);从消息队列中接收消息的接口lpMsg:指向MSG结构的指针Hwnd:窗口句柄wMsgFilterMin(max):指定被检索的最小(大)消息值的整数。3.8.4配置文件定义无3.8.5日志定义默认保存到NTS-9000\log\目录下。3.8.6性能边界定义无3.8.7安全性设计无3.8.8数据结构定义typedefstruct_Alarm_Event{ intnID; shortalarmType; TCHARPlugIn[65];//插件dll文件名:播放音频alarm_wav.dll;tts语音alarm_tts.dll;短信alarm_sms.dll;推视频alarm_video.dll;推画面alarm_view.dll shorttrigMode; //0x01-告警发生时执行;x02-告警确认时执行;x04-告警处理时执行 shortrunMode; //1-按次数执行;-按时间执行;-执行至告警确认;-执行至告警处理; shortrunCount;//EXETYPE=1时有效 shortrunTime;//EXETYPE=2时有效,单位:秒 TCHARalarmOptions[129];//以短信为例,格式为:用户组ID1,用户组ID2,用户组ID3}AlarmEvent;//用作告警事件触发的结构体typedefstruct_Alarm_Level{ intnID;//序号 shortprojectID; shortsysID; shortlevel;//告警等级 shortpush;//0-不推送,-推送 shortpopup;//0-不弹窗,-弹窗 shortautoConfirm;//0-不自动确认,-自动确认 shortconfirmDelay;//延迟确认时间,单位:秒 intbackRGBA;//未确认的颜色 intforeRGBA; intbackRGBB; //已确认的颜色 intforeRGBB; intbackRGBC; //已处理的颜色 intforeRGBC; shortflash;//是否闪烁}Alarm_Level;//关联界面告警内容颜色显示,是否弹窗推送等相关信息typedefstruct_Alarm_Type{ intnID; BYTEgroupID1; BYTEgroupID2; shortalarmType; //告警类型ID TCHARTypeName[33];//告警类型名称 shortalarmLevel;//关联到告警等级表的ID字段}AlarmType;//用于区分具体告警类型typedefstruct_AlarmUserDef{short nUserNo; //用户IDTCHAR cUserName[65]; //用户名TCHAR cPassword[33]; //密码BYTE bStatus; //状态TCHAR cGroupIDs[1025]; //所属的组ID,如多个,用逗号隔开BYTE bType; //类型,-普通用户,-正值班长,-副值班长,-站长}AlarmUserDef;//主要读取用户ID从属于哪个组,方便用户组的追溯//组typedefstruct_AlarmGroupDef{short nGroupNo; //组IDTCHAR cGroupName[65]; //组名TCHAR cDiscription[129]; //描述字段TCHAR cGroupIDs[1025]; //所统辖的组ID,如多个,用逗号隔开}AlarmGroupDef;//用户组信息表,发送短信时用到,联到TB_ALARMEVENT表中options字段关联到组ID,递归ID下组成员//用户手机号typedefstruct_AlarmUserPhone{short nUserNo; //用户IDTCHAR cPhoneNo[16]; //用户手机号}AlarmUserPhone;4系统安全设计4.1应用系统安全性设计4.2数据存储安全性设计5补充5.1Socket编程网络程序之间通讯可以有多种方式,socket是一种简单的实现方式。Socket作为连接应用程序与网络程序的桥梁。传输层:TCP:面向连接的可靠的传输层控制协议三次握手建立双方通信,TCP提供了数据确认和重传机制实时性较低。UDP无连接、不可靠的用户数据报协议不需要建立连接直接发送实时性较高Socket通信在程序方面体现:首先需要加载套接字库,socket函数创建套接字描述符,通过bind将特定地址赋给socket,并使用listen来监听该socket,如果客户端有connect请求上来,会listen监听到,并通过accept函数来接收该请求,这样连接就建立好了,可以开始网路I/O操作了。afxsock相关接口(可能socket版本不一致导致接口有点差异(比如MFC中afxsock和winapi中winsock),但原理一致)名称描述参数intsocket(intdomain,inttype,intprotocol);创建套接字Domain:协议域Type:制定socket类型Protocol:制定协议intbind(intsockfd,conststructsockaddr*addr,socklen_taddrlen);将一个地址族中的特定地址(端口号和IP)赋给socketsockfd:即socket描述字addr:一个const

struct

sockaddr*指针,指向要绑定给sockfd的协议地址intlisten(intsockfd,intbacklog);监听socketListen:要监听的socket描述字Backlog相应socket可以排队的最大连接个数,默认为5intconnect(intsockfd,conststructsockaddr*addr,socklen_taddrlen);客户端向服务端提出连接请求第一个参数即为客户端的socket描述字,第二参数为服务器的socket地址,第三个参数为socket地址的长度intaccept(intsockfd,structsockaddr*addr,socklen_t*addrlen);接收客户端的请求第一个参数为服务器的socket描述字,第二个参数为指向struct

sockaddr*的指针,用于返回客户端的协议地址,第三个参数为协议地址的长度IntSend(constvoid*lpBuf,intnBufLen,intnFlags=0);TCP发送信息lpBuf:报文nBufLen:报文长度intReceive(void*lpBuf,intnBufLen,intnFlags=0);TCP接收信息intSendTo(constvoid*lpBuf,intnBufLen, UINTnHostPort,LPCTSTRlpszHostAddress=NULL,intnFlags=0);UDP发送消息lps

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论