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

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日

悬赏问题

  • ¥15 vs2022无法联网
  • ¥15 TCP的客户端和服务器的互联
  • ¥15 VB.NET操作免驱摄像头
  • ¥15 笔记本上移动热点开关状态查询
  • ¥85 类鸟群Boids——仿真鸟群避障的相关问题
  • ¥15 CFEDEM自带算例错误,如何解决?
  • ¥15 有没有会使用flac3d软件的家人
  • ¥20 360摄像头无法解绑使用,请教解绑当前账号绑定问题,
  • ¥15 docker实践项目
  • ¥15 利用pthon计算薄膜结构的光导纳