📄 configcumul.c
字号:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <unistd.h>
#include <pwd.h>
#include <math.h>
#include <minigui/common.h>
#include <minigui/minigui.h>
#include <minigui/gdi.h>
#include <minigui/window.h>
#include <minigui/control.h>
#include <sys/types.h>
#include <sys/shm.h>
#include <sys/ipc.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include "common.h"
#include "fonts.h"
#include "configcumul.h"
void Savecudata ( STRUCT_CUDATA cu_data)
{
int i;
time_t t;
struct tm* tm;
time(&t);
tm = localtime(&t);
temp=0;
cumul_per_day=0;
//判断当前时间在设定时间范围之内
if( ( cu_data.s_year <= tm->tm_year + 1900 ||
cu_data.s_year == tm->tm_year + 1900 && cu_data.s_month <= tm->tm_mon+1 ||
cu_data.s_year == tm->tm_year + 1900 && cu_data.s_month == tm->tm_mon+1&&cu_data.s_day <= tm->tm_mday||
cu_data.s_year == tm->tm_year + 1900 && cu_data.s_month == tm->tm_mon+1&&cu_data.s_day == tm->tm_mday&&cu_data.s_hour <= tm->tm_hour||
cu_data.s_year == tm->tm_year + 1900 && cu_data.s_month == tm->tm_mon+1&&cu_data.s_day == tm->tm_mday&&cu_data.s_hour == tm->tm_hour&& cu_data.s_minute <= tm->tm_min||
cu_data.s_year == tm->tm_year + 1900 && cu_data.s_month == tm->tm_mon+1&&cu_data.s_day == tm->tm_mday&& cu_data.s_hour == tm->tm_hour&&cu_data.s_minute == tm->tm_min&&cu_data.s_second <= tm->tm_sec)
&&
( cu_data.e_year >= tm->tm_year + 1900||
cu_data.e_year == tm->tm_year + 1900 && cu_data.e_month >= tm->tm_mon+1 ||
cu_data.e_year == tm->tm_year + 1900 && cu_data.e_month == tm->tm_mon+1&&cu_data.e_day>=tm->tm_mday||
cu_data.e_year == tm->tm_year + 1900 && cu_data.e_month == tm->tm_mon+1&&cu_data.e_day==tm->tm_mday&&cu_data.e_hour >= tm->tm_hour||
cu_data.e_year == tm->tm_year + 1900 && cu_data.e_month == tm->tm_mon+1&&cu_data.e_day==tm->tm_mday&&cu_data.e_hour == tm->tm_hour&& cu_data.e_minute >= tm->tm_min||
cu_data.e_year == tm->tm_year + 1900 && cu_data.e_month == tm->tm_mon+1&&cu_data.e_day==tm->tm_mday&& cu_data.e_hour == tm->tm_hour&&cu_data.e_minute == tm->tm_min&&cu_data.e_second >= tm->tm_sec))
{
Dealcudata ( cu_data, tm); //计算日累加量
if(tm->tm_min>58){
// 每1小时送入文件一次
hour++;
Write2file( cu_data, tm,cumul_per_day,days*sizeof(float));
if(hour>22){
days++;
cumul_per_month=+cumul_per_day;
cumul_per_day=0; //又从零开始
hour=0;
if(days>30){
mont++;
Write2file( cu_data, tm,cumul_per_month,50*12*31*sizeof(float)+(mont-1)*sizeof(float));
cumul_per_year=+cumul_per_month;
days=0;
cumul_per_month=0;
if(mont>11){
year++;
Write2file( cu_data, tm,cumul_per_year,50*12*31*sizeof(float)+50*12*sizeof(float)+(year-1)*sizeof(float));
cumul_per_year=0;
}
}
}
}
}
}
void Write2file ( STRUCT_CUDATA cu_data, struct tm* tm,int data,int len)
{
FILE *fp;
char buff[20];
char startTime[15];
char add[20];
struct stat buf;
// int d_addr=; //天,月,年在文件中的地址
//int m_addr=;
//int y_addr=;
int L;
L=len;
sprintf(startTime, "%4d/%02d/%02d/%02d:%02d:%02d",cu_data.s_year,cu_data.s_month,cu_data.s_day,cu_data.s_hour,cu_data.s_minute,cu_data.s_second);
if (stat("cumul.dat", &buf) < 0){ //文件不存在,新建
fp=fopen("cumul.dat","w+b");
//文件开头
fseek(fp, 0, SEEK_SET);
fwrite(&startTime,strlen(startTime),1,fp);//记录开始 时间
fseek(fp, 0, SEEK_CUR);
/* sprintf(add, "%d/%d/%d/",d_addr,m_addr,y_addr);
fwrite(&add,strlen(add),1,fp);//记录按天,按月,按年存储位置的首地址
*/
}
//开始记录数据
fseek(fp, 29+L, SEEK_SET);
fwrite(&data,sizeof(data),1,fp);//记录按天,按月,按年存储位置的首地址
fclose(fp);
}
///////////////////////////////////
//每来一次数据调用一次
void Dealcudata ( STRUCT_CUDATA cu_data, struct tm* tm)
{
int i;
float cuavg; //需要累计的值
STRUCT_OLDTIME oldtime; //记录上次累加时刻的时间
oldtime.year=cu_data.s_year;
oldtime.month=cu_data.s_month;
oldtime.day=cu_data.s_day;
oldtime.hour=cu_data.s_hour;
oldtime.minute= cu_data.s_minute;
oldtime.second =cu_data.s_second;
i=atoi(cu_data.name);
temp+=channel_disp[i].fpv;
if( tm->tm_sec==oldtime.second+cu_data.interval){ //间隔到,累加
oldtime.year=tm->tm_year + 1900; //记录此刻时间
oldtime.month=tm->tm_mon + 1;
oldtime.day= tm->tm_mday;
oldtime.hour=tm->tm_hour;
oldtime.minute= tm->tm_min;
oldtime.second = tm->tm_sec;
cuavg=temp/cu_data.interval;
cumul_per_day+=cuavg; //计算日累加量
temp=0;
//return cumul_per_day;
}
}
/*
传入参数:
*/
void DispCumul(HDC hdc, int type,int time )
{
int bar_height;//所有棒图固有高度
int bar_width;
int value;
gal_pixel bar_rect_color;
gal_pixel bar_text_color;
gal_pixel bar_back_color;
unsigned char str_pv[10];
HDC hmemDC;
gal_pixel barcolor,topbackcolor;
int i,j;
int rect_x,rect_y,width,height;
int FillBoxHeight;//填充的绝对高度
int FillBox_y;
bar_height=260;
bar_width=30;
hmemDC=CreateCompatibleDC(hdc);
bar_back_color=PIXEL_lightwhite;//背景PIXEL_black
bar_rect_color=RGB2Pixel(hmemDC,0,0,255);//边框颜色
bar_text_color=PIXEL_black;//RGB2Pixel(hmemDC,0,0,255);//文字颜色
SetBrushColor(hmemDC,bar_back_color);//lightwhite
SetBkMode(hmemDC,BM_TRANSPARENT);//? SetBkMode
FillBox(hmemDC,0,0,WIDTH-LEFT,HEIGHT-TOP-BOTTOM);
SetBkMode(hmemDC,BM_TRANSPARENT);
BitBlt(hmemDC,0,0,WIDTH-LEFT,HEIGHT-TOP-BOTTOM,hdc,LEFT,TOP,0);
DeleteCompatibleDC(hmemDC);
}
//累积,历史记录
int InitCumulDialog(HWND hDlg)
{
int i;
unsigned char buff[20];
sprintf(buff,"AI1");
// sprintf(str,"AI%d",i);
SetDlgItemText(hDlg,CU_EDIT_NAME,buff);
for(i=0;i<3;i++)
SendDlgItemMessage(hDlg,CU_BOX_DISTYPE,CB_ADDSTRING,0,(LPARAM)mode[i]);
for(i=0;i<7;i++)
SendDlgItemMessage(hDlg,CU_BOX_INTERWALL,CB_ADDSTRING,0,(LPARAM)interval_init[i]);
for (i=0;i<3;i++)
SendDlgItemMessage(hDlg,CU_BOX_DEVICE,CB_ADDSTRING,0,(LPARAM)device[i]);
for (i=0;i<4;i++)
SendDlgItemMessage(hDlg,CU_BOX_WAY,CB_ADDSTRING,0,(LPARAM)way[i]);
for (i=1;i<=24;i++){
sprintf(buff,"%d",i);
SendDlgItemMessage(hDlg,BOX_CUMUL_HOUR,CB_ADDSTRING,0,(LPARAM)buff);
i++;
}
for (i=1;i<=60;i++){
sprintf(buff,"%d",i);
SendDlgItemMessage(hDlg,BOX_CUMUL_MINU,CB_ADDSTRING,0,(LPARAM)buff);
i++;
}
for (i=1;i<=60;i++){
sprintf(buff,"%d",i);
SendDlgItemMessage(hDlg,BOX_CUMUL_SECO,CB_ADDSTRING,0,(LPARAM)buff);
i++;
}
for (i=2000;i<=2050;i++){
sprintf(buff,"%d",i);
SendDlgItemMessage(hDlg,BOX_CUMUL_YEAR,CB_ADDSTRING,0,(LPARAM)buff);
i++;
}
for (i=1;i<=12;i++){
sprintf(buff,"%d",i);
SendDlgItemMessage(hDlg,BOX_CUMUL_MONT,CB_ADDSTRING,0,(LPARAM)buff);
i++;
}
GetDlgItemText(hDlg,BOX_CUMUL_MONT,buff,4);
for (i=1;i<=31;i++){
sprintf(buff,"%d",i);
SendDlgItemMessage(hDlg,BOX_CUMUL_DAYS,CB_ADDSTRING,0,(LPARAM)buff);
i++;
}
return 1;
}
int CumulDialogProc (HWND hDlg, int message, WPARAM wParam, LPARAM lParam)
{
HDC hdc;
static int keydowned;
int id;
id= LOWORD (wParam);
switch (message)
{
case MSG_INITDIALOG:
InitCumulDialog(hDlg);
return 1;
case MSG_SHOWWINDOW:
{
}
break;
case MSG_PAINT:
hdc=BeginPaint(hDlg);
SetBrushColor(hdc,PIXEL_black);
SetPenColor (hdc,COLOR_darkgray);
// Rectangle(hdc,180,80,380,160);
//SetBrushColor(hdc,PIXEL_darkgreen);
//FillBox(hdc,180,80,80,40);
SelectFont(hdc,songgb16font);
SetTextColor(hdc,PIXEL_black);
SetBkColor(hdc,PIXEL_lightgray);
TextOut(hdc, 180,250, "日期格式: 年/月/日");
//TextOut(hdc, 200,130, "样例: 07/01/01");
TextOut(hdc, 480,240, "时间格式: 时: 分: 秒");
//TextOut(hdc, 200,270, "样例: 08:01:59");
EndPaint(hDlg,hdc);
break;
case MSG_KEYDOWN:
if(!keydowned)
{
if(id==KEY_LEFT)SendDlgItemMessage(hDlg, CONF_CUMUL_LEFT, MSG_LBUTTONDOWN, 0,0);
if(id==KEY_RIGHT)SendDlgItemMessage(hDlg, CONF_CUMUL_RIGHT, MSG_LBUTTONDOWN, 0,0);
if(id==KEY_UP)SendDlgItemMessage(hDlg, CONF_CUMUL_UP, MSG_LBUTTONDOWN, 0,0);
if(id==KEY_DOWN)SendDlgItemMessage(hDlg, CONF_CUMUL_DOWN, MSG_LBUTTONDOWN, 0,0);
if(id==KEY_ENTER)SendDlgItemMessage(hDlg, CONF_CUMUL_ENTER, MSG_LBUTTONDOWN, 0,0);
if(id==KEY_DLEFT)SendDlgItemMessage(hDlg, CONF_CU_DLEFT, BM_SETSTATE , BST_PUSHED ,0);
if(id==KEY_DRIGHT)SendDlgItemMessage(hDlg, CONF_CU_DRIGHT, BM_SETSTATE , BST_PUSHED ,0);
if(id==KEY_RETURN)SendDlgItemMessage(hDlg, CONF_CUMUL_BACK, BM_SETSTATE , BST_PUSHED ,0);
keydowned=1;//CONF_CU_DLEFT
}
break;
case MSG_KEYUP:
{
keydowned=0;
if(id==KEY_EXIT) EndDialog (hDlg, 0);
if(id==SCANCODE_F2) EndDialog (hDlg, 0);
if(id==KEY_LEFT)SendDlgItemMessage(hDlg, CONF_CUMUL_LEFT, MSG_LBUTTONUP, 0,0);
if(id==KEY_RIGHT)SendDlgItemMessage(hDlg, CONF_CUMUL_RIGHT, MSG_LBUTTONUP, 0,0);
if(id==KEY_UP)SendDlgItemMessage(hDlg, CONF_CUMUL_UP, MSG_LBUTTONUP, 0,0);
if(id==KEY_DOWN)SendDlgItemMessage(hDlg, CONF_CUMUL_DOWN, MSG_LBUTTONUP, 0,0);
if(id==KEY_ENTER)SendDlgItemMessage(hDlg, CONF_CUMUL_ENTER, MSG_LBUTTONUP, 0,0);
if(id==KEY_DLEFT)SendDlgItemMessage(hDlg, CONF_CU_DLEFT, BM_SETSTATE, 0,0);
if(id==KEY_DRIGHT)SendDlgItemMessage(hDlg, CONF_CU_DRIGHT, BM_SETSTATE, 0,0);
if(id==KEY_RETURN)SendDlgItemMessage(hDlg, CONF_CUMUL_BACK, BM_SETSTATE, 0,0);
}
break;
case MSG_COMMAND:
{
if(id==CONF_CUMUL_CANCEL) EndDialog (hDlg, 0);
if(id==CONF_CUMUL_BACK) EndDialog (hDlg, 0);
}
break;
case MSG_DESTROY:
// KillTimer(hDlg,_ID_TIMER_ALARM);
break;
case MSG_CLOSE:
break;
}
return DefaultDialogProc (hDlg, message, wParam, lParam);
}
void DlgCumul (HWND hWnd)
{
DlgCumu.controls = ctrl_conf_cumul;
DialogBoxIndirectParam (&DlgCumu, hWnd, CumulDialogProc, 0L);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -