c# – 同一台Windows机器上的串行端口通信无法正常工作

c# – 同一台Windows机器上的串行端口通信无法正常工作,第1张

概述对不起,快问: 我有这个硬件设置: Same machine: “Com3” -> USB -> To Serial -> To USB -> “Com4” 我按照MSDN SerialPort Class和MSDN SerialPort.ReadLine()来构建这个例程: SerialPort SendSerialPort = new SerialPort("Com3", 9600);Ser 对不起,快问:

我有这个硬件设置:

Same machine: “Com3” -> USB -> To Serial -> To USB -> “Com4”

我按照MSDN SerialPort Class和MSDN SerialPort.ReadLine()来构建这个例程:

SerialPort SendSerialPort = new SerialPort("Com3",9600);SerialPort ReceiveSerialPort = new SerialPort("Com4",9600);SendSerialPort.open();ReceiveSerialPort.open();SendSerialPort.Writeline("Test");var message = ReceiveSerialPort.Readline(); // control stops hereSendSerialPort.Close();ReceiveSerialPort.Close();Console.Writeline(message);

但是,当我倾向于Readline()时,我的控件会停止并等待.我没想到的是.

我期待收到字符串Test并将其分配给我的var消息.你能告诉我这里我做错了什么吗?

编辑:

我使用Serial Port Utility Application和it worked just fine测试了我的硬件.

解决方法 我改变了 from the example you linked:

要实际让两个端口都运行来回读写,你实际上需要为两者实现读写的线程.

使用计时器是个好主意.

public static voID Main(){    SerialPort SendSerialPort = new SerialPort("Com3",9600);    SerialPort ReceiveSerialPort = new SerialPort("Com4",9600);    StringComparer stringComparer = StringComparer.OrdinalignoreCase;    Thread readThread = new Thread(Read);    // Set the read/write timeouts    _serialPort.ReadTimeout = 500;    _serialPort.WriteTimeout = 500;    SendSerialPort.open();    ReceiveSerialPort.open();    bool _continue = true;    readThread.Start();    Console.Write("name: ");    name = Console.Readline();    Console.Writeline("Type QUIT to exit");    while (_continue)    {        message = Console.Readline();        if (stringComparer.Equals("quit",message))            _continue = false;        else            SendSerialPort.Writeline(String.Format("<{0}>: {1}",name,message));    }    readThread.Join();    SendSerialPort.Close();}public static voID Read(){    while (_continue)    {        try        {            string message = ReceiveSerialPort.Readline();            Console.Writeline(message);        }        catch (TimeoutException) { }    }}

通常,在写入的数据中会有一个开始和结束值,告诉另一个端口消息已完成,并且端口也要验证它们是否正在读取它们应该读取的数据,通常使用有关该数据的命令. (超出此问题的范围).

缺乏和重要的是您的端口的初始化.

我更喜欢使用默认构造函数(仅限首选项)

SerialPort Constructor ()

然后设置任何值,如下所示:

_serialPort.Baudrate = SetPortBaudrate(_serialPort.Baudrate);_serialPort.Parity = SetPortParity(_serialPort.Parity);_serialPort.DataBits = SetPortDataBits(_serialPort.DataBits);_serialPort.StopBits = SetPortStopBits(_serialPort.StopBits);_serialPort.Handshake = SetPortHandshake(_serialPort.Handshake);

所有构造函数都将给出以下值:

07001 For example,the DataBits property defaults to 8,the Parity property defaults to the None enumeration value,the StopBits property defaults to 1,and a default port name of COM1.

即使握手也有默认值.如果你look at the source code.

private const Handshake defaultHandshake = Handshake.None;
总结

以上是内存溢出为你收集整理的c# – 同一台Windows机器上的串行端口通信无法正常工作全部内容,希望文章能够帮你解决c# – 同一台Windows机器上的串行端口通信无法正常工作所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1261970.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存