20230201_1811_emb/1811Project_LPc/Src/Usr/Task/Task-GuangDian/RunEnvTask.c

139 lines
4.6 KiB
C
Raw Normal View History

#include "RunEnvTask.h"
#include "WatchDogTask.h"
#include "ToolDataTypeSwitch.h"
#include "FileSysTask.h"
#include "UpcCommTask.h"
#include "TempAndHumiDrv.h"
#include "McuBspAdc.h"
#include "driverlib/gpio.h"
#include "driverlib/pin_map.h"
#include <string.h>
#include <stdio.h>
#define LEAK1_ADC_ID MCU_BSP_ADC5
/* 光电分离舱漏水 */
static uint32_t gLeak1_u32 = 0;
static float gLeak1_f = 0.0f;
/* 光电分离舱温湿度 */
static uint32_t gTemp_u32 = 0;
static float gTemp_f = 0.0f;
static uint32_t gHumi_u32 = 0;
static float gHumi_f = 0.0f;
/* OTN光电分李舱 */
static uint32_t gTempOtn_u32 = 0;
static float gTempOtn_f = 0.0f;
static uint32_t gHumiOtn_u32 = 0;
static float gHumiOtn_f = 0.0f;
static unsigned short gTaskRunEnvSendSerial = 0;
static int gTaskRunEnvWatchDogId = -1; // 心跳包看门狗事件ID
static int gTaskRunEnvPickEnable = -1; // 端口输出状态采集使能
static unsigned char gTaskRunEnvSendBuf[21] = {0}; // 端口输出发送的状态缓存,13因为该消息体大小为13
static char gTaskRunEnvFileDataBuf[1024] = {0};
void TaskRunEnvInit(void)
{
/* 初始化ADC */
McuBspAdcInit();
/* 初始化温湿度 */
DrvTempAndHumiInit();
/* 看门狗事件注册 */
gTaskRunEnvWatchDogId = TaskWatchdogRegEvent("TaskRunEnv");
}
void TaskRunEnv(void *arg)
{
unsigned int RealWbyte;
int ret = 0;
int i = 0;
/* 将时钟同步任务开启写入日志 */
do {
ret = TaskFileLogWrite("TaskRunEnv: Join in!!\n", strlen("TaskRunEnv: Join in!!\n"), &RealWbyte);
TaskWatchdogFreed(gTaskRunEnvWatchDogId);
OSTimeDly(1);
} while (ret > 0);
while (1) {
OSTimeDly(100);
TaskWatchdogFreed(gTaskRunEnvWatchDogId);
if (gTaskRunEnvPickEnable != 1) {
continue;
}
/* 获取光电分李舱温湿度数据 */
i = 0;
while (0 > DrvTempAndHumiGet(&gTemp_f, &gHumi_f)) {
i++;
OSTimeDly(10);
TaskWatchdogFreed(gTaskRunEnvWatchDogId);
if (i > 1000) {
gTemp_f = 0;
gHumi_f = 0;
break;
}
}
ToolFloatToUint32(gTemp_f, &gTemp_u32);
ToolFloatToUint32(gHumi_f, &gHumi_u32);
/* OTN获取光电分李舱温湿度数据 */
i = 0;
while (0 > DrvTempAndHumiGet2(&gTempOtn_f, &gHumiOtn_f)) {
i++;
OSTimeDly(10);
TaskWatchdogFreed(gTaskRunEnvWatchDogId);
if (i > 1000) {
gTemp_f = 0;
gHumi_f = 0;
break;
}
}
ToolFloatToUint32(gTempOtn_f, &gTempOtn_u32);
ToolFloatToUint32(gHumiOtn_f, &gHumiOtn_u32);
/* 获取漏水信号 */
McuBspAdcGetValue(LEAK1_ADC_ID, &gLeak1_f);
ToolFloatToUint32(gLeak1_f, &gLeak1_u32);
/* 打包 */
gTaskRunEnvSendBuf[0] = 1;
gTaskRunEnvSendBuf[1] = (gTemp_u32 >> 24) & 0xff;
gTaskRunEnvSendBuf[2] = (gTemp_u32 >> 16) & 0xff;
gTaskRunEnvSendBuf[3] = (gTemp_u32 >> 8) & 0xff;
gTaskRunEnvSendBuf[4] = gTemp_u32 & 0xff;
gTaskRunEnvSendBuf[5] = (gHumi_u32 >> 24) & 0xff;
gTaskRunEnvSendBuf[6] = (gHumi_u32 >> 16) & 0xff;
gTaskRunEnvSendBuf[7] = (gHumi_u32 >> 8) & 0xff;
gTaskRunEnvSendBuf[8] = gHumi_u32 & 0xff;
gTaskRunEnvSendBuf[9] = (gLeak1_u32 >> 24) & 0xff;
gTaskRunEnvSendBuf[10] = (gLeak1_u32 >> 16) & 0xff;
gTaskRunEnvSendBuf[11] = (gLeak1_u32 >> 8) & 0xff;
gTaskRunEnvSendBuf[12] = gLeak1_u32 & 0xff;
gTaskRunEnvSendBuf[13] = (gTempOtn_u32 >> 24) & 0xff;
gTaskRunEnvSendBuf[14] = (gTempOtn_u32 >> 16) & 0xff;
gTaskRunEnvSendBuf[15] = (gTempOtn_u32 >> 8) & 0xff;
gTaskRunEnvSendBuf[16] = gTempOtn_u32 & 0xff;
gTaskRunEnvSendBuf[17] = (gHumiOtn_u32 >> 24) & 0xff;
gTaskRunEnvSendBuf[18] = (gHumiOtn_u32 >> 16) & 0xff;
gTaskRunEnvSendBuf[19] = (gHumiOtn_u32 >> 8) & 0xff;
gTaskRunEnvSendBuf[20] = gHumiOtn_u32 & 0xff;
/* 发送函数 */
TaskUpcCommSendMessage(TASK_RUN_ENV_MESSGAE_ID, &gTaskRunEnvSendSerial, gTaskRunEnvSendBuf, sizeof(gTaskRunEnvSendBuf));
gTaskRunEnvSendSerial++;
TaskRunEnvDisable();
sprintf(gTaskRunEnvFileDataBuf, "Temp:%.02f,Humi:%.02f,,Leak1:%0.2f", gTemp_f,gHumi_f, gLeak1_f);
TaskFileDataWrite(TASK_RUN_FILE_TYPE, gTaskRunEnvFileDataBuf, strlen(gTaskRunEnvFileDataBuf),&RealWbyte);
}
}
void TaskRunEnvEnable(void)
{
gTaskRunEnvPickEnable = 1;
}
void TaskRunEnvDisable(void)
{
gTaskRunEnvPickEnable = 0;
}