📄 104lib.c
字号:
*/ i++; } else break; } break; case TYPE_TAP : while( ( no=readline(tmpstr,256,fp) ) != NULL ){ ret = sscanf(tmpstr,"%s\n",type); value = findtype(type); if( value == 0 ){ ret = sscanf(tmpstr,"%s %s\n",NodeName,TagPath);/* strcpy( TapList[i].nodename,NodeName ); strcpy( TapList[i].tagname,TagPath );*/ i++; } else break; } break; case TYPE_BCD : while( ( no=readline(tmpstr,256,fp) ) != NULL ){ ret = sscanf(tmpstr,"%s\n",type); value = findtype(type); if( value == 0 ){ ret = sscanf(tmpstr,"%s %s\n",NodeName,TagPath);/* strcpy( BcdList[i].nodename,NodeName ); strcpy( BcdList[i].tagname,TagPath );*/ i++; } else break; } break; case TYPE_SOE : while( ( no=readline(tmpstr,256,fp) ) != NULL ){ ret = sscanf(tmpstr,"%s\n",type); value = findtype(type); if( value == 0 ){ ret = sscanf(tmpstr,"%s %s %d\n",NodeName,TagPath,&dp_flag);/* strcpy( SoeList[i].nodename,NodeName ); strcpy( SoeList[i].tagname,TagPath );*/ SoeList[i].dp_flag = dp_flag; if(dp_flag==1){ SoeList[i].addr = dp_num; dp_num++; } else{ SoeList[i].addr = sp_num; sp_num++; } i++; } else break; } break; case TYPE_YKZ : while( ( no=readline(tmpstr,256,fp) ) != NULL ){ ret = sscanf(tmpstr,"%s\n",type); value = findtype(type); if( value == 0 ){ ret = sscanf(tmpstr,"%s %s %s %d %d\n",NodeName,TagPath,TagDesp,&TagNo,&action); strcpy( YkzList[i].nodename,NodeName ); strcpy( YkzList[i].tagname,TagPath ); strcpy( YkzList[i].tagdesp,TagDesp ); YkzList[i].addr = TagNo; YkzList[i].action = action;/*printf("YKZ:%s %d %d\n",YkzList[i].tagname,YkzList[i].addr,YkzList[i].action );*/ i++; } else break; } break; case TYPE_YSJ : while( ( no=readline(tmpstr,256,fp) ) != NULL ){ ret = sscanf(tmpstr,"%s\n",type); value = findtype(type); if( value == 0 ){ ret = sscanf(tmpstr,"%s %s\n",NodeName,TagPath); strcpy( YsjList[i].nodename,NodeName ); strcpy( YsjList[i].tagname,TagPath ); i++; } else break; } break; case TYPE_YTJ : while( ( no=readline(tmpstr,256,fp) ) != NULL ){ ret = sscanf(tmpstr,"%s\n",type); value = findtype(type); if( value == 0 ){ ret = sscanf(tmpstr,"%s %s %s %d\n",NodeName,TagPath,TagDesp,&TagNo); strcpy( YtjList[i].nodename,NodeName ); strcpy( YtjList[i].tagname,TagPath ); strcpy( YtjList[i].tagdesp,TagDesp ); YtjList[i].addr=TagNo; i++; } else break; } break; default : printf("%s datatype(%s) error\n",filename,type); no = readline(tmpstr,256,fp); if( no != NULL ){ ret = sscanf(tmpstr,"%s\n",type); value = findtype(type); } break; } } } pSPDin = (DIN_BUF *)malloc( sizeof(DIN_BUF)*SP_NUM_DD ); pDPDin = (DIN_BUF *)malloc( sizeof(DIN_BUF)*DP_NUM_DD );printf("DP_NUM=%d,SP_NUM=%d\n",DP_NUM_DD,SP_NUM_DD); fclose(fp);}void send_msg(){ int i; if( pShmSocket.send_len > 0 ){ if(pShmSocket.send_len>6){ pShmSocket.send_data[2] = (send_num % 256) << 1; pShmSocket.send_data[3] = send_num / 256; pShmSocket.send_data[4] = (recv_num % 256) << 1; pShmSocket.send_data[5] = recv_num / 256; send_num++; }else if(pShmSocket.send_len==6){ if((pShmSocket.send_data[2]&0x03)==0x01){ pShmSocket.send_data[4] = (recv_num % 256) << 1; pShmSocket.send_data[5] = recv_num / 256; } } send( pShmSocket.lansock,(char *)pShmSocket.send_data,pShmSocket.send_len,0 ); if( pShmSocket.display == 1 ){ display_on( pShmSocket.send_data,pShmSocket.send_len,1 ); } pShmSocket.send_len = 0; }}void recv_msg(){ int rec_count,length,status; unsigned char ptr[1024]; fd_set fdR; struct timeval timeout; FD_ZERO( &fdR ); FD_SET( pShmSocket.lansock,&fdR ); timeout.tv_usec = 100; /* 100 ms */ timeout.tv_sec = 0; signal(SIGALRM,alarm_handler); alarm( 1 ); status = select( pShmSocket.lansock+1,&fdR,NULL,NULL,&timeout ); alarm(0); signal(SIGALRM,SIG_DFL); if( status < 0 ){ if( pShmSocket.display != 0 ){ printf("Err---476recv select %d(%d)\n", status,errno); } return; } if( status==0 || FD_ISSET(pShmSocket.lansock,&fdR) == 0 ) return; signal(SIGALRM,alarm_handler); alarm(1); rec_count = recv( pShmSocket.lansock,(char *)&ptr[0],2,0 ); alarm(0); signal(SIGALRM,SIG_DFL); if( rec_count != 2 || ptr[0] != 0x68 ){ pShmSocket.recv_len = 0; if( errno != EINTR && errno != EWOULDBLOCK ) pShmSocket.sock_state = 0; return; } length = ptr[1]; signal(SIGALRM,alarm_handler); alarm(1); rec_count = recv( pShmSocket.lansock,(char *)&ptr[2],length,0 ); alarm(0); signal(SIGALRM,SIG_DFL); if( rec_count != length ){ pShmSocket.recv_len = 0; if( errno != EINTR && errno != EWOULDBLOCK ) pShmSocket.sock_state = 0; return; } pShmSocket.recv_len = length + 2; memcpy( pShmSocket.recv_data,ptr,pShmSocket.recv_len); if( pShmSocket.display != 0 ) display_on( pShmSocket.recv_data,pShmSocket.recv_len,0 ); return;}void recv_process(){ int i,j,k,len,fjflag,recv_flag; int i_val,ytj_obj,ykz_obj,ysj_obj; float f_val; char tmpstr[128],oper[16]; unsigned char data_buf[MAX_DATA_LEN],*ptr; recv_flag=1; while(recv_flag){ recv_msg(); recv_flag=0; if( pShmSocket.recv_len < 6 ){ if(pShmSocket.recv_len>0){ pShmSocket.recv_len=0; printf("len err!\n"); } return; }else{ recv_flag=1; } ftime(&RecvTime); memcpy( data_buf,pShmSocket.recv_data,pShmSocket.recv_len ); if ( pShmSocket.recv_len == 6 ){ switch( data_buf[2] ){ case 0x01: printf("* S format (state=%d) *\n",CommuState); break; case 0x07: rAssociateAck(); DinTime.time = 0; AinTime.time = 0; PinTime.time = 0; send_num = 0; recv_num = 0; Retry = 0; WaitRespond = 0; printf("* Ack start (state=%d) *\n",CommuState); CommuState = STATE_RUN; /*******?????????????************/ break; case 0x0b: DinTime.time = 0; AinTime.time = 0; PinTime.time = 0; send_num = 0; recv_num = 0; Retry = 0; WaitRespond = 0; CommuState = STATE_RUN; break; case 0x43: rTestAck(); break; default: printf("ERR----not dealed lengh=6 msg(%02x),Please ADDed !!\n",data_buf[2]); break; } }else { if(data_buf[10]+data_buf[11]*256 == ASDU_ADDR){ recv_num++; if(recv_num%MAX_W==0){ rRecvAck(); } switch(data_buf[6]) { case C_IC_NA: C_IC_NA_Proc(); break; case C_SC_NA: C_SC_NA_Proc(); break; case C_SE_NA: C_SE_NA_Proc(); break; default: printf("Err---TypeId(=%d) not define in this program !\n",data_buf[6]); break; } } } pShmSocket.recv_len = 0; }}void send_process(){ switch( CommuState ){ case STATE_ASSOCIATE :/* printf("* Wait for send msg (state=%d) *\n",CommuState);*/ break; case STATE_RUN : rRun(); break; default : printf("ERR-----no such state(%d),Check it!!\n",CommuState); break; }}void rRun(){ ftime( &NowTime ); refresh_buf(); M_SP_NA_Proc(); M_DP_NA_Proc(); M_ME_NA_Proc(); M_ST_NA_Proc(); M_SP_TB_Proc(); M_DP_TB_Proc(); M_IT_NA_Proc(); rCTRL_db(); rYT_db();}void rCTRL_db(){ char tmpstr[256]; int i,j,pending; char *tag,tmpbuf[1024],*fstr; MSG_BUF sbuf; tag_val_t value; tag_fld_write_nm_t *hdr; if(YkMsg.select_flag){ if((NowTime.time-YkMsg.select_time>60)||(YkMsg.select_time-NowTime.time>60)){ if(YkMsg.ctrl_flag==2) sprintf(tmpstr,"%s选择: %s%s(对象%d)超时",DISPATCH,YkMsg.desp,"合上",YkMsg.addr); else sprintf(tmpstr,"%s选择: %s%s(对象%d)超时",DISPATCH,YkMsg.desp,"拉开",YkMsg.addr); write_log( tmpstr,"OPER_LOG" ); YkMsg.select_flag=0; YkMsg.exec_flag=0; YkMsg.ctrl_flag=0; YkMsg.addr=0; }else if(YkMsg.exec_flag){ YkMsg.select_flag=0; YkMsg.exec_flag=0; YkMsg.ctrl_flag=0; YkMsg.addr=0; strcpy(tmpstr,YkMsg.tagname); fstr=strchr(tmpstr,'.'); if(!strcmp(fstr,".SEQ")){ rSeqCmd(); }else{ sbuf.function_code = MSG_TAG_FLD_WRITE_NM; strcpy(sbuf.dest_proc_name,"mam"); strcpy(sbuf.dest_node_name,YkMsg.nodename); strcpy(sbuf.orig_node_name,mynodename); strcpy(sbuf.orig_proc_name,myprocessname); sbuf.mtype = MESG_NORM; sbuf.status_flags = 0; sbuf.seri_flag = 0; sbuf.seq_num = 0; sbuf.msg_size = sizeof(tag_fld_write_nm_t); sbuf.msg_data = tmpbuf; hdr = (tag_fld_write_nm_t *)tmpbuf; strcpy(hdr->tagpath,YkMsg.tagname); value.ival = 1; hdr->value = value; hdr->array_idx = 0; hdr->data_type = Int; hdr->work_level = 0; pending = msg_send(&sbuf,0,15,1,0); } } }}void rSeqCmd(){ seq_init_t *seq_cmd; char data_buf[256]; MSG_BUF sbuf;printf("net104 send SEQFILE\n"); strcpy(sbuf.dest_node_name, YkMsg.nodename); map_func_code(MSG_SEQ_INIT, sbuf.dest_proc_name); sbuf.function_code = MSG_SEQ_INIT; sbuf.status_flags = 0; sbuf.mtype = MESG_NORM; sbuf.msg_size = sizeof(seq_init_t); sbuf.msg_data = data_buf; seq_cmd = (seq_init_t *)data_buf; strcpy(seq_cmd->seq_file, YkMsg.tagname); strcpy(seq_cmd->mode,"RUN"); strcpy(seq_cmd->label, YKLABEL); strcpy(seq_cmd->ifnode, ""); strcpy(seq_cmd->option, ""); strcpy(seq_cmd->title, YkMsg.desp); msg_send(&sbuf, 0,3,3,0);}void rYT_db(){ char tmpstr[256]; int i,j,pending; char *tag,tmpbuf[1024]; MSG_BUF sbuf; tag_val_t value; float fvalue; tag_fld_write_nm_t *hdr; if(YtMsg.select_flag){ if((NowTime.time-YtMsg.select_time>60)||(YtMsg.select_time-NowTime.time>60)){ sprintf(tmpstr,"%s选择: %s(对象%d)超时",DISPATCH,YtMsg.desp,YtMsg.addr); write_log( tmpstr,"OPER_LOG" ); YtMsg.select_flag=0; YtMsg.exec_flag=0; YtMsg.addr=0; YtMsg.value=0; }else if(YtMsg.exec_flag){ sbuf.function_code = MSG_TAG_FLD_WRITE_NM; strcpy(sbuf.dest_proc_name,"mam"); strcpy(sbuf.dest_node_name,YtMsg.nodename); strcpy(sbuf.orig_node_name,mynodename); strcpy(sbuf.orig_proc_name,myprocessname); sbuf.mtype = MESG_NORM; sbuf.status_flags = 0; sbuf.seri_flag = 0; sbuf.seq_num = 0; sbuf.msg_size = sizeof(tag_fld_write_nm_t); sbuf.msg_data = tmpbuf; hdr = (tag_fld_write_nm_t *)tmpbuf; strcpy(hdr->tagpath,YtMsg.tagname); fvalue=(float)(YtMsg.value); fvalue=fvalue/DES_SCALE; fvalue=fvalue*SRC_SCALE; value.fval = fvalue;printf("YT fvalue=%f\n",fvalue); hdr->value = value; hdr->array_idx = 0; hdr->data_type = Float; hdr->work_level = 0; pending = msg_send(&sbuf,0,15,1,0); sprintf(tmpstr,"%s设定: %s(=%7.3f)",DISPATCH,YtMsg.desp,value.fval); write_log( tmpstr,"OPER_LOG" ); YtMsg.select_flag=0; YtMsg.exec_flag=0; YtMsg.value=0; YtMsg.addr=0; } }}void rRecvAck(){ int i,j,k,len; unsigned char buf[MAX_DATA_LEN],*ptr; memset( buf,0,MAX_DATA_LEN ); buf[0] = 0x68; buf[1] = 0x04; buf[2] = 0x00; buf[3] = 0x00; buf[4] = recv_num%256; buf[5] = recv_num/256; pShmSocket.send_len = 6; memcpy( pShmSocket.send_data,buf,6 ); send_msg();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -