|
@@ -35,7 +35,7 @@
|
|
|
|
|
|
|
|
//保持寄存器
|
|
//保持寄存器
|
|
|
#define REG_HOLD_START 4000
|
|
#define REG_HOLD_START 4000
|
|
|
-#define REG_HOLD_NREGS 1000
|
|
|
|
|
|
|
+#define REG_HOLD_NREGS 1500
|
|
|
|
|
|
|
|
//线圈
|
|
//线圈
|
|
|
#define REG_COILS_START 0
|
|
#define REG_COILS_START 0
|
|
@@ -59,6 +59,7 @@ static USHORT usRegDiscreteStart = REG_DISCRETE_START;
|
|
|
static uint8_t usRegDiscreteBuf[REG_DISCRETE_NREGS];
|
|
static uint8_t usRegDiscreteBuf[REG_DISCRETE_NREGS];
|
|
|
|
|
|
|
|
extern unsigned long int Delay_Ms;
|
|
extern unsigned long int Delay_Ms;
|
|
|
|
|
+extern unsigned char detection_value;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@@ -197,6 +198,9 @@ eMBRegHoldingCB( UCHAR * pucRegBuffer, USHORT usAddress, USHORT usNRegs, eMBRegi
|
|
|
}else if((usAddress >= AC_Sing_All_Chn_ConsumerAddr) &&(usAddress <= AC_Sing_All_Chn_ConsumerAddr + AC_Sing_All_Chn_ConsumerQua))
|
|
}else if((usAddress >= AC_Sing_All_Chn_ConsumerAddr) &&(usAddress <= AC_Sing_All_Chn_ConsumerAddr + AC_Sing_All_Chn_ConsumerQua))
|
|
|
{
|
|
{
|
|
|
memcpy(&usRegHoldBuf[iRegIndex],&ACDC_Total_All_Chn_Read_Reg,usNRegs*2);
|
|
memcpy(&usRegHoldBuf[iRegIndex],&ACDC_Total_All_Chn_Read_Reg,usNRegs*2);
|
|
|
|
|
+ }else if(usAddress == AC_Sing_Detection_Addr)
|
|
|
|
|
+ {
|
|
|
|
|
+ memcpy(&usRegHoldBuf[iRegIndex],&detection_value,usNRegs*2);
|
|
|
}
|
|
}
|
|
|
while(usNRegs > 0)
|
|
while(usNRegs > 0)
|
|
|
{
|
|
{
|
|
@@ -247,7 +251,27 @@ eMBRegHoldingCB( UCHAR * pucRegBuffer, USHORT usAddress, USHORT usNRegs, eMBRegi
|
|
|
Chal_num = (usAddress-AC_Sing_State_SmaWAddr); //设置哪个通道的状态
|
|
Chal_num = (usAddress-AC_Sing_State_SmaWAddr); //设置哪个通道的状态
|
|
|
// memcpy(&ACDC_State_WriteReg[Chal_num],&usRegHoldBuf[WiRegIndex],WusNRegs); //将接收的数据放入写结构体中
|
|
// memcpy(&ACDC_State_WriteReg[Chal_num],&usRegHoldBuf[WiRegIndex],WusNRegs); //将接收的数据放入写结构体中
|
|
|
memcpy(&EE_ACDC_State_ReadReg[Chal_num],&usRegHoldBuf[WiRegIndex],WusNRegs*2);//将接收的数据放入读结构体中
|
|
memcpy(&EE_ACDC_State_ReadReg[Chal_num],&usRegHoldBuf[WiRegIndex],WusNRegs*2);//将接收的数据放入读结构体中
|
|
|
- memcpy(&Eeprom_Wbuf,&usRegHoldBuf[WiRegIndex],WusNRegs*2); //将数据由16进制转化为无符号数据存入数组
|
|
|
|
|
|
|
+ if(EE_ACDC_ThresVal_ReadReg[Chal_num].ACDC_V_TopThres < THRESHOULD_JUDGMENT)
|
|
|
|
|
+ {
|
|
|
|
|
+ EE_ACDC_State_ReadReg[Chal_num].ACDC_Vol_Upthr_En = false;
|
|
|
|
|
+ }
|
|
|
|
|
+ if(EE_ACDC_ThresVal_ReadReg[Chal_num].ACDC_V_DownThres < THRESHOULD_JUDGMENT)
|
|
|
|
|
+ {
|
|
|
|
|
+ EE_ACDC_State_ReadReg[Chal_num].ACDC_Vol_Downthr_En = false;
|
|
|
|
|
+ }
|
|
|
|
|
+ if(EE_ACDC_ThresVal_ReadReg[Chal_num].ACDC_I_TopThres < THRESHOULD_JUDGMENT)
|
|
|
|
|
+ {
|
|
|
|
|
+ EE_ACDC_State_ReadReg[Chal_num].ACDC_Cur_Upthr_En = false;
|
|
|
|
|
+ }
|
|
|
|
|
+ if(EE_ACDC_ThresVal_ReadReg[Chal_num].ACDC_P_TopThres < THRESHOULD_JUDGMENT)
|
|
|
|
|
+ {
|
|
|
|
|
+ EE_ACDC_State_ReadReg[Chal_num].ACDC_Pow_Upthr_En = false;
|
|
|
|
|
+ }
|
|
|
|
|
+ if(EE_ACDC_ThresVal_ReadReg[Chal_num].ACDC_E_TopThres < THRESHOULD_JUDGMENT)
|
|
|
|
|
+ {
|
|
|
|
|
+ EE_ACDC_State_ReadReg[Chal_num].ACDC_Ele_Upthr_En = false;
|
|
|
|
|
+ }
|
|
|
|
|
+ memcpy(&Eeprom_Wbuf,&EE_ACDC_State_ReadReg[Chal_num],WusNRegs*2); //将数据由16进制转化为无符号数据存入数组
|
|
|
AT24CxxWrite(Eepr_AC_Sing_State_SmaWAddr+WeeiRegIndex*2,Eeprom_Wbuf, WusNRegs*2); //将数据写入到eeprom中
|
|
AT24CxxWrite(Eepr_AC_Sing_State_SmaWAddr+WeeiRegIndex*2,Eeprom_Wbuf, WusNRegs*2); //将数据写入到eeprom中
|
|
|
if((WusNRegs==RelaySlaveChaNum)&&(EE_ACDC_State_ReadReg[0].ACDC_Cha_On_Off_State==true)&&(EE_ACDC_State_ReadReg[0].ACDC_ALLCha_On_State==true))//通过下发的通道数和开关状态可以判断为全开
|
|
if((WusNRegs==RelaySlaveChaNum)&&(EE_ACDC_State_ReadReg[0].ACDC_Cha_On_Off_State==true)&&(EE_ACDC_State_ReadReg[0].ACDC_ALLCha_On_State==true))//通过下发的通道数和开关状态可以判断为全开
|
|
|
{
|
|
{
|
|
@@ -272,6 +296,8 @@ eMBRegHoldingCB( UCHAR * pucRegBuffer, USHORT usAddress, USHORT usNRegs, eMBRegi
|
|
|
Chal_num = (usAddress-AC_Sing_Thr_SmaAddr)/16; //设置哪个通道的阈值
|
|
Chal_num = (usAddress-AC_Sing_Thr_SmaAddr)/16; //设置哪个通道的阈值
|
|
|
// memcpy(&ACDC_ThresVal_WriteReg[Chal_num],&usRegHoldBuf[WiRegIndex],WusNRegs*2); //将接收的数据放入写结构体中
|
|
// memcpy(&ACDC_ThresVal_WriteReg[Chal_num],&usRegHoldBuf[WiRegIndex],WusNRegs*2); //将接收的数据放入写结构体中
|
|
|
memcpy(&EE_ACDC_ThresVal_ReadReg[Chal_num],&usRegHoldBuf[WiRegIndex],WusNRegs*2); //将接收的数据放入读结构体中
|
|
memcpy(&EE_ACDC_ThresVal_ReadReg[Chal_num],&usRegHoldBuf[WiRegIndex],WusNRegs*2); //将接收的数据放入读结构体中
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
memcpy(&Eeprom_Wbuf,&usRegHoldBuf[WiRegIndex],WusNRegs*2); //将数据由16进制转化为无符号数据存入数组
|
|
memcpy(&Eeprom_Wbuf,&usRegHoldBuf[WiRegIndex],WusNRegs*2); //将数据由16进制转化为无符号数据存入数组
|
|
|
AT24CxxWrite(Eepr_AC_Sing_Thr_SmaAddr+WeeiRegIndex*2,Eeprom_Wbuf, WusNRegs*2); //将数据写入到eeprom中
|
|
AT24CxxWrite(Eepr_AC_Sing_Thr_SmaAddr+WeeiRegIndex*2,Eeprom_Wbuf, WusNRegs*2); //将数据写入到eeprom中
|
|
|
}
|
|
}
|
|
@@ -292,32 +318,25 @@ eMBRegHoldingCB( UCHAR * pucRegBuffer, USHORT usAddress, USHORT usNRegs, eMBRegi
|
|
|
}else if(usAddress >= AC_Sing_Clear_Consumer && usAddress <= AC_Sing_Clear_Consumer+ AC_Sing_Clear_ConsumerQua)
|
|
}else if(usAddress >= AC_Sing_Clear_Consumer && usAddress <= AC_Sing_Clear_Consumer+ AC_Sing_Clear_ConsumerQua)
|
|
|
{
|
|
{
|
|
|
//WeeiRegIndex = (int)(usAddress - AC_Sing_Clear_Consumer);
|
|
//WeeiRegIndex = (int)(usAddress - AC_Sing_Clear_Consumer);
|
|
|
- Chal_num = usAddress-AC_Sing_Coef_SmaAddr;
|
|
|
|
|
|
|
+ Chal_num = usAddress-AC_Sing_Clear_Consumer;
|
|
|
//AT24CxxRead(Eepr_AC_Sing_Total_Consumer_addr, Eeprom_Rbuf, Eepr_AC_Sing_Total_Consumer_SmaQua);
|
|
//AT24CxxRead(Eepr_AC_Sing_Total_Consumer_addr, Eeprom_Rbuf, Eepr_AC_Sing_Total_Consumer_SmaQua);
|
|
|
|
|
+
|
|
|
uint16_t recive = 0;
|
|
uint16_t recive = 0;
|
|
|
memcpy(&recive,&usRegHoldBuf[WiRegIndex],WusNRegs*2);
|
|
memcpy(&recive,&usRegHoldBuf[WiRegIndex],WusNRegs*2);
|
|
|
- if(recive)
|
|
|
|
|
- {
|
|
|
|
|
- int temp = Chal_num << 2;
|
|
|
|
|
- uint8_t buff[4] = {0};
|
|
|
|
|
- AT24CxxWrite(Eepr_AC_Sing_Total_Consumer_addr+temp, buff,4);
|
|
|
|
|
- read_Total_Consumer[Chal_num] = 0;
|
|
|
|
|
- Hlw8110_Flash_value[Chal_num] = hlw8100_flash_backup[Chal_num];
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ EE_ACDC_Consumer_Clear[Chal_num].flag = 1;
|
|
|
|
|
+ EE_ACDC_Consumer_Clear[Chal_num].value = recive;
|
|
|
|
|
+ consumer_clear_flag = 1;
|
|
|
|
|
+
|
|
|
|
|
|
|
|
}else if(usAddress == AC_Sing_Clear_Consumer_all)
|
|
}else if(usAddress == AC_Sing_Clear_Consumer_all)
|
|
|
{
|
|
{
|
|
|
- Chal_num = usAddress-AC_Sing_Coef_SmaAddr;
|
|
|
|
|
uint16_t recive = 0;
|
|
uint16_t recive = 0;
|
|
|
- uint8_t buff[RelaySlaveChaNum * 4] = {0};
|
|
|
|
|
- if(recive)
|
|
|
|
|
|
|
+ memcpy(&recive,&usRegHoldBuf[WiRegIndex],WusNRegs*2);
|
|
|
|
|
+ consumer_clear_flag = 1;
|
|
|
|
|
+ for(int i = 0; i < RelaySlaveChaNum;i++)
|
|
|
{
|
|
{
|
|
|
- AT24CxxWrite(Eepr_AC_Sing_Total_Consumer_addr,buff,4);
|
|
|
|
|
- for(int i = 0; i < RelaySlaveChaNum;i++)
|
|
|
|
|
- {
|
|
|
|
|
- read_Total_Consumer[i] = 0;
|
|
|
|
|
- Hlw8110_Flash_value[i] = hlw8100_flash_backup[i];
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ EE_ACDC_Consumer_Clear[i].flag = 1;
|
|
|
|
|
+ EE_ACDC_Consumer_Clear[i].value = recive;
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|