每天进步一点点_小白白 2022-09-07 20:32 采纳率: 75%
浏览 87
已结题

c#串口通信,DataReceive事件不能触发。

使用串口调试工具Hterm调试,通信没有问题。确认波特率,数据位,port,校验位,停止位都没有问题。看网上设置特别属性设置
comPort.RtsEnable = true
comPort.DtrEnable=true
comport.ReceivedBytesThreshold = 1;
但是还不是有回传。
但发现一个现象,如果用串口工具连接发送一次数据后。使用程序连接,报错,port口被占用,不退程序,然后断掉串口工具连接,回到我写的程序连接,第一次下指令,可以触发一次DataRecieve事件,第二次下指令就不可以了。然后程序断开连接,再次连接,下指令均不可触发DataRecieve事件。好郁闷,求赐教。是哪里出了问题?

vs c# 在加载wpf主界面时注册个DataRecieve事件,定义了该serialport为静态变量。

  • 写回答

2条回答 默认 最新

  • wanghui0380 2022-09-08 08:50
    关注

    从描述上看可能有4个地方
    1.ReceivedBytesThreshold
    https://docs.microsoft.com/zh-cn/dotnet/api/system.io.ports.serialport.receivedbytesthreshold?view=dotnet-plat-ext-6.0
    这个属性管控触发字节数量,默认是1,假设你设置的比较大,那么接收不够数量的情况他会缓存下来,并不会触发

    2.你代码发送的指令有误,大多数硬件并不会无端发送数据。他得接收正确指令后才会处理,有些硬件如果收到错误指令会返回错误指令,但更多的硬件是直接忽略错误指令根本不返回任何数据

    3.握手Handshake
    https://docs.microsoft.com/zh-cn/dotnet/api/system.io.ports.serialport.handshake?view=dotnet-plat-ext-6.0
    目前大多数硬件已经不再实现握手标准了,但是不排除少量硬件依然延用以前的握手标准
    4就是波特率这类设置,如果设置不对。你发送数据,对方认为无效,也会不理会你

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 9月9日
  • 已采纳回答 9月9日
  • 修改了问题 9月7日
  • 创建了问题 9月7日

悬赏问题

  • ¥30 酬劳2w元求合作写文章
  • ¥15 在现有系统基础上增加功能
  • ¥15 远程桌面文档内容复制粘贴,格式会变化
  • ¥15 关于#java#的问题:找一份能快速看完mooc视频的代码
  • ¥15 这种微信登录授权 谁可以做啊
  • ¥15 请问我该如何添加自己的数据去运行蚁群算法代码
  • ¥20 用HslCommunication 连接欧姆龙 plc有时会连接失败。报异常为“未知错误”
  • ¥15 网络设备配置与管理这个该怎么弄
  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图