📄 nsiec104server.c
字号:
NsIec104Struct.ReceiveYkId=YkObject;
YkAction=YkInformation&0x03;
switch(YkAction)
{
case 1: /* Open */
NsIec104Struct.YkCellAction=NS_TRIP;
break;
case 2: /* close */
NsIec104Struct.YkCellAction=NS_CLOSE;
break;
default:
break;
}
NsIec104Struct.YkCellNumber=NsGetYkCell(NS_YK_CELL_NUMBER,NsIec104Struct.ReceiveYkId);
NsIec104Struct.YkKgNumber=NsGetYkCell(NS_YK_CELL_KG,NsIec104Struct.ReceiveYkId);
NsIec104Struct.YkNowState=NS_YK_SELECT;
Media=NsGetYkCell(NS_YK_CELL_CPU,NsIec104Struct.ReceiveYkId);
Dear.NsYkPort=NsIec104Struct.Card+NS_IEC_104_YK_BASE_PORT;
Dear.NsYkSlavePort=Media;
NsPutDear(&Dear,6);
NsIec104SendYkMessage(NS_YK_SELECT,NsIec104Struct.YkCellAction);
NsIec104Struct.YkStartSign=ON;
getforsecond(&NsIec104Struct.YkStartTime);
/*
printf("\n Send Yk SelectId=%d Cell=%d Kg=%d",NsIec104Struct.ReceiveYkId,NsIec104Struct.YkCellNumber,NsIec104Struct.YkKgNumber);
*/
break;
case 2: /* YkExe */
NsIec104Struct.ReceiveYkId=YkObject;
YkAction=YkInformation&0x03;
switch(YkAction)
{
case 1: /* Open */
NsIec104Struct.YkCellAction=NS_TRIP;
break;
case 2: /* close */
NsIec104Struct.YkCellAction=NS_CLOSE;
break;
default:
NsIec104Struct.YkCellAction=0xff;
break;
}
NsIec104Struct.YkCellNumber=NsGetYkCell(NS_YK_CELL_NUMBER,NsIec104Struct.ReceiveYkId);
NsIec104Struct.YkKgNumber=NsGetYkCell(NS_YK_CELL_KG,NsIec104Struct.ReceiveYkId);
NsIec104Struct.YkNowState=NS_YK_EXE;
Media=NsGetYkCell(NS_YK_CELL_CPU,NsIec104Struct.ReceiveYkId);
Dear.NsYkPort=NsIec104Struct.Card+NS_IEC_104_YK_BASE_PORT;
Dear.NsYkSlavePort=Media;
NsPutDear(&Dear,6);
NsIec104SendYkMessage(NS_YK_EXE,NsIec104Struct.YkCellAction);
NsIec104Struct.YkStartSign=ON;
getforsecond(&NsIec104Struct.YkStartTime);
/*
printf("\n Send Yk ExeId=%d Cell=%d Kg=%d",NsIec104Struct.ReceiveYkId,NsIec104Struct.YkCellNumber,NsIec104Struct.YkKgNumber);
*/
break;
case 3:
NsIec104Struct.ReceiveYkId=YkObject;
YkAction=YkInformation&0x03;
switch(YkAction)
{
case 1: /* Open */
NsIec104Struct.YkCellAction=NS_TRIP;
break;
case 2: /* close */
NsIec104Struct.YkCellAction=NS_CLOSE;
break;
default:
NsIec104Struct.YkCellAction=0xff;
break;
}
NsIec104Struct.YkCellNumber=NsGetYkCell(NS_YK_CELL_NUMBER,NsIec104Struct.ReceiveYkId);
NsIec104Struct.YkKgNumber=NsGetYkCell(NS_YK_CELL_KG,NsIec104Struct.ReceiveYkId);
NsIec104Struct.YkNowState=NS_YK_ESC;
Media=NsGetYkCell(NS_YK_CELL_CPU,NsIec104Struct.ReceiveYkId);
Dear.NsYkPort=NsIec104Struct.Card+NS_IEC_104_YK_BASE_PORT;
Dear.NsYkSlavePort=Media;
NsPutDear(&Dear,6);
NsIec104SendYkMessage(NS_YK_ESC,NsIec104Struct.YkCellAction);
NsIec104Struct.YkStartSign=ON;
getforsecond(&NsIec104Struct.YkStartTime);
/*
printf("\n Send Yk EscId=%d Cell=%d Kg=%d",NsIec104Struct.ReceiveYkId,NsIec104Struct.YkCellNumber,NsIec104Struct.YkKgNumber);
*/
break;
default:
break;
}
}
static void NsIec104SendYkMessage(short Who,unsigned char Action)
{
char Dd1Message[16];
switch(Who)
{
case NS_YK_ESC:
Dd1Message[0]=SEND_YK_HOST_DD1;
Dd1Message[1]=NS_YK_ESC;
Dd1Message[2]=NsIec104Struct.YkCellNumber;
Dd1Message[3]=NsIec104Struct.YkKgNumber;
Dd1Message[4]=NsIec104Struct.YkCellAction;
NsHostSendYkMessage(SEND_YK_HOST_DD1,8,Dd1Message);
break;
case NS_YK_EXE:
Dd1Message[0]=SEND_YK_HOST_DD1;
Dd1Message[1]=NS_YK_EXE;
Dd1Message[2]=NsIec104Struct.YkCellNumber;
Dd1Message[3]=NsIec104Struct.YkKgNumber;
Dd1Message[4]=NsIec104Struct.YkCellAction;
NsHostSendYkMessage(SEND_YK_HOST_DD1,8,Dd1Message);
break;
case NS_YK_SELECT:
Dd1Message[0]=SEND_YK_HOST_DD1;
Dd1Message[1]=NS_YK_SELECT;
Dd1Message[2]=NsIec104Struct.YkCellNumber;
Dd1Message[3]=NsIec104Struct.YkKgNumber;
Dd1Message[4]=NsIec104Struct.YkCellAction;
NsHostSendYkMessage(SEND_YK_HOST_DD1,8,Dd1Message);
break;
}
}
static void NsIec104ReceiveYkReturn(void)
{
char ReturnMessage[16];
int Length,HasMessage;
NS_RELATION Dear;
if(NsIec104Struct.YkStartSign==ON)
{
NsGetDear(&Dear);
if(Dear.NsYkPort==(NsIec104Struct.Card+NS_IEC_104_YK_BASE_PORT))
{
/*
printf("\n Yk Return");
*/
if(NsHostReceiveYkMessage(SEND_YK_HOST_DD1,ReturnMessage)==1)
{
/*
printf("\nYkMes0=%0x--1=%0x--2=%0x---3=%0x---4=%0x",
ReturnMessage[0],ReturnMessage[1],ReturnMessage[2],ReturnMessage[3],ReturnMessage[4]);
*/
if(ReturnMessage[0]==SEND_YK_HOST_DD1)
{
if(NsIec104Struct.YkNowState==ReturnMessage[1])
{
if((ReturnMessage[2]==NsIec104Struct.YkCellNumber)&&
(ReturnMessage[3]==NsIec104Struct.YkKgNumber)&&
(ReturnMessage[4]==NsIec104Struct.YkCellAction))
{
NsIec104Struct.YkError=ReturnMessage[5];
if(NsIec104Struct.YkNowState==NS_YK_SELECT)
{
NsIec104SendYkSelectConfirm();
/*
printf("\n Selec Confim");
*/
}
else
{
if(NsIec104Struct.YkNowState==NS_YK_EXE)
NsIec104SendYkExeConfirm();
else
{
if(NsIec104Struct.YkNowState==NS_YK_ESC)
NsIec104SendYkEscConfirm();
}
}
}
}
}
}
}
}
}
static void NsIec104SendYkSelectConfirm(void)
{
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++]=0x07; /* 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 NsIec104SendYkExeConfirm(void)
{
unsigned short YkObject,Index;
unsigned char *P,i;
unsigned short RealNumber;
/* YkExe Confirm */
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++]=0x07; /* 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++]=0x01;
else
if(NsIec104Struct.YkCellAction==NS_CLOSE)
NsIec104Struct.SendBuffer[Index++]=0x02;
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");
}
taskDelay(100);
/* YkExe End */
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++]=10; /* 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++]=0x01;
else
if(NsIec104Struct.YkCellAction==NS_CLOSE)
NsIec104Struct.SendBuffer[Index++]=0x02;
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");
}
taskDelay(8);
}
static void NsIec104SendYkEscConfirm(void)
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -