⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dpf_calpferr.cpp

📁 电力系统潮流程序adsfasdfasfd
💻 CPP
字号:
/**************************************************************
* 所属模块 : dpflow
* 文件路径 : pas/dpflow
* 文 件 名 : dpf_calpferr.cpp
* 文件功能 : 统计潮流计算误差
* 继承关系 :
* 操作系统 : PC & UNIX
* 备    注 :
* 历史记录 :
*   时间            版本                作者             原因
*===============================================================
* 2004年04月08日      1.0               pas              created
***************************************************************/

#include "pub_ctx.h"
#include "dpf_pub.h"
#include "dpf_fun.h"
#include "system.h"
#include "scada_api/scada_public.h"
#include "../comm/GetAllRec.h"

#ifndef  _WINDOWS32
  #ifdef _ALPHA
    #include <sys/uswitch.h>
  #endif
#endif

#ifndef _DEFINE_HIDBVAR_AS_GLOBAL_
#define _DEFINE_HIDBVAR_AS_GLOBAL_
#endif
#include "dpf_pas.h"

void get_rtnet_result();


int main(int argc, char**argv)
{
#ifdef _ALPHA
  long uval = uswitch(USC_GET, 0);
  uval = uswitch(USC_SET, uval | USW_CORE);
  if (uval < 0)    perror("uswitch");
#endif

  CContext::SetContextNo(argc, argv,AC_REALTIME_NO);
  CCommArgs::Set(argc,argv,AP_PAS_DPF);
  if (AP_PAS_DPF != CCommArgs::AppNo()/10*10)
  {
    printf ("++++++++++ appno error, valid no is 2120 -- 2129, please check your input again!\n");
    return 0;
  }

  int    app_no = CCommArgs::AppNo();
  string app_name = CAppMap::GetSdbAppName(app_no);
  int    i(0), src_type(0);
  
  for (i=1; i<argc-1; ++i)
  {
    if(strcmp(argv[i],"-type")==0)
    {
      src_type = atoi(argv[i+1]);
      break;
    }
  }
  printf ("appno = %d\t appname = %s\t type = %d\n", app_no, app_name.c_str(), src_type);
  if (src_type < 0 || src_type > 4)
  {
    printf ("Error: para for -type is error! type = %s\n", argv[i+1]);
    exit(0);
  }
  
  dpf_access_db();
  if (0 == src_type) get_rtnet_result();
  dpf_cal_pferr_();

  char  msg[256];
  int   pnt = pferr1_->TOTALPNT; 
  float err = pferr1_->TOTALERR;  
  printf ("pnt=%d,err=%f\n",pnt,err); 
    
  strcpy (msg, "完成误差统计");
  
  ODB::CTableOp dpf_para(app_no, PARA_DPFLOW_EMS_NO);
  dpf_para.TableModify("totalpnt", (const char*)&pnt, sizeof(int)); 
  dpf_para.TableModify("totalerr", (const char*)&err, sizeof(float)); 
  dpf_para.TableModify("runmsg", msg, 80);

  short ctx_no(0);
  CContext::GetContextNo(ctx_no);
  string fam_name = merge_famnm_with_ctx(ctx_no);
  ListRefresh ("PNTERR", app_name, fam_name);

//
  int  k,hostid;
  char hostnm[32], usernm[32];

  strcpy(hostnm,CCommArgs::NodeName().c_str());
  strcpy(usernm,CCommArgs::UserName().c_str());

  NET_ODB::CTableNet table_node_info(PUBLIC, MNG_NODE_INFO_NO);
  struct NodeInfo
  {
    int  node_id;
    char node_name[40];
  };

  CBuffer get_result;
  if(table_node_info.TableGet("node_id, node_name", get_result) >= 0)
  {
    NodeInfo *node_info_ptr = (NodeInfo*)get_result.GetBufPtr();
    k = get_result.GetLength()/sizeof(NodeInfo);
    for (i=0; i<k; ++i)
    {
      if(0 == strcmp(node_info_ptr[i].node_name, hostnm))
      {
        hostid = node_info_ptr[i].node_id;
        break;
      }
    }
  }

  get_dpfop_msg (msg, app_no);

  if (pferrmom_->LV$ERCASE < MX$ERCASE) pferrmom_->LV$ERCASE++;
  k = pferrmom_->LV$ERCASE-1;
  pferr1_->TIME_ERCASE[k]   = time(NULL);
  pferr1_->ERR_ERCASE[k]    = err;
  pferr1_->HOSTID_ERCASE[k] = hostid;
  strncpy(pferr1_->HOSTNM_ERCASE[k],hostnm,HOSTNM_ERCASE$CHAR$SIZE);
  strncpy(pferr1_->USERNM_ERCASE[k],usernm,USERNM_ERCASE$CHAR$SIZE);
  strncpy(pferr1_->OPMSG_ERCASE[k],msg,OPMSG_ERCASE$CHAR$SIZE);
  
  SendAppChangeDataMsg(app_no);
  return 0;

}

  
struct VValue_DpfErr
{
        int id;
        float v_value;
	int v_bdfg;
        float v_value_cal;
};
const char* BS_FLD = "bs_id, v_value,v_bdfg,v_value_cal";

struct PqiValue_DpfErr
{
        int id;
        float p_value;
	int p_status;
        float p_value_cal;
        float q_value;
	int q_status;
        float q_value_cal;
        unsigned char open_fg;
};
const char* GN_FLD = "gn_id, p_value, p_status, p_value_cal, q_value, q_status, q_value_cal, open_fg";
const char* LD_FLD = "ld_id, p_value, p_status, p_value_cal, q_value, q_status, q_value_cal, open_fg";

struct PqiValuePid_DpfErr : PqiValue_DpfErr
{
        int parent_id;
};
const char* DOT_FLD = "acln_dot_id, p_value, p_status, p_value_cal, q_value, q_status, q_value_cal, acln_id, open_fg";
const char* TRWD_FLD = "trwd_id, p_value, p_status, p_value_cal, q_value, q_status, q_value_cal, tr_id, open_fg";

void get_rtnet_result()
{
	int app_no=AP_PAS_RTNET;
        vector<VValue_DpfErr> bs_info_vec;
        GetAllRec<NET_ODB::CTableNet>(app_no, BS_DEVICE_NO, BS_FLD, bs_info_vec);
        for(int nBs = 0; nBs < bs_info_vec.size(); ++nBs)
        {
                int nd_sub = ipmap_ -> NETSUB_BSID[bs_info_vec[nBs].id % 1000000 - 1] - 1;
                if(nd_sub >= 0)
                {
			netmon_->DTSQ_ND[nd_sub].VIOLATUP$M_ND=bool(bs_info_vec[nBs].v_bdfg&STATE_YC_BAD_DATA);
			if(netmon_->DTSQ_ND[nd_sub].VIOLATUP$M_ND)
				netbus_->A_ND[nd_sub]=bs_info_vec[nBs].v_value;
			else
				netbus_->A_ND[nd_sub]=bs_info_vec[nBs].v_value_cal;
                }
		int elcbus=netval_->I$ELCBUS_ND[nd_sub]-1;
		if(elcbus>=0)
		{
			netbus_->KV0_ELCBUS[elcbus]=netbus_->A_ND[nd_sub];
		}
        }

        vector<PqiValue_DpfErr> gn_info_vec;
        GetAllRec<NET_ODB::CTableNet>(app_no, GN_DEVICE_NO, GN_FLD, gn_info_vec);
        for(int nGn = 0; nGn < gn_info_vec.size(); ++ nGn)
        {
                int un_sub = ipmap_ -> NETSUB_UNID[gn_info_vec[nGn].id % 1000000 - 1] - 1;
                if(un_sub >= 0)
                {
			netmon_->DTSPQ_UN[un_sub].VIOLATUP$M_UN=bool(gn_info_vec[nGn].p_status&STATE_YC_BAD_DATA);
			netmon_->DTSPQ_UN[un_sub].VIOLATDN$M_UN=bool(gn_info_vec[nGn].q_status&STATE_YC_BAD_DATA);
			if(netmon_->DTSPQ_UN[un_sub].VIOLATUP$M_UN)
				netbus_ -> W0_UN[un_sub] = gn_info_vec[nGn].p_value;
			else
				netbus_ -> W0_UN[un_sub] = gn_info_vec[nGn].p_value_cal;
			if(netmon_->DTSPQ_UN[un_sub].VIOLATDN$M_UN)
				netbus_ -> R0_UN[un_sub] = gn_info_vec[nGn].q_value;
			else 
				netbus_ -> R0_UN[un_sub] = gn_info_vec[nGn].q_value_cal;
                }
        }

        vector<PqiValue_DpfErr> ld_info_vec;
        GetAllRec<NET_ODB::CTableNet>(app_no, LD_DEVICE_NO, LD_FLD, ld_info_vec);
        for(int nLd = 0; nLd < ld_info_vec.size(); ++ nLd)
        {
                int ld_sub = ipmap_ -> NETSUB_LDID[ld_info_vec[nLd].id % 1000000 - 1] - 1;
                if(ld_sub >= 0)
                {
			netmon_->DTSQ_LD[ld_sub].VIOLATUP$M_LD=bool(ld_info_vec[nLd].p_status&STATE_YC_BAD_DATA);
			netmon_->DTSQ_LD[ld_sub].VIOLATDN$M_LD=bool(ld_info_vec[nLd].q_status&STATE_YC_BAD_DATA);
			if(netmon_->DTSQ_LD[ld_sub].VIOLATUP$M_LD)
				netbus_ -> W0_LD[ld_sub] = ld_info_vec[nLd].p_value;
			else
				netbus_ -> W0_LD[ld_sub] = ld_info_vec[nLd].p_value_cal;
			if(netmon_->DTSQ_LD[ld_sub].VIOLATDN$M_LD)
				netbus_ -> R0_LD[ld_sub] = ld_info_vec[nLd].q_value;
			else
				netbus_ -> R0_LD[ld_sub] = ld_info_vec[nLd].q_value_cal;
                }
        }

        vector<PqiValuePid_DpfErr> dot_info_vec;
        GetAllRec<NET_ODB::CTableNet>(app_no, ACLN_DOT_NO, DOT_FLD, dot_info_vec);
        const int i_zero(0);
        for(int nDot = 0; nDot < dot_info_vec.size(); ++ nDot)
        {
                int id_sub = dot_info_vec[nDot].id % 1000000 - 1;
                int netsub = ipmap_ -> NETSUB_LN2ID[id_sub] - 1;
                if(netsub >= 0)
                {
                        if(0 == memcmp(&ipmap_ -> Q_LN2ID[id_sub], &i_zero, sizeof(ipmap_ -> Q_LN2ID[id_sub])))
                        {
				netmon_->DTSWQ_LN2[netsub].VIOLATUP$M_LN2=bool(dot_info_vec[nDot].p_status&STATE_YC_BAD_DATA);
				netmon_->DTSWQ_LN2[netsub].VIOLATDN$M_LN2=bool(dot_info_vec[nDot].q_status&STATE_YC_BAD_DATA);
				if(netmon_->DTSWQ_LN2[netsub].VIOLATUP$M_LN2)
					netbus_ -> W0_LN2[netsub] = dot_info_vec[nDot].p_value;
				else
					netbus_ -> W0_LN2[netsub] = dot_info_vec[nDot].p_value_cal;
				if(netmon_->DTSWQ_LN2[netsub].VIOLATDN$M_LN2)
					netbus_ -> R0_LN2[netsub] = dot_info_vec[nDot].q_value;
				else
					netbus_ -> R0_LN2[netsub] = dot_info_vec[nDot].q_value_cal;

                        }
                        else if(ipmap_ -> Q_LN2ID[id_sub].EQLDFG$M_LN2ID)
                        {
				netmon_->DTSQ_LD[netsub].VIOLATUP$M_LD=bool(dot_info_vec[nDot].p_status&STATE_YC_BAD_DATA);
				netmon_->DTSQ_LD[netsub].VIOLATDN$M_LD=bool(dot_info_vec[nDot].q_status&STATE_YC_BAD_DATA);
				if(netmon_->DTSQ_LD[netsub].VIOLATUP$M_LD)
					netbus_ -> W0_LD[netsub] = dot_info_vec[nDot].p_value;
				else
					netbus_ -> W0_LD[netsub] = dot_info_vec[nDot].p_value_cal;
				if(netmon_->DTSQ_LD[netsub].VIOLATDN$M_LD)
					netbus_ -> R0_LD[netsub] = dot_info_vec[nDot].q_value;
				else
					netbus_ -> R0_LD[netsub] = dot_info_vec[nDot].q_value_cal;
                        }
                        else if(ipmap_ -> Q_LN2ID[id_sub].EQUNFG$M_LN2ID)
                        {
				netmon_->DTSPQ_UN[netsub].VIOLATUP$M_UN=bool(dot_info_vec[nDot].p_status&STATE_YC_BAD_DATA);
				netmon_->DTSPQ_UN[netsub].VIOLATDN$M_UN=bool(dot_info_vec[nDot].q_status&STATE_YC_BAD_DATA);
				if(netmon_->DTSPQ_UN[netsub].VIOLATUP$M_UN)
					netbus_ -> W0_UN[netsub] = -dot_info_vec[nDot].p_value;
				else
					netbus_ -> W0_UN[netsub] = -dot_info_vec[nDot].p_value_cal;
				if(netmon_->DTSPQ_UN[netsub].VIOLATDN$M_UN)
					netbus_ -> R0_UN[netsub] = -dot_info_vec[nDot].q_value;
				else
					netbus_ -> R0_UN[netsub] = -dot_info_vec[nDot].q_value_cal;
                        }
                }
        }

        vector<PqiValuePid_DpfErr> trwd_info_vec;
        GetAllRec<NET_ODB::CTableNet>(app_no, TRWD_DEVICE_NO, TRWD_FLD, trwd_info_vec);
        for(int nTrwd = 0; nTrwd < trwd_info_vec.size(); ++nTrwd)
        {
                int id_sub = trwd_info_vec[nTrwd].id % 1000000 - 1;
                int netsub = ipmap_ -> NETSUB_XF2ID[id_sub] - 1;
                if(netsub >= 0)
                {
                        if(ipmap_ -> Q_XF2ID[id_sub].TERMFG$M_XF2ID)
                        {
				netmon_->DTSQ_LD[netsub].VIOLATUP$M_LD=bool(trwd_info_vec[nTrwd].p_status&STATE_YC_BAD_DATA);
				netmon_->DTSQ_LD[netsub].VIOLATDN$M_LD=bool(trwd_info_vec[nTrwd].q_status&STATE_YC_BAD_DATA);
				if(netmon_->DTSQ_LD[netsub].VIOLATUP$M_LD)
					netbus_ -> W0_LD[netsub] = trwd_info_vec[nTrwd].p_value;
				else
					netbus_ -> W0_LD[netsub] = trwd_info_vec[nTrwd].p_value_cal;
				if(netmon_->DTSQ_LD[netsub].VIOLATDN$M_LD)
					netbus_ -> R0_LD[netsub] = trwd_info_vec[nTrwd].q_value;
				else
					netbus_ -> R0_LD[netsub] = trwd_info_vec[nTrwd].q_value_cal;
                        }
                        else
                        {
				netmon_->DTSXQ_XF2[netsub].VIOLATUP$M_XF2=bool(trwd_info_vec[nTrwd].p_status&STATE_YC_BAD_DATA);
				netmon_->DTSXQ_XF2[netsub].VIOLATDN$M_XF2=bool(trwd_info_vec[nTrwd].q_status&STATE_YC_BAD_DATA);
				if(netmon_->DTSXQ_XF2[netsub].VIOLATUP$M_XF2)
					netbus_ -> W0_XF2[netsub] = trwd_info_vec[nTrwd].p_value;
				else
					netbus_ -> W0_XF2[netsub] = trwd_info_vec[nTrwd].p_value_cal;
				if(netmon_->DTSXQ_XF2[netsub].VIOLATDN$M_XF2)
					netbus_ -> R0_XF2[netsub] = trwd_info_vec[nTrwd].q_value;
				else
					netbus_ -> R0_XF2[netsub] = trwd_info_vec[nTrwd].q_value_cal;
                        }
                }
        }

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -