Sonstiges libnodave zu WinAC ab DB1000 DB-Länge fehler

mathgi

Level-2
Beiträge
46
Reaktionspunkte
2
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

ich verwende schon seit Jahren libnodave, was auch super funktioniert. (bei S7-300)

Jetzt habe ich das erstemal eine Microbox mit WinAC und nun kommt das Problem.
Die Funktion "internalDaveGetBlockInfo" ermittelt mir die DB Länge.
Ist die DB-Nummer kleiner 1000 bekomme ich die korrekte Länge, ab DB1000 gibt die Funktion nur 0len zurück.

kennt jemand das Problem?
Ist das ein Fehler in libnodave? oder liegt das an WinAC?
Vom prinzip ist die WinAC ja ein S7-400 ähnlich, leider habe ich das auch keine parat um das dort zu testen.
 
Ich habe hier noch eine Wireshark Aufzeichnung einer WinAC Kommunikation in meinen Archiven gefunden.
In der Tat gibt es bei der WinAC da einen Unterschied bei DBs mit großer Nummer (sehe es nur bei DB4000 in meiner Aufzeichnung).

Dort ist der Antwortdatensatz nicht 78 sondern 92 Bytes groß. In daveGetBlockInfo wird die Größe von udata geprüft, und wenn das nicht gleich der Struktur-Größe von daveBlockInfo ist dann werden die Daten nicht umkopiert, und leider auch kein Fehler gemeldet.

In meiner Aufzeichnung hängen am Ende nur Null-Werte an, die Werte davor scheinen auf den ersten Blick an der gleichen Position zu liegen.

Du könntest die Prüfung
p2.udlen==sizeof(daveBlockInfo)
auf
p2.udlen>=sizeof(daveBlockInfo))
aber dann beim Anschließenden memcpy auch nur sizeof(daveBlockInfo) Bytes kopieren und nicht udlen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
hi Thomas,

hört sich super an.
Ich bin nur nicht so geschickt mit dll kompilieren - hab das noch nie gemacht.
Könntest du mir die fertige dll zur Verfügung stellen? - das wäre echt super
 
Hast du die Möglichkeit nochmal eine Wireshark Aufzeichnung zu erstellen, wenn du mit libnodave die DBs ausliest?
Nicht dass da noch irgendein Unterschied ist, den ich bei meinen Aufzeichnungen nicht sehe.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
hc_831.jpghc_832.jpg
Ja die Antwortlänge ist tatsächlich unterschiedlich, unter 1000 sind es 165 bytes und ab DB1000 sind es 179bytes.

Meine Versuche, die dll zu erzeugen schlugen leider fehl. Ich hab zwar VisualStudio, aber ich glaub mir fehlen die SDK's !?!
 
Zuletzt bearbeitet:
Kannst Du einfach das pcap einstellen? Wir können dann selbst einen Blick darauf werfen und entsprechend analysieren.
 
Im Anhang die nodave.c und die dll von der 0.8.5.1 mit der es meiner Meinung nach funktionieren sollte. Ich habe keine WinAC zum Testen da.
Evtl. brauchst du noch die Redistributable Packages für VS2015 falls die noch nicht installiert sind.
 

Anhänge

  • libnodave-0.8.5.1-fix-winac.zip
    132,6 KB · Aufrufe: 1
Im Anhang die nodave.c und die dll von der 0.8.5.1 mit der es meiner Meinung nach funktionieren sollte. Ich habe keine WinAC zum Testen da.
Evtl. brauchst du noch die Redistributable Packages für VS2015 falls die noch nicht installiert sind.

super vielen Dank... dll funktioniert.
 
Zuletzt bearbeitet:
Kannst Du einfach das pcap einstellen? Wir können dann selbst einen Blick darauf werfen und entsprechend analysieren.
kann ich schon... aber ich war da nicht so geschickt beim aufzeichnen so dass da zuviel anderes dabei ist.... kenn mich leider nicht so gut mit wireshark aus dass ich das entsprechend bereinigen kann.
 
Zurück
Oben