?? nsiec104server.c
字號:
unsigned short YkObject,Index;
unsigned char *P,i;
unsigned short RealNumber;
Index=0;
NsIec104Struct.SendBuffer[Index++]=0x68;
NsIec104Struct.SendBuffer[Index++]=0x00;
RealNumber=(NsIec104Struct.SendMeNumber<<1);
P=(unsigned char *)&RealNumber;
NsIec104Struct.SendBuffer[Index++]=P[0]; /* send number */
NsIec104Struct.SendBuffer[Index++]=P[1];
NsIec104Struct.SendMeNumber=(NsIec104Struct.SendMeNumber+1)%65535;
NsIec104Struct.SendBuffer[Index++]=NsIec104Struct.ReceiveHimNumber[0]; /* receive number */
NsIec104Struct.SendBuffer[Index++]=NsIec104Struct.ReceiveHimNumber[1];
NsIec104Struct.SendBuffer[Index++]=NsIec104Struct.YkYtType; /* asdu type */
NsIec104Struct.SendBuffer[Index++]=1; /* information object count */
/* REASONBYTE now is two */
NsIec104Struct.SendBuffer[Index++]=0x09; /* reason */
NsIec104Struct.SendBuffer[Index++]=0x00; /* reason */
for(i=0;i<NS_IEC_104_ASDUADDRESSBYTE;i++)
NsIec104Struct.SendBuffer[Index++]=NsIec104Struct.CommonAsduAddress[i];
/* Information Object Address now three byte: 0xc01---0xc80 */
YkObject=NsIec104Struct.ReceiveYkId+0xb01;
P=(unsigned char *)&YkObject;
NsIec104Struct.SendBuffer[Index++]=P[0];
NsIec104Struct.SendBuffer[Index++]=P[1];
NsIec104Struct.SendBuffer[Index++]=0x00;
/* Value */
if(NsIec104Struct.YkCellAction==NS_TRIP)
NsIec104Struct.SendBuffer[Index++]=0x81;
else
if(NsIec104Struct.YkCellAction==NS_CLOSE)
NsIec104Struct.SendBuffer[Index++]=0x82;
else
NsIec104Struct.YkCellAction=0xff;
/* Repair Length */
NsIec104Struct.SendBuffer[1]=Index-2;
if((NsIec104Struct.SendLength=send(NsIec104Struct.NsNewSocketId,&NsIec104Struct.SendBuffer[0],Index,0x0))<0)
{
perror ("Client FirstWrite Error");
}
}
static void NsIec104ProcessPulseAck(void)
{
unsigned short i,Index,RealNumber;
unsigned char *P;
/* First Send Confirm */
Index=0;
NsIec104Struct.SendBuffer[Index++]=0x68;
NsIec104Struct.SendBuffer[Index++]=0x0e;
RealNumber=(NsIec104Struct.SendMeNumber<<1);
P=(unsigned char *)&RealNumber;
NsIec104Struct.SendBuffer[Index++]=P[0]; /* send number */
NsIec104Struct.SendBuffer[Index++]=P[1];
NsIec104Struct.SendMeNumber=(NsIec104Struct.SendMeNumber+1)%65535;
NsIec104Struct.SendBuffer[Index++]=NsIec104Struct.ReceiveHimNumber[0]; /* receive number */
NsIec104Struct.SendBuffer[Index++]=NsIec104Struct.ReceiveHimNumber[1];
NsIec104Struct.SendBuffer[Index++]=101;
NsIec104Struct.SendBuffer[Index++]=1;
for(i=0;i< NS_IEC_104_REASONBYTE;i++)
NsIec104Struct.SendBuffer[Index++]=0x07;
for(i=0;i<NS_IEC_104_ASDUADDRESSBYTE;i++)
NsIec104Struct.SendBuffer[Index++]=NsIec104Struct.CommonAsduAddress[i];
for(i=0;i<NS_IEC_104_INFORMATIONBYTE;i++)
NsIec104Struct.SendBuffer[Index++]=NsIec104Struct.InformationObject[i];
NsIec104Struct.SendBuffer[Index++]=NsIec104Struct.Qcc;
if((NsIec104Struct.SendLength = send(NsIec104Struct.NsNewSocketId,&NsIec104Struct.SendBuffer[0],Index,0x0))<0)
{
perror ("Client Write Error");
}
}
static void NsIec104ProcessPulseEnd(void)
{
unsigned short i,Index,RealNumber;
unsigned char *P;
/* end confirm*/
taskDelay(16);
Index=0;
NsIec104Struct.SendBuffer[Index++]=0x68;
NsIec104Struct.SendBuffer[Index++]=0x0e;
RealNumber=(NsIec104Struct.SendMeNumber<<1);
P=(unsigned char *)&RealNumber;
NsIec104Struct.SendBuffer[Index++]=P[0]; /* send number */
NsIec104Struct.SendBuffer[Index++]=P[1];
NsIec104Struct.SendMeNumber=(NsIec104Struct.SendMeNumber+1)%65535;
NsIec104Struct.SendBuffer[Index++]=NsIec104Struct.ReceiveHimNumber[0]; /* receive number */
NsIec104Struct.SendBuffer[Index++]=NsIec104Struct.ReceiveHimNumber[1];
NsIec104Struct.SendBuffer[Index++]=101;
NsIec104Struct.SendBuffer[Index++]=1;
for(i=0;i< NS_IEC_104_REASONBYTE;i++)
NsIec104Struct.SendBuffer[Index++]=10;
for(i=0;i<NS_IEC_104_ASDUADDRESSBYTE;i++)
NsIec104Struct.SendBuffer[Index++]=NsIec104Struct.CommonAsduAddress[i];
for(i=0;i<NS_IEC_104_INFORMATIONBYTE;i++)
NsIec104Struct.SendBuffer[Index++]=NsIec104Struct.InformationObject[i];
NsIec104Struct.SendBuffer[Index++]=NsIec104Struct.Qcc;
if((NsIec104Struct.SendLength = send(NsIec104Struct.NsNewSocketId,&NsIec104Struct.SendBuffer[0],Index,0x0)) < 0)
{
perror ("Client Write Error");
}
}
static void NsIec104ProcessPulse(void)
{
unsigned short General,Index;
unsigned char *P;
unsigned short i,j,RealNumber;
NsIec104Struct.Qcc=NsIec104Struct.ReceiveBuffer[NS_IEC_104_QCC_POSITION];
NsIec104Struct.FreezeSign=NsIec104Struct.Qcc&0xc0;
NsIec104Struct.FreezeSign>>=6;
NsIec104Struct.PulseGroup=NsIec104Struct.Qcc&0x3f;
switch(NsIec104Struct.FreezeSign)
{
case 0:
NsIec104ProcessPulseData();
break;
case 1:
case 2:
case 3:
NsIec104ProcessPulseAck();
break;
}
}
static void NsIec104ProcessPulseGroup(void)
{
unsigned short General,Index;
unsigned char *P,start;
unsigned short i,j,RealNumber,YmLib;
for(start=0;start<2;start++)
{
Index=0;
NsIec104Struct.SendBuffer[Index++]=0x68;
NsIec104Struct.SendBuffer[Index++]=0x00;
RealNumber=(NsIec104Struct.SendMeNumber<<1);
P=(unsigned char *)&RealNumber;
NsIec104Struct.SendBuffer[Index++]=P[0]; /* send number */
NsIec104Struct.SendBuffer[Index++]=P[1];
NsIec104Struct.SendMeNumber=(NsIec104Struct.SendMeNumber+1)%65535;
NsIec104Struct.SendBuffer[Index++]=NsIec104Struct.ReceiveHimNumber[0]; /* receive number */
NsIec104Struct.SendBuffer[Index++]=NsIec104Struct.ReceiveHimNumber[1];
NsIec104Struct.SendBuffer[Index++]=15; /* asdu type */
NsIec104Struct.SendBuffer[Index++]=16; /* information object count */
/* REASONBYTE now is two */
NsIec104Struct.SendBuffer[Index++]=37+NsIec104Struct.PulseGroup; /* reason */
NsIec104Struct.SendBuffer[Index++]=0x0; /* reason */
for(i=0;i<NS_IEC_104_ASDUADDRESSBYTE;i++)
NsIec104Struct.SendBuffer[Index++]=NsIec104Struct.CommonAsduAddress[i];
YmLib=start*16+32*(NsIec104Struct.PulseGroup-1);
switch(NsIec104Struct.Table)
{
case 0:
NsGetDd1Lib(NS_YM_DATA,YmLib,NsIec104Struct.DataBuff,16);
break;
case 1:
NsGetDd2Lib(NS_YM_DATA,YmLib,NsIec104Struct.DataBuff,16);
break;
case 2:
NsGetDd3Lib(NS_YM_DATA,YmLib,NsIec104Struct.DataBuff,16);
break;
case 3:
NsGetDd4Lib(NS_YM_DATA,YmLib,NsIec104Struct.DataBuff,16);
break;
}
for(i=0;i<16;i++)
{
/* Information Object Address now three byte: 0xc01---0xc80 */
NsIec104Struct.SendBuffer[Index++]=0x80+i+start*16+32*(NsIec104Struct.PulseGroup-1);
NsIec104Struct.SendBuffer[Index++]=0x0c;
NsIec104Struct.SendBuffer[Index++]=0;
/* Value */
NsIec104Struct.SendBuffer[Index++]=NsIec104Struct.DataBuff[4*i];
NsIec104Struct.SendBuffer[Index++]=NsIec104Struct.DataBuff[4*i+1];
NsIec104Struct.SendBuffer[Index++]=NsIec104Struct.DataBuff[4*i+2];
NsIec104Struct.SendBuffer[Index++]=NsIec104Struct.DataBuff[4*i+3];
/* sequence number */
NsIec104Struct.SendBuffer[Index++]=start*16+i;
}
/* Repair Length */
NsIec104Struct.SendBuffer[1]=Index-2;
if((NsIec104Struct.SendLength=send(NsIec104Struct.NsNewSocketId,&NsIec104Struct.SendBuffer[0],Index,0x0))<0)
{
perror ("Client FirstWrite Error");
}
}
}
static void NsIec104ProcessPulseAll(void)
{
unsigned short General,Index;
unsigned char *P,GroupIndex,start;
unsigned short i,j,RealNumber;
unsigned long InformationObject;
GroupIndex=0;
NsIec104Struct.NeedSendNumber=0;
NsIec104Struct.HasSendNumber=0;
NsIec104Struct.LeftSendNumber=0;
/* First Send Confirm */
Index=0;
NsIec104Struct.GroupSendBuffer[GroupIndex][Index++]=0x68;
NsIec104Struct.GroupSendBuffer[GroupIndex][Index++]=0x0e;
RealNumber=(NsIec104Struct.SendMeNumber<<1);
P=(unsigned char *)&RealNumber;
NsIec104Struct.GroupSendBuffer[GroupIndex][Index++]=P[0]; /* send number */
NsIec104Struct.GroupSendBuffer[GroupIndex][Index++]=P[1];
NsIec104Struct.SendMeNumber=(NsIec104Struct.SendMeNumber+1)%65535;
NsIec104Struct.GroupSendBuffer[GroupIndex][Index++]=NsIec104Struct.ReceiveHimNumber[0]; /* receive number */
NsIec104Struct.GroupSendBuffer[GroupIndex][Index++]=NsIec104Struct.ReceiveHimNumber[1];
NsIec104Struct.GroupSendBuffer[GroupIndex][Index++]=101;
NsIec104Struct.GroupSendBuffer[GroupIndex][Index++]=1;
for(i=0;i< NS_IEC_104_REASONBYTE;i++)
NsIec104Struct.GroupSendBuffer[GroupIndex][Index++]=0x07;
for(i=0;i<NS_IEC_104_ASDUADDRESSBYTE;i++)
NsIec104Struct.GroupSendBuffer[GroupIndex][Index++]=NsIec104Struct.CommonAsduAddress[i];
for(i=0;i<NS_IEC_104_INFORMATIONBYTE;i++)
NsIec104Struct.GroupSendBuffer[GroupIndex][Index++]=NsIec104Struct.InformationObject[i];
NsIec104Struct.GroupSendBuffer[GroupIndex][Index++]=NsIec104Struct.Qcc;
NsIec104Struct.GroupSendLength[GroupIndex]=Index;
GroupIndex++;
NsIec104Struct.NeedSendNumber++;
for(start=0;start<NS_IEC_104_TOTAL_YM_TIMES;start++) /* total 128 ym send 8 times */
{
Index=0;
NsIec104Struct.GroupSendBuffer[GroupIndex][Index++]=0x68;
NsIec104Struct.GroupSendBuffer[GroupIndex][Index++]=0x00;
RealNumber=(NsIec104Struct.SendMeNumber<<1);
P=(unsigned char *)&RealNumber;
NsIec104Struct.GroupSendBuffer[GroupIndex][Index++]=P[0]; /* send number */
NsIec104Struct.GroupSendBuffer[GroupIndex][Index++]=P[1];
NsIec104Struct.SendMeNumber=(NsIec104Struct.SendMeNumber+1)%65535;
NsIec104Struct.GroupSendBuffer[GroupIndex][Index++]=NsIec104Struct.ReceiveHimNumber[0]; /* receive number */
NsIec104Struct.GroupSendBuffer[GroupIndex][Index++]=NsIec104Struct.ReceiveHimNumber[1];
NsIec104Struct.GroupSendBuffer[GroupIndex][Index++]=15; /* asdu type */
NsIec104Struct.GroupSendBuffer[GroupIndex][Index++]=NS_IEC_104_ONCE_YM ; /* information object count */
/* REASONBYTE now is two */
NsIec104Struct.GroupSendBuffer[GroupIndex][Index++]=37 ; /* reason */
NsIec104Struct.GroupSendBuffer[GroupIndex][Index++]=0x0; /* reason */
for(i=0;i<NS_IEC_104_ASDUADDRESSBYTE;i++)
NsIec104Struct.GroupSendBuffer[GroupIndex][Index++]=NsIec104Struct.CommonAsduAddress[i];
switch(NsIec104Struct.Table)
{
case 0:
NsGetDd1Lib(NS_YM_DATA,start*NS_IEC_104_ONCE_YM,NsIec104Struct.DataBuff,NS_IEC_104_ONCE_YM);
break;
case 1:
NsGetDd2Lib(NS_YM_DATA,start*NS_IEC_104_ONCE_YM,NsIec104Struct.DataBuff,NS_IEC_104_ONCE_YM);
break;
case 2:
NsGetDd3Lib(NS_YM_DATA,start*NS_IEC_104_ONCE_YM,NsIec104Struct.DataBuff,NS_IEC_104_ONCE_YM);
break;
case 3:
NsGetDd4Lib(NS_YM_DATA,start*NS_IEC_104_ONCE_YM,NsIec104Struct.DataBuff,NS_IEC_104_ONCE_YM);
break;
}
for(i=0;i<NS_IEC_104_ONCE_YM;i++)
{
/* Information Object Address now three byte: 0xc01---0xc80 */
InformationObject=0xc01+i+start*NS_IEC_104_ONCE_YM;
P=(unsigned char *)&InformationObject;
NsIec104Struct.GroupSendBuffer[GroupIndex][Index++]=P[0];
NsIec104Struct.GroupSendBuffer[GroupIndex][Index++]=P[1];
NsIec104Struct.GroupSendBuffer[GroupIndex][Index++]=P[2];
/* Value */
NsIec104Struct.GroupSendBuffer[GroupIndex][Index++]=NsIec104Struct.DataBuff[4*i];
NsIec104Struct.GroupSendBuffer[GroupIndex][Index++]=NsIec104Struct.DataBuff[4*i+1];
NsIec104Struct.GroupSendBuffer[GroupIndex][Index++]=NsIec104Struct.DataBuff[4*i+2];
NsIec104Struct.GroupSendBuffer[GroupIndex][Index++]=NsIec104Struct.DataBuff[4*i+3];
/* sequence number */
NsIec104Struct.GroupSendBuffer[GroupIndex][Index++]=i;
}
/* Repair Length */
NsIec104Struct.GroupSendBuffer[GroupIndex][1]=Index-2;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -