现把POS的各种外设处理整理如下,可能还有许多不全或者代码不正确的地方,望大家补充且指证
POS的外设包括打印机、钱箱、顾显、卡、扫码枪和扫码平台。
一般的外设编程可以通过PB通过的串口编程,也有部分特殊的,可由厂家直接提供技术支持。
各种外设如果接的是COM,必须在打开的时候,让其初始化,一般卡可在刷卡的时候再初始化,刷卡结束后,再把COM口关闭。因为如果COM已被某一外设打开,另一外设将不可用,即COM口是独占的。
一、打印机
POS的外设包括打印机、钱箱、顾显、卡、扫码枪和扫码平台。
一般的外设编程可以通过PB通过的串口编程,也有部分特殊的,可由厂家直接提供技术支持。
各种外设如果接的是COM,必须在打开的时候,让其初始化,一般卡可在刷卡的时候再初始化,刷卡结束后,再把COM口关闭。因为如果COM已被某一外设打开,另一外设将不可用,即COM口是独占的。
一、打印机
申明
/*210D´串口打印*/
Function boolean OpenSerPort(int iPt) LIBRARY "prndll.dll" //打开串口
Function boolean ClosePort() LIBRARY "prndll.dll" //关闭串口
Function boolean SendPData(string pData,int iDataLen) LIBRARY "prndll.dll" //发送打印命令
Function boolean OpenPrnDrawer() LIBRARY "prndll.dll" //开钱箱
Function boolean TM210D_Init() LIBRARY "prndll.dll" //打印初始化串口
Function boolean TM210D_PrnCnEn(int iColor,string pData,int iDataLen) LIBRARY "prndll.dll" //向打印机从软字库(串口)
Function boolean OpenPalPort(int iPt) LIBRARY "prndll.dll" //´打开并口
Function boolean TM210PD_PrnCnEn(int iColor,string pData,int iDataLen) LIBRARY "prndll.dll" //向打印机从软字库(并口)
1、打印机初始化(可在OPEN事件中写)
gs_system_qt.ls_printtype:为打印机型号
OLE_print:为Microsoft Communication control控件(装VB6后,此控件可见)
gs_system_qt.ls_pagewidth:打印纸的宽度
ls_printstr:送入打印机的字符
//初始化串口打印机
choose case gs_system_qt.ls_printtype
case 'IBM Sure one 4614'
w_main.OLE_print.Object.RTSenable = true
w_main.OLE_print.Object.handshaking = 2
w_main.OLE_print.Object.CommPort = 3
w_main.OLE_print.Object.PortOpen = True
case 'TP POS2000'
choose case gs_system_qt.ls_printport
case 'COM1'
li_printport = 1
case 'COM2'
li_printport = 2
case 'COM3'
li_printport = 3
case 'COM4'
li_printport = 4
case 'COM5'
li_printport = 5
case 'COM6'
li_printport = 6
case else
li_printport = 1
end choose
if li_printport >=1 and li_printport <=6 then
w_main.OLE_print.Object.RTSenable = true
w_main.OLE_print.Object.handshaking = 2
w_main.OLE_print.Object.CommPort = li_printport
w_main.OLE_print.Object.PortOpen = True
end if
end choose
end if
//此处判断如果打印机不是“IBM Sure one 4614”,但是钱箱是“IBM Sure one 4614”的
if gs_system_qt.ls_printtype <> 'IBM Sure one 4614' then
if gs_system_qt.ls_moneyboxport = 'IBM Sure one 4614' then
w_main.OLE_print.Object.RTSenable = true
w_main.OLE_print.Object.handshaking = 2
w_main.OLE_print.Object.CommPort = 3
w_main.OLE_print.Object.PortOpen = True
end if
end if
2、打印小票(各个变量是要打印出来的数据,主要提供各种打印回车、换行、空格应该送那些字符)
choose case gs_system_qt.ls_printtype
case 'Epson 210AM'
choose case gs_system_qt.ls_pagewidth
case '75mm'
//判断一个商品打印几行
if gs_system_qt.li_GoodsPrintrow = 1 then
ls_printstr = ls_printstr + left(ls_GoodsNameS+space(18),18) + Space(7 - Len(String(ldec_num,"###0.000"))) + String(ldec_num,"###0.000") + Space(7-Len(String(ldec_disretailprice,"###0.00")))+String(ldec_disretailprice,"###0.00")+Space(7-Len(String(ldec_disretailprice* ldec_num,"####0.00"))) + String(ldec_disretailprice * ldec_num,"####0.00") + Char(13) + Char(10)
else
ls_printstr = ls_printstr + left(string(li_id)+space(4),4) + ls_goodsname + Char(13) + Char(10)
ls_printstr = ls_printstr + left(ls_goodscode+space(18),18) + Space(7 - Len(String(ldec_num,"###0.000"))) + String(ldec_num,"###0.000")+ Space(7 -Len(String(ldec_disretailprice,"###0.00")))+String(ldec_disretailprice,"###0.00") + Space(7 - Len(String(ldec_disretailprice * ldec_num,"####0.00"))) + String(ldec_disretailprice * ldec_num,"####0.00") + Char(13) + Char(10)
end if
case '57mm'
if gs_system_qt.li_GoodsPrintrow = 1 then
ls_PrintStr = ls_PrintStr + left(ls_GoodsNames+space(14),14) + Space(4 - Len(String(ldec_num,"###0"))) + String(ldec_num,"###0") + Space(7 - Len(String(ldec_disretailprice,"###0.00")))+String(ldec_disretailprice,"###0.00")+Space(7 - Len(String(ldec_disretailprice * ldec_num,"####0.00"))) + String(ldec_disretailprice * ldec_num,"####0.00") + Char(13) + Char(10)
else
ls_printstr = ls_printstr + left(string(li_id)+space(4),4) + ls_goodsname + Char(13) + Char(10)
ls_PrintStr = ls_PrintStr + left(ls_goodscode+space(14),14) + Space(4 - Len(String(ldec_num,"###0")))+String(ldec_num,"###0")+Space(7-Len(String(ldec_disretailprice,"###0.00"))) + String(ldec_disretailprice,"###0.00") + Space(7 - Len(String(ldec_disretailprice * ldec_num,"####0.00"))) + String(ldec_disretailprice * ldec_num,"####0.00") + Char(13) + Char(10)
end if
end choose
case 'Partner ADP 300'
choose case gs_system_qt.ls_pagewidth
case '75mm'
if gs_system_qt.li_GoodsPrintrow = 1 then
ls_printstr = ls_printstr + left(ls_GoodsNameS+space(18),18) + Space(7 - Len(String(ldec_num,"###0.000")))+String(ldec_num,"###0.000")+Space(7-Len(String(ldec_disretailprice,"###0.00")))+String(ldec_disretailprice,"###0.00")+Space(7-Len(String(ldec_disretailprice*ldec_num,"####0.00"))) + String(ldec_disretailprice * ldec_num,"####0.00") + Char(13) + Char(10)
else
ls_printstr = ls_printstr + left(string(li_id)+space(4),4) + ls_goodsname + Char(13) + Char(10)
ls_printstr = ls_printstr + left(ls_goodscode+space(18),18) + Space(7 - Len(String(ldec_num,"###0.000")))+String(ldec_num,"###0.000")+Space(7-Len(String(ldec_disretailprice,"###0.00")))+String(ldec_disretailprice,"###0.00")+Space(7-Len(String(ldec_disretailprice*ldec_num,"####0.00")))+String(ldec_disretailprice * ldec_num,"####0.00") + Char(13) + Char(10)
end if
case '57mm'
if gs_system_qt.li_GoodsPrintrow = 1 then
ls_PrintStr = ls_PrintStr + left(ls_GoodsNames+space(14),14) + Space(4 -Len(String(ldec_num,"###0")))+String(ldec_num,"###0")+Space(7-Len(String(ldec_disretailprice,"###0.00")))+String(ldec_disretailprice,"###0.00")+Space(7-Len(String(ldec_disretailprice*ldec_num,"####0.00")))+String(ldec_disretailprice*ldec_num,"####0.00") + Char(13) + Char(10)
else
ls_printstr = ls_printstr + left(string(li_id)+space(4),4) + ls_goodsname + Char(13) + Char(10)
ls_PrintStr = ls_PrintStr + left(ls_goodscode+space(14),14) + Space(4 - Len(String(ldec_num,"###0"))) + String(ldec_num,"###0") + Space(7 - Len(String(ldec_disretailprice,"###0.00")))+String(ldec_disretailprice,"###0.00")+Space(7-Len(String(ldec_disretailprice*ldec_num,"####0.00"))) + String(ldec_disretailprice * ldec_num,"####0.00") + Char(13) + Char(10)
end if
end choose
case 'TX-210K'
choose case gs_system_qt.ls_pagewidth
case '75mm'
if gs_system_qt.li_GoodsPrintrow = 1 then
ls_printstr = ls_printstr + left(ls_GoodsNameS+space(18),18) + Space(7 - Len(String(ldec_num,"###0.000")))+String(ldec_num,"###0.000") + Space(7 -Len(String(ldec_disretailprice,"###0.00")))+String(ldec_disretailprice,"###0.00") + Space(7 - Len(String(ldec_disretailprice * ldec_num,"####0.00"))) + String(ldec_disretailprice * ldec_num,"####0.00") + Char(13) + Char(10)
else
ls_printstr = ls_printstr + left(string(li_id)+space(4),4) + ls_goodsname + Char(13) + Char(10)
ls_printstr = ls_printstr + left(ls_goodscode+space(18),18) + Space(7 - Len(String(ldec_num,"###0.000"))) +String(ldec_num,"###0.000") + Space(7 -Len(String(ldec_disretailprice,"###0.00")))+String(ldec_disretailprice,"###0.00") + Space(7 - Len(String(ldec_disretailprice * ldec_num,"####0.00"))) + String(ldec_disretailprice * ldec_num,"####0.00") + Char(13) + Char(10)
end if
case '57mm'
if gs_system_qt.li_GoodsPrintrow = 1 then
ls_PrintStr = ls_PrintStr + left(ls_GoodsNames+space(14),14) + Space(4 - Len(String(ldec_num,"###0")))+String(ldec_num,"###0")+Space(7-Len(String(ldec_disretailprice,"###0.00")))+String(ldec_disretailprice,"###0.00")+Space(7-Len(String(ldec_disretailprice*ldec_num,"####0.00")))+String(ldec_disretailprice * ldec_num,"####0.00") + Char(13) + Char(10)
else
ls_printstr=ls_printstr+left(string(li_id)+space(4),4)+ls_goodsname + Char(13) + Char(10)
ls_PrintStr=ls_PrintStr+left(ls_goodscode+space(14),14)+Space(4-Len(String(ldec_num,"###0")))+String(ldec_num,"###0")+Space(7-Len(String(ldec_disretailprice,"###0.00")))+String(ldec_disretailprice,"###0.00")+Space(7-Len(String(ldec_disretailprice*ldec_num,"####0.00")))+String(ldec_disretailprice * ldec_num,"####0.00") + Char(13) + Char(10)
end if
end choose
case 'DIY POS58'
if gs_system_qt.li_GoodsPrintrow = 1 then
ls_PrintStr = ls_PrintStr + left(ls_GoodsNames+space(10),10) + Space(8 - Len(String(ldec_num,"###0.00"))) + String(ldec_num,"###0.00") + Space(7 - Len(String(ldec_disretailprice,"###0.00"))) + String(ldec_disretailprice,"###0.00") + Space(7 - Len(String(ldec_disretailprice * ldec_num,"####0.00"))) + String(ldec_disretailprice * ldec_num,"####0.00") + Char(13) + Char(10)
else
ls_printstr = ls_printstr + left(string(li_id)+space(4),4) + ls_goodsname + Char(13) + Char(10)
ls_PrintStr = ls_PrintStr + left(ls_goodscode+space(10),10) + Space(8 - Len(String(ldec_num,"###0.00"))) + String(ldec_num,"###0.00") + Space(7 - Len(String(ldec_disretailprice,"###0.00"))) + String(ldec_disretailprice,"###0.00") + Space(7 - Len(String(ldec_disretailprice * ldec_num,"####0.00"))) + String(ldec_disretailprice * ldec_num,"####0.00") + Char(13) + Char(10)
end if
case 'IBM Sure one 4614'
choose case gs_system_qt.ls_pagewidth
case '75mm'
if gs_system_qt.li_GoodsPrintrow = 1 then //
ls_printstr = ls_printstr + left(ls_GoodsNameS+space(18),18) + Space(7 - Len(String(ldec_num,"###0.000"))) + String(ldec_num,"###0.000") + Space(7-Len(String(ldec_disretailprice,"###0.00")))+String(ldec_disretailprice,"###0.00")+Space(7-Len(String(ldec_disretailprice*ldec_num,"####0.00")))+ String(ldec_disretailprice * ldec_num,"####0.00") + Char(13) + Char(10)
else
ls_printstr = ls_printstr + left(string(li_id)+space(4),4) + ls_goodsname + Char(13) + Char(10)
ls_printstr = ls_printstr + left(ls_goodscode+space(18),18) + Space(7 - Len(String(ldec_num,"###0.000"))) + String(ldec_num,"###0.000") + Space(7-Len(String(ldec_disretailprice,"###0.00")))+String(ldec_disretailprice,"###0.00")+Space(7-Len(String(ldec_disretailprice*ldec_num,"####0.00"))) + String(ldec_disretailprice * ldec_num,"####0.00") + Char(13) + Char(10)
end if
case '57mm'
if gs_system_qt.li_GoodsPrintrow = 1 then
ls_PrintStr = ls_PrintStr + left(ls_GoodsNames+space(14),14) + Space(4 - Len(String(ldec_num,"###0"))) + String(ldec_num,"###0") + Space(7 - Len(String(ldec_disretailprice,"###0.00")))+String(ldec_disretailprice,"###0.00")+Space(7-Len(String(ldec_disretailprice*ldec_num,"####0.00")))+String(ldec_disretailprice*ldec_num,"####0.00")+Char(13)+Char(10)
else
ls_printstr = ls_printstr + left(string(li_id)+space(4),4) + ls_goodsname + Char(13) + Char(10)
ls_PrintStr = ls_PrintStr + left(ls_goodscode+space(14),14) + Space(4 - Len(String(ldec_num,"###0"))) + String(ldec_num,"###0") + Space(7 - Len(String(ldec_disretailprice,"###0.00")))+String(ldec_disretailprice,"###0.00")+Space(7-Len(String(ldec_disretailprice*ldec_num,"####0.00"))) + String(ldec_disretailprice * ldec_num,"####0.00") + Char(13) + Char(10)
end if
end choose
w_main.OLE_print.Object.Output = ls_printstr
do While w_main.OLE_print.Object.OutBufferCount() > 0
Yield()
Loop
ls_printstr= ''
case '海信P110DM'
choose case gs_system_qt.ls_pagewidth
case '75mm'
if gs_system_qt.li_GoodsPrintrow = 1 then //
ls_printstr = ls_printstr + left(ls_GoodsNameS+space(18),18) + Space(7-Len(String(ldec_num,"###0.000")))+String(ldec_num,"###0.000")+Space(7-Len(String(ldec_disretailprice,"###0.00"))) + String(ldec_disretailprice,"###0.00") + Space(7 - Len(String(ldec_disretailprice * ldec_num,"####0.00"))) + String(ldec_disretailprice * ldec_num,"####0.00") + Char(13) + Char(10)
else
ls_printstr = ls_printstr + left(string(li_id)+space(4),4) + ls_goodsname + Char(13) + Char(10)
ls_printstr = ls_printstr + left(ls_goodscode+space(18),18) + Space(7-Len(String(ldec_num,"###0.000")))+String(ldec_num,"###0.000")+Space(7-Len(String(ldec_disretailprice,"###0.00"))) + String(ldec_disretailprice,"###0.00") + Space(7 - Len(String(ldec_disretailprice * ldec_num,"####0.00"))) + String(ldec_disretailprice * ldec_num,"####0.00") + Char(13) + Char(10)
end if
case '57mm'
if gs_system_qt.li_GoodsPrintrow = 1 then
ls_PrintStr = ls_PrintStr + left(ls_GoodsNames+space(14),14) +Space(4-Len(String(ldec_num,"###0")))+String(ldec_num,"###0") + Space(7 - Len(String(ldec_disretailprice,"###0.00"))) + String(ldec_disretailprice,"###0.00")+Space(7-Len(String(ldec_disretailprice*ldec_num,"####0.00")))+String(ldec_disretailprice * ldec_num,"####0.00") + Char(13) + Char(10)
else
ls_printstr = ls_printstr + left(string(li_id)+space(4),4) + ls_goodsname + Char(13) + Char(10)
ls_PrintStr = ls_PrintStr + left(ls_goodscode+space(14),14) + Space(4-Len(String(ldec_num,"###0")))+String(ldec_num,"###0") + Space(7 - Len(String(ldec_disretailprice,"###0.00"))) + String(ldec_disretailprice,"###0.00")+Space(7-Len(String(ldec_disretailprice*ldec_num,"####0.00")))+String(ldec_disretailprice * ldec_num,"####0.00") + Char(13) + Char(10)
end if
end choose
case '桑达PT2000'
choose case gs_system_qt.ls_pagewidth
case '75mm'
if gs_system_qt.li_GoodsPrintrow = 1 then
ls_printstr = ls_printstr + left(ls_GoodsNameS+space(18),18) + Space(7-Len(String(ldec_num,"###0.000")))+String(ldec_num,"###0.000")+Space(7-Len(String(ldec_disretailprice,"###0.00")))+String(ldec_disretailprice,"###0.00")+Space(7-Len(String(ldec_disretailprice*ldec_num,"####0.00")))+String(ldec_disretailprice * ldec_num,"####0.00") + Char(13) + Char(10)
else
ls_printstr = ls_printstr + left(string(li_id)+space(4),4) + ls_goodsname + Char(13) + Char(10)
ls_printstr = ls_printstr + left(ls_goodscode+space(18),18) + Space(7-Len(String(ldec_num,"###0.000")))+String(ldec_num,"###0.000")+Space(7-Len(String(ldec_disretailprice,"###0.00")))+String(ldec_disretailprice,"###0.00")+Space(7-Len(String(ldec_disretailprice*ldec_num,"####0.00")))+String(ldec_disretailprice * ldec_num,"####0.00") + Char(13) + Char(10)
end if
case '57mm'
if gs_system_qt.li_GoodsPrintrow = 1 then
ls_PrintStr = ls_PrintStr + left(ls_GoodsNames+space(14),14) +Space(4-Len(String(ldec_num,"###0")))+String(ldec_num,"###0")+ Space(7 - Len(String(ldec_disretailprice,"###0.00"))) + String(ldec_disretailprice,"###0.00")+Space(7-Len(String(ldec_disretailprice*ldec_num,"####0.00")))+String(ldec_disretailprice * ldec_num,"####0.00") + Char(13) + Char(10)
else
ls_printstr = ls_printstr + left(string(li_id)+space(4),4) + ls_goodsname + Char(13) + Char(10)
ls_PrintStr = ls_PrintStr + left(ls_goodscode+space(14),14) + Space(4-Len(String(ldec_num,"###0")))+String(ldec_num,"###0") + Space(7 - Len(String(ldec_disretailprice,"###0.00"))) + String(ldec_disretailprice,"###0.00")+Space(7-Len(String(ldec_disretailprice*ldec_num,"####0.00")))+String(ldec_disretailprice * ldec_num,"####0.00") + Char(13) + Char(10)
end if
end choose
case 'TP POS2000'
choose case gs_system_qt.ls_pagewidth
case '75mm'
if gs_system_qt.li_GoodsPrintrow = 1 then
ls_printstr = ls_printstr + left(ls_GoodsNameS+space(18),18) + Space(7 - Len(String(ldec_num,"###0.000")))+String(ldec_num,"###0.000")+Space(7-Len(String(ldec_disretailprice,"###0.00")))+String(ldec_disretailprice,"###0.00")+Space(7-Len(String(ldec_disretailprice*ldec_num,"####0.00"))) + String(ldec_disretailprice * ldec_num,"####0.00") + Char(13) + Char(10)
else
ls_printstr = ls_printstr + left(string(li_id)+space(4),4) + ls_goodsname + Char(13) + Char(10)
ls_printstr = ls_printstr + left(ls_goodscode+space(18),18) + Space(7 - Len(String(ldec_num,"###0.000")))+String(ldec_num,"###0.000")+Space(7-Len(String(ldec_disretailprice,"###0.00")))+String(ldec_disretailprice,"###0.00")+Space(7-Len(String(ldec_disretailprice*ldec_num,"####0.00"))) + String(ldec_disretailprice * ldec_num,"####0.00") + Char(13) + Char(10)
end if
case '57mm'
if gs_system_qt.li_GoodsPrintrow = 1 then
ls_PrintStr = ls_PrintStr + left(ls_GoodsNames+space(14),14) + Space(4 - Len(String(ldec_num,"###0"))) + String(ldec_num,"###0") + Space(7 - Len(String(ldec_disretailprice,"###0.00")))+String(ldec_disretailprice,"###0.00")+Space(7-Len(String(ldec_disretailprice*ldec_num,"####0.00"))) + String(ldec_disretailprice * ldec_num,"####0.00") + Char(13) + Char(10)
else
ls_printstr = ls_printstr + left(string(li_id)+space(4),4) + ls_goodsname + Char(13) + Char(10)
ls_PrintStr = ls_PrintStr + left(ls_goodscode+space(14),14) + Space(4 - Len(String(ldec_num,"###0"))) + String(ldec_num,"###0") + Space(7 - Len(String(ldec_disretailprice,"###0.00")))+String(ldec_disretailprice,"###0.00")+Space(7-Len(String(ldec_disretailprice*ldec_num,"####0.00"))) + String(ldec_disretailprice * ldec_num,"####0.00") + Char(13) + Char(10)
end if
end choose
w_main.OLE_print.Object.Output = ls_printstr
do While w_main.OLE_print.Object.OutBufferCount() > 0
Yield()
Loop
ls_printstr= ''
case else //75mm
choose case gs_system_qt.ls_pagewidth
case '75mm'
if gs_system_qt.li_GoodsPrintrow = 1 then
ls_printstr=ls_printstr+left(ls_GoodsNameS+space(18),18)+Space(7-Len(String(ldec_num,"###0.000")))+String(ldec_num,"###0.000")+ Space(7 -Len(String(ldec_disretailprice,"###0.00")))+String(ldec_disretailprice,"###0.00")+Space(7-Len(String(ldec_disretailprice*ldec_num,"####0.00")))+String(ldec_disretailprice*ldec_num,"####0.00")+Char(13)+Char(10)
else
ls_printstr = ls_printstr + left(string(li_id)+space(4),4) + ls_goodsname + Char(13) + Char(10)
ls_printstr = ls_printstr + left(ls_goodscode+space(18),18) + Space(7- Len(String(ldec_num,"###0.000")))+String(ldec_num,"###0.000")+Space(7-Len(String(ldec_disretailprice,"###0.00")))+String(ldec_disretailprice,"###0.00")+Space(7-Len(String(ldec_disretailprice*ldec_num,"####0.00"))) + String(ldec_disretailprice * ldec_num,"####0.00") + Char(13) + Char(10)
end if
case '57mm'
if gs_system_qt.li_GoodsPrintrow = 1 then
ls_PrintStr = ls_PrintStr + left(ls_GoodsNames+space(14),14) + Space(4 -Len(String(ldec_num,"###0"))) + String(ldec_num,"###0") + Space(7 - Len(String(ldec_disretailprice,"###0.00")))+String(ldec_disretailprice,"###0.00")+Space(7-Len(String(ldec_disretailprice*ldec_num,"####0.00")))+String(ldec_disretailprice*ldec_num,"####0.00")+Char(13)+Char(10)
else
ls_printstr = ls_printstr + left(string(li_id)+space(4),4) + ls_goodsname + Char(13) + Char(10)
ls_PrintStr = ls_PrintStr + left(ls_goodscode+space(14),14) + Space(4 - Len(String(ldec_num,"###0"))) + String(ldec_num,"###0") + Space(7 - Len(String(ldec_disretailprice,"###0.00")))+String(ldec_disretailprice,"###0.00")+Space(7-Len(String(ldec_disretailprice*ldec_num,"####0.00"))) + String(ldec_disretailprice * ldec_num,"####0.00") + Char(13) + Char(10)
end if
end choose
end choose
经典好贴,我会加入FAQ的,鼓励原创,这篇文章楼主是否愿意加入我们第二期的PB电子期刊当中?
//添加回车换行
ls_printstr = ls_printstr + char(13) + char(10)
//判断打印机型号
choose case gs_system_qt.ls_printtype
case 'IBM Sure one 4614'
w_main.OLE_print.Object.Output = ls_printstr
do While w_main.OLE_print.Object.OutBufferCount() > 0
Yield()
Loop
ls_printstr= ''
case else
//
end choose
end if
//打印口
int li_printport
choose case gs_system_qt.ls_printport
case 'COM1'
li_printport = 1
case 'COM2'
li_printport = 2
case 'COM3'
li_printport = 3
case 'COM4'
li_printport = 4
case 'COM5'
li_printport = 5
case 'COM6'
li_printport = 6
case 'LPT1'
li_printport = 7
case 'LPT2'
li_printport = 8
case else
li_printport = 1
end choose
//发送打印命令
choose case gs_system_qt.ls_printtype
case 'Epson 210PD'
choose case gs_system_qt.li_windrive
case 1 //使用打印驱动
job = PrintOpen()
Print(job,ls_PrintStr)
PrintClose(job)
case -1 //不使用打印驱动
//打开端口
if li_printport = 7 or li_printport = 8 then //²¢¿Ú
choose case li_printport
case 7
li_printport = 1
case 8
li_printport = 2
end choose
OpenPalPort(li_printport) //打开并口
else //打开串口
OpenSerPort(li_printport) //´ò¿ª´®¿Ú
end if
TM210D_PrnCnEn(1,ls_printstr,len(ls_printstr))//Ïò´òÓ¡»ú´ÓÈí×Ö¿â²¢´òÓ¡
ClosePort() //关闭串口
end choose
case 'Epson 210AM'
//退一行
ls_printstr = ls_printstr + char(27) + 'e' + char(1)
choose case gs_system_qt.li_windrive
case 1
ls_printstr = ls_printstr + char(27) + 'e' + char(1)
ls_printstr = ls_printstr + char(27) + 'e' + char(1)
ls_printstr = ls_printstr + char(27) + 'e' + char(1)
ls_printstr = ls_printstr + char(27) + 'e' + char(1)
ls_printstr = ls_printstr + char(27) + 'e' + char(1)
ls_printstr = ls_printstr + char(27) + 'e' + char(1)
job = PrintOpen()
PrintSend(job,ls_PrintStr)
PrintClose(job)
case -1
li_FileNum=FileOpen(gs_system_qt.ls_printport,LineMode!,Write!, LockWrite!, Append!)
FileWrite(li_FileNum,ls_printstr)
FileClose(li_FileNum)
end choose
case 'Partner ADP 300'
choose case gs_system_qt.li_windrive
case 1
job = PrintOpen()
PrintSend(job,ls_PrintStr)
PrintClose(job)
case -1
li_FileNum = FileOpen(gs_system_qt.ls_printport,LineMode!, Write!, LockWrite!, Append!)
FileWrite(li_FileNum,ls_printstr)
FileClose(li_FileNum)
end choose
case 'TX-210K'
//退一行
ls_printstr = ls_printstr + char(27) + 'e' + char(1)
choose case gs_system_qt.li_windrive
case 1
job = PrintOpen()
PrintSend(job,ls_PrintStr)
PrintClose(job)
case -1
li_FileNum = FileOpen(gs_system_qt.ls_printport,LineMode!, Write!, LockWrite!, Append!)
FileWrite(li_FileNum,ls_printstr)
FileClose(li_FileNum)
end choose
case 'IBM Sure one 4614'
w_main.OLE_print.Object.Output = ls_printstr
do While w_main.OLE_print.Object.OutBufferCount() > 0
Yield()
Loop
case 'º海信P110DM'
//退一行
ls_printstr = ls_printstr + char(27) + 'e' + char(1)
choose case gs_system_qt.li_windrive
case 1¯
job = PrintOpen()
PrintSend(job,ls_PrintStr)
PrintClose(job)
case -1
li_FileNum = FileOpen(gs_system_qt.ls_printport,LineMode!, Write!, LockWrite!, Append!)
FileWrite(li_FileNum,ls_printstr)
FileClose(li_FileNum)
end choose
case ‘桑达PT2000'
//退一行
ls_printstr = ls_printstr + char(27) + 'e' + char(1)
choose case gs_system_qt.li_windrive
case 1
ls_printstr = ls_printstr + char(27) + 'e' + char(1)
ls_printstr = ls_printstr + char(27) + 'e' + char(1)
ls_printstr = ls_printstr + char(27) + 'e' + char(1)
ls_printstr = ls_printstr + char(27) + 'e' + char(1)
ls_printstr = ls_printstr + char(27) + 'e' + char(1)
ls_printstr = ls_printstr + char(27) + 'e' + char(1)
job = PrintOpen()
PrintSend(job,ls_PrintStr)
PrintClose(job)
case -1
li_FileNum = FileOpen(gs_system_qt.ls_printport,LineMode!, Write!, LockWrite!, Append!)
FileWrite(li_FileNum,ls_printstr)
FileClose(li_FileNum)
end choose
case 'TP POS2000'
if li_printport >=1 and li_printport <=6 then /
w_main.OLE_print.Object.Output = ls_printstr
do While w_main.OLE_print.Object.OutBufferCount() > 0
Yield()
Loop
end if
case else
choose case gs_system_qt.li_windrive
case 1
job = PrintOpen()
PrintSend(job,ls_PrintStr)
PrintClose(job)
case -1
li_FileNum = FileOpen(gs_system_qt.ls_printport,LineMode!, Write!, LockWrite!, Append!)
FileWrite(li_FileNum,ls_printstr)
FileClose(li_FileNum)
end choose
end choose
二、钱箱
与打印机密切关联的就是钱箱,在软件里面,我们关字符到打印机,由打印机打开钱箱
申明
//桑达CR-3000A(并口)钱箱使用
Function int opend( long t1,long t2,long port ) LIBRARY "qxdll.dll" //开钱箱opend(500,500,LPT2的十进制地址•)
Function int posi (long port ) LIBRARY "qxdll.dll" //钱箱状态
/*海信HK588系列钱箱使用*/
Function int InitMBDrawer(int iType) library 'adrawerdll.dll' //初始化钱箱
Function int OpenMBDrawer(int iType) library 'adrawerdll.dll' //开钱箱
//打印口
choose case gs_system_qt.ls_printport
case 'COM1'
li_printport = 1
case 'COM2'
li_printport = 2
case 'COM3'
li_printport = 3
case 'COM4'
li_printport = 4
case 'COM5'
li_printport = 5
case 'COM6'
li_printport = 6
case 'LPT1'
li_printport = 7
case 'LPT2'
li_printport = 8
case else
li_printport = 1
end choose
choose case gs_system_qt.ls_moneyboxport
case '打印口'
choose case gs_system_qt.ls_printtype
Case "Epson 210PD"
choose case gs_system_qt.li_windrive
case 1 //使用WINDOW驱动
job = PrintOpen()
Print(job,ls_PrintStr)
PrintClose(job)
case -1 //不使用WINDOW驱动
if li_printport = 7 or li_printport = 8 then //并口
choose case li_printport
case 7
li_printport = 1
case 8
li_printport = 2
end choose
OpenPalPort(li_printport)
else //串口
OpenSerPort(li_printport)
end if
OpenPrnDrawer()//开钱箱
ls_printstr = ls_printstr + char(27) + 'e' + char(1)
ls_printstr = ls_printstr + char(27) + 'e' + char(1)
TM210D_PrnCnEn(1,ls_printstr,len(ls_printstr))
ClosePort()
end choose
Case "Epson 210AM"
if gs_system_qt.li_windrive = 1 then
ls_printstr = ls_printstr + Char(27)+Char(64)
end if
ls_printstr = ls_printstr + Char(27)+Char(112)+Char(0)+Char(48)
case 'Partner ADP 300'
if gs_system_qt.li_windrive = 1 then
ls_printstr = ls_printstr + Char(27)+Char(64)
end if
ls_printstr = ls_printstr + Char(27)+Char(112)+Char(0)+Char(48)
Case "TX-210K"
if gs_system_qt.li_windrive = 1 then
ls_printstr=ls_printstr+char(27)+"p"+char(254)+char(60)+char(255)
ls_printstr = ls_printstr + char(27) + 'e' + char(2)
else
ls_printstr=ls_printstr+Char(27)+Char(112)+Char(1)+Char(60)+char(255) end if
Case 'DIY POS58'
ls_printstr = ls_printstr + char(27) + 'e' + char(1)
ls_printstr=ls_printstr+Char(27)+Char(112)+Char(1)+Char(60)+char(255)
Case "桑达PT2000"
if gs_system_qt.li_windrive = 1 then
ls_printstr = ls_printstr + Char(27)+Char(64)
end if
ls_printstr = ls_printstr + Char(27)+Char(112)+Char(0)+Char(48) //Ç®Ïä
case 'TP POS2000'
ls_printstr = ls_printstr + Char(27)+Char(64) //´òÓ¡»ú³õʼ»¯
ls_printstr = ls_printstr + Char(27)+Char(112)+Char(0)+Char(48)
Case Else //Epson 210AM
if gs_system_qt.li_windrive = 1 then
ls_printstr = ls_printstr + Char(27)+Char(64)
end if
ls_printstr = ls_printstr + Char(27)+Char(112)+Char(0)+Char(48)
end choose
//发送打印命令
choose case gs_system_qt.ls_printtype
case 'Epson 210AM'
choose case gs_system_qt.li_windrive
case 1
job = PrintOpen()
PrintSend(job,ls_PrintStr)
PrintClose(job)
case -1
li_FileNum=FileOpen(gs_system_qt.ls_printport,LineMode!, Write!, LockWrite!, Append!)
FileWrite(li_FileNum,ls_printstr)
FileClose(li_FileNum)
end choose
case 'Partner ADP 300'
choose case gs_system_qt.li_windrive
case 1
job = PrintOpen()
PrintSend(job,ls_PrintStr)
PrintClose(job)
case -1 li_FileNum=FileOpen(gs_system_qt.ls_printport,LineMode!, Write!, LockWrite!, Append!)
FileWrite(li_FileNum,ls_printstr)
FileClose(li_FileNum)
end choose
case 'TX-210K'
choose case gs_system_qt.li_windrive
case 1
job = PrintOpen()
PrintSend(job,ls_PrintStr,254)
PrintClose(job)
case -1
li_FileNum=FileOpen(gs_system_qt.ls_printport,LineMode!, Write!, LockWrite!, Append!)
FileWrite(li_FileNum,ls_printstr)
FileClose(li_FileNum)
end choose
case 'IBM Sure one 4614'
w_main.OLE_print.Object.Output = ls_printstr
do While w_main.OLE_print.Object.OutBufferCount() > 0
Yield()
Loop
case 'TP POS2000'
if li_printport >=1 and li_printport <=6 then //±íÃ÷ʱ´®¿Ú
w_main.OLE_print.Object.Output = ls_printstr
do While w_main.OLE_print.Object.OutBufferCount() > 0
Yield()
Loop
end if
case else
choose case gs_system_qt.li_windrive
case 1 //使用WINDOW打印驱动
job = PrintOpen()
PrintSend(job,ls_PrintStr)
PrintClose(job)
case -1
li_FileNum=FileOpen(gs_system_qt.ls_printport,LineMode!, Write!, LockWrite!, Append!)
FileWrite(li_FileNum,ls_printstr)
FileClose(li_FileNum)
end choose
end choose
case 'IBM Sure one 4614'
isnull(ls_printstr)
ls_printstr = char(7)// + char(28)
w_main.OLE_print.Object.Output = ls_printstr
case '海信FWD-1-T'
openmbdrawer(4)
case '桑达'
opend(500,500,gs_system_qt.ll_moneyboxorder)
case else
end choose
end if
三、顾显
1、顾显初始化
function Boolean com_init(Int com,int baud)library "api_com.dll"
function Boolean com_rest() library "api_com.dll"
function Boolean com_send(string buf,int len)library "api_com.dll"
OLE_gx:为Microsoft Communication control控件
int li_gxport
choose case gs_system_qt.ls_gxport
case 'COM1'
li_gxport = 1
case 'COM2'
li_gxport = 2
case 'COM3'
li_gxport = 3
case 'COM4'
li_gxport = 4
case 'COM5'
li_gxport = 5
case 'COM6'
li_gxport = 6
case else
li_gxport = 1
end choose
gs_System_qt.ls_GxType:顾显型号
choose case gs_System_qt.ls_GxType
case '双向数字顾显'
ls_display=char(12)+char(27)+'.'+char(9)+char(1)
OLE_gx.Object.CommPort=li_gxport
OLE_gx.Object.PortOpen=True
OLE_gx.Object.Output=ls_display
case '双象中文顾显'
ls_display=String(real(2),"########0.00")
ls_display=char(27) + 'QA'+ "欢迎" + Space(9 - Len(ls_display)) + ls_display +char(13)
OLE_gx.Object.CommPort=li_gxport
OLE_gx.Object.PortOpen=True
OLE_gx.Object.Output=ls_display
OLE_gx.Object.PortOpen=False
case 'DIY PD-LED8'
if not com_init(li_Gxport,2400) then
messagebox("错误","顾显端口打开错误!",exclamation!)
end if
case 'IBM Sure one 4614'
OLE_gx.Object.CommPort = 4
OLE_gx.Object.PortOpen = True
case '海信VC108'
ls_display = char(27) + char(64)
OLE_gx.Object.CommPort = li_gxport
OLE_gx.Object.PortOpen = True
OLE_gx.Object.Output = ls_display
//OLE_gx.Object.PortOpen=False
case 'LANPOS IC-851'
if not com_init(li_Gxport,9600) then
messagebox("错误","顾显端口打开错误!",exclamation!)
end if
case '桑达顾显'
if not OpenCom(li_Gxport) then
messagebox("错误","顾显端口打开错误!",exclamation!)
end if
end choose
2、收银时候顾显显示数据
//顾显端口
choose case gs_system_qt.ls_gxport
case 'COM1'
li_gxport = 1
case 'COM2'
li_gxport = 2
case 'COM3'
li_gxport = 3
case 'COM4'
li_gxport = 4
case 'COM5'
li_gxport = 5
case 'COM6'
li_gxport = 6
case else
li_gxport = 1
end choose
//顾显型号
Choose Case gs_System_qt.ls_GxType
Case "DIY PD-LED8"
if ls_strnum = '.00' then
ls_strnum = '0.00'
end if
ls_display=Char(27)+Char(81)+Char(65)+ ls_strnum + Char(13);
choose case gs_zwgx
case '应收'
ls_display = ls_display + Char(27)+Char(115)+"2"
case '找零'
ls_display = ls_display + Char(27)+Char(115)+"4"
end choose
com_send(ls_display,Len(ls_display))
case '双象数字顾显'
ls_display=String(real(ls_strnum)*100,"########000")
ls_display=Space(11 - Len(ls_display)) + ls_display
OLE_gx.Object.Output = ls_display
case '双象中文顾显'
ls_display=String(real(ls_strnum),"########0.00")
ls_display=char(27) + 'QA'+ gs_zwgx + Space(9 - Len(ls_display)) + ls_display +char(13)
OLE_gx.Object.Output=ls_display
case 'IBM Sure one 4614'
ls_display = char(31)
choose case gs_zwgx
case 'Total'
ls_display = ls_display + char(84) + char(111) + char(116) + char(97) + char(108) + char(58)
ls_display = ls_display + ' ' + ls_strnum
case 'Change'
ls_display = ls_display + char(67) + char(104) + char(97) + char(110) + char(103) + char(101) + char(58)
ls_display = ls_display + ' ' + ls_strnum
end choose
case '海信VC108'
//清屏
ls_display = char(12)
/*多谢惠顾:char(31) + char(80) + n
n= 0 暗
n= 1 亮
n= 2 闪烁
*/
ls_display = ls_display + char(31) + char(80) + char(1) // 显示’多谢惠顾‘
/*币种:char(31) + char(115) + n
n= 0 全暗
n= 1 人民币
n= 2 美元
n= 3 港元
n= 4 全亮
n= 5 转动
*/
ls_display = ls_display + char(31) + char(115) + char(1) // 显示’人民币‘
/*顾显状态:char(27) + char(115) + n
n= 0 全暗
n= 1 单价
n= 2 合计
n= 3 收款
n= 4 找零
*/
choose case gs_zwgx
case '合计'
ls_display = ls_display + char(27) + char(115) + char(2) //合计
ls_display = ls_display + char(27) + char(81) + char(65) + ls_strnum + char(13)
case '找零'
ls_display = ls_display + char(27) + char(115) + char(4) //找零
ls_display = ls_display + char(27) + char(81) + char(65) + ls_strnum + char(13)
end choose
case 'LANPOS IC-851'
//指定汉字格式:
//[027][012]
//[027][115],N,M
//1<=N<=5
//0<=M<=1
//N=1:小计
//N=2:合计
//N=3:单价
//N=4:收款
//N=5:找回
//M=0:灭
//M=1:亮
//
//必须先送中文再送数字×××××××××××××××××××××××××
//显示中文
choose case gs_zwgx
case '合计'
//亮合计
ls_display = ls_display + char(27) + char(12) + Char(27)+Char(115)+char(2) + char(1)
//灭找回
ls_display = ls_display + char(27) + char(12) + Char(27)+Char(115)+char(5) + char(0)
case '找回'
//亮找回
ls_display = ls_display + char(27) + char(12) + Char(27)+Char(115)+char(5) + char(1)
//灭合计
ls_display = ls_display + char(27) + char(12) + Char(27)+Char(115)+char(2) + char(0)
end choose
if ls_strnum = '.00' then
ls_strnum = '0.00'
end if
ls_display = ls_display + Char(27)+Char(81)+Char(65)+ ls_strnum + Char(13);
com_send(ls_display,Len(ls_display))
case '桑达顾显'
SendByte(char(31),1)
SendByte(char(17),1)
choose case gs_zwgx
case '合计'
ls_display = ls_display + '合计' +char(10)
case '找回'
ls_display = ls_display + '找回' +char(10)
end choose
if ls_strnum = '.00' then
ls_strnum = '0.00'
end if
ls_display = ls_display + Char(27)+'QA'+ ls_strnum + Char(13);
SendByte(ls_display,Len(ls_display))
case else
//
end choose
帮忙UP,:)
五、卡(包括IC卡和磁卡)
申明
//IC卡使用
Function long chk_baud(int port) library "MWIC_32.dll"
Function long ic_init(int port,long baud) library "MWIC_32.dll"
Function long auto_init(int port,long baud) library "MWIC_32.dll"
Function int get_status(long icdev, ref int card_S) library "MWIC_32.dll"
Function long ic_exit(Long icdev) library "MWIC_32.dll"
Function int set_baud(long icdev,long baud) library "MWIC_32.dll"
Function int cmp_dvsc(Long icdev, int length,ref string data_buffer) library "MWIC_32.dll"
Function int srd_dvsc(Long icdev, int length,ref string data_buffer) library "MWIC_32.dll"
Function int swr_dvsc(Long icdev, int length,ref string data_buffer) library "MWIC_32.dll"
Function int setsc_md(Long icdev, int mode) library "MWIC_32.dll"
Function int turn_on(Long icdev) library "MWIC_32.dll"
Function int turn_off(Long icdev) library "MWIC_32.dll"
Function int srd_ver(Long icdev,int le,ref string data_buffer) library "MWIC_32.dll"
Function int auto_pull(Long icdev) library "MWIC_32.dll"
Function int dv_beep(Long icdev,int time) library "MWIC_32.dll"
Function int asc_hex(ref string asc,ref string hex,long le) library "MWIC_32.dll"
Function int hex_asc(ref string hex,ref string asc,long le) library "MWIC_32.dll"
Function int ic_encrypt(string key, ref string ptrsource ,integer le,ref string ptrdest) library "MWIC_32.dll"
Function int ic_decrypt(string key, ref string ptrdest,integer le,ref string ptrsource) library"MWIC_32.dll"
Function int srd_4442(long icdev,int Offset,int length,ref string ata_buffer) library "MWIC_32.dll"
Function int swr_4442(long icdev,int Offset,int length,ref string ata_buffer) library "MWIC_32.dll"
Function int prd_4442(long icdev,int length,ref string ata_buffer) library "MWIC_32.dll"
Function int pwr_4442(long icdev,int Offset,int length,ref string ata_buffer) library "MWIC_32.dll"
Function int chk_4442(long icdev) library "MWIC_32.dll"
Function int csc_4442(long icdev,int length,ref string ata_buffer) library "MWIC_32.dll"
Function int wsc_4442(long icdev,int length,ref string ata_buffer) library "MWIC_32.dll"
Function int rsc_4442(long icdev,int length,ref string ata_buffer) library "MWIC_32.dll"
Function int rsct_4442(long icdev,ref int counter) library "MWIC_32.dll"
磁卡是只读卡号,所有的数据保存在数据库,根据上面的ole_input中的代码就可以读出卡号,然后根据卡号自己处理。
IC卡是金额和卡号都存储在机器里面,相对来说复杂一些
用卡支付
1、初始化
choose case gs_system_qt.ls_icport
case 'COM1'
li_iccom = 1
case 'COM2'
li_iccom = 2
case 'COM3'
li_iccom = 3
case 'COM4'
li_iccom = 4
case 'COM5'
li_iccom = 5
case 'COM6'
li_iccom = 6
case 'LPT1'
li_iccom = 7
case 'LPT2'
li_iccom = 8
case else
gf_messagebox(2,'IC卡设备的端口设置错误,请到系统设置中设置!')
close(this)
return
end choose
choose case gs_system_qt.ls_ictype
case 'MW RD-EB' //明华
icdev= auto_init(li_iccom - 1 ,9600) //初始化端口1,波特率是9600
if icdev<0 then
messagebox("提示信息","串口初始化错误!请检查IC卡设备是否接上正确的串口或电源是否已经打开!")
closewithreturn(this,"close")
end if
case 'DIY键盘IC卡'
icdev = diy95_ic.ic_init(li_iccom - 1 ,9600) //初始化端口1,波特率是9600
if icdev<0 then
messagebox("提示信息","串口初始化错误!请检查IC卡设备是否接上正确的串口或电源是否已经打开!")
closewithreturn(this,"close")
end if
end choose
2、支付
//划卡后进行相应地处理
//再次判断网络状态,
choose case gs_system_qt.ls_ictype
case 'MW RD-EB' //明华
//从IC卡中读取数据
if chk_4442(icdev) < 0 then
st_2.text="未检测到IC卡,请插入IC卡后按『确定』进行支付操作..."
gf_icbeep(icdev,-1)
return
end if
//验证密码
password=gf_geticpwd(gs_system_qt.ls_userid)
asc_hex(password,password1,3)
if csc_4442(icdev, 3,ref password1) < 0 then
rsct_4442(icdev,ref counter) //读出密码错误计数器
st_2.text="密码校验失败!该卡密码错误计数还剩"+String(counter)+"次!"
gf_icbeep(icdev,-1)
return
end if
rsct_4442(icdev,ref counter) //读出密码错误计数器
if counter<1 then
st_2.text="此卡由于三次密码错误,已经锁定!"
gf_icbeep(icdev,-1)
return
End If
//从IC卡中读取信息
offset=32
length=174
ls_readdata=space(174)
if srd_4442(icdev, Offset, length,ref ls_readdata) = 0 then
ls_readdata = space(31) + ls_readdata
//判断是不是新卡
if mid(ls_readdata,32,1)<>"s" then
gf_icbeep(icdev,-1)
gf_messagebox(1,"此卡尚未发行,请重新插入卡片...")
return
end if
ls_cardcode = trim(mid(ls_readdata,33,50))
//读出卡中的余额
ldec_money_card = dec(mid(ls_readdata,83,20))
//卡的可用金额 = 卡余额 - 储值卡消费下限
ldec_money_card = ldec_money_card - gs_system_qt.ldec_cardminmoney
//读取卡本次发行操作次数
ll_operatorid=long(mid(ls_readdata,201,5)) + 1
ls_operatorid = string(ll_operatorid)
//计算写到卡里的余额
ldec_money_card_now = ldec_money_card - ldec_money_now + gs_system_qt.ldec_cardminmoney
//给要写入的数据赋值:金额,卡片ID,本次发行操作次数
//第83-第102: 金额(20位),
ls_alldata = string(ldec_money_card_now) + space(20 - len(string(ldec_money_card_now)))
//第103-第112: 卡片ID(10位),
ls_alldata = ls_alldata + mid(ls_readdata,103,10)
//第113: 卡片状态(1位)
ls_alldata = ls_alldata + mid(ls_readdata,113,1)
//第114-第200: 服装软件使用(87位),
ls_alldata = ls_alldata + mid(ls_readdata,114,87)
//第201-第205: 本次发行使用次数(5位),
ls_alldata = ls_alldata + space(5 - len(ls_operatorid)) + ls_operatorid
//写入卡片
li_Offset = 83
li_length = 205 - 82
if swr_4442(icdev, li_Offset, li_length,ref ls_allData) <> 0 then
gf_icbeep(icdev,-1)
gf_messagebox(1,"写入卡片时发生错误!")
return
End If
//校验
ls_checkdata=space(205 - 82)
if srd_4442(icdev, 83, 205 - 82,ref ls_checkdata) = 0 then
if ls_checkdata <> ls_alldata then
gf_icbeep(icdev,-1)
messagebox("info","校验错误!")
return
end if
else
gf_icbeep(icdev,-1)
messagebox("info","读取校验错误!")
return
End If
gf_icbeep(icdev,1)
case 'DIY键盘IC卡'
if diy95_ic.is_card_on(icdev) <> 0 then
st_2.text="未检测到IC卡,请插入IC卡后按『确定』进行查询操作..."
gf_icbeep(icdev,-1)
return
end if
//卡上电
if diy95_ic.turnon_sle44xx(icdev,ls_datalen,ls_databuff) <> 0 then
st_2.text="IC卡上电失败..."
gf_icbeep(icdev,-1)
return
end if
//验证密码
password=gf_geticpwd(gs_system_qt.ls_userid)
asc_hex(password,password1,3) //该函数使用的时明华IC卡的函数
if diy95_ic.csc_sle44x2(icdev,3,password1) <> 0 then //密码校验失败
if diy95_ic.rsct_sle44x2(icdev,counter) = 0 then //读出密码错误计数器
gf_icbeep(icdev,-1)
st_2.text = "密码校验错误!此卡密码错误计数为:"+String(counter)+",请小心使用!"
return
end if
end if
//判断该卡是否已经被锁定
if diy95_ic.rsct_sle44x2(icdev,counter) = 0 then //读出密码错误计数器
if counter < 1 then
st_2.text="此卡由于三次密码错误,已经锁定!"
gf_icbeep(icdev,-1)
return
end if
end if
//从IC卡中读取信息
offset=32
length=120
ls_readdata=space(120)
if diy95_ic.srd_sle44x2(icdev,0,offset,length,ls_datalen,ls_readdata) = 0 then ls_readdata = space(31) + ls_readdata
//判断是不是新卡
if mid(ls_readdata,32,1)<>"s" then
gf_icbeep(icdev,-1)
gf_messagebox(1,"此卡尚未发行,请重新插入卡片...")
return
end if
//卡号
ls_cardcode = trim(mid(ls_readdata,33,50))
//读出卡中的余额
ldec_money_card = dec(mid(ls_readdata,83,20))
ls_operatorid = space(5)
if diy95_ic.srd_sle44x2(icdev,0,201,5,ls_datalen,ls_operatorid) = 0 then
ll_operatorid=long(ls_operatorid) + 1
ls_operatorid = string(ll_operatorid)
else
gf_icbeep(icdev,-1)
gf_messagebox(1,"读取卡片错误!")
return
end if
//给要写入的数据赋值:金额,卡片ID,卡片状态,服装部分,本次发行操作次数
//第83-第102: 金额(20位), ls_alldata=string(ldec_money_card_now)+space(20-len(string(ldec_money_card_now)))
//第103-第112: 卡片ID(10位),
ls_alldata = ls_alldata + mid(ls_readdata,103,10)
//第113: 卡片状态(1位)
ls_alldata = ls_alldata + mid(ls_readdata,113,1)
//第114-第200: 服装软件使用(87位),
ls_alldata = ls_alldata + space(87)// + mid(ls_readdata,114,87)
//第201-第205: 本次发行使用次数(5位),
ls_alldata = ls_alldata + space(5 - len(ls_operatorid)) + ls_operatorid
//写入卡片
li_Offset = 83
li_length = 205 - 82
if diy95_ic.swr_sle44x2(icdev,0,li_Offset,li_length,ref ls_allData) <> 0 thengf_icbeep(icdev,-1)
gf_messagebox(1,"写入卡片时发生错误!")
return
End If
//校验
ls_checkdata=space(205 - 82)
if diy95_ic.srd_sle44x2(icdev,0,83, 205 - 82,ls_datalen,ref ls_checkdata) = 0 then if ls_checkdata <> ls_alldata then
gf_icbeep(icdev,-1)
messagebox("info","校验错误!")
return
end if
else
gf_icbeep(icdev,-1)
messagebox("info","读取校验错误!")
return
End If
//下电
if diy95_ic.turnoff_sle44xx(icdev) <> 0 then
gf_icbeep(icdev,-1)
messagebox("info","下电失败!")
return
end if
gf_icbeep(icdev,1)
函数gf_icbeep
参数类型
Icdevlong
i_typeInteger
choose case i_type
case 1
choose case gs_system_qt.ls_ictype
case 'MW RD-EB' //明华
dv_beep(icdev,10)
dv_beep(icdev,10)
case 'DIY键盘IC卡'
diy95_ic.dv_beep(icdev,1) //两声
end choose
case -1
choose case gs_system_qt.ls_ictype
case 'MW RD-EB' //明华
dv_beep(icdev,50)
case 'DIY键盘IC卡'//一共响4声
diy95_ic.dv_beep(icdev,0) //1声
diy95_ic.dv_beep(icdev,0) //1声
diy95_ic.dv_beep(icdev,0) //1声
diy95_ic.dv_beep(icdev,0) //1声
end choose
case else
choose case gs_system_qt.ls_ictype
case 'MW RD-EB' //明华
dv_beep(icdev,50)
dv_beep(icdev,50)
case 'DIY键盘IC卡'
diy95_ic.dv_beep(icdev,0) //1声
diy95_ic.dv_beep(icdev,0) //1声
diy95_ic.dv_beep(icdev,0) //1声
diy95_ic.dv_beep(icdev,0) //1声
diy95_ic.dv_beep(icdev,0) //1声
diy95_ic.dv_beep(icdev,0) //1声
diy95_ic.dv_beep(icdev,0) //1声
diy95_ic.dv_beep(icdev,0) //1声
end choose
end choose