这是串口打印机关于打印字符的说明:整个发送该块的内容,分为两部分。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)命令字:(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; //减去发送的字节数。
}
解决方案 »
- 请教一下,如何用XmlDocument来查询带 xmlns:xsi和xmlns的根节点
- 当泛型类实例做为方法形参时,如何不指定泛型类的类型参数?
- 字符匹配问题
- 为啥弹不出子窗体啊
- 如何利用WMI得到计算机的硬盘缓存大小,CPU的一级缓存大小呢?
- httpwebrequest头中的boundary=--------如何处理?
- 怎么读取一个指定的dll下的集序集里的类的类型全名称
- @@!!!!!!???asp:listitem问题,怪
- this.pictureBox1.Image
- 怎样从一个Directory中取得文件夹的名称?
- 关于bits的响应
- DataBinding和DataSource的区别?
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);
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; //减去发送的字节数。