菜鸟,编了一个接收数据的程序,“9600 n 8 1”,一次接收每帧9个字符,奇怪的是不管波特率是多少每秒接收最多只有64帧,不知道为什么,跪求高手解决!!
解决方案 »
- CTaskWndMgr怎么用?
- 只声明一个CSingleLock变量不lock就能同步??
- 有关图像编程的为题
- 麻烦各位大虾给个思路:关于屏幕划词
- 请问主窗口(Dialog)怎样拦截子窗口(edit)的键盘消息
- 众多个VC的知识点!请求帮助
- 求 Programming Server-Side Applications for Microsoft Windows 2000 配书代码,200分
- 鼠标点击问题
- debug下出现exited with code -1073741819 (0xC0000005). 新手求指导
- 窗口位置问题
- 用MFC编写实时监控车辆的软件好么?
- MFC对话框中怎么样把文件夹或者压缩包拖进编辑框
64*9 = 636ms
void SetInBufferSize(short nNewValue);
short GetInBufferSize();
默认是512个
《 64*9
if(m_ctrlComm.GetPortOpen())
m_ctrlComm.SetPortOpen(FALSE);
m_ctrlComm.SetCommPort(1); //选择com1
m_ctrlComm.SetInputMode(1);//设置数据接收方式:1以二进制形式读取数据
m_ctrlComm.GetInputLen();
m_ctrlComm.SetSettings("38400,n,8,1"); //波特率9600,无校验,8个数据位,1个停止位
m_ctrlComm.SetInBufferSize(1024); //设置输入缓冲区大小
m_ctrlComm.SetOutBufferSize(512); //设置输出缓冲区大小
if( !m_ctrlComm.GetPortOpen())
m_ctrlComm.SetPortOpen(TRUE);//打开串口
else
AfxMessageBox("cannot open serial port"); m_ctrlComm.SetRThreshold(9);//参数9表示每当串口接收缓冲区中有多于或等于9个字符时将引发一个接收数据的OnComm事件
m_ctrlComm.SetInputLen(9);//当前接收区数据长度
m_ctrlComm.GetInput();//先预读缓冲区以清除残留数据
m_ctrlComm.SetInputMode(1);//设置数据接收方式:1以二进制形式读取数据
m_ctrlComm.GetInputLen();
m_ctrlComm.SetSettings("38400,n,8,1"); //波特率9600,无校验,8个数据位,1个停止位
m_ctrlComm.SetInBufferSize(1024); //设置输入缓冲区大小
m_ctrlComm.SetOutBufferSize(512); //设置输出缓冲区大小
if( !m_ctrlComm.GetPortOpen())
m_ctrlComm.SetPortOpen(TRUE);//打开串口
else
AfxMessageBox("cannot open serial port"); m_ctrlComm.SetRThreshold(9);//参数9表示每当串口接收缓冲区中有多于或等于9个字符时将引发一个接收数据的OnComm事件
m_ctrlComm.SetInputLen(9);//当前接收区数据长度
m_ctrlComm.GetInput();//先预读缓冲区以清除残留数据
m_ctrlComm.SetSettings("9600,n,8,1"); //波特率9600,无校验,8个数据位,1个停止位
m_ctrlComm.SetInBufferSize(1024); //设置输入缓冲区大小
m_ctrlComm.SetInputLen(9);
每次读入9个字符 一帧的个数
if(m_ctrlComm.GetCommEvent()==2) //事件值为2表示接收缓冲区内有字符
{
long len,k;
COleVariant myVar;
COleSafeArray safearray_inp;
BYTE rxdata[9]; //设置BYTE数组
union data
{
char redata[4];
float f_data;
};
union data y;
float fdata;
CString strtemp;
myVar.Attach(m_ctrlComm.GetInput());
safearray_inp = myVar; //COleVariant型变量转换为ColeSafeArray型变量
len=safearray_inp.GetOneDimSize(); //验证得到有效数据长度
for(k=0;k<len;k++)
safearray_inp.GetElement(&k,rxdata+k); //转换为BYTE型数组 y.redata[0]=rxdata[4];
y.redata[1]=rxdata[5];
y.redata[2]=rxdata[6];
y.redata[3]=rxdata[7];
fdata=y.f_data;
GetInputLen()看看是不是还有
设置的为9所以len是9,但因为一直在发数据,缓冲区里也一直有数据的
Serial Communications