mikrocontroller.net

Forum: PC-Programmierung Excel 2003 rsapi.dll und Messwerte


Autor: Christian J. (elektroniker1968)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ist jetzt 7 Jahre her, dass ich das mal gemacht habe und leider habe ich
die Projekte nicht mehr.

Hat jemand eine Grundlage (Excel Tabelle) in der einiges an VBA Code
untergebracht ist, zB die Ansteuerung von der rsapi.dll? Ich stehe etwas
wie Ochs vorm Berg die ersten Schritte wieder zu machen, weil ich alles
vergessen habe was mit VBA zu tun hat (nur noch C). Möchte eigentlich 
nur ein paar Daten über RS232 in einer Tabelle einschreiben. Die ersten 
Versuche mit der rsapi.dll endeten beim Aufruf von READSTRING mit einer 
Schutzverletzung die Excel ins Jenseits beförderte. Verwendet habe ich 
die 32 Bit Version von der Homepage von Burghard Kainka. Die lief vor x 
Jahren zumindest noch unter Windows 2000.

Falls jemand ein .xls Projekt hat, was mir als Basis dienen kann bitte 
senden
an admin@der-scirocco.de

Danke !

Christian

Autor: John Schmitz (student)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Christian J. wrote:
> Hallo,
>
> ist jetzt 7 Jahre her, dass ich das mal gemacht habe und leider habe ich
> die Projekte nicht mehr.
>
> Hat jemand eine Grundlage (Excel Tabelle) in der einiges an VBA Code
> untergebracht ist, zB die Ansteuerung von der rsapi.dll? Ich stehe etwas
> wie Ochs vorm Berg die ersten Schritte wieder zu machen, weil ich alles
> vergessen habe was mit VBA zu tun hat (nur noch C). Möchte eigentlich
> nur ein paar Daten über RS232 in einer Tabelle einschreiben. Die ersten
> Versuche mit der rsapi.dll endeten beim Aufruf von READSTRING mit einer
> Schutzverletzung die Excel ins Jenseits beförderte. Verwendet habe ich
> die 32 Bit Version von der Homepage von Burghard Kainka. Die lief vor x
> Jahren zumindest noch unter Windows 2000.
>
> Falls jemand ein .xls Projekt hat, was mir als Basis dienen kann bitte
> senden
> an admin@der-scirocco.de
>
> Danke !
>
> Christian

Hallo,

die folgenden VBA Zeilen (Auszug) funktionieren bei mir unter EXCEL 2003 
einwandfrei.
-------------------------------------------------------

Declare Sub OPENCOM Lib "RSAPI.DLL" (ByVal Parameter$)
Declare Function READBYTE Lib "RSAPI.DLL" () As Integer
Declare Sub TIMEOUT Lib "RSAPI.DLL" (ByVal ms%)
Declare Sub CLOSECOM Lib "RSAPI.DLL" ()
Declare Sub SENDBYTE Lib "RSAPI.DLL" (ByVal Ibyte As Byte)
Declare Sub DELAY Lib "RSAPI.DLL" (ByVal ms%)

Public Sub c_control()

    OPENCOM "COM1:9600,N,8,1"


    SENDBYTE Cells(1, 6).Value

    TIMEOUT 1000


    e1 = READBYTE
    If e1 < 0 Then
        MsgBox ("C-Control antwortet nicht -- Abbruch")
        GoTo ende1
    End If

    CLOSECOM
-----------------------------

Viel Erfolg

Autor: Christian J. (elektroniker1968)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

es tut sich auch bei mir was, nur mit READSTRING geht nichts. 
Einzelbytelesen klappt aber. Und der Startbutton, der das Ganze aktivier 
kommt nicht mehr hoch,. trotz DoEvents. Idee?
Dim e1 As Integer
    Dim textlaenge As Integer
    
    OpenCOM "COM1:57600,N,8,1"
    With ThisWorkbook.Sheets("Tabelle1").textfeld
        .SelStart = 0
        .Text = ""
        .ScrollBars = fmScrollBarsVertical
    End With
       
    
    ThisWorkbook.Sheets("Tabelle1").Activate
    'Columns("A:c").Select
    'Selection.ClearContents
    'Range("A1").Select
    
    timeout 10
    textlaenge = 0
    Do
        DoEvents
        IX_READSTRING 1, satz
        If (satz <> "") Then
            textfeld.Text = textfeld.Text + Chr(e1)
            textlaenge = textlaenge + 1
        End If
    Loop Until (textlaenge > 1000)
    CLOSECOM


PS: Geht langsam wieder, einmal gelernt muss es wohl erst aus dem 
Hinterstübchen reaktiviert werden :-) Nur setze ich immer noch ; hintere 
viele Zeilen, einfach aus Gewohnheit :-)

Autor: Christian J. (elektroniker1968)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nachsatz:

Ich habe 57600 baud eingestellt, die Sätze vom PIC trudeln auch ein und 
werden im Textfenster dargestellt:
back = OpenCOM("COM1:57600,N,8,1")
    If (back = 0) Then
        MsgBox ("Fehler beim Öffnen der Schnittstelle")
    End If
    
    'Columns("A:c").Select
    'Selection.ClearContents
    'Range("A1").Select
    
    timeout 10
    textlaenge = 0
    Do
        DoEvents
        wert = READBYTE
        If (wert > 0) Then
            textfeld.Text = textfeld.Text + Chr(wert)
            textlaenge = textlaenge + 1
            DoEvents
        End If
    Loop Until (stopflag = True)
    textfeld.Text = textfeld.Text + Chr(10) + "Übertragung gestoppt"
    DoEvents

Allersdings läuft das so wie zu Zeiten eines 2400baud Akkustikkopplers, 
die Zeichen trudeln mehr ein als dass die schlagartig da stehen, wie als 
wenn ich ein normales Terminalprogramm benutze.

Ist VBA echt derart langsam? :-(((

Autor: John Schmitz (student)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Christian J. wrote:
> Hallo,
>
> es tut sich auch bei mir was, nur mit READSTRING geht nichts.
> Einzelbytelesen klappt aber. Und der Startbutton, der das Ganze aktivier

Also, READSTRING kenne ich hier gar nicht. Meiner Erinnerung geht nur 
BYTEserielle Verarbeitung. Ist aber doch an sich kein Problem.

Bei mir ist VBA 'sauschnell'. Lese mit 115Kb/s ein ...!

Weißt Du zufällig, wie ich in VBA ein asynchrones READ aufsetzen kann ? 
Möchte VBA nicht im Dauerloop lesen lassen, sonder nur dann hochkommen 
lassen, wenn ein Zeichen zur Verarbeitung anliegt. Aber das geht aus 
EXCEL sicher nicht ...!

Geht das aus VBA ? Oder aus windows xp überhaupt ...?

Grüsse

Autor: Christian J. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Natürlich gibt es eine Interruptverarbeitung des UART Controllers, unter 
DOS war die leicht erreichbar, unter Windows 98 auch aber wie das jetzt 
mit XP ist weiss ich nicht. Hardware ist auf jeden Fall vorhanden.

Die rsapi.dll ist da allerdings sicherlich nicht die richtige Wahl, eher 
die mscomm.dll, die bei VB6 mit dabei ist. Und die werde ich auch 
künftig verwenden.

Alternative ist eine Timerstruktur, die zylisch eine Routine aufruft und 
den Puffer ausliest. Der Puffer kann ja recht gross eingestellt werden, 
so dass keine Zeichen verloren gehen.

Ich weiss allerdings nicht, ob das EXCEL VBA identisch ist mit VB6, bin 
da nicht der Experte.....

PS: Mein Empfang stürzt nach einer Weile einfach ab´.... heute morgen 
stand die Anwendung schon still.

Autor: Christian J. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hier steht wie das asynchrone Behandeln mit der mscomm geht:

http://www.vbarchiv.net/tipps/details.php?id=393

Und die werde ich mir heute abend mal aufspielen, ist im VB6 Paket mit 
drin, muss nur eingebunden werden, wobei ich hoffe, dass die API 
irgendwo steht, denn sonst sieht es bitter aus.

Autor: Christian J. (elektroniker1968)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nachsatz:

Falls Du noch mitliest: Wirf rsapi.dll weg und nimm die mscomm.dll aus 
VB6. Tausendmal schneller und viel komfortabler konfigurierbar! Vor 
allem wird ein konfigurierbares Empfangsereignis ausgelöst, damit fällt 
das Pollen weg.

Autor: Gerald (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wie kann ich die mscomm.dll dann verwenden?

lg

Autor: Gerald (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
woher bekomme ich die mscomm.dll ... hab schon mal gegoogelt aber in der 
dll waren keine sendefunktionen dabei...habs mit depends angeschaut!

Autor: vikot (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das ist nicht die MSCOMM.dll sondern die MSCOMM32.OCX die du einbinden 
musst.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.