📄 104lib.c
字号:
int max_num,size; struct tm *ptm; long tmp; unsigned char minute,hour,mday,month,weekday,year; tmp = time(NULL); ptm = (struct tm *)localtime(&tmp); minute = ptm->tm_min; hour = ptm->tm_hour; mday = ptm->tm_mday; month = ptm->tm_mon+1; year = ptm->tm_year%100; weekday = ptm->tm_wday;; count=0; size=11; ptr=data_buf; for(i=0;i<sp_soe_num;i++){ addr=pSPSoe[i].addr+DIN_START_NO; ptr[count*size] = addr&0xff; ptr[count*size+1] = ((addr%1024)>>8)&0xff; ptr[count*size+2] = (addr/1024)&0xff; ptr[count*size+3] = pSPSoe[i].state & 0x01; us_ms = pSPSoe[i].ms + pSPSoe[i].second * 1000; if( MyByteOrder ) rReverse( (char *)&us_ms,sizeof(short) ); memcpy( (char *)&(ptr[count*size+4]),(char *)&us_ms,sizeof(short) ); ptr[count*size+6] = pSPSoe[i].minute; ptr[count*size+7] = pSPSoe[i].hour; ptr[count*size+8] = (mday&0x1f)|(weekday<<5); ptr[count*size+9] = month&0x0f; ptr[count*size+10] = year&0x7f;/* printf("SOE(%02d:%02d:%02d.%03d)===%d\n", pSPSoe[i].hour,pSPSoe[i].minute, pSPSoe[i].second, pSPSoe[i].ms,us_ms);*/ count++; if( count * size >= MAX_MSG_LEN ){ for(k=0;k<sp_soe_num-i;k++){ pSPSoe[k].addr =pSPSoe[k+i].addr; pSPSoe[k].hour =pSPSoe[k+i].hour; pSPSoe[k].minute=pSPSoe[k+i].minute; pSPSoe[k].second=pSPSoe[k+i].second; pSPSoe[k].ms =pSPSoe[k+i].ms; pSPSoe[k].state =pSPSoe[k+i].state; } break; } } sp_soe_num = sp_soe_num-i; if ( count > 0 ){ cot=3; i=0; max_num=(MAX_APDU_LEN-15)/size; while ( count > max_num ){ M_PrepCmd(M_SP_TB,0,0, &(data_buf[i]),max_num,size); i = i + max_num*10; count = count - max_num; } M_PrepCmd(M_SP_TB,0,0, &(data_buf[i]),count,size); return; }}void M_DP_TB_Proc(){ int i,j,k,count,i_val,addr; unsigned char data_buf[MAX_MSG_LEN],*ptr; unsigned short us_ms; int max_num,size; struct tm *ptm; long tmp; unsigned char minute,hour,mday,month,weekday,year; tmp = time(NULL); ptm = (struct tm *)localtime(&tmp); minute = ptm->tm_min; hour = ptm->tm_hour; mday = ptm->tm_mday; month = ptm->tm_mon+1; year = ptm->tm_year%100; weekday = ptm->tm_wday; count=0; size=11; ptr=data_buf; for(i=0;i<dp_soe_num;i++){ addr=pDPSoe[i].addr+DIN_START_NO; ptr[count*size] = addr&0xff; ptr[count*size+1] = ((addr%1024)>>8)&0xff; ptr[count*size+2] = (addr/1024)&0xff; ptr[count*size+3] = pDPSoe[i].state & 0x03; us_ms = pDPSoe[i].ms + pDPSoe[i].second * 1000; if( MyByteOrder ) rReverse( (char *)&us_ms,sizeof(short) ); memcpy( (char *)&(ptr[count*11+4]),(char *)&us_ms,sizeof(short) ); ptr[count*size+6] = pDPSoe[i].minute; ptr[count*size+7] = pDPSoe[i].hour; ptr[count*size+8] = (mday&0x1f)|(weekday<<5); ptr[count*size+9] = month&0x0f; ptr[count*size+10] = year&0x7f; printf("SOE(%02d:%02d:%02d.%03d)===%d\n", pDPSoe[i].hour,pDPSoe[i].minute, pDPSoe[i].second, pDPSoe[i].ms,us_ms); count++; if( count * size >= MAX_MSG_LEN ){ for(k=0;k<dp_soe_num-i;k++){ pDPSoe[k].addr =pDPSoe[k+i].addr; pDPSoe[k].hour =pDPSoe[k+i].hour; pDPSoe[k].minute=pDPSoe[k+i].minute; pDPSoe[k].second=pDPSoe[k+i].second; pDPSoe[k].ms =pDPSoe[k+i].ms; pDPSoe[k].state =pDPSoe[k+i].state; } break; } } dp_soe_num = dp_soe_num-i; if ( count > 0 ){ cot=3; i=0; max_num=(MAX_APDU_LEN-15)/size; while ( count > max_num ){ M_PrepCmd(M_DP_TB,0,0, &(data_buf[i]),max_num,size); i = i + max_num*10; count = count - max_num; } M_PrepCmd(M_DP_TB,0,0, &(data_buf[i]),count,size); return; }}void M_EI_NA_Proc(){ unsigned char ptr[MAX_MSG_LEN]; int len; len=16; ptr[0] = 0x68; ptr[1] = len-2; ptr[2] = 0; ptr[3] = 0; ptr[4] = 0; ptr[5] = 0; ptr[6] = M_EI_NA; ptr[7] = 0x01 & 0x7f; ptr[8] = 0x04; ptr[9] = 0x00; ptr[10] = ASDU_ADDR&0xff; ptr[11] = (ASDU_ADDR>>8)&0xff; ptr[12] = 0; ptr[13] = 0; ptr[14] = 0; ptr[15] = 0x01<<8; pShmSocket.send_len = len; memcpy( pShmSocket.send_data,ptr,len ); send_msg();}void C_IC_NA_Proc(){ unsigned char data_buf[MAX_DATA_LEN]; int len; len=pShmSocket.recv_len; memcpy(data_buf,pShmSocket.recv_data,pShmSocket.recv_len); memcpy(pShmSocket.send_data,data_buf,len); pShmSocket.send_len=len; pShmSocket.send_data[8]=7; send_msg(); cot=20; ic_flag=1; M_SP_NA_Proc(); M_DP_NA_Proc(); M_ME_NA_Proc(); M_IT_NA_Proc(); M_ST_NA_Proc(); ic_flag=0; cot=10; memcpy(pShmSocket.send_data,data_buf,len); pShmSocket.send_len=len; pShmSocket.send_data[8]=10; send_msg();}void C_SC_NA_Proc(){ unsigned char data_buf[MAX_DATA_LEN]; int addr,i; int flag=0,action; char oper[100],tmpstr[256]; unsigned char buf[MAX_DATA_LEN],*ptr; memcpy( data_buf,pShmSocket.recv_data,pShmSocket.recv_len ); if(data_buf[8]!=6){ flag=0; pShmSocket.recv_data[8]=45; } flag =1; addr=data_buf[12]+data_buf[13]*256+data_buf[14]*65536; if (flag && data_buf[0] == 0x68 && data_buf[1] == 0X0e && data_buf[6] == C_SC_NA && data_buf[7] == 0x01 && data_buf[8] == 06 && data_buf[9] == 0x00 ){ action = (data_buf[15] & 0x01)+1; for(i=0;i<YKZ_NUM_DD;i++){ printf("ykz addr %x %d!\n",YkzList[i].addr,YkzList[i].action); if(YkzList[i].addr==addr && YkzList[i].action==action){ strcpy(YkMsg.desp,YkzList[i].tagdesp); strcpy(YkMsg.tagname,YkzList[i].tagname); strcpy(YkMsg.nodename,YkzList[i].nodename); break; } } if(i>=YKZ_NUM_DD){ pShmSocket.recv_data[8]=47; flag = 0; printf("addr %xH not defined!",addr); } if( (data_buf[15]&0x80) == 0x80 ){ if(flag){ if( (data_buf[15] & 0x01)== 0x01 ){ strcpy( oper,"合上" ); YkMsg.ctrl_flag=2; } else if((data_buf[15]&0x01) == 0x00 ){ strcpy( oper,"拉开" ); YkMsg.ctrl_flag=1; } sprintf(tmpstr,"%s选择: %s%s(对象%d)",DISPATCH,YkMsg.desp,oper,addr); write_log( tmpstr,"OPER_LOG" ); YkMsg.select_flag=1; YkMsg.addr=addr; YkMsg.select_time=NowTime.time; pShmSocket.recv_data[8]=7; } } else if ( (data_buf[15]&0x80) == 0x00 ){ if(addr!=YkMsg.addr || YkMsg.addr==0){ pShmSocket.recv_data[8]=47; flag=0; } if((data_buf[15] & 0x01)+1 != YkMsg.ctrl_flag){ pShmSocket.recv_data[8]=9; flag=0; } if(flag){ if( (data_buf[15] & 0x01)== 0x01 ){ strcpy( oper,"合上" ); YkMsg.ctrl_flag=2; } else if((data_buf[15]&0x01) == 0x00 ){ strcpy( oper,"拉开" ); YkMsg.ctrl_flag=1; } sprintf(tmpstr,"%s执行: %s%s(对象%d)",DISPATCH,YkMsg.desp,oper,YkMsg.addr); write_log( tmpstr,"OPER_LOG" ); YkMsg.exec_flag=1; pShmSocket.recv_data[8]=7; } } }else{ pShmSocket.recv_data[8]=10; flag=0; } if(flag==0){ YkMsg.select_flag=0; YkMsg.exec_flag=0; YkMsg.ctrl_flag=0; YkMsg.addr=0; } memset( buf,0,MAX_DATA_LEN ); memcpy( buf,pShmSocket.recv_data,pShmSocket.recv_len ); pShmSocket.send_len = pShmSocket.recv_len; memcpy( pShmSocket.send_data,buf,pShmSocket.send_len ); send_msg();}void C_SE_NA_Proc(){ unsigned char data_buf[MAX_DATA_LEN]; int addr,i; int flag=0,action; short *value; char oper[100],tmpstr[256]; unsigned char buf[MAX_DATA_LEN],*ptr; memcpy( data_buf,pShmSocket.recv_data,pShmSocket.recv_len ); if(data_buf[8]!=6){ flag=0; pShmSocket.recv_data[8]=45; } flag =1; addr=data_buf[12]+data_buf[13]*256+data_buf[14]*65536; if (flag && data_buf[0] == 0x68 && data_buf[6] == C_SE_NA && data_buf[7] == 0x01 && data_buf[8] == 06 && data_buf[9] == 0x00 ){ for(i=0;i<YTJ_NUM_DD;i++){ printf("ytj addr %d!\n",YtjList[i].addr); if(YtjList[i].addr==addr ){ strcpy(YtMsg.desp,YtjList[i].tagdesp); strcpy(YtMsg.tagname,YtjList[i].tagname); strcpy(YtMsg.nodename,YtjList[i].nodename); break; } } if(i>=YTJ_NUM_DD){ pShmSocket.recv_data[8]=47; flag = 0; printf("addr %xH not defined!",addr); } if( (data_buf[17]&0x80) == 0x80 ){ if(flag){ value=(short *)&data_buf[15];printf("yt value= %d",*value); sprintf(tmpstr,"%s选择: %s(对象%d)",DISPATCH,YtMsg.desp,addr); write_log( tmpstr,"OPER_LOG"); YtMsg.select_flag=1; YtMsg.addr=addr; YtMsg.value=*value; YtMsg.select_time=NowTime.time; pShmSocket.recv_data[8]=7; } } else if ( (data_buf[17]&0x80) == 0x00 ){ if(addr!=YtMsg.addr || YtMsg.addr==0){ pShmSocket.recv_data[8]=47; flag=0; } value=(short *)&data_buf[15]; if((*value)!=YtMsg.value){ flag=0; pShmSocket.recv_data[8]=10; } if(flag){ sprintf(tmpstr,"%s执行: %s(对象%d)",DISPATCH,YtMsg.desp,YtMsg.addr); write_log( tmpstr,"OPER_LOG" ); YtMsg.exec_flag=1; pShmSocket.recv_data[8]=7; } } }else{ pShmSocket.recv_data[8]=10; flag=0; } if(flag==0){ YtMsg.select_flag=0; YtMsg.exec_flag=0; YtMsg.value=0; YtMsg.addr=0; } memset( buf,0,MAX_DATA_LEN ); memcpy( buf,pShmSocket.recv_data,pShmSocket.recv_len ); pShmSocket.send_len = pShmSocket.recv_len; memcpy( pShmSocket.send_data,buf,pShmSocket.send_len ); send_msg();}void M_PrepCmd(type,sq,startno,data_buf,count,size)unsigned char type,sq;unsigned short startno;unsigned char data_buf[];int count,size;{ int i,j,k,len; unsigned char buf[MAX_DATA_LEN]; if(sq==0){ len = 6 + 6 + count * size; memset( buf,0,MAX_DATA_LEN ); buf[0] = 0x68; buf[1] = len-2; buf[2] = 0; buf[3] = 0; buf[4] = 0; buf[5] = 0; buf[6] = type; buf[7] = count & 0x7f; buf[8] = cot%256; buf[9] = cot/256; buf[10] = ASDU_ADDR&0xff; buf[11] = (ASDU_ADDR>>8)&0xff; memcpy( &(buf[12]),data_buf,count*size ); pShmSocket.send_len = len; memcpy( pShmSocket.send_data,buf,len ); }else{ len = 6 + 9 + count * size; memset( buf,0,MAX_DATA_LEN ); buf[0] = 0x68; buf[1] = len-2; buf[2] = 0; buf[3] = 0; buf[4] = 0; buf[5] = 0; buf[6] = type; buf[7] = count|0x80; buf[8] = cot%256; buf[9] = cot/256; buf[10] = ASDU_ADDR&0xff; buf[11] = (ASDU_ADDR>>8)&0xff; buf[12] = startno&0xff; buf[13] = (startno>>8)&0xff; buf[14] = (startno>>16)&0xff; memcpy( &(buf[15]),data_buf,count*size ); pShmSocket.send_len = len; memcpy( pShmSocket.send_data,buf,len ); } send_msg();}display_msg(){ int i,j; if(pShmSocket.display>0){ switch(pShmSocket.display){ case 1: /*rcv send net mesg*/ break; case 2: /*DIN_BUF*/ printf("*********DIN MESG BUF********\n"); for(i=0;i<DIN_NUM_DD;i++){ if(i%100==0)printf("%4d-%4d:",i+1,i+101); printf("%d",pDin[i].value); if((i+1)%10==0)printf(":"); if((i+1)%100==0)printf("\n"); } printf("********COS FLAG***********\n"); printf("THE no is:\n"); for(i=0;i<DIN_NUM_DD;i++){ if(pDin[i].cos)printf("%d ",i+1); } break; case 3: /*AIN_BUF*/ printf("*********AIN MESG BUF********\n"); for(i=0;i<AIN_NUM_DD;i++){ if(i%10==0)printf("%4d-%4d:",i+1,i+11); printf("%f ",AinList[i].value); if((i+1)%10==0)printf("\n"); } break; case 4: /*PIN_BUF*/ break; } if(pShmSocket.display!=1)pShmSocket.display=0; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -