📄 main.cpp
字号:
#ifndef _WINDOWS32
#include <unistd.h>
#include <signal.h>
#include <sys/wait.h>
#endif
#include <time.h>
#include "optickettopo.h"
#include <qtextcodec.h>
#include <qapplication.h>
/*初步考虑,
(1)每个进程管理一份数据,应用号由-app 参数决定
(2)研究模式要不要同步运行方式,需要靠参数决定
*/
void ExitProcess(int aa=0)
{
printf("exit_process1\n");
exit(0);
}
int main(int argc, char* argv[])
{
#ifndef _WINDOWS32
sigset(SIGHUP,SIG_IGN);
sigset(SIGALRM,SIG_IGN);
sigset(SIGPIPE,SIG_IGN);
signal(SIGINT,ExitProcess);
signal(SIGTERM,ExitProcess);
signal(SIGFPE, SIG_IGN);
#endif
#ifndef _WINDOWS32
#ifdef _ALPHA
long uval = uswitch(USC_GET, 0);
uval = uswitch(USC_SET, uval | USW_CORE);
if (uval < 0)
perror("uswitch");
#endif
#endif
//-------edit by jikun------------
//不加这个导致图形名乱码,无法更新版本号,必须加QApplication
QTextCodec::setCodecForCStrings ( QTextCodec::codecForName("gbk") );
QTextCodec::setCodecForTr ( QTextCodec::codecForName("gbk") );
QTextCodec::setCodecForLocale( QTextCodec::codecForName("gbk") );
QApplication app(argc,argv,false);
app.setDefaultCodec( QTextCodec::codecForName( "GBK" ) );
//--------end-----------------------------
bool set_ctx_flag=false;
// CContext::SetContextNo(argc, argv,AC_REALTIME_NO);
int app_no=AP_SCADA;
for(int arg = 1; arg < argc - 1; ++arg)
{
if(0 == strcmp(argv[arg], "-app"))
{
sscanf(argv[arg+1], "%d", &app_no);
}
if (!strcmp(argv[arg],"-ctx"))
{
set_ctx_flag=true;
break;
}
}
if (set_ctx_flag)
CContext::SetContextNo(argc,argv);
else
CContext::SetContextNo(argc,argv,AC_REALTIME_NO);
short ctx_no;
CContext::GetContextNo(ctx_no);
if(app_no/1000*1000 != AP_SCADA)
{//非SCADA族应用
app_no = AP_SCADA;
}
const char* PROC_NAME = "flow_server";
char proc_alias[32];
sprintf(proc_alias, "%s%d", PROC_NAME,app_no);
CServicesManage serviceman;
CSamPub sam_pub;
if(sam_pub.ProcRegister(app_no, proc_alias, 0) != 1)
{
cerr<<"进程注册失败"<<endl;
exit(0);
} vector<int> app_id_vec;
while(serviceman.GetActiveApps(app_id_vec) < 0 || find(app_id_vec.begin(), app_id_vec.end(), app_no) == app_id_vec.end())
{//如果本机没有SCADA应用,空转,不退出是为了使得在第一次启动应用时也能正常工作
// cerr<<"waiting."<<endl;
DelayTime(1000);
}
//需要发送变化数据报文标志
COpticketTopo m_opt_topo(app_no);
m_opt_topo.Init();
int duty_tag;//add by xuxianfeng 1201
while(1)
{
if(serviceman.GetActiveApps(app_id_vec) < 0 || find(app_id_vec.begin(), app_id_vec.end(), app_no) == app_id_vec.end())
{//如果本机SCADA应用停止,退出
printf("如果本机SCADA应用停止,退出\n\n");
DelayTime(1000);
}
duty_tag=serviceman.IsOnDuty(app_no);//add by xuxianfeng 06-1-4
if((m_opt_topo.RecvReport(2000))==1 )//modify by xuxianfeng 1201
{
printf("接收到消息,msg_type====%d,duty_tag ===%d\n",m_opt_topo.GetRecvReportType(),duty_tag);
switch(m_opt_topo.GetRecvReportType())
{
case OPTICKET_COPY_MODE_REQ:
{
printf("开始拷贝方式数据\n");
m_opt_topo.CopyModeFromSCADA(duty_tag);
break;
}
case OPTICKET_DOWN_MODE_REQ:
{
printf("开始下装模型\n");
m_opt_topo.DownloadModel(duty_tag);
break;
}
//设备状态变化
case OPTICKET_READ_DEV_MODE_REQ:
{
m_opt_topo.ReadDevRunMode(duty_tag);
break;
}
//潮流校核
case OPTICKET_FLOW_REQ:
{
m_opt_topo.OptFlowVerify(duty_tag);
break;
}
default:
{
break;
}
}
}
DelayTime(200);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -