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

Ergebnis 1 bis 7 von 7

Thema: libnodave, read multiple items C#

  1. #1
    Registriert seit
    07.01.2015
    Beiträge
    10
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo Leute,

    spiele zur Zeit etwas mit libnodave rum. Benutze als SPS eine 315 pn/dp und entwickele mit C#.
    Komme soweit ganz gut klar, habe aber eine Frage zum Auslesen von mehreren unabhängigen Blocks mit nur einer Anfrage.

    Aktuell greife ich dann auf die ausgelesenen Daten per "dc.useResult(result, n)" und folglich mit "dc.getS32()" zu.
    Gibt es auch die Möglichkeit, mir den ganzen ausgelesenen Block auszugeben? Weil ich scheitere grade an den Datentypen String und Char... weil dafür gibt es ja keine dc.get Funktionen.

    Am liebsten hätte ich einfach den ganzen gelesenen Block als byte Array. Denn dann stehen eine alle Möglichkeiten offen.

    Dankeschön und noch schöne Weihnachten


    Mein Code sieht aktuell wie folgt aus:

    //----------- TEST ALLE TYPEN (MULTIPLE ITEMS READ) -----------


    libnodave.PDU dado = new libnodave.PDU();
    dado = dc.prepareReadRequest();
    dado.addBitVarToReadRequest(libnodave.daveDB, 10, 10 * 8 + 2, 1); // BOOL DB10.DBX10.2
    dado.addVarToReadRequest(libnodave.daveDB, 10, 11, 1); // BYTE DB10.DBB11
    dado.addVarToReadRequest(libnodave.daveDB, 10, 12, 2); // WORD
    dado.addVarToReadRequest(libnodave.daveDB, 10, 14, 4); // DWORD
    dado.addVarToReadRequest(libnodave.daveDB, 10, 18, 2); // INT
    dado.addVarToReadRequest(libnodave.daveDB, 10, 20, 4); // DINT
    dado.addVarToReadRequest(libnodave.daveDB, 10, 24, 4); // REAL
    dado.addVarToReadRequest(libnodave.daveDB, 10, 30, 4); // TIME
    dado.addVarToReadRequest(libnodave.daveDB, 10, 40, 2); // CHAR
    dado.addVarToReadRequest(libnodave.daveDB, 10, 42, byt.Length); // STRING


    libnodave.resultSet result = new libnodave.resultSet();
    res = dc.execReadRequest(dado, result);


    res = dc.useResult(result, 0);
    MessageBox.Show(dc.getU8().ToString());


    res = dc.useResult(result, 1);
    MessageBox.Show(dc.getU8().ToString());


    res = dc.useResult(result, 2);
    MessageBox.Show(dc.getU16().ToString());


    res = dc.useResult(result, 3);
    MessageBox.Show(dc.getU32().ToString());


    res = dc.useResult(result, 4);
    MessageBox.Show(dc.getS16().ToString());


    res = dc.useResult(result, 5);
    MessageBox.Show(dc.getS32().ToString());


    res = dc.useResult(result, 6);
    MessageBox.Show(dc.getFloat().ToString());


    res = dc.useResult(result, 7);
    MessageBox.Show(dc.getS32().ToString());


    // DID NOT WORK NOW.....
    //res = dc.useResult(result, ;
    //byte[] asssd = new byte[2];
    //asssd = BitConverter.GetBytes(dc.getS8());
    //MessageBox.Show(BitConverter.ToChar(asssd, 0).ToString());


    //res = dc.useResult(result, 9);
    //MessageBox.Show(dc.getAnswLen().ToString());
    Zitieren Zitieren libnodave, read multiple items C#  

  2. #2
    Registriert seit
    29.03.2004
    Beiträge
    5.793
    Danke
    144
    Erhielt 1.706 Danke für 1.238 Beiträge

    Standard

    An die internen Daten kommst du über die .Net Schnittstelle nicht heran, zumindest nicht ohne da tiefgreifende Erweiterungen zu machen.

    Wenn du die Daten als Byte-Array haben möchtest, dann schreib dir doch eine Funktion welche über dc.getU8() die Daten in ein .Net byte-Array kopiert.

  3. #3
    Registriert seit
    17.06.2004
    Ort
    Offenau
    Beiträge
    3.758
    Danke
    209
    Erhielt 421 Danke für 338 Beiträge

    Standard

    schau mal in meiner toolbox, ich mach das glaub iwie! (ist schon lange her!) ich nutze aber auch eine modifizierte libnodave!
    ---------------------------------------------
    Jochen Kühner
    https://github.com/jogibear9988/DotN...ToolBoxLibrary - Bibliothek zur Kommunikation mit PLCs und zum öffnen von Step 5/7 Projekten

  4. #4
    TobiasW ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    07.01.2015
    Beiträge
    10
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hallo Thomas,

    das ist mir auch schon in den Sinn gekommen. Nur ist das leider nicht so einfach, da man wohl zuerst die Daten per "dc.useResult(result, n)" in einen Buffer von dc kopieren muss, um diese dann per dc.get auszulesen.
    Somit braucht man ab und zu dc.getU8, mal dc.getU32, .... und man muss halt entsprechend vorher dc.useResult aufrufen. Das wäre ein sehr komplizierter Algorithmus

    Vielleicht fällt euch ja noch was ein

    @Jochen
    Ich werde mir deine ToolBox mal anschauen.


    Grüße

  5. #5
    Registriert seit
    29.03.2004
    Beiträge
    5.793
    Danke
    144
    Erhielt 1.706 Danke für 1.238 Beiträge

    Standard

    Wenn so wie in deinem Beispiel die Daten hintereinander in einen einzelnen Datenbaustein liegen, bietet es sich eh an den ganzen Block zu lesen. Z.B. 200 Bytes im DB 10 mit:

    res = dc.readBytes(libnodave.daveDB, 10, 0, 200, null);
    die du dann direkt in einer Schleife in ein byte-Array kopieren kannst.

    Nur musst du dann bei der Interpretation der Daten das gleiche machen wie die Funktionen aus der libnodave Bibliothek, d.h. Endianess anpassen usw.

  6. #6
    TobiasW ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    07.01.2015
    Beiträge
    10
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Ja das ist mir bewusst, etwas blödes Beispiel von mir... Wobei zwischen mein REAL und TIME habe ich n' Lücke gelassen

    Ich hab jetzt erstmal in C# probiert was so möglich ist und mich etwas eingearbeitet. Nun will ich das selbe mal auf Android implementieren.

  7. #7
    Registriert seit
    17.06.2004
    Ort
    Offenau
    Beiträge
    3.758
    Danke
    209
    Erhielt 421 Danke für 338 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    also meine bib läuft mit libnodave auch unter ios in verbindung mit mono! hab das vor 1-2 jahren mal am laufen gehabt! string und chararray hab ich als datentxpen auch drin!
    ---------------------------------------------
    Jochen Kühner
    https://github.com/jogibear9988/DotN...ToolBoxLibrary - Bibliothek zur Kommunikation mit PLCs und zum öffnen von Step 5/7 Projekten

Ähnliche Themen

  1. Libnodave Multiple Read für S5
    Von RobinHood im Forum Hochsprachen - OPC
    Antworten: 7
    Letzter Beitrag: 13.11.2013, 23:54
  2. (Libnodave) Read Request Frage an die Experten
    Von ronnie.b im Forum Hochsprachen - OPC
    Antworten: 8
    Letzter Beitrag: 28.07.2011, 08:11
  3. LibNodave und Multiple Read (mit nicht existierenden Elementen)
    Von Jochen Kühner im Forum Hochsprachen - OPC
    Antworten: 2
    Letzter Beitrag: 25.08.2010, 23:27
  4. VB libnodave Read multiple items
    Von Rmorasch im Forum Hochsprachen - OPC
    Antworten: 9
    Letzter Beitrag: 19.10.2009, 10:05
  5. 200ms delay beim CP 243-1 read mit libnodave
    Von Wollli im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 02.06.2009, 14:25

Lesezeichen

Berechtigungen

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