在不关闭连接的情况下更改C#中的波特率

在不关闭连接的情况下更改C#中的波特率,c#,serial-port,baud-rate,C#,Serial Port,Baud Rate,我有一个与以下链接类似的问题。但我使用C#而不是java。我从波特率300开始。然后在握手之后,我必须将波特率更改为4800。我向设备发送命令以执行此操作。我改变串口的波特率。此后,我再也无法继续与设备通信。(如果我保持在300波特并向设备发送300波特的命令,我可以继续通信) 我有一个第三方软件,也可以从这个设备读取数据。当软件运行时,我正在监听端口。它发送的命令与我发送到设备的命令相同。它向设备发送设置4800波特的命令,并可从设备获得答案。在波特率更改期间,它不会关闭或重新打开端口。我必须

我有一个与以下链接类似的问题。但我使用C#而不是java。我从波特率300开始。然后在握手之后,我必须将波特率更改为4800。我向设备发送命令以执行此操作。我改变串口的波特率。此后,我再也无法继续与设备通信。(如果我保持在300波特并向设备发送300波特的命令,我可以继续通信)

我有一个第三方软件,也可以从这个设备读取数据。当软件运行时,我正在监听端口。它发送的命令与我发送到设备的命令相同。它向设备发送设置4800波特的命令,并可从设备获得答案。在波特率更改期间,它不会关闭或重新打开端口。我必须做同样的事情。但当我发送命令更改为4800波特时,我从未从设备得到任何答复

我在等你的回答。 非常感谢。 费达

这是串口监控程序的输出 由进程“ReadY.vshost.exe”(PID:2608)打开的端口

01 42 30 03 71.B0.q

回答:09.08.2011 10:55:40.81864(+0.2656秒)

06

请求:09.08.2011 10:55:41.06864(+1.2500秒)

2F 3F 31 39 39 30 34 21 0D 0A/?11999004

回答:09.08.2011 10:55:41.58464(+0.5156秒)

2F 53 54 52 34 5F 42 53 4D 31 33 0D 0A/STR4_BSM131

请求:09.08.2011 10:55:42.31864(+0.2969秒)


06 30 34 31 0D 0A.041..

根据我的经验,波特率开关需要关闭并重新打开串行端口硬件:我建议尝试一下。发送波特率开关命令,然后关闭端口,设置波特率,然后重新打开端口。打开/关闭端口对另一侧的设备应该是透明的(除非您使用的是CTS/RTS/DTR/DSR线路)。

要更改设备的波特率,请执行以下步骤。以1200的波特率开始通信

  • 发送数据命令,将波特率更改为1200
  • 从设备接收确认信息
  • 如果确认正确,则设置端口波特率=1200
  • 接下来,您要将波特率更改为4800,然后执行以下步骤

  • 发送数据命令,将波特率更改为4800
  • 从设备接收确认信息
  • 如果确认正确,则设置端口波特率=4800

  • 注意:从控制器设备接收ACK后更改端口波特率。通信将以先前设置的波特率开始。

    如果您向我们展示您试图发送的命令,将更容易提供帮助。使用数据包跟踪器并查看差异?您是否尝试使用
    串行端口。丢弃缓冲
    ?请发布一些您正在使用的代码。我正在使用串口监控程序查找差异。我将添加命令…谢谢Writer.Write(amessage)//这是发送给设备的ACK消息,告知将波特率设置为4800,其他软件也会发送此writer.Flush();serialPort.Close();如果(serialPort!=null)serialPort.BaudRate=4800;系统线程线程睡眠(3000);serialPort.Open();如果(serialPort!=null)serialPort.BaudRate=4800;reader=新的StreamReader((serialPort).BaseStream);writer=newstreamwriter((serialPort).BaseStream);嗨,费米,我试着关闭设置波特率,然后重新打开。初始波特率为300波特。如果我发送300波特的开关命令(当它已经是300波特时),我可以从设备得到答案。但是当我发送命令切换到4800时,我不能。你好,费米,你有别的办法解决我的问题吗。非常感谢。