如何在 C# 中复制 Tera Term SerialPort 命令?

在 Tera Term 中,我通过 USB 连接到串行设备(启动时选择单选按钮“串行”和正确的端口)。连接后,我仅将默认速度更改为 115200(在设置=>串行端口中)。


之后,tera term 要求我填写如下命令:


命令>


我填写设备特定命令。在本例中,它是“PC”,我收到预期的响应,即。“ABC”


现在我正尝试在 C# 中做同样的事情。不幸的是,我得到的响应始终与我实际输入的命令相同。


因此,如果我输入“PC”,则响应是“PC”,但我期望“ABC”。其他命令也有同样的问题。命令 ”?” 回应“?” 而我期待的是“CBA”。


如果我输入错误的命令 => 然后我会收到消息“未知命令”所以我怀疑设备实际上获得了正确的命令。


我正在使用以下代码:


        SerialPort COMport = new SerialPort(Port_Name, Baud_Rate); //Create a new  SerialPort Object (defaullt setting -> 8N1)

        COMport.DataReceived += new SerialDataReceivedEventHandler(sPort_dataReceived);

        COMport.ErrorReceived += new SerialErrorReceivedEventHandler(sPort_ErrorReceived);



        COMport.BaudRate = 115200;

        COMport.Parity = Parity.None;

        COMport.DataBits = 8;

        COMport.StopBits = StopBits.One;

        COMport.RtsEnable = true;

        COMport.Handshake = Handshake.None;



        COMport.Open();



        COMport.WriteLine(Data);


        Thread.Sleep(1000); // Just discovered after a lot of testing that this is necessary to read the response before the Comport closes


        COMport.Close(); 

然后我执行以下操作:


    private void sPort_dataReceived(object sender, SerialDataReceivedEventArgs e)

    {

        SerialPort sp = (SerialPort)sender;

        string indata = sp.ReadExisting();

        Console.WriteLine("Data Received:");

        Console.Write(indata);


        MessageBox.Show(indata);


    }

我尝试过不同的事情,但我无法让它发挥作用。希望这是因为我对此很陌生。我以前从未使用过 Tera term。


智慧大石
浏览 146回答 1
1回答

翻阅古今

新线似乎是一个问题。我需要使用 Comport.Write (而不是 WriteLine)。然后我还需要附加一个回车符“\r”,但没有换行符“\n”,正如我之前所想的那样。(传入的数据在“Command>”之后显示了一个换行符,使得无法发送另一个有意义的命令=>原因是“\n”=>删除它解决了问题)这是我当前似乎有效的代码(我不再需要附加“Command>”,只需按原样发送命令):        if (thecommand == "")        {            ComPort.Write("\r"); //start from a clean slate            return;        }        ComPort.DiscardInBuffer();        ComPort.DiscardOutBuffer();        string Command1 = thecommand + "\r";        ComPort.Write(Command1);
打开App,查看更多内容
随时随地看视频慕课网APP