2014-08-28 11 views
0

我想ASCII caracters發送到的VideoJet Excel的170 1 -170 6打印機,通過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上。

所以我認爲我的port.write沒有發送任何信息給打印機......或者我發送的是corrup信息,而我沒有閱讀打印機的響應。

回答

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 2014-08-28 19:24:35

+1

是的,增加了一些閱讀代碼 – esskar 2014-08-28 19:38:44

+1

再次感謝,它的工作完美! – Insecurefarm 2014-08-28 22:37:57