# Libnodave und ganze DB´s auslesen



## badgoes (17 März 2009)

hi 

wie ich sehe habe ich genau die richtigen ansprechpartner hier für mein kleines problem:

Bein uns in der Firma haben wir eine anlage die Teilebearbeitet nach sogenannten Prüfplänen ca. 75 verschiedene (von 1000 möglichen). Habe mir dann die ganzen Datenbausteine in der Datenansicht angeschaut und in Excel kopiert und dann mit ein paar 5 Zeiligen Formel überarbeitet sodass die 75 verschiedenen Prüfpläne schön als übersicht auftauchen.
Zu jedem Prüfplan brauche ich noch 5 weitere werte die in anderen DB´s stehen diese habe ich mir dann auch kopiert und iin excel eingefügt. 

So ende vom lied war das ich eine Excel Datei habe die 30 mb groß ist und für die Berechnung gut 10 min auf einem Dual Core Field PG braucht.

Jetzt zu meiner Frage:

Da ich jetzt schon ein paar stunden durch dieses Forum gescrollt bin und mir merfach libnodave untergekommen ist, gibt es die möglichkeit das libnodave über die VB ansteuerung durch die Datenbausteine durchscrollt und mir zuerst die Prüfplan nummern sucht (nicht verwendete Prüfpläne tragen eine null) somit >0 sich dann die komplette DB Zeile in das Exel dokument kopiert und wenn es damit durch ist gezielt nach den restlichen werten in den anderen datenbausteinen weitersucht????

Und am ende mir dann die liste komplett anzeigt ???

Weil mir es leid ist zur anlage zu rennen einen s7 abzug zu machen dann zurück renne die datenbausteine öffne um sie mir dann ins excel zu kopieren noch weitere 10 min warte bis die Tabelle aktualisiert ist und ich dann entlich fertig bin.

Zur anlage 

S7 400
MPI anbindung 
TCP/IP müsste konfiguriert werden 
und 2 Touchpanels mit Protool

mfg badgoes


----------



## Ralle (17 März 2009)

Das würde sicher gehen. Lade dir mal Libnodave, da ist auch ein Beispiel dabei für VBA (glaub ich jedenfalls ) Ansonsten gibts hier im Forum etwas, ich denke Vierlagig hat da mal ein kurzes Beispiel gepostet. 

Der Vorgang wäre in etwa folgender. 
Du mußt wissen, was wo in der SPS an Daten liegt, logo.
Du kannst dir aus den Datenbaustein Daten laden, diese dann einzeln ansehen und dann weiterentscheiden. Dazu mußt du auch wissen, welches Fomat diese Daten haben. Mit Hilfe von Libnodave holst du die Daten. Außerdem kannst du aus diesen geholten Daten, die im Prinzip ja nur ein Bytefeld sind, mit libnodave die Daten in ihrem entprechenden Fomrmat extrahieren, z.Bsp. eine oder mehrere DInt lesen oder eine Real. Was du dann damit machst, ist deine Sache.


----------



## badgoes (17 März 2009)

also sage ich praktisch 

lese aus z.b. Db200 dbw 1 

wenn dieser wert 0 dann hole mir dbw 2

usw weiter und so weiter

bis dann irgendwann ein dbw nicht 0 ergibt 


wie mache ich das das er mir dann die ganze zeile ausgibt mit dbw bezeichnung und so und natürlich den aktual wert den er ja auf 0 verglichen hat ????


----------



## Ralle (17 März 2009)

Du kannst gleich eine größere Menge an Daten lesen. Wieviele Daten du aus einem DB liest kannst du festlegen. Es ist auf jeden Fall schneller 200 Byte am Stück zu lesen und dann auszuwerten, als jeweils 2 Byte. Schau dir mal zuerst die Beispiele und Funktionen von Libnodave an, da wird schon einiges klarer.


----------



## Zottel (18 März 2009)

Als Author von Libnodave freue ich mich zwar wenn jemand damit ein Problem löst, aber in deinem Fall vermute ich (obwohl ich das Problem nicht gut verstanden habe), daß eine vernünftige Vorverarbeitung helfen könnte.


badgoes schrieb:


> hi
> Bein uns in der Firma haben wir eine anlage die Teilebearbeitet nach sogenannten Prüfplänen ca. 75 verschiedene (von 1000 möglichen).


Du hast 1000 Prüfpläne in 1000 DBs?
Du hast 1000 Prüfpläne in weniger DBs? Aber länger, weil mehr als ein Prüfplan drin steht?
Nimm einen extra DB, der hat 75 Einträge (oder 150, zur Sicherheit). Immer wenn ein Teil produziert oder geprüft wird, trägst du die Nummer des Prüfplans ein, falls sie noch nicht drin steht. Nachher kannst du die tatsächlich verwendeten auslesen.


badgoes schrieb:


> Habe mir dann die ganzen Datenbausteine in der Datenansicht angeschaut und in Excel kopiert und dann mit ein paar 5 Zeiligen Formel überarbeitet sodass die 75 verschiedenen Prüfpläne schön als übersicht auftauchen.


Was macht die Formel? Schau dir mal an, was in der Formel passiert, wenn die Zahl der Teile um 1 wächst. Möglicherweise ist es einfacher, die Rechnung mit dem 1.Teil zu beginnen und dann nachzuführen. Dann könnte die SPS das "im Hintergrund" erledigen und du holst dir mit Libnodave die Ergebnisse.
Beispiel für was ich mit "Nachführen" meine:
Eine Quadratzahl q ist n hoch 2 oder n*n.
Die nächste Quadratzahl ist  q+2*n +1. Wenn du also bei 3 bist ist q 9 und du rechnest: 9 +3+3+1=16. Bei 16: 16+4+4+1=25, bei 121; 121 + 11+11+1=144 usw.
Auf diese Weise errechnen sich die nächste Quadratzahl nur durch Addition, ohne Multiplikation, was für eine CPU meist einfacher ist. Natürlich lohnt es nur, wenn man die Rechnung bei 1 oder 0 anfängt, aber genau das passiert ja beim ersten produzierten Teil.
Soetwas funktioniert für viele Rechnungen, nicht nur für Quadratzahlen..,


badgoes schrieb:


> Zu jedem Prüfplan brauche ich noch 5 weitere werte die in anderen DB´s stehen diese habe ich mir dann auch kopiert und iin excel eingefügt.


Hängen die Werte nur vom Prüfplan ab? Dann wäre es ein Fall für eine Datenbank. 
Werden die Werte während der Produktion ermittelt? Dann könntest du summarische oder statistische Werte wie oben erklärt "nachführend" berechnen und an den Prüfplan anhängen. Beispiel:
Ein neues Teil wurde nach Prüfplan 4711 produziert und geprüft. Es trat eine Abweichung von 0.3 auf. Du willst die mittlere Abweichung wissen.
Bis dato wurden nach Prüfplan 4711 76 Teile produziert und die mittlere  Abweichung war 0.26. Die neue mittlere Abweichung ist dann (76*0.26+0.3)/77.


----------



## badgoes (18 März 2009)

> Du hast 1000 Prüfpläne in 1000 DBs?
> Du hast 1000 Prüfpläne in weniger DBs? Aber länger, weil mehr als ein Prüfplan drin steht?
> Nimm einen extra DB, der hat 75 Einträge (oder 150, zur Sicherheit). Immer wenn ein Teil produziert oder geprüft wird, trägst du die Nummer des Prüfplans ein, falls sie noch nicht drin steht. Nachher kannst du die tatsächlich verwendeten auslesen.



ich habe insgesamt 1000 mögliche Prüfpläne die prüfplan daten sind in 10 datenbausteinen verteielt, 
die 10 teilen sich auf in 4 konvert datenbausteinen (jeder datenbaustein hat eine größe von ca 50000 einzelwerten) wo normalerweise 4 stellige zahl in 3 stellige zahl umgeschrieben wird. z.b. Material a hat nr. 10 und material b hat nr. 20 somit stellt sich der prüfplann aus diesen beiden werten zusammen und ergibt den prüfplan 200 (beide zahlen von material b und die letzte zahl von material a im regelfall es kommt aber vor das diesen prinzip nicht mehr möglich ist).

dann sind 2 datenbausteine die die genaue bezeichnung von material a und b erfassen bzw wiedergeben.

und die letzten 4 datenbausteine (jeweils wieder 50000 werte) beinhalten für jeden prüfplan (3 stellig) die bearbeitungsparameter.



> Was macht die Formel? Schau dir mal an, was in der Formel passiert, wenn die Zahl der Teile um 1 wächst. Möglicherweise ist es einfacher, die Rechnung mit dem 1.Teil zu beginnen und dann nachzuführen. Dann könnte die SPS das "im Hintergrund" erledigen und du holst dir mit Libnodave die Ergebnisse.
> Beispiel für was ich mit "Nachführen" meine:
> Eine Quadratzahl q ist n hoch 2 oder n*n.
> Die nächste Quadratzahl ist q+2*n +1. Wenn du also bei 3 bist ist q 9 und du rechnest: 9 +3+3+1=16. Bei 16: 16+4+4+1=25, bei 121; 121 + 11+11+1=144 usw.
> ...



mit meiner formel habe ich es so gelöst das ich die konvertdatenbausteine (4 stk) durchsuche nach zahlen von 1 bis 999 möglichen Prüfplänen und dann die beschreibung mir wiedergebe, in der beschreibung steht dann aus welchen 2 materialien sich der prüfplan zusammen setzt. 

mit der 2 stelligen material bezeichnung habe ich mir dann die 2 Datenbausteine vorgenommen und habe nach material eigenschaften gesucht wie größe oder umfang derartiges.

und dann durchsuche ich nochmal die bearbeitungsbausteine nach relevanten fertigungs parametern die wichtig sind für die übersicht.

das problem ist die prüfpläne sind nicht nacheinander aufgebaut sonder z.b. prüfplan 200 und 201 werden verwendet denn kommt aber erst prüfplan 250 wieder was da zwischen ist halt reserve die daten interessieren mich aber nicht weil wenn es nicht benutzt wird braucht man es auch nciht in einer übersicht.



> Hängen die Werte nur vom Prüfplan ab? Dann wäre es ein Fall für eine Datenbank.
> Werden die Werte während der Produktion ermittelt? Dann könntest du summarische oder statistische Werte wie oben erklärt "nachführend" berechnen und an den Prüfplan anhängen. Beispiel:
> Ein neues Teil wurde nach Prüfplan 4711 produziert und geprüft. Es trat eine Abweichung von 0.3 auf. Du willst die mittlere Abweichung wissen.
> Bis dato wurden nach Prüfplan 4711 76 Teile produziert und die mittlere Abweichung war 0.26. Die neue mittlere Abweichung ist dann (76*0.26+0.3)/77.



wie das material nun bearbeitet werden soll hängt davon ab welches label es trägt, per barcode scanner werden dann 2 2 stellige werte ermittelt (material a und material b) dann guckt die sps in die konvert datenbausteine was für eine prüfplannummer das ist und zeiht sich alle relevanten daten aus dem Bearbeitungsdatenbausteinen. 
die daten aus dem Bearbeitungsbaustein sind feste werde die durch abtastung nochmal überprüft werden plausibilität.

Die ganze Datenmenge nur auf die relevanten Prüfpläne wäre natürlich sehr geil aber das beinhaltet einen großen programmier aufwand und zusätzliche cpu resourcen der sps.
ich habe mir schon überlegt ob ich die touchpanels mit protool nicht dafür missbrauche mit einem button für speichere mir die benutzten prüfpläne in eine variablen tabelle und lege sie mir dann als csv datei ab und dann kann ich sie mir ja mit excel oder access importieren.
aber  mit protool müsste ich auch die datenbausteine nach relevanten daten (speichern) und irrelevanten daten (überspringen) durchsuchen und ich weiß nicht ob das protool das her gibt.


Zu der excel tabelle diese hab ich mir selber angefertig aber ich muss mir die 10 datenbausteine aus der sps per hand holen und dort reinkopieren und das ist zeitraubend. Es wäre einfacher wenn man wirklich nur relevante daten dort raus zieht.

ich hoffe ich konnte dir mein problem jetzt ein bisschen verdeutlichen 

und ich hoffe du bist hetzt nicht abgeschreckt von soviel text

mfg


----------



## Ralle (18 März 2009)

Hier gibts das erwähnte Excel-Beispiel.

http://www.sps-forum.de/showpost.php?p=136465&postcount=39


----------

