base.c
来自「该程序实现N4F接口程序」· C语言 代码 · 共 558 行 · 第 1/2 页
C
558 行
case 2: int_stru->format=XX_XX;int_stru->value=(int)(value*1e2);break;
case 3: int_stru->format=X_XXX;int_stru->value=(int)(value*1e3);break;
case 0:
default:int_stru->format= XXXX;int_stru->value=(int)(value*1e0);break;
}
return;
}
DB_DATA dbr_data; /* for DBread_by_name() and DBread_by_id() */
DB_DATA *DBread_by_name( char *name )
{
DMS_COMMON common_aa;
int datatype;
#ifdef EMS_TEST //调试时,从ems_test.txt文件中读时实数据
FILE *test_fp;
char tmp1[100], tmp2[100];
short test_value, test_status;
while((test_fp=fopen("c:\\users\\ems\\system\\n4f\\v3.0a\\src\\ems_test.txt","r"))==NULL)
{ printf("ems_test.txt not exist!\n"); sleep(3); }
for(;;)
{ if(fscanf(test_fp,"%s %s %d %x",tmp1,tmp2,&test_value,&test_status )==EOF)
{ fclose(test_fp); return( NULL ); break; }
else
{ if(strcmp(tmp2,name)==0){ fclose(test_fp); break; } }
}
dbr_data.status = test_status;
dbr_data.value = test_value;
return(&dbr_data);
#endif
// printf("name = %s\n",name);
ReadEntryByName ( name, &datatype ,&common_aa);
if ( common_aa.err_code == -1)
{ printf("\nn4f: DBread_by_name(%s): error!\n",name);
return(NULL);
}
if((datatype == SOE_TYPE)|(datatype == POL_TYPE)|(datatype == SYSMSG_TYPE))
{ dbr_data.status = common_aa.entry.ind.variable.value.status;
dbr_data.value = 0;
}
else
if((datatype == ANA_TYPE)|(datatype == NUM_TYPE)|(datatype == PARAM_TYPE))
{ dbr_data.status = common_aa.entry.anlg.variable.value.status;
dbr_data.value = common_aa.entry.anlg.variable.value.data;
}
else
if((datatype != 0))
{ //dbr_data.status = common_aa.entry.imp.variable.rt_value.status;
//dbr_data.value = common_aa.entry.imp.variable.rt_value.data;
//printf("+++ %d\n",common_aa.entry.imp.variable.rt_value.data);
}
else { return(NULL); }
//Print_db_data(&dbr_data);
return(&dbr_data);
}
DB_DATA *DBread_by_id(short point_id, char dev_id, char data_type)
{POINTER pointer;
DMS_COMMON common_aa;
pointer.dev_id = dev_id;
pointer.data_type = data_type;
pointer.point_id = point_id;
ReadEntryByID (&pointer ,&common_aa);
if ( common_aa.err_code == -1)
{ printf("\nIn DBread_by_id(): ReadEntryByID() error!\n");
return(NULL);
}
if((data_type == SOE_TYPE)|(data_type == POL_TYPE)|(data_type == SYSMSG_TYPE))
{ dbr_data.status = common_aa.entry.ind.variable.value.status;
dbr_data.value = 0;
}
else
if((data_type == ANA_TYPE)|(data_type == NUM_TYPE)|(data_type == PARAM_TYPE))
{ dbr_data.status = common_aa.entry.anlg.variable.value.status;
dbr_data.value = common_aa.entry.anlg.variable.value.data;
}
else { return(NULL); }
// Print_db_data(&dbr_data);
return(&dbr_data);
}
DB_ID dbr_id;
DB_ID *DBread_id( char *name )
{
DMS_COMMON common_aa;
int datatype;
// printf("##########name =%s\n",name);
ReadEntryByName(name,&datatype,&common_aa);
if(common_aa.err_code == -1)
{ printf("\nReadEntryByName() error!\n"); return(NULL); }
dbr_id.dev_id = common_aa.entry.ind.variable.ptr.dev_id;
dbr_id.data_type = common_aa.entry.ind.variable.ptr.data_type;
dbr_id.point_id = common_aa.entry.ind.variable.ptr.point_id;
return(&dbr_id);
}
int DBreadbyname_id(name)
char *name;
{
DMS_COMMON common_aa;
int data_point_id, datatype;
ReadEntryByName(name,&datatype);
if(common_aa.err_code == -1)
{ printf("\nn4f: DBbreadbyname_id() error!\n"); return(-1); }
data_point_id=common_aa.entry.ind.variable.ptr.point_id;
return(data_point_id);
}
int DBreadbyname_stat(name)
char *name;
{
DMS_COMMON common_aa;
int datatype;
ReadEntryByName(name,&datatype);
if(common_aa.err_code == -1)
{ printf("\nn4f: DBbread() error!\n"); return(-1); }
return( (common_aa.entry.ind.variable.value.status & 0x0c) );
}
//===================== talk =====================//
void Send_ACK( char type_id )
{
memset( sendbuf, 0, BUFSIZE );
sendbuf[0] = ( char )RTU_LOCAL_ADDR;
sendbuf[1] = TYPE_06H | soe_flag | RAM_OK;
sendbuf[2] = type_id;
Write_out( 3 );
}
void Send_NCK( char type_id )
{
memset( sendbuf, 0, BUFSIZE );
sendbuf[0] = ( char )RTU_LOCAL_ADDR;
sendbuf[1] = TYPE_15H | soe_flag | RAM_OK;
sendbuf[2] = type_id;
Write_out( 3 );
}
void Send_POWER_ON( char type_id )
{
memset( sendbuf, 0, BUFSIZE );
sendbuf[0] = ( char )RTU_LOCAL_ADDR;
sendbuf[1] = TYPE_16H | soe_flag | RAM_OK;
sendbuf[2] = 0x01;
sendbuf[3] = type_id;
Write_out_crc16( 4 );
}
/*------ 广播网调遥调命令 ------*/
void Brd_YT( int dev, int type, int pid, int value, int status )
{ LANH_PTR head;
ANLG_NORMAL stru_ana;
head.length = sizeof(ANLG_NORMAL);
head.dp_type = 1;
head.dest_id = 0;
head.src_id = GetHost_Cmd();
stru_ana.id.dev_id = dev;
stru_ana.id.data_type = type;
stru_ana.id.point_id = pid;
stru_ana.value.data = value;
stru_ana.value.status = status;
lan_out(&stru_ana,head);
printf("!!!!N4F: LAN_OUT YT_cmd\n");
}
/*--------- 广播网调遥控命令 ---------*/
void Brd_YK( int dev, int type, int pid, int status )
{ LANH_PTR head;
struct
{ char dev_id;
char data_type;
short point_id;
short status;
short time_ms;
char time_second;
char time_minute;
} st ,*status_alarm;
struct tm *datetime;
long t;
head.length=sizeof(*status_alarm);
head.dp_type = 1;
head.dest_id = 0;
head.src_id = GetHost_Cmd();
t=time(NULL); datetime=localtime(&t);
st.dev_id = dev;
st.data_type = type;
st.point_id = pid;
st.status = status;
st.time_ms=0;
st.time_second=datetime->tm_sec;
st.time_minute=datetime->tm_min;
status_alarm=&st;
lan_out(status_alarm,head);
printf("!!!!N4F: LAN_OUT YK_cmd\n");
}
/*--------- 发送机组调功命令 ---------*/
void P_adj_cmd( int dev, int type, int pid, int value, int status )
{ LANH_PTR head;
struct
{ char dev_id;
char data_type;
short point_id;
short status;
short data;
} command;
head.length=sizeof(command);
head.dp_type = 1;
head.dest_id = dev;
head.src_id = GetHost_Cmd();
command.dev_id = dev;
command.data_type = C_APOWER;
command.point_id = pid;
command.status = status;
command.data = value;
lan_out( &command, head );
printf("!!!!N4F: LAN_OUT adj_cmd\n");
}
void Cmd_record( char *c_name, char *l_name, int value )
{ FILE *recfp;
char recname[100], tmp_buf[100];
struct tm *today;
time_t ltime;
ltime=time(NULL); today=localtime(<ime);
memset(recname,0,100); strcpy(recname,CMDRECORD);
sprintf( tmp_buf, "%04d-%02d-%02d",
(*today).tm_year+1900, (*today).tm_mon+1, (*today).tm_mday );
strcat(recname,tmp_buf); strcat(recname,".txt");
recfp = fopen(recname,"a+");
if(recfp==NULL){ printf("can't open(a+) the file %s!\n",recname); return; }
fprintf( recfp,"%04d-%02d-%02d %02d:%02d:%02d %25s(%s) %d\n",
(*today).tm_year+1900, (*today).tm_mon+1,
(*today).tm_mday, (*today).tm_hour,
(*today).tm_min, (*today).tm_sec,
c_name, l_name, value );
fclose(recfp);
// 删除历史记录文件 (保留一个月)
if((*today).tm_mday==5 ||(*today).tm_mday==12)
{
//(*today).tm_mon=(*today).tm_mon-STIME;
//ltime=mktime(today);
ltime = ltime - (60*60)*24*31*1;
today=localtime(<ime);
memset(recname,0,100);
strcpy(recname,"del "); strcat(recname,CMDRECORD);
sprintf( (tmp_buf),"%04d-%02d*",
(*today).tm_year+1900, (*today).tm_mon+1 );
strcat(recname,tmp_buf);
printf("recname= %s\n",recname);
system(recname);
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?