📄 wmz41a.c
字号:
#include "iec103.h"
#include "wmz41a.h"
extern SENDDEF SendDef;
extern RCVDEF RcvDef;
extern IECDEF *pIECDEF[MaxIECNum],*pIEC;
extern char hostname[NAME_SIZE+1];
extern SysDef *pSysDef;
extern int Enqflag;
WMZ_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];
int audio,ms,set_num;
float tmpdata;
int rptr,wptr,length;
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 0xd2:
for( i=0;i<sizeof(WMZ_D2_Event)/sizeof(EVTALM);i++ )
if( WMZ_D2_Event[i].index == infno ) break;
strcpy(pStr,WMZ_D2_Event[i].text);
audio = WMZ_D2_Event[i].audio;
dpi = WMZ_D2_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:
break;
case M_GD_NTA: /* 通用分类标识 */
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;
p += 3;
width=*p;
p += 2;
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 + (*(p+1)) * 256 ) / 100.0;
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 if(width == 1){
tmpdata = (*p);
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 ;
}
}
break;
default:
break;
}
}
WMZ_PL2_Proc(addr)
unsigned char addr;
{
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -