Pergunta

Alguma idéia de como eu posso melhor dirigir uma impressora USB POS do c #. POS impressoras são geralmente de série, TCP / IP ou USB baseada. Eu sei como realizar de série e TCP / IP, mas não tem idéia sobre comunicações através de USB em C #. Eu sei que há uma camada disponibilizado pela Microsoft chamado POS.NET, mas eu quero tentar e evitar o uso deste. Qualquer idéias ou quaisquer # bibliotecas C que as pessoas pode recomendar seria muito apreciada. Graças

Foi útil?

Solução

Você realmente deve considerar o uso de POS para .NET e objetos de serviço OPOS ou .NET (Epson, por exemplo fornece ambos). POS para .NET está em conformidade com o padrão da indústria UnifiedPOS para fazer a interface com esses dispositivos.

Outras dicas

Se o próprio registros da impressora como um dispositivo de interface humana, você pode P / INVOKE para o Win32 APIs apropriada . Aqui estão as assinaturas:

    [ DllImport( "hid.dll", SetLastError=true ) ]
    public static extern Boolean 
    HidD_FlushQueue( SafeFileHandle HidDeviceObject );        

    [ DllImport( "hid.dll", SetLastError=true ) ]
    public static extern Boolean 
    HidD_FreePreparsedData( ref IntPtr PreparsedData );        

    [ DllImport( "hid.dll", SetLastError=true ) ]
    public static extern Boolean 
    HidD_GetAttributes(  SafeFileHandle HidDeviceObject
                       , ref HIDD_ATTRIBUTES Attributes );        

    [ DllImport( "hid.dll", SetLastError=true ) ]
    public static extern Boolean 
    HidD_GetFeature(  SafeFileHandle HidDeviceObject
                    , ref Byte lpReportBuffer
                    , Int32 ReportBufferLength );        

    [ DllImport( "hid.dll", SetLastError=true ) ]
    public static extern Boolean 
    HidD_GetInputReport( SafeFileHandle HidDeviceObject
                        ,ref Byte lpReportBuffer
                        ,Int32 ReportBufferLength );        

    [ DllImport( "hid.dll", SetLastError=true ) ]
    public static extern void HidD_GetHidGuid( ref System.Guid HidGuid );

    [ DllImport( "hid.dll", SetLastError=true ) ]
    public static extern Boolean 
    HidD_GetNumInputBuffers(  SafeFileHandle HidDeviceObject
                            , ref Int32 NumberBuffers );        

    [ DllImport( "hid.dll", SetLastError=true ) ]
    public static extern Boolean 
    HidD_GetPreparsedData( SafeFileHandle HidDeviceObject
                          ,ref IntPtr PreparsedData );

    [ DllImport( "hid.dll", SetLastError=true ) ]
    public static extern Boolean 
    HidD_SetFeature(  SafeFileHandle HidDeviceObject
                    , ref Byte lpReportBuffer
                    , Int32 ReportBufferLength );

    [ DllImport( "hid.dll", SetLastError=true ) ]
    public static extern Boolean 
    HidD_SetNumInputBuffers( SafeFileHandle HidDeviceObject
                            ,Int32 NumberBuffers );

    [ DllImport( "hid.dll", SetLastError=true ) ]
    public static extern Boolean 
    HidD_SetOutputReport( SafeFileHandle HidDeviceObject
                         ,ref Byte lpReportBuffer
                         ,Int32 ReportBufferLength );

    [ DllImport( "hid.dll", SetLastError=true ) ]
    public static extern Int32 
    HidP_GetCaps( IntPtr PreparsedData, ref HIDP_CAPS Capabilities );

    [ DllImport( "hid.dll", SetLastError=true ) ]
    public static extern Int32 
    HidP_GetValueCaps(  Int16 ReportType
                      , ref Byte ValueCaps
                      , ref Int16 ValueCapsLength
                      , IntPtr PreparsedData );

Há um C # wrapper para Win32 USP api do dos caras icsharpcode aqui , e Eu vi pelo menos um outra referência a coisas USB em .Net.

O que pode ser complicado é se ou não a impressora exige OPOS para funcionar. Eu fiz algum trabalho em um projeto de POS em .Net alguns anos atrás, e pelo que eu me lembro OPOS é muito bonito o padrão para o lado do hardware das coisas (E no momento em que todas as APIs OPOS utilizada interoperabilidade). Os dispositivos, por vezes, também têm um protocolo de comunicação proprietária documentado, caso em que você deve ser capaz de utilizar isso para falar com o dispositivo usando a biblioteca USB.

Se você já rolou seu próprio código de controle da impressora, em seguida, você pode passar os comandos diretamente para a impressora, a configuração da impressora utilizando o "texto genérico /" driver de impressora na porta USB. Aquele motorista não vai voltar a interpretar os códigos de controle e tentar imprimi-los, mas ela só vai entregá-las para a impressora como está.

Em seguida, a porta USB pode ser usado como qualquer outra impressora.

Esta abordagem funcionou para mim em um sistema POS que eu desenvolvi.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top