2014-08-28 2 views
0

Я пытаюсь отправить ASCII caracters на принтер VideoJet Excel 170i, через кабель RS-232 (последовательный)C# последовательное соединение не работает

Когда я использую тестовую программу, у меня нет проблем с получением ответа из принтера я могу изменить состояние принтера.

Это код, который я сделал

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 caracters на принтер, как

[1B][01][09] 

Чтобы включить принтер в режиме печати.

Принтер должен отвечать, я не получаю ответа, и принтер не изменяет его статус.

У меня есть программа, предназначенная для проверки последовательного подключения, сделанного принтером, и я вижу, что все настройки в порядке (скорость передачи, порт четности ...) и действительно на порт COM1.

Так что я думаю, что мой порт.write не отправляет информацию на принтер ... или, может быть, я отправляю corrup info, и я не читаю ответ принтера.

ответ

2

вы уверены, что вы хотите отправить [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 }); 
+0

Сладкий, он работает, я могу отключить его! Но я получаю [] [] [] [], поэтому, возможно, я пытаюсь, но байт в строку. – Insecurefarm

+1

Да, добавлен код для чтения – esskar

+1

Еще раз спасибо, он отлично работает! – Insecurefarm

Смежные вопросы