描述:
我在使用MSComm类进行串口编程的时候,编译通过。使用“串口调试助手v2.1”发送数据,但是程序收不到,而且发送数据的时候总会出现“属性只读”的异常!
有谁能告诉我这个“属性只读”的异常是怎么产生的?我应该怎么解决?
请各位大侠指点小弟,特别感谢了!关键代码如下:
大概意思是从串口取得单片机送来的温度值,然后现实在Edit里;并且把Edit中输入的温度域值送往串口的单片机。
BOOL CMy2COMDlg::OnInitDialog()
{
………………
m_wnd_2_COM1.SetPortOpen(3);
m_wnd_2_COM1.SetSettings("1200,n,8,1");//波特率1200,无校验,8个数据位,1个停止位
m_wnd_2_COM1.SetInputMode(1); //1:表示以二进制方式检取数据
m_wnd_2_COM1.SetRThreshold(1); //参数1表示每当串口接收缓冲区中有多于或等于1个字符时将 //引发一个接收数据的OnComm事件
m_wnd_2_COM1.SetInputLen(1); //每接收1个字符就引发onCom事件
if(!m_wnd_2_COM1.GetPortOpen())
m_wnd_2_COM1.SetPortOpen(TRUE); //打开端口
m_wnd_2_COM1.GetInput(); //先预读缓冲区以清除残留数据
m_wnd_2_COM1.SetCTSHolding(TRUE);
m_wnd_2_COM1.SetCDHolding(FALSE);
m_wnd_2_COM1.SetDSRHolding(FALSE);
………………
}
void CMy2COMDlg::OnCommMscomm1()
{
// TODO: Add your control notification handler code here
switch(m_ctrlComm.GetCommEvent())
{
case 1: //comEvSend发送事件
m_ctrlComm.SetOutput(COleVariant("t"));
m_ctrlComm.SetOutput(COleVariant(m_tem_top));
m_ctrlComm.SetOutput(COleVariant("b"));
m_ctrlComm.SetOutput(COleVariant(m_tem_bottom));
break;
case 2: //comEvReseiv接收事件
VARIANT tempR;
int k;
k=m_ctrlComm.GetInputLen();
if(k>0)
{
tempR = m_ctrlComm.GetInput();
m_recent_tem = tempR.bVal; //把接收到的数据经转换格式后赋给编辑框的变量???????
if(m_recent_tem<m_tem_bottom||m_recent_tem>m_tem_top) //发送报警信号
{
m_ctrlComm.SetOutput(COleVariant("a"));
}
CMy2COMDlg::OnChangeRec(); //显示当前温度
}
break;
case 1009: //comEventRxity奇偶校验错误事件
break;
default:
break;
}
}
void CMy2COMDlg::OnSendLimitLine() // 发送预设的温度上下限
{
CMy2COMDlg::OnSetTop();
CMy2COMDlg::OnSetBottom();
m_wnd_2_COM1.SetCommEvent(1);
CMy2COMDlg::OnCommMscomm1();
}