在程序中,我用的是MSComm控件,其中一个主要属性如下:SetSettings 设置并返回波特率,奇偶校验,数据位长度,停止位长度。如:SetSettings(LPCTSTR String);String是一个包括四部分的字符串:的一部分为波特率;第二部分为奇偶校验,N表示不校验,E表示偶校验,O表示奇校验,S表示空格校验,M表示符号校验; 第三部分为数据长度,其可选值为4,5,6,7,8;第四部分为停止位长度,其可选为1,1.5,2。 Settings属性的缺省值为“9600,N,8,1”。
在程序中,我用的是组件框来显示波特率,校验,数据长度,停止位,但是在运行时却老是提示数据值出错,在我的程序中,nBaudRate是用的 int,nParity用的是CString类型,nByteSize,nStopBits也是用的int类型,问题出在了SetSetting("nBaudRate,nParity,nByteSize,nStopBits"),(因为在程序中波特率,校验,数据长度,停止位要求可以选择),请各位高手指点,在SetSetting()中该任何设置这些参数!!!! 程序中格式如下:
short nComPort=1;
int nBaudRate=9600;
int nByteSize=8;
int nStopBits=1;
CString nParity= "n";
int nIndex,nCount;
CString szText("");
//波特率
nIndex = m_comboBaudRate.GetCurSel();
nCount = m_comboBaudRate.GetCount();
if((nIndex != LB_ERR) && (nCount > 1))
{
m_comboBaudRate.GetLBText(nIndex, szText); if(!szText.IsEmpty())
{
nBaudRate = ::atoi(szText);
}
else
{
nBaudRate = 9600;
}
}
。
if(m_ctrlComm.GetPortOpen())
m_ctrlComm.SetPortOpen(FALSE);
m_ctrlComm.SetCommPort(nComPort);
if( !m_ctrlComm.GetPortOpen())
m_ctrlComm.SetPortOpen(TRUE);
else
AfxMessageBox("cannot open serial port");
m_ctrlComm.SetSettings("nBaudRate,nParity,nByteSize,nStopBits"); *************
m_ctrlComm.SetInputMode(1);
m_ctrlComm.SetRThreshold(1);
m_ctrlComm.SetInputLen(0);
m_ctrlComm.GetInput();
在程序中,我用的是组件框来显示波特率,校验,数据长度,停止位,但是在运行时却老是提示数据值出错,在我的程序中,nBaudRate是用的 int,nParity用的是CString类型,nByteSize,nStopBits也是用的int类型,问题出在了SetSetting("nBaudRate,nParity,nByteSize,nStopBits"),(因为在程序中波特率,校验,数据长度,停止位要求可以选择),请各位高手指点,在SetSetting()中该任何设置这些参数!!!! 程序中格式如下:
short nComPort=1;
int nBaudRate=9600;
int nByteSize=8;
int nStopBits=1;
CString nParity= "n";
int nIndex,nCount;
CString szText("");
//波特率
nIndex = m_comboBaudRate.GetCurSel();
nCount = m_comboBaudRate.GetCount();
if((nIndex != LB_ERR) && (nCount > 1))
{
m_comboBaudRate.GetLBText(nIndex, szText); if(!szText.IsEmpty())
{
nBaudRate = ::atoi(szText);
}
else
{
nBaudRate = 9600;
}
}
。
if(m_ctrlComm.GetPortOpen())
m_ctrlComm.SetPortOpen(FALSE);
m_ctrlComm.SetCommPort(nComPort);
if( !m_ctrlComm.GetPortOpen())
m_ctrlComm.SetPortOpen(TRUE);
else
AfxMessageBox("cannot open serial port");
m_ctrlComm.SetSettings("nBaudRate,nParity,nByteSize,nStopBits"); *************
m_ctrlComm.SetInputMode(1);
m_ctrlComm.SetRThreshold(1);
m_ctrlComm.SetInputLen(0);
m_ctrlComm.GetInput();
解决方案 »
- 添加控件成员变量,退出时为什么会出错
- 窗口创建问题
- 送分(100)串口通信,中断后无法收到信息。
- 请大家帮帮忙!连接网络接收数据时就死机,是什么原因!谢谢!!
- 如何制作控件,
- 客户机使用closesocket关闭连接后,服务器再也收不到客户机的连接请求(在线等)
- 求办下面vb代码转为vc代码!(unicode显示为字符的)
- lanstar200(码雅哥布林)请进来~~
- 随便问问:VC能不能调用Access中的Form,Report
- 大侠们帮帮我吧,两个控制台程序可以相互和接受消息吗???
- 请教:对话框上有一个label(static text),怎么控制它始终在对话框的中心?
- 基于单文档的菜单是从哪里装入的?
我展开你的SetSetting里的东西就是:" "...","...","...","..." "
而实际上要的应该是" ... , ... , ... , ... "我看是不是把nBaudRate,nParity,nByteSize,nStopBits这四个 + 在一起,然后转换为LPCTSTR
直接作为SetSetting的参数你试试
str.Format("%d,%s,%d,%d",nBaudRate,nParity,nByteSize,nStopBits);
SetSetting(str);