簡體   English   中英

c#串行端口:接收一些回顯

[英]c# Serial-port: Receiving some echo

我做了一個小程序,女巫可以通過串口發送和接收。 我的問題是,當我發送命令ex:“ netcfg”時,得到以下回顯:

http://i44.tinypic.com/izx92p.png

在空格處,它顯示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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM