libnodave anfänger

Zuviel Werbung?
-> Hier kostenlos registrieren
hallo leute
habe es gestern erfolgreich geschafft eine verbindung zu der sps herzustellen.
nun habe ich noch ein paar fragen. ich will aus mehreren DB immer wieder die gleichen werte auslesen. im doc ordner der libnodave gibts ja readbytes ich verstehe auch soweit den aufbau ,aber was hat es mit dem buffer auf sich? ist das so eine art speicher für die Daten die libnodave von der sps holt? weiterhin wird in anderen Beiträgen was von get methoden erwähnt was bedeutet das? und zu guter letzt würde mich noch interessieren wie ich das zyklische auslesen realisieren könnte vieleicht mit einer do/while schleife? wie gesagt sind meine Anfäge in hochsprchen programmierung.....

Grüsse dannyli

Ja readbytes oder auch readmanybytes holt die Daten aus der SPS und legt sie in Buf ab. Auf die Größe von Buf aufpassen!)
Ich bau dann die Daten aus dem Buffer selber so zusammen, wie ich sie brauche (INT, DINT, STRING, REAL, BOOL), mit den Get-Methoden kann man das Libnodave machen lassen, wenn ich das richtig erinnere.
Ich habe einen eigenen Thread für das Lesen/Schreiben der Daten angelegt, in der Komponente für Delphi wird das auch so gehandhabt, da man sich ansonsten u.U. die Bedienoberfläche ausbremst und diese teilweise nicht mehr bedienbar ist oder auch hakelt. Man muß dann zwar mit Synchonisier-Methoden arbeiten, um dann Daten Online anzuzeigen, aber das hat sich als rel. problemlos erwiesen. Dieser Thread ist bei mir im Prinzip eine Endlosschleife, die alle beteiligten SPS nacheinnander anfragt und die Daten liest/schreibt.
 
hallo ralle hab grad irgendwie nen hänger hier mal ein stück code:

Private Sub Timer2_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer2.Tick

Dim buf(0) As Byte
If fds.rfd > 0 Then
res = dc.readBytes(libnodave.daveDB, 1, 0, 144, buf)
End If
End Sub


dieser timer fragt zyklisch den db ab welcher 144 Bytes besitzt. da ja im doc steht man soll so grosse datenpakete wie möglich abholen ist mir nun nicht so wirklich klar wie ich die daten im db wieder in die einzelnen stücke zerlegen kann um sie dann in eine sql db zu schreiben . :confused:
 
Zuviel Werbung?
-> Hier kostenlos registrieren
buf(0) ist doch sicher zu klein oder? Entweder gelich in der richtigen Größe oder mit redim nach der Definiton nochmals verändern.

Ich nehme die einzelnen Bytes dann aus dem Array Buf[0...irgendwas] und baue mir die zahlen selbst zusammen. Die Getfunktionen sollten das für dich tun, damit hab ich mich noch nicht befaßt. Entweder man gibt an woher die die Daten nehmen oder sie erhöhen immer einen Zeiger um den ensprechenden Betrag (4 bei Real). Lies das mal in der Dok nach, evtl. findet sich hier im Forum was dazu, kommt mir doch ein wenig bekant vor. Ich muß in Delphi in der Funktion einen Pointer übergeben, weiß nicht, wie das in VB aussieht. War da nicht ein Beispiel bei libnodave dabei?
 
Crossover Kabel

Hallo,

Ralle schrieb:
Ich mach das mit einem normalen NW-Kabel, kein Cross-Over. Hängt vielleicht vom Laptop ab?

Eher nicht vom Laptop, sondern von dem verbauten NIC (Network Interface Card) ab. Moderne NIC's haben ein integriertes "Autosense" und können automatisch erkennen, ob gedreht werden muss. Und das macht der NIC dann auch automatisch. Irgendwann wird es keine Crossover Kabel mehr geben.

Gruß

Question_mark
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Pointer sind in VB nicht wirklich kompliziert. Der Parameter muss nur mit ByRef deklariert sein. Und den Zeiger auf ein Array übergibt man dann
Code:
Dim a(100) as Long
x = Func(a(0))
Das ist alles.
 
hallo zusammen

danke erstmal für eure antworten. da ich erst seit gut 2 wochen programmiere fällt es mit schwer eure vorschläge zu verstehen.
ich habe doch in meinen DB verschiedene Structs angelegt in diesen befinden sich verschiedene Informationen die als stings oder bool abgelegt werden.mit get funktionen kann ich ja nur max 4 byte holen wenn ich das so richtig verstanden habe oder?,ich lese im moment mit read aber die gesamten 144 bytes aus und weiss nicht wie ich diese in meine sql bringen kann. die infos im db sind doch so etwas wie ein Byte array oder? kann ich dieses nicht in einen string wandeln und mir aus dem die entsprechenden infos rausholen? oder hab ich eine möglichkeit die mir libnodave bietet übersehen?......

gruss dannyli
 
Wenn du die Struktur des DB kennst, dann ist es doch gut. Du kannst dann die 144 gelesenen Byte genau so wieder zusammenbauen, wie sie im DB abgelegt sind. Die Getfunktionen helfen dir schon mal bei DINT, Float etc. Die Strings sind ja auch nicht der Hit. Du weiß, daß ein String im DB bei DBB20 anfängt. Die ersten beiden Byte enthalten die Längeninfo. Byte 0 --> Max. Länge, Byte 1 aktuelle Länge des String. In Byte 1 steht z.Bsp eine 10. Dann kannst du also auf Byte 2,3,4,5,6,7,8,9,10,11 zugreifen und diese zu einem String zusammenbauen (z.Bsp. concat in Delphi). Wenn dein Buffer also mit 0 beginnt wären das Buf(22) bis Buf(31). Wie gesagt, zu den Getfunktionen kann ich nicht viel sagen, ich bau mir auch die anderen Typen gleich selbst zusammen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
hallo hier bin ich mal wieder

ich habe mein programm jetzt soweit das ich meinen db zylisch auslesen kann mit davereadmanybytes. habe jetz mal einen db erstellt der aus einem string besteht mit 20 zeichen. wenn ich jetzt was in den string schreibe z.b. einen wert den ich aus einen barcode gelesen habe oder eben irgent eine zeichenkette z.B. 'abcd1234' bekomme ich aber nur sehr grosse zahlenwerte angezeigt denke mal integer mein problem ist nun wie ich die werte wandeln kann oder wie ralle so schön sagt zusammen setzen kann habe schon alles mögliche versucht aber keine chance.vieleicht kann mir jemand weiter helfen?

gruss dannyli
 
Na ja, ich arbeite nicht mit VB, daher kann ich dir nicht so richtig sagen, wie du in VB deine Variablen zusammenbaust.

Aber mal vom Prinzip:

http://www.asciitable.com/

Jedes Byte des String repräsentiert ein Zeichen im Char-Code. Step7 hat noch einen Kopf von 2 Byte vor dem String, in dem steht die definierte und die tatsächliche Länge des String.

Nun kannst du also hergehen, Byte 0 ist die definierte Länge (soviele Byte sollten in deinem DB für den String angelegt sein), Byte 1 ist die tatsächliche Länge (soviele Byte werden aktuell von deinem String belegt).

Du suchst dir eine Funktion in VB, die Zeichen oder Strings verkettet. Dann definierst du dir einen String, liest dein Array (Buf) bei den entsprechenden Stellen byteweise aus und verkettest dieses Byte mit dem definierten String.
Wie gesagt, VB ist nicht mein Ding .Net schon gar nicht, also keine Ahnung, wie das dort genau definiert ist. Ich denke aber im Netz findest du zu diesem Thema (verketten oder addieren oder zudammenfügen von Strings) sicher auch eine ganze Menge.
 
Zurück
Oben