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

📄 corearg.cpp

📁 此程序适用于电力系统中的网关程序
💻 CPP
📖 第 1 页 / 共 2 页
字号:
/******************************************************************
* Copyright (c) 2004-2005, 许继日立公司
* All rights reserved.
* 
* 文件名称:corearg.cpp
* 文件标识:
* 摘    要:核心数据参数保存的内存位置。
* 
* 当前版本:1.0
* 作    者:李龙伟  <lilongwei1@hotmail.com>
* 完成日期:2004年12月07日
*
* 取代版本:1.0 
* 原作者  :李龙伟
* 完成日期:2004年12月07日
******************************************************************/
#include "corearg.h"
#include "ext.h"

using namespace std;

//----------------------------------- 网络内存数据 -----------------------------------
CGloalNet::CGloalNet()
{
	sem_init(&sem_addr, 0, 1);
	sem_init(&sem_msg, 0, 1);

	memset(&NetAddr, 0x00, sizeof(GateNetAddr));
	m_eState = GATE_UNKNOW;
}
CGloalNet::~CGloalNet()
{
	sem_destroy(&sem_addr);
	sem_destroy(&sem_msg);
}

/*====================================================================================
*                                                                                    
* Subroutine  : InsNetAddr()
*                                                                                    
* Parameters  : addr 网络地址
*				 
*                                                                                    
* Called from :                                     
* 
* Description : 插入网络地址信息
* 
* Return	  : 
*                                     
* Modification: 
*				 2004-12-11: 
*                                                                                     
*====================================================================================*/
int CGloalNet::InsNetAddr(GateNetAddr addr)
{
	sem_wait(&sem_addr);
	memcpy(&NetAddr, &addr, sizeof(GateNetAddr));
	sem_post(&sem_addr);
	return 1;
}

/*====================================================================================
*                                                                                    
* Subroutine  : InsNetAddr()
*                                                                                    
* Parameters  : addr 网络地址
*				 
*                                                                                    
* Called from :                                     
* 
* Description :得到网络地址信息
* 
* Return	  : 
*                                     
* Modification: 
*				 2004-12-11: 
*                                                                                     
*====================================================================================*/
int CGloalNet::GetNetAddr(GateNetAddr &addr)
{
	sem_wait(&sem_addr);
	memcpy(&addr, &NetAddr, sizeof(GateNetAddr));
	sem_post(&sem_addr);
	return 1;
}

/*====================================================================================
*                                                                                    
* Subroutine  : InsDevStatus()
*                                                                                    
* Parameters  : state cdt串口网络状态
*				 
*                                                                                    
* Called from :                                     
* 
* Description : 插入CDT网络状态信息
* 
* Return	  : 
*                                     
* Modification: 
*				 2004-12-21: 
*                                                                                     
*====================================================================================*/
int CGloalNet::InsDevStatus(enum GateDevStatus state)
{
	sem_wait(&sem_addr);
	m_eState = state;
	sem_post(&sem_addr);
	return 1;
}

/*====================================================================================
*                                                                                    
* Subroutine  : GetDevStatus()
*                                                                                    
* Parameters  : state cdt串口网络状态
*				 
*                                                                                    
* Called from :                                     
* 
* Description :得到CDT网络状态信息
* 
* Return	  : 
*                                     
* Modification: 
*				 2004-12-21: 
*                                                                                     
*====================================================================================*/
int CGloalNet::GetDevStatus(enum GateDevStatus state)
{
	sem_wait(&sem_addr);
	state = m_eState;
	sem_post(&sem_addr);
	return 1;
}



//----------------------------------- 事件内存数据 -----------------------------------
CSoeData::CSoeData()
{
	sem_init(&sem_soe, 0, 1);
}
CSoeData::~CSoeData()
{
	sem_destroy(&sem_soe);
}

/*====================================================================================
*                                                                                    
* Subroutine  : InsSoeData()
*                                                                                    
* Parameters  : soe_status 事件信息
*		    
*                                                                                    
* Called from :                                     
* 
* Description : 插入事件信息
* 
* Return	  : 0  插入失败
*               !0 插入成功                      
* Modification: 
*				 2004-12-11: 
*                                                                                     
*====================================================================================*/
int CSoeData::InsSoeData(SOE_STATUS soe_status)
{
	CheckSoeData();
	sem_wait(&sem_soe);
	m_ListSoe.push_back(soe_status);
	sem_post(&sem_soe);

	return 1;
}

/*====================================================================================
*                                                                                    
* Subroutine  : GetSoeData()
*                                                                                    
* Parameters  : soe_status 事件信息
*		    eRuleType  队列类型
*                                                                                    
* Called from :                                     
* 
* Description : 读取并弹出事件信息
* 
* Return	  : 0  获得事件信息
*               !0  没有得到事件信息                    
* Modification: 
*				 2004-12-11: 
*                                                                                     
*====================================================================================*/
int CSoeData::GetSoeData(enum GateStation eStation, SOE_STATUS &soe_status)
{
	int			nResult = 0;
	unsigned int	i_len = 0;
	unsigned long	i_break = 0;
	list<SOE_STATUS>::iterator iter, iter0;
	
	sem_wait(&sem_soe);
	
	iter = m_ListSoe.begin();

	//查找本线程的数据
	for (iter=m_ListSoe.begin(); iter!=m_ListSoe.end(); iter++)
	{
		if ((*iter).eStation == eStation)
		{
			soe_status = (*iter);
			m_ListSoe.erase(iter);
			nResult = 1;
			break;
		}
	}
	
	sem_post(&sem_soe);
	
	return nResult;	
}

/*====================================================================================
*                                                                                    
* Subroutine  : InsCtrlData()
*                                                                                    
* Parameters  : ctrl_value 命令信息
*		   
*                                                                                    
* Called from :                                     
* 
* Description : 	插入命令信息
* 
* Return	  : 
*                                     
* Modification: 
*				 2004-12-22: 
*                                                                                     
*====================================================================================*/
int CSoeData::InsCtrlData(CTRL_VALUE ctrl_value)
{
	CheckCtrlData();
	sem_wait(&sem_soe);
	m_CtrlValue.push_back(ctrl_value);
	sem_post(&sem_soe);

	return 1;
}

/*====================================================================================
*                                                                                    
* Subroutine  : InsCtrlData()
*                                                                                    
* Parameters  : ctrl_value 命令信息
*		   
*                                                                                    
* Called from :                                     
* 
* Description : 	读取并弹出命令信息
* 
* Return	  :  获得命令信息体(0,没有得到;!0,得到)
*               
* Modification: 
*				 2004-12-22: 
*                                                                                     
*====================================================================================*/
int CSoeData::GetCtrlData(CTRL_VALUE &ctrl_value)
{
	int			nResult = 0;
	unsigned int	i_len = 0;
	unsigned long	i_break = 0;
	list<CTRL_VALUE>::iterator iter;
	
	sem_wait(&sem_soe);
	
	if (!m_CtrlValue.empty())
	{
		for (iter = m_CtrlValue.begin(); iter!=m_CtrlValue.end(); ++iter)
		{
			if (((*iter).eCmdType == COMMAND_SEL_CTRL)		//控制选择
				|| ((*iter).eCmdType == COMMAND_EXE_CTRL)		//控制执行
				|| ((*iter).eCmdType == COMMAND_CANCEL_CTRL))	//控制撤消
			{
				ctrl_value = (*iter);
				m_CtrlValue.erase(iter);
				nResult = 1;
			}
		}
		if (nResult == 0)
		{
			ctrl_value = m_CtrlValue.front();
			m_CtrlValue.pop_front();
			nResult = 1;
		}
	}
	sem_post(&sem_soe);
	
	return nResult;	
}

/*====================================================================================
*                                                                                    
* Subroutine  : GetNetAddr()
*                                                                                    
* Parameters  : 
*				 
*                                                                                    
* Called from : InsSoeData()                                    
* 
* Description : 读取网络状态
* 
* Return	  : 
*                                     
* Modification: 
*				 2004-12-11: 
*                                                                                     
*====================================================================================*/
//int CSoeData::GetNetAddr(enum GateStation eStation, GateIpPort &netaddr)
//{
//	int	nResult = 0
//	GateNetAddr  n_addr;
//	g_glonet.GetNetAddr(n_addr);
//	switch(eStation) 
//	{
//	case GATE_OPERATERSTATION:	//操作员站
//		memcpy(&netaddr, &n_addr.OPERATERNet, sizeof(GateIpPort));	
//		nResult = 1;
//		break;
//	case GATE_ENGINEERSTATION:	//工程师站
//		memcpy(&netaddr, &n_addr.ENGINEERNet, sizeof(GateIpPort));//确认OPERATENet??
//		nResult = 1;
//		break;
//	case GATE_REMOTESTATION:	//远动站
//		memcpy(&netaddr, &n_addr.REMOTENet, sizeof(GateIpPort));//确认OPERATENet??
//		nResult = 1;
//		break;
//	default:
//		break;
//	} 
//	
//	return nResult;
//}

⌨️ 快捷键说明

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