Newsgroup: it.comp.lang.visual-basic
Titolo: Interfacciare Sweda Mikropos con Window Xp

Ciao a tutti.
Devo collegare il regigistratore di cassa Sweda con un pc Windows Xp.
Ho provato con due tecniche:
A) - utilizzando un driver (Barba.exe - che lavora in ms-dos) che
funziona tranquillamente in Windows 98, ma che non mi funziona con
windows Xp.
B) - utilizzando i comandi mscomm.
Con quest'ultima tecnica con una porta mi va sempre in errore (la porta
risulta essere già aperta o chiusa) mentre con la com2 non mi da
segnali di vita.
Qualcuno è in grado di aiutarmi?



Se cerchi con google gruppi trovi qualcosa a riguardo.
Fai una form con un mscomm, poi devi sapere cosa mandare...
Non ricordo se andava settato qualcosa sul registratore di cassa.
'[ricerco configurazione su INI]
If CommPort = 0 Then CommPort = 1
If CommSet = "" Then CommSet = "9600,N,8,1"
If FileSource = "" Then FileSource = "Send.txt"
If SleepTime = 0 Then SleepTime = 500
Dim ff As Integer, ff2 As Integer
Dim ss As String
Load frmMain
With frmMain
  .MSComm1.CommPort = CommPort
  .MSComm1.Settings = CommSet
  .MSComm1.InputLen = 0
  .MSComm1.PortOpen = True
  ff = FreeFile
  Open App.Path & "\" & FileSource For Input As ff
  ff2 = FreeFile
  Open App.Path & "\LogCassa.txt" For Output As ff2
  Do Until EOF(ff)
    Line Input #ff, ss
    If ss <> "" Then
      .MSComm1.Output = ss & Chr$(13)
      Sleep (SleepTime)
      Print #ff2, "-> " & ss
      Print #ff2, "<- " & .MSComm1.Input
    End If
  Loop
  Close #ff
  Close #ff2
  .MSComm1.PortOpen = False
End With
Unload frmMain
-- 
DBMS Firebird
VB6 + Ado

ti sono immensamente grato della risposta.
provero' subito.
Ma secondo te è un problema che io operi in access?
Bho speriamo bene.
grazie ancora

 Ma secondo te è un problema che io operi in access?
Io quel mini programmino l'ho fatto per partire da un file di testo.
Io ti consiglio di partire dallo stesso, ma cosa gli mandi alla cassa?
Dovrebe volere codici tipo:
KXCL
KR100R1 Vino
KR1* 
KR123R2 Pane
KR1* 
KR100R2 Farina
KXT1


innanzitutto ti ringrazio per l'aiuto, quando si è disperati è come
essere salvati dal fuoco.
ho visto un po' meglio il programmino esposto.
Per quanto riguarda i comandi non penso ci siano problemi , anche
perchè non mi servono comandi complicati.
il problema mi si presenta un po per l'uso di access.
la mscomm32.Ocx l'ho installata, quando inserisco il controllo nella
form di load mi appare un'icona con un telefono giallo (che opera solo
in modalità non visibile) spero sia corretta.
Per leggere il file di testo con la serie di comandi volevo usare (ci
sto provando in questi minuti)
 Microsoft Scripting Runtime (TextStream ecc.)
Ora il problema che mi si presenta un po' il convertire il visual basic
in access: perdonami l'ignoranza.
- ff2 = FreeFile che diavolo è???????
 e la funzione sleep o che diavolo sia è necessaria?
- ma è normale che anche se non ho un listato completo non mi vada in
errore? non è che questa ocx non funzioni su access?
domani mattina spero di esporti un po' il mio listato con le
impostazioni inserite vediamo se secondo te sbaglio e dove.
ciao.
spero di riuscire nel mio intento: mia sorella è convinta di poter
emettere scontrini dal primo di gennaio (povera illusa)

cIAO ANDREA, QUESTO è IL LISTATO:
Premesse:
impostazioni:
ComXonXoff
Buffer: ho lasciato quelli impostati nell'icona (1024,512)
Hardware: nessuna spunta
Tanto per sapere se sto usando gli strumenti corretti
Private Sub Form_Load()
  On Error GoTo Errore
Dim ff As Integer, ff2 As Integer
Dim ss As String
Dim fso As New FileSystemObject
Dim f_text As TextStream
Dim rigaRead As String
Dim Rx$
Dim StrFonte As String
StrFonte = "C:\Documents and
Settings\HP_Administrator\Desktop\SWATCH\rc.txt"
Set f_text = fso.OpenTextFile(StrFonte, ForReading)
With Me
        .Com1.Commport = 4 'seleziona la porta 4
        '"com1:2400,e,7,4,ds,cs"
        .Com1.Settings = "2400,n,7,1"  ' se4ttaggio farli sempre prima
dell'apertura
        .Com1.RThreshold = 1
        .Com1.InputLen = 0
        .Com1.PortOpen = True '   ' Apre la porta.
        If Err Then 'in caso di errore notifica all'utente
                    MsgBox "Impossibile aprire la com" & Com1.Commport
& vbCrLf & Error$
        End If
'        Com1.Output = "KXCL" & Chr(13) & "KX15000R1Flik Flak" 'attiva
il clear e vai a capo
        .Com1.InputMode = comInputModeText
    Do While Not f_text.AtEndOfLine
       rigaRead = f_text.ReadLine
       If rigaRead <> "" Then
            .Com1.Output = rigaRead & Chr$(13)
            Do
                DoEvents
                Rx$ = .Com1.Input 'leggo il contenuto del buffer di
ricezione e svuoto
                If Len(Rx$) Then
                    .text1.Text = .text1.Text & vbCrLf & Rx$
                End If
            Loop Until InStr(Rx$, Chr$(4))
       End If
    Loop
       f_text.Close
     .Com1.PortOpen = False
    End With 'Me
Exit_Errore:
    Exit Sub
Errore:
    MsgBox Err.Description
    Resume Exit_Errore
 End Sub
RISULTATO DEL LISTATO:
RIMANE AL PRIMO PASSAGGIO DENTRO IL. LOOP SEGUENTE E NON ESCE PIU:
            Do
                DoEvents
                Rx$ = .Com1.Input 'leggo il contenuto del buffer di
ricezione e svuoto
                If Len(Rx$) Then
                    .text1.Text = .text1.Text & vbCrLf & Rx$
                End If
            Loop Until InStr(Rx$, Chr$(4))
PER IL RESTO NON DA ERRORI
TI RINGRAZIO IN ANTICIPO

ieri finalmente sono riuscito a stampare un scontrino.
eseguendo il tuo listato con un eseguibile di vb6.
Ho fatto una piccola modifica: non sapendo cosa fosse sleep l'ho
variato con:
do
doevents
Buffer$= .mscomm1.input
Loop Until InStr(Buffer$, Chr$(4))
ti sono veramente grato, mi sono tolto un bel problema
ciao

 ti sono veramente grato, mi sono tolto un bel problema
Bhe se non ti da problemi può andare.
In ogni caso all'OnComm ti arriva l'input come evento
Private Sub MSComm1_OnComm()
	Debug.Print MSComm1.Input
End Sub
Per lo sleep ti basta dichiarare:
Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Io in quel piccolo progettino prova credo che mandassi in out la stringa,
per vedere cosa mi rispondeva (con debug.print all'oncomm).
Lo sleep serviva forse per aspettare la risposta e non inviare troppa roba
insieme.
chr$(4) immagino sia il carattere di OK della cassa, sinceramente non lo
ricordavo.
Ciao


caro Andrea  come sempre grazie e ti auguro buone feste.