📄 byprinter.cpp
字号:
// BYPrinter.cpp: implementation of the BYPrinter class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "BYPrinter.h"
#include "Comm.h"
//////////////////////////////////////////////////////////////////////
// DefineConstValue
//////////////////////////////////////////////////////////////////////
CCommDevice obj_ComCtrl;
#define ESC_DANWEI "\x1d\x50\xb4\xb4"
#define ESC_DUANQIE "\x1b\x69"
#define ESC_LIANQIE "\x1b\x69"
#define ESC_HUANHANG "\x0a"
#define ESC_CHUSHIHUA "\x1b\x40"
#define ESC_JIANCE1 "\x10\x04\x01"
#define ESC_JIANCE2 "\x10\x04\x02"
#define ESC_JIANCE3 "\x10\x04\x03"
#define ESC_JIANCE4 "\x10\x04\x04"
#define ESC_MOHANGAO "\x1b\x32"
#define ESC_MOSHI1 "\x1d\x21\x00"
#define ESC_MOSHI2 "\x1d\x21\x11"
#define ESC_MOSHI3 "\x1d\x21\x22"
#define ESC_MOSHI4 "\x1d\x21\x33"
#define ESC_MOSHI5 "\x1d\x21\x44"
#define ESC_MOSHI6 "\x1d\x21\x55"
#define ESC_SELFONT "\x1b\x4d\x01"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
BYPrinter::BYPrinter()
{
memset(m_sz_wbuff,0,sizeof(m_sz_wbuff));
memset(m_sz_rbuff,0,sizeof(m_sz_rbuff));
m_b_comflag=false;
}
BYPrinter::~BYPrinter()
{
}
void BYPrinter::MYTRACE(char *fmt, ... )
{
va_list ap;
FILE *fp;
CString fileName;
//fileName.Format("%s\\log\\NTIE.log",devcfg.LocalPath);
fileName.Format("c:\\MT532.log");
fp = fopen(fileName,"a");
if ( fp == NULL )
return;
//记录系统升级时间
struct tm *ptm;
long clck;
clck = time((long *)0);
ptm=localtime(&clck);
fprintf(fp,"[%d-%d-%d %02d:%02d:%02d] ",
ptm->tm_year+1900,
ptm->tm_mon+1,
ptm->tm_mday,
ptm->tm_hour,
ptm->tm_min,
ptm->tm_sec);
va_start ( ap, fmt );
vfprintf(fp, fmt, ap );
va_end ( ap );
fclose(fp);
}
/*********************************************************************
function:联结打印机
input: portname-->通信端口
Baud-->通信速率
return: 0-->成功
1-->开串口失败
2-->写串口失败
*********************************************************************/
int BYPrinter::byprinter_opn(char *portname, int Baud )
{
obj_ComCtrl.PutTraceFile("byp_comm",1) ;
memset(m_sz_wbuff,0,sizeof(m_sz_wbuff));
memset(m_sz_rbuff,0,sizeof(m_sz_rbuff));
DCB dcb;
if(!m_b_comflag)
{
dcb.DCBlength = sizeof( DCB );
//GetCommState( hCom, &dcb );
dcb.BaudRate = Baud;
dcb.ByteSize = 8;
dcb.Parity = NOPARITY;
dcb.StopBits = ONESTOPBIT;
dcb.fOutxDsrFlow = false; // true or false
dcb.fDtrControl = DTR_CONTROL_ENABLE; // DTR_CONTROL_HANDSHAKE
dcb.fOutxCtsFlow = false; // true or false
dcb.fRtsControl = RTS_CONTROL_ENABLE; // RTS_CONTROL_HANDSHAKE
dcb.fInX = dcb.fOutX =false;
dcb.XonChar = 0x11; //ASCII_XON ;
dcb.XoffChar = 0x13; //ASCII_XOFF ;
dcb.XonLim = 100;
dcb.XoffLim = 100;
// other various settings
dcb.fBinary = TRUE;
dcb.fParity = TRUE;
if(!obj_ComCtrl.Open(portname,&dcb))
{
m_b_comflag=false;
return 1;
}
m_b_comflag=true;
}
if(!obj_ComCtrl.Write(ESC_CHUSHIHUA,2))
{
obj_ComCtrl.Close();
m_b_comflag=false;
return 2;
}
/*del by zrz
MYTRACE("set font");
if(!obj_ComCtrl.Write(ESC_SELFONT,3))
{
obj_ComCtrl.Close();
m_b_comflag=false;
return 2;
}
*/
return 0;
}
/*********************************************************************
function:关闭打印机
*********************************************************************/
void BYPrinter::byprinter_cls(void)
{
if(m_b_comflag)
{
obj_ComCtrl.Close();
m_b_comflag=false;
}
}
/*********************************************************************
function:检查打印机状态
input: RetVal-->用于存放检查结果的BYTE型数组或指针
return: 0-->成功
1-->出错
*********************************************************************/
int BYPrinter::byprinter_chk(BYTE *RetVal)
{
int rlen=0;
memset(m_sz_wbuff,0,sizeof(m_sz_wbuff));
memset(m_sz_rbuff,0,sizeof(m_sz_rbuff));
if(!m_b_comflag)
return 1;
/////////////////////////////
MYTRACE("now write\n");
if(!obj_ComCtrl.Write(ESC_JIANCE1,3))
{
obj_ComCtrl.Close();
m_b_comflag=false;
return 1;
}
rlen=obj_ComCtrl.ReadComm(m_sz_rbuff,1024,3000,300);
MYTRACE("rlen = [%d] m_sz_rbuff = [%d]\n",rlen,m_sz_rbuff[0]);
if(rlen!=0)
{
RetVal[0]=m_sz_rbuff[0];
memset(m_sz_rbuff,0,sizeof(m_sz_rbuff));
rlen=0;
}
else
return 1;
/////////////////////////////
if(!obj_ComCtrl.Write(ESC_JIANCE2,3))
{
obj_ComCtrl.Close();
m_b_comflag=false;
return 1;
}
rlen=obj_ComCtrl.ReadComm(m_sz_rbuff,1024,3000,300);
MYTRACE("rlen = [%d] m_sz_rbuff = [%d]\n",rlen,m_sz_rbuff[0]);
if(rlen!=0)
{
RetVal[1]=m_sz_rbuff[0];
memset(m_sz_rbuff,0,sizeof(m_sz_rbuff));
rlen=0;
}
else
return 1;
/////////////////////////////
if(!obj_ComCtrl.Write(ESC_JIANCE3,3))
{
obj_ComCtrl.Close();
m_b_comflag=false;
return 1;
}
rlen=obj_ComCtrl.ReadComm(m_sz_rbuff,1024,3000,300);
MYTRACE("rlen = [%d] m_sz_rbuff = [%d]\n",rlen,m_sz_rbuff[0]);
if(rlen!=0)
{
RetVal[2]=m_sz_rbuff[0];
memset(m_sz_rbuff,0,sizeof(m_sz_rbuff));
rlen=0;
}
else
return 1;
/////////////////////////////
if(!obj_ComCtrl.Write(ESC_JIANCE4,3))
{
obj_ComCtrl.Close();
m_b_comflag=false;
return 1;
}
rlen=obj_ComCtrl.ReadComm(m_sz_rbuff,1024,3000,300);
if(rlen!=0)
{
RetVal[3]=m_sz_rbuff[0];
memset(m_sz_rbuff,0,sizeof(m_sz_rbuff));
rlen=0;
}
else
return 1;
return 0;
}
/*********************************************************************
function:初始化打印机
return: 0-->成功
1-->失败
*********************************************************************/
int BYPrinter::byprinter_int(void)
{
memset(m_sz_wbuff,0,1024);
if(!m_b_comflag) return 1;
if(!obj_ComCtrl.Write(ESC_CHUSHIHUA,2))
{
obj_ComCtrl.Close();
m_b_comflag=false;
return 1;
}
/*del by zrz if(!obj_ComCtrl.Write(ESC_DANWEI,4))
{
obj_ComCtrl.Close();
m_b_comflag=false;
return 1;
}
*/
return 0;
}
/*********************************************************************
function:设置横向和纵向移动单位
input: x-->横向位置单位
y-->纵向位置单位
return: 0-->成功
1-->失败
*********************************************************************/
int BYPrinter::byprinter_pdw(int x,int y)
{
memset(m_sz_wbuff,0,1024);
if(!m_b_comflag) return 1;
m_sz_wbuff[0]=0x1d;
m_sz_wbuff[1]=0x50;
m_sz_wbuff[2]=x;
m_sz_wbuff[3]=y;
/*del by zrz
if(!obj_ComCtrl.Write(m_sz_wbuff,4))
{
obj_ComCtrl.Close();
m_b_comflag=false;
return 1;
}
*/
return 0;
}
//////////////////////////////////////////////////////////////////////
//驱动函数
//////////////////////////////////////////////////////////////////////
/*********************************************************************
function:以指定的切纸方式切纸
input: cutmod=0-->全切
=1-->半切
return: 0-->成功
1-->失败
*********************************************************************/
int BYPrinter::byprinter_cut(int cutmod)
{
int i=0;
memset(m_sz_wbuff,0,sizeof(m_sz_wbuff));
if(!m_b_comflag)
return 1;
Sleep(500);
/*zrz del while(i<=5)
{
if(!obj_ComCtrl.Write(ESC_HUANHANG,1))
{
obj_ComCtrl.Close();
m_b_comflag=false;
return 1;
}
i++;
}
*/ switch(cutmod)
{
case 0:
if(!obj_ComCtrl.Write(ESC_DUANQIE,2))
{
obj_ComCtrl.Close();
m_b_comflag=false;
MYTRACE("全切ERR");
return 1;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -