Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Ergebnis 1 bis 8 von 8

Thema: Libnodave und Excel

  1. #1
    Registriert seit
    20.04.2006
    Beiträge
    87
    Danke
    120
    Erhielt 27 Danke für 17 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,

    Ich habe eine kleine Frage zum Aufruf von Makros uner Excel.
    Ich will mit Libnodave Werte aus DBs in mehrere Exceldateien kopieren um danach Kurven zu generieren.

    Wenn ich Excel nur einmal starte und das Makro anstoße klappt das auch alles wunderbar.
    Nur will ich jetzt gerne das Excel mehrmals öffnen und gleichzeitig von anderen DBs auslesen. --> Ich kann kein weiteres Makro starten
    gibt es eine Möglichkeit gleichzeitig die Makros aus mehreren Excel-Dateien zu starten?

    MfG Joe
    Zitieren Zitieren Libnodave und Excel  

  2. #2
    Avatar von Joe
    Joe ist offline Administrator
    Themenstarter
    Registriert seit
    20.04.2006
    Beiträge
    87
    Danke
    120
    Erhielt 27 Danke für 17 Beiträge

    Standard

    Hallo,

    ich habe das mit den Makros jetzt soweit unter Kontrolle, bin jetzt dran Strings aus einem DB zu lesen.
    Gibt es dafür einen Befehl, der mir einen String mit z.B. 22 Byte ausliest?
    Mit daveGetU16, kann ich ja immer nur 2 Byte auslesen.

  3. #3
    Registriert seit
    19.06.2003
    Beiträge
    2.200
    Danke
    85
    Erhielt 259 Danke für 175 Beiträge

    Standard

    Zitat Zitat von JOE Beitrag anzeigen
    Gibt es dafür einen Befehl, der mir einen String mit z.B. 22 Byte ausliest?
    daveReadBytes(dc, daveDB, <DBnummer>, 22, null)
    liest die 22 Bytes des Strings, wobei alle Bytes auf einmal aus der CPU geholt werden. Weiß jetzt nicht, wie Siemens-Strings aufgebaut sind, mit Längenangabe am Anfang (wie in Pascal) oder mit 0 Byte am Ende (wie in C), aber eventuell solltest du diese Bytes auch auslesen.
    Zitat Zitat von JOE Beitrag anzeigen
    Mit daveGetU16, kann ich ja immer nur 2 Byte auslesen.
    Die Funktionen daveGetU8, daveGetU16 etc. kopieren lediglich Bytes von einem internen Puffer in eine Zielvariable. Sie sind sehr schnell. Um einzelne Bytes (Zeichen eines Strings) zu lesen, ist daveGetU8 zu benutzen. daveGetU16 würde dier ja zwei Zeichen ('A', 'B') zu einem Wort (256*65+66) zusammenfassen. Die Zielvariable dann als Zeichen an einen BASIC-String anhängen.
    Dies ist der "sichere" Weg. Ich kenne die interne Datenstruktur eines BASIC-Strings nicht. In C könnte man z.B. einen String (char[maxlen] str als Puffer an daveReadBytes übergeben:
    daveReadBytes(dc, daveDB, <DBnummer>, 22, &str);
    und dann die 0 zum Abschluß dranhängen:
    str[22]=0;

  4. #4
    Avatar von Joe
    Joe ist offline Administrator
    Themenstarter
    Registriert seit
    20.04.2006
    Beiträge
    87
    Danke
    120
    Erhielt 27 Danke für 17 Beiträge

    Standard

    Super, Dankeschön.
    Habe es jetzt so realisiert:

    Code:
    Cells(1, 1) = StringAuslesen(leng = 30, DB = 200, start = 2)
    Code:
    Private Function StringAuslesen(ByRef leng As Integer, ByRef DB As Integer, ByRef start As Integer) As String
    res2 = daveReadBytes(dc, daveDB, DB, start, leng, 0)
    V4 = ""
    up = 0
    On Error Resume Next
    Do While up < laenge
    DoEvents
    V4 = V4 & String(1, daveGetU8(dc))  'Die Funktion String schreibt mir das richtige Zeichen, abhängig vom ausgelesenen Wert
    up = up + 1
    Loop
    StringAuslesen = V4
    End Function
    Ich habe zwar noch kleine Probleme mit dem Aufruf, da schmiert mir Excel immer ab, wenn ich den Code ohne die Funktion einfüge geht es super.

  5. #5
    Registriert seit
    27.10.2005
    Ort
    Schwäbisch Gmünd
    Beiträge
    5.224
    Danke
    630
    Erhielt 955 Danke für 769 Beiträge

    Standard

    Zitat Zitat von Zottel Beitrag anzeigen
    Weiß jetzt nicht, wie Siemens-Strings aufgebaut sind, mit Längenangabe am Anfang (wie in Pascal) oder mit 0 Byte am Ende (wie in C), aber eventuell solltest du diese Bytes auch auslesen.
    Das erste Byte enthält die maximale Länge
    Das zweite Byte enthält die belegte Länge
    Danach kommen dioe "Nutzdaten"
    Rainer Hönle
    DELTA LOGIC GmbH

    Ein Computer kann das menschliche Gehirn nicht ersetzen. Engstirnigkeit kann unmöglich simuliert werden. (Gerd W. Heyse)

  6. #6
    Registriert seit
    27.10.2005
    Ort
    Schwäbisch Gmünd
    Beiträge
    5.224
    Danke
    630
    Erhielt 955 Danke für 769 Beiträge

    Standard

    Zitat Zitat von JOE Beitrag anzeigen
    Ich habe zwar noch kleine Probleme mit dem Aufruf, da schmiert mir Excel immer ab, wenn ich den Code ohne die Funktion einfüge geht es super.
    In der Funktion wird die Variable "laenge" verwendet. Wo wird die definiert? Wo und wie ist "daveDB" definiert? Sollten die Werte nicht daraus statt aus "dc" gelesen werden? Was passiert bei der Einzelschrittbearbeitung? Wo klemmt es da?
    Rainer Hönle
    DELTA LOGIC GmbH

    Ein Computer kann das menschliche Gehirn nicht ersetzen. Engstirnigkeit kann unmöglich simuliert werden. (Gerd W. Heyse)

  7. #7
    Registriert seit
    19.06.2003
    Beiträge
    2.200
    Danke
    85
    Erhielt 259 Danke für 175 Beiträge

    Standard

    Zitat Zitat von Rainer Hönle Beitrag anzeigen
    In der Funktion wird die Variable "laenge" verwendet. Wo wird die definiert?
    "Laenge" sollte wohl besser iniatialisiert oder durch "leng" ersetzt werden.
    Zitat Zitat von Rainer Hönle Beitrag anzeigen
    Wo und wie ist "daveDB" definiert?
    Das gehört zum Interface der Bibliothek (Speicherbereich=Datenbausteine, Konstante 132)
    Zitat Zitat von Rainer Hönle Beitrag anzeigen
    Sollten die Werte nicht daraus statt aus "dc" gelesen werden?
    Nein. dc verweist auf eine Datenstruktur, die einen Zwischenspeicher besitzt, der die gelesenen Daten enthält.

  8. #8
    Avatar von Joe
    Joe ist offline Administrator
    Themenstarter
    Registriert seit
    20.04.2006
    Beiträge
    87
    Danke
    120
    Erhielt 27 Danke für 17 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,

    a, das mit der Variable "laenge" ist mir später auch noch aufgefallen, die habe ich vergessen zu ändern - sollte auch "leng" heissen (also die länge des String enthalten)

    Ich weiss nicht, ob ich "dc" und "DaveDB" auch übergeben muss, wenn ich die Funktion aufrufe. Der Aufruf geschieht in 'readFromPLC', da sind sie bereits definiert.
    Ich bin bisher davon ausgegangen, dass meine Function beim Aufruf abgearbeitet hat und dass das Programm wieder kurz nach die Stelle des Aufrufes springt.
    Das mit dem lesen der Werte aud "DaveDB" verstehe ich nicht. sonst lese ich ja auch alle Werte aus "dc". daveDB ist, wie ich es verstanden habe da, damit libnodave weiss, dass er von einem DB lesen soll. daveFlags liest z.B. Merker aus.

    Gruß Joe

Ähnliche Themen

  1. LibNoDave-NetToPLCSim-Excel
    Von Earny im Forum Hochsprachen - OPC
    Antworten: 1
    Letzter Beitrag: 13.10.2009, 18:52
  2. Beispiel Libnodave mit Excel
    Von MW im Forum Hochsprachen - OPC
    Antworten: 2
    Letzter Beitrag: 31.03.2008, 11:52
  3. libnodave und Excel
    Von tomatensaft im Forum Programmierstrategien
    Antworten: 2
    Letzter Beitrag: 03.01.2007, 01:56
  4. S7 Libnodave und Excel
    Von uz71 im Forum Simatic
    Antworten: 27
    Letzter Beitrag: 15.11.2006, 13:51
  5. libnodave mit Excel/VBA schmiert ab
    Von HighTec im Forum Hochsprachen - OPC
    Antworten: 0
    Letzter Beitrag: 10.11.2006, 08:11

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •