JBTALKS.CC

标题: 让cash drawer打开的CODE...VB.NET [打印本页]

作者: whakak    时间: 2010-10-12 09:29 AM
标题: 让cash drawer打开的CODE...VB.NET
我在网上之找到LPT和COM PORT的CODE....找不到USB的...

现在CASH DRAWER只能通过打印才会打开...要怎样控制它自己打开?
作者: johnnytan1982    时间: 2010-10-13 08:51 AM
通常第三方硬件都会提供api让你的软件控制他的硬件function.我以前使用过指纹机,我需要透过第三方提供的api控制指纹机,cash drawer应该也是如此吧?问问你的硬件提供商有没有api.
作者: TSHsoft    时间: 2010-10-13 09:34 PM
不用batch files的方法

Option Strict Off
Option Explicit On
Imports System.IO
Imports System.Runtime.InteropServices

Friend Class Form1Class Form1
    Inherits System.Windows.Forms.Form

    Public Const GENERIC_WRITE = &H40000000
    Public Const OPEN_EXISTING = 3
    Public Const FILE_SHARE_WRITE = &H2

    Dim LPTPORT As String
    Dim hPort As Integer

    Public Declare Function CreateFile()Function CreateFile Lib "kernel32" Alias "CreateFileA" ( _
    ByVal lpFileName As String, ByVal dwDesiredAccess As Integer, _
    ByVal dwShareMode As Integer, _
    <MarshalAs(UnmanagedType.Struct)> ByRef lpSecurityAttributes As SECURITY_ATTRIBUTES, _
    ByVal dwCreationDisposition As Integer, ByVal dwFlagsAndAttributes As Integer, _
    ByVal hTemplateFile As Integer) As Integer

    Public Declare Function CloseHandle()Function CloseHandle Lib "kernel32" Alias "CloseHandle" (ByVal hObject As Integer) As Integer
    Dim retval As Integer
    <StructLayout(LayoutKind.Sequential)> Public Structure SECURITY_ATTRIBUTESStructure SECURITY_ATTRIBUTES
        Private nLength As Integer
        Private lpSecurityDescriptor As Integer
        Private bInheritHandle As Integer
    End Structure

    Private Sub Command1_Click()Sub Command1_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles  Command1.Click
        Dim SA As SECURITY_ATTRIBUTES
        Dim outFile As FileStream, hPortP As IntPtr

        LPTPORT = "LPT1"
        hPort = CreateFile(LPTPORT, GENERIC_WRITE, FILE_SHARE_WRITE, SA, OPEN_EXISTING, 0, 0)

        hPortP = New IntPtr(hPort) 'convert Integer to IntPtr
        outFile = New FileStream(hPortP, FileAccess.Write) 'Create FileStream using Handle

        Dim fileWriter As New StreamWriter(outFile)
        fileWriter.Write(Chr(7))
        fileWriter.Flush()
        fileWriter.Close()
        outFile.Close()
        retval = CloseHandle(hPort)
    End Sub
End Class
作者: shippo    时间: 2010-10-13 10:34 PM
erm,小弟无知,我以为cash drawer 也是hardware depedent的?
楼上的怎么会用一个fileWriter.Write(Chr(7))?Bell?
作者: 宅男-兜着走    时间: 2010-10-14 03:12 AM
不用batch files的方法

Option Strict Off
Option Explicit On
Imports System.IO
Imports System.Ru ...
TSHsoft 发表于 2010-10-13 09:34 PM


开Drawer的句子呢?
作者: TSHsoft    时间: 2010-10-14 09:07 PM
开Drawer的句子呢?
宅男-兜着走 发表于 2010-10-14 03:12 AM


在上面了啊~ .net的比较麻烦的,我没亲自试过。
vb6的我就测试过没问题,而且更简单。

'vb6 code - open drawer
Open "LPT1" For Output As #1
Print #1, Chr$(27); Chr$(112); Chr$(0)
Close #1
作者: TSHsoft    时间: 2010-10-14 09:15 PM
erm,小弟无知,我以为cash drawer 也是hardware depedent的?
楼上的怎么会用一个fileWriter.Write(Chr(7) ...
shippo 发表于 2010-10-13 10:34 PM


chr(7)是send给printer的指令,因为drawer是要借由printer才能够开钱箱的。
drawer有一条像电话线的线衔接printer的。

.net的我没有试验过(因为没有安装.net),上面的是从网络上找来的。指令send对了,钱箱一定能开的。指令通常会在printer的说明书里。
printer指的是收据印表机。
作者: shippo    时间: 2010-10-14 10:11 PM
本帖最后由 shippo 于 2010-10-14 10:12 PM 编辑

回复 7# TSHsoft

erm,
第一你不应该上传没测试过的code,重点是你的code不完整。
第二你不应该assume它的hardware接法跟你的一样,虽然多数的接法如你所说,我们需要send一个或多个control code 给printer,printer 再 send impulse 给drawer 来打开。
第三你应该先注明ascii 7的用途,据我所知不是每架default都用bell来开启,应该会有个dip switch 来调节相应的ascii control open code.

小弟浅见,多多包涵。
作者: shippo    时间: 2010-10-14 10:23 PM
至于楼主的问题,据我所知vb6orvb.net并没有把usb 和 comport区别开来,他们同属一个serial port control object.

例子:如果你有两个rs232 port和两个usb port,通常你的rs232 port name是COM1 和 COM2.你的usb port name 是COM3 和 COM4 (不会叫USB1 or USB2).

你不需要在乎它是一个rs232还是usb,任何情况你都能用serialport来完成,当然你必须send一个command给你的printer。
你需要的只是打开serial port>>send 相应的code.
作者: 宅男-兜着走    时间: 2010-10-14 10:42 PM
至于楼主的问题,据我所知vb6orvb.net并没有把usb 和 comport区别开来,他们同属一个serial port control ob ...
shippo 发表于 2010-10-14 10:23 PM


重点是你要怎么知道要 send 什么东西过去?

Hardware 每个的 Design 都不一样吧
作者: shippo    时间: 2010-10-14 11:20 PM
dengdengdeng,楼上正解.

它的open control code是什么,我不知你不知看来楼主也不知。
作者: TSHsoft    时间: 2010-10-15 09:55 PM
回复  TSHsoft

erm,
第一你不应该上传没测试过的code,重点是你的code不完整。
第二你不应该assume它 ...
shippo 发表于 2010-10-14 10:11 PM


我只是找一个.net的code给楼主,希望可以帮到他。  
不好意思,我没有时间测试.net的code,如果我的code不完整,那你就给个完整的code给楼主吧
vb6的code我测试过没问题,但我知道直接在.net上执行会error。
具体要send什么指令,所以我说要看printer的说明书了咯,因为每个printer的指令可能都不同的。
作者: TSHsoft    时间: 2010-10-15 10:01 PM
dengdengdeng,楼上正解.

它的open control code是什么,我不知你不知看来楼主也不知。
shippo 发表于 2010-10-14 11:20 PM


如果你知道的话,就把code写出来吧~
重点如你所说,一定要测试过噢!
作者: shippo    时间: 2010-10-15 11:28 PM
lol,楼上怎么酸酸的。


第一,不提供任何帮助因为搂主的问题含糊。
基本上我们可以把cash drawer归为两种,一种是用cord-end rj-11 plug连接receipt printer,另一种是直接用serial port 接上电脑的。
搂主说道他有个usb 接电脑,又说有个printer(注意receipt printer 跟 normal printer是不一样的)。
如果是receipt printer,不明白为什么他还有个usb cable,还是说他的receipt printer 是用usb 的。

第二,没上传任何code,像我说的,任何未经测试的code不应该当成solution.所以其他大大也没帮忙,我看最大的原因是大家都没有个cash drawer 在身旁,lol。

第三,任何回复都是为了分享讨论技术,小弟如有得罪多多包涵啊。。
作者: shippo    时间: 2010-10-15 11:42 PM
如果是usb的话。

加入一个serialport control(win form).
在property调入正确的baud rate,stop bit,...etc.
serialport1.open()
serialport1.writeline("//control code here")
作者: 宅男-兜着走    时间: 2010-10-16 12:07 AM
如果是usb的话。

加入一个serialport control(win form).
在property调入正确的baud rate,stop bit,... ...
shippo 发表于 2010-10-15 11:42 PM


你这 Code ...
会不会有些 Drawer 是send Electric signal 的
作者: 宅男-兜着走    时间: 2010-10-16 12:10 AM
lol,楼上怎么酸酸的。


第一,不提供任何帮助因为搂主的问题含糊。
基本上我们可以把cash drawer归为 ...
shippo 发表于 2010-10-15 11:28 PM


我都认同你说的, 可是我更认同的是
第二,没上传任何code,像我说的,任何未经测试的code不应该当成solution.所以其他大大也没帮忙,我看最大的原因是大家都没有个cash drawer 在身旁,lol。



所以总结是, 楼主给的咨询不足, 我们也无法帮到。
作者: shippo    时间: 2010-10-16 12:59 AM
回复 16# 宅男-兜着走


所以这种我们就能归类为第一种接上receipt printer的类型的.
printer会send impulse来开关drawer的solenoid.

重点是还是一样用send string 的方法,只是这次是send 给receipt printer.

我知道你说的elc signal,就是说可能要打开某个pin还是接通某个address对吧,没有提供api是不可能的咯。
不过这类end product 不会做到那么不user friendly 的,不然没人要买了,lol.
作者: 宅男-兜着走    时间: 2010-10-16 02:27 AM
回复  宅男-兜着走


所以这种我们就能归类为第一种接上receipt printer的类型的.
printer会send imp ...
shippo 发表于 2010-10-16 12:59 AM


对, 就某个 Pin 然后接受到 Elc signal 就会开了 ==
不过我只是猜想是不是会有, 但是不排除没有。
所以我才会问你啊~

只是我还不知道原来receipt printer 也那么高级的哦 , 会接收string。
但是会接收, 也意味着会判断。

所以会判断的话就不可能只是随便send 一句string 过去了就打开。
所以LZ的问题还是没解决。
作者: TSHsoft    时间: 2010-10-16 02:52 PM
lol,楼上怎么酸酸的。


第一,不提供任何帮助因为搂主的问题含糊。
基本上我们可以把cash drawer归为 ...
shippo 发表于 2010-10-15 11:28 PM


刚吃了一粒酸的橙~~~呵呵!
我身边drawer是普通那种,不是usb的。没法测试到楼主真正要的。
只是想提供一些资料供楼主测试,因为每一个人身边不一定都有所有设备的嘛~写程式都是从错误中走过来的,有方法试试好过没有头绪,只是usb的不知道可不可以。。。
如果只是认为不可以,却不试试看,哪里知道结果呢?有时候在没办法的时候,try and error也是必要的。




欢迎光临 JBTALKS.CC (https://jbtalks.my/) Powered by Discuz! X2.5