collapse

* Benutzer Info

 
 
Willkommen Gast. Bitte einloggen oder registrieren. Haben Sie Ihre Aktivierungs E-Mail übersehen?

* Wer ist Online

  • Punkt Gäste: 54
  • Punkt Versteckte: 0
  • Punkt Mitglieder: 0

Es sind keine Mitglieder online.

* Forenstatistik

  • stats Mitglieder insgesamt: 13702
  • stats Beiträge insgesamt: 62196
  • stats Themen insgesamt: 8474
  • stats Kategorien insgesamt: 5
  • stats Boards insgesamt: 16
  • stats Am meisten online: 415

Autor Thema: API für serielle Schnittstelle RS232 z.B. COM1  (Gelesen 104 mal)

Offline Peter.29

  • Newbie
  • Beiträge: 4
API für serielle Schnittstelle RS232 z.B. COM1
« am: Oktober 02, 2017, 13:28:13 »
Hallo Checker,

ich möchte über Access2010ff und Win7/10 die serielle Schnittstelle RS232 z.B. COM1 bedienen.
>> Hat jemand eine Idee oder noch besser ein Beispiel, wie man die API-Funktion in Access2010 einbinden kann ????
u.a. Welche Verweise muss ich im VBA-Modul selektieren und Wie muss ich die Funktion deklarieren ?

Bisher verwendete ich die XMCommVBA.ocx (im Beispiel:"Me.MSComm."), die nicht mehr unterstützt wird.
Die Kommunikation ging einfach:

1) "output" senden
2) mit Timer die Daten des Geräts in das Textfeld "Antwort" schreiben bis nix mehr kommt.
------------
Private Sub Senden_Click()
Dim Buffer As String

'Schnittstelle öffnen
Me.MSComm.Interval = 55
Me.MSComm.PortOpen = True

'Befehlsstring an das Gerät senden.
Me.MSComm.output = "WER?" + Chr(13) + Chr(10)

Me.Form.TimerInterval = 2000
Me.Antwort = ""

' *** weiterer Ablauf in Form_Timer

End sub
---------------------
Private Sub Form_Timer()
Dim L As Long
L = Len(Me.Antwort)
Me.Antwort = Me.Antwort & MSComm.Input
If Len(Me.Antwort) = L Then
 Me.Form.TimerInterval = 0
  'Port schließen
    Me.MSComm.PortOpen = False
End If
End Sub
--------------------

COM-Einstellungen:
Me.MSComm.CommPort = 1
Me.MSComm.Settings = "9600,N,8,1" 'Baudrate Parity Datenbits Stopbits
Me.MSComm.RTSEnable = 0
Me.MSComm.DTREnable = 0

Hiiiiiiilfe
VG
 

Offline Beaker s.a.

  • Access Guru
  • ****
  • Beiträge: 1493
Re: API für serielle Schnittstelle RS232 z.B. COM1
« Antwort #1 am: Oktober 02, 2017, 13:39:30 »
Hallo Peter,
Ich verstehe nix von Hardware-Schnittstellen, habe aber die Tage dieses
hier gelesen. Vielleicht hilft es ja, wenn es kein X-Post ist.
http://www.ms-office-forum.net/forum/showthread.php?t=346279
gruss ekkehard
--
Beaker s.a., der lieber an seinem eigenen Projekt arbeiten würde/sollte, aber irgendwie immer gerne seinen Senf dazu gibt ;-)
S.M.I².L.E.
 

Offline Peter.29

  • Newbie
  • Beiträge: 4
Re: API für serielle Schnittstelle RS232 z.B. COM1
« Antwort #2 am: Oktober 02, 2017, 14:40:37 »
Servus Ekkehard,
vielen Dank für Deine schnelle Antwort.
Die Möglichkeit, die COM-Schnittstelle als Datei anzusprechen ist ein guter Tipp.
Zum Kommunizieren mit Text-Steuerzeichen aber für mich nicht ideal.
Eine API-Lösung würde mir besser gefallen.
Viele Grüße, Peter
 

Offline Beaker s.a.

  • Access Guru
  • ****
  • Beiträge: 1493
Re: API für serielle Schnittstelle RS232 z.B. COM1
« Antwort #3 am: Oktober 02, 2017, 14:51:58 »
Hallo Peter,
Sorry, weitere Hilfe kann ich bei dem Thema leider nicht leisten.
gruss ekkehard
--
Beaker s.a., der lieber an seinem eigenen Projekt arbeiten würde/sollte, aber irgendwie immer gerne seinen Senf dazu gibt ;-)
S.M.I².L.E.
 

Offline Lachtaube

  • Access-Meister
  • ***
  • Beiträge: 728
Re: API für serielle Schnittstelle RS232 z.B. COM1
« Antwort #4 am: Oktober 02, 2017, 14:53:48 »
Grüße von der (⌒▽⌒)
 

Offline Peter.29

  • Newbie
  • Beiträge: 4
Re: API für serielle Schnittstelle RS232 z.B. COM1
« Antwort #5 am: Oktober 02, 2017, 15:29:16 »
Danke @ Ekkehard + Lachtaube

boooh, meterlanger Code
Den hau ich in ein Modul rein und probier's mal.
 :-\

VG.
 

Offline markus888

  • Access-Profi
  • **
  • Beiträge: 163
Re: API für serielle Schnittstelle RS232 z.B. COM1
« Antwort #6 am: Oktober 02, 2017, 17:14:28 »
Danke @ Ekkehard + Lachtaube

boooh, meterlanger Code
Beide Codes arbeiten grundsätzlich auf die selbe weise.
Nur bietet der File-Zugriff via API umfassende Möglichkeiten im Gegensatz zu den implentierten VBA Methoden.
LG Markus
10 Jahre Access
 

Offline Peter.29

  • Newbie
  • Beiträge: 4
Re: API für serielle Schnittstelle RS232 z.B. COM1
« Antwort #7 am: Oktober 05, 2017, 15:27:08 »
API funkzt !
Hab' den "API" Link von Lachtaube verwendet und nach meinen Bedürfnissen angepasst:
----------------
'Aufruf der Sub:
V0_WR232 = "Hello World" + Chr(13) + Chr(10) + "i bins"
Init_Com "COM1"

'zusätzliche eingefügte Variablen zur Datenübergabe
Global V0_RD232 As String  ' da stehen dann die empfangenen Daten drin
Global V0_WR232 As String  ' z.B. V0_WR232 = "Hello World" + Chr(13) + Chr(10) + "i bins"
Global V0_RDBytes As Integer 'Anz. empfangener Bytes

'Änderungen an der Sub: -----------------------------
'COMPO: Übergabe COM-Port mit Sub-Aufruf z.B. init_com "COM1"
Public Sub Init_Com(COMPO As String)

'....
    V0_RD232 = "" 'globale Übergabe-Variablen für RD Daten rücksetzen
    V0_RDBytes = 0

    Dim fina As String 'filename
    fina = "\\.\" & COMPO
    h = CreateFile(fina, GENERIC_READ Or GENERIC_WRITE, 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0)
'....
    d.BaudRate = 9600      'an Gerät anpassen
    d.StopBits = ONESTOPBIT
    d.Parity = NOPARITY
'...
    timeouts.ReadIntervalTimeout = 50  'The max. time in milliseconds between arrival of any two bytes
    timeouts.ReadTotalTimeoutConstant = 5000 '=5 Sekunden The max. time the ReadFile() function will wait for data.
'....

 Dim sendtxt As Variant
 sendtxt = V0_WR232  'von Übergabevariable
   
 Dim sWrite(1 To 100) As Byte 'Einzelzeichen des String zum Schreiben <100 Zeichen ggf. erhöhen
    Dim j As Long
    For j = 1 To Len(sendtxt)
      sWrite(j) = Asc(Mid(sendtxt, j, 1))
    Next j

'...

   'nicht benutzt:
 '  rc = WriteFile(h, bWrite(1), 6, wr, 0) 'wr indicates how many bytes went to the port.
   'dafür:
    rc = WriteFile(h, sWrite(1), Len(sendtxt), wr, 0) 'wr indicates how many bytes went to the port.

'...
    Dim bRead(1 To 65500) As Byte  'We want to receive up to 65500 bytes.
    rc = ReadFile(h, bRead(1), 65500, rd, 0) 'rd indicates how many bytes received from the port.
'...

'sData = StrConv(bData, vbUnicode)
    Dim s As String
    Dim i As Long
    For i = 1 To rd
'     s = s & Hex(bRead(i)) & " " ersetzt
      s = s & Chr(bRead(i))
    Next i

' Empfangene String-Daten in Variablen zur Datenübergabe schreiben
    V0_RD232 = s
    V0_RDBytes = rd
 --------------------   
Danke nochmal !  bb