CSerialPort类 串口号的限制

j_enjoy 2011-10-25 03:21:11
请教各位大虾一个问题!
CSerialPort类的源文件中有这么一段
BOOL CSerialPort::InitPort(CWnd* pPortOwner, // the owner (CWnd) of the port (receives message)
UINT portnr, // portnumber (1..4)
UINT baud, // baudrate
char parity, // parity
UINT databits, // databits
UINT stopbits, // stopbits
DWORD dwCommEvents, // EV_RXCHAR, EV_CTS etc
UINT writebuffersize) // size to the writebuffer
{
assert(portnr > 0 && portnr < 200);
assert(pPortOwner != NULL);
.........................................
}
assert(portnr > 0 && portnr < 200);这条语句是对串口号做了限制吗?
我的电脑获取到实际的串口号是21,
我的程序: if(m_serialport.InitPort(this,21,9600,'N',8,1,EV_RXFLAG|EV_RXCHAR,512))

{
m_serialport.StartMonitoring();
m_bComm[0]=TRUE;
AfxMessageBox("SUC");
}
else
{
AfxMessageBox("没有发现此串口或被占用!");
m_bComm[0]=FALSE;
}
当我打开21号串口的时候会出错,提示串口号不存在或被占用。即使我屏蔽了以上assert语句,结果还是一样的,请问应该怎么处理呀??
我在程序中需要同时打开10个串口,分别监控10台仪表的串口数据。头疼!
...全文
435 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
bclshuai 2013-06-05
  • 打赏
  • 举报
回复
在串口选择的控件上点击右键,属性,内容,看到有com1com2com3com4,按ctrl和enter换行,在后面添加,比如说你要添加到12,com5……com12,就可以显示12个!
bclshuai 2012-12-05
  • 打赏
  • 举报
回复
各位大侠,我用的是龚建伟编的V2.2,但是是最多只能识别4个串口,而我要用到10个串口,怎么修改源代码啊?我已经修改了// assert(portnr > 0 && portnr < 21); 也加上了上面的 // prepare port strings if(portnr<10) { sprintf(szPort, "COM%d", portnr); } else { sprintf(szPort, "\\\\.\\COM%d", portnr); } 还是没有用,只能显示四个,各位大侠帮帮忙!
skywind123 2012-09-18
  • 打赏
  • 举报
回复
// prepare port strings
if(portnr<10)
{
sprintf(szPort, "COM%d", portnr);
}
else
{
sprintf(szPort, "\\\\.\\COM%d", portnr);
}
确实是可以的。
lanbucom 2012-05-17
  • 打赏
  • 举报
回复
感谢。试了一下,行的。
liwei__1987 2012-05-04
  • 打赏
  • 举报
回复
// prepare port strings
if(portnr<10)
{
sprintf(szPort, "COM%d", portnr);
}
else
{
sprintf(szPort, "\\\\.\\COM%d", portnr);
}
这样可以,我试过了的!
litong860105 2012-02-03
  • 打赏
  • 举报
回复
我也出现了同样的问题。我按照上面提示做了这个判断:
// prepare port strings
if(portnr<10)
{
sprintf(szPort, "COM%d", portnr);
}
else
{
sprintf(szPort, "\\\.\\COM%d", portnr);
}
但是好像还不行哦。还是提示串口号不存在或被占用。
arabicsara 2011-10-26
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 cynixway 的回复:]

串口号大于10的话,CreateFile的时候字符串都应该是"\\\.\\com100",而不能是简单的"com1",不知道CSerial类里面做了转换没,时间太长忘记了。不过之前我遇到了这个问题。你试试如果超过10比如说11可以用就不是这个问题,那就可能是串口不存在,被占用等情况。
[/Quote]支持
用户 昵称 2011-10-26
  • 打赏
  • 举报
回复
你找找CreateFile的语句。
诶呦 2011-10-26
  • 打赏
  • 举报
回复
1.assert(portnr > 0 && portnr < 5);//调整至大于你的串口号
2.sprintf(szPort, "COM%d", portnr);//看看这句你有没有,单步调一下看到这里是不是21
3.在单步调2的时候看看串口返回的句柄值是否有效
j_enjoy 2011-10-26
  • 打赏
  • 举报
回复
试过了,COM号在10以内都可以,超过10就出错!
关键是怎么处理呀??
iCan.club 2011-10-25
  • 打赏
  • 举报
回复
串口号大于10的话,CreateFile的时候字符串都应该是"\\\.\\com100",而不能是简单的"com1",不知道CSerial类里面做了转换没,时间太长忘记了。不过之前我遇到了这个问题。你试试如果超过10比如说11可以用就不是这个问题,那就可能是串口不存在,被占用等情况。
串口工具集成目前多数串口工具的优秀功能于一身,采用CSerialPort进行编写,并在此基础上对该进行了改进。本工具免费试用,永不过期。并且本着奉献的精神,公开本串口工具的源代码,希望广大用户反馈意见或建议。 源码地址:code.csdn.net/itas109/serialport_itas109 博客地址:blog.csdn.net/itas109 Email:itas109@qq.com 本软件主要在XP系统做测试使用。 本工具的主要功能有: 1.接收从串口进来的数据并在窗口显示. 2.所接收到的数据数据显示方式可以选择为字符方式或者HEX方式 3.支持显示中文 4.串口波特率可以选择为300bps-115200bps. 5.可以即时刷新存在的串口.如果您增加了usb转串口等设备,点击刷新串口按钮后,新的串口也会在列表中出现. 6.支持最多20个串口列表,包括COM1-COM256中的任意20个活跃串口 7.可以选择“5、6、7、8”四种数据长度. 8.可以选择为“1、2”两种停止位. 9.数据可以选择为“无、奇校验、偶校验、1、0”四种方式. 10.串口设置和字符串操作等设置在程序关闭时自动保存,打开时自动载入.您可以自行设置是否自动保存. 11.可以在字符串输入框输入您想发送的字符串,并发送. 12.可以在字符串输入框输入您想发送的HEX数据串,数据的值从00到FF,没有任何限制. 13.可以定时重复发送数据,并可以设置发送时间间隔. 14.可以在发送字符串时选择发送新行,即自动加上回车换行. 15.可以即时显示发送的字节数和接收到的字节数,按清除窗口将会清零. 16、可以设置自动清空功能,在达到30行数据时,自动清空。未设置时,达到100行,自动清空. 17、在手动发送旁边的按钮可以设置按ENTER发送数据,注意点击“打开串口”后,请使焦点离开该控件. 另外要说明的是,由于本人编程能力有效,未免可能有些差错,在此先声明一下,您可以免费使用和自由传播本软件,但是我不对本软件所造成的任何损失负责!如果你使用了本软件,即表明您愿意接收这一条款。如果你不能接受,请立即将其删除!

15,471

社区成员

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

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