📄 portcomdlg.cpp
字号:
if(m_test=="Odd")
m_test="o";
if(m_test=="Mark")
m_test="m";
if(m_test=="Spack")
m_test="s";
qq=m_baud+m_test+m_bit+m_stop;
m_ctrlComm.SetSettings(qq); //设置波特率,无校验,数据位,停止位
m_ctrlComm.SetInputMode(1); //1:表示以二进制方式检取数据
m_ctrlComm.SetRThreshold(1);
//参数1表示每当串口接收缓冲区中有多于或等于1个字符时将引发一个接收数据的OnComm事件
m_ctrlComm.SetInputLen(0); //设置当前接收区数据长度为0
m_ctrlComm.GetInput();//先预读缓冲区以清除残留数据
if(m_ctrlComm1.GetPortOpen())
m_ctrlComm1.SetPortOpen(FALSE);
m_ctrlComm1.SetCommPort(2);
if( !m_ctrlComm1.GetPortOpen())
m_ctrlComm1.SetPortOpen(TRUE);//打开串口
else
AfxMessageBox("cannot open serial port");
CString qq1;
if(m_test1=="None")
m_test1="n";
if(m_test1=="Even")
m_test1="e";
if(m_test1=="Odd")
m_test1="o";
if(m_test1=="Mark")
m_test1="m";
if(m_test1=="Spack")
m_test1="s";
qq1=m_baud1+m_test1+m_bit1+m_stop1;
m_ctrlComm1.SetSettings(qq1); //设置波特率,无校验,数据位,停止位
m_ctrlComm1.SetInputMode(1); //1:表示以二进制方式检取数据
m_ctrlComm1.SetRThreshold(1);
//参数1表示每当串口接收缓冲区中有多于或等于1个字符时将引发一个接收数据的OnComm事件
m_ctrlComm1.SetInputLen(0); //设置当前接收区数据长度为0
m_ctrlComm1.GetInput();//先预读缓冲区以清除残留数据
}
if(m_port=="COM2"&&m_port1=="COM2")
{
if(m_ctrlComm.GetPortOpen())
m_ctrlComm.SetPortOpen(FALSE);
if(m_ctrlComm1.GetPortOpen())
m_ctrlComm1.SetPortOpen(FALSE);
m_ctrlComm1.SetCommPort(2);
if( !m_ctrlComm1.GetPortOpen())
m_ctrlComm1.SetPortOpen(TRUE);//打开串口
else
AfxMessageBox("cannot open serial port");
CString qq1;
if(m_test1=="None")
m_test1="n";
if(m_test1=="Even")
m_test1="e";
if(m_test1=="Odd")
m_test1="o";
if(m_test1=="Mark")
m_test1="m";
if(m_test1=="Spack")
m_test1="s";
qq1=m_baud1+m_test1+m_bit1+m_stop1;
m_ctrlComm1.SetSettings(qq1); //设置波特率,无校验,数据位,停止位
m_ctrlComm1.SetInputMode(1); //1:表示以二进制方式检取数据
m_ctrlComm1.SetRThreshold(1);
//参数1表示每当串口接收缓冲区中有多于或等于1个字符时将引发一个接收数据的OnComm事件
m_ctrlComm1.SetInputLen(0); //设置当前接收区数据长度为0
m_ctrlComm1.GetInput();//先预读缓冲区以清除残留数据
}
}
void CPortcomDlg::OnSelchangeCombo8()
{
// TODO: Add your control notification handler code here
if(m_port=="COM1"&&m_port1=="COM2")
{
if(m_ctrlComm.GetPortOpen())
m_ctrlComm.SetPortOpen(FALSE);
if(m_ctrlComm1.GetPortOpen())
m_ctrlComm1.SetPortOpen(FALSE);
m_ctrlComm.SetCommPort(1); //选择com1
if( !m_ctrlComm.GetPortOpen())
m_ctrlComm.SetPortOpen(TRUE);//打开串口
else
AfxMessageBox("cannot open serial port");
CString qq;
if(m_test=="None")
m_test="n";
if(m_test=="Even")
m_test="e";
if(m_test=="Odd")
m_test="o";
if(m_test=="Mark")
m_test="m";
if(m_test=="Spack")
m_test="s";
qq=m_baud+m_test+m_bit+m_stop;
m_ctrlComm.SetSettings(qq); //设置波特率,无校验,数据位,停止位
m_ctrlComm.SetInputMode(1); //1:表示以二进制方式检取数据
m_ctrlComm.SetRThreshold(1);
//参数1表示每当串口接收缓冲区中有多于或等于1个字符时将引发一个接收数据的OnComm事件
m_ctrlComm.SetInputLen(0); //设置当前接收区数据长度为0
m_ctrlComm.GetInput();//先预读缓冲区以清除残留数据
if(m_ctrlComm1.GetPortOpen())
m_ctrlComm1.SetPortOpen(FALSE);
m_ctrlComm1.SetCommPort(2);
if( !m_ctrlComm1.GetPortOpen())
m_ctrlComm1.SetPortOpen(TRUE);//打开串口
else
AfxMessageBox("cannot open serial port");
CString qq1;
if(m_test1=="None")
m_test1="n";
if(m_test1=="Even")
m_test1="e";
if(m_test1=="Odd")
m_test1="o";
if(m_test1=="Mark")
m_test1="m";
if(m_test1=="Spack")
m_test1="s";
qq1=m_baud1+m_test1+m_bit1+m_stop1;
m_ctrlComm1.SetSettings(qq1); //设置波特率,无校验,数据位,停止位
m_ctrlComm1.SetInputMode(1); //1:表示以二进制方式检取数据
m_ctrlComm1.SetRThreshold(1);
//参数1表示每当串口接收缓冲区中有多于或等于1个字符时将引发一个接收数据的OnComm事件
m_ctrlComm1.SetInputLen(0); //设置当前接收区数据长度为0
m_ctrlComm1.GetInput();//先预读缓冲区以清除残留数据
}
if(m_port=="COM1"&&m_port1=="COM1")
{
if(m_ctrlComm.GetPortOpen())
m_ctrlComm.SetPortOpen(FALSE);
if(m_ctrlComm1.GetPortOpen())
m_ctrlComm1.SetPortOpen(FALSE);
m_ctrlComm.SetCommPort(1); //选择com1
if( !m_ctrlComm.GetPortOpen())
m_ctrlComm.SetPortOpen(TRUE);//打开串口
else
AfxMessageBox("cannot open serial port");
CString qq;
if(m_test=="None")
m_test="n";
if(m_test=="Even")
m_test="e";
if(m_test=="Odd")
m_test="o";
if(m_test=="Mark")
m_test="m";
if(m_test=="Spack")
m_test="s";
qq=m_baud+m_test+m_bit+m_stop;
m_ctrlComm.SetSettings(qq); //设置波特率,无校验,数据位,停止位
m_ctrlComm.SetInputMode(1); //1:表示以二进制方式检取数据
m_ctrlComm.SetRThreshold(1);
//参数1表示每当串口接收缓冲区中有多于或等于1个字符时将引发一个接收数据的OnComm事件
m_ctrlComm.SetInputLen(0); //设置当前接收区数据长度为0
m_ctrlComm.GetInput();//先预读缓冲区以清除残留数据
}
if(m_port=="COM2"&&m_port1=="COM1")
{
if(m_ctrlComm.GetPortOpen())
m_ctrlComm.SetPortOpen(FALSE);
if(m_ctrlComm1.GetPortOpen())
m_ctrlComm1.SetPortOpen(FALSE);
m_ctrlComm.SetCommPort(1); //选择com2
if( !m_ctrlComm.GetPortOpen())
m_ctrlComm.SetPortOpen(TRUE);//打开串口
else
AfxMessageBox("cannot open serial port");
CString qq;
if(m_test=="None")
m_test="n";
if(m_test=="Even")
m_test="e";
if(m_test=="Odd")
m_test="o";
if(m_test=="Mark")
m_test="m";
if(m_test=="Spack")
m_test="s";
qq=m_baud+m_test+m_bit+m_stop;
m_ctrlComm.SetSettings(qq); //设置波特率,无校验,数据位,停止位
m_ctrlComm.SetInputMode(1); //1:表示以二进制方式检取数据
m_ctrlComm.SetRThreshold(1);
//参数1表示每当串口接收缓冲区中有多于或等于1个字符时将引发一个接收数据的OnComm事件
m_ctrlComm.SetInputLen(0); //设置当前接收区数据长度为0
m_ctrlComm.GetInput();//先预读缓冲区以清除残留数据
if(m_ctrlComm1.GetPortOpen())
m_ctrlComm1.SetPortOpen(FALSE);
m_ctrlComm1.SetCommPort(2);
if( !m_ctrlComm1.GetPortOpen())
m_ctrlComm1.SetPortOpen(TRUE);//打开串口
else
AfxMessageBox("cannot open serial port");
CString qq1;
if(m_test1=="None")
m_test1="n";
if(m_test1=="Even")
m_test1="e";
if(m_test1=="Odd")
m_test1="o";
if(m_test1=="Mark")
m_test1="m";
if(m_test1=="Spack")
m_test1="s";
qq1=m_baud1+m_test1+m_bit1+m_stop1;
m_ctrlComm1.SetSettings(qq1); //设置波特率,无校验,数据位,停止位
m_ctrlComm1.SetInputMode(1); //1:表示以二进制方式检取数据
m_ctrlComm1.SetRThreshold(1);
//参数1表示每当串口接收缓冲区中有多于或等于1个字符时将引发一个接收数据的OnComm事件
m_ctrlComm1.SetInputLen(0); //设置当前接收区数据长度为0
m_ctrlComm1.GetInput();//先预读缓冲区以清除残留数据
}
if(m_port=="COM2"&&m_port1=="COM2")
{
if(m_ctrlComm.GetPortOpen())
m_ctrlComm.SetPortOpen(FALSE);
if(m_ctrlComm1.GetPortOpen())
m_ctrlComm1.SetPortOpen(FALSE);
m_ctrlComm1.SetCommPort(2);
if( !m_ctrlComm1.GetPortOpen())
m_ctrlComm1.SetPortOpen(TRUE);//打开串口
else
AfxMessageBox("cannot open serial port");
CString qq1;
if(m_test1=="None")
m_test1="n";
if(m_test1=="Even")
m_test1="e";
if(m_test1=="Odd")
m_test1="o";
if(m_test1=="Mark")
m_test1="m";
if(m_test1=="Spack")
m_test1="s";
qq1=m_baud1+m_test1+m_bit1+m_stop1;
m_ctrlComm1.SetSettings(qq1); //设置波特率,无校验,数据位,停止位
m_ctrlComm1.SetInputMode(1); //1:表示以二进制方式检取数据
m_ctrlComm1.SetRThreshold(1);
//参数1表示每当串口接收缓冲区中有多于或等于1个字符时将引发一个接收数据的OnComm事件
m_ctrlComm1.SetInputLen(0); //设置当前接收区数据长度为0
m_ctrlComm1.GetInput();//先预读缓冲区以清除残留数据
}
}
BEGIN_EVENTSINK_MAP(CPortcomDlg, CDialog)
//{{AFX_EVENTSINK_MAP(CPortcomDlg)
ON_EVENT(CPortcomDlg, IDC_MSCOMM1, 1 /* OnComm */, OnComm, VTS_NONE)
ON_EVENT(CPortcomDlg, IDC_MSCOMM2, 1 /* OnComm */, OnComm1, VTS_NONE)
//}}AFX_EVENTSINK_MAP
END_EVENTSINK_MAP()
void CPortcomDlg::OnComm()
{
// TODO: Add your control notification handler code here
VARIANT variant_inp;
COleSafeArray safearray_inp;
LONG len,k;
BYTE rxdata[2048]; //设置BYTE数组 An 8-bit integerthat is not signed.
CString strtemp;
if(m_ctrlComm.GetCommEvent()==2) //事件值为2表示接收缓冲区内有字符
{
if((m_port=="COM1"&&m_port1=="COM1")||(m_port=="COM2"&&m_port1=="COM1"))
{
variant_inp=m_ctrlComm.GetInput(); //读缓冲区
safearray_inp=variant_inp; //VARIANT型变量转换为ColeSafeArray型变量
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); //字符型
if(m_format1=="16进制方式")
{
strtemp.Format("%02X",bt); //将字符以十六进制方式送入临时变量strtemp存放,
strtemp+="\x00d\x00a"; //这里加入回车换行符
}
if(m_format1=="Ascii 方式")
strtemp.Format("%c",bt); //将字符送入临时变量strtemp存放
m_strRXData+=strtemp; //加入接收编辑框对应字符串
}
}
}
UpdateData(FALSE); //更新编辑框内容
m_ctrlComm.SetInputLen(0); //设置当前接收区数据长度为0
m_ctrlComm.GetInput();//先预读缓冲区以清除残留数据*/
}
void CPortcomDlg::OnComm1()
{
// TODO: Add your control notification handler code here
VARIANT variant_inp1;
COleSafeArray safearray_inp1;
LONG len1,k1;
BYTE rxdata1[2048]; //设置BYTE数组 An 8-bit integerthat is not signed.
CString strtemp1;
if(m_ctrlComm1.GetCommEvent()==2) //事件值为2表示接收缓冲区内有字符
{
if((m_port=="COM2"&&m_port1=="COM2")||(m_port=="COM1"&&m_port1=="COM2"))
{
variant_inp1=m_ctrlComm1.GetInput(); //读缓冲区
safearray_inp1=variant_inp1; //VARIANT型变量转换为ColeSafeArray型变量
len1=safearray_inp1.GetOneDimSize(); //得到有效数据长度
for(k1=0;k1<len1;k1++)
safearray_inp1.GetElement(&k1,rxdata1+k1);//转换为BYTE型数组
for(k1=0;k1<len1;k1++) //将数组转换为Cstring型变量
{
BYTE bt1=*(char*)(rxdata1+k1); //字符型
if(m_format1=="16进制方式")
{
strtemp1.Format("%02X",bt1); //将字符以十六进制方式送入临时变量strtemp存放,
strtemp1+="\x00d\x00a"; //这里加入回车换行符
}
if(m_format1=="Ascii 方式")
strtemp1.Format("%c",bt1); //将字符送入临时变量strtemp存放
m_strRXData+=strtemp1; //加入接收编辑框对应字符串
}
}
}
UpdateData(FALSE); //更新编辑框内容*/
m_ctrlComm1.SetInputLen(0); //设置当前接收区数据长度为0
m_ctrlComm1.GetInput();//先预读缓冲区以清除残留数据
}
void CPortcomDlg::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
if(m_ctrlComm.GetPortOpen()||m_ctrlComm1.GetPortOpen())
{
OnButton();
CDialog::OnTimer(nIDEvent);
}
}
void CPortcomDlg::OnCheckAutosend()
{
// TODO: Add your control notification handler code here
m_bAutoSend=!m_bAutoSend;
}
int CPortcomDlg::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;
}
char CPortcomDlg::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);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -