drv103.c
来自「在Unix平台下完成的电力系统广发使用的IEC103规约的程序」· C语言 代码 · 共 1,190 行 · 第 1/3 页
C
1,190 行
C_SYN_NA_Proc()
{
}
C_RLK_NA_Proc()
{
}
IECSetupCmdProc()
{
printf("recv msg from node=%s proc=%s\n",
RcvMsg.orig_node_name,RcvMsg.orig_proc_name);
}
C_PL1_NA_Proc(addr)
unsigned char addr;
{
int rptr,wptr,length;
if( RcvDef.Buf[0]==LPCI_SYN ) return;
switch (pIECDEF[addr]->IODef.CONNECTTYPE)
{
case mLFP901A:
case mLFP902A:
case mLFP951A:
case mLFP921A:
case mLFP922:
case mRCS915C:
case mRCS915D:
case mRCS915E:
case mRCS974A:
case mRCS978C:
case mRCS9612A:
case mRCS900:
RCS_PL1_Proc(addr);
break;
case mBP2A:
case mBP2B:
BP_PL1_Proc(addr);
break;
case mMCD:
MCD_PL1_Proc(addr);
break;
case mPSL602:
PSL_PL1_Proc(addr);
break;
case mWMZ41A:
WMZ_PL1_Proc(addr);
break;
default:
printf("LINKADDR = %d type not defined! \n",pIECDEF[addr]->IODef.OCCNO);
break;
}
if( (Enqflag == 1 && RcvDef.Buf[6] == M_GD_NTA) ||
(RcvDef.Buf[6] == M_IDI_NA) ) return;
if( pIECDEF[addr]->IODef.ICNNO == 1 && pshm_bh_buf_w != (SHM_BH_DEF *)-1 ){
wptr = pshm_bh_buf_w->wptr;
length = RcvDef.Buf[1] + 6;
pshm_bh_buf_w->data[wptr].len = length;
pshm_bh_buf_w->data[wptr].addr = RcvDef.Buf[9];
pshm_bh_buf_w->data[wptr].type = 0;
RcvDef.Buf[4] = RcvDef.Buf[4] & 0x1f;
if( length > BH_BUF_LEN ) return;
memcpy(pshm_bh_buf_w->data[wptr].buf,RcvDef.Buf,length);
pshm_bh_buf_w->wptr = ( wptr + 1 ) % (BH_BUF_NUM * 4);
if( pshm_bh_buf_w->wptr == pshm_bh_buf_w->rptr )
pshm_bh_buf_w->oflag = 1;
if( pIECDEF[addr]->Display == 1 )
printf("BH write: addr=%d---rptr=%d---wptr=%d---oflag=%d--\n",addr,pshm_bh_buf_w->rptr,pshm_bh_buf_w->wptr,pshm_bh_buf_w->oflag);
/*
printf("pshm_bh_buf_w---addr=%d----wptr=%d---rptr=%d\n",addr,pshm_bh_buf_w->wptr,pshm_bh_buf_w->rptr);
printf("pshm_bh_buf_r---addr=%d----wptr=%d---rptr=%d\n",addr,pshm_bh_buf_r->wptr,pshm_bh_buf_r->rptr);
*/
}
}
C_PL2_NA_Proc(addr)
unsigned char addr;
{
switch (pIECDEF[addr]->IODef.CONNECTTYPE)
{
case mBP2A:
case mBP2B:
BP_PL2_Proc(addr);
break;
case mMCD:
MCD_PL2_Proc(addr);
break;
case mPSL602:
PSL_PL2_Proc(addr);
break;
case mWMZ41A:
WMZ_PL2_Proc(addr);
break;
default:
break;
}
}
AlarmProc(str,tab)
char str[],tab[];
{
alarm_msg Alarm_Msg;
audio_msg Audio;
struct tm *time_ptr;
time_t Sclock;
Sclock=time((time_t *) NULL);
time_ptr=localtime(&Sclock);
Alarm_Msg.alarm = 1;
Alarm_Msg.log = 1;
Alarm_Msg.hour = time_ptr->tm_hour;
Alarm_Msg.minute = time_ptr->tm_min;
Alarm_Msg.second = time_ptr->tm_sec;
Alarm_Msg.ms = 0;
Alarm_Msg.n = 0;
Alarm_Msg.state = 0x80;
strcpy(Alarm_Msg.alarm_tag,tab);
sprintf(Alarm_Msg.msg,"%s (%s)",str,hostname);
build_alarm(&Alarm_Msg,0);
Audio.audio_no=2;
audio_alarm(&Audio);
}
Find_Relay_GRP(addr)
unsigned char addr;
{
int i,j;
for(i=0;i<MaxGRPNum;i++) pIECDEF[addr]->GROUP[i] = 0;
/* 不同型号保护有不同的 cpu */
switch (pIECDEF[addr]->IODef.CONNECTTYPE)
{
/*
case mLFP901A:
case mLFP902A:
case mLFP951A:
case mRCS915C:
case mRCS915D:
case mRCS915E:
case mRCS974A:
pIECDEF[addr]->GROUP[1] = pIECDEF[addr]->GROUP[2] = pIECDEF[addr]->GROUP[3] = 1;
break;
case mRCS978C:
pIECDEF[addr]->GROUP[1] = pIECDEF[addr]->GROUP[2] = pIECDEF[addr]->GROUP[3] = pIECDEF[addr]->GROUP[4] = 1;
pIECDEF[addr]->GROUP[5] = pIECDEF[addr]->GROUP[6] = pIECDEF[addr]->GROUP[8] = pIECDEF[addr]->GROUP[9] = 1;
break;
case mLFP921A:
case mLFP922:
case mRCS9612A:
case mRCS900:
pIECDEF[addr]->GROUP[1] = pIECDEF[addr]->GROUP[2] = pIECDEF[addr]->GROUP[3] = 1;
break;
*/
case mLFP901A:
case mLFP902A:
case mLFP951A:
case mRCS915C:
case mRCS915D:
case mRCS915E:
case mRCS974A:
case mRCS978C:
case mLFP921A:
case mLFP922:
case mRCS9612A:
case mRCS900:
C_GC_NA_B4(addr);
TxDriver(SendDef.Buf,SendDef.SendSize);
if (RxDrvCheckProc(addr) > 0) C_GC_NA_B4_Proc();
pIECDEF[addr]->PAD1 = 0;
break;
case mBP2A:
case mBP2B:
pIECDEF[addr]->GROUP[1] = pIECDEF[addr]->GROUP[2] = pIECDEF[addr]->GROUP[3] = 1;
pIECDEF[addr]->PAD1 = 1;
break;
case mMCD:
pIECDEF[addr]->GROUP[2] = 1;
pIECDEF[addr]->PAD1 = 1;
break;
case mPSL602:
pIECDEF[addr]->GROUP[4] = 1;
pIECDEF[addr]->PAD1 = 1;
break;
case mWMZ41A:
pIECDEF[addr]->GROUP[1] = 1;
pIECDEF[addr]->PAD1 = 1;
break;
default:
printf("LINKADDR = %d type not defined! \n",pIECDEF[addr]->IODef.OCCNO);
break;
}
}
C_RFB_NA_3(addr) /* Reset Frame Count Bit */
unsigned char addr;
{
pIECDEF[addr]->FCB = 0;
memset(SendDef.Buf,0,MaxSendBuf);
SendDef.Buf[0] = LPCI_SYN;
SendDef.Buf[1] = 0x40 |C_RFB_NA;
SendDef.Buf[2] = pIECDEF[addr]->IODef.OCCNO;
SendDef.Buf[3] = sum( &(SendDef.Buf[1]),2 );
SendDef.Buf[4] = LPCI_ETX;
SendDef.SendSize = 5;
}
C_RCU_NA_3(addr) /* Reset Commu Unit */
unsigned char addr;
{
pIECDEF[addr]->FCB = 0;
memset(SendDef.Buf,0,MaxSendBuf);
SendDef.Buf[0] = LPCI_SYN;
SendDef.Buf[1] = 0x40 | C_RCU_NA;
SendDef.Buf[2] = pIECDEF[addr]->IODef.OCCNO;
SendDef.Buf[3] = sum( &(SendDef.Buf[1]),2 );
SendDef.Buf[4] = LPCI_ETX;
SendDef.SendSize = 5;
}
C_RLK_NA_3(addr) /* Request Link Status */
unsigned char addr;
{
memset(SendDef.Buf,0,MaxSendBuf);
SendDef.Buf[0] = LPCI_SYN;
SendDef.Buf[1] = 0x40 | C_RLK_NA;
SendDef.Buf[2] = pIECDEF[addr]->IODef.OCCNO;
SendDef.Buf[3] = sum( &(SendDef.Buf[1]),2 );
SendDef.Buf[4] = LPCI_ETX;
SendDef.SendSize = 5;
}
C_PL1_NA_3(addr) /* Request P1 Data */
unsigned char addr;
{
memset(SendDef.Buf,0,MaxSendBuf);
SendDef.Buf[0] = LPCI_SYN;
SendDef.Buf[1] = 0x40 | pIECDEF[addr]->FCB | pIECDEF[addr]->FCV | C_PL1_NA;
SendDef.Buf[2] = pIECDEF[addr]->IODef.OCCNO;
SendDef.Buf[3] = sum( &(SendDef.Buf[1]),2 );
SendDef.Buf[4] = LPCI_ETX;
SendDef.SendSize = 5;
}
C_PL2_NA_3(addr) /* Request P2 Data */
unsigned char addr;
{
memset(SendDef.Buf,0,MaxSendBuf);
SendDef.Buf[0] = LPCI_SYN;
SendDef.Buf[1] = 0x40 | pIECDEF[addr]->FCB | pIECDEF[addr]->FCV | C_PL2_NA;
SendDef.Buf[2] = pIECDEF[addr]->IODef.OCCNO;
SendDef.Buf[3] = sum( &(SendDef.Buf[1]),2 );
SendDef.Buf[4] = LPCI_ETX;
SendDef.SendSize = 5;
}
C_IGI_NA_3(addr) /* General Interrogation */
unsigned char addr;
{
memset(SendDef.Buf,0,MaxSendBuf);
SendDef.Buf[0] = LPCI_STX;
SendDef.Buf[1] = 9;
SendDef.Buf[2] = 9;
SendDef.Buf[3] = LPCI_STX;
SendDef.Buf[4] = 0x40 | pIECDEF[addr]->FCB | pIECDEF[addr]->FCV | C_SND_AK;
SendDef.Buf[5] = pIECDEF[addr]->IODef.OCCNO;
SendDef.Buf[6] = C_IGI_NA;
SendDef.Buf[7] = 0x81;
SendDef.Buf[8] = COT_IGI;
SendDef.Buf[9] = pIECDEF[addr]->IODef.OCCNO;
SendDef.Buf[10] = FUN_GLB;
SendDef.Buf[11] = 0x00;
SendDef.Buf[12] = pIECDEF[addr]->SCN++;
SendDef.Buf[13] = sum( &(SendDef.Buf[4]),SendDef.Buf[1] );
SendDef.Buf[14] = LPCI_ETX;
SendDef.SendSize = 15;
}
C_SYN_TA_3(addr) /* Clock Synchronization */
unsigned char addr;
{
struct timeb CurrentTime;
struct tm *pTime;
int ms;
memset(SendDef.Buf,0,MaxSendBuf);
SendDef.Buf[0] = LPCI_STX;
SendDef.Buf[1] = 15;
SendDef.Buf[2] = 15;
SendDef.Buf[3] = LPCI_STX;
SendDef.Buf[4] = 0x40 | pIECDEF[addr]->FCB | pIECDEF[addr]->FCV | C_SYN_NK;
SendDef.Buf[5] = 0xff;
SendDef.Buf[6] = C_SYN_TA;
SendDef.Buf[7] = 0x81;
SendDef.Buf[8] = COT_SYN;
SendDef.Buf[9] = 0xff;
SendDef.Buf[10] = FUN_GLB;
SendDef.Buf[11] = 0x00;
ftime(&CurrentTime);
pTime=localtime(&CurrentTime.time);
ms=pTime->tm_sec*60+CurrentTime.millitm;
SendDef.Buf[12] = ms & 0xff;
SendDef.Buf[13] = ms >> 8;
SendDef.Buf[14] = pTime->tm_min;
SendDef.Buf[15] = pTime->tm_hour;
SendDef.Buf[16] = (pTime->tm_wday<<5) | pTime->tm_mday;
SendDef.Buf[17] = pTime->tm_mon+1;
SendDef.Buf[18] = pTime->tm_year % 100;
SendDef.Buf[19] = sum( &(SendDef.Buf[4]),SendDef.Buf[1] );
SendDef.Buf[20] = LPCI_ETX;
SendDef.SendSize = 21;
}
C_GC_NA_B1(addr) /* General */
unsigned char addr;
{
memset(SendDef.Buf,0,MaxSendBuf);
SendDef.Buf[0] = LPCI_STX;
SendDef.Buf[1] = 10;
SendDef.Buf[2] = 10;
SendDef.Buf[3] = LPCI_STX;
SendDef.Buf[4] = 0x40 | pIECDEF[addr]->FCB | pIECDEF[addr]->FCV | C_SND_AK;
SendDef.Buf[5] = pIECDEF[addr]->IODef.OCCNO;
SendDef.Buf[6] = C_GC_NA;
SendDef.Buf[7] = 0x81;
SendDef.Buf[8] = COT_GRD;
SendDef.Buf[9] = pIECDEF[addr]->IODef.OCCNO;
SendDef.Buf[10] = FUN_GEN;
SendDef.Buf[11] = 240;
SendDef.Buf[12] = 0;
SendDef.Buf[13] = 0;
SendDef.Buf[14] = sum( &(SendDef.Buf[4]),SendDef.Buf[1] );
SendDef.Buf[15] = LPCI_ETX;
SendDef.SendSize = 16;
}
C_GC_NA_B3(addr,grp) /* General */
unsigned char addr;
int grp;
{
memset(SendDef.Buf,0,MaxSendBuf);
SendDef.Buf[0] = LPCI_STX;
SendDef.Buf[1] = 13;
SendDef.Buf[2] = 13;
SendDef.Buf[3] = LPCI_STX;
SendDef.Buf[4] = 0x40 | pIECDEF[addr]->FCB | pIECDEF[addr]->FCV | C_SND_AK;
SendDef.Buf[5] = pIECDEF[addr]->IODef.OCCNO;
SendDef.Buf[6] = C_GC_NA;
SendDef.Buf[7] = 0x81;
SendDef.Buf[8] = COT_GRD;
SendDef.Buf[9] = pIECDEF[addr]->IODef.OCCNO;
SendDef.Buf[10] = FUN_GEN;
SendDef.Buf[11] = 241;
SendDef.Buf[12] = 0;
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?