/*IEC61850客户端动态库源代码
/*12.07.11 去掉互斥机制 */
/*10.08.28 解决自动获取数据集中元素信息函数内存分配出错问题,解决静态解析模 */
/* 型慢的问题 */
/*10.08.05 加入自动获取数据集中元素的数据类型、长度、描述等信息的相关函数 */
/*10.05.26 加入静态解析模型文件的功能 */
/*09.05.03 对报告接收问题进行修改 */
/*08.12.17 对目录服务中对一个以上的逻辑设备不能建立报告控制块的错误进行修改 */
/*08.08.26 对报告接收问题进行修改 */
#include "client.h"
#if defined(WIN32) || defined(_WIN32_WCE)
#define MS_SLEEP(msec) { Sleep(msec); }
#define S_SLEEP(sec) { Sleep(sec * 1000); }
#else
#define MS_SLEEP(msec) { usleep(msec * 1000); }
#define S_SLEEP(sec) { sleep(sec); }
#endif
#ifdef DEBUG_SISCO
SD_CONST static ST_CHAR *SD_CONST thisFileName = __FILE__;
#endif
typedef struct
{
ST_INT cmd_term_num_va;
ST_CHAR oper_name [MAX_IDENT_LEN +1];
} MY_CONTROL_INFO;
MY_CONTROL_INFO my_control_info;
IDENT_RESP_INFO identify_response_info =
{
"SISCO",
MMSLITE_NAME,
MMSLITE_VERSION, 0,
};
MVLU_RD_FUN_INFO mvluRdFunInfoTbl[] =
{
{"", NULL}
};
MVLU_WR_FUN_INFO mvluWrFunInfoTbl[] =
{
{"", NULL}
};
ST_INT mvluNumRdFunEntries = sizeof(mvluRdFunInfoTbl)/sizeof(MVLU_RD_FUN_INFO);
ST_INT mvluNumWrFunEntries = sizeof(mvluWrFunInfoTbl)/sizeof(MVLU_WR_FUN_INFO);
MVL_CFG_INFO mvlCfg; //存放配置文件信息的结构体
INIT_INFO callingInitInfo; //存放远程调用服务端初始化信息的结构体
INIT_INFO initRespInfo; //存放远程调用服务端回应信息的结构体
ST_INT timeOut = 60; //连接超时时间
RPT_TYPEIDS rpt_typeids; //报告数据类型变量
ST_BOOLEAN init_flag = 0;
HANDLE hThread; //客户端服务线程句柄
DWORD ThreadID;
ST_BOOLEAN init_quitFlag = 1; //yhc
/*******************************************************/
/************************************************************************/
/* client_server */
/* 客户端服务线程,用于接收报告及服务器断开等信息 */
/************************************************************************/
void client_server(LPVOID pParam)
{
while(init_quitFlag)
{
doCommService();
}
}
/************************************************************************/
/*函数名: mms_init */
/*输入参数:无 */
/*返回值: 0:成功;1:失败 */
/*函数功能:mms初始化,包括读入配置信息、应用关联初始化及启动客户端服务 */
/* 线程 */
/************************************************************************/
unsigned int mms_init()
{
ST_RET ret;
/*判断是否已进行了初始化操作,若已进行了初始化,则退出*/
if (init_flag == 1)
return 1;
mvl_max_dyn.types = 1000000; /* 动态分配的数据类型最大数目*/
mvl_max_dyn.doms = 500; /* vmd域中动态分配的逻辑设备(域)最大数目*/
mvl_max_dyn.journals = 10; /* vmd域中动态分配的日志的最大数目*/
mvl_max_dyn.vmd_nvls = 10; /* vmd域中动态分配的数据集(有名变量表)最大数目*/
mvl_max_dyn.vmd_vars = 10; /* vmd域中动态分配的逻辑节点(有名变量)最大数目*/
mvl_max_dyn.dom_nvls = 500; /* dom域中动态分配的数据集(有名变量表)最大数目*/
mvl_max_dyn.dom_vars = 2000; /* dom域中动态分配的逻辑节点(有名变量)最大数目*/
mvl_max_dyn.aa_nvls = 10; /* AA域中动态分配的数据集(有名变量表)最大数目*/
mvl_max_dyn.aa_vars = 10; /* AA域中动态分配的逻辑节点(有名变量)最大数目*/
init_quitFlag = 1; //yhc
/*SISCO调试日志初始化,若不需记录SISCO调试信息,此段代码可删除*/
setbuf (stdout, NULL);
setbuf (stderr, NULL);
init_mem ();
init_log_cfg ();
ret = osicfgx ("osicfg.xml", &mvlCfg); /*将osicfg.xml中的数据读入mvlCfg结构体中,osicfg.xml为网络信息配置文件*/
if (ret != SD_SUCCESS)
return 1;
ret = mvl_start_acse (&mvlCfg); /*进行应用服务关联初始化*/
if (ret != SD_SUCCESS)
return 1;
/*初始化报告数据类型,这一步必须成功,否则不能正确接收报告*/
if((ret = rpt_typeids_find (&rpt_typeids)) != SD_SUCCESS)
return 1;
/*注册断开连接指示原语函数(该函数在服务器正常或异常断开时自动调用)*/
u_mvl_disc_ind_fun = disc_ind_fun;
/*创建客户端服务线程*/
hThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE) client_server, NULL, 0, &ThreadID);
init_flag = 1;
return 0;
}
unsigned int mms_load_OsiCfg()
{
ST_RET ret;
mvl_max_dyn.types = 100000; /* 动态分配的数据类型最大数目*/
mvl_max_dyn.doms = 500; /* vmd域中动态分配的逻辑设备(域)最大数目*/
mvl_max_dyn.journals = 10; /* vmd域中动态分配的日志的最大数目*/
mvl_max_dyn.vmd_nvls = 10; /* vmd域中动态分配的数据集(有名变量表)最大数目*/
mvl_max_dyn.vmd_vars = 10; /* vmd域中动态分配的逻辑节点(有名变量)最大数目*/
mvl_max_dyn.dom_nvls = 500; /* dom域中动态分配的数据集(有名变量表)最大数目*/
mvl_max_dyn.dom_vars = 2000; /* dom域中动态分配的逻辑节点(有名变量)最大数目*/
mvl_max_dyn.aa_nvls = 10; /* AA域中动态分配的数据集(有名变量表)最大数目*/
mvl_max_dyn.aa_vars = 10; /* AA域中动态分配的逻辑节点(有名变量)最大数目*/
mvl_end_acse();
ret = osicfgx ("osicfg.xml", &mvlCfg); /*将osicfg.xml中的数据读入mvlCfg结构体中,osicfg.xml为网络信息配置文件*/
if (ret != SD_SUCCESS)
return 1;
ret = mvl_start_acse (&mvlCfg); /*进行应用服务关联初始化*/
if (ret != SD_SUCCESS)
return 1;
return 0;
}
/************************************************************************/
/*函数名: mms_quit */
/*输入参数:无 */
/*返回值: 0:成功;1:失败 */
/*函数功能:停止客户端服务线程,释放各种资源,退出mms环境 */
/************************************************************************/
unsigned int mms_quit()
{
CLIENT_CTRL *client_ctrl;
MVL_NET_INFO *clientNetInfo;
ALL_RCB_INFO *all_rcb_info;
RCB_INFO *rcb_info;
/*如果没有进行mms初始化,则不进行退出mms环境操作*/
if (init_flag == 0)
return 1;
init_quitFlag = 0; //yhc
MS_SLEEP(500);
/*释放链表中所有还未断开连接的服务器控制体client_ctrl中的虚拟设备控制体client_vmd资源和报告控制块链表资源*/
for (client_ctrl = (CLIENT_CTRL *) list_find_last ((DBL_LNK *) head_client_ctrl_list);
client_ctrl != NULL;
client_ctrl = (CLIENT_CTRL *) list_find_prev ((DBL_LNK *) head_client_ctrl_list, (DBL_LNK *) client_ctrl ))
{
clientNetInfo = client_ctrl->clientNetInfo;
if ((all_rcb_info = (ALL_RCB_INFO *) clientNetInfo->user_info) != NULL)
{
while ((rcb_info = (RCB_INFO *) list_get_first (&all_rcb_info->rcb_info_list)) != NULL)
{
rcb_info_destroy (rcb_info);
}
chk_free (all_rcb_info);
clientNetInfo->user_info = NULL;
}
if (client_ctrl->client_vmd != NULL)
{
mvl_vmd_destroy (client_ctrl->client_vmd);
}
}
/*将所有还未断开连接的服务器的控制体client_ctrl从链表中退出,同时释放资源*/
client_ctrl = (CLIENT_CTRL *) list_get_first (&head_client_ctrl_list);
while(client_ctrl)
{
chk_free (client_ctrl);
client_ctrl = (CLIENT_CTRL *) list_get_first (&head_client_ctrl_list);
}
mvl_vmd_destroy (&mvl_vmd); /* 释放mvl_vmd结构体占用的资源*/
mvl_end_acse (); /* 结束客户端的关联应用服务*/
free_mem(); /* 释放一些残存的动态分配的资源*/
#if defined(DEBUG_SISCO)
slog_end (sLogCtrl);
#endif
CloseHandle(hThread);
init_flag = 0;
return 0;
}
/*************************************************************
没有合适的资源?快使用搜索试试~ 我知道了~
IEC61850客户端代码
共221个文件
h:125个
obj:32个
c:21个
3星 · 超过75%的资源 需积分: 50 159 下载量 115 浏览量
2018-06-26
10:57:17
上传
评论 5
收藏 3.87MB RAR 举报
温馨提示
该IEC61850客户端软件,包括服务器端建模、报告控制块、日志、定制等模块数据的读取、显示等模块。使用qt的信号槽及三态树机制实现不同对象的通信与数据的显示。通过将读取的数据存储到共享内存实现与后台程序的通信。
资源推荐
资源详情
资源评论
收起资源包目录
IEC61850客户端代码 (221个子文件)
client.c 152KB
mmsop_en.c 127KB
sclproc.c 126KB
clntobj.c 114KB
mvl_uca.c 89KB
mvl_uca.c 85KB
mvl_acse.c 81KB
sx_axs4d.c 62KB
slogipc.c 47KB
Cli_rpt.c 44KB
Cli_rpt.c 44KB
logcfgx.c 44KB
Cli_rpt.c 42KB
Mvl_obj.c 31KB
MVLOP_EN.C 25KB
mvl_objb.c 25KB
mvluleaf.c 14KB
mvl_typ2.c 13KB
mmslvar.c 9KB
event.c 6KB
reject.c 3KB
mt.dep 67B
mvl_defs.h 95KB
slog.h 61KB
ssec.h 48KB
stdtime.h 47KB
mms_vvar.h 45KB
adlc.h 42KB
stdtime_quadlib.h 42KB
stdtime_timezone_csv.h 38KB
mvl_uca.h 34KB
mms_pevn.h 33KB
mmslog.h 32KB
adlc_log.h 32KB
asn1r.h 29KB
SCL.H 27KB
sx_defs.h 24KB
glbsem.h 24KB
gensock2.h 22KB
mms_pvar.h 21KB
glbtypes.h 21KB
cosp_usr.h 20KB
clnp_usr.h 20KB
stdtime_enum_func.h 20KB
client.h 19KB
adlc_usr.h 17KB
Smem.h 17KB
acse2usr.h 16KB
tp4.h 15KB
sysincs.h 15KB
mmsintr2.h 14KB
sx_log.h 14KB
mms_def2.h 14KB
tp4api.h 14KB
mloguser.h 14KB
mms_pdom.h 14KB
tp4_encd.h 13KB
smp_usr.h 13KB
mem_chk.h 13KB
stdtime_w32.h 13KB
mms_pcon.h 12KB
acse2.h 12KB
adlc_sm.h 12KB
mms_psem.h 11KB
tp0_sock.h 11KB
mmsefun.h 11KB
sock_log.h 11KB
mms_pjou.h 10KB
mms_pvmd.h 10KB
mmsdefs.h 10KB
mms_pfil.h 10KB
mms_dfun.h 9KB
clnp.h 9KB
tp4_log.h 9KB
clnp_sne.h 9KB
rs_defs.h 9KB
mms_perr.h 9KB
mms_pprg.h 9KB
clnp_log.h 9KB
mms_err.h 9KB
smp_log.h 9KB
fkeydefs.h 9KB
mvl_acse.h 9KB
llcio.h 8KB
clntobj.h 8KB
gse_mgmt.h 8KB
Goose.h 8KB
copp_usr.h 8KB
mms_mp.h 8KB
memlog.h 8KB
mvl_log.h 8KB
cosp.h 7KB
mmsop_en.h 7KB
usermap.h 7KB
stdtime_stdint.h 7KB
mmsop_en.h 7KB
cosp_log.h 7KB
stdtime_config.h 7KB
STR_UTIL.H 7KB
ssleLog.h 6KB
共 221 条
- 1
- 2
- 3
资源评论
- youwuleon2019-10-30只是一个动态库源码
- wang恒2022-08-01只是一个动态库源码 #毫无价值
- laowang196605042021-01-24学习学习了
- hgkkuhqw234642018-07-04代码基本可用,不过遇到了版本问题无法运行。。。建议用vs2015
woshimiuwen
- 粉丝: 0
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功