Libnodave Version 0.8

Zuviel Werbung?
-> Hier kostenlos registrieren
Zottel schrieb:
seeba schrieb:
Zottel, das Problem ist einfach, dass jeder die Beispielprogramme liest, welche er versteht! Das ist bei mir VB.NET und etwas C#! Du solltest nicht erwarten, dass jeder alle Beispiele lesen will und kann!
Nein, da hast du wohl recht, aber ich habe auch schon eine Menge Bibliotheken und Sachen von anderen Leuten benutzt und meiner Meinung nach war und ist das meiste davon zwar vielleicht von mehr Dokumentation begleitet, aber im Programmtext weitaus schlechter kommentiert.
Wenn ich mehr Dokumentation schreibe, bekomme ich das Problem, die Dokumentation auf dem Stand des Programmcodes zu halten. Doppelte Arbeit :-(

Trotzdem sind mit jedem release neue Readmes und FAQs dabei.

Das Programm testMPI.cs in Dot.Net/CS enthält die Benchmarks auch. Daß sie nun ausgerechnet im VB.net-Beispiel nicht drin sind, liegt daran daß der VB-Compiler von MONO (freier Dot.Net-Nachbau) noch ziemlich unfertig ist und mit längeren Programmen gar nicht klar kommt. Und ich will keine Programme verteilen, die ich selbst nicht ausprobieren kann.

Was mich ein bißchen nervt, ist daß kaum etwas zurückkomt, was die Entwicklung von Libnodave voranbringt (es gibt einige wenige rühmliche Ausnahmen).
Andererseits erhalte ich häufig Anfragen (ich meine jetzt nicht deine), wo ich denke, ich muß das ABC des Programmierens erklären. Jemand auf dem Level vieler Fragesteller käme sicher auch mit keinem kommerziellen Produkt zurecht.
Dann geht mir durch den Kopf, daß so einer sowas wohl auch nicht kaufen würde, weil ihm das durchaus klar ist. Aber weil Libnodave nichts kostet, lädt es Hans und Franz zum Probieren runter und fragt dann, wie sein Compiler funktioniert oder so was.

Ich denke auf diesem Level befinde ich mich nicht mehr. :lol: Aber du hast schon recht. Ich geb dir gerne ein Feedback, sobald ich alle Funktionen ausnutze. Deine C# Beispiele kannst du in #Develop einfach nach VB.NET konvertieren. Hab es gerade mal mit dem testMPI gemacht und es funktioniert ohne Nacharbeiten. Was mir noch fehlt (ich kann's leider echt nicht finden), wäre Start/Stop auslesen (nicht schalten). hast du dafür eine Funktion vorgesehen?

Gruß Sebastian
 
seeba schrieb:
Deine C# Beispiele kannst du in #Develop
Ich habe kein #Develop. Ich möchte mit auch nicht 20 verschiedenene IDEs runterladen, um dann von Nutzern zu hören, das wieder 10 von Ihnen nicht mehr up to date sind.
Ich will auch nicht diese 20 IDEs lernen oder sie auch nur anschmeißen, bevor ich ein neues release rausgebe,nur um zu sehen, ob noch alles geht. Ich muß noch einen Standard-SPS-Inhalt haben und ein paar Skripte, die Anpassungen für PERL automatisieren, dann kann ich das Script buildall so ausbauen, daß es alle verteilten Programme baut und TESTET.
Darum sind lauter einfache Batch-files dabei. Die sollten auch in 10 Jahren noch funktionieren bzw. sollte jeder die Anpassungen vornehmen können.
seeba schrieb:
...einfach nach VB.NET konvertieren. Hab es gerade mal mit dem testMPI gemacht und es funktioniert ohne Nacharbeiten.
Wunderbar. Jetzt könnte ich sagen, gib mir das Ergebnis, ich veröffentliche es für andere VB.Net user. Aber dann kann ich es nicht selbst anpassen oder erweitern:-(. Aber ich werde es in ein nächstes README schreiben, daß das geht.
seeba schrieb:
Was mir noch fehlt (ich kann's leider echt nicht finden), wäre Start/Stop auslesen (nicht schalten). hast du dafür eine Funktion vorgesehen?
Ja, daveReadSZL für die 300/400. Liest die System-Zustandslisten. Welche was enthält, kannst du der Siemens-Doku entnehmen. Soweit ich's im Kopf habe, hat SZL 25 (hex19) den Zustand aller LEDs.
Bei der 200 steht es irgendwo in den Systemdaten.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Das mit den Bits bring ich leider immernoch nicht zum laufen. Könntest du mir nochmal sagen, wo es ein Beispiel gibt? Oder ein kurzes schreiben, wie z.B. DB50 DBX0.0 - 0.7 gelesen werden können? Wäre dir sehr dankbar.

Gruß Sebastian
 
Zottel, hat sich erledigt man sollte vllt. irgendwo vermerken, dass man bei readBits die Addresse so übergeben muss (was ich nicht wusste): ( Byte * 8 ) + Bit

Gruß Sebastian
 
seeba schrieb:
Zottel, hat sich erledigt man sollte vllt. irgendwo vermerken, dass man bei readBits die Addresse so übergeben muss (was ich nicht wusste): ( Byte * 8 ) + Bit
Gruß Sebastian
Ich denkes, es steht irgendwo. Wo weiß ich gerade nicht. Die Testprogramme enthalten auch Beispiele (ob in C# , müßte ich nachschauen).
Etwas anderes ist wichtiger:
daveReadBits liest immer nur ein einziges Bit. Dafür sendet es eine ganze PDU mit allem Overhead und Wartezeit. Es ist eine extrem schlechte Wahl für eine SCADA-Anwendung. daveWriteBits hätte ncoh eine gewisse Daseinsberechtigung, da es die einzige Möglichkeit bietet ein Bit zu verändern ohne andere Bits im gleichen Byte zu beeinflussen.
Eine gute SCADA-Anwendung müßte die Anzahl der PDUs minimieren, um möglichst hohe Datenraten zu erreichen. Dazu müßte sie die gesamte Variablen- (Tag-) Liste zunächst mal durchgehen. Nehmen wir mal an, wir haben:
MW0
MD200
Dann liest man am besten alle 204 Byte ab MW0 und sucht die gewünschten Ergebnisse aus dem Puffer.

MW0
MD20
DB1.DBW4
Man kombiniert am besten das Lesen der 24 Byte ab MW0 und das Lesen von DB1
in einem readRequest für mehrere Variablen.

MW0
MD200
DB1.DBW4
Ob das noch mit einem readRequest zu erledigen ist, weiß ich nicht. Probieren oder ausrechnen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Zottel schrieb:
seeba schrieb:
Zottel, hat sich erledigt man sollte vllt. irgendwo vermerken, dass man bei readBits die Addresse so übergeben muss (was ich nicht wusste): ( Byte * 8 ) + Bit
Gruß Sebastian
Ich denkes, es steht irgendwo. Wo weiß ich gerade nicht. Die Testprogramme enthalten auch Beispiele (ob in C# , müßte ich nachschauen).
Etwas anderes ist wichtiger:
daveReadBits liest immer nur ein einziges Bit. Dafür sendet es eine ganze PDU mit allem Overhead und Wartezeit. Es ist eine extrem schlechte Wahl für eine SCADA-Anwendung. daveWriteBits hätte ncoh eine gewisse Daseinsberechtigung, da es die einzige Möglichkeit bietet ein Bit zu verändern ohne andere Bits im gleichen Byte zu beeinflussen.
Eine gute SCADA-Anwendung müßte die Anzahl der PDUs minimieren, um möglichst hohe Datenraten zu erreichen. Dazu müßte sie die gesamte Variablen- (Tag-) Liste zunächst mal durchgehen. Nehmen wir mal an, wir haben:
MW0
MD200
Dann liest man am besten alle 204 Byte ab MW0 und sucht die gewünschten Ergebnisse aus dem Puffer.

MW0
MD20
DB1.DBW4
Man kombiniert am besten das Lesen der 24 Byte ab MW0 und das Lesen von DB1
in einem readRequest für mehrere Variablen.

MW0
MD200
DB1.DBW4
Ob das noch mit einem readRequest zu erledigen ist, weiß ich nicht. Probieren oder ausrechnen.

So hier mein Feedback: Ich habe MPI, ISO und S7online deiner lib integriert und es hat alles sehr gut geklappt. Insgesamt sehr logisch aufgebaut und mit wenigen Änderungen auf die jeweils anderen Protokolle anpassbar! :eek: Die Idee mit dem Bündeln hatte ich auch schon durchdacht, allerdings werde ich mich damit erst beschäftigen, wenn ein gewisses Interesse daran besteht, denn es ist schon ein sehr großer Aufwand. Für Ethernet ist es so schnell genug und bei MPI halt etwas langsamer. Außer meine Kleinigkeiten (vllt. auch überlesen usw.) die ich noch von dir wissen wollte habe ich alles sehr schnell verstanden und aus dem Quellcode und den Kommentarzeilen lesen können. Vielen Dank!

Was natürlich noch sehr toll wäre: Wenn man alle "Items" zu einer Liste hinzufügen kann und diese dann in einem Paket ausgeführt wird ohne diese vielen PDUs.

Gruß Sebastian
 
seeba schrieb:
Was natürlich noch sehr toll wäre: Wenn man alle "Items" zu einer Liste hinzufügen kann und diese dann in einem Paket ausgeführt wird ohne diese vielen PDUs.

Gruß Sebastian

in C#:

libnodave.PDU p=davePrepareReadrequest();
p.addVarToReadRequest(daveFlags,0,0,10);
...bis zu 20 Variablen, die Bgrenzung ist S7-spezifisch...
p.addVarToReadRequest(daveDB,1,20,4);
res=dc.daveExecReadRequest(p, resultSet);

erst die letzte Zeile löst die Kommunikation mit der CPU aus und holt bis zu 20 verschiedene Dinge in einem Rutsch.
 
Zurück
Oben