-> 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, 8);
//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());
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, 8);
//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());