?? communication.c
字號:
}
else if(buf[0]==0x44)/*接收到數據包*/
{
if(buf[1]==AskDevData[1])
{
if(NetNode[netwk][node].flag==1)/*找到已存在節點*/
{
NetNode[netwk][node].timeout=5;//重新設定節點丟失的時間溢出為5
/*將zigbee節點號于實際子節點號相對應*/
NetwkCode = (unsigned char)netwk;
NodeCode = (buf[3]>>4)&0x0f;
res=(int)(buf[3]>>4)&0x0f;
NetNode[netwk][node].zigbee_node=buf[1];
NetNode[netwk][node].real_node=buf[3];
zig_node[res] = (unsigned int)node;
for(m=0;m<2;m++)
{
tmp_buf[m] = buf[m+5];
}
tmp_buf[2] = '\0';
/*轉化并顯示電量*/
egy=((tmp_buf[1]<<8)&0xff00)+tmp_buf[0];
cell1=(float)(egy/1023.0*3.3)*1000;
NetNode[netwk][node].cell=(unsigned int)cell1;
if(NetNode[netwk][node].cell < min_cell_energy)
{
/*發送電池報警郵件*/
sprintf(tittle,"dian chi bao jing");
sprintf(body,"dian chi dian liang bu zhu");
SendMailStr = Send_Mail_Packet(NetwkCode,NodeCode,DataStr);
mail(DstStr,SrcStr,tittle,body,SendMailStr);
}
wait_flag = TRUE;
break;
}
else if(NetNode[netwk][node].flag==0)/*找到新節點*/
{
NetNode[netwk][node].flag=1;
NetNode[netwk][node].timeout=5;//設定節點丟失的時間溢出為5
/*將zigbee節點號于實際子節點號相對應*/
NetwkCode = (unsigned char)netwk;
NodeCode = (buf[3]>>4)&0x0f;
res=(int)(buf[3]>>4)&0x0f;
NetNode[netwk][node].zigbee_node=buf[1];
NetNode[netwk][node].real_node=buf[3];
zig_node[res] = (unsigned int)node;
Judge_Node_Type(netwk,node,buf[3]&0x0f);
for(m=0;m<2;m++)
{
tmp_buf[m] = buf[m+5];/*讀取電池電量*/
}
tmp_buf[2] = '\0';
/*轉化并顯示電量*/
egy=((tmp_buf[1]<<8)&0xff00)+tmp_buf[0];
cell1=(float)(egy/1023.0*3.3)*1000;
NetNode[netwk][node].cell=(unsigned int)cell1;
sprintf(tittle,"jie dian jia ru");/*有新節點加入*/
sprintf(body,"you xin jie dian jia ru");
SendMailStr = Send_Mail_Packet(NetwkCode,NodeCode,DataStr);
mail(DstStr,SrcStr,tittle,body,SendMailStr);
wait_flag = TRUE;
break;
}
else
{
printf("netnode flag error\n");
wait_flag = TRUE;
}
}
else
{
/*如果此時有安放信息到來則相應安防信息*/
/*安防信息的應答信息發送*/
ResDevData[1]=buf[1];
if(buf[4]==report_switch1_order)
{
ResDevData[4] = respond_switch1;
}
else if(buf[4]==report_switch2_order)
{
ResDevData[4] = respond_switch2;
}
else
{printf("no alarm infor");break;}
ResDevData[3]=buf[3];
if(((buf[3]&0x0f)==0x04)||((buf[3]&0x0f)==0x05))
{
/*報警信息應答*/
if(alarm_flag==0)
{ResDevData[5]=alarm_unreply;}
else
{ResDevData[5]=alarm_reply_data;}
}
else /*設/撤防信息應答*/
{ResDevData[5]=alarm_reply_data;}
ResDevData[6] = Bit_Xor(6,ResDevData);
write(fd,ResDevData,strlen(ResDevData));
/*調用設防子程序*/
alarm_return=Alarm_Inf(buf);
switch(alarm_return)
{
case -1: printf("alarm_return error\n");break;
case 2: printf("節點報警\n");break;
case 0: printf("解除設防\n");break;
case 1: printf("設防啟動\n");break;
default: printf("alarm_return is not right.\n");
}
wait_flag = TRUE;
break;
}
memset(buf,'\0',sizeof(buf));
}
else if(buf[0]==0x52)
{
if(i==22)
{
if(NetNode[netwk][node].flag==1)
{
NetNode[netwk][node].timeout--;
if(NetNode[netwk][node].timeout<1)
{
/*時間溢出刪除節點*/
NetNode[netwk][node].flag=0;
NetwkCode = (unsigned char)netwk;
NodeCode = (NetNode[netwk][node].real_node>>4)&0x0f;
sprintf(tittle,"shan chu jie dian");
sprintf(body,"you jie dian cha xun bu dao");
memset(tmp_buf,'\0',sizeof(tmp_buf));
SendMailStr = Send_Mail_Packet(NetwkCode,NodeCode,DataStr);
mail(DstStr,SrcStr,tittle,body,SendMailStr);
wait_flag = TRUE;
break;
}
}
else if(NetNode[netwk][node].flag==0)
{wait_flag = TRUE;}
else
{
printf("NetNode[netwk][node].flag error\n");
wait_flag = TRUE;
}
}
else
{wait_flag = TRUE;}
}
else
{ wait_flag = TRUE;}
}
else //對應wait_flag==FALSE
{
if(i==22)
{
if(NetNode[netwk][node].flag==1)
{
NetNode[netwk][node].timeout--;
if(NetNode[netwk][node].timeout<1)
{
/*時間溢出刪除節點*/
NetNode[netwk][node].flag=0;
NetwkCode = (unsigned char)netwk;
NodeCode = (NetNode[netwk][node].real_node>>4)&0x0f;
sprintf(tittle,"shan chu jie dian");
sprintf(body,"you jie dian cha xun bu dao");
memset(tmp_buf,'\0',sizeof(tmp_buf));
SendMailStr = Send_Mail_Packet(NetwkCode,NodeCode,DataStr);
mail(DstStr,SrcStr,tittle,body,SendMailStr);
break;
}
}
else
{printf("NetNode[netwk][node].flag error\n");
wait_flag = TRUE;}
}
}
}
/*刷新網頁*/
Renew_Html();
/*信息初始化pipe管道查詢*/
memset(PipeBuffer,'\0',sizeof(PipeBuffer));
restr=read(init_pipe_fd,PipeBuffer,BUFFER_SIZE);
if(restr!=0)
{
/*重新配置用戶信息*/
Get_User_Inf();
Get_Collect_Time();
Get_Mail_Address();
Renew_Html();
}
/*命令發送pipe管道查詢*/
memset(PipeBuffer,'\0',sizeof(PipeBuffer));
restr=read(pipe_fd,PipeBuffer,BUFFER_SIZE);
if(restr!=0)
{
/*有控制命令到來*/
Control_Order_Send(fd,PipeBuffer);
Renew_Html();
}
/*小區信息pipe管道查詢*/
memset(PipeBuffer1,'\0',sizeof(PipeBuffer1));
restr=read(inf_pipe_fd,PipeBuffer1,PIPEBUFFER_SIZE);
if(restr!=0)
{
/*小區信息到來,點亮信息指示燈*/
testdev = open("/dev/test",O_RDWR | O_NOCTTY );
if ( testdev == -1 )
{
printf("why not open file \n");
//exit(0);
}
testdev_flag = 1;/*信息指示燈亮標志*/
if(inf_num == SetInfNum+1) inf_num = 0;
Renew_Html_Inf(PipeBuffer1,inf_num);
inf_num++;
Renew_Html();
}
/*小區信息已閱讀pipe管道查詢*/
memset(PipeBuffer,'\0',sizeof(PipeBuffer));
restr=read(reply_pipe_fd,PipeBuffer,BUFFER_SIZE);
if(restr!=0)
{
if(testdev_flag == 1)
{
/*信息已閱熄滅信息指示燈*/
close(testdev);
testdev_flag = 0;
}
anniu_flag = 0;
for(i=0;i<SetInfNum+1;i++)
{
PipeInfBuffer[i][0]=' ';
}
if(alarm_tran_flag == 1)
{
/*報警信息已閱*/
NetNode[AlarmNetNum][AlarmNodeNum].state="正常";
Control_Order_Send(fd,PipeBuffer);
}
Renew_Html();
}
/*定時查詢模擬量數據及脈沖量數據 */
restr = Select_Time_Interval();
if(restr == 0)
{
AskData[1] = inquire_encode1;
for(netwk1=0;netwk1<NetNum;netwk1++)
{
if(netwk1!=0)
{node1=0;}
else
{node1=1;}
for(;node1<NodeNum;node1++)
{
AskData[1]++;
/*節點號對應轉換*/
AskData[3] = NetNode[netwk1][node1].real_node;
AskData[5] = Bit_Xor(5,AskData);
if(NetNode[netwk1][node1].flag==1)
{
/*調用讀脈沖、模擬量程序*/
Data_Flag=Receive_Packet(fd,netwk1,AskData);
if(Data_Flag==1)
{
NetNode[netwk1][node1].data_flag=1;
}
else if(Data_Flag==0)
{
/*data_flag是1表明曾經收到過此節點脈沖量數據,現在可能節點故障*/
if(NetNode[netwk1][node1].data_flag==1)
{
NetNode[netwk1][node1].data_timeout--;
if(NetNode[netwk1][node1].data_timeout<1)
{
NetNode[netwk1][node1].data_flag=0;
NetwkCode = (unsigned char)netwk1;
NodeCode = (NetNode[netwk1][node1].real_node>>4)&0x0f;
/*數據采集子節點故障報警發郵件*/
sprintf(tittle,"jie dian gu zhang bao jing");
sprintf(body,"cai ji jie dian fa sheng gu zhang");
memset(tmp_buf,'\0',sizeof(tmp_buf));
SendMailStr = Send_Mail_Packet(NetwkCode,NodeCode,DataStr);
mail(DstStr,SrcStr,tittle,body,SendMailStr);
}
}
}
else
{printf("Data_Flag return error\n");}
}
/*在定時讀節點數據的過程中檢查各通訊管道是否有命令到來*/
/*信息初始化pipe管道查詢*/
memset(PipeBuffer,'\0',sizeof(PipeBuffer));
restr=read(init_pipe_fd,PipeBuffer,BUFFER_SIZE);
if(restr!=0)
{
Get_User_Inf();
Get_Collect_Time();
Get_Mail_Address();
Renew_Html();
}
memset(PipeBuffer,'\0',sizeof(PipeBuffer));
restr=read(anniu_pipe_fd,PipeBuffer,BUFFER_SIZE);
if(restr!=0)
{
Anniu_Inf_Send();
}
memset(PipeBuffer,'\0',sizeof(PipeBuffer));
restr=read(pipe_fd,PipeBuffer,BUFFER_SIZE);
if(restr!=0)
{
Control_Order_Send(fd,PipeBuffer);
}
/*小區信息pipe管道查詢*/
memset(PipeBuffer1,'\0',sizeof(PipeBuffer1));
restr=read(inf_pipe_fd,PipeBuffer1,PIPEBUFFER_SIZE);
if(restr!=0)
{
testdev = open("/dev/test",O_RDWR | O_NOCTTY );
if ( testdev == -1 )
{
printf("why not open file \n");
}
testdev
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -