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

📄 dlgshx.cpp

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

#include "stdafx.h"
#include "PCM120.h"
#include "DlgShx.h"
#include "DlgASK2.h"
#include "DlgConfig.h"
#include "DlgStateDisplay.h"
#include "CheckState.h"
#include "DlgAllStaSet.h"

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

/////////////////////////////////////////////////////////////////////////////
// CDlgShx dialog


CDlgShx::CDlgShx(CWnd* pParent /*=NULL*/)
	: CDialog(CDlgShx::IDD, pParent)
{
	//{{AFX_DATA_INIT(CDlgShx)
	m_iConfig = 0;
	m_strRXData = _T("");
	m_bRound0 = FALSE;
	m_bRound1 = FALSE;
	m_bRound10 = FALSE;
	m_bRound11 = FALSE;
	m_bRound12 = FALSE;
	m_bRound13 = FALSE;
	m_bRound14 = FALSE;
	m_bRound15 = FALSE;
	m_bRound16 = FALSE;
	m_bRound17 = FALSE;
	m_bRound18 = FALSE;
	m_bRound19 = FALSE;
	m_bRound2 = FALSE;
	m_bRound20 = FALSE;
	m_bRound21 = FALSE;
	m_bRound22 = FALSE;
	m_bRound23 = FALSE;
	m_bRound24 = FALSE;
	m_bRound25 = FALSE;
	m_bRound26 = FALSE;
	m_bRound27 = FALSE;
	m_bRound28 = FALSE;
	m_bRound29 = FALSE;
	m_bRound3 = FALSE;
	m_bRound30 = FALSE;
	m_bRound31 = FALSE;
	m_bRound4 = FALSE;
	m_bRound5 = FALSE;
	m_bRound6 = FALSE;
	m_bRound7 = FALSE;
	m_bRound8 = FALSE;
	m_bRound9 = FALSE;
	m_brRound0 = FALSE;
	m_brRound1 = FALSE;
	m_brRound2 = FALSE;
	m_brRound3 = FALSE;
	m_brRound4 = FALSE;
	m_brRound5 = FALSE;
	m_brRound6 = FALSE;
	m_brRound7 = FALSE;
	m_brRound8 = FALSE;
	m_brRound9 = FALSE;
	m_brRound10 = FALSE;
	m_brRound11 = FALSE;
	m_brRound12 = FALSE;
	m_brRound13 = FALSE;
	m_brRound14 = FALSE;
	m_brRound15 = FALSE;
	m_brRound16 = FALSE;
	m_brRound17 = FALSE;
	m_brRound18 = FALSE;
	m_brRound19 = FALSE;
	m_brRound20 = FALSE;
	m_brRound21 = FALSE;
	m_brRound22 = FALSE;
	m_brRound23 = FALSE;
	m_brRound24 = FALSE;
	m_brRound25 = FALSE;
	m_brRound26 = FALSE;
	m_brRound27 = FALSE;
	m_brRound28 = FALSE;
	m_brRound29 = FALSE;
	m_brRound30 = FALSE;
	m_brRound31 = FALSE;
	//}}AFX_DATA_INIT
}


void CDlgShx::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CDlgShx)
	DDX_Radio(pDX, IDC_RADIO_CONF, m_iConfig);
	DDX_Text(pDX, IDC_EDIT_RXDATA, m_strRXData);
	DDX_Check(pDX, IDC_CHECK0, m_bRound0);
	DDX_Check(pDX, IDC_CHECK1, m_bRound1);
	DDX_Check(pDX, IDC_CHECK10, m_bRound10);
	DDX_Check(pDX, IDC_CHECK11, m_bRound11);
	DDX_Check(pDX, IDC_CHECK12, m_bRound12);
	DDX_Check(pDX, IDC_CHECK13, m_bRound13);
	DDX_Check(pDX, IDC_CHECK14, m_bRound14);
	DDX_Check(pDX, IDC_CHECK15, m_bRound15);
	DDX_Check(pDX, IDC_CHECK16, m_bRound16);
	DDX_Check(pDX, IDC_CHECK17, m_bRound17);
	DDX_Check(pDX, IDC_CHECK18, m_bRound18);
	DDX_Check(pDX, IDC_CHECK19, m_bRound19);
	DDX_Check(pDX, IDC_CHECK2, m_bRound2);
	DDX_Check(pDX, IDC_CHECK20, m_bRound20);
	DDX_Check(pDX, IDC_CHECK21, m_bRound21);
	DDX_Check(pDX, IDC_CHECK22, m_bRound22);
	DDX_Check(pDX, IDC_CHECK23, m_bRound23);
	DDX_Check(pDX, IDC_CHECK24, m_bRound24);
	DDX_Check(pDX, IDC_CHECK25, m_bRound25);
	DDX_Check(pDX, IDC_CHECK26, m_bRound26);
	DDX_Check(pDX, IDC_CHECK27, m_bRound27);
	DDX_Check(pDX, IDC_CHECK28, m_bRound28);
	DDX_Check(pDX, IDC_CHECK29, m_bRound29);
	DDX_Check(pDX, IDC_CHECK3, m_bRound3);
	DDX_Check(pDX, IDC_CHECK30, m_bRound30);
	DDX_Check(pDX, IDC_CHECK31, m_bRound31);
	DDX_Check(pDX, IDC_CHECK4, m_bRound4);
	DDX_Check(pDX, IDC_CHECK5, m_bRound5);
	DDX_Check(pDX, IDC_CHECK6, m_bRound6);
	DDX_Check(pDX, IDC_CHECK7, m_bRound7);
	DDX_Check(pDX, IDC_CHECK8, m_bRound8);
	DDX_Check(pDX, IDC_CHECK9, m_bRound9);
	DDX_Check(pDX, IDC_CHECK63, m_brRound0);
	DDX_Check(pDX, IDC_CHECK32, m_brRound1);
	DDX_Check(pDX, IDC_CHECK33, m_brRound2);
	DDX_Check(pDX, IDC_CHECK34, m_brRound3);
	DDX_Check(pDX, IDC_CHECK35, m_brRound4);
	DDX_Check(pDX, IDC_CHECK36, m_brRound5);
	DDX_Check(pDX, IDC_CHECK37, m_brRound6);
	DDX_Check(pDX, IDC_CHECK38, m_brRound7);
	DDX_Check(pDX, IDC_CHECK39, m_brRound8);
	DDX_Check(pDX, IDC_CHECK40, m_brRound9);
	DDX_Check(pDX, IDC_CHECK41, m_brRound10);
	DDX_Check(pDX, IDC_CHECK42, m_brRound11);
	DDX_Check(pDX, IDC_CHECK43, m_brRound12);
	DDX_Check(pDX, IDC_CHECK44, m_brRound13);
	DDX_Check(pDX, IDC_CHECK45, m_brRound14);
	DDX_Check(pDX, IDC_CHECK46, m_brRound15);
	DDX_Check(pDX, IDC_CHECK47, m_brRound16);
	DDX_Check(pDX, IDC_CHECK48, m_brRound17);
	DDX_Check(pDX, IDC_CHECK49, m_brRound18);
	DDX_Check(pDX, IDC_CHECK50, m_brRound19);
	DDX_Check(pDX, IDC_CHECK51, m_brRound20);
	DDX_Check(pDX, IDC_CHECK52, m_brRound21);
	DDX_Check(pDX, IDC_CHECK53, m_brRound22);
	DDX_Check(pDX, IDC_CHECK54, m_brRound23);
	DDX_Check(pDX, IDC_CHECK55, m_brRound24);
	DDX_Check(pDX, IDC_CHECK56, m_brRound25);
	DDX_Check(pDX, IDC_CHECK57, m_brRound26);
	DDX_Check(pDX, IDC_CHECK58, m_brRound27);
	DDX_Check(pDX, IDC_CHECK59, m_brRound28);
	DDX_Check(pDX, IDC_CHECK60, m_brRound29);
	DDX_Check(pDX, IDC_CHECK61, m_brRound30);
	DDX_Check(pDX, IDC_CHECK62, m_brRound31);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CDlgShx, CDialog)
	//{{AFX_MSG_MAP(CDlgShx)
	ON_MESSAGE(WM_COMM_RXCHAR,OnCommunication)
	ON_BN_CLICKED(IDC_BTN_SENT, OnBtnSent)
	ON_WM_TIMER()
	ON_WM_CLOSE()
	ON_CBN_SELENDOK(IDC_COMBO_THEE1, OnSelendokComboThee1)
	ON_BN_CLICKED(IDC_BTN_SAVESELECT, OnBtnSaveselect)
	ON_BN_CLICKED(IDC_BTN_ASK, OnBtnAsk)
	ON_BN_CLICKED(IDC_BTN_SELECTALL, OnBtnSelectall)
	ON_BN_CLICKED(IDC_BTN_UNSELECT, OnBtnUnselect)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CDlgShx message handlers
CString CDlgShx::strSent="";//最终发送的内容
int CDlgShx::iState=0;
int TheE1SelIndex=-1;//选中的是第几路0--1路,1--2路,2--3路,3--4路
CString strTheFirst;
CString strTheSecond;
CString strTheThird;
CString strTheForth;
CStringArray straSelect;//存放是环回设置后的值



/*void CDlgShx::OnBtnInit() 
{
	// TODO: Add your control notification handler code here
}
*/

BOOL CDlgShx::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);
//////////////////////////////////////////////////////////////////////////	
	CDlgShx::iState=1;
	CComboBox *ComBoxTheE1=(CComboBox*)GetDlgItem(IDC_COMBO_THEE1);
	ComBoxTheE1->InsertString(0,"第一路");
	ComBoxTheE1->InsertString(1,"第二路");
	ComBoxTheE1->InsertString(2,"第三路");
	ComBoxTheE1->InsertString(3,"第四路");

	// TODO: Add extra initialization here
	strTheFirst="A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 AA AB AC AD AE AF B0 B1 B2 B3 B4 B5 B6 B7 B8 B9 BA BB BC BD BE BF ";
	strTheSecond="A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 AA AB AC AD AE AF B0 B1 B2 B3 B4 B5 B6 B7 B8 B9 BA BB BC BD BE BF ";
	strTheThird="A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 AA AB AC AD AE AF B0 B1 B2 B3 B4 B5 B6 B7 B8 B9 BA BB BC BD BE BF ";
	strTheForth="A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 AA AB AC AD AE AF B0 B1 B2 B3 B4 B5 B6 B7 B8 B9 BA BB BC BD BE BF ";
	

	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}


BEGIN_EVENTSINK_MAP(CDlgShx, CDialog)
    //{{AFX_EVENTSINK_MAP(CDlgShx)
	//}}AFX_EVENTSINK_MAP
END_EVENTSINK_MAP()
CString strPagesh;//报文内容

void CDlgShx::OnBtnSent() 
{
	// TODO: Add your control notification handler code here
	
	CByteArray hexdata;//编辑框中的内容转成的十六进制串
	CStdioFile sfMessTemp;//存放每次的配置文件
	CByteArray btahexdata;//最终要发送的内容的十六进制串
	CDlgASK Dlgask;

	CString strChange;//交叉串60-7F
	strChange="60 61 62 63 64 65 66 67 68 69 6A 6B 6C 6D 6E 6F 70 71 72 73 74 75 76 77 78 79 7A 7B 7C 7D 7E 7F";
	CString strUnChang;//不交叉A0-BF
	strUnChang="A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 AA AB AC AD AE AF B0 B1 B2 B3 B4 B5 B6 B7 B8 B9 BA BB BC BD BE BF";
	CString strRound;//环回设置;
	strRound=strTheFirst+strTheSecond+strTheThird+strTheForth;
	strRound.TrimRight(" ");//滤掉最后的空格;
	UpdateData(true);
	CString strLastConfig;
//	CDlgConfig DlgConf;

	strGetAim=CDlgStateDisplay::strAddress;
	strGetSource=CDlgStateDisplay::strAddress;	
	////////////////////////读串口信息//////////////////////////////////////////////////
	CDlgAllStaSet dlgalstaset;
	CString strPath;
	char Get[255];
	dlgalstaset.GetModulePath(strPath,NULL);
	strPath+="config.ini";
	GetPrivateProfileString("Com",strGetSource,"1",Get,255,strPath);
	UINT uiCom=(UINT)atoi(Get);
	//////////////////////////////////////////////////////////////////////////
	if(m_iConfig==1)//查询
	{
		m_strRXData="";
		UpdateData(false);
	//	strSent="7E 81 01 01 00 02 00";	//直接发送固定的查询串;
		strSent.Format("7E 81 %s %s 00 02 00",strGetSource,strGetAim);

		OnButtonOpenport(uiCom);
		CDlgShx::iState=2;
		if(m_Port.m_hComm==NULL)
		{			
			AfxMessageBox("发送不成功,请重试");
			return;
		}
		else
		{		
				char data[2048];
				int len=Str2Hex(strSent,data);
				m_Port.WriteToPort(data,len);	
		}	
		//SetTimer(1,idelay,NULL);
		SetTimer(1,1200,NULL);
		return;
		
	}

	else if(m_iConfig ==0)//环回设置
	{
		OnButtonOpenport(uiCom);
		m_strRXData="";
		UpdateData(false);
		strSent.Format("7E 81 %s %s 03 02 80 %s",strGetSource,strGetAim,strRound);	
		//m_Port.WriteToPort();
		if(m_Port.m_hComm==NULL)
		{
			
			AfxMessageBox("发送不成功,请重试");
			return;
		}
		else
		{
			
				char data[2048];
				int len=Str2Hex(strSent,data);
				m_Port.WriteToPort(data,len);
				CDlgConfig dlgconfig;
				dlgconfig.WriteConfig(strSent);//把配置的内容写入日志;
				/*
//////////////////////////如果与上一次 的配置不一样,就要记到日志里////////////////////////////////////////////////
		
		char Getshx[500];//取得环回设置的上一次设置的内容char;
		GetLogPath();
		GetPrivateProfileString("default","环回设置","",Getshx,500,strLogPath);
		CString StrGetshx;//取得环回设置的上一次设置的内容CString;
		StrGetshx=Getshx;
		if(strSent.Compare(StrGetshx)!=0)
		{
			WritePrivateProfileString(strCurTime,strGetSource+"环回设置",strSent,strLogPath);
			WritePrivateProfileString("default",strGetSource+"环回设置",strSent,strLogPath);
		}
//////////////////////////////////////////////////////////////////////////
				
*/
		}	
	//	SetTimer(1,1000,NULL);
		strLastConfig =strSent;
		WriteConfig(strLastConfig);
		strPagesh=strRound;
		Sleep(1000);//等一秒后发查询报文
	if(Dlgask.DoModal()==IDOK)
	{	
		m_strRXData="";
		strSent.Format("7E 81 %s %s 00 02 00",strGetSource,strGetAim);
		if(m_Port.m_hComm==NULL)
		{			
			AfxMessageBox("串口占用或不存在,请稍后重试");
			return;
		}
		else
		{
				char data[2048];
				int len=Str2Hex(strSent,data);
				m_Port.WriteToPort(data,len);	
		}	
		//SetTimer(1,idelay,NULL);	
		SetTimer(1,1000,NULL);	
	}
	else
	{
		m_Port.ClosePort();
	//	CDlgShx::iState=0;
	}
		return;
	}
	

	
}

void CDlgShx::WriteConfig(CString strConfig)
{
	CStdioFile sfMessTemp;
		int iLenSentf;
		if(sfMessTemp.Open("lastSent.txt",CFile::modeRead))
		{
			iLenSentf=sfMessTemp.GetLength();
		}
		sfMessTemp.Close();
		if(iLenSentf>5000)
			{
				if(sfMessTemp.Open("lastSent.txt",CFile::modeCreate|CFile::modeNoTruncate|CFile::modeWrite))
				{
					sfMessTemp.WriteString(strConfig+'\n');
				}	
				sfMessTemp.Close();
			}
			else
			{
			
				if(sfMessTemp.Open("lastSent.txt",CFile::modeCreate|CFile::modeNoTruncate|CFile::modeWrite))
				{				
					sfMessTemp.WriteString(strConfig+'\n');				
				}
				sfMessTemp.Close();

			}
}

void CDlgShx::OnTimer(UINT nIDEvent) 
{
	// TODO: Add your message handler code here and/or call default
		KillTimer(1);
		m_Port.ClosePort();
	//	CDlgShx::iState=0;
		if(!m_strRXData.IsEmpty())
		{
			UpdateData(false);			
//////////////////////////////////////////////////////////////////////////

			int iPos =m_strRXData.Find("7E 7E");
			if(iPos!=-1)
			{
				CString strAnser;
				int istdLen=sizeof("7E 7E 81 01 01 02 00 80 ");
				int nLen=m_strRXData.GetLength()-iPos -istdLen;
				strAnser=m_strRXData.Right(nLen+1);
				if(nLen>=383)
				{
						strPagesh+=" ";
//////////////////////////////////////////////////////////////////////////
					CString strGet2Bit;
					for(int iposRe=0;iposRe<32;iposRe++)
					{						
						strGet2Bit=strAnser.Mid(iposRe*3,1);
						if(strGet2Bit=="6"||strGet2Bit=="7")
						{
							iaResult0[iposRe]=TRUE;	
						}
						else
						{
							iaResult0[iposRe]=FALSE;
						}
						
					}
					for(iposRe=32;iposRe<64;iposRe++)
					{						
						strGet2Bit=strAnser.Mid(iposRe*3,1);
						if(strGet2Bit=="6"||strGet2Bit=="7")
						{
							iaResult1[iposRe-32]=TRUE;	
						}
						else
						{
							iaResult1[iposRe-32]=FALSE;
						}
					}
					for(iposRe=64;iposRe<96;iposRe++)
					{					
						strGet2Bit=strAnser.Mid(iposRe*3,1);
						if(strGet2Bit=="6"||strGet2Bit=="7")
						{
							iaResult2[iposRe-64]=TRUE;
						}
						else
						{
							iaResult2[iposRe-64]=FALSE;
						}
					}
					for(iposRe=96;iposRe<128;iposRe++)
					{					
						strGet2Bit=strAnser.Mid(iposRe*3,1);
						if(strGet2Bit=="6"||strGet2Bit=="7")
						{
							iaResult3[iposRe-96]=TRUE;	
						}
						else
						{
							iaResult3[iposRe-96]=FALSE;
						}
					}

				}
				else
				{
					AfxMessageBox("延时短,查询结果没有取完整");
				}
			
//////////////////////////////////////////////////////////////////////////
				
/*				CStdioFile st;
				st.Open("chhl.txt",CFile::modeCreate|CFile::modeWrite);
				st.WriteString("\r\nstrAnser\r\n");
				st.WriteString(strAnser);
				st.WriteString("\r\nstrPagesh\r\n");
				st.WriteString(strPagesh);
				st.Close();
*/				if(strAnser.Compare(strPagesh)==0)
				{
					
					AfxMessageBox("交叉连接设置成功");
					m_Port.ClosePort();
				//	CDlgShx::iState=0;
			
					return;
				}
		
				else
				{
					return;			
				}
				
			}
		}
		

//////////////////////////////////////////////////////////////////////////
	
			
			CDialog::OnTimer(nIDEvent);
}

void CDlgShx::OnClose() 
{
	// TODO: Add your message handler code here and/or call default
	//CDlgShx::iState=0;
	if(m_Port.m_hComm!=NULL)
	{
			m_Port.ClosePort();
			CDlgShx::iState=0;
	}
	CDlgShx::iState=0;
	CDialog::OnClose();
}

void CDlgShx::OnSelendokComboThee1() 
{
	// TODO: Add your control notification handler code here
	UpdateData(true);
	Empty();
	UpdateData(false);
//	UpdateData(true);
//	UpdateData(false);
	CComboBox *ComBoxTheE1=(CComboBox*)GetDlgItem(IDC_COMBO_THEE1);
	TheE1SelIndex=ComBoxTheE1->GetCurSel();	
/*	switch(TheE1SelIndex) {
	case 0:
		SetResult(iaResult0);
		SetSource(iaSource0);
		break;
	case 1:
		SetResult(iaResult1);
		SetSource(iaSource1);
		break;
	case 2:
		SetResult(iaResult2);
		SetSource(iaSource2);
		break;
	case 3:
		SetResult(iaResult3);
		SetSource(iaSource3);
		break;	
	}
	*/
	

	
}

void CDlgShx::OnBtnSaveselect() 
{
	// TODO: Add your control notification handler code here
	int iSize=straSelect.GetSize();
	if(iSize>0)
	{
		straSelect.RemoveAll();
		Initstra();
	}
	else
	{
		Initstra();
	}

	UpdateData(true);
	iaSelect10[0]=false;
	if(m_bRound1)
	{
		straSelect.SetAt(1,"61");
		iaSelect10[1]=true;
	}
	else
	{
		iaSelect10[1]=false;	
	}
	if(m_bRound2)
	{
		straSelect.SetAt(2,"62");
		iaSelect10[2]=true;
	}
	else
	{
		iaSelect10[2]=false;	
	}
	if(m_bRound3)
	{
		straSelect.SetAt(3,"63");
		iaSelect10[3]=true;
	}
	else
	{
		iaSelect10[3]=false;	
	}
	if(m_bRound4)
	{
		straSelect.SetAt(4,"64");
		iaSelect10[4]=true;
	}
	else
	{
		iaSelect10[4]=false;	
	}
	if(m_bRound5)
	{
		straSelect.SetAt(5,"65");
		iaSelect10[5]=true;
	}
	else
	{
		iaSelect10[5]=false;	
	}
	if(m_bRound6)
	{
		straSelect.SetAt(6,"66");
		iaSelect10[6]=true;
	}
	else
	{
		iaSelect10[6]=false;	
	}
	if(m_bRound7)
	{
		straSelect.SetAt(7,"67");
		iaSelect10[7]=true;
	}

⌨️ 快捷键说明

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