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

📄 oxcygentestdlg.cpp

📁 本人用VC6.0开发的单片机通过串口与PC机通信的上位机,通信协议在说明文档中已经写出,用户在单片机上编写串口函数时按照通信协议,便可以很方便通过此软件与PC机通信.
💻 CPP
📖 第 1 页 / 共 3 页
字号:
	info.DoModal();
}

void COxcygenTestDlg::OnButtonCheck() 
{
	// TODO: Add your control notification handler code here
	CCheck check;
	check.DoModal();
}

void COxcygenTestDlg::OnChangeEditSend() 
{
	// TODO: If this is a RICHEDIT control, the control will not
	// send this notification unless you override the CDialog::OnInitDialog()
	// function and call CRichEditCtrl().SetEventMask()
	// with the ENM_CHANGE flag ORed into the mask.
	
	// TODO: Add your control notification handler code here
	CString str0;
	GetDlgItemText(IDC_EDIT_SEND,str0);
	if(str0.GetLength() == 0) {
		GetDlgItem(IDC_BUTTON_SEND)->EnableWindow(false);
	}
	else {
		GetDlgItem(IDC_BUTTON_SEND)->EnableWindow(true);
	}
}

void COxcygenTestDlg::OnTimer(UINT nIDEvent) 
{
	// TODO: Add your message handler code here and/or call default
	/////////////////////////////////////////////////////////////////////////////////////
	extern unsigned char Draw_count;
	if(GetDlgItemText(IDC_BUTTON_START,str),str=="结束") {
		if((Draw_count++) == 5) {//显示曲线每秒显扫描一次
			CDialog::OnTimer(nIDEvent);
			CRect rect;
			GetDlgItem(IDC_STATIC_PIC)->GetWindowRect(&rect);
			ScreenToClient(rect);  
			InvalidateRect(rect,false);
			Draw_count = 0;
		}
	}

	//获取下位机信息
	extern unsigned char flag_info;//从机信息接收完成标志位

	CByteArray hexdata;
	CString m1,m2,m3,m4,m5,m6;

	extern unsigned char startch, slaveadd, command, hdata, ldata, check;
	extern unsigned char m_Start_char, m_Slave_add;

	//从slaveadd.ini中获得从机地址
	char *pBuf;
	DWORD dwFileLen;
	CFile file_slaveadd("slaveadd.ini",CFile::modeRead);
	dwFileLen=file_slaveadd.GetLength();
	pBuf=new char[dwFileLen+1];
	pBuf[dwFileLen]=0;
	file_slaveadd.Read(pBuf,dwFileLen);
	file_slaveadd.Close(); 
	m_Slave_add = String2int(pBuf[2], pBuf[3]);//"0x23"
	delete [] pBuf;

	//从startch.ini中获得开始字节数据
	CFile file_startch("startch.ini",CFile::modeRead);//"0xff"
	dwFileLen=file_startch.GetLength();
	pBuf=new char[dwFileLen+1];
	pBuf[dwFileLen]=0;
	file_startch.Read(pBuf,dwFileLen);
	file_startch.Close(); 
	m_Start_char = String2int(pBuf[2], pBuf[3]);
	delete [] pBuf;

	startch = m_Start_char;
	slaveadd = m_Slave_add;

	CString commond_str[] = {"Slavetype", "Gastype", "Gasmeaur", "Protype", "A1", "A2"};
	
	extern unsigned char count_info;

	if(!flag_info) {//如果从机信息还未接收完,继续发送指令
		if(count_info == 4) {
			command = 0x12;//返回A1的报警值
		}
		else if(count_info == 5) {
			command = 0x13;//返回A2的报警值
		}
		else {
			command = count_info;//i;///////////////////////////////////////////////
		}
		hdata = 0;////////////////////////////////////////////////////
		ldata = 0;/////////////////////////////////////////////////////
		check = slaveadd ^ command ^ hdata ^ ldata;
		check &= 0x7f;
		m1.Format("%02X", startch);
		m2.Format("%02X", slaveadd);
		m3.Format("%02X", command);
		m4.Format("%02X", hdata);
		m5.Format("%02X", ldata);
		m6.Format("%02X", check);
		int len=String2Hex(m1+m2+m3+m4+m5+m6,hexdata);
		extern CString flag;
		flag = commond_str[count_info];
		m_com.SetOutput(COleVariant(hexdata)); //发送查询数
		count_info++;
	}
	if(count_info == 6) {//如果发送给从机的信息发送完毕
		flag_info = 1;//变为1
		GetDlgItem(IDC_BUTTON_START)->EnableWindow(true);
		GetDlgItem(IDC_BUTTON_SET)->EnableWindow(true);
		count_info = 0;
		return;
	}
	
	extern unsigned char command_info;
	if(flag_info && command_info == 0) {//////////////////////////////////////////////////////
		command = 0x10;//i;///////////////////////////////////////////////
		command &= 0x7f;//最高位取0
		hdata = 0;////////////////////////////////////////////////////
		ldata = 0;/////////////////////////////////////////////////////
		check = slaveadd ^ command ^ hdata ^ ldata;
		check &= 0x7f;
		m1.Format("%02X", startch);
		m2.Format("%02X", slaveadd);
		m3.Format("%02X", command);
		m4.Format("%02X", hdata);
		m5.Format("%02X", ldata);
		m6.Format("%02X", check);
		int len=String2Hex(m1+m2+m3+m4+m5+m6,hexdata);
		extern CString flag;
		flag = "Gasppm";
		m_com.SetOutput(COleVariant(hexdata)); //发送查询数
		command_info++;
	}
	else if(flag_info && command_info == 1) {//////////////////////////////////////////////////
		command = 0x11;//i;///////////////////////////////////////////////
		hdata = 0;////////////////////////////////////////////////////
		ldata = 0;/////////////////////////////////////////////////////
		check = slaveadd ^ command ^ hdata ^ ldata;
		check &= 0x7f;
		m1.Format("%02X", startch);
		m2.Format("%02X", slaveadd);
		m3.Format("%02X", command);
		m4.Format("%02X", hdata);
		m5.Format("%02X", ldata);
		m6.Format("%02X", check);
		int len=String2Hex(m1+m2+m3+m4+m5+m6,hexdata);
		extern CString flag;
		flag = "Gasadc";
		m_com.SetOutput(COleVariant(hexdata)); //发送查询数
		command_info = 0;
	}
	UpdateData(false);
}

void COxcygenTestDlg::OnButtonA1() 
{
	// TODO: Add your control notification handler code here
	CByteArray hexdata;
	CString m1,m2,m3,m4,m5,m6;
	extern unsigned char startch, slaveadd, command, hdata, ldata, check;
	extern unsigned char m_Start_char, m_Slave_add;
	extern unsigned long gasmeaur_info;//气体量程
	startch = m_Start_char;
	slaveadd = m_Slave_add;
	command = 0x19;
	CString str0;
	GetDlgItemText(IDC_EDIT_A1,str0);
	if(str0.GetLength() == 0) {//判断高字节数据是否输入
		MessageBox("输入有误,请重新输入高字节数据!");
		return;
	}
	LPTSTR p = str0.GetBuffer(str0.GetLength());
	float data = (float)atoi(p)/(gasmeaur_info/10000);
	hdata = (unsigned char)((int)data / 128);
	ldata = (unsigned char)((int)data % 128);//m_Slave_add;//m_Slave_add;

	extern unsigned long a1_info;
	a1_info = hdata * 128 + ldata;
	check = slaveadd ^ command ^ hdata ^ ldata;
	check &= 0x7f;
	m1.Format("%02X", startch);
	m2.Format("%02X", slaveadd);
	m3.Format("%02X", command);
	m4.Format("%02X", hdata);
	m5.Format("%02X", ldata);
	m6.Format("%02X", check);
	int len=String2Hex(m1+m2+m3+m4+m5+m6,hexdata);
	extern CString flag;
	flag = "OnButtonA1";
	m_com.SetOutput(COleVariant(hexdata)); //发送查询数
}

void COxcygenTestDlg::OnButtonA2() 
{
	// TODO: Add your control notification handler code here
	CByteArray hexdata;
	CString m1,m2,m3,m4,m5,m6;
	extern unsigned char startch, slaveadd, command, hdata, ldata, check;
	extern unsigned char m_Start_char, m_Slave_add;
	extern unsigned long gasmeaur_info;//气体量程
	startch = m_Start_char;
	slaveadd = m_Slave_add;
	command = 0x1a;
	CString str0;
	GetDlgItemText(IDC_EDIT_A2,str0);
	if(str0.GetLength() == 0) {//判断高字节数据是否输入
		MessageBox("输入有误,请重新输入高字节数据!");
		return;
	}
	LPTSTR p = str0.GetBuffer(str0.GetLength());
	float data = (float)atoi(p)/(gasmeaur_info/10000);
	hdata = (unsigned char)((int)data / 128);
	ldata = (unsigned char)((int)data % 128);//m_Slave_add;//m_Slave_add;
	extern unsigned long a2_info;
	a2_info = hdata * 128 + ldata;
	check = slaveadd ^ command ^ hdata ^ ldata;
	check &= 0x7f;
	m1.Format("%02X", startch);
	m2.Format("%02X", slaveadd);
	m3.Format("%02X", command);
	m4.Format("%02X", hdata);
	m5.Format("%02X", ldata);
	m6.Format("%02X", check);
	extern CString flag;
	flag = "OnButtonA2";
	int len=String2Hex(m1+m2+m3+m4+m5+m6,hexdata);
	m_com.SetOutput(COleVariant(hexdata)); //发送查询数
}

void COxcygenTestDlg::OnButtonGas() 
{
	// TODO: Add your control notification handler code here
	CByteArray hexdata;
	CString m1,m2,m3,m4,m5,m6;
	extern unsigned char startch, slaveadd, command, hdata, ldata, check;
	extern unsigned char m_Start_char, m_Slave_add;
	startch = m_Start_char;
	slaveadd = m_Slave_add;
	command = 0x06;

	int num;
	CString str0;
	GetDlgItemText(IDC_COMBO_GAS,str0);
	if(str0 == "一氧化碳(CO)")
		num=0;
	else if(str0 == "硫化氢(H2S)")
		num=1;
	else if(str0 == "氧气(O2)") 
		num=2;
    else if(str0 == "可燃气体(Ex)")
		num=3;
	else if(str0 == "二氧化氮(NO2)")
		num=4;
    else if(str0 == "一氧化氮(NO)")
		num=5;
    else if(str0 == "二氧化硫(SO2)")  
		num=6;
    else if(str0 == "氯气(CL2)")
		num=7;
 	else if(str0 == "氨气(NH3)") 
		num=8;
    else if(str0 == "氢气(H2)") 
		num=9;
	else if(str0 == "磷化氢(PH3)") 
		num=10;
	else if(str0 == "甲醛(CH2O)") 
		num=11;
	else if(str0 == "臭氧(O3)") 
		num=12;
	else if(str0 == "氟气(F2)") 
		num=13;
	else if(str0 == "氟化氢(HF)")  
		num=14;
	else if(str0 == "氯化氢(HCl)") 
		num=15;
	else if(str0 == "溴化氢(HBr)")
		num=16;
	else if(str0 == "环氧乙烷(C2H4O)") 
		num=17;
	else if(str0 == "光气(COCL2)") 
		num=18;
	else if(str0 == "硅烷(SiH4)") 
		num=19;
	else if(str0 == "二氧化氯(ClO2)") 
		num=20;
	else num = 0;
	hdata = 0;
	ldata = num + 1;
	check = slaveadd ^ command ^ hdata ^ ldata;
	check &= 0x7f;
	extern unsigned long gasnum_info;
	gasnum_info = ldata;
	m1.Format("%02X", startch);
	m2.Format("%02X", slaveadd);
	m3.Format("%02X", command);
	m4.Format("%02X", hdata);
	m5.Format("%02X", ldata);
	m6.Format("%02X", check);
	int len=String2Hex(m1+m2+m3+m4+m5+m6,hexdata);
	extern CString flag;
	flag = "OnButtonGas";
	m_com.SetOutput(COleVariant(hexdata)); //发送查询数
}

void COxcygenTestDlg::OnButtonMeas() 
{
	// TODO: Add your control notification handler code here
	CByteArray hexdata;
	CString m1,m2,m3,m4,m5,m6;
	extern unsigned char startch, slaveadd, command, hdata, ldata, check;
	extern unsigned char m_Start_char, m_Slave_add;
	extern unsigned long gasmeaur_info;//气体量程
	startch = m_Start_char;
	slaveadd = m_Slave_add;
	command = 0x07;
	CString str0;
	GetDlgItemText(IDC_EDIT_MEAUR,str0);
	if(str0.GetLength() == 0) {//判断高字节数据是否输入
		MessageBox("输入有误,请重新输入高字节数据!");
		return;
	}
	LPTSTR p = str0.GetBuffer(str0.GetLength());
	hdata = (unsigned char)(atoi(p) / 128);
	ldata = (unsigned char)(atoi(p) % 128);//m_Slave_add;//m_Slave_add;	
	gasmeaur_info = atoi(p);
	check = slaveadd ^ command ^ hdata ^ ldata;
	check &= 0x7f;
	m1.Format("%02X", startch);
	m2.Format("%02X", slaveadd);
	m3.Format("%02X", command);
	m4.Format("%02X", hdata);
	m5.Format("%02X", ldata);
	m6.Format("%02X", check);
	int len=String2Hex(m1+m2+m3+m4+m5+m6,hexdata);
	extern CString flag;
	flag = "OnButtonMeas";
	m_com.SetOutput(COleVariant(hexdata)); //发送查询数
}

void COxcygenTestDlg::OnButtonRevise() 
{
	// TODO: Add your control notification handler code here
	if(GetDlgItemText(IDC_BUTTON_START,str),str=="开始") {
		MessageBox("请按下开始按钮");
		return;
	}
	if(GetDlgItemText(IDC_BUTTON_REVISE,str),str=="修改") {
		KillTimer(1);
		SetDlgItemText(IDC_BUTTON_REVISE,"保存");
		GetDlgItem(IDC_BUTTON_A1)->EnableWindow(true);//打开相关按钮
		GetDlgItem(IDC_BUTTON_A2)->EnableWindow(true);
		GetDlgItem(IDC_BUTTON_GAS)->EnableWindow(true);
		GetDlgItem(IDC_BUTTON_MEAS)->EnableWindow(true);
		
		GetDlgItem(IDC_BUTTON_INFO)->EnableWindow(false);//关闭无关按钮
		GetDlgItem(IDC_BUTTON_ADD)->EnableWindow(false);
		GetDlgItem(IDC_BUTTON_DEC)->EnableWindow(false);
		GetDlgItem(IDC_BUTTON_FUNC)->EnableWindow(false);
		GetDlgItem(IDC_BUTTON_BAK)->EnableWindow(false);
		GetDlgItem(IDC_BUTTON_OK)->EnableWindow(false);
		GetDlgItem(IDC_BUTTON_START)->EnableWindow(false);
	}
	else if(GetDlgItemText(IDC_BUTTON_REVISE,str),str=="保存") {
		SetDlgItemText(IDC_BUTTON_REVISE,"修改");
		GetDlgItem(IDC_BUTTON_A1)->EnableWindow(false);//保存退出关闭相关按钮
		GetDlgItem(IDC_BUTTON_A2)->EnableWindow(false);
		GetDlgItem(IDC_BUTTON_GAS)->EnableWindow(false);
		GetDlgItem(IDC_BUTTON_MEAS)->EnableWindow(false);

		GetDlgItem(IDC_BUTTON_INFO)->EnableWindow(true);//打开无关按钮
		GetDlgItem(IDC_BUTTON_ADD)->EnableWindow(true);
		GetDlgItem(IDC_BUTTON_DEC)->EnableWindow(true);
		GetDlgItem(IDC_BUTTON_FUNC)->EnableWindow(true);
		GetDlgItem(IDC_BUTTON_BAK)->EnableWindow(true);
		GetDlgItem(IDC_BUTTON_OK)->EnableWindow(true);
		GetDlgItem(IDC_BUTTON_START)->EnableWindow(true);

		GetDlgItem(IDC_EDIT_A1)->SetWindowText("");//清空编辑框中的文本
		GetDlgItem(IDC_EDIT_A2)->SetWindowText("");//清空编辑框中的文本
		GetDlgItem(IDC_COMBO_GAS)->SetWindowText("");
		GetDlgItem(IDC_EDIT_MEAUR)->SetWindowText("");
		
		CByteArray hexdata;
		CString m1,m2,m3,m4,m5,m6;

		extern unsigned char startch, slaveadd, command, hdata, ldata, check;
		extern unsigned char m_Start_char, m_Slave_add;

		startch = m_Start_char;
		slaveadd = m_Slave_add;
		command = 0x00;
		hdata = 0;
		ldata = 0;
		check = slaveadd ^ command ^ hdata ^ ldata;
		check &= 0x7f;
		m1.Format("%02X", startch);
		m2.Format("%02X", slaveadd);
		m3.Format("%02X", command);
		m4.Format("%02X", hdata);
		m5.Format("%02X", ldata);
		m6.Format("%02X", check);
		int len=String2Hex(m1+m2+m3+m4+m5+m6,hexdata);
		extern CString flag;
		flag = "Slavetype";
		m_com.SetOutput(COleVariant(hexdata)); //发送查询数
		SetTimer(1,100,NULL);
	}
}

void COxcygenTestDlg::OnButtonBak() 
{
	// TODO: Add your control notification handler code here
	KillTimer(1);
	CByteArray hexdata;
	CString m1,m2,m3,m4,m5,m6;

	extern unsigned char startch, slaveadd, command, hdata, ldata, check;
	extern unsigned char m_Start_char, m_Slave_add;

	startch = m_Start_char;
	slaveadd = m_Slave_add;
	command = 0x0a;
	command &= 0x7f;//最高位取0
	hdata = 0;
	ldata = 0;
	check = slaveadd ^ command ^ hdata ^ ldata;
	check &= 0x7f;
	m1.Format("%02X", startch);
	m2.Format("%02X", slaveadd);
	m3.Format("%02X", command);
	m4.Format("%02X", hdata);
	m5.Format("%02X", ldata);
	m6.Format("%02X", check);
	int len=String2Hex(m1+m2+m3+m4+m5+m6,hexdata);
	m_com.SetOutput(COleVariant(hexdata)); //发送查询数
	SetTimer(1,100,NULL);
}

⌨️ 快捷键说明

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