【求助】关于2个串口读取的问题,谢谢大家

didilc 2012-04-01 04:51:19
1.计算机中COM1已经读取到一个设备的串口数据,方法用得是设备提供的开发包读取的。因为要实时读取数据,所以用一个多媒体定时器,在ShowMessage()中处理,已经实现该功能。

2.还要读读取另外一个串口设备,设备占用COM2端口,原来用的第三方类实现(SerialPort类),在添加到程序中,发现该类的处理数据部分是这样定义的:
.h中定义
afx_msg void OnReceiveChar(UINT ch, LONG port); /////
.cpp定义
BEGIN_MESSAGE_MAP(CCOMCOMDlg, CDialog)
//{{AFX_MSG_MAP(CCOMCOMDlg)
ON_MESSAGE(WM_COMM_RXCHAR,OnReceiveChar)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()


CString CCOMCOMDlg::DevideHexChar(char HexChar)
{
CString result=_T("");
int temp=(HexChar&0xF0)>>4;
if(temp<10)
result+=(temp+'0');
else
result+=(temp+'A'-10);
temp=HexChar&0x0F;
if(temp<10)
result+=(temp+'0');
else
result+=(temp+'A'-10);
return result;
}


void CCOMCOMDlg::OnReceiveChar(UINT ch, LONG port) //读取串口数据
{
UpdateData(true);
m_strReceive=DevideHexChar(ch); //m_strReceive是读到的串口数据。
}

3.目前程序中纯在一个多媒体定时器和实时读串口的函数。两个同时用出现了错误。原来只单独用读取串口的(SerialPort类)工作正常。

最终的想法想把读串口的数据加入到ShowMessage()(多媒体定时器中),就可以同时读两个串口设备了,该如何更改呢?谢谢大家了
...全文
256 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
hdg3707 2012-04-02
  • 打赏
  • 举报
回复
看你说的,应该是查询方式读取数据,这样就更不可能冲突了,你读完一个串口的数据,再读取第二个串口的数据,本来就是顺序读取的.3个以上的串口也一样不会冲突.只要你别用错串口的句柄就行了,别把串口1的句柄用在串口2就行了
hdg3707 2012-04-02
  • 打赏
  • 举报
回复
OnReceiveChar(UINT ch, LONG port) //读取串口数据
你这个函数并没用到参数port,看读取函数,也没有串口的读操作,你的参数ch是哪来的.出错的原因应该不是同时读取串口的事.
"同时"读串口,其实也是按顺序读的,只有一个读完后才能读下一个.而且是读不同的串口,不会冲突,除非你用一个串口句柄才会出错,也就是串口1用一个句柄,串口2用另一个句柄,根据串口句柄来决定操作哪个串口.
因为每个串口的句柄不同,所以你可以把第二个串口加到多媒体定时器里读出,这没问题
vcf_reader 2012-04-02
  • 打赏
  • 举报
回复
读串口,不要用定时器,用事件触发才合适
夏末向日葵 2012-04-01
  • 打赏
  • 举报
回复
帮楼主顶下,我马上也要做个有3个串口的通信

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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