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

📄 gwmain.cpp

📁 此程序适用于电力系统中的网关程序
💻 CPP
字号:
/******************************************************************
** Copyright (c) 2004-2005, 许继日立公司
** All rights reserved.
** 
** 文件名称:gwmain.cpp
** 文件标识:
** 摘    要:许继日立陶乐变网关程序主程序及全局函数实现。主要负责初始
**           一些变量和建立必要的线程及通道,本程序最大线程不超过16个           
** 
** 当前版本:1.0
** 作    者:李龙伟  <lilongwei1@hotmail.com>
** 完成日期:2004年11月03日
**
** 取代版本:1.0 
** 原作者  :李龙伟
** 完成日期:2004年11月03日
******************************************************************/

#include <stdio.h>
#include <windows.h>
#include "gwmain.h"
#include "sysvar.h"

#pragma comment(lib,"wsock32.lib")
HANDLE InstanceMutex=NULL;
int nArg[MAX_RULE];

/*====================================================================================
*                                                                                    
* Subroutine  : main()//InitSock()
*                                                                                    
* Parameters  : 
*				 
*                                                                                    
* Called from : //CManngeApp::InitInstance()                                             
* 
* Description : 处理SOCKET的初始工作,并调用服务程序。            
* 
* Return	   :
*                                             
* Modification: 
*				 2004-05-28: 
*                                                                                     
*====================================================================================*/
int main(int argc, char* argv[])
{
	WORD wVersionRequested;
	WSADATA wsaData;
	int err;
	
	InstanceMutex=CreateMutex(NULL,FALSE,"RunPrtInstance");
	if(InstanceMutex==NULL||ERROR_ALREADY_EXISTS==::GetLastError())
	{
		printf("程序已经启动!\n");
		exit(0); 
	}
	
	wVersionRequested = MAKEWORD( 2, 2 );
	
    //完成Windows Sockets DLL的初始化;协商版本支持,分配必要的资源
	err = WSAStartup( wVersionRequested, (LPWSADATA)&wsaData );
	if ( err != 0 ) 
	{
		// Tell the user that we could not find a usable WinSock DLL.
		printf("Cannot startup winsock DLL\n");                                  
		exit(1);
	}
	
	
	GW_Scada();
    //从Windows Sockets实现中注销自己,并允许实现释放为其分配的任何资源
	WSACleanup();

	return 0;
}

/*====================================================================================
*                                                                                    
* Subroutine  : GW_Scada()
*                                                                                    
* Parameters  : 
*				 
*                                                                                    
* Called from : main()                                             
* 
* Description : 调用初始化各种参数函数,启动规约线程函数
* 
* Return	   :
*                                             
* Modification: 
*				 2004-09-24: 
*                                                                                     
*====================================================================================*/
void GW_Scada()
{
	char szStr[20];

	//初始化变量
	init_var();

	//初始化通道变量和规约变量
	Init_Channels();

	Thread_func();

	do
	{
		printf("保护管理机程序正在运行,请勿关闭此窗口程序!!!\n");
		gets(szStr);

		Sleep(1000);
	} 
	while( strcmp(szStr,"quit") != 0 );
	free_sys();	
}

/*====================================================================================
*                                                                                    
* Subroutine  : init_var()
*                                                                                    
* Parameters  : 
*				 
*                                                                                    
* Called from : GW_Scada()                                    
* 
* Description : 初始化变量
* 
* Return	   :
*                                             
* Modification: 
*				 2004-09-24: 
*                                                                                     
*====================================================================================*/
void init_var()
{
//	pComm = NULL;
//	pTcp103 = NULL;
	for (int i=0; i<MAX_RULE; ++i)
	{
		pRule[i] = NULL;
	}
	g_bSysStop = false;

//	sem_init(&sem_data,0,1);
//	memset(&YX_Value, 0x00, sizeof(YX_Value));
//	memset(&YC_Value, 0x00, sizeof(YC_Value));

}

/*====================================================================================
*                                                                                    
* Subroutine  : Init_Channels()
*                                                                                    
* Parameters  : 
*				 
*                                                                                    
* Called from : GW_Scada()                                    
* 
* Description : 初始化通道变量和规约变量
* 
* Return	   :
*                                             
* Modification: 
*				 2004-09-24: 
*                                                                                     
*====================================================================================*/
void Init_Channels()
{
}

/*====================================================================================
*                                                                                    
* Subroutine  : Thread_func()
*                                                                                    
* Parameters  : 
*				 
*                                                                                    
* Called from : GW_Scada()                                    
* 
* Description : 工作子线程的建立(规约线程、LonWorks读写线程等)
* 
* Return	   :
*                                             
* Modification: 
*				 2004-09-24: 
*                                                                                     
*====================================================================================*/
void Thread_func()
{
	int i = 0;
//	int i_num = 0;
	unsigned long  lpRule[16];
//	unsigned long  lpOther[16];
	
	memset(&lpRule,0,sizeof(lpRule));
//	memset(&lpOther,0,sizeof(lpOther));

	for(i=0; i<MAX_RULE; i++)
	{
		nArg[i] = i;  
		hThsys[i] = CreateThread(NULL, 0, Rule_Data, &nArg[i], 0, &lpRule[i]);
	}

//	hThsys[0] = CreateThread (NULL, 0, NARI_Data, NULL, 0, &lpRule[0]);
//	hThsys[1] = CreateThread (NULL, 0, XJ_Data104, NULL, 0, &lpOther[0]);
//	hThsys[2] = CreateThread (NULL, 0, XJ_DataTCP103, NULL, 0, &lpOther[1]);

}

/*====================================================================================
*                                                                                    
* Subroutine  : free_sys()
*                                                                                    
* Parameters  : 
*				 
*                                                                                    
* Called from : GW_Scada()                                    
* 
* Description :释放系统信息
* 
* Return	   :
*                                             
* Modification: 
*				 2004-09-24: 
*                                                                                     
*====================================================================================*/
void free_sys()
{

	g_bSysStop = true;
//	sem_destroy(&sem_data);
}

/*====================================================================================
*                                                                                    
* Subroutine  : Rule_Data()
*                                                                                    
* Parameters  : 
*				 
*                                                                                    
* Called from : Thread_func()                                    
* 
* Description :  规约线程函数
* 
* Return	   :
*                                             
* Modification: 
*				 2004-09-24: 
*                                                                                     
*====================================================================================*/
DWORD WINAPI Rule_Data(LPVOID arg)
{

	int facno;
	int *tmp;
	
	tmp = (int *) arg; 
	facno = *tmp;
	
	if (pRule[facno] !=NULL) 
	{
		delete pRule[facno];
		pRule[facno] = NULL;
	}

	//创建并添加新的线程
	switch(facno)
	{
	case RULE_CDT:	//CDT规约
		pRule[facno] = new CCDT(facno, 512, 512);
		pRule[facno] -> RuleLoop();
		break;
	case RULE_ENGINEER:	//103规约
		pRule[facno] = new CTcp103(facno, 512, 512);
		pRule[facno] -> RuleLoop();
		break;		
	case RULE_REMOTE:		//104规约
	case RULE_OPERATER:	//104规约
		pRule[facno] = new CIEC104(facno, 512, 512);
		pRule[facno] -> RuleLoop();
		break;
	default:
		break;
	}

	return 0;
}

⌨️ 快捷键说明

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