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

Seite 2 von 3 ErsteErste 123 LetzteLetzte
Ergebnis 11 bis 20 von 25

Thema: LibNoDave Strings auslesen (VB.net)

  1. #11
    Registriert seit
    11.12.2010
    Ort
    nähe Bamberg
    Beiträge
    40
    Danke
    1
    Erhielt 4 Danke für 4 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Und was spricht dagegen eine allgemeine Funktion zu schreiben? diese könnte den zu schreibenden Text bekommen, das erste Byte auslesen, die Länge des Strings vergleichen und evtl. beschränken auf die ausgelesene Länge und dann übertragen.
    Is nicht aufwändiger als das Textfeld zu begrenzen und darüber hinaus wiederverwendbar.

  2. #12
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.794
    Danke
    398
    Erhielt 2.417 Danke für 2.013 Beiträge

    Standard

    Hallo,
    ich stimme Wolfi da zu.
    Was wäre denn, wenn du (oder später mal jemand anderes) entweder die Anzahl der Zeichen für das Textfeld hochsetzt oder noch besser, denn String ausserhalb der Textbox im Script zuweisst ?
    Korrekt wäre hier, die String-Deklaration aus der SPS zu nehmen und in deinem Programm mit zu verarbeiten. Das wären natürlich am Schönsten mit einer Methode gemacht oder ggf. in dem du den String zu einer eigenen Klasse machst, die sich um sich selbst kümmert und alles jeweils benötigte aus sich heraus macht ...

    Gruß
    Larry

  3. #13
    Jennsy ist offline Benutzer
    Themenstarter
    Registriert seit
    13.05.2013
    Beiträge
    81
    Danke
    29
    Erhielt 1 Danke für 1 Beitrag

    Standard

    @ Wolfi,
    Ja, das ist richtig
    Ich werde im ersten Schritt mal sehen, dass auch alles andere in meinem Programm läuft, und mich im zweiten Schritt dann an die Feinarbeit machen.
    Aber auf alle Fälle, mal DANKE für die Hilfe

  4. #14
    Jennsy ist offline Benutzer
    Themenstarter
    Registriert seit
    13.05.2013
    Beiträge
    81
    Danke
    29
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Hallo Larry,

    Danke für deinen Beitrag.
    Über meine Textbox vergebe ich den Namen für verschiedene also muss dieser Wert variabel sein, und ich kann ihn nicht gleich direkt im Script zuweisen.
    Auch die String-Deklaration werde ich nicht aus der SPS nehmen können, da mein Ziel eigentlich ist, eine Oberfläche rund um ein fertiges Programm zu bauen, also muss ich fast mit den derzeitigen Gegebenheiten leben...

    mfG
    Jenny

  5. #15
    Registriert seit
    11.12.2010
    Ort
    nähe Bamberg
    Beiträge
    40
    Danke
    1
    Erhielt 4 Danke für 4 Beiträge

    Standard

    Hallo Jennsy!
    Ausgerechnet wenn die Textbox(en) variabel auf Strings zugewiesen werden wäre es doch sinnvoll eine allgemein gehalten Funktion zu haben. So kann später die Zuweisung der verschiedenen Strings in einer List(of ) hinterlegt und ähnlich einer Systemkonfiguration bearbeitet werden. Zur Laufzeit können die Daten der reihe nach bzw. nach bedarf gelesen und geschrieben werden.
    Gruß Wolfi

  6. #16
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.794
    Danke
    398
    Erhielt 2.417 Danke für 2.013 Beiträge

    Standard

    Hallo,
    Zitat Zitat von Jennsy Beitrag anzeigen
    Über meine Textbox vergebe ich den Namen für verschiedene also muss dieser Wert variabel sein, und ich kann ihn nicht gleich direkt im Script zuweisen.
    Da drüber würde ich auf alle Fälle noch einmal nachdenken - Wolfi hat es ja auch schon geschrieben.
    Wie du mir der Variablen arbeitest ist eigentlich egal - wichtig ist hier nur, dass das "Neue" wie zu dem wird, was das "Alte" schon war.
    Du solltest dir den S7-Datentyp und bei einem String dessen definierte Länge schon irgendwo wegspeichern (deshalb der Vorschlag mit der Klasse für die/jede Variable).

    Zitat Zitat von Jennsy Beitrag anzeigen
    Auch die String-Deklaration werde ich nicht aus der SPS nehmen können, da mein Ziel eigentlich ist, eine Oberfläche rund um ein fertiges Programm zu bauen, also muss ich fast mit den derzeitigen Gegebenheiten leben...
    Das ist kein Widerspruch sondern eigentlich eher die Begründung dafür es nicht so zu machen, wie du es bisher machst ... denk mal drüber nach ...

    Gruß
    Larry

  7. #17
    Jennsy ist offline Benutzer
    Themenstarter
    Registriert seit
    13.05.2013
    Beiträge
    81
    Danke
    29
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Hallo ihr beiden,

    Wie ich bereits zu Beginn erwähnt habe, bin ich noch ein ziemlicher Anfänger, was Programmierung betrifft...
    Deshalb entschuldigt bitte auch meine Frage, aber ich verstehe nicht ganz, was ihr mit einer 'Zuweisung der Strings außerhalb der Textboxen' eigentlich meint? Denn wo kann ich denn dann die String-Werte zur Laufzeit zuweisen?

    Zitat Zitat von Larry Laffer Beitrag anzeigen
    Das ist kein Widerspruch sondern eigentlich eher die Begründung dafür es nicht so zu machen, wie du es bisher machst ... denk mal drüber nach ...
    Zur Erklärung, ich mache das für die Arbeit, und habe dieses Programm zu machen als Aufgabe zugeteilt bekommen. Deshalb muss ich mich an die derzeitigen Gegebenheiten entsprechend anpassen.

    mfG
    Jenny

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

    Standard

    Ich würde das so machen (kann aber kein VB und kann deshalb nicht den Code hinschreiben):
    Der String in der SPS besteht aus:


    StringStart: VerfuegbareLaenge byte;
    VariablerTeilStart:BenutzteLaenge byte;
    ZeichenStart: Array[0..VerfuegbareLaenge-1] of byte;

    Am Anfang des Programms die verfügbare Länge lesen und speichern.
    res = dc.readBytes(libnodave.daveDB, DB_Nr, StringStart, 1, NULL)
    maxLaenge=daveGetU8()

    Nun einen Puffer anlegen.
    Das erste Byte soll die aktuelle Länge aufnehmen, die restlichen die Zeichen.

    Nun jedesmal, wenn ein Text übertragen werden soll, den Puffer füllen:
    Laenge=LaengeVonText;
    if Laenge>maxLaenge Laenge=maxLaenge
    Puffer[0]=Laenge
    Puffer[1] bis Puffer[Laenge] mit Zeichen füllen

    Dann den Puffer (aktuelle Länge und Zeichenkette) in die SPS schreiben:

    res = dc.writeBytes(libnodave.daveDB, DB_Nr, VariablerTeilStart, Laenge+1, Puffer)

  9. Folgender Benutzer sagt Danke zu Zottel für den nützlichen Beitrag:

    Jennsy (21.05.2013)

  10. #19
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.794
    Danke
    398
    Erhielt 2.417 Danke für 2.013 Beiträge

    Standard

    Hallo,
    Zottel hat hier ja schon das Relevante genannt.
    Eines fehlt aber noch : Ein Step7-String ist immer wie folgt aufgebaut :
    Byte 0 : deklarierte Länge
    Byte 1 : tatsächlich benutzte Länge
    Byte 2 ... : Nutzdaten des String mit der Anzahl die durch Byte 0 vorgegeben wurde

    Wenn ich jetzt den String sinnvoll verwenden will, dann muss ich mir die deklarierte Länge merken (siehe auch Beispiel von Zottel) und auch beim Schreiben in den String aufpassen, dass ich die nicht überschreite. Das würde ich in den Code auf alle Fälle mit einbauen.
    Wenn jetzt etwas anderes (z.B. das SPS-Programm) auch noch sinnvoll mit dem String arbeiten können soll, dann muss die tatsächlich benutzte Länge auch noch korrekt gefüllt werden (von mir aus mit Textbox.Text.length).
    Man könnte aber auch aus dem Step7-String einen DotNet-String machen und dann kann man das Ganze natürlich irgendwo anders im Script deines VB-Programms zuweisen - das machst du ja auch jetzt schon, denn Textbox.Text ist ja auch schon ein VB.Net-String. Wann die Zuweisung in die SPS erfolgt ist hierbei nebensächlich - hängt bei dir jetzt wahrscheinlich an einem Change-Event der Textbox oder ggf. auch der Form, auf der sich die Textbox befindet).

    Gruß
    Larry

  11. Folgender Benutzer sagt Danke zu Larry Laffer für den nützlichen Beitrag:

    Jennsy (21.05.2013)

  12. #20
    Jennsy ist offline Benutzer
    Themenstarter
    Registriert seit
    13.05.2013
    Beiträge
    81
    Danke
    29
    Erhielt 1 Danke für 1 Beitrag

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,
    vielen Dank an alle für die Antworten, mache es jetzt so, dass ich die tatsächliche Länge auch wirklich berücksichtige
    Jedoch ist mir jetzt ein 'neues' Problem aufgefallen, sobald ich aus dem DB das erste Mal einen String auslesen versuche, (String ist laut dem OPC Scout leer), stehen 'eigenartige' Zeichen drinnen, habe sie mir mittels einer MessageBox einmal anzeigen lassen, z.B. 9, (c), n ...etc . und auch wenn ich dann etwas schreibe, sehe ich den neuen Wert dann zwar in meiner ausl der SPS lesenden MessageBox, jedoch wird sie nicht auf im OPC Scout angezeigt.
    Ist mir vorher leider nie aufgefallen, da ich zu Testzwecken gleich Werte mit dem OPC Scout auf die Strings geschrieben habe.
    Ist dieses Problem jemanden bekannt?

    mfG Jenny

Ähnliche Themen

  1. Libnodave Strings schreiben/lesen
    Von Hocheck im Forum Hochsprachen - OPC
    Antworten: 14
    Letzter Beitrag: 04.12.2017, 15:09
  2. Libnodave Strings auslesen (VB.net)
    Von Jennsy im Forum Hochsprachen - OPC
    Antworten: 0
    Letzter Beitrag: 13.05.2013, 15:52
  3. Antworten: 0
    Letzter Beitrag: 12.05.2011, 13:58
  4. ÄÖnderungen am libnodave.net.cs File von libnodave
    Von Jochen Kühner im Forum Hochsprachen - OPC
    Antworten: 5
    Letzter Beitrag: 12.05.2010, 16:56
  5. LibNoDave unter VB.Net ohne libnodave.net.dll
    Von Earny im Forum Hochsprachen - OPC
    Antworten: 2
    Letzter Beitrag: 09.03.2010, 18:57

Stichworte

Lesezeichen

Berechtigungen

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