多路温度采集控制系统

1、配置文件

config.h

#ifndef _DTH9000_H 
#define _DH90000_H      

#include<unistd.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<sys/ioctl.h>
#include<string.h>
#include<fcntl.h>
#include<stdlib.h>
#include<stdio.h>
#include<time.h>
#include<sys/time.h>
#include<errno.h>

#define CONFIG_FILE "gp9002.cfg"        //系统配置文件名称
#define ON      1
#define OFF     0
#define MAX_RECORD 200                  //温湿度最大的记录条数N (N+1)
#define LOG_TIME   5                    //日志记录间隔(分)
#define DEF_T_UPP  50                   //默认温度上限(C)
#define DEF_T_LOW  5                    //默认温度下限 (C)
#define DEF_H_UPP  80                   //默认湿度上限 (%)
#define DEF_H_LOW  30                   //默认湿度下限 (%)
#define DEF_T_SET  5                    //默认温度回差 (%)
#define DEF_H_SET  5                    //默认湿度回差  (%)
#define DEF_M_TIME 5                    //默认检测间隔时间(s)

//报警参数设置
struct st_alarm_set{

        char temp_upper;        //温度上限
        char temp_lower;        //温度下限
        char humi_upper;        //湿度上限
        char humi_lower;        //湿度下限
        char temp_change_set;   //温度回差
        char humi_change_set;   //湿度回差
        char monitor_time;      //检测间隔时间
        char temp_proof;        //温度校正
        char humi_proof;        //湿度校正

};

//时间
struct st_sys_time{

        int year;
        char month;
        char day;
        char hour;
        char minute;
        char second;

};

//记录内容:序号 日期 时间 温度 湿度 :2019/2/23 21:01   23 65
struct st_log_data{

        int id;                 //序号
        float log_temp;         //温度
        float log_humi;         //湿度
        char state:             //记录报警状态
        struct st_sys_time log_time;//数据日志

};

//系统总体数据结构
struct st_sys_dev{

        struct st_alarm_set alarm_set;          //湿温度报警
        struct st_sys_time  curr_time;          //记录时间
        struct st_log_data  logd[MAX_RECORD];   //数据日志
        int rt_show;                            //实时显示数据
        int outdev_s;                           //继电器启用开关状态
        int log_time;                           //记录间隔时长
        int log_index;                          //记录下标
        int log_count;                          //有效记录总数
};

int make_default_config(struct st_sys_dev *dev);
int save_dev(struct st_sys_dev *dev);
int load_dev(struct st_sys_dev *dev);
void sys_time(struct st_sys_time *stime);

#endif



config.c

#include <string.h>
#include <stdio.h>
#include "config.h"


/*============================================
函数名称:make_default_config
功能:创建系统的配置文件,第一次运行或配置文件不存在
参数:struct st_sys * dev
返回值:0 成功 -1失败

============================================*/

int make_default_config(struct st_sys * dev)
{
        printf("Make default configuration.\n");

        memset(dev,0,sizeof(struct st_sys));
        dev->alarm_set.temp_upper = DEF_T_UPP;
        dev->alarm_set.temp_lower = DEF_T_LOW;
        dev->alarm_set.humi_upper = DEF_H_UPP;
        dev->alarm_set.humi_lower = DEF_H_LOW;
        dev->alarm_set.temp_change = DEF_T_SET;
        dev->alarm_set.humi_change = DEF_H_SET;
        dev->alarm_set.monitor_time = DEF_M_TIME;
        dev->alarm_set.humi_proof = 0;
        dev->alarm_set.temp+proof = 0;
        dev->rt_show = ON;
        dev->outdev_s = ON;
        dev->log_time = LOG_TIME;
        dev->log_count = 0;
        return save_dev(dev);
}

/*============================================
函数名称:save_dev
功能:保存系统的配置文件
参数:struct st_sys * dev
返回值:0 成功 -1失败
============================================*/

int save_dev(struct st_sys * dev)
{
    FILE * fp;
    if (NULL == (fp=fopen(CONFIG_FILE, "wb"))){
        printf("Config file open null...\n");
        return -1;
    }
    printf("\nSave system data!");
    fwrite(dev, sizeof(*dev),1,fp); //write file
    fclose(fp);
    return 0;
}

/*============================================
函数名称:load_dev
功能:创建系统的配置文件
参数:struct st_sys * dev
返回值:0 成功 -1失败
============================================*/

int load_dev(struct st_sys * dev)
{
    FILE *      fp;
    memset(dev, 0, sizeof(*dev));

    if (NULL == (fp=fopen(CONFIG_FILE, "rb"))){
        printf("[load_dev]fopen null....\n");
        return make_default_config(dev);
    }

    if ( sizeof(*dev) != fread(dev,1,sizeof(*dev),fp) ){
        printf("[load_dev+]sizeof error...\n");
        fclose(fp);
        return -1;
    }
    fclose(fp);
    return 0;
}

/*============================================
函数名称:sys_time
功能:系统时间功能
参数:struct st_sys_time *stime
返回值:1 计时一秒  0不到一秒
============================================*/

void sys_time(struct st_sys_time *stime)
{
        time_t timep;
        struct tm *p;
        time(&timep);
        stime->yera = (1900+p->tm_year);
        stime->month = (1+p->tm_mon);
        stime->day = p->tm_mday;
        stime->hour = p->tm_hour;
        stime->minute = p->tm_min;
        stime->second = p->tm_sec;

}

猜你喜欢

转载自blog.csdn.net/cxyzyywoaini/article/details/87900505