我现在收银系统设计,软件上面存储和打印没有什么问题了,但是没有与钱箱,顾客显示器和POS刷卡机联用过,想请教一些有经验的高手们给我一些建议!  软件是用c#写的,数据库是用sqlserver2005,我本是想收银系统安装在一台配置和屏幕大点的电脑上面,然后钱箱和顾客显示器和POS刷卡机这种单独分开来,这样是可行的吗?  然后通过什么办法用C#直接调用这些外设,能否给个DEMO给我的,,QQ:517590840  感激不尽,

解决方案 »

  1.   

    钱箱的接口要包括3个部分:
    1. 能够打开钱箱。
    2. 返回一个属性说明钱箱是否有检测状态的能力。
    3. 返回钱箱当前是打开还是关闭状态。(如果有检测状态能力的话)通常,只要瞬间给钱箱一个12V的电流(让一小块电磁铁短暂地产生磁力搬开挂钩),钱箱就弹开了。基本上这都是通过POS打印机输出的电流。因此编程上往往是通过给你所选配的POS打印机发送一个ESC/POS命令来打开钱箱。不过在设计软件接口时可以不管这个,这毕竟只是底层实现。
    顾客显示牌的接口至少要包括5个部分:
    1. 获取宽度信息。
    2. 获取行数信息。
    3. 获取是否能打印中文的能力。(是否有硬件中文字库支持)
    4. 获取是否能打印引文字母的能力。(如果连英文字母都不能显示,就只能显示数字和小数点了)
    5. (刷新)显示一行或者多行内容。它也可能是通过POS打印机来驱动的,也可能是直接连在你的主机的串口或者USB上。不过这也是具体底层实现时的东西。你的软件应该通过接口来操作,比如根据显示牌的能力,在开机或者闲置一段时间时,显示中文或者英文的“欢迎光临xxxxx商场”之类的信息;以及根据显示牌的宽度、行数等能力,显示不同的布局。比如一行显示“单价     5.90”,一行“总计     230.80”。POS打印机的接口基本上要有几个部分功能:
    1. 定位到下一张发票头。(当打印机有光传感器支持黑表检测定位功能,并且发票纸上有黑标时)
    2. 切纸。(可能还会区分为全切还是只切掉大部分)
    3. 换行+回车。
    4. 设定字体大小放大倍数。
    5. 打印一行文字(包括使用硬字库打印中文)
    6. 打印一个点阵图片。同时可能需要支持一些能力描述属性,比如是否支持黑标定位、是否支持切纸、是否支持打印点阵图片、是否支持放大的字体、每一行有多宽、是否支持黑体加粗显示、是否支持检测发票纸即将用尽(红标定位),等等。你的程序可以根据打印机能力不同,而为不同的用户产生不同的打印布局和效果。同样,这只要在接口中定义出来,至于打印机如何实现,那是实现这个接口的事情。你可以先用一个测试用class来实现这个接口,比如只是把操作日志记录到文本文件里,以此来模拟打印机。不知道目标设备的能力,完全可以预先设计好开发接口。然后拿来具体的设备的驱动手册,根据其操作控制方法来写出上述接口的不同的实现。在程序中,通过配置文件可以分别标识上述设备的驱动名称(以及所在的assembly名称),然后程序可以使用反射的方式动态加载不同的驱动。
      

  2.   

    现在的POS软件越做越烂,许多都是因为程序员不去了解行业知识所为。比如过去比较规范的商业程序,要求在钱箱打开时是不能输入商品销售信息的。再比如说怎样能够让收银员很少地按键就能录入商品,如何防止收银员故意输错数量信息,如果让其不能很方便地作废个别输入信息等等。而现在的程序员把POS商业操作专业知识能省则省,完全用编程者的思维来指挥用户,已经很少能够看到比较专业的POS程序了。
      

  3.   

    刷卡机基本上没有什么编程接口,它与条码扫描类似,软件上是看作用户在用键盘录入信息的。只不过,你的软件可能要是实时地在销售记录中识别会员卡类别,或者银行卡类别(比如以此知道银行向商场所扣的手续费是多少),等等。不过这些都跟设备驱动没有什么关系。而银行的POS即通常不接在收银机上与收银系统连,所以通常也不用考虑驱动它。
      

  4.   


    你的建议很好,感谢您的回复,我先理解一下你所说的"不知道目标设备的能力,完全可以预先设计好开发接口。然后拿来具体的设备的驱动手册,根据其操作控制方法来写出上述接口的不同的实现。在程序中,通过配置文件可以分别标识上述设备的驱动名称(以及所在的assembly名称),然后程序可以使用反射的方式动态加载不同的驱动。"