| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027 |
- /*********************************************************************************************************
- * 模块名称:Timer.c
- * 摘 要:Timer模块
- * 当前版本:1.0.0
- * 作 者:Leyutek(COPYRIGHT 2018 - 2021 Leyutek. All rights reserved.)
- * 完成日期:2021年07月01日
- * 内 容:
- * 注 意:
- **********************************************************************************************************
- * 取代版本:
- * 作 者:
- * 完成日期:
- * 修改内容:
- * 修改文件:
- *********************************************************************************************************/
- /*********************************************************************************************************
- * 包含头文件
- *********************************************************************************************************/
- #include "Timer.h"
- #include "gd32e230x_conf.h"
- #include "Main.h"
- #include "ReadEeprom.h"
- #include "Sn74lvc573.h"
- /*********************************************************************************************************
- * 宏定义
- *********************************************************************************************************/
- /*********************************************************************************************************
- * 枚举结构体
- *********************************************************************************************************/
- /*********************************************************************************************************
- * 内部变量定义
- *********************************************************************************************************/
- static unsigned char s_i100msFlag = 0; //将100ms标志位的值设置为0
- static unsigned char s_i2msFlag = 0; //将2ms标志位的值设置为0
- static unsigned char s_i1secFlag = 0; //将1s标志位的值设置为0
- volatile unsigned long int g_del_ms =0;
- unsigned long int Delay_Ms_2=0;
- unsigned int All_On_Flag;
- unsigned int All_Off_Flag;
- extern uint32_t write_2_minute_flag;
- /*********************************************************************************************************
- * 内部函数声明
- *********************************************************************************************************/
- //static void ConfigTimer2(unsigned short arr, unsigned short psc); //配置TIMER2
- static void ConfigTimer14(unsigned short arr, unsigned short psc); //配置TIMER14
- static void ConfigTimer15(unsigned short arr, unsigned short psc); //配置TIMER15
- static void ConfigTimer16(unsigned short arr, unsigned short psc); //配置TIMER16
- /*********************************************************************************************************
- * 内部函数实现
- *********************************************************************************************************/
- ///*********************************************************************************************************
- //* 函数名称:ConfigTimer2
- //* 函数功能:配置TIMER2
- //* 输入参数:arr-自动重装值,psc-预分频器值
- //* 输出参数:void
- //* 返 回 值:void
- //* 创建日期:2021年07月01日
- //* 注 意:APB1时钟为72MHz,TIMER2时钟选择为APB2的1分频,因此,TIMER2时钟为72MHz
- //*********************************************************************************************************/
- //static void ConfigTimer2(unsigned short arr, unsigned short psc)
- //{
- // timer_parameter_struct timer_initpara; //timer_initpara用于存放定时器的参数
- // //使能RCU相关时钟
- // rcu_periph_clock_enable(RCU_TIMER2); //使能TIMER2的时钟
- // timer_deinit(TIMER2); //设置TIMER2参数恢复默认值
- // timer_struct_para_init(&timer_initpara); //初始化timer_initpara
- // //配置TIMER14
- // timer_initpara.prescaler = psc; //设置预分频器值
- // timer_initpara.counterdirection = TIMER_COUNTER_UP; //设置向上计数模式
- // timer_initpara.period = arr; //设置自动重装载值
- // timer_initpara.clockdivision = TIMER_CKDIV_DIV1; //设置时钟分割
- // timer_init(TIMER2, &timer_initpara); //根据参数初始化定时器
- // timer_interrupt_enable(TIMER2, TIMER_INT_UP); //使能定时器的更新中断
- // nvic_irq_enable(TIMER2_IRQn, 3); //配置NVIC设置优先级
- // timer_enable(TIMER2); //使能定时器
- //}
- /*********************************************************************************************************
- * 函数名称:ConfigTimer14
- * 函数功能:配置TIMER14
- * 输入参数:arr-自动重装值,psc-预分频器值
- * 输出参数:void
- * 返 回 值:void
- * 创建日期:2021年07月01日
- * 注 意:APB2时钟为72MHz,TIMER14和TIMER15和TIMER16时钟选择为APB2的1分频,因此,TIMER14和TIMER15和TIMER16时钟为72MHz
- *********************************************************************************************************/
- static void ConfigTimer14(unsigned short arr, unsigned short psc)
- {
- timer_parameter_struct timer_initpara; //timer_initpara用于存放定时器的参数
- //使能RCU相关时钟
- rcu_periph_clock_enable(RCU_TIMER14); //使能TIMER14的时钟
- timer_deinit(TIMER14); //设置TIMER14参数恢复默认值
- timer_struct_para_init(&timer_initpara); //初始化timer_initpara
- //配置TIMER14
- timer_initpara.prescaler = psc; //设置预分频器值
- timer_initpara.counterdirection = TIMER_COUNTER_UP; //设置向上计数模式
- timer_initpara.period = arr; //设置自动重装载值
- timer_initpara.clockdivision = TIMER_CKDIV_DIV1; //设置时钟分割
- timer_init(TIMER14, &timer_initpara); //根据参数初始化定时器
- timer_interrupt_enable(TIMER14, TIMER_INT_UP); //使能定时器的更新中断
- nvic_irq_enable(TIMER14_IRQn, 2); //配置NVIC设置优先级
- timer_enable(TIMER14); //使能定时器
- }
- /*********************************************************************************************************
- * 函数名称:ConfigTimer15
- * 函数功能:配置TIMER15
- * 输入参数:arr-自动重装值,psc-预分频器值
- * 输出参数:void
- * 返 回 值:void
- * 创建日期:2021年07月01日
- * 注 意:APB2时钟为72MHz,TIMER14和TIMER15和TIMER16时钟选择为APB2的1分频,因此,TIMER14和TIMER15和TIMER16时钟为72MHz
- *********************************************************************************************************/
- static void ConfigTimer15(unsigned short arr, unsigned short psc)
- {
- timer_parameter_struct timer_initpara; //timer_initpara用于存放定时器的参数
- //使能RCU相关时钟
- rcu_periph_clock_enable(RCU_TIMER15); //使能TIMER15的时钟
- timer_deinit(TIMER15); //设置TIMER15参数恢复默认值
- timer_struct_para_init(&timer_initpara); //初始化timer_initpara
- //配置TIMER15
- timer_initpara.prescaler = psc; //设置预分频器值
- timer_initpara.counterdirection = TIMER_COUNTER_UP; //设置向上计数模式
- timer_initpara.period = arr; //设置自动重装载值
- timer_initpara.clockdivision = TIMER_CKDIV_DIV1; //设置时钟分割
- timer_init(TIMER15, &timer_initpara); //根据参数初始化定时器
- timer_interrupt_enable(TIMER15, TIMER_INT_UP); //使能定时器的更新中断
- nvic_irq_enable(TIMER15_IRQn, 3); //配置NVIC设置优先级
- timer_enable(TIMER15); //使能定时器
- }
- /*********************************************************************************************************
- * 函数名称:ConfigTimer16
- * 函数功能:配置TIMER16
- * 输入参数:arr-自动重装值,psc-预分频器值
- * 输出参数:void
- * 返 回 值:void
- * 创建日期:2021年07月01日
- * 注 意:APB2时钟为72MHz,TIMER15和TIMER16时钟选择为APB2的1分频,因此,TIMER15和TIMER16时钟为72MHz
- *********************************************************************************************************/
- static void ConfigTimer16(unsigned short arr,unsigned short psc)
- {
- timer_parameter_struct timer_initpara; //timer_initpara用于存放定时器的参数
- //使能RCU相关时钟
- rcu_periph_clock_enable(RCU_TIMER16); //使能TIMER16的时钟
- timer_deinit(TIMER16); //设置TIMER16参数恢复默认值
- timer_struct_para_init(&timer_initpara); //初始化timer_initpara
-
- //配置TIMER16
- timer_initpara.prescaler = psc; //设置预分频器值
- timer_initpara.counterdirection = TIMER_COUNTER_UP; //设置向上计数模式
- timer_initpara.period = arr; //设置自动重装载值
- timer_initpara.clockdivision = TIMER_CKDIV_DIV1; //设置时钟分割
- timer_init(TIMER16, &timer_initpara); //根据参数初始化定时器
- timer_interrupt_enable(TIMER16, TIMER_INT_UP); //使能定时器的更新中断
- nvic_irq_enable(TIMER16_IRQn, 3); //配置NVIC设置优先级
- timer_enable(TIMER16); //使能定时器
- }
- ///*********************************************************************************************************
- //* 函数名称:TIMER2_IRQHandler
- //* 函数功能:TIMER14中断服务函数
- //* 输入参数:void
- //* 输出参数:void
- //* 返 回 值:void
- //* 创建日期:2021年07月01日
- //* 注 意:每毫秒进入一次中断服务函数
- //*********************************************************************************************************/
- //void TIMER2_IRQHandler(void)
- //{
- // if(timer_interrupt_flag_get(TIMER2, TIMER_INT_FLAG_UP) == SET) //判断定时器更新中断是否发生
- // {
- // timer_interrupt_flag_clear(TIMER2, TIMER_INT_FLAG_UP); //清除定时器更新中断标志
- // g_del_ms--;
- // }
- //}
- ///*********************************************************************************************************
- //* 函数名称:Delay_Ms_2
- //* 函数功能: 定义毫秒级别的延时函数
- //* 输入参数:n_del_ms延时毫秒数
- //* 输出参数:void
- //* 返 回 值:void
- //* 创建日期:2021年07月01日
- //* 注 意:
- //*********************************************************************************************************/
- //void delay_ms(unsigned long int n_del_ms)
- //{
- // g_del_ms = n_del_ms;
- // while(g_del_ms);
- //}
- /*********************************************************************************************************
- * 函数名称:TIMER14_IRQHandler
- * 函数功能:TIMER14中断服务函数
- * 输入参数:void
- * 输出参数:void
- * 返 回 值:void
- * 创建日期:2021年07月01日
- * 注 意:每毫秒进入一次中断服务函数
- *********************************************************************************************************/
- void TIMER14_IRQHandler(void)
- {
- static unsigned short s_iCnt2 = 0; //定义一个静态变量s_iCnt2作为2ms计数器
- if(timer_interrupt_flag_get(TIMER14, TIMER_INT_FLAG_UP) == SET) //判断定时器更新中断是否发生
- {
- timer_interrupt_flag_clear(TIMER14, TIMER_INT_FLAG_UP); //清除定时器更新中断标志
- }
- s_iCnt2++; //2ms计数器的计数值加1
-
- if(s_iCnt2 >= 1) //2ms计数器的计数值大于或等于
- {
- s_iCnt2 = 0; //重置2ms计数器的计数值为0
- Delay_Ms_2 = Delay_Ms_2 +1;
-
- #ifdef ACSingPhSmaCurrNew
- uint8_t chn = RelaySlaveChaNum;
- if(All_Off_Flag)
- {
- switch(chn)
- {
- case 6:
- if((EE_ACDC_Delay_ReadReg_Off[5].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_Off[5].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_Off[5].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
- {
- BUFF;
- Relay6State();
- LOCK;
- }
- case 5:
- if((EE_ACDC_Delay_ReadReg_Off[4].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_Off[4].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_Off[4].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
- {
- BUFF;
- Relay5State();
- LOCK;
- }
- case 4:
- if((EE_ACDC_Delay_ReadReg_Off[3].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_Off[3].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_Off[3].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
- {
- BUFF;
- Relay4State();
- LOCK;
- }
- case 3:
- if((EE_ACDC_Delay_ReadReg_Off[2].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_Off[2].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_Off[2].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
- {
- BUFF;
- Relay3State();
- LOCK;
- }
- case 2:
- if((EE_ACDC_Delay_ReadReg_Off[1].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_Off[1].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_Off[1].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
- {
- BUFF;
- Relay2State();
- LOCK;
- }
- case 1:
- if((EE_ACDC_Delay_ReadReg_Off[0].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_Off[0].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_Off[0].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
- {
- BUFF;
- Relay1State();
- LOCK;
- }
- case 0:
- if((Sort_Offbuf[RelaySlaveChaNum-1]==Delay_Ms_2)||(Sort_Offbuf[RelaySlaveChaNum-1]==0xffff)||(Sort_Offbuf[RelaySlaveChaNum-1]==0)) //当达到最大延时时间后退出当前循环
- {
- timer_disable(TIMER14); //关闭定时器
- Delay_Ms_2 = 0;
- All_Off_Flag = 0;
- }
- break;
- default:
- break;
- }
- }else if(All_On_Flag)
- {
- switch(chn)
- {
- case 6:
- if((EE_ACDC_Delay_ReadReg_On[5].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_On[5].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_On[5].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
- {
- BUFF;
- Relay6State();
- LOCK;
- }
- case 5:
- if((EE_ACDC_Delay_ReadReg_On[4].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_On[4].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_On[4].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
- {
- BUFF;
- Relay5State();
- LOCK;
- }
- case 4:
- if((EE_ACDC_Delay_ReadReg_On[3].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_On[3].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_On[3].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
- {
- BUFF;
- Relay4State();
- LOCK;
- }
- case 3:
- if((EE_ACDC_Delay_ReadReg_On[2].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_On[2].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_On[2].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
- {
- BUFF;
- Relay3State();
- LOCK;
- }
- case 2:
- if((EE_ACDC_Delay_ReadReg_On[1].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_On[1].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_On[1].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
- {
- BUFF;
- Relay2State();
- LOCK;
- }
- case 1:
- if((EE_ACDC_Delay_ReadReg_On[0].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_On[0].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_On[0].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
- {
- BUFF;
- Relay1State();
- LOCK;
- }
- case 0:
- if((Sort_Onbuf[RelaySlaveChaNum-1]==Delay_Ms_2)||(Sort_Onbuf[RelaySlaveChaNum-1]==0xffff)||(Sort_Offbuf[RelaySlaveChaNum-1]==0)) //当达到最大延时时间后退出当前循环
- {
- timer_disable(TIMER14); //关闭定时器
- Delay_Ms_2 = 0;
- All_On_Flag = 0;
- }
- break;
- default:
- break;
- }
- }
- s_i2msFlag = 1;
- #else
- if(All_Off_Flag) //
- {
- if(RelaySlaveChaNum==8)
- {
- if((EE_ACDC_Delay_ReadReg_Off[0].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_Off[0].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_Off[0].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
- {
- BUFF;
- Relay1State();
- LOCK;
- }
- if((EE_ACDC_Delay_ReadReg_Off[1].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_Off[1].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_Off[1].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
- {
- BUFF;
- Relay2State();
- LOCK;
- }
- if((EE_ACDC_Delay_ReadReg_Off[2].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_Off[2].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_Off[2].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
- {
- BUFF;
- Relay3State();
- LOCK;
- }
- if((EE_ACDC_Delay_ReadReg_Off[3].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_Off[3].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_Off[3].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
- {
- BUFF;
- Relay4State();
- LOCK;
- }
- if((EE_ACDC_Delay_ReadReg_Off[4].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_Off[4].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_Off[4].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
- {
- BUFF;
- Relay5State();
- LOCK;
- }
- if((EE_ACDC_Delay_ReadReg_Off[5].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_Off[5].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_Off[5].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
- {
- BUFF;
- Relay6State();
- LOCK;
- }
- if((EE_ACDC_Delay_ReadReg_Off[6].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_Off[6].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_Off[6].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
- {
- BUFF;
- Relay7State();
- LOCK;
- }
- if((EE_ACDC_Delay_ReadReg_Off[7].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_Off[7].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_Off[7].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
- {
- BUFF;
- Relay8State();
- LOCK;
- }
- }
- else if(RelaySlaveChaNum==7)
- {
- if((EE_ACDC_Delay_ReadReg_Off[0].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_Off[0].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_Off[0].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
- {
- BUFF;
- Relay1State();
- LOCK;
- }
- if((EE_ACDC_Delay_ReadReg_Off[1].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_Off[1].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_Off[1].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
- {
- BUFF;
- Relay2State();
- LOCK;
- }
- if((EE_ACDC_Delay_ReadReg_Off[2].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_Off[2].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_Off[2].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
- {
- BUFF;
- Relay3State();
- LOCK;
- }
- if((EE_ACDC_Delay_ReadReg_Off[3].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_Off[3].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_Off[3].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
- {
- BUFF;
- Relay4State();
- LOCK;
- }
- if((EE_ACDC_Delay_ReadReg_Off[4].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_Off[4].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_Off[4].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
- {
- BUFF;
- Relay5State();
- LOCK;
- }
- if((EE_ACDC_Delay_ReadReg_Off[5].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_Off[5].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_Off[5].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
- {
- BUFF;
- Relay6State();
- LOCK;
- }
- if((EE_ACDC_Delay_ReadReg_Off[6].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_Off[6].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_Off[6].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
- {
- BUFF;
- Relay7State();
- LOCK;
- }
- }
- else if(RelaySlaveChaNum==6)
- {
- if((EE_ACDC_Delay_ReadReg_Off[0].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_Off[0].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_Off[0].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
- {
- BUFF;
- Relay1State();
- LOCK;
- }
- if((EE_ACDC_Delay_ReadReg_Off[1].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_Off[1].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_Off[1].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
- {
- BUFF;
- Relay2State();
- LOCK;
- }
- if((EE_ACDC_Delay_ReadReg_Off[2].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_Off[2].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_Off[2].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
- {
- BUFF;
- Relay3State();
- LOCK;
- }
- if((EE_ACDC_Delay_ReadReg_Off[3].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_Off[3].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_Off[3].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
- {
- BUFF;
- Relay4State();
- LOCK;
- }
- if((EE_ACDC_Delay_ReadReg_Off[4].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_Off[4].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_Off[4].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
- {
- BUFF;
- Relay5State();
- LOCK;
- }
- if((EE_ACDC_Delay_ReadReg_Off[5].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_Off[5].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_Off[5].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
- {
- BUFF;
- Relay6State();
- LOCK;
- }
- }
- else if(RelaySlaveChaNum==5)
- {
- if((EE_ACDC_Delay_ReadReg_Off[0].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_Off[0].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_Off[0].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
- {
- BUFF;
- Relay1State();
- LOCK;
- }
- if((EE_ACDC_Delay_ReadReg_Off[1].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_Off[1].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_Off[1].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
- {
- BUFF;
- Relay2State();
- LOCK;
- }
- if((EE_ACDC_Delay_ReadReg_Off[2].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_Off[2].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_Off[2].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
- {
- BUFF;
- Relay3State();
- LOCK;
- }
- if((EE_ACDC_Delay_ReadReg_Off[3].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_Off[3].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_Off[3].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
- {
- BUFF;
- Relay4State();
- LOCK;
- }
- if((EE_ACDC_Delay_ReadReg_Off[4].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_Off[4].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_Off[4].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
- {
- BUFF;
- Relay5State();
- LOCK;
- }
- }
- else if(RelaySlaveChaNum==4)
- {
- if((EE_ACDC_Delay_ReadReg_Off[0].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_Off[0].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_Off[0].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
- {
- BUFF;
- Relay1State();
- LOCK;
- }
- if((EE_ACDC_Delay_ReadReg_Off[1].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_Off[1].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_Off[1].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
- {
- BUFF;
- Relay2State();
- LOCK;
- }
- if((EE_ACDC_Delay_ReadReg_Off[2].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_Off[2].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_Off[2].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
- {
- BUFF;
- Relay3State();
- LOCK;
- }
- if((EE_ACDC_Delay_ReadReg_Off[3].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_Off[3].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_Off[3].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
- {
- BUFF;
- Relay4State();
- LOCK;
- }
- }
- else if(RelaySlaveChaNum==3)
- {
- if((EE_ACDC_Delay_ReadReg_Off[0].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_Off[0].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_Off[0].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
- {
- BUFF;
- Relay1State();
- LOCK;
- }
- if((EE_ACDC_Delay_ReadReg_Off[1].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_Off[1].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_Off[1].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
- {
- BUFF;
- Relay2State();
- LOCK;
- }
- if((EE_ACDC_Delay_ReadReg_Off[2].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_Off[2].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_Off[2].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
- {
- BUFF;
- Relay3State();
- LOCK;
- }
- }
- else if(RelaySlaveChaNum==2)
- {
- if((EE_ACDC_Delay_ReadReg_Off[0].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_Off[0].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_Off[0].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
- {
- BUFF;
- Relay1State();
- LOCK;
- }
- if((EE_ACDC_Delay_ReadReg_Off[1].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_Off[1].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_Off[1].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
- {
- BUFF;
- Relay2State();
- LOCK;
- }
- }
- else if(RelaySlaveChaNum==1)
- {
- if((EE_ACDC_Delay_ReadReg_Off[0].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_Off[0].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_Off[0].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
- {
- BUFF;
- Relay1State();
- LOCK;
- }
- }
- if((Sort_Offbuf[RelaySlaveChaNum-1]==Delay_Ms_2)||(Sort_Offbuf[RelaySlaveChaNum-1]==0xffff)||(Sort_Offbuf[RelaySlaveChaNum-1]==0)) //当达到最大延时时间后退出当前循环
- {
- timer_disable(TIMER14); //关闭定时器
- Delay_Ms_2 = 0;
- All_Off_Flag = 0;
- }
- }
- else if(All_On_Flag)
- {
- if(RelaySlaveChaNum==8)
- {
- if((EE_ACDC_Delay_ReadReg_On[0].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_On[0].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_On[0].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
- {
- BUFF;
- Relay1State();
- LOCK;
- }
- if((EE_ACDC_Delay_ReadReg_On[1].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_On[1].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_On[1].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
- {
- BUFF;
- Relay2State();
- LOCK;
- }
- if((EE_ACDC_Delay_ReadReg_On[2].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_On[2].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_On[2].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
- {
- BUFF;
- Relay3State();
- LOCK;
- }
- if((EE_ACDC_Delay_ReadReg_On[3].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_On[3].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_On[3].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
- {
- BUFF;
- Relay4State();
- LOCK;
- }
- if((EE_ACDC_Delay_ReadReg_On[4].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_On[4].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_On[4].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
- {
- BUFF;
- Relay5State();
- LOCK;
- }
- if((EE_ACDC_Delay_ReadReg_On[5].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_On[5].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_On[5].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
- {
- BUFF;
- Relay6State();
- LOCK;
- }
- if((EE_ACDC_Delay_ReadReg_On[6].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_On[6].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_On[6].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
- {
- BUFF;
- Relay7State();
- LOCK;
- }
- if((EE_ACDC_Delay_ReadReg_On[7].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_On[7].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_On[7].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
- {
- BUFF;
- Relay8State();
- LOCK;
- }
- }
- else if(RelaySlaveChaNum==7)
- {
- if((EE_ACDC_Delay_ReadReg_On[0].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_On[0].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_On[0].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
- {
- BUFF;
- Relay1State();
- LOCK;
- }
- if((EE_ACDC_Delay_ReadReg_On[1].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_On[1].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_On[1].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
- {
- BUFF;
- Relay2State();
- LOCK;
- }
- if((EE_ACDC_Delay_ReadReg_On[2].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_On[2].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_On[2].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
- {
- BUFF;
- Relay3State();
- LOCK;
- }
- if((EE_ACDC_Delay_ReadReg_On[3].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_On[3].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_On[3].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
- {
- BUFF;
- Relay4State();
- LOCK;
- }
- if((EE_ACDC_Delay_ReadReg_On[4].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_On[4].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_On[4].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
- {
- BUFF;
- Relay5State();
- LOCK;
- }
- if((EE_ACDC_Delay_ReadReg_On[5].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_On[5].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_On[5].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
- {
- BUFF;
- Relay6State();
- LOCK;
- }
- if((EE_ACDC_Delay_ReadReg_On[6].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_On[6].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_On[6].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
- {
- BUFF;
- Relay7State();
- LOCK;
- }
- }
- else if(RelaySlaveChaNum==6)
- {
- if((EE_ACDC_Delay_ReadReg_On[0].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_On[0].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_On[0].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
- {
- BUFF;
- Relay1State();
- LOCK;
- }
- if((EE_ACDC_Delay_ReadReg_On[1].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_On[1].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_On[1].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
- {
- BUFF;
- Relay2State();
- LOCK;
- }
- if((EE_ACDC_Delay_ReadReg_On[2].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_On[2].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_On[2].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
- {
- BUFF;
- Relay3State();
- LOCK;
- }
- if((EE_ACDC_Delay_ReadReg_On[3].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_On[3].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_On[3].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
- {
- BUFF;
- Relay4State();
- LOCK;
- }
- if((EE_ACDC_Delay_ReadReg_On[4].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_On[4].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_On[4].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
- {
- BUFF;
- Relay5State();
- LOCK;
- }
- if((EE_ACDC_Delay_ReadReg_On[5].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_On[5].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_On[5].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
- {
- BUFF;
- Relay6State();
- LOCK;
- }
- }
- else if(RelaySlaveChaNum==5)
- {
- if((EE_ACDC_Delay_ReadReg_On[0].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_On[0].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_On[0].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
- {
- BUFF;
- Relay1State();
- LOCK;
- }
- if((EE_ACDC_Delay_ReadReg_On[1].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_On[1].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_On[1].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
- {
- BUFF;
- Relay2State();
- LOCK;
- }
- if((EE_ACDC_Delay_ReadReg_On[2].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_On[2].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_On[2].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
- {
- BUFF;
- Relay3State();
- LOCK;
- }
- if((EE_ACDC_Delay_ReadReg_On[3].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_On[3].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_On[3].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
- {
- BUFF;
- Relay4State();
- LOCK;
- }
- if((EE_ACDC_Delay_ReadReg_On[4].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_On[4].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_On[4].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
- {
- BUFF;
- Relay5State();
- LOCK;
- }
- }
- else if(RelaySlaveChaNum==4)
- {
- if((EE_ACDC_Delay_ReadReg_On[0].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_On[0].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_On[0].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
- {
- BUFF;
- Relay1State();
- LOCK;
- }
- if((EE_ACDC_Delay_ReadReg_On[1].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_On[1].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_On[1].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
- {
- BUFF;
- Relay2State();
- LOCK;
- }
- if((EE_ACDC_Delay_ReadReg_On[2].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_On[2].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_On[2].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
- {
- BUFF;
- Relay3State();
- LOCK;
- }
- if((EE_ACDC_Delay_ReadReg_On[3].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_On[3].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_On[3].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
- {
- BUFF;
- Relay4State();
- LOCK;
- }
- }
- else if(RelaySlaveChaNum==3)
- {
- if((EE_ACDC_Delay_ReadReg_On[0].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_On[0].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_On[0].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
- {
- BUFF;
- Relay1State();
- LOCK;
- }
- if((EE_ACDC_Delay_ReadReg_On[1].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_On[1].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_On[1].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
- {
- BUFF;
- Relay2State();
- LOCK;
- }
- if((EE_ACDC_Delay_ReadReg_On[2].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_On[2].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_On[2].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
- {
- BUFF;
- Relay3State();
- LOCK;
- }
- }
- else if(RelaySlaveChaNum==2)
- {
- if((EE_ACDC_Delay_ReadReg_On[0].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_On[0].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_On[0].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
- {
- BUFF;
- Relay1State();
- LOCK;
- }
- if((EE_ACDC_Delay_ReadReg_On[1].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_On[1].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_On[1].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
- {
- BUFF;
- Relay2State();
- LOCK;
- }
- }
- else if(RelaySlaveChaNum==1)
- {
- if((EE_ACDC_Delay_ReadReg_On[0].ACDC_Delay==Delay_Ms_2)||(EE_ACDC_Delay_ReadReg_On[0].ACDC_Delay==0xffff)||(EE_ACDC_Delay_ReadReg_On[0].ACDC_Delay==0))//确保这里的和读取电能参数的顺序是一致的
- {
- BUFF;
- Relay1State();
- LOCK;
- }
- }
- if((Sort_Onbuf[RelaySlaveChaNum-1]==Delay_Ms_2)||(Sort_Onbuf[RelaySlaveChaNum-1]==0xffff)||(Sort_Offbuf[RelaySlaveChaNum-1]==0)) //当达到最大延时时间后退出当前循环
- {
- timer_disable(TIMER14); //关闭定时器
- Delay_Ms_2 = 0;
- All_On_Flag = 0;
- }
- }
- s_i2msFlag = 1; //将2ms标志位的值设置为1
- #endif
- }
-
- }
- /*********************************************************************************************************
- * 函数名称:TIMER15_IRQHandler
- * 函数功能:TIMER15中断服务函数
- * 输入参数:void
- * 输出参数:void
- * 返 回 值:void
- * 创建日期:2021年07月01日
- * 注 意:每毫秒进入一次中断服务函数
- *********************************************************************************************************/
- void TIMER15_IRQHandler(void)
- {
- static unsigned short s_iCnt100 = 0; //定义一个静态变量s_iCnt100作为100ms计数器
- if(timer_interrupt_flag_get(TIMER15, TIMER_INT_FLAG_UP) == SET) //判断定时器更新中断是否发生
- {
- timer_interrupt_flag_clear(TIMER15, TIMER_INT_FLAG_UP); //清除定时器更新中断标志
- }
- s_iCnt100++; //100ms计数器的计数值加1
-
- if(s_iCnt100 >= 100) //100ms计数器的计数值大于或等于
- {
- s_iCnt100 = 0; //重置100ms计数器的计数值为0
- s_i100msFlag = 1; //将100ms标志位的值设置为1
- }
- }
- /*********************************************************************************************************
- * 函数名称:TIMER16_IRQHandler
- * 函数功能:TIMER16中断服务函数
- * 输入参数:void
- * 输出参数:void
- * 返 回 值:void
- * 创建日期:2021年07月01日
- * 注 意:每毫秒进入一次中断服务函数
- *********************************************************************************************************/
- void TIMER16_IRQHandler(void)
- {
- static short s_iCnt1000 = 0; //定义一个静态变量s_iCnt1000作为1s计数器
- static uint32_t cnt = 0;
- if (timer_interrupt_flag_get(TIMER16, TIMER_INT_FLAG_UP) == SET) //判断定时器更新中断是否发生
- {
- timer_interrupt_flag_clear(TIMER16, TIMER_INT_FLAG_UP); //清除定时器更新中断标志
- }
-
- s_iCnt1000++; //1000ms计数器的计数值加1
- cnt++;
-
- if(s_iCnt1000 >= 1000) //1000ms计数器的计数值大于或等于1000
- {
- s_iCnt1000 = 0; //重置1000ms计数器的计数值为0
- s_i1secFlag = 1; //将1s标志位的值设置为1
- }
- #ifdef ACSingPhSmaCurrNew
- if(cnt == 120000)
- {
- write_2_minute_flag = 1;
- cnt = 0;
- }
- #endif
- }
- /*********************************************************************************************************
- * API函数实现
- *********************************************************************************************************/
- /*********************************************************************************************************
- * 函数名称:InitTimer
- * 函数功能:初始化Timer模块
- * 输入参数:void
- * 输出参数:void
- * 返 回 值:void
- * 创建日期:2021年07月01日
- * 注 意:使用的TIMER15-16由APB2(72MHz)预分频后输出。如果预分频为1,则由APB1*1输出,否则由APB1*2(72MHz)输出
- *********************************************************************************************************/
- void InitTimer(void)
- {
- // ConfigTimer2(999, 71); //72MHz/(71+1)=1MHz,由0计数到999为1ms
- ConfigTimer14(999, 71); //72MHz/(71+1)=1MHz,由0计数到999为1ms
- ConfigTimer15(999, 71); //72MHz/(71+1)=1MHz,由0计数到999为1ms
- ConfigTimer16(999, 71); //72MHz/(71+1)=1MHz,由0计数到999为1ms
- }
- /*********************************************************************************************************
- * 函数名称:Get20msFlag
- * 函数功能:获取2ms标志位的值
- * 输入参数:void
- * 输出参数:void
- * 返 回 值:s_i2msFlag-2ms标志位的值
- * 创建日期:2021年07月01日
- * 注 意:
- *********************************************************************************************************/
- unsigned char Get2msFlag(void)
- {
- return(s_i2msFlag); //返回2ms标志位的值
- }
- /*********************************************************************************************************
- * 函数名称:Clr20msFlag
- * 函数功能:清除2ms标志位
- * 输入参数:void
- * 输出参数:void
- * 返 回 值:void
- * 创建日期:2021年07月01日
- * 注 意:
- *********************************************************************************************************/
- void Clr2msFlag(void)
- {
- s_i2msFlag = 0; //将2ms标志位的值设置为0
- }
- /*********************************************************************************************************
- * 函数名称:Get100msFlag
- * 函数功能:获取100ms标志位的值
- * 输入参数:void
- * 输出参数:void
- * 返 回 值:s_i2msFlag-100ms标志位的值
- * 创建日期:2021年07月01日
- * 注 意:
- *********************************************************************************************************/
- unsigned char Get100msFlag(void)
- {
- return(s_i100msFlag); //返回100ms标志位的值
- }
- /*********************************************************************************************************
- * 函数名称:Clr100msFlags
- * 函数功能:清除100ms标志位
- * 输入参数:void
- * 输出参数:void
- * 返 回 值:void
- * 创建日期:2021年07月01日
- * 注 意:
- *********************************************************************************************************/
- void Clr100msFlag(void)
- {
- s_i100msFlag = 0; //将100ms标志位的值设置为0
- }
- /*********************************************************************************************************
- * 函数名称:Get1SecFlag
- * 函数功能:获取1s标志位的值
- * 输入参数:void
- * 输出参数:void
- * 返 回 值:s_i1secFlag-1s标志位的值
- * 创建日期:2021年07月01日
- * 注 意:
- *********************************************************************************************************/
- unsigned char Get1SecFlag(void)
- {
- return(s_i1secFlag); //返回1s标志位的值
- }
- /*********************************************************************************************************
- * 函数名称:Clr1SecFlag
- * 函数功能:清除1s标志位
- * 输入参数:void
- * 输出参数:void
- * 返 回 值:void
- * 创建日期:2021年07月01日
- * 注 意:
- *********************************************************************************************************/
- void Clr1SecFlag(void)
- {
- s_i1secFlag = 0; //将1s标志位的值设置为0
- }
|