如何用VFP命令编程来打开钱箱?

ZJM811192 2017-08-07 08:46:10
我用VFP8.0为一家商店开发并安装了一个商品销售软件,这家商店的电脑上连接有POS打印机与钱箱,现在要求在进行商品销售时,同时打印票据与打开钱箱进行收款操作。
软件运行后可以打印票据,却打不开钱箱。
我打开钱箱的命令是这样编程的:

m.hh = fopen("LPT1:", 11)
if m.hh > 0
fwrite(m.hh, Chr(27)+"p"+Chr(0)+Chr(60)+Chr(255))
fclose(m.hh)
else
messagebox("不能打开钱箱!", 16, "错误")
endif

运行后,显示"不能打开钱箱!"
该打开钱箱的命令,过去曾用在一些自带钱箱的POS打印机上,均能打开钱箱。
现在这台钱箱是一台独立的设备,与POS打印机不是一体机。
现在这台钱箱标签上显示:商品名:浩顺钱箱,型号:HS-405C,接口:RJ11,制造商:广州市晶密电子有限公司。
敬向电脑专家请教,如何用VFP命令编程来打开该台钱箱?不胜感激!
...全文
910 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
ZJM811192 2017-08-13
  • 打赏
  • 举报
回复
都市夜猫老师: 十分感谢您的热情指导! 但我按您介绍的方法进行检查与测试,还是打不开钱箱。 1. 打印机功能正常,该电脑通过网络运行另一个软件,能打印并在打印票据时自动打开钱箱(但无法找到原始程序); 2. 直接在 vfp 命令窗口发指令: PrintStringDirect('abc'+chr(13)+chr(10), ' GP-58MBIII', ' USB001') ,不能打印字符 abc; 3. 开钱箱指令改成 cmd = chr(27)+'p'+chr(7) 后测试,还是打不开钱箱。 是不是我原先下载的木瓜的myfll里没有PrintStringDirect 函数造成的?我查了木瓜的myfll的函数功能介绍,发现只有PrinterClose、PrinterOpen、PrinterOutPage三个与Print有关的函数,没有PrintStringDirect 。 我是通过直接发打印字符命令,打印票据的: SET DEVICE TO PRINTER @0,7 say YDMQ font "黑体" ,10 @2,6 say "商 品 销 售 单" font "黑体" ,15 @4,7 say "编号:"+a6 font "宋体" ,9 @5,7 say "日期:"+ LEFT(tTOC(thisform.text1.Value),16) FONT "宋体" ............................... set printer TO LPT1 ???CHR(27)+CHR(12) ???CHR(12) 但只能打印票据,打不开钱箱。 敬向您请教,应如何编程,可以打开钱箱?不胜感激!
ZJM811192 2017-08-13
  • 打赏
  • 举报
回复
都市夜猫老师: 十分感谢您的热情指导! 问题已解决。我用的是以下命令程序: Set Library To myfll cmd = chr(27)+'p'+chr(7) PrintStringDirect(cmd, ' GP-58MBIII', ' USB001') 再次感激您!
都市夜猫 2017-08-13
  • 打赏
  • 举报
回复
PrintStringDirect('abc'+chr(13)+chr(10), 'GP-58MBIII', 'USB001') 不打印 abc,说明后面的打印机名称或端口号写错了 PrintStringDirect 函数一直都有,应该也没有变过,只是没有写入 Help,你执行 Set Library To myfll List Status to myfll.txt Noconsole 在这个 txt 中就会看到这个函数 如果你用进纸命令 chr(12) 可以进纸,换成开钱箱命令也应该一样可行 set printer to LPT1 ??? chr(27)+'p'+chr(0)+chr(255) set printer to PrintStringDirect 函数与 ??? 命令的原理是一样的,都是绕过 Windows 的打印驱动直接写打印端口。之所以不用 ??? 而用PrintStringDirect,是因为 ??? 命令有 bug,试试 ??? chr(123) 就会发现 另外 1. 看你上贴 set printer to 是定向到 LPT1,如果这之后的 ??? 执行正确,PrintStringDirect 的第三个参数也应该是 LPT1 2. 上贴中调用 PrintStringDirect 时,后面两个参数的字符串前面多了一个空格,不知是否测试时也这样,这也可能是导致不打印 abc 的原因
ZJM811192 2017-08-11
  • 打赏
  • 举报
回复
都市夜猫老师: 我查了我原先下载的木瓜的myfll里没有PrintStringDirect 函数,只有PrinterClose、PrinterOpen、PrinterOutPage三个与Print有关的函数,是不是最新版本的myfll里才有PrintStringDirect 函数。如果是最新版本的myfll里才有PrintStringDirect 函数,请能提供最新版本的myfll。(我的QQ邮箱是873708789@qq.com)不胜感激!
都市夜猫 2017-08-11
  • 打赏
  • 举报
回复
按下列顺序检查 1. 先到系统的打印机面板,看打印机属性中自带的打印测试页是否正常 2. 直接在 vfp 命令窗口发指令: PrintStringDirect('abc'+chr(13)+chr(10), ' GP-58MBIII', ' USB001') 看是否打印字符 abc 3. 开钱箱指令是否正确,需要查手册,或联系供应商。我就遇到过两种,大部分是 ESC+p+0x00+0xff,还有一种是 ESC+p+0x07,你改成 cmd = chr(27)+'p'+chr(7) 试试 4. 检查打印机输出电压与钱箱是否匹配,有 12V/24V 之分 5. 再就只有检查钱箱电磁线圈本身是否正常了
ZJM811192 2017-08-11
  • 打赏
  • 举报
回复
都市夜猫老师: 十分感谢您的热情指导! 我按您介绍的以下命令语句运行: Set Library To myfll cmd = Chr(27)+'p'+Chr(0)+Chr(60)+Chr(255) PrintStringDirect(cmd, 'Pos58 Printer', 'LPT1') 但运行后,不能打开钱箱。 后来我检查了打印机与端口设置情况为: 热敏票据打印机(ROHS),打印机名:GP-58MBIII ,端口号:USB001。 于是我把命令程序改为: Set Library To myfll cmd = Chr(27)+'p'+Chr(0)+Chr(60)+Chr(255) PrintStringDirect(cmd, ' GP-58MBIII', ' USB001') 但运行后,仍不能打开钱箱。 是否与我使用的myfll是老版本有关?但运行程序时,没有提醒不存在PrintStringDirect函数。 敬向您请教,应如何编程,可以打开钱箱?不胜感激!
ZJM811192 2017-08-11
  • 打赏
  • 举报
回复
都市夜猫老师: 十分感谢您的热情指导。 我按您介绍的以下命令语句运行: Set Library To myfll cmd = Chr(27)+'p'+Chr(0)+Chr(60)+Chr(255) PrintStringDirect(cmd, 'Pos58 Printer', 'LPT1') 但运行后,仍不能打开钱箱。 后来我检查了打印机与端口设置情况为: 打印机名:GP-58MBIII;
都市夜猫 2017-08-08
  • 打赏
  • 举报
回复
绝大部分钱箱都一样,就一简单的电磁线圈,通电就产生磁力把卡簧拉开,钱箱就被后面的弹簧弹出
POS 打印机都有一 RJ11 接口,通过它连接钱箱,收到开钱箱命令后,输出一个有一定时长的电脉冲,也就是给钱箱电磁线圈通会儿电
不同系列的打印机,开钱箱命令也不同,这个得看购买打印机时附带的手册,不过现在商家绝大部分都是经营与 POS58 兼容的 POS 打印机

1. 先安装 POS58 打印机驱动,默认安装会使用 LPT1 端口,也可以改用其他端口
2. 用 myfll 中的 PrintStringDirect 函数最简单,直接发开钱箱指令给打印机即可
Set Library To myfll
cmd = Chr(27)+'p'+Chr(0)+Chr(60)+Chr(255) && POS58 系列打印机开钱箱命令
PrintStringDirect(cmd, 'Pos58 Printer', 'LPT1')

也许你的打印机名不是 Pos58 Printer,端口也不一定是 LPT1,这些都是安装打印机驱动时确定的,可以在打印机设置中查看,例如我现在这台机上是这样:

可以看看上图中【基本设定】中的内容,也许选择其中的某些选项,就自动满足你的要求了
ZJM811192 2017-08-08
  • 打赏
  • 举报
回复
电脑专家: POS打印机通过USB接口连接到电脑,而钱箱通过RJ11接口连接到POS打印机,敬向电脑专家请教,如何用VFP命令编程来打开该台钱箱?不胜感激!
liups 2017-08-08
  • 打赏
  • 举报
回复
提醒楼主: rj11是电话的接口标准
都市夜猫 2017-08-07
  • 打赏
  • 举报
回复
跟钱箱没关系,明显是输出到打印机失败嘛 现在还有几台电脑有并口?大部分都是 USB 接口,你确信打印机是接在并口1上吗?

2,723

社区成员

发帖
与我相关
我的任务
社区描述
VFP,是Microsoft公司推出的数据库开发软件,用它来开发数据库,既简单又方便。
社区管理员
  • VFP社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧