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

📄 init.c

📁 该程序实现N4F接口程序
💻 C
📖 第 1 页 / 共 2 页
字号:


#include "..\\inc\\comm.h"
#include "..\\inc\\n4f.h"


int          sendstep,          rcvlen;
char         sendbuf[BUFSIZE],  rcvbuf[BUFSIZE];
HANDLE       hCom;
IO_MB        io_mb[MAX_MODULE_NU];  
int          ANA_first_flag[MAX_MODULE_NU], SW_first_flag[MAX_MODULE_NU];
YK_GRP       yk_grp[6];
int          soe_flag;
SOE_REC      soe_rec;
char         para_grp_num;

void main()
{ DWORD    IDThread;
  HANDLE   hThread;  
  int      i;
  
  MountDB();  Lan_init();


  for(i=0;i<MAX_MODULE_NU;i++)
  { ANA_first_flag[i] = YES; SW_first_flag[i] = YES;} 

  para_grp_num=1;

  Clear_iomb();

  Clear_soe();

#ifdef FOR_HDWD
  
  Read_info_table();
  
#else
  
#endif

  while( Port_init()==FAILURE )
  { printf("Port_init() error.\n"); sleep(5); }
      
  if((hThread=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)Real_data_proc,
					   NULL,0,&IDThread))==NULL)	
  { printf("CreateThread() error!\n"); exit(-1); }
  printf("Thread Realdata_proc() created!\n"); 

  Rcv_data_proc();

}

void Clear_iomb()//清模板
{ int iomb_addr, w_addr, i, j;
  
  for(iomb_addr=0;iomb_addr<MAX_MODULE_NU;iomb_addr++)
  { io_mb[iomb_addr].def_type              = -1;
	io_mb[iomb_addr].mb_type               = -1;
    io_mb[iomb_addr].mb_type_id            = -1;
    io_mb[iomb_addr].mb_used               = NO;
	
    for(w_addr=0;w_addr<8;w_addr++)
	{ io_mb[iomb_addr].yc[w_addr].scan_allow = NO; 	  
	  strcpy(io_mb[iomb_addr].yc[w_addr].yc_pid[0].c_name,"-----");
      strcpy(io_mb[iomb_addr].yc[w_addr].yc_pid[0].l_name,"-----");
	  io_mb[iomb_addr].yc[w_addr].yc_pid[0].data_up  = -1;
	  io_mb[iomb_addr].yc[w_addr].yc_pid[0].data_low = -1;
      io_mb[iomb_addr].yc[w_addr].yc_pid[0].mea_up   = -1;
	  io_mb[iomb_addr].yc[w_addr].yc_pid[0].mea_low  = -1;
      io_mb[iomb_addr].yc[w_addr].yc_pid[0].mea_zero = -1;
      io_mb[iomb_addr].yc[w_addr].yc_pid[0].imp_old  = 0;
      io_mb[iomb_addr].yc[w_addr].yc_pid[0].PD_imp_cvt = 1;
      io_mb[iomb_addr].yc[w_addr].yc_pid[0].EMS_imp_cvt= 1;
      io_mb[iomb_addr].yc[w_addr].yc_pid[0].l_value    = 0;
      io_mb[iomb_addr].yc[w_addr].yc_pid[0].imp_old    = 0;

	  io_mb[iomb_addr].yx[w_addr].scan_allow = NO;
      io_mb[iomb_addr].yx[w_addr].soe_flag   = NO;
      for(i=0;i<16;i++)
      { strcpy(io_mb[iomb_addr].yx[w_addr].yx_pid[i].c_name,"-----");
        strcpy(io_mb[iomb_addr].yx[w_addr].yx_pid[i].l_name,"-----");
	  }
	}
  }
 
  for(i=0;i<6;i++)//清遥控组
  { yk_grp[i].config = NO;
	for(j=0;j<8;j++)
    { strcpy(yk_grp[i].ctrl_pnt[j].c_name,"-----");
      strcpy(yk_grp[i].ctrl_pnt[j].l_name,"-----");
      yk_grp[i].ctrl_pnt[j].dev_id   = -1;
      yk_grp[i].ctrl_pnt[j].data_type= -1;
	  yk_grp[i].ctrl_pnt[j].point_id = -1;
	}
  }
}

void Clear_soe()//清SOE记录区
{ int i;

  soe_rec.syn_time = time( NULL );
  for(i=0;i<MAX_SOE_REC;i++)
  { soe_rec.soe_buf[i].used = NO; }    
}

void Read_info_table()/*------------- 读信息表 --------------*/
{ FILE   *table_fp, *disk_fp;
  int    i, pid, mea_up, mea_low, mea_zero;
  float  data_up, data_low, ems_cvt, pd_cvt;
  char   tmp[100], tmp0[200], tmp1[200], c_name[100], l_name[100];
  int    iomb_addr, w_addr, grp_addr; 
  

  strcpy(tmp,"del "); strcat(tmp,IOMB_CONFIG_VALID);
  printf("%s",tmp); system(tmp);

  while((table_fp=fopen(INFO_TABLE,"r"))==NULL)
  { printf("%s can not open\n",INFO_TABLE); sleep(10 ); } 

  for(i=0;i<13;i++){ fscanf(table_fp,"%s",tmp0); }
 
  while((disk_fp=fopen(INFO_TABLE_VALID,"w"))==NULL)
  { printf("%s can not open\n",INFO_TABLE_VALID); sleep(10 ); } 

  LOOP:
  if( fscanf(table_fp,"%s",tmp0)==EOF)
  { printf("CLOSE_INFOTABLE_FILE!\n");  fclose( table_fp ); 
    printf("CLOSE_INFOTABLE_VALID!\n"); fclose( disk_fp );   
    return;
  }
  if( strcmp(tmp0,"END")==0 )
  { printf("CLOSE_INFOTABLE_FILE!\n"); fclose( table_fp ); 
    printf("CLOSE_INFOTABLE_VALID!\n"); fclose( disk_fp );   
    return;
  }
  
  fscanf(table_fp,"%s  %d %s %s ",tmp0, &iomb_addr, tmp0, tmp1);
  printf("======>> iomb_addr=%d\n",iomb_addr);

  if( ( strcmp(tmp1,"YC")==0 )||( strcmp(tmp1,"YT")==0 ) )//遥测板、遥调板
  { 
    for(i=0;i<18;i++)
    { fscanf(table_fp,"%s",tmp0); }
	
    for(;;)
    { fscanf(table_fp,"%d",&w_addr);
      if(w_addr==-1 ){ goto LOOP; }
	  if( strcmp(tmp1,"YC")==0 )
	  { io_mb[iomb_addr].def_type = YC_TYPE; }
	  if( strcmp(tmp1,"YT")==0 )
      { io_mb[iomb_addr].def_type = YT_TYPE; }
      fscanf(table_fp,"%s %s %f %f %d %d %d ",
           c_name, l_name, &data_low, &data_up, &mea_low,  &mea_up,  &mea_zero ); 
	  io_mb[iomb_addr].yc[w_addr].scan_allow = NO;  
      
	  strcpy(io_mb[iomb_addr].yc[w_addr].yc_pid[0].c_name,c_name);
      strcpy(io_mb[iomb_addr].yc[w_addr].yc_pid[0].l_name,l_name);
      io_mb[iomb_addr].yc[w_addr].yc_pid[0].data_up = data_up;
      io_mb[iomb_addr].yc[w_addr].yc_pid[0].data_low= data_low;
      io_mb[iomb_addr].yc[w_addr].yc_pid[0].mea_up  = mea_up;
      io_mb[iomb_addr].yc[w_addr].yc_pid[0].mea_low = mea_low;
      io_mb[iomb_addr].yc[w_addr].yc_pid[0].mea_zero= mea_zero;

      fprintf(disk_fp,"(%d_%d)%25s%15s %5.1f %5.1f %3d %3d %3d\n",iomb_addr,w_addr,
             io_mb[iomb_addr].yc[w_addr].yc_pid[0].c_name,
             io_mb[iomb_addr].yc[w_addr].yc_pid[0].l_name,
             io_mb[iomb_addr].yc[w_addr].yc_pid[0].data_up,
             io_mb[iomb_addr].yc[w_addr].yc_pid[0].data_low,
             io_mb[iomb_addr].yc[w_addr].yc_pid[0].mea_up,
             io_mb[iomb_addr].yc[w_addr].yc_pid[0].mea_low,
             io_mb[iomb_addr].yc[w_addr].yc_pid[0].mea_zero      );
	  
	  
      if(  (strstr(io_mb[iomb_addr].yc[w_addr].yc_pid[0].c_name,"----")==NULL)
       	 &&(strstr(io_mb[iomb_addr].yc[w_addr].yc_pid[0].l_name,"----")==NULL)   )
	  { 
	    while((strstr(io_mb[iomb_addr].yc[w_addr].yc_pid[0].l_name,".ANA.")   ==NULL)
              &&(strstr(io_mb[iomb_addr].yc[w_addr].yc_pid[0].l_name,".NUM.")   ==NULL)
              &&(strstr(io_mb[iomb_addr].yc[w_addr].yc_pid[0].l_name,".PARAM.") ==NULL)  )			  
		{ printf("Read_info_table(): 板地址=%d 字地址=%d data_type err! \n",iomb_addr,w_addr); 
	      Sleep(5*1000);	
		}         
	    while( DBread_by_name( io_mb[iomb_addr].yc[w_addr].yc_pid[0].l_name )==NULL)
	    { printf("YC_YT: %s error!\n",io_mb[iomb_addr].yc[w_addr].yc_pid[0].l_name); sleep(5); }
	  }
    }
  }
  
  else
  if( strcmp(tmp1,"YX")==0 ) //遥信板
  { fscanf(table_fp,"%s %d ",tmp0, &w_addr );
    for(i=0;i<5;i++)
	{ fscanf(table_fp,"%s",tmp0); }
	io_mb[iomb_addr].yx[w_addr].scan_allow = NO;  
      
	for(;;)
	{ fscanf(table_fp,"%d ",&pid);
	  if( pid==-1 ){ goto LOOP; }
	  io_mb[iomb_addr].def_type = YX_TYPE;
	  fscanf(table_fp,"%s %s ", c_name, l_name );
	  strcpy(io_mb[iomb_addr].yx[w_addr].yx_pid[pid].l_name,l_name);
	  strcpy(io_mb[iomb_addr].yx[w_addr].yx_pid[pid].c_name,c_name); 
	  
      fprintf(disk_fp,"(%d_%d_%d)%25s%15s \n",iomb_addr,w_addr,pid,
	           io_mb[iomb_addr].yx[w_addr].yx_pid[pid].c_name,
               io_mb[iomb_addr].yx[w_addr].yx_pid[pid].l_name   );     	  

	  if(  (strstr(io_mb[iomb_addr].yx[w_addr].yx_pid[pid].c_name,"----")==NULL)
	     &&(strstr(io_mb[iomb_addr].yx[w_addr].yx_pid[pid].l_name,"----")==NULL)   )
	  { 
	    while((strstr(io_mb[iomb_addr].yx[w_addr].yx_pid[pid].l_name,".INT.")   ==NULL)
            &&(strstr(io_mb[iomb_addr].yx[w_addr].yx_pid[pid].l_name,".POL.")   ==NULL)
            &&(strstr(io_mb[iomb_addr].yx[w_addr].yx_pid[pid].l_name,".SYSMSG.")==NULL)  )			  
		{ printf("Read_info_table(): 板地址=%d 字地址=%d 序号=%d data_type err!\n",iomb_addr,w_addr,pid); 
		  Sleep(5*1000);
		}         
	    while( DBread_by_name( io_mb[iomb_addr].yx[w_addr].yx_pid[pid].l_name )==NULL )
		{ printf("YX: %s error!\n",io_mb[iomb_addr].yx[w_addr].yx_pid[pid].l_name); sleep(5); }
	  }
	}
  }

  else
  if( strcmp(tmp1,"YK")==0 ) // 遥控
  { fscanf(table_fp,"%s %d ",tmp0, &grp_addr );
    for(i=0;i<5;i++)
	{ fscanf(table_fp,"%s",tmp0); }
	
	for(;;)
	{ fscanf(table_fp,"%d ",&pid);  
	  if( pid==-1 ){ goto LOOP; }
	  io_mb[iomb_addr].def_type = YK_TYPE;
	  fscanf(table_fp,"%s %s ", c_name, l_name );
	  strcpy(yk_grp[grp_addr].ctrl_pnt[pid].l_name,l_name);
	  strcpy(yk_grp[grp_addr].ctrl_pnt[pid].c_name,c_name); 

	  fprintf(disk_fp,"(yk_grp: %d_%d)%25s%15s \n",grp_addr,pid,
	           yk_grp[grp_addr].ctrl_pnt[pid].c_name,
               yk_grp[grp_addr].ctrl_pnt[pid].l_name   );  
   	  
	  if(  (strstr(yk_grp[grp_addr].ctrl_pnt[pid].l_name,"----")==NULL)
	     &&(strstr(yk_grp[grp_addr].ctrl_pnt[pid].c_name,"----")==NULL)   )
	  { 
	    while((strstr(yk_grp[grp_addr].ctrl_pnt[pid].l_name,".INT.")   ==NULL)
            &&(strstr(yk_grp[grp_addr].ctrl_pnt[pid].l_name,".POL.")   ==NULL)
            &&(strstr(yk_grp[grp_addr].ctrl_pnt[pid].l_name,".SYSMSG.")==NULL)  )			  
		{ printf("Read_info_table(): 遥控组号=%d 点号=%d data_type err!\n",grp_addr,pid); 
		  Sleep(5*1000);
		}         
	    while( DBread_by_name( yk_grp[grp_addr].ctrl_pnt[pid].l_name )==NULL )
		{ printf("YK: %s error!",yk_grp[grp_addr].ctrl_pnt[pid].l_name); sleep(5); }
	
	  }

⌨️ 快捷键说明

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