RS232串口发送数据问题

zdk163com 2010-10-26 11:29:53
本人对VC很初级的认识,而且对多线程多串口通信也很盲目,如果大家有知道这方面好的资料适合初学者,推荐下最好!呵呵。。本人非常感谢!!
下面说现在遇到的问题:

目前的项目中需要两个串口,接两台智能仪器,希望能够实时的发送和接收。但是现在我对一个串口进行发送命令,却不能实时响应,下面是我写的循环。
for(SWave=380;SWave<=Wave;SWave=SWave+5)
{
T=2304000;
z=789586;
c=1639.687;
temp=SWave/(sqrt(c*c-SWave*SWave));
ang=atan(temp);
if(ang<0)
p=T+(0.5*T*ang)/3.14+z;
else
p=(0.5*T*ang)/3.14+z;

step=(int)(p);//以上都是些参数计算
dlg.yiwei(step);//调用发送给仪器命令的函数
Sleep(1000);
}
下面就是那个函数
int CYiWei::yiwei(int step)
{
int len;
CString strSend;
strSend.Format("B%d\r", step);//转换格式
len=strSend.GetLength();//测试长度
char *m_strSendString = new char[len+1];//定义了一个字符型的指针
memset(m_strSendString ,0,sizeof(m_strSendString ));
for(int k=0;k<len;k++)
m_strSendString[k]=strSend.GetAt(k);
m_ComPort3.WriteToPort(m_strSendString);
Sleep(1000);
return(0);

}

循环和函数不在同一个类中。这是我后来改的,如果直接把函数写到调用的地方,还是会出现下面我说的情况。
这样写的目的是想让SWave每加一次5就去调用那个函数,让仪器有响应。单步运行函数到 m_ComPort3.WriteToPort(m_strSendString);仪器是没响应的,可是现在全速运行的时候(SWave初始值)仪器反映一下,后来就要等个不到一分钟的样子才有反应,而且好像是连续变化,不是按照循环加5的方式。这是怎么回事呢?怎么让才能达到我想要的目标呢?大侠们帮忙分析下!

最后还有个问题,每次响应结束会跳出一个要么调试要么关闭的东西,点调试会出现某内存不能“written”也弄不清楚是怎么回事


总共这三个问题,嘿嘿,有点多!还请耐心的高手能够一一指教!本人拜谢了!!!!!
...全文
437 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
zdk163com 2010-10-27
  • 打赏
  • 举报
回复
首先谢谢你回我的贴!
我的字符串的长度不会大于 10,最多就到8这样子。现在我想让循环中每+5执行结束后有个停顿,加了延时可是不起作用。不知道该怎么办?[Quote=引用 2 楼 wheatfield 的回复:]
memset(m_strSendString ,0,sizeof(m_strSendString ));
//sizeof(m_strSendString ) == 4; 这里你是碰巧使得m_strSendString的长度会>=4; 但如果step>=10你的字符串的结束符就没了

m_ComPort3.WriteToPort(m_strSendString);
//你的串口发送函数没有……
[/Quote]
WheatField 2010-10-26
  • 打赏
  • 举报
回复
memset(m_strSendString ,0,sizeof(m_strSendString ));
//sizeof(m_strSendString ) == 4; 这里你是碰巧使得m_strSendString的长度会>=4; 但如果step>=10你的字符串的结束符就没了

m_ComPort3.WriteToPort(m_strSendString);
//你的串口发送函数没有指定发送长度,估计就要靠m_strSendString的结束标记符来判断了。所以发送数据出错很可能

modyaj 2010-10-26
  • 打赏
  • 举报
回复
顶上去 别人来回答啦

2,640

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 硬件/系统
社区管理员
  • 硬件/系统社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧