【问题标题】:C# serial connection not workingC#串行连接不起作用
【发布时间】:2014-08-28 18:55:29
【问题描述】:

我正在尝试通过 RS-232 电缆(串行)将 ASCII 字符发送到 VideoJet Excel 170i 打印机

当我使用测试程序时,我没有问题得到打印机的响应,我可以改变打印机的状态。

这是我制作的代码

 public partial class Form1 : Form
{
    private SerialPort port = new SerialPort("COM1");
    private delegate void SetTextDeleg(string data);

    public Form1()
    {
        InitializeComponent();
    }

    private void addtoText(string text)
    {
        this.richTextBox1.Text = this.richTextBox1.Text + "\n" + text;
    }
    private void Form1_Load(object sender, EventArgs e)
    {
        try
        {
            port.BaudRate = 9600;
            port.Parity = Parity.None;
            port.StopBits = StopBits.One;
            port.DataBits = 8;
            port.Handshake = Handshake.None;
            port.ReadTimeout = 2000;
            port.WriteTimeout = 500;

            port.DtrEnable = true;
            port.RtsEnable = true;

            port.Open();

            port.DataReceived += DataReceivedHandler;

            addtoText("Port is ready");
        }
        catch (Exception ex)
        {
            //Console.WriteLine("Error opening my port: {0}", ex.Message);
            addtoText("Error opening my port: {0}" + ex.Message);
        }
    }

    public void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
    {
        SerialPort sp = (SerialPort)sender;
        System.Threading.Thread.Sleep(500);
        string indata = sp.ReadExisting();
        this.BeginInvoke(new SetTextDeleg(DisplayToUI), new object[] { indata });
    }

    private void DisplayToUI(string displayData)
    {
        addtoText(displayData);

    }


    private void button1_Click(object sender, EventArgs e)
    {
        port.Write(tbxAscii.Text);
    }

    private void Form1_Leave(object sender, EventArgs e)
    {
        port.Close();
    }
}

我需要将 ASCII 字符发送到打印机,例如

[1B][01][09]

将打印机设置为打印模式。

打印机应该响应,我没有得到响应,并且打印机没有改变它的状态。

我编写了一个程序来测试打印机的串行连接,我可以看到所有设置都正常(波特率、奇偶校验...端口),并且确实在端口 COM1 上。

所以我认为我的 port.write 没有向打印机发送任何信息......或者我正在发送损坏信息并且我没有读取打印机的响应。

【问题讨论】:

    标签: c# io serial-port


    【解决方案1】:

    您确定要发送[1B][01][09] 还是要发送该字节序列0x1b,0x01,0x09

    只是为了看看这是否有效,在你的点击处理程序中发送以下内容

    private void button1_Click(object sender, EventArgs e)
    {
        var bytes = new byte[] { 0x1b, 0x01, 0x09 };
        port.Write(bytes, 0, bytes.Length);
        port.Flush(); // make sure everything is written
    }
    

    读取必须改变,以处理字节

    SerialPort sp = (SerialPort)sender;
    System.Threading.Thread.Sleep(500);
    
    var available = sp.BytesToRead; // check how many bytes are ready to be read
    if (available < 1)
        return;
    
    var buffer = new byte[available];
    sp.Read(buffer, 0, available);
    
    var indata = BitConverter.ToString(buffer); // convert bytes to a hex representation
    
    this.BeginInvoke(new SetTextDeleg(DisplayToUI), new object[] { indata });
    

    【讨论】:

    • Sweet 它工作正常,我可以关闭和打开它!但是我正在接收 [][][][] 所以也许我正在尝试将一个字节转换为字符串。
    • 请问您能实现哪些命令,有源代码吗?
    猜你喜欢
    • 2018-09-03
    • 1970-01-01
    • 2014-02-26
    • 2017-01-24
    • 1970-01-01
    • 2013-02-16
    • 1970-01-01
    • 1970-01-01
    • 2021-12-14
    相关资源
    最近更新 更多