logo资料库

网关程序流程图.docx

第1页 / 共5页
第2页 / 共5页
第3页 / 共5页
第4页 / 共5页
第5页 / 共5页
资料共5页,全文预览结束
注意:RM10 用于网关与后台 之间的通讯:HC-12 用于网关 与节点之间的通讯;TIM2 用 于网关与后台服务器之间: TIM3 用于网关与节点之间 网关程序流程图 Stm32_Clock_Init(9)进行系统时钟配置 延时初始化 uart1_init(72,115200); uart2_init(36,115200); uart3_init(36,9600);串口 1、2、3 初始化 (注意:串口 1 进行下载程序及串口调试信息打印; 串口 2 进行用于跟 RM10 通讯,即后台与网关 RM10 进行通讯;串口 3 进行用于跟 HC-12 通讯,即网 关与节点之间进行通讯。 串口 2、3 虽然用于跟 RM10、HC-12 通讯,但是并 不涉及到它们的代码,因为我们可以直接通过无 线通讯。) 第一阶段初始化 Init_GPIO() 初始化 HC-12/R485 的控制引脚、两个 开始执行判断网关状态 (注意:因为当网关下电后 EEPROM 会立即储存相应 状态,然后上电后开始从 EEPROM 读取之前状态) LED 灯的引脚、一个蜂鸣器的引脚、一个恢复出厂 设置的引脚、七个拨码开关 IO Init_RM10() 初始化 RM10 的两个复位引脚,均置高 Timer2_Init(1999,7199) 定时器 2 初始化,利用定时 器 2 中断解析串口数据包,每 200ms 一次。 (注意:每 200ms 进行一次检验,用于网关和后台服 务器之间的不断检测,不断执行)在闪灯任务 run-ok 时, 若长时间收不到应答判断为断网, 开启蜂鸣器报警;如果从开始控制节点计时,若 ND-overtime 时间内没有回复,在控制第二个节点。 while(RTC_Init()) 进行 RTC 初始化 (注意:RTC 时钟一定要初始化成功,因为每发送 一个数据对应一个时间) AT24CXX_Init() 初始化 IIC 接口 while(AT24CXX_Check()) 等到检测不到 24c128 后 开始 EEPROM_Reader() 读取 EEPROM 若为 Gwsta_run_ok 网 关正常运行状态 开始进行 亮 EEPROM_ND_Type_Rea der(),节点类型和对应 在节点中的位置读取 ( 若为网关一开始的状态 此时 RM10 需要延时 50ms 等待启动 才会进行启用,判断网关的以下状态 1.Gwsta_init_toAP 即 AP 模式时, (蓝亮绿灭红快闪)延时 1s 后,
后台开始向网关发送 0 字符, 打印“AP 模式”。注意:配置 RM10 之前需要重启模块(RM10_RST(), RM10_AT())之后后台 向网关 RM10 发送配置信息 usart2_sendstring(commands_wifi_ap,490) 等待 AP 模式配置成功,若配置不成功,会自动重新重启,重新配置。 2.Gwsta_init_cntoPhone 和手机连接时,给 RM10 发送配置信息。此时( 蓝亮绿亮红快闪) 3.Gwsta_init_tocilent:为配置为客户端模式,此时(蓝亮绿灭红慢闪) 若有手机端的时候,利用 for 语句循环发送给 RM10 对其进行配置 for(i=0;iAPB1ENR|=1<<1 TIM3 时钟使能 对定时器 3 进行初始化(注 意:TIM3 只用于网关与节点 之间的通讯,要时时检测心 数 跳情况) 同时设置才可以进行中断 允许更新中断 使能 TIM3 设定计数器自动重装值 TIM3->ARR=arr 预分频器 7200,得到 10khz 的计 数时钟 TIM3->PSC=psc 设置 MY_NVIC_Init(5,0,TIM4_IRQChannel,3)抢占 3 子优先级 0 组 3 配置好后利用定时器 3 中断进行 ( 任务调度
如果处于空闲状态 即 Free_station 时 命令任务调度 即 GW_ok_station 开始打 如果处于繁忙状态 即 Busy_station ( read_COM_RM10_data_cp==COM_RM10_data_c 即解读 RM10 数据包=RM10 接收数据包时, 如 果 Tim_timing_report==ND_Heartbeat_Timer) 即 定时上传计时=心跳更新时间时(网关和节点) 开始打印“节点时间广播”,定时上传计时归为 0, 之后使消息头命令=节点更新的时间 网关 ok 状态=繁忙状态 即 Message_Header_data.Command_Id=gw_C ommand_heartbeat_ND_act; GW_ok_station=Busy_station ; 如果定时上传计时=节点定时时长(60s 一次) 即 Tim_timing_report==Report_Timer 时,处于 “定时查询”状态打印“定时查询”使消息 头 命 令 = 网 关 中 的 明 令 要 求 即 Message_Header_data.Command_Id=gw_Comm and_inquire; 如果心跳计时(网关和后台)>=心跳时长(30s 一次)即 Tim_Heartbeat>=Heartbeat_Timer,处 于心跳链接状态,打印“心跳链接”,之后使心 跳计时=0,变为“死亡状态”,即 Tim_Heartbeat=0 然 使 Message_Header_data.Command_Id=gw_Comm and_heartbeat_act(注意:这个网关命令是没有 的,只作为给后台的心跳链接标志) 后 当消息头数据命令=网关配置命令、消息 头数据命令=网关询问命令时,即 gw_Command_config,gw_Command_inquire 时,如在 read_COM_RM10_data_cp==COM-- RM10-data-c 情况下, 如果最低命令要求标志=free 如果 Command_exe(Message_Header_data. Command_Id,Message_Header_data.Nodecount _amount)!=NULL,则开始给后台回复命令,进 行不断地打包发包,之后打印“数据上传完毕” 之后取节点平均值 Measure_Average() 之后进行网关信息的存储:网关 ID、网关 当前状态,网关下挂节点的个数,网关下挂 节点配置表
之后 使 GW_ok_station=Free_station 如没有在 read_COM_RM10_data_cp==COM-- RM10-data-c 情况下, 如果 ND_order_flag==Free,则直接使 GW_ok_station=Free_station 当消息头命令=网关控制 1 命令时,即 gw_Command_control: 如果 ND_order_flag==Free 情况下, 如果 Command_exe(Message_Header_data. Command_Id,Message_Header_data.Nodecount _amount)!=NULL,则开始给后台回复命令,进 行不断地打包发包,之后打印“数据上传完毕” 之后开始使心跳计时(网关和后台)=0,定时 上传计时=0.即 Tim_Heartbeat=0 Tim_timing_report=0; 之后进行网关信息的存储:网关 ID、网关 当前状态,网关下挂节点的个数,网关下挂节 点配置表 之后 使 GW_ok_station=Free_station 当消息头命令=网关回复后台心跳命 令时,即 gw_Command_heartbeat 则直接进行数据打包发包,之后打印 “数据上传完毕” 当消息头命令= 网关响应命令时,即 gw_Command_respond ,则直接进行 断网计时清零 Tim_Police=0 和关闭蜂鸣器 BEEP_OFF; 之后使其处于 GW_ok_station=Free_station 当消息头命令= 主动发送心跳时(注: 实际上网关没有主动发送心跳这个命令) 即:gw_Command_heartbeat_act 此时直接进行数据打包发包,之后打印 “数据上传完毕”,同时也别忘了使网关 Ok 状态==Free_station。 当消息头命令= 网关只会给控制节点下 (
发消息时,即 gw_Command_heartbeat_ND_act 此时直接进行数据打包发包,之后打印 “数据上传完毕”,同时也别忘了使网关 Ok 状态==Free_station。 (
分享到:
收藏