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

📄 oxcygentestdlg.cpp

📁 本人用VC6.0开发的单片机通过串口与PC机通信的上位机,通信协议在说明文档中已经写出,用户在单片机上编写串口函数时按照通信协议,便可以很方便通过此软件与PC机通信.
💻 CPP
📖 第 1 页 / 共 3 页
字号:
        len=safearray_inp.GetOneDimSize(); //得到有效数据长度
        for(k=0;k<len;k++) 
			safearray_inp.GetElement(&k,rxdata+k);//转换为BYTE型数组
        for(k=0;k<len;k++) //将数组转换为Cstring型变量
		{
			BYTE bt=*(char*)(rxdata+k); //字符型
			strtemp1.Format("%02X ",bt); //将字符以十六进制方式送入临时变量strtemp存放,注意这里加入一个空隔
			strtemp2.Format("%02d",bt); //将字符以十进制方式送入临时变量strtemp存放
			str_recive += strtemp1;
            tempdata=atoi(strtemp2);
			switch(m_state) 
			{
			case 0: 
				if(tempdata==0xff) m_state=1;
				else m_state=0;
				break;
			case 1: 
				m1=tempdata; m_state=2; break;
			case 2: 
				m2=tempdata; m_state=3; break;
			case 3: 
				m3=tempdata; m_state=4; break;
			case 4: 
				m4=tempdata; m_state=5; break;
			case 5: 
				m5=tempdata; m6=m1^m2^m3^m4;
				if(m5==m6) {
					if(flag == "Slavetype") {//从机型号
						m_style = m3 * 128 + m4;//显示从机型号
						slavetype_info = m3 * 128 + m4;
					}
					else if(flag == "Gastype") {//气体类型
						gasnum_info = m3 * 128 + m4;//气体序号
					}
					else if(flag == "Gasmeaur") {//气体量程
						gasmeaur_info = m3 * 128 + m4;
					}
					else if(flag == "Protype") {//程序版本
						protype_info = m3 * 128 + m4;
					}
					else if(flag == "A1") {//A1值
						a1_info = m3 * 128 + m4;
						a1_info *= gasmeaur_info / 10000;
					}
					else if(flag == "A2") {//A2值
						a2_info = m3 * 128 + m4;
						a2_info *= gasmeaur_info / 10000;
					}					
					else if(flag == "Gasppm") {//气体浓度
						m_gasppm = (float)((m3 * 128 + m4) * gasmeaur_info)/10000;
					}
					else if(flag == "Gasadc") {//ADC值
						m_gasadc = m3 * 128 + m4;
					}
					else if(flag == "OnButtonA1") {//ADC值
						m_recive = str_recive;
					}
					else if(flag == "OnButtonA2") {//ADC值
						m_recive = str_recive;
					}
					else if(flag == "OnButtonGas") {//ADC值
						m_recive = str_recive;
					}
					else if(flag == "OnButtonMeas") {//ADC值
						m_recive = str_recive;
					}
					else if(flag == "OnButtonSend") {
						m_recive = str_recive;
					}
					m_state=0;
				}
				m_state=0;
				break;
			default: m_state=0; break;
			}
		}
		str_recive = " ";
	}
	UpdateData(false);
}

char COxcygenTestDlg::ConvertHexChar(char ch)
{
   if((ch>='0')&&(ch<='9'))
		return ch-0x30;
	else if((ch>='A')&&(ch<='F'))
		return ch-'A'+10;
	else if((ch>='a')&&(ch<='f'))
		return ch-'a'+10;
	else return (-1);
}


int COxcygenTestDlg::String16Hex(CString str)
{
	int hexdata,lowhexdata;
	int hexdatalen=0;
	int len=str.GetLength();
	for(int i=0;i<len;) {
		char lstr,hstr=str[i];
		if(hstr==' ') {
			i++;
			continue;
		}
		i++;
		if(i>=len)
			break;
		lstr=str[i];
		hexdata=ConvertHexChar(hstr);
		lowhexdata=ConvertHexChar(lstr);
		if((hexdata==16)||(lowhexdata==16))
			break;
		else 
			hexdata=hexdata*16+lowhexdata;
		i++;
	}
	return hexdata;
}

int COxcygenTestDlg::String2Hex(CString str, CByteArray &senddata)
{
    int hexdata,lowhexdata;
	int hexdatalen=0;
	int len=str.GetLength();
	senddata.SetSize(len/2);
	for(int i=0;i<len;) {
		char lstr,hstr=str[i];
		if(hstr==' ') {
			i++;
			continue;
		}
		i++;
		if(i>=len)
			break;
		lstr=str[i];
		hexdata=ConvertHexChar(hstr);
		lowhexdata=ConvertHexChar(lstr);
		if((hexdata==16)||(lowhexdata==16))
			break;
		else 
			hexdata=hexdata*16+lowhexdata;
		i++;
		senddata[hexdatalen]=(char)hexdata;
		hexdatalen++;
	}
	senddata.SetSize(hexdatalen);
	return hexdatalen;
}

unsigned char COxcygenTestDlg::String2int(char high, char low) {
	unsigned char temp1, temp2, answer;
	if((high>='0')&&(high<='9'))
		temp1 = high-0x30;
	else if((high>='A')&&(high<='F'))
		temp1 = high-'A'+10;
	else if((high>='a')&&(high<='f'))
		temp1 = high-'a'+10;

	if((low>='0')&&(low<='9'))
		temp2 = low-0x30;
	else if((low>='A')&&(low<='F'))
		temp2 = low-'A'+10;
	else if((low>='a')&&(low<='f'))
		temp2 = low-'a'+10;

	answer = temp1 * 16 + temp2;
	return answer;
}

void COxcygenTestDlg::OnButtonStart() 
{
	// TODO: Add your control notification handler code here
	extern unsigned char m_Slave_add, m_Start_char;
	if(GetDlgItemText(IDC_BUTTON_START,str),str=="开始") {
		SetDlgItemText(IDC_BUTTON_START,"结束");
		//从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;

		GetDlgItem(IDC_BUTTON_REVISE)->EnableWindow(true);
		GetDlgItem(IDC_BUTTON_SET)->EnableWindow(false);
		GetDlgItem(IDC_BUTTON_CHECK)->EnableWindow(false);/////////////////
		GetDlgItem(IDC_BUTTON_INFO)->EnableWindow(true);
		GetDlgItem(IDC_BUTTON_ADD)->EnableWindow(true);
		GetDlgItem(IDC_BUTTON_DEC)->EnableWindow(true);
		GetDlgItem(IDC_BUTTON_BAK)->EnableWindow(true);
		GetDlgItem(IDC_BUTTON_FUNC)->EnableWindow(true);
		GetDlgItem(IDC_BUTTON_OK)->EnableWindow(true);
		extern unsigned char flag_start;
		if(!flag_start) flag_start = 1;
		else m_com.SetPortOpen(true);//打开串口
		SetTimer(1,100,NULL);
	}
	else {
		SetDlgItemText(IDC_BUTTON_START,"开始");
		GetDlgItem(IDC_BUTTON_SET)->EnableWindow(true);
		GetDlgItem(IDC_BUTTON_CHECK)->EnableWindow(true);
		GetDlgItem(IDC_BUTTON_INFO)->EnableWindow(false);
		GetDlgItem(IDC_BUTTON_ADD)->EnableWindow(false);
		GetDlgItem(IDC_BUTTON_DEC)->EnableWindow(false);
		GetDlgItem(IDC_BUTTON_BAK)->EnableWindow(false);
		GetDlgItem(IDC_BUTTON_FUNC)->EnableWindow(false);
		GetDlgItem(IDC_BUTTON_OK)->EnableWindow(false);
		GetDlgItem(IDC_BUTTON_REVISE)->EnableWindow(false);
		m_recive = " ";
	   	m_com.SetPortOpen(false);
		KillTimer(1);
		UpdateData(false);
	}
}

void COxcygenTestDlg::OnButtonSend() 
{
	// TODO: Add your control notification handler code here
	KillTimer(1);///////////////////////////////////////////
	if(GetDlgItemText(IDC_BUTTON_START,str),str=="开始") {
		MessageBox("请按下开始按钮");
		SetTimer(1,100,NULL);
		return;
	}
	CByteArray hexdata;
	CString m1,m2,m3,m4,m5,m6;

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

	CString str0;
	GetDlgItemText(IDC_EDIT_SEND,str0);
	startch = String2int(str0[0], str0[1]);//m_Start_char;//m_Start_char;
	GetDlgItemText(IDC_EDIT_SEND2,str0);
	if(str0.GetLength() == 0 || str0.GetLength() < 2 || str0.GetLength() >= 3) {//判断从机地址是否输入
		MessageBox("请输入从机地址!");
		SetTimer(1,100,NULL);
		return;
	}
	slaveadd = String2int(str0[0], str0[1]);//m_Slave_add;//m_Slave_add;
	GetDlgItemText(IDC_EDIT_SEND3,str0);
	if(str0.GetLength() == 0 || str0.GetLength() < 2 || str0.GetLength() >= 3) {//判断指令是否输入
		MessageBox("请输入操作指令!");
		SetTimer(1,100,NULL);
		return;
	}
	command = String2int(str0[0], str0[1]);//String2int(str0[2], str0[3]);
	command &= 0x7f;//最高位取0
	m1.Format("%02X", startch);
	m2.Format("%02X", slaveadd);
	m3.Format("%02X", command);

	GetDlgItemText(IDC_EDIT_SEND4,str0);
	if(str0.GetLength() == 0 || str0.GetLength() < 2 || str0.GetLength() >= 3) {//判断数据高字节是否输入
		MessageBox("请输入数据高字节!");
		SetTimer(1,100,NULL);
		return;
	}
	hdata = String2int(str0[0], str0[1]);
	GetDlgItemText(IDC_EDIT_SEND5,str0);
	if(str0.GetLength() == 0 || str0.GetLength() < 2 || str0.GetLength() >= 3) {//判断数据低字节是否输入
		MessageBox("请输入数据低字节!");
		SetTimer(1,100,NULL);
		return;
	}
	ldata = String2int(str0[0], str0[1]);
	if(command == 0x04) {//如果发送的修改从机地址的命令,则在ini文件中重新写入新的地址
		//在slaveadd.ini中修改从机地址
		CFile file_slaveadd("slaveadd.ini",CFile::modeCreate|CFile::modeWrite);
		GetDlgItemText(IDC_EDIT_SEND5,str0);
		file_slaveadd.Write("0x" + str0, strlen(str0) + 2);
		file_slaveadd.Close(); 

		//从startch.ini中修改开始字节数据
		//CFile file_startch("startch.ini",CFile::modeCreate|CFile::modeWrite);//"0xff"
		//GetDlgItemText(IDC_EDIT_SEND,str0);
		//file_startch.Write("0x" + str0, strlen(str0) + 2);
		//file_startch.Close(); 
	}
	m4.Format("%02X", hdata);
	m5.Format("%02X", ldata);
	check = slaveadd ^ command ^ hdata ^ ldata;
	check &= 0x7f;
	m_check = check;
	UpdateData(false);
	m6.Format("%02X", check);
	int len=String2Hex(m1+m2+m3+m4+m5+m6,hexdata);
	extern CString flag;
	flag = "OnButtonSend";
	m_com.SetOutput(COleVariant(hexdata)); //发送查询数
	SetTimer(1,100,NULL);
}

void COxcygenTestDlg::OnButtonSet() 
{
	// TODO: Add your control notification handler code here
	CPortSet com;
	com.DoModal();
}

void COxcygenTestDlg::OnButtonAdd() 
{
	// 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 = 0x0b;
	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);
}

void COxcygenTestDlg::OnButtonDec() 
{
	// 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 = 0x0c;
	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);
}

void COxcygenTestDlg::OnButtonFunc() 
{
	// 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 = 0x08;
	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);
}

void COxcygenTestDlg::OnButtonOk() 
{
	// 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 = 0x09;
	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);
}

void COxcygenTestDlg::OnButtonQuit() 
{
	// TODO: Add your control notification handler code here
	CDialog::OnOK();
}

void COxcygenTestDlg::OnButtonInfo() 
{
	// TODO: Add your control notification handler code here
	
	CSlaveInfo info;

⌨️ 快捷键说明

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