?? nsiec104server.c
字號:
if(YcNap<0)
YcNap=NsIec104Struct.YcLastValue[NsIec104Struct.YcLibIndex+i]-YcValue;
if(YcNap>NsIec104Struct.YcNap[NsIec104Struct.YcLibIndex+i])
{
NsIec104Struct.YcChangeCount++;
NsIec104Struct.YcLastValue[NsIec104Struct.YcLibIndex+i]=YcValue;*/
/* Information Object Address Now Three Bytes */
General=0x701+NsIec104Struct.YcLibIndex+i;
P=(unsigned char *)&General;
NsIec104Struct.SendBuffer[Index++]=P[0];
NsIec104Struct.SendBuffer[Index++]=P[1];
NsIec104Struct.SendBuffer[Index++]=0;
/*fYc = YcValue * 1.0;
P=(unsigned char *)&fYc;
NsIec104Struct.SendBuffer[Index++]=P[0];
NsIec104Struct.SendBuffer[Index++]=P[1];
NsIec104Struct.SendBuffer[Index++]=P[2];
NsIec104Struct.SendBuffer[Index++]=P[3];*/
NsIec104Struct.SendBuffer[Index++]=NsIec104Struct.DataBuff[2*i];
NsIec104Struct.SendBuffer[Index++]=NsIec104Struct.DataBuff[2*i + 1];
NsIec104Struct.SendBuffer[Index++]=0x00; /*qds*/
/*}*/
}
/* Repair Length and Count*/
NsIec104Struct.SendBuffer[1]=Index-2;
NsIec104Struct.SendBuffer[7]=NsIec104Struct.YcChangeCount;
if(NsIec104Struct.YcChangeCount>0)
{/*
printf("\n Co=%d Ind=%dGe=%d",NsIec104Struct.YcChangeCount,NsIec104Struct.YcLibIndex,General);
*/
if((NsIec104Struct.SendLength=send(NsIec104Struct.NsNewSocketId,&NsIec104Struct.SendBuffer[0],Index,0x0))<0)
{
perror ("Client FirstWrite Error");
}
}
}
static void NsIec104SendGroup(void)
{
if(NsIec104Struct.NeedSendNumber>0&&NsIec104Struct.HasSendNumber<NS_IEC104_MAX_K)
{
/*
printf("\n GroupId=%d",NsIec104Struct.NsNewSocketId);
*/
if((NsIec104Struct.SendLength=send(NsIec104Struct.NsNewSocketId,&NsIec104Struct.GroupSendBuffer[NsIec104Struct.LeftSendNumber][0],NsIec104Struct.GroupSendLength[NsIec104Struct.LeftSendNumber],0x0))<0)
{
perror ("GRoup Erroe");
}
NsIec104Struct.LeftSendNumber++;
/*
printf("\n Send Group=%d",NsIec104Struct.SendLength);
*/
if(NsIec104Struct.LeftSendNumber>=NsIec104Struct.NeedSendNumber)
{
NsIec104Struct.HasSendNumber=0;
NsIec104Struct.NeedSendNumber=0;
NsIec104Struct.LeftSendNumber=0;
}
}
taskDelay(108);
}
static void NsIec104Process(void)
{
int i;
/* printf("r:");
for(i=0;i<NsIec104Struct.ReceiveLength;i++)
printf("%4x",NsIec104Struct.ReceiveBuffer[i]);
printf("\n");
*/
if(NsIec104Struct.ReceiveLength>=NS_IEC_104_MIN_LENGTH&&NsIec104Struct.ReceiveBuffer[0]==NS_IEC_104_HEAD)
{
NsIec104Struct.FormatType=NsIec104Struct.ReceiveBuffer[2]&0x03;
if(NsIec104Struct.FormatType==0||NsIec104Struct.FormatType==2) /* I */
{
NsIec104ProcessFormatI();
}
else
{
if(NsIec104Struct.FormatType==1) /* S */
NsIec104ProcessFormatS();
else
{
if(NsIec104Struct.FormatType==3)/* U */
NsIec104ProcessFormatU();
}
}
NsIec104Reset();
}
}
static void NsIec104ProcessFormatI(void)
{
int i;
unsigned char *p;
unsigned short NoWay;
/*
printf("\nFormatI");
*/
NsIec104Struct.ApduLength=NsIec104Struct.ReceiveBuffer[1];
if(NsIec104Struct.ApduLength>NS_IEC_104_MIN_LENGTH)
{
NsIec104Struct.ReceiveHimNumber[0]=NsIec104Struct.ReceiveBuffer[2];
NsIec104Struct.ReceiveHimNumber[1]=NsIec104Struct.ReceiveBuffer[3];
NoWay=*(unsigned short *)&NsIec104Struct.ReceiveHimNumber[0];
NoWay>>=1;
NoWay+=1;
NoWay<<=1;
p=(unsigned char *)&NoWay;
NsIec104Struct.ReceiveHimNumber[0]=p[0];
NsIec104Struct.ReceiveHimNumber[1]=p[1];
NsIec104Struct.AsduType=NsIec104Struct.ReceiveBuffer[6];
for(i=0;i< NS_IEC_104_REASONBYTE;i++)
NsIec104Struct.TransmitReason[i]=NsIec104Struct.ReceiveBuffer[NS_STARTREASON+i];
for(i=0;i<NS_IEC_104_ASDUADDRESSBYTE;i++)
NsIec104Struct.CommonAsduAddress[i]=NsIec104Struct.ReceiveBuffer[NS_STARTASDUADDRESS+i];
for(i=0;i<NS_IEC_104_INFORMATIONBYTE;i++)
NsIec104Struct.InformationObject[i]=NsIec104Struct.ReceiveBuffer[NS_STARTINFORMATION+i];
NsIec104Struct.AsduQualifier=NsIec104Struct.ReceiveBuffer[NS_STARTQUALIFIER];
switch(NsIec104Struct.AsduType)
{
case 46:
case 47:
NsIec104Struct.YkYtType=NsIec104Struct.AsduType;
NsIec104ProcessYkYt();
break;
case 100: /* Interrogation */
NsIec104Interrogation();
break;
case 101:
NsIec104ProcessPulse();
break;
case 103:
NsIec104ProcessTime();
/*
printf("\n Time1");
*/
break;
default:
break;
}
}
}
static unsigned char NsIec104SendCosSoe(void)
{
unsigned short Number;
NS_SOE_FORMAT SoeData;
NS_COS_FORMAT CosData;
unsigned short Index,SendCount;
unsigned char *P,i,CosSendSign;
unsigned short RealNumber,Object,Msecond;
Index=0;
CosSendSign=0;
Number=NsCheckDd1Cos();
if(Number>0)
{
if(Number>36)
Number=36;
SendCount=0;
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++]=0x01; /* 0x01--->0x02 asdu type */
NsIec104Struct.SendBuffer[Index++]=1; /* information object count */
/* REASONBYTE now is two */
NsIec104Struct.SendBuffer[Index++]=0x03; /* reason */
NsIec104Struct.SendBuffer[Index++]=0x00; /* reason */
for(i=0;i<NS_IEC_104_ASDUADDRESSBYTE;i++)
NsIec104Struct.SendBuffer[Index++]=NsIec104Struct.CommonAsduAddress[i];
for(i=0;i<Number;i++)
{
if(NsGetDd1CosLib(&CosData)==ON)
{
SendCount++;
/* Information Object Address now three byte: 0xc01---0xc80 */
Object=CosData.SendNumber+0x01;
P=(unsigned char *)&Object;
NsIec104Struct.SendBuffer[Index++]=P[0];
NsIec104Struct.SendBuffer[Index++]=P[1];
NsIec104Struct.SendBuffer[Index++]=0x00;
NsIec104Struct.SendBuffer[Index++]=CosData.State;
}
}
/* Repair Length */
NsIec104Struct.SendBuffer[7]=SendCount; /* vsq number */
NsIec104Struct.SendBuffer[1]=Index-2;
}
else
{
Number=NsCheckDd1Soe();
if(Number>0)
{
if(Number>18)
Number=18;
SendCount=0;
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++]=30; /* asdu type */
NsIec104Struct.SendBuffer[Index++]=1; /* information object count */
/* REASONBYTE now is two */
NsIec104Struct.SendBuffer[Index++]=0x03; /* reason */
NsIec104Struct.SendBuffer[Index++]=0x00; /* reason */
for(i=0;i<NS_IEC_104_ASDUADDRESSBYTE;i++)
NsIec104Struct.SendBuffer[Index++]=NsIec104Struct.CommonAsduAddress[i];
for(i=0;i<Number;i++)
{
if(NsGetDd1SoeLib(&SoeData)==ON)
{
SendCount++;
/* Information Object Address now three byte: 0xc01---0xc80 */
Object=SoeData.SendNumber+0x01;
P=(unsigned char *)&Object;
NsIec104Struct.SendBuffer[Index++]=P[0];
NsIec104Struct.SendBuffer[Index++]=P[1];
NsIec104Struct.SendBuffer[Index++]=0x00;
NsIec104Struct.SendBuffer[Index++]=SoeData.State;
Msecond=SoeData.Msecond+SoeData.Second*1000;
P=(unsigned char *)&Msecond;
NsIec104Struct.SendBuffer[Index++]=P[0];
NsIec104Struct.SendBuffer[Index++]=P[1];
NsIec104Struct.SendBuffer[Index++]=SoeData.Minute;
NsIec104Struct.SendBuffer[Index++]=SoeData.Hour;
NsIec104Struct.SendBuffer[Index++]=SoeData.Day;
NsIec104Struct.SendBuffer[Index++]=SoeData.Month;
NsIec104Struct.SendBuffer[Index++]=(SoeData.Year-2000);
}
}
/* Repair Length */
NsIec104Struct.SendBuffer[7]=SendCount; /* vsq number */
NsIec104Struct.SendBuffer[1]=Index-2;
}
else
{
if(NsIec104Cycle[0].TimeSign== ON)
{
Index=0;
NsIec104Struct.SendBuffer[Index++]=0x68;
NsIec104Struct.SendBuffer[Index++]=0x04;
NsIec104Struct.SendBuffer[Index++]=0x43;
NsIec104Struct.SendBuffer[Index++]=0x00;
NsIec104Struct.SendBuffer[Index++]=0x00;
NsIec104Struct.SendBuffer[Index++]=0x00;
NsIec104Cycle[0].TimeSign=OFF;
}
}
}
if(Index>0)
{
NsIec104Struct.SendLength=send(NsIec104Struct.NsNewSocketId,&NsIec104Struct.SendBuffer[0],Index,0x0);
CosSendSign=0x01;
}
return CosSendSign;
}
static void NsIec104ProcessYkYt(void)
{
unsigned char YkInformation,YkReason,YkWhat;
unsigned short YkObject;
unsigned char Media,YkAction;
NS_RELATION Dear;
/*
Information Object Address 0xb01---0xb80
for(i=0;i< NS_IEC_104_REASONBYTE;i++)
NsIec104Struct.TransmitReason[i]=NsIec104Struct.ReceiveBuffer[NS_STARTREASON+i];
for(i=0;i<NS_IEC_104_INFORMATIONBYTE;i++)
NsIec104Struct.InformationObject[i]=NsIec104Struct.ReceiveBuffer[NS_STARTINFORMATION+i];
*/
YkInformation=NsIec104Struct.ReceiveBuffer[NS_STARTINFORMATION+NS_IEC_104_INFORMATIONBYTE];
YkReason=NsIec104Struct.ReceiveBuffer[NS_STARTREASON];
YkObject=NsIec104Struct.ReceiveBuffer[NS_STARTINFORMATION]+NsIec104Struct.ReceiveBuffer[NS_STARTINFORMATION+1]*256;
YkObject-=0xb01;
YkWhat=0; /* nothing */
if(YkReason==6)
{
if(YkInformation&0x80) /* YkSelect */
YkWhat=1;
else
YkWhat=2; /* YkExe*/
}
else
if(YkReason==8) /* Esc*/
YkWhat=3;
switch(YkWhat)
{
case 1: /* select */
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -