📄 exec_func.c
字号:
uint8 Exec_ADAlarm_Comm(uint16 * AD_CouSec,uint32 * ADC_Val)
{
uint32 ADC_Data=0;
INT8U * temp;
temp=Lmt_V_Time;
if(temp[0]==0xff&&temp[1]==0xff) return FALSE;
if(temp[0]==0 || temp[1]==0) return FALSE;
(*AD_CouSec)++;
ADC_Data_read(0,&ADC_Data);
(*ADC_Val)+=ADC_Data;
if(*AD_CouSec>=temp[1])
{
uint32 cur_V_value=0; //单位0.1V
cur_V_value=((*ADC_Val/temp[1])*11*10)/1000+7; //+7补偿误差
{
char str[40];
sprintf(str, "PowerIn: %10.2f V \r\n", ((fp32)cur_V_value)/10);
uartWrite(UART3,(uint8 *)str,strlen(str),NULL); //测试
}
*AD_CouSec=0;
*ADC_Val=0;
if((temp[0]) > cur_V_value) //判断电压是否低于低电压告警门限值
{
if(ALARM_ID_STATUS[ALARMID_COUNT+GetAlarmID_Index(0x04)]==0) //防止重复告警
return TRUE;
}
else
{
ALARM_ID_STATUS[ALARMID_COUNT+GetAlarmID_Index(0x04)]=0; //低压告警已不存在
}
}
return FALSE;
}
uint8 GetCSQVal(void)
{
char * strAT="\r\nAT+CSQ\r\n";
uartWrite(UART2,(uint8 *)strAT,strlen(strAT),NULL);
OSTimeDlyHMSM(0,0,0,300);
strAT="\r\nAT+CREG?\r\n";
uartWrite(UART2,(uint8 *)strAT,strlen(strAT),NULL);
OSTimeDlyHMSM(0,0,0,300);
strAT="\r\nAT+CGREG?\r\n";
uartWrite(UART2,(uint8 *)strAT,strlen(strAT),NULL);
OSTimeDlyHMSM(0,0,0,300);
return TRUE;
}
uint8 GetTermID(void)
{
char * strAT[]={"\r\nATZ\r\n","\r\nATE0\r\n","\r\nAT+CMGD=1,4\r\n",//"\r\nAT+IPR=115200\r\n",
"\r\nAT+CMGF=1\r\n\0",
"\r\nAT+CNMI=1,1,0,0,1\r\n\0",
"\r\nAT+CLIP=1\r\n\0",
"\r\nAT+CSQ\r\n",
"\r\nAT+CGSN\r\n"};
char strBuff[TRANSINFOLEN];
char buff[15];
uint16 len=0;
memset(strBuff,0,sizeof(strBuff));
LoadUart2(UART2,(uint8 *)strBuff,&len);
memset(strBuff,0,sizeof(strBuff));
uartWrite(UART2,(uint8 *)strAT[0],strlen(strAT[0]),NULL);
OSTimeDlyHMSM(0,0,0,300);
uartWrite(UART2,(uint8 *)strAT[1],strlen(strAT[1]),NULL);
OSTimeDlyHMSM(0,0,0,300);
uartWrite(UART2,(uint8 *)strAT[2],strlen(strAT[2]),NULL);
OSTimeDlyHMSM(0,0,0,300);
uartWrite(UART2,(uint8 *)strAT[3],strlen(strAT[3]),NULL);
OSTimeDlyHMSM(0,0,0,300);
uartWrite(UART2,(uint8 *)strAT[4],strlen(strAT[4]),NULL);
OSTimeDlyHMSM(0,0,0,300);
uartWrite(UART2,(uint8 *)strAT[5],strlen(strAT[5]),NULL);
OSTimeDlyHMSM(0,0,0,300);
uartWrite(UART2,(uint8 *)strAT[6],strlen(strAT[6]),NULL);
OSTimeDlyHMSM(0,0,0,600);
LoadUart2(UART2,(uint8 *)strBuff,&len);
memset(strBuff,0,sizeof(strBuff));
uartWrite(UART2,(uint8 *)strAT[7],strlen(strAT[7]),NULL);
OSTimeDlyHMSM(0,0,0,300);
LoadUart2(UART2,(uint8 *)strBuff,&len);
if(strstr(strBuff,"OK")!=NULL)
{
fp64 ff=0;
uint8 i=0,j=0;
for(i=0,j=0;i<sizeof(strBuff);i++)
{
if(strBuff[i]>=0x30&&strBuff[i]<=0x39)
{
buff[j++]=strBuff[i];
if(j>=15) break;
}
}
memcpy(StrTermID,buff,sizeof(buff));
for(i=0;i<15;i++)
{
ff+=(buff[i]-0x30)*pow(10,15-i-1);
}
#if defined(SYSTEM_SEMCONTROL)
{
INT8U SysRsrcErr;
OSSemPend(gw_pSysRsrcSem, 0, &SysRsrcErr);
}
#else
OSSchedLock();
#endif // end of #if defined(SYSTEM_SEMCONTROL)
//memset(TERM_ID,0,sizeof(TERM_ID));
TERM_ID[0]=(uint8)(ff/(0x1000000000000LL));
TERM_ID[1]=(uint8)((ff-TERM_ID[0]*0x1000000000000LL)/(0x10000000000LL));
TERM_ID[2]=(uint8)((ff-TERM_ID[0]*0x1000000000000LL-TERM_ID[1]*0x10000000000LL)/(0x100000000LL));
TERM_ID[3]=(uint8)((ff-TERM_ID[0]*0x1000000000000LL-TERM_ID[1]*0x10000000000LL-TERM_ID[2]*0x100000000LL)/(0x1000000LL));
TERM_ID[4]=(uint8)((ff-TERM_ID[0]*0x1000000000000LL-TERM_ID[1]*0x10000000000LL-TERM_ID[2]*0x100000000LL-TERM_ID[3]*0x1000000LL)/(0x10000LL));
TERM_ID[5]=(uint8)((ff-TERM_ID[0]*0x1000000000000LL-TERM_ID[1]*0x10000000000LL-TERM_ID[2]*0x100000000LL-TERM_ID[3]*0x1000000LL-TERM_ID[4]*0x10000LL)/(0x100LL));
TERM_ID[6]=(uint8)((ff-TERM_ID[0]*0x1000000000000LL-TERM_ID[1]*0x10000000000LL-TERM_ID[2]*0x100000000LL-TERM_ID[3]*0x1000000LL-TERM_ID[4]*0x10000LL-TERM_ID[5]*0x100LL)/(0x1LL));
#if defined(UART_SEMCONTROL)
OSSemPost(gw_pSysRsrcSem);
#else
OSSchedUnlock();
#endif // end of #if defined(SYSTEM_SEMCONTROL)
return TRUE;
}
return FALSE;
}
uint32 Get_ALARM(void)
{
uint32 pin=0;
pin=Read_P1()&(1<<27);
if(pin>0)
{
return 0; //无求助告警
}
else
{
uint8 paramValue=2;
uint8 paramValue_alm=0;
GetCustomValue(0x000c,¶mValue_alm);
if(paramValue_alm!=2)
SaveCustomValue(0x000c,¶mValue);//将求助告警保存。
return 1; //有求助告警
}
}
uint32 Get_ACCIN(void)
{
uint32 pin=0;
pin=Read_P2()&(1<<1);
if(pin>0)
return 0; //ACC关
else
return 1; //ACC开
}
uint8 RemoteCtrl(uint8 remoteCtrl)
{
uint8 paramValue=0;
uint8 paramValue_r=0;
if(remoteCtrl==0x01) //远程控制(1)执行
{
OS_ENTER_CRITICAL();
P2_GPIOClr((1 << 0)); //输出低电平
OS_EXIT_CRITICAL();
RemoteCtrl_Status=1;
paramValue=2;
GetCustomValue(0x000d,¶mValue_r);
if(paramValue_r!=2)
SaveCustomValue(0x000d,¶mValue);//将远程控制保存。
}
else if(remoteCtrl==0x03) //远程控制(1)解除
{
OS_ENTER_CRITICAL();
P2_GPIOSet((1 << 0)); //输出高电平
OS_EXIT_CRITICAL();
RemoteCtrl_Status=0;
paramValue=1;
GetCustomValue(0x000d,¶mValue_r);
if(paramValue_r!=1)
SaveCustomValue(0x000d,¶mValue);//将远程控制解除保存。
}
else
return FALSE;
return TRUE;
}
uint8 SaveMileage(uint32 * Addr,uint8 * buff) //保存统计里程数
{
uint16 i=0,k=0;
uint32 cur_milVal=0;
uint32 addr=*Addr;
const SaveSize=50; //5次循环存储
const buff_Size=10; //10
uint8 buff_Save[buff_Size]; //
memset(buff_Save,0,buff_Size);
for(k=0;k<SaveSize/buff_Size;k++)
{
W25X32_READ_Semphore(addr,buff_Size,buff_Save);
OSTimeDly(3);
cur_milVal=0;
for(i=0;i<sizeof(cur_milVal);i++)
cur_milVal+=((uint32)buff_Save[i])<<(8*(sizeof(cur_milVal)-i-1));
if(cur_milVal<0xffffffff)
{
addr+=buff_Size;
if(addr==(MILEAGE_ACC_SEC*SEC_SIZE+SaveSize))
{
addr=MILEAGE_ACC_SEC*SEC_SIZE;
W25X32_Erase_Semphore(MILEAGE_ACC_SEC, MILEAGE_ACC_SEC);
W25X32_WR(addr,buff,buff_Size);
OSTimeDly(3);
}
}
else
{
W25X32_WR(addr,buff,buff_Size);
OSTimeDly(3);
addr+=buff_Size;
break;
}
}
*Addr=addr;
return TRUE;
}
uint8 GetLastACC_Mileage(uint32 * Addr,uint8 * buff)
{
uint16 i=0,k=0;
uint32 cur_milVal=0;
uint32 addr=*Addr;
const SaveSize=50; //5次循环存储
const buff_Size=10;
uint8 buff_Save[buff_Size]; //
memset(buff_Save,0,sizeof(buff_Save));
for(k=0;k<SaveSize/buff_Size;k++)
{
W25X32_READ_Semphore(addr,buff_Size,buff_Save);
OSTimeDly(3);
cur_milVal=0;
for(i=0;i<sizeof(cur_milVal);i++)
cur_milVal+=((uint32)buff_Save[i])<<(8*(sizeof(cur_milVal)-i-1));
if(cur_milVal<0xffffffff)
{
if(addr==MILEAGE_ACC_SEC*SEC_SIZE+SaveSize-buff_Size)
{
W25X32_READ_Semphore(addr,buff_Size,buff);
OSTimeDly(3);
break;
}
addr+=buff_Size;
}
else
{
if(addr==MILEAGE_ACC_SEC*SEC_SIZE)
{
//memset(buff,0,buff_Size);
GetParamValue(0x0304,buff); //从设置参数中得到里程数及ACC累计值的初始值。
GetParamValue(0x0303,buff+5);
W25X32_WR(addr,buff,buff_Size);
OSTimeDly(3);
}
else
{
addr-=buff_Size;
W25X32_READ_Semphore(addr,buff_Size,buff);
OSTimeDly(3);
break;
}
}
}
*Addr=addr;
return TRUE;
}
/*
uint8 SaveMileageACC(uint32 * Addr) //以后用作历史数据存储处理
{
uint8 buff[128];
uint16 i=0,j=0,k=0;
uint32 cur_milVal=0;
uint32 addr=*Addr;
memset(buff,0,sizeof(buff));
for(k=0;k<SEC_SIZE/sizeof(buff);k++)
{
W25X32_READ(addr,sizeof(buff),buff);
cur_milVal=0;
for(i=0;i<sizeof(cur_milVal);i++)
cur_milVal+=((uint32)buff[i])<<(8*(sizeof(cur_milVal)-i-1));
if(cur_milVal<0xffffffff)
addr+=sizeof(buff);
else
{
cur_milVal=(uint32)milValue;
for(i=0;i<sizeof(cur_milVal);i++)
buff[i]=cur_milVal>>(8*(sizeof(cur_milVal)-i-1));
W25X32_WR(addr,buff,sizeof(cur_milVal));
addr+=sizeof(buff);
break;
}
}
for(j=0;j<(MILEAGE_ACC_SEC_END-MILEAGE_ACC_SEC+1);j++)
{
if(addr==(MILEAGE_ACC_SEC+j)*SEC_SIZE)
{
INT16U len=0,moveAddr=0;
uint8 cur_Sec[2];
if((MILEAGE_ACC_SEC+j)==MILEAGE_ACC_SEC_END)
{
j=0;
addr=(MILEAGE_ACC_SEC+j)*SEC_SIZE;
}
W25X32_Erase(MILEAGE_ACC_SEC+j, MILEAGE_ACC_SEC+j);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -