📄 configdi.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 "configdi.h"
static void AboutDi (HWND hParent)
{
MessageBox (hParent,
"按键操作说明:\n\n"
"W : ↑ 向上键,选择上一个设置项 "
"S : ↓ 向下键,选择下一个设置项 \n"
"A : ← 向左键,选择左一个设置项 "
"D : → 向右键,选择右边的设置项 \n"
"Enter: 修改本选择项 ,下拉,编辑\n\n"
"F1 : 返回到组态页面 "
"F2 : 返回到显示模式\n"
"F3 : 选择上一个通道 "
"F4 : 选择下一个通道 \n"
"ESC : 退出\n\n",
"帮助 DI组态设置",
MB_OK | MB_ICONEXCLAMATION);
};
// int RClick_Time=0;
// int LClick_Time=0;
void DIDialogInit(HWND hDlg)
{
const unsigned char* DI_formchar [] = {"No","H", "L", };
const unsigned char *ai_job1[]={
"开始记录","停止记录",
"记录报警","记录事件",
"不动作"
};
const unsigned char *ai_job2[]={
"启动DO","启动AO","启动DO",
"启动定时器","启动计数器","启动累加器",
"不动作"
};
const unsigned char *speed[]={
"1秒","2秒" ,"5秒","10秒","30秒","60秒","120秒"
};
unsigned char str[20];
int i;
int j;
for(i=0;i<3;i++){
//SendDlgItemMessage(hDlg, BOX_MODE,
SendMessage(GetDlgItem(hDlg,DI_BOX_TYPE1),CB_ADDSTRING,0,(LPARAM)DI_formchar[i]) ;
SendMessage(GetDlgItem(hDlg,DI_BOX_TYPE2),CB_ADDSTRING,0,(LPARAM)DI_formchar[i]) ;
}
for(j=0;j<5;j++)
{
sprintf(str,ai_job1[j]);
SendMessage(GetDlgItem(hDlg,DI_BOX1_JOB1),CB_ADDSTRING,0, (LPARAM)str) ;
}
for(j=0;j<5;j++)
{
sprintf(str,ai_job2[j]);
SendMessage(GetDlgItem(hDlg,DI_BOX1_JOB2),CB_ADDSTRING,0, (LPARAM)str) ;
}
for(j=0;j<7;j++)
{
sprintf(str,ai_job1[j]);
SendMessage(GetDlgItem(hDlg,DI_BOX2_JOB1),CB_ADDSTRING,0, (LPARAM)str) ;
}
for(j=0;j<7;j++)
{
sprintf(str,ai_job2[j]);
SendMessage(GetDlgItem(hDlg,DI_BOX2_JOB2),CB_ADDSTRING,0, (LPARAM)str) ;
}
}
//
int ReadDiInfo(HWND hDlg,int id2)
{
int id;
unsigned char str[20];
//设置初始值
id= id2;
SetDlgItemText(hDlg, DI_EDIT_NAME,channel_di[id].name);
SetDlgItemText(hDlg, DI_EDIT_DESC,channel_di[id].desc);
SendDlgItemMessage(hDlg,DI_BOX_TYPE1,CB_SETCURSEL,channel_di[id].type1,0);
SendDlgItemMessage(hDlg,DI_BOX_TYPE2,CB_SETCURSEL,channel_di[id].type2,0);
SendDlgItemMessage(hDlg,DI_BOX1_JOB1,CB_SETCURSEL,channel_di[id].line1_job1,0);
SendDlgItemMessage(hDlg,DI_BOX2_JOB1,CB_SETCURSEL,channel_di[id].line2_job1,0);
SendDlgItemMessage(hDlg,DI_BOX1_JOB2,CB_SETCURSEL,channel_di[id].line1_job2,0);
SendDlgItemMessage(hDlg,DI_BOX2_JOB2,CB_SETCURSEL,channel_di[id].line2_job2,0);
}
//保存当前通道的组态信息
int WriteDiInfo(HWND hDlg,int id2)
{
int id;
int p;
int box_index;
unsigned char str[20];
id=id2;
GetDlgItemText(hDlg,DI_EDIT_NAME,str,4);
sprintf(channel_di[id].name,str);
GetDlgItemText(hDlg,DI_EDIT_DESC,str,16);
sprintf(channel_di[id].desc,str);
channel_di[id].type1=SendDlgItemMessage(hDlg,DI_BOX_TYPE1,CB_GETCURSEL,0,0);
channel_di[id].type2=SendDlgItemMessage(hDlg,DI_BOX_TYPE2,CB_GETCURSEL,0,0);
channel_di[id].line1_job1= SendDlgItemMessage(hDlg,DI_BOX1_JOB1,CB_GETCURSEL,0,0);
channel_di[id].line2_job1= SendDlgItemMessage(hDlg,DI_BOX2_JOB1,CB_GETCURSEL,0,0);
channel_di[id].line1_job2= SendDlgItemMessage(hDlg,DI_BOX1_JOB2,CB_GETCURSEL,0,0);
channel_di[id].line2_job2= SendDlgItemMessage(hDlg,DI_BOX2_JOB2,CB_GETCURSEL,0,0);
return 1;
}
void SaveDiData(HWND hDlg)
{
HDC hdc;
int id;
int p;
int low,high;
int box_index;
int color;
int digit;
unsigned char *ai_name;
unsigned char *ai_func;
unsigned char str[20];
unsigned char *str_buf;
unsigned char str_resource[10];
unsigned char str_goal[10];
int i;
bzero(str,sizeof(str));
id= 1;
//存入文件
for(i=0;i<6;i++)
{
sprintf(str_resource,"DI%d",(i+1));
sprintf(str_goal,"%d",channel_di[id].type1);
SetValueToEtcFile("system.conf",str_resource,"Type1",str_goal);
sprintf(str_goal,"%d",channel_di[id].type2);
SetValueToEtcFile("system.conf",str_resource,"Type2",str_goal);
sprintf(str_goal,"%d",channel_di[id].name);
SetValueToEtcFile("system.conf",str_resource,"Name",str_goal);
sprintf(str_goal,"%d",channel_di[id].desc);
SetValueToEtcFile("system.conf",str_resource,"Desc",str_goal);
}
}
int ShiftDiRight(HWND hDlg,int di_bn_focus)
{
int i;
int id;
unsigned char str_num[10];
id=di_bn_focus-DI_BN1;
//保存本通道的信息
WriteDiInfo(hDlg,id);
//更换到下一通道的信息
SendMessage(GetDlgItem(hDlg,di_bn_focus), BM_SETSTATE , 0 ,0);
di_bn_focus++;
if(di_bn_focus>DI_BN6)di_bn_focus=DI_BN1;
SendMessage(GetDlgItem(hDlg,di_bn_focus), BM_SETSTATE , BST_PUSHED ,0);
bfresh_conf=1;
sprintf(topinfo,"组态DI DI%d ",(di_bn_focus-DI_BN1+1));
id=di_bn_focus-DI_BN1;
ReadDiInfo( hDlg,id);
return di_bn_focus;
}
int ShiftDiLeft(HWND hDlg,int di_bn_focus)
{
int i;
int id;
unsigned char str_num[10];
id=di_bn_focus-DI_BN1;
//保存本通道的信息
WriteDiInfo(hDlg,id);
//更换到下一通道的信息
SendMessage(GetDlgItem(hDlg,di_bn_focus), BM_SETSTATE , 0 ,0);
di_bn_focus --;
if(di_bn_focus <DI_BN1 ) di_bn_focus =DI_BN6;
SendDlgItemMessage(hDlg, di_bn_focus, BM_SETSTATE , BST_PUSHED ,0);
//sprintf(str_num,"DI%d",(di_bn_focus-DI_BN1+1));
//str_num[3]='\0';
//SetDlgItemText(hDlg, DI_EDIT_NAME,str_num );
bfresh_conf=1;
sprintf(topinfo,"组态DI DI%d ",(di_bn_focus-DI_BN1+1));
id=di_bn_focus-DI_BN1;
ReadDiInfo( hDlg,id);
return di_bn_focus;
}
int DIDialogProc (HWND hDlg, int message, WPARAM wParam, LPARAM lParam)
{
int id ;
int code ;
static int ctrl_di_id;//按键ID号或者是文本焦点号码
static int index;
static int num ;
static BOOL flag_entered;
static int di_bn_focus; //必须为全局变量
unsigned char str_num[10];
unsigned char str[10];
id = LOWORD (wParam);
code = HIWORD(wParam);
switch (message) {
case MSG_INITDIALOG:
b_di_close=0;
DIDialogInit(hDlg);
//预先给定一个焦点
di_bn_focus=DI_BN1;
ctrl_di_id=DI_EDIT_NAME;
id=di_bn_focus-DI_BN1;
ReadDiInfo( hDlg,id);
SetDlgItemText(hDlg, DI_EDIT_NAME,"DI1" );
SetDlgItemText(hDlg, DI_EDIT_DESC,"数字输入通道1");
SendDlgItemMessage(hDlg, DI_BN1, BM_SETSTATE , BST_PUSHED ,0);
SetFocusChild(GetDlgItem(hDlg,DI_EDIT_NAME));
break;
case MSG_DESTROY :
break;
case MSG_SHOWWINDOW :
if(b_di_close==1)
{
EndDialog (hDlg, 0);
}
break;
case MSG_PAINT:
break;
case MSG_KEYDOWN:
if(! keydowned)
{
if(id==KEY_LEFT)SendDlgItemMessage(hDlg, CONF_DI_LEFT, MSG_LBUTTONDOWN, 0,0);
if(id==KEY_RIGHT)SendDlgItemMessage(hDlg, CONF_DI_RIGHT, MSG_LBUTTONDOWN, 0,0);
if(id==KEY_UP)SendDlgItemMessage(hDlg, CONF_DI_UP, MSG_LBUTTONDOWN, 0,0);
if(id==KEY_DOWN)SendDlgItemMessage(hDlg, CONF_DI_DOWN, MSG_LBUTTONDOWN, 0,0);
if(id==KEY_ENTER)SendDlgItemMessage(hDlg, CONF_DI_ENTER, MSG_LBUTTONDOWN, 0,0);
if(id==KEY_DLEFT)SendDlgItemMessage(hDlg, CONF_DI_DLEFT, MSG_LBUTTONDOWN, 0,0);
if(id==KEY_DRIGHT)SendDlgItemMessage(hDlg, CONF_DI_DRIGHT, MSG_LBUTTONDOWN, 0,0);
if(id==SCANCODE_F5)SendDlgItemMessage(hDlg, CONF_DI_DAI, BM_SETSTATE , BST_PUSHED ,0);
if(id==SCANCODE_F6)
SendDlgItemMessage(hDlg, CONF_DI_DDI, BM_SETSTATE , BST_PUSHED ,0);
if(id==SCANCODE_F7)SendDlgItemMessage(hDlg, CONF_DI_DMATH, BM_SETSTATE , BST_PUSHED ,0);
keydowned=1;
}
break;
case MSG_KEYUP:
keydowned=0;
if(id==KEY_EXIT) EndDialog (hDlg, 0);
if(id==KEY_LEFT)
{
SendDlgItemMessage(hDlg, CONF_DI_LEFT, MSG_LBUTTONUP, 0,0);
ctrl_di_id=di_id_left[ctrl_di_id-EDIT_FIRST];
printf("ctrl_di_id=%d",ctrl_di_id);
SetFocusChild( GetDlgItem(hDlg,ctrl_di_id));
}
if(id==KEY_RIGHT)
{
SendDlgItemMessage(hDlg, CONF_DI_RIGHT, MSG_LBUTTONUP, 0,0);
ctrl_di_id=di_id_right[ctrl_di_id-EDIT_FIRST];
SetFocusChild( GetDlgItem(hDlg,ctrl_di_id));
}
if(id==KEY_UP)
{
SendDlgItemMessage(hDlg, CONF_DI_UP, MSG_LBUTTONUP, 0,0);
if(flag_entered)//按过ENTER后选择BOX里面内容
{
SendDlgItemMessage(hDlg,ctrl_di_id,MSG_KEYDOWN,SCANCODE_PAGEDOWN,0);
index--;if(index<0)index=num-1;
SendDlgItemMessage(hDlg,ctrl_di_id,CB_SETCURSEL,index,0);
}
else
{
ctrl_di_id=di_id_up[ctrl_di_id-EDIT_FIRST];
SetFocusChild( GetDlgItem(hDlg,ctrl_di_id));
}
}
if(id==KEY_DOWN)
{
SendDlgItemMessage(hDlg, CONF_DI_DOWN, MSG_LBUTTONUP, 0,0);
if(flag_entered)//按过ENTER后选择BOX里面内容
{
SendDlgItemMessage(hDlg,ctrl_di_id,MSG_KEYDOWN,SCANCODE_PAGEDOWN,0);
index++;if(index==num)index=0;
SendDlgItemMessage(hDlg,ctrl_di_id,CB_SETCURSEL,index,0);
}
else
{
ctrl_di_id=di_id_down[ctrl_di_id-EDIT_FIRST];
SetFocusChild( GetDlgItem(hDlg,ctrl_di_id));
}
}
if(id==KEY_ENTER)
{
SendDlgItemMessage(hDlg, CONF_DI_ENTER, MSG_LBUTTONUP, 0,0);
if(flag_entered)
{
flag_entered=0;
SetFocusChild( GetDlgItem(hDlg,ctrl_di_id));
}
else
{
if(ctrl_di_id==DI_EDIT_DESC)TagNameConfig(hDlg );
else
{
SendDlgItemMessage(hDlg,ctrl_di_id,MSG_KEYDOWN,SCANCODE_PAGEDOWN,0);
flag_entered=1;
index=SendDlgItemMessage(hDlg,ctrl_di_id,CB_GETCURSEL,0,0);
num=SendDlgItemMessage(hDlg,ctrl_di_id,CB_GETCOUNT,0,0);
}
}
}
if(id==KEY_DLEFT)
{
SendDlgItemMessage(hDlg,CONF_DI_DLEFT , BM_SETSTATE, 0,0);
di_bn_focus=ShiftDiLeft(hDlg,di_bn_focus);
}
if(id==KEY_DRIGHT)
{
SendDlgItemMessage(hDlg,CONF_DI_DRIGHT, BM_SETSTATE, 0,0);
di_bn_focus=ShiftDiRight(hDlg,di_bn_focus);
}
if(id==SCANCODE_F5)
{
SendDlgItemMessage(hDlg, CONF_DI_DAI, BM_SETSTATE , 0 ,0);
SendMessage(hDlg,MSG_COMMAND,CONF_DI_DAI,0);
}
if(id==SCANCODE_F6)
{SendDlgItemMessage(hDlg, CONF_DI_DDI, BM_SETSTATE , 0 ,0);
}
if(id==SCANCODE_F7)
{SendDlgItemMessage(hDlg, CONF_DI_DMATH, BM_SETSTATE , 0 ,0);
SendMessage(hDlg,MSG_COMMAND,CONF_DI_DMATH,0);}
break;
case MSG_COMMAND:{
if(code==EN_CLICKED)//被设置了焦点
ctrl_di_id=GetDlgCtrlID(GetFocusChild(hDlg));
if (id == EN_CHANGE)
{
SetDlgItemText(hDlg, ctrl_di_id,(unsigned char *)lParam);
}
if(id==CONF_DI_DRIGHT)
{
SendMessage(GetDlgItem(hDlg,di_bn_focus), BM_SETSTATE , 0 ,0);
di_bn_focus++;
if(di_bn_focus>DI_BN6)di_bn_focus=DI_BN1;
SendMessage(GetDlgItem(hDlg,di_bn_focus), BM_SETSTATE , BST_PUSHED ,0);
sprintf(str_num,"DI%d",(di_bn_focus-DI_BN1+1));
str_num[3]='\0';
SetDlgItemText(hDlg, DI_EDIT_NAME,str_num );
}
if(id==CONF_DI_DLEFT)
{
SendMessage(GetDlgItem(hDlg,di_bn_focus), BM_SETSTATE , 0 ,0);
di_bn_focus --;
if(di_bn_focus <DI_BN1 ) di_bn_focus =DI_BN6;
SendDlgItemMessage(hDlg, di_bn_focus, BM_SETSTATE , BST_PUSHED ,0);
sprintf(str_num,"DI%d",(di_bn_focus-DI_BN1+1));
str_num[3]='\0';
SetDlgItemText(hDlg, DI_EDIT_NAME,str_num );
}
//按左边enter 键进入
if(id== CONF_DI_DAI)
{
if (!bai_dlg)DlgConfAi(hDlg);
else{ //AI 对话框存在
bdi_dlg=0;
EndDialog (hDlg, 0);
}
}
if(id== CONF_DI_DMATH)
{
if(! bmath_dlg)DlgConfMath( hDlg);
else {
b_math_close=1;//关MATH
bdi_dlg=0;
EndDialog (hDlg, 0);//
}
}
if(id== CONF_DI_DBACK)
{bdi_dlg=0;EndDialog (hDlg, 0);
b_math_close=1;
b_ai_close=1;
}
if(id== DI_HELP)
{
AboutDi( hDlg);
}
}//end MSG_COMMAND
break;
case MSG_CLOSE:
bdi_dlg=0;
printf("di dlg is closed\n");
EndDialog (hDlg, 0);
SaveDiData(hDlg);
break;
}
return DefaultDialogProc (hDlg, message, wParam, lParam);
}
//alarm_over(GetDlgItem (hDlg, IDC_ALERT_LIST) ,3);break;
//初始化di界面
void DlgConfDi (HWND hWnd)
{
bdi_dlg=1;
di_dlg = hWnd;
DlgDI.controls = ConfigDIControl;
DialogBoxIndirectParam (&DlgDI, hWnd, DIDialogProc, 0L);
}
/*没有通讯时候的初始化*/
void DiInit( void)
{
unsigned char str_resource[10];
unsigned char str_goal[10];
unsigned char str[30];
int value;
int id;
bzero(str,sizeof(str_resource));
channel_di=(CHANNALDI* )malloc(6*sizeof(CHANNALDI));
for (id=0;id<6;id++)
{
sprintf(str_resource,"DI%d",(id+1));
channel_di[id].dev_id=4;//TEST 测试,假设是从第4个设备读入
//从文件中读入通道信息
GetValueFromEtcFile("system.conf", str_resource,"Name",str,20);
bzero(channel_di[id].name,sizeof(channel_di[id].name));
sprintf(channel_di[id].name,"%s",str);
GetValueFromEtcFile("system.conf", str_resource,"Desc",str,20);
bzero(channel_di[id].desc,sizeof(channel_di[id].desc));
sprintf(channel_di[id].desc,"%s",str);
GetIntValueFromEtcFile("system.conf", str_resource,"Type1",&value);
channel_di[id].type1=value;
GetIntValueFromEtcFile("system.conf", str_resource,"Type2",&value);
channel_di[id].type2=value;
GetIntValueFromEtcFile("system.conf", str_resource,"Job11",&value);
channel_di[id].line1_job1=value;
GetIntValueFromEtcFile("system.conf", str_resource,"Job12",&value);
channel_di[id].line2_job1=value;
GetIntValueFromEtcFile("system.conf", str_resource,"Job21",&value);
channel_di[id].line1_job2=value;
GetIntValueFromEtcFile("system.conf", str_resource,"Job22",&value);
channel_di[id].line2_job2=value;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -