在 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。
1 回答
翻阅古今
TA贡献1780条经验 获得超5个赞
新线似乎是一个问题。
我需要使用 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);
- 1 回答
- 0 关注
- 145 浏览
添加回答
举报
0/150
提交
取消