?? nsiec104server.c
字號:
NsIec104Struct.GroupSendLength[GroupIndex]=Index;
/*
if((NsIec104Struct.SendLength=send(NsIec104Struct.NsNewSocketId,&NsIec104Struct.GroupSendBuffer[GroupIndex][0],NsIec104Struct.GroupSendLength,0x0))<0)
{
perror ("Client FirstWrite Error");
}
*/
GroupIndex++;
NsIec104Struct.NeedSendNumber++;
}
/* Send Pulse End Packet */
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++]=10;
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;
/*
if((NsIec104Struct.SendLength = send(NsIec104Struct.NsNewSocketId,&NsIec104Struct.GroupSendBuffer[GroupIndex][0],NsIec104Struct.GroupSendLength,0x0)) < 0)
{
perror ("Client Write Error");
}
*/
/* mask 2003-01-24
GroupIndex++;
NsIec104Struct.NeedSendNumber++;
*/
}
static void NsIec104ProcessPulseData(void)
{
switch(NsIec104Struct.PulseGroup)
{
case 1:
case 2:
case 3:
case 4:
NsIec104ProcessPulseAck();
NsIec104ProcessPulseGroup();
NsIec104ProcessPulseEnd();
break;
case 5:
NsIec104ProcessPulseAll();
break;
}
}
static void NsIec104ProcessTime(void)
{
unsigned short i,Index,RealNumber,Mmsecond;
unsigned char *P,Year,Month,Day,Hour,Minute,Second;
struct tm NowTime;
/* First Send Confirm */
for(i=0;i<7;i++)
{
NsIec104Struct.TimeSave[i]=NsIec104Struct.ReceiveBuffer[NS_IEC_104_TIME_POSITION+i];
/*
printf("\n Time=%d",NsIec104Struct.TimeSave[i]);
*/
}
Mmsecond=(NsIec104Struct.ReceiveBuffer[NS_IEC_104_TIME_POSITION]
+256*NsIec104Struct.ReceiveBuffer[NS_IEC_104_TIME_POSITION+1])%1000;
Second=(NsIec104Struct.ReceiveBuffer[NS_IEC_104_TIME_POSITION]
+256*NsIec104Struct.ReceiveBuffer[NS_IEC_104_TIME_POSITION+1])/1000;
Minute=NsIec104Struct.ReceiveBuffer[NS_IEC_104_TIME_POSITION+2]&0x3f;
Hour=NsIec104Struct.ReceiveBuffer[NS_IEC_104_TIME_POSITION+3]&0x1f;
Day=NsIec104Struct.ReceiveBuffer[NS_IEC_104_TIME_POSITION+4]&0x1f;
Month=NsIec104Struct.ReceiveBuffer[NS_IEC_104_TIME_POSITION+5]&0x0f;
Year=NsIec104Struct.ReceiveBuffer[NS_IEC_104_TIME_POSITION+6]&0x7f;
/*
if(NsIec104Struct.SetTimeFlag)
{
NowTime.tm_sec = Second;
NowTime.tm_min = Minute;
NowTime.tm_hour = Hour;
NowTime.tm_mday = Day;
NowTime.tm_mon = Month;
NowTime.tm_year = Year + 2000;
setvxTime(&NowTime);
}
*/
/*
printf("\n Year=%d Month=%d Day=%d Hour=%d Min=%d Sec=%d Msec=%d",
Year,Month,Day,Hour,Minute,Second,Mmsecond);
*/
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++]=103;
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];
for(i=0;i<7;i++)
NsIec104Struct.SendBuffer[Index++]=NsIec104Struct.TimeSave[i];
NsIec104Struct.SendBuffer[1]=Index-2;
if((NsIec104Struct.SendLength = send(NsIec104Struct.NsNewSocketId,&NsIec104Struct.SendBuffer[0],Index,0x0))<0)
{
perror ("Client Write Error");
}
}
static void NsIec104Interrogation(void)
{
switch(NsIec104Struct.AsduQualifier)
{
case 20: /* All Interrogation */
NsIec104InterrogationAll();
break;
default:
NsIec104InterrogationGroup();
break;
}
}
static void NsIec104InterrogationGroup(void)
{
unsigned char WhichGroup;
if(NsIec104Struct.AsduQualifier>=NS_IEC104_GROUP_BEGIN&&NsIec104Struct.AsduQualifier<=NS_IEC104_GROUP_END)
{
WhichGroup=NsIec104Struct.ReceiveBuffer[NS_IEC_104_GROUP_BYTE];
WhichGroup-=21;
switch(WhichGroup)
{
case 0:
case 1:
case 2:
case 3:
case 4:
case 5:
case 6:
case 7:
NsIec104ProcessYxGroup(WhichGroup);
break;
case 8:
case 9:
case 10:
case 11:
NsIec104ProcessYcGroup(WhichGroup);
break;
case 12: /* location information */
NsIec104DefaultGroup(WhichGroup);
break;
case 13: /* BCD Information */
NsIec104DefaultGroup(WhichGroup);
break;
case 14: /* cell state */
NsIec104DefaultGroup(WhichGroup);
break;
case 15: /* backup use */
NsIec104DefaultGroup(WhichGroup);
break;
default:
NsIec104DefaultGroup(WhichGroup);
break;
}
}
}
static void NsIec104DefaultGroup(unsigned char Group)
{
unsigned short General,Index;
unsigned char *P;
unsigned short i,j,RealNumber;
/* 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++]=100;
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++]=21+Group;
if((NsIec104Struct.SendLength = send(NsIec104Struct.NsNewSocketId,&NsIec104Struct.SendBuffer[0],Index,0x0))<0)
{
perror ("Client Write Error");
}
taskDelay(6);
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++]=100;
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++]=21+Group;
if((NsIec104Struct.SendLength = send(NsIec104Struct.NsNewSocketId,&NsIec104Struct.SendBuffer[0],Index,0x0)) < 0)
{
perror ("Client Write Error");
}
}
static void NsIec104ProcessYxGroup(unsigned char Group)
{
unsigned short General,Index,YxLibIndex;
unsigned char *P,start,YxBit,YxByte;
unsigned short i,j,g,RealNumber;
/* Once Gonce need send 64 Yx 8 bytes Group from 0 begin*/
/* 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++]=100; /* transmit type */
NsIec104Struct.SendBuffer[Index++]=1; /* vsq */
for(i=0;i< NS_IEC_104_REASONBYTE;i++) /* reason */
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.
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -