📄 new_communication.c
字号:
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_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(
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -