⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dlgconfig.cpp

📁 使用vc++技术实现光电机串口通信管理程序
💻 CPP
📖 第 1 页 / 共 5 页
字号:
// DlgConfig.cpp : implementation file
//

#include "stdafx.h"
#include "pcm120.h"
#include "DlgConfig.h"
#include "DlgASk2.h"
#include "DlgStateDisplay.h"
#include "DirDialog.h"
#include "fileanddir.h"
#include "CheckState.h"
#include "DlgAllStaSet.h"
#include "afxtempl.h"
#include "ColorListBox.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

#define  GRAY RGB(129,129,129)
#define  GREEN RGB(86,222,100)
#define  RED RGB(255,0,0)
#define  YELLOW RGB(255,128,255)
#define  BLUE RGB(0,0,255)
#define  BLACK RGB(0,0,0)
/////////////////////////////////////////////////////////////////////////////
// CDlgConfig dialog
CString CDlgConfig::strSent="";
int CDlgConfig::iState=0;
CString StrReceive="";
CString strDir;//方案路径
int nCntPlan=0;//已有方案个数
CStringArray straPlan;//方案名数组
CStringArray straTs;//每路的32个时隙
CStringArray staTsStr;//所有时隙串
CStringArray staTsBin;//所有时隙(二进制串)
int iCntRecord=0;
CStdioFile sfMessTemp;//存放每次的配置文件
int CDlgConfig::nSel1=-1;
int CDlgConfig::nSel2=-1;
int CDlgConfig::nSel3=-1;
int CDlgConfig::nSel4=-1;
CDlgConfig::CDlgConfig(CWnd* pParent /*=NULL*/)
	: CDialog(CDlgConfig::IDD, pParent)
{
	//{{AFX_DATA_INIT(CDlgConfig)
	m_strNote = _T("");
	m_strRXData = _T("");
	m_strTXData = _T("");
	m_iATR = 1;
	m_iCmd = 0;
	//}}AFX_DATA_INIT
}


void CDlgConfig::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CDlgConfig)
	DDX_Control(pDX, IDC_LIST_AIM3, m_CtrAim3);
	DDX_Control(pDX, IDC_LIST_AIM4, m_CtrAim4);
	DDX_Control(pDX, IDC_LIST_AIM2, m_CtrAim2);
	DDX_Control(pDX, IDC_LIST_AIM1, m_CtrAim1);
	DDX_Control(pDX, IDC_LIST_PLAN, m_CtrlListPlan);
	DDX_Control(pDX, IDC_LIST_SOURCE4, m_CtrSourceD);
	DDX_Control(pDX, IDC_LIST_SOURCE3, m_CtrSourceC);
	DDX_Control(pDX, IDC_LIST_SOURCE2, m_CtrSourceB);
	DDX_Control(pDX, IDC_LIST_SOURCE1, m_CtrSourceA);
	DDX_Text(pDX, IDC_EDIT_NOTE, m_strNote);
	DDX_Text(pDX, IDC_EDIT_RXDATA, m_strRXData);
	DDX_Text(pDX, IDC_EDIT_TXDATA, m_strTXData);
	DDX_Radio(pDX, IDC_RADIO_ATR, m_iATR);
	DDX_Radio(pDX, IDC_RADIO_CMD, m_iCmd);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CDlgConfig, CDialog)
	//{{AFX_MSG_MAP(CDlgConfig)
	ON_MESSAGE(WM_COMM_RXCHAR,OnCommunication)
	ON_BN_CLICKED(IDC_BUTTON_MANUALSEND, OnButtonManualsend)
	ON_BN_CLICKED(IDC_BTN_OK, OnBtnOk)
	ON_NOTIFY(NM_DBLCLK, IDC_LIST_PLAN, OnDblclkListPlan)
	ON_BN_CLICKED(IDC_BTN_SAVE, OnBtnSave)
	ON_BN_CLICKED(IDC_BTN_RIGHTATO1, OnBtnRightato1)
	ON_BN_CLICKED(IDC_BTN_RIGHTATO2, OnBtnRightato2)
	ON_BN_CLICKED(IDC_BTN_RIGHTATO3, OnBtnRightato3)
	ON_BN_CLICKED(IDC_BTN_RIGHTATO4, OnBtnRightato4)
	ON_BN_CLICKED(IDC_BTN_RIGHTBTO1, OnBtnRightbto1)
	ON_BN_CLICKED(IDC_BTN_RIGHTBTO2, OnBtnRightbto2)
	ON_BN_CLICKED(IDC_BTN_RIGHTBTO3, OnBtnRightbto3)
	ON_BN_CLICKED(IDC_BTN_RIGHTBTO4, OnBtnRightbto4)
	ON_BN_CLICKED(IDC_BTN_RIGHTCTO1, OnBtnRightcto1)
	ON_BN_CLICKED(IDC_BTN_RIGHTCTO2, OnBtnRightcto2)
	ON_BN_CLICKED(IDC_BTN_RIGHTCTO3, OnBtnRightcto3)
	ON_BN_CLICKED(IDC_BTN_RIGHTCTO4, OnBtnRightcto4)
	ON_BN_CLICKED(IDC_BTN_RIGHTDTO1, OnBtnRightdto1)
	ON_BN_CLICKED(IDC_BTN_RIGHTDTO2, OnBtnRightdto2)
	ON_BN_CLICKED(IDC_BTN_RIGHTDTO3, OnBtnRightdto3)
	ON_BN_CLICKED(IDC_BTN_RIGHTDTO4, OnBtnRightdto4)
	ON_BN_CLICKED(IDC_BTN_1LEFT, OnBtn1left)
	ON_BN_CLICKED(IDC_BTN_2LEFT, OnBtn2left)
	ON_BN_CLICKED(IDC_BTN_3LEFT, OnBtn3left)
	ON_BN_CLICKED(IDC_BTN_4LEFT, OnBtn4left)
	ON_WM_TIMER()
	ON_WM_CLOSE()
	ON_LBN_DBLCLK(IDC_LIST_AIM1, OnDblclkListAim1)
	ON_LBN_SELCHANGE(IDC_LIST_AIM1, OnSelchangeListAim1)
	ON_LBN_SELCHANGE(IDC_LIST_AIM2, OnSelchangeListAim2)
	ON_LBN_SELCHANGE(IDC_LIST_AIM3, OnSelchangeListAim3)
	ON_LBN_SELCHANGE(IDC_LIST_AIM4, OnSelchangeListAim4)
	ON_LBN_DBLCLK(IDC_LIST_AIM2, OnDblclkListAim2)
	ON_LBN_DBLCLK(IDC_LIST_AIM3, OnDblclkListAim3)
	ON_LBN_DBLCLK(IDC_LIST_AIM4, OnDblclkListAim4)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CDlgConfig message handlers
	CString strPage;//发送的报文
	CString strGetAim,strGetSource,strGetATR,strCMD;//获得界面上设置的源地址,目的地址,命令
void CDlgConfig::OnButtonManualsend() 
{
	OnBtnOk();
	// TODO: Add your control notification handler code here
	CDlgConfig::iState=2;//准备要发送数据;
	CCheckState::bAuto=false;
//////////////////////////////////////////////////////////////////////////

	CDlgAllStaSet dlgalstaset;
	CString strPath;
	char Get[255];
	dlgalstaset.GetModulePath(strPath,NULL);

	strPath+="config.ini";
	GetPrivateProfileString("Com",CDlgStateDisplay::strAddress,"1",Get,255,strPath);
	UINT uiCom=(UINT)atoi(Get);
	//////////////////////////////////////////////////////////////////////////
	
	OnButtonOpenport(uiCom);

	UpdateData(true);
	for(int its=127;its>=0;its--)
	{
		m_strTXData.Replace(staTsStr.GetAt(its),staTsBin.GetAt(its));	
	}
	m_strRXData="";
	UpdateData(false);
	UpdateData(true);
//	CString strSent;//最终发送的内容
	if(m_iATR==-1)
	{
		AfxMessageBox("请选择一种命令属性");
		return;
	}

	CDlgASK Dlgask;
	
	CString strCMd;
	CString strLastConfig;
	switch(m_iCmd)
	{
	case 0:
		strCMD="00";
		strCMd="上行";
		break;
	case 1:
		strCMD="01";
		strCMd="下行";
		break;
	default:
		strCMD="00";
		break;	
	}
	strGetAim=CDlgStateDisplay::strAddress;
	strGetSource=CDlgStateDisplay::strAddress;
	if(m_iATR==0)
	{
		m_strTXData="";
		UpdateData(false);
		UpdateData(true);
	//	CDlgConfig::iState=1;
		strGetATR="00";//询问
		CDlgConfig::strSent.Format("7E 81 %s %s %s %s 00",strGetAim,strGetAim,strGetATR,strCMD);
		//strSent如果有内容就进行发送;
		if(m_Port.m_hComm==NULL)
		{
			
			AfxMessageBox("发送不成功,请重试");
			return;
		}
		else
		{
			
				char data[2048];
				int len=Str2Hex(strSent,data);
				m_Port.WriteToPort(data,len);	
		}	
		SetTimer(3,1000,NULL);//等1秒后取接收内容
		return;
	}
	if(m_iATR==1) 
	{
	
	//	CDlgConfig::iState=1; 
		strGetATR="03";//配置
		char hexdata[2048];//编辑框中的内容转成的十六进制串
		int len=Str2Hex(m_strTXData,hexdata); //此处返回的len可以用于计算发送了多少个十六进制数		
		if(len!=128)
		{
			AfxMessageBox("配置无效");
			return;
		}
		CDlgConfig::strSent.Format("7E 81 %s %s %s %s %02X %s",strGetAim,strGetAim,strGetATR,strCMD,len,m_strTXData);//组织要发送的源文
	//	CDlgConfig::iState=2;
		strPage=m_strTXData;	
		if(m_Port.m_hComm==NULL)
		{			
			AfxMessageBox("发送不成功,请重试");
			return;
		}
		else
		{
			
				char data[2048];
				int lenTemp=Str2Hex(strSent,data);
				m_Port.WriteToPort(data,lenTemp);	
		}	
		WriteConfig(CDlgConfig::strSent);
		/*
//////////////////////////如果与上一次 的配置不一样,就要记到日志里////////////////////////////////////////////////
		
		char Getjch[500];//取得交叉设置的上一次设置的内容char;
		GetLogPath();
		GetPrivateProfileString("default",strGetAim+strCMd+"交叉连接","",Getjch,500,strLogPath);
		CString StrGetjch;//取得交叉设置的上一次设置的内容CString;
		StrGetjch=Getjch;
		if(strSent.Compare(StrGetjch)!=0)
		{
			WritePrivateProfileString(strCurTime,strGetAim+strCMd+"交叉连接",strSent,strLogPath);
			WritePrivateProfileString("default",strGetAim+strCMd+"交叉连接",strSent,strLogPath);
		}
		*/
//////////////////////////恢复listBox里的最初状态////////////////////////////////////////////////
		int iCountSourceA =m_CtrSourceA.GetCount();
		int iCountSourceB =m_CtrSourceB.GetCount();
		int iCountSourceC =m_CtrSourceC.GetCount();
		int iCountSourceD =m_CtrSourceD.GetCount();
		
		int iCountAim1=m_CtrAim1.GetCount();
		int iCountAim2=m_CtrAim2.GetCount();
		int iCountAim3=m_CtrAim3.GetCount();
		int iCountAim4=m_CtrAim4.GetCount();
		if(iCountAim4!=0||iCountAim3!=0||iCountAim2!=0||iCountAim1!=0||iCountSourceA!=32||iCountSourceB!=32||iCountSourceC!=32||iCountSourceD!=32)
		{
			InitListBox();
		}
		UpdateData(false);
//////////////////////////////////////////////////////////////////////////
		
		Sleep(1000);//发送完等1秒后取发查询串
	
			
			if(Dlgask.DoModal()==IDOK)
			{
				m_strRXData="";
				strSent.Format("7E 81 %s %s 00 00 00",strGetAim,strGetAim);
				char data[2048];
				int len=Str2Hex(strSent,data);
				m_Port.WriteToPort(data,len);
			//	SetTimer(1,idelay,NULL);		
					SetTimer(1,1000,NULL);		
			}	

	}
		else
		{
			return;
		}	

}

BOOL CDlgConfig::OnInitDialog() 
{
	CDialog::OnInitDialog();
//////////////////////////////////////////////////////////////////////////
	CString strPath;
	CDlgAllStaSet dlgalstaset;
	dlgalstaset.GetModulePath(strPath,NULL);
	CString strConfigaPath;
	strConfigaPath=strPath+"config.ini";
	char charGedelay[255];
	GetPrivateProfileString("General","延时(毫秒)","1000",charGedelay,255,strConfigaPath);
	idelay=atoi((LPTSTR)charGedelay);;
//////////////////////////////////////////////////////////////////////////



	CDlgConfig::iState=1;
	// TODO: Add extra initialization here
	ReadPlan();
	
	// TODO: Add extra initialization here
	CStdioFile sfAdd;
	CComboBox *ComBoxCom=(CComboBox*)GetDlgItem(IDC_COMBO_COM);
	InitListBox();
/*
	for(int t=0;t<8;t++)
	{	
		CString strTempTs;
		for(int j=0;j<10;j++)
		{			
			strTempTs.Format("%d%d",t,j);
			staTsBin.Add(strTempTs);
		}
		strTempTs.Format("%dA",t);
		staTsBin.Add(strTempTs);
		strTempTs.Format("%dB",t);
		staTsBin.Add(strTempTs);
		strTempTs.Format("%dC",t);
		staTsBin.Add(strTempTs);
		strTempTs.Format("%dD",t);
		staTsBin.Add(strTempTs);
		strTempTs.Format("%dE",t);
		staTsBin.Add(strTempTs);
		strTempTs.Format("%dF",t);
		staTsBin.Add(strTempTs);
	}
	
	CString strts;
	for(int tsA=0;tsA<32;tsA++)
	{
	
		strts.Format("ATS%d",tsA);	
		m_CtrSourceA.AddString(strts);
		staTsStr.Add(strts);
		
	}
	for(int tsB=0;tsB<32;tsB++)
	{
		strts.Format("BTS%d",tsB);
		m_CtrSourceB.AddString(strts);
		staTsStr.Add(strts);
	}
	for(int tsC=0;tsC<32;tsC++)
	{
		strts.Format("CTS%d",tsC);
		m_CtrSourceC.AddString(strts);
		staTsStr.Add(strts);
	}
	for(int tsD=0;tsD<32;tsD++)
	{
		strts.Format("DTS%d",tsD);
		m_CtrSourceD.AddString(strts);
		staTsStr.Add(strts);
	}
*/
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}
void CDlgConfig::InitListBox()
{
		for(int t=0;t<8;t++)
	{	
		CString strTempTs;
		for(int j=0;j<10;j++)
		{			
			strTempTs.Format("%d%d",t,j);
			staTsBin.Add(strTempTs);
		}
		strTempTs.Format("%dA",t);
		staTsBin.Add(strTempTs);
		strTempTs.Format("%dB",t);
		staTsBin.Add(strTempTs);
		strTempTs.Format("%dC",t);
		staTsBin.Add(strTempTs);
		strTempTs.Format("%dD",t);
		staTsBin.Add(strTempTs);
		strTempTs.Format("%dE",t);
		staTsBin.Add(strTempTs);
		strTempTs.Format("%dF",t);
		staTsBin.Add(strTempTs);
	}
	
	CString strts;
	for(int tsA=0;tsA<32;tsA++)
	{
	
		strts.Format("ATS%d",tsA);	
		m_CtrSourceA.AddString(strts);
		staTsStr.Add(strts);
		
	}
	for(int tsB=0;tsB<32;tsB++)
	{
		strts.Format("BTS%d",tsB);
		m_CtrSourceB.AddString(strts);
		staTsStr.Add(strts);
	}
	for(int tsC=0;tsC<32;tsC++)
	{
		strts.Format("CTS%d",tsC);
		m_CtrSourceC.AddString(strts);
		staTsStr.Add(strts);
	}
	for(int tsD=0;tsD<32;tsD++)
	{
		strts.Format("DTS%d",tsD);
		m_CtrSourceD.AddString(strts);
		staTsStr.Add(strts);
	}
////////////////////////////删除目的地址//////////////////////////////////////////////
	
	int icnAim1=m_CtrAim1.GetCount();
	if(icnAim1>0)
	{	

		for(int i=0;i<icnAim1;i++)
		{
			m_CtrAim1.DeleteString(0);
		}
		
	}
	int icnAim2=m_CtrAim2.GetCount();
	if(icnAim2>0)
	{
		for(int i=0;i<icnAim2;i++)
		{
			m_CtrAim2.DeleteString(0);
		}
	}
	int icnAim3=m_CtrAim3.GetCount();
	if(icnAim3>0)
	{
		for(int i=0;i<icnAim3;i++)
		{
			m_CtrAim3.DeleteString(0);
		}
	}
	int icnAim4=m_CtrAim4.GetCount();
	if(icnAim4>0)
	{
		for(int i=0;i<icnAim4;i++)
		{
			m_CtrAim4.DeleteString(0);
		}
	}
	UpdateData(false);
}
void CDlgConfig::ReadPlan() 
{
	DWORD dwStyle =m_CtrlListPlan.GetExtendedStyle();
	m_CtrlListPlan.SetExtendedStyle(dwStyle|LVS_EX_GRIDLINES|LVS_EX_FULLROWSELECT);
	
		LV_COLUMN lvc;	
		lvc.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;
		lvc.fmt = LVCFMT_LEFT;
		lvc.cx = 150;
		lvc.iSubItem = 0;
		lvc.pszText = "方案";
		m_CtrlListPlan.InsertColumn(0,&lvc);
		lvc.iSubItem = 1;
		lvc.cx = 150;
		lvc.pszText = "注释";
		m_CtrlListPlan.InsertColumn(1,&lvc);
//		char * pDir= new char[80];
//		GetCurrentDirectory(80,pDir);
		CDlgAllStaSet dlgalstaset;
		dlgalstaset.GetModulePath(strLogPath,NULL);
		strDir=(LPCTSTR)strLogPath;
		strDir+="plan\\";
		CStringArray straList;
		CFileAndDir filedlg;
		nCntPlan=0;
		filedlg.RansackDirectoryEx(strDir,straList,nCntPlan);
		
		for(int i=0;i<nCntPlan;i++)
		{
			CString strPlanName;
			CString strTemp;
			strPlanName=straList.GetAt(i);
			strTemp	=strPlanName;
			strTemp.Replace(strDir,"");
			strTemp.Replace(".txt","");
			strTemp.Replace("\\","");
			straPlan.Add(strTemp);
			int j;
			j=m_CtrlListPlan.InsertItem(0,strTemp);
			CStdioFile fPlan;
			if(fPlan.Open(strPlanName,CFile::modeRead))
			{
				CString strNote;
				fPlan.ReadString(strNote);				
				if(strNote.Find("[")!=-1)
				{
					m_CtrlListPlan.SetItemText(j,1,strNote);				
				}
			}
			fPlan.Close();			
		}
	
}
	

void CDlgConfig::OnBtnOk() 
{
	// TODO: Add your control notification handler code here
		//UpdateData(true);
	UpdateData(true);
	m_strTXData="";
	UpdateData(false);
	int iCountAim1;
	CString strListTemp1;
	iCountAim1=m_CtrAim1.GetCount();
	for(int iAim1=0;iAim1<iCountAim1;iAim1++)
	{
		m_CtrAim1.GetText(iAim1,strListTemp1);
		m_strTXData+=strListTemp1+" ";
	}
	int iCountAim2;
	CString strListTemp2;
	iCountAim2=m_CtrAim2.GetCount();
	for(int iAim2=0;iAim2<iCountAim2;iAim2++)
	{
		m_CtrAim2.GetText(iAim2,strListTemp2);
		m_strTXData+=strListTemp2+" ";
	}
	int iCountAim3;
	CString strListTemp3;
	iCountAim3=m_CtrAim3.GetCount();
	for(int iAim3=0;iAim3<iCountAim3;iAim3++)
	{
		m_CtrAim3.GetText(iAim3,strListTemp3);
		m_strTXData+=strListTemp3+" ";
	}
	int iCountAim4;
	CString strListTemp4;
	iCountAim4=m_CtrAim4.GetCount();
	for(int iAim4=0;iAim4<iCountAim4;iAim4++)
	{
		m_CtrAim4.GetText(iAim4,strListTemp4);
		m_strTXData+=strListTemp4+" ";
	}
	m_strTXData.TrimRight(" ");

	UpdateData(false);
}

void CDlgConfig::OnDblclkListPlan(NMHDR* pNMHDR, LRESULT* pResult) 
{
	// TODO: Add your control notification handler code here
	UpdateData(true);
		for(int i=0;i<m_CtrlListPlan.GetItemCount();i++)
	{

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -