日期:2014-05-17  浏览次数:21335 次

串口打印发送指令没反应
打开Demo窗体时先初始化SerialPort对象
C# code

private SerialPort _ComPort = new SerialPort();

private void InitializeObject()
{
     InitPortsToList();

      //初始化SerialPort对象
      this._ComPort.NewLine = "\r\n";
      this._ComPort.RtsEnable = true;
      this._ComPort.DataReceived += new SerialDataReceivedEventHandler(ComPort_DataReceived);
}


然后打开串口COM1
C# code

private void btnConnect_Click(object sender, EventArgs e)
{
     //根据当前串口对象,来判断操作
     if (this._ComPort.IsOpen)
     {
          //打开时点击,则关闭串口
          this._ComPort.Close();
     }
     else
     {
          //关闭时点击,则设置好端口,波特率后打开
          this._ComPort.PortName = this.cmbPort.Text;
          this._ComPort.BaudRate = int.Parse(this.cmbBaudrate.Text);
          try
          {
               this._ComPort.Open();
          }
          catch (Exception ex)
          {
               //捕获到异常信息,创建一个新的comm对象,之前的不能用了。
               this._ComPort = new SerialPort();
               this._ComPort.PortName = this.cmbPort.Text; //COM1
               this._ComPort.BaudRate = int.Parse(this.cmbBaudrate.Text); //9600
               this._ComPort.Open();
               //现实异常信息给客户。
               MessageBox.Show(ex.Message);
           }
     }
}


打开COM1之后,就发送要打印的内容和打印机的指令给串口
C# code

 List<byte> buffer = new List<byte>();
 byte[] tmp = { 10 }; //这里的10是厂家说明书里的命令 16进制是0x0A,10进制是10,表示打印并换行

 string content = this.txtContent.Text.Trim(); //这里是打印的内容
 byte[] dataContent = Encoding.Default.GetBytes(content);
 buffer.AddRange(dataContent);
 buffer.AddRange(tmp);
 byte[] data = buffer.ToArray();

 this._ComPort.Write(data, 0, data.Length);
 this._ComPort.Close();



最后write之后,打印机没有反应,我没接触过串口编程,不知道到底问题在哪里,请哪位朋友有碰到过类似问题的解答一下,打印机是热敏打印机


------解决方案--------------------
串口参数都设置对了吗
------解决方案--------------------
使用串口调试助手,发送命令查看打印机是否能够正确收到命令工作;
使用串口调试助手,发送命令后查看命令是否正确发送
------解决方案--------------------
看看要不要驱动,装好没有
------解决方案--------------------
我刚做了一个16进制的打印机发送打印内容的时候要发送16进制内容 
每个16进制数据前面加上0x以字节组形式发送