【在VS2013中使用 CSerialport类发送接收数据的问题】

大树学长 2015-07-27 03:23:54
用CSerialPort类时遇到下位机发送命令后上位机接收不到,但是用串口精灵可以收到,同样的语句在VC6.0中科院接受到。

比如先连接上机器以后,我用串口工具Portmon查看数据
如果用VS2013中发送,没有发送数据出去也没有接受到数据。
用串口精灵可以正常发送和接受。
用VC6.0同样也可以正常发送和接受数据。
...全文
871 20 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
_绿林 2017-04-21
  • 打赏
  • 举报
回复
楼主解决了吗?
lixinxing66 2016-03-10
  • 打赏
  • 举报
回复
我用SerialPort这个类也是同样的情况,在vc6.0中是好使的,但是在vs2013中只能发数据,但是收不到数据。
lixinxing66 2016-03-10
  • 打赏
  • 举报
回复
会不会是这个串口类的问题,我也是用的SerialPort这个类,但是我有同事用的其他的类在vs2013中是好使的。
helenandyoyo 2016-01-14
  • 打赏
  • 举报
回复
你好,我在vs2010下使用CserialPort发送数据,在另一台pc上使用串口助手接收。除了第一次助手可以接收外,后面发送的数据,助手都接收不到,除非助手点击发送按钮,才能收到。貌似和你问题类似,请问解决没?谢谢!
大树学长 2015-07-28
  • 打赏
  • 举报
回复
难道没有用VS2013使用用CSerialPort类的吗?我重新新建了一个工程专门测试这个,确实是不行的,单独发送命令没用,不知道是2013中那个地方没有设置好。
大树学长 2015-07-28
  • 打赏
  • 举报
回复
刚测试用VS2005也不行,和VS2013一样,能够初始化发送数据,但不能单独发送数据。
大树学长 2015-07-28
  • 打赏
  • 举报
回复
上位机软件。 1、在VC6.0中用SerialPort类,数据的传输完全没有问题。【我代码没有问题】 2、使用串口精灵传输命令没有问题。【我机器没有问题】 3、但是我现在将代码用在VS2013发送数据就完全没有反应。【同样的代码同样的机器用VS2013就有问题】 VS2013中我把数据发送分为2个部分:①初始化串口+②发送数据命令。 如果每次发送格式是:①初始化串口+②发送数据命令【没有问题】 if (m_Commport.InitPort(this, 1, 19200, 'n', 8, 1, EV_RXCHAR | EV_CTS, 1024)) { m_Commport.StartMonitoring();//启动线程 m_Commport.WriteToPort((char )(LPCTSTR)“aaaaaa”); } 如果格式是:②发送数据命令【完全没有反应】 m_Commport.WriteToPort((char)(LPCTSTR)“aaaaaa”); 我使用串口监视功能Portmon on查看过。 我觉得真正的原因应该是VS2013中有什么地方没有设置,但是不知道是那???
呔妖怪来嘛 2015-07-27
  • 打赏
  • 举报
回复
每次初始化就能发出去?自己写一个吧 感觉你用的CSerialPort有问题
大树学长 2015-07-27
  • 打赏
  • 举报
回复
引用 11 楼 hezhe1008 的回复:
初始化在程序中至少要调用一次的
是的,连接机器的时候使用,然后后面我就单独发送命令bbbbb:m_Commport.WriteToPort((char *)(LPCTSTR)“bbbbb”); 但是这样没有接受也没有返回了,但是同样的语句在vc6.0中可以,我用vc6.0写的软件测试也可以,串口精灵也可以,就是在VC2013中单独发送命令时不行,但如果每次都带上初始化就可以发送,
呔妖怪来嘛 2015-07-27
  • 打赏
  • 举报
回复
初始化在程序中至少要调用一次的
大树学长 2015-07-27
  • 打赏
  • 举报
回复
引用 6 楼 hezhe1008 的回复:
带初始化串口的方式?是什么方式?你可以每个函数都调试一下 ,看看有没有函数返回错误的,也可以用示波器抓下波形,按说应该没有问题
头文件中声明:CSerialPort m_Commport; 连接:(初始化) if (m_Commport.InitPort(this, 1, 19200, 'n', 8, 1, EV_RXCHAR | EV_CTS, 1024)) { m_Commport.StartMonitoring();//启动线程 m_Commport.WriteToPort((char *)(LPCTSTR)“aaaaa”); } 这样就可以发生出去数据也有数据接收; 但是在初始化串口以后响应函数在单独发送命令:m_Commport.WriteToPort((char *)(LPCTSTR)“bbbbb”); 这样就发送不出去了,要带上初始化才能发送出去
大树学长 2015-07-27
  • 打赏
  • 举报
回复
引用 7 楼 worldy 的回复:
串口精灵能好使,一般说明的是你代码有问题,或者说,你的代码对操作系统版本的兼容性有问题
代码没有问题,我在VC6.0上用了几年了,别写的软件都是这样写的,只能是VC6.0和VS2013的差别,而且我在VS2013上位机和下位机连接时,初始化串口可以使用。 头文件中声明:CSerialPort m_Commport; 响应函数: if (m_Commport.InitPort(this, 1, 19200, 'n', 8, 1, EV_RXCHAR | EV_CTS, 1024)) { m_Commport.StartMonitoring();//启动线程 m_Commport.WriteToPort((char *)(LPCTSTR)“aaaaa”); } 这样就可以发生出去数据也有数据接收; 但是在初始化串口以后响应函数在单独发送命令:m_Commport.WriteToPort((char *)(LPCTSTR)“bbbbb”); 这样就发送不出去了,要带上初始化才能发送出去
大树学长 2015-07-27
  • 打赏
  • 举报
回复
引用 6 楼 hezhe1008 的回复:
带初始化串口的方式?是什么方式?你可以每个函数都调试一下 ,看看有没有函数返回错误的,也可以用示波器抓下波形,按说应该没有问题
初始化就是调用InitPort函数。每次发生数据就都要初始化串口再条用WriteToPort函数,不能直接调用WriteToPort函数进行数据发送
worldy 2015-07-27
  • 打赏
  • 举报
回复
串口精灵能好使,一般说明的是你代码有问题,或者说,你的代码对操作系统版本的兼容性有问题
呔妖怪来嘛 2015-07-27
  • 打赏
  • 举报
回复
带初始化串口的方式?是什么方式?你可以每个函数都调试一下 ,看看有没有函数返回错误的,也可以用示波器抓下波形,按说应该没有问题
大树学长 2015-07-27
  • 打赏
  • 举报
回复
引用 4 楼 hezhe1008 的回复:
没有返回错误信息?
啥都没有,我用串口监视工具查看,没有发出去也没有接受到返回数据, 但是如果我用带初始化串口的方式发送数据又可以。 直接发送数据又不行
呔妖怪来嘛 2015-07-27
  • 打赏
  • 举报
回复
没有返回错误信息?
大树学长 2015-07-27
  • 打赏
  • 举报
回复
引用 2 楼 hezhe1008 的回复:
项目属性-》常规-》字符集 unicode 改成 多字节字符集
早就改成使用多字节符集,不是这的问题
呔妖怪来嘛 2015-07-27
  • 打赏
  • 举报
回复
项目属性-》常规-》字符集 unicode 改成 多字节字符集
大树学长 2015-07-27
  • 打赏
  • 举报
回复
代码没有问题,因为我一直是这样用的,不过是在VC6.0中。

16,548

社区成员

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

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

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