📄 ps600.c
字号:
#include "iec103.h"
#include "ps600.h"
extern SENDDEF SendDef;
extern RCVDEF RcvDef;
extern IECDEF *pIECDEF[MaxIECNum],*pIEC;
extern char hostname[NAME_SIZE+1];
extern SysDef *pSysDef;
extern int Enqflag;
PSL_PL1_Proc(addr)
unsigned char addr;
{
alarm_msg Alarm_Msg;
audio_msg Audio;
unsigned char i,j,typeid,funtype,infno,dpi,cpu,width,dot,*p;
char str[128],pStr[128],file1[32];
int audio,ms,set_num;
float tmpdata;
int rptr,wptr,length;
int len,kod;
FILE *fp1;
Alarm_Msg.alarm = 1;
Alarm_Msg.log = 1;
Alarm_Msg.n = 0;
Alarm_Msg.state = 0x80;
Alarm_Msg.data1 = 0;
Alarm_Msg.data2 = 0;
Alarm_Msg.data3 = 0;
typeid = RcvDef.Buf[6];
funtype = RcvDef.Buf[10];
infno = RcvDef.Buf[11];
switch (typeid)
{
case M_TTM_TA:
if( RcvDef.Buf[8] != COT_SPN ) break;
Alarm_Msg.hour = RcvDef.Buf[16] & 0x3f;
Alarm_Msg.minute = RcvDef.Buf[15] & 0x3f;
Alarm_Msg.second = (RcvDef.Buf[14]*256+RcvDef.Buf[13])/1000;
Alarm_Msg.ms = ((RcvDef.Buf[14]*256+RcvDef.Buf[13])%1000)*10;
strcpy(Alarm_Msg.alarm_tag,(char *)pSysDef+(int)pIECDEF[addr]->alarmtag);
switch (funtype)
{
case 0xb8:
for( i=0;i<sizeof(PSL_B8_Event)/sizeof(EVTALM);i++ )
if( PSL_B8_Event[i].index == infno ) break;
strcpy(pStr,PSL_B8_Event[i].text);
audio = PSL_B8_Event[i].audio;
dpi = PSL_B8_Event[i].dpi;
break;
/*
case 0xf5:
for( i=0;i<sizeof(PSL_F5_Event)/sizeof(EVTALM);i++ )
if( PSL_F5_Event[i].index == infno ) break;
strcpy(pStr,PSL_F5_Event[i].text);
audio = PSL_F5_Event[i].audio;
dpi = PSL_F5_Event[i].dpi;
break;
case 0xf6:
for( i=0;i<sizeof(PSL_F6_Event)/sizeof(EVTALM);i++ )
if( PSL_F6_Event[i].index == infno ) break;
strcpy(pStr,PSL_F6_Event[i].text);
audio = PSL_F6_Event[i].audio;
dpi = PSL_F6_Event[i].dpi;
break;
case 0xf7:
for( i=0;i<sizeof(PSL_F7_Event)/sizeof(EVTALM);i++ )
if( PSL_F7_Event[i].index == infno ) break;
strcpy(pStr,PSL_F7_Event[i].text);
audio = PSL_F7_Event[i].audio;
dpi = PSL_F7_Event[i].dpi;
break;
*/
default:
printf("functione no define!\n");
break;
}
if( RcvDef.Buf[12]==2 ) strcpy(str,"动作");
else
if( RcvDef.Buf[12]==1 ) strcpy(str,"复归");
else strcpy(str,"无效");
sprintf(Alarm_Msg.msg,"%s%s%s(%s)",
((char *)pSysDef+(int)pIECDEF[addr]->FB.pDescript),pStr,str,hostname);
build_alarm(&Alarm_Msg,0);
if( audio !=0 ){
Audio.audio_no =audio;
audio_alarm(&Audio);
}
break;
case M_TMR_TA:
if( RcvDef.Buf[8] != COT_SPN ) break;
Alarm_Msg.hour = RcvDef.Buf[20] & 0x3f;
Alarm_Msg.minute = RcvDef.Buf[19] & 0x3f;
Alarm_Msg.second = (RcvDef.Buf[18]*256+RcvDef.Buf[17])/1000;
Alarm_Msg.ms = ((RcvDef.Buf[18]*256+RcvDef.Buf[17])%1000)*10;
strcpy(Alarm_Msg.alarm_tag,(char *)pSysDef+(int)pIECDEF[addr]->alarmtag);
switch (funtype)
{
case 0xb8:
for( i=0;i<sizeof(PSL_B8_Event)/sizeof(EVTALM);i++ )
if( PSL_B8_Event[i].index == infno ) break;
strcpy(pStr,PSL_B8_Event[i].text);
audio = PSL_B8_Event[i].audio;
dpi = PSL_B8_Event[i].dpi;
break;
/*
case 0xf5:
for( i=0;i<sizeof(PSL_F5_Event)/sizeof(EVTALM);i++ )
if( PSL_F5_Event[i].index == infno ) break;
strcpy(pStr,PSL_F5_Event[i].text);
audio = PSL_F5_Event[i].audio;
dpi = PSL_F5_Event[i].dpi;
break;
case 0xf6:
for( i=0;i<sizeof(PSL_F6_Event)/sizeof(EVTALM);i++ )
if( PSL_F6_Event[i].index == infno ) break;
strcpy(pStr,PSL_F6_Event[i].text);
audio = PSL_F6_Event[i].audio;
dpi = PSL_F6_Event[i].dpi;
break;
case 0xf7:
for( i=0;i<sizeof(PSL_F7_Event)/sizeof(EVTALM);i++ )
if( PSL_F7_Event[i].index == infno ) break;
strcpy(pStr,PSL_F7_Event[i].text);
audio = PSL_F7_Event[i].audio;
dpi = PSL_F7_Event[i].dpi;
break;
*/
default:
printf("functione no define!\n");
break;
}
if( RcvDef.Buf[12]==2 ) strcpy(str,"动作");
else
if( RcvDef.Buf[12]==1 ) strcpy(str,"复归");
else strcpy(str,"无效");
ms = (RcvDef.Buf[14]*256+RcvDef.Buf[13])/1000;
sprintf(Alarm_Msg.msg,"%s%s%s(相对时间%dms)(%s)",
((char *)pSysDef+(int)pIECDEF[addr]->FB.pDescript),pStr,str,ms,hostname);
build_alarm(&Alarm_Msg,0);
if( audio !=0 ){
Audio.audio_no =audio;
audio_alarm(&Audio);
}
break;
case M_GD_NTA: /* 通用分类标识 */
sprintf(file1,"%s",((char *)pSysDef+(int)pIECDEF[addr]->FB.pTag));
fp1 = fopen(file1,"a");
if(RcvDef.Buf[8] == COT_GRD){ /* 对通用分类数据读命令的有效数据响应 */
set_num = RcvDef.Buf[13]&0x3f; /* 本cpu定值个数 NGD */
p=(unsigned char*)&RcvDef.Buf[14]; /* p指向每一项定值的序号 */
for(i=0;i<set_num;i++){
cpu = *p;
p = p+1;
dot = *p;
kod = *(p+1);
p += 3;
width=*p;
p += 2;
if( kod == 0x0a ){
strncpy( str, (char*)(p) , width);
*(str + width) = '\0';
fprintf(fp1,"%d %d %s\n",cpu,dot,str);
}
else if(width == 4) { /* 实际定值的长度(字节数) */
switch(cpu){
case 1:
pIECDEF[addr]->SET1[dot] = *((float *)p);
break;
case 2:
pIECDEF[addr]->SET2[dot] = *((float *)p);
break;
case 3:
pIECDEF[addr]->SET3[dot] = *((float *)p);
break;
case 4:
pIECDEF[addr]->SET4[dot] = *((float *)p);
break;
case 5:
pIECDEF[addr]->SET5[dot] = *((float *)p);
break;
case 6:
pIECDEF[addr]->SET6[dot] = *((float *)p);
break;
case 7:
pIECDEF[addr]->SET7[dot] = *((float *)p);
break;
default:
printf(" The cpu num is Err ! cpu = %d \n",cpu);
break;
}
}
else if(width == 2){
tmpdata = (*p);
tmpdata = (*(p+1))*256 + tmpdata;
switch(cpu){
case 1:
pIECDEF[addr]->SET1[dot] = (float)tmpdata;
break;
case 2:
pIECDEF[addr]->SET2[dot] = (float)tmpdata;
break;
case 3:
pIECDEF[addr]->SET3[dot] = (float)tmpdata;
break;
case 4:
pIECDEF[addr]->SET4[dot] = (float)tmpdata;
break;
case 5:
pIECDEF[addr]->SET5[dot] = (float)tmpdata;
break;
case 6:
pIECDEF[addr]->SET6[dot] = (float)tmpdata;
break;
case 7:
pIECDEF[addr]->SET7[dot] = (float)tmpdata;
break;
default:
printf(" The cpu num is Err ! cpu = %d \n",cpu);
break;
}
}
else printf("SET[%d] datasize = %d is not define ! \n",dot+1,width);
p = p + width ;
}
}
fclose(fp1);
break;
default:
break;
}
}
PSL_PL2_Proc(addr)
unsigned char addr;
{
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -