这是串口打印机关于打印字符的说明:整个发送该块的内容,分为两部分。1、命令头信息。2、打印内容。
关于命令头信息格式如下:
1)命令字:(0x1c+0x2e),占2 个字节。
2)该内容总的字节长度,包括换行符,回车符记数在内。占4 个字节。这里统计长度时需注意,汉字是两个字节,而ASCII 是一个字节。
3)该内容中ASCII 字符的放大倍数(0,1,2,3),分别代表1 倍,2 倍,3 倍,4 倍。占4 个字节。
4)该内容中汉字字符的放大倍数(0,1,2,3),分别代表1 倍,2 倍,3 倍,4 倍。占4 个字节。
5)该内容中ASCII 字符类型(0,1,2,3,4),占4 个字节。
部分C 语言代码如下:(仅供参考)#define MAX_LEN_NUM  (1*1024) 
unsigned char buf[MAX_LEN_NUM]; 
DWORD dwLen,dwItemA,dwItemC,dwStyleA; 
buf[0]= 0x1c; // 命令字
buf[1]= 0x2e; 
pstr = (char*)&dwLen; // 总的字节长度buf[2]=pstr[0]; buf[3]=pstr[1]; buf[4]=pstr[2]; buf[5]=pstr[3]; 
pstr = (char*)& dwItemA; //ASCII 字符的放大倍数(0x0,0x 1,0x 2,0x 3)buf[6]=pstr[0]; buf[7]=pstr[1]; buf[8]=pstr[2]; buf[9]=pstr[3]; 
pstr = (char*)& dwItemC; //汉字字符的放大倍数(0x0,0x 1,0x 2,0x 3)buf[10]=pstr[0]; buf[11]=pstr[1]; buf[12]=pstr[2]; buf[13]=pstr[3]; 
pstr = (char*)& dwStyleA; // ASCII 字符类型(0x 0,0x 1,0x 2,0x 3,0x 4)buf[14]=pstr[0]; buf[15]=pstr[1]; buf[16]=pstr[2]; buf[17]=pstr[3]; 
WriteCommData(buf, 18); //发送给打印串口,并等候回复,如果收到0x06,则继续。关于打印内容信息格式如下:(注意包最大为1024 字节)包数据(最大为:MAX_LEN_NUM)+ 等待0x06 +  。直到结束。部分C 语言代码如下:(仅供参考)#define MAX_LEN_NUM (1*1024) DWORD len;while(dwLen>0) //剩下未发的字节长度{ 
len = (dwLen<MAX_LEN_NUM)? dwLen:MAX_LEN_NUM; //最大为:MAX_LEN_NUM Read(buf, len); //从要打印的缓冲区里读打印的数据到buf 中。 WriteCommData(buf, len); //发送给打印串口while(!m_ACK) ; //等待回复0x06。m_ACK=0; dwLen -= len; //减去发送的字节数。
 } 

解决方案 »

  1.   

    串口操作如下所示:
    chuankou.CommPort ss_port = new chuankou.CommPort();
    ss_port.PortNum = "COM1"; //端口号
    ss_port.BaudRate = 19200; //串口通信波特率
    ss_port.ByteSize = 8; //数据位
    ss_port.Parity = 0; //奇偶校验
    ss_port.StopBits = 1;//停止位
    ss_port.ReadTimeout = 1000; //读超时
    try
    {
    if (ss_port.Opened)
      {
       ss_port.Close();
       ss_port.Open(); //打开串口
      }
    else
    {
       ss_port.Open();//打开串口
    }
    MessageBox.Show("串口成功打开!");
    }
    catch(Exception ee) 
    {
    Console.WriteLine("错误:" + ee.Message);
    //return false;
    }
    byte[] bt=new byte[1024];
    ...
    ....
    ss_port.Write(bt);
      

  2.   

    关于打印内容信息格式如下:(注意包最大为1024 字节)包数据(最大为:MAX_LEN_NUM)+ 等待0x06 +  。直到结束。部分C 语言代码如下:(仅供参考)#define MAX_LEN_NUM (1*1024) DWORD len;while(dwLen>0) //剩下未发的字节长度{ 
    len = (dwLen<MAX_LEN_NUM)? dwLen:MAX_LEN_NUM; //最大为:MAX_LEN_NUM Read(buf, len); //从要打印的缓冲区里读打印的数据到buf 中。 WriteCommData(buf, len); //发送给打印串口while(!m_ACK) ; //等待回复0x06。m_ACK=0; dwLen -= len; //减去发送的字节数。