[英]c# Serial-port: Receiving some echo
我做了一個小程序,女巫可以通過串口發送和接收。 我的問題是,當我發送命令ex:“ netcfg”時,得到以下回顯:
在空格處,它顯示UTF8代碼08。如果轉換為Java腳本,它將顯示:\\ b但是輸出必須是:netcfg,而不是:n net netc netcf netcfg
所以我想要這樣的輸出:“ sds://> netcfg”,然后換行。
我可以看到該設備可以理解我的命令,但這看起來不太好,所以請幫助我。
我的代碼現在很亂,但是無論如何都在這里:
using System;
using System.Collections.Generic;
using System.IO.Ports;
using System.Text;
using System.Windows.Forms;
namespace WindowsFormsApplication2
{
public partial class Form1 : Form
{
private string _TerminalString;
public Form1()
{
InitializeComponent();
if (!mySerialPort.IsOpen)
{
mySerialPort.Open();
txtTerminal.Text = "The port is now open";
}
else
{
txtTerminal.Text = "The port is in use";
}
}
private void mySerialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
_TerminalString = mySerialPort.ReadExisting();
Invoke(new EventHandler(displayText));
}
private void displayText(object o, EventArgs e)
{
byte[] str2 = Encoding.ASCII.GetBytes(txtSend.Text);
var testList = new List<byte>(str2);
testList.Add(0x0D);
byte[] str3 = testList.ToArray();
mySerialPort.Write(str3, 0, str3.Length);
txtTerminal.AppendText(_TerminalString);
}
private void bSend_Click(object sender, EventArgs e)
{
byte[] str2 = Encoding.ASCII.GetBytes(txtSend.Text);
var testList = new List<byte>(str2);
testList.Add(0x0D);
byte[] str3 = testList.ToArray();
mySerialPort.Write(str3, 0, str3.Length);
}
private void bClear_Click(object sender, EventArgs e)
{
txtTerminal.Clear();
txtSend.Clear();
}
private void Form1_FormClosed(object sender, FormClosedEventArgs e)
{
mySerialPort.Close();
}
private void btnSearchForComPorts_Click(object sender, EventArgs e)
{
string[] ports = SerialPort.GetPortNames();
foreach (string port in ports)
{
cbmComPorts.Items.Add(port);
}
}
private void btnSelectComPort_Click(object sender, EventArgs e)
{
if (mySerialPort.IsOpen)
{
mySerialPort.Close();
}
mySerialPort.PortName = cbmComPorts.Text;
txtTerminal.AppendText(cbmComPorts.Text);
mySerialPort.Open();
}
private void btnNetcfg_Click(object sender, EventArgs e)
{
// netcfg + enter
byte[] str = {0x6E, 0x65, 0x74, 0x63, 0x66, 0x67, 0x0D, 0x0A};
mySerialPort.Write(str, 0, str.Length);
}
}
}
ASCII字符8是一個退格字符。 看來,串行電纜另一端的程序正在嘗試擦除在提示符下輸入的字符,然后再打印進來的東西,並將新字符添加到末尾。
更改您的程序以檢測何時接收到ASCII 8,然后刪除最后一個字符並將光標位置后移一個。 如果通過換行符退格,可能會很棘手...如果您已經在左邊緣,我將忽略它。
您可能還會看到其他內容。 有一個BEL字符(7?)應該引起終端蜂鳴。 還有其他字符可以做其他事情...
如果您開始看到其他奇怪的東西,也有可能該設備希望用戶(您)處理VT100或ANSI終端命令。 如果是這種情況,您可能會看到類似^[12n
的情況(在Windows中將^[
替換為帶有很多字體的小方塊。這是轉義字符。
啊,BBS的美好時光。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.