Neues libnodave Version (woher?)

Zuviel Werbung?
-> Hier kostenlos registrieren
Dann warte ich mal auf konstruktive Vorschläge ...

Hallo,

Boris schrieb:
spar ich mir die zeit des OPC daten austausch also statt PLC<-> OPC Ser <-> OPC Cli <-> App. auf PLC <-> App.

*ROFL* Hast Du eventuell noch einen DX286 mit DOS 5.0 als OS ?
Selbst das popelige ASUS Netbook 1000 lacht sich darüber schlapp ...

Gruß

Question_mark
 
Zuletzt bearbeitet:
@Questen_Mark: Es ist mir schon klar das ich über divere funktionen ohne gefrimel datenbausteine auslesen kann und abhängig der struktur die werte rausziehen kann. Aber das ist hlat etwas zu langsam. Aber vll. muss ich einsehen das es nich anders/Besser/schneller geht;)

Aber ich will beim pollen möglichst kleine datenübertragungeraten haben. Nehmen wir an ich hab 500 DBs mit jeweils 200byte... da muss ich bei jedem poll. zyklus jeden DB abfragen und auf änderungen vergleichen.. was ja enorm zeit kostet. könnte ich jetzt den speicher der SPS direct auf einen schlag bzw. aufgeteilt in PDU blöcken direkt vom speicher lesen würde es schneller gehen. (Hat nix mit der PC Hardware leistung zu tun)

Weil TCP/IP ist ja eig. enorm schnell (500DB's * 200Byte) = 100KB! bei 10Mbit/s LAN = 1,25MB pro sekunde, würde ich theorietisch mit overhead etc. ein polling zyklus von 100ms schaffen, d.h. ich können alle 500DB alle 100ms auf änderungen pürfen.

Das war mein gedanke.. vll. ist der flaschen halt auch die SPS (TCP/IP) speicher schnittestelle...

Also gibts es keine möglichkeit schneller daetn auszulesen.. bischen byte frimilerei ist kein ding;)
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Bei der SPS-Kommunikation darf nicht nur die reine und theoretische Datenübertragungsrate betrachtet werden. Abgesehen von dem Protokolloverhead (Adressierung, TCP/IP, ..) handelt es sich bei dem SPS-Zugriff um ein Frage-Antwort-Spiel. Der PC frägt etwas an und die SPS antwortet wenn Sie Lust und Zeit hat (ihre Hauptaufgabe ist ja schlie0lich zu steuern und nicht lästigen PCs zu antworten). Auf Grund dieser Tatsache ergibt sich ein Nutzdatendurchsatz z.B. bei einer 416-2 mit 443-1 von etwas über 60 KByte/s. Und da liegen doch wohl Welten zwischen der Theorie und Praxis. Aus diesem Grund habe ich ja bereits geschrieben, dass eventuell ein anderer Ansatz gefunden werden sollte. Die SPS teilt die Änderungen eine DBs in jeweils einem Bit mit und der PC prüft die Bits und liest bei Bedarf die geänderten DBs.
Aber um das Ganz zu beruteilen muss erst einmal geprüft werden, wie oft sich die Werte ändern, was wirklich erforderlich ist und was gewünscht ist. Dann ein entsprechendes Konzept erstellt und implementiert werden.
 
Danke Rainer,

genau das wollte ich wissen... jetzt is mir auch klarer wie es mit der kommunikation aussieht. D.h. ein wirklich schnellere lösung zu kommunikatin mit der sps ist nich unbeding machbar. weil die SPS grenzen aufzeigt. Relavante daten die schnell übermittel werden sollten sind control daten , steuerbits etc.

Aber dann muss ich wohl ein dynamisches konfigurierbare polling archtektur entwickeln, welche best. datenblöcke öfters als andere datenblöcke abfragt.

Bin grad bischen miet .NET und AGLink40 beschäftigt... wie ich sehe arbeitet "ReadDataBytes" syncron.. gibts dazu asyncrone funktionen, oder muss ich das selber impelemntieren?

Und umsohöhr der Adressbereich liegt, d.h. wenn ich daten aus nem hinteren teil eines DB lese brauch die funktion länger, was soll das denn??

AGL4.ReadDataBytes(2097152, 0, 2000, {0, 0}, 1) => 0 Time 281,25
AGL4.ReadDataBytes(2097152, 2000, 4000, {0, 0}, 1) => 0 Time 531,25
AGL4.ReadDataBytes(2097152, 4000, 6000, {0, 0}, 1) => 0 Time 812,5
AGL4.ReadDataBytes(2097152, 6000, 8000, {0, 0}, 1) => 0 Time 1109,375
AGL4.ReadDataBytes(2097152, 8000, 10000, {0, 0}, 1) => 0 Time 1421,875
AGL4.ReadDataBytes(2097152, 10000, 12000, {0, 0}, 1) => 0 Time 1671,875
AGL4.ReadDataBytes(2097152, 12000, 14000, {0, 0}, 1) => 0 Time 1984,375
AGL4.ReadDataBytes(2097152, 14000, 16000, {0, 0}, 1) => 0 Time 2234,375
AGL4.ReadDataBytes(2097152, 16000, 18000, {0, 0}, 1) => 0 Time 2515,625
AGL4.ReadDataBytes(2097152, 18000, 20000, {0, 0}, 1) => 0 Time 2781,25
 
Zuletzt bearbeitet:
woran lieg dasm das ich max 212 byte schreiben, und 222 Byte blöcke lesen kann mit libnodave?
Das liegt daran, daß du mit einer PDU-Länge von 240 Byte arbeitest und dort nicht mehr Nutzdaten hineingehen. Das steht auch irgendwo in der Dokumentation zu libnodave.
Da du dich ja schon lange Zeit mit diesen Themen beschäftigst: Starte ein Testprogramm wie testISO_TCP.exe mit der Option -d. (Von der Kommandozeile, DOS-Box). Dann zeigt es dir, was es macht! Du kannst sehen, welche PDU-Länge ausgehandelt wird. Es zeigt dir auch den Aufbau der PDU an.
Die ultimative Möglichkeit für SCHNELLE Datenübertragung, die von der SPS angestoßen wird, wäre folgende:
Ein Gateway gibt sich gegenüber der SPS als Profibus-Slave aus, erhält einmal pro Zyklus seine "Ausgangsdaten" (max 240 Byte oder so) und sendet dann ein (UDP, TCP oder was auch immer) Ethernet-Paket.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Guten Morgen zollel,

kannst du mir das:

Die ultimative Möglichkeit für SCHNELLE Datenübertragung, die von der SPS angestoßen wird, wäre folgende:
Ein Gateway gibt sich gegenüber der SPS als Profibus-Slave aus, erhält einmal pro Zyklus seine "Ausgangsdaten" (max 240 Byte oder so) und sendet dann ein (UDP, TCP oder was auch immer) Ethernet-Paket.

genauer erklären?

die sps gibt mir in jedem zyklus daten max 240 byte. Aber welche daten? wenn ich viel dbs haben mit insgedamt 500kb geht das nich oder?
 
die sps gibt mir in jedem zyklus daten max 240 byte. Aber welche daten? wenn ich viel dbs haben mit insgedamt 500kb geht das nich oder?
Hier gilt entweder viel Daten und die langsam oder wenig Daten und die dafür schnell. Bei der vorgeschlagenen Variante ist allerdings eine Profibus-DP-Masterkarte für den PC erforderlich um die 240 Bytes Nutzdaten lesen zu können.
 
Wie handelt das der Softing OPC Server? der muss ja ständig die geänderten daten von der SPS lesen, machtder auch polling? bei vielen daten ist das doch gravierend.. oder gibt die AGLink event bei änderungen?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Der DELTALOGIC und der Softing OPC-Server pollen die SPS und prüfen auf Änderung. AGLink kommuniziert nur und stellt die gewünschten Daten zur Verfügung. Wenn es darum geht, dass die SPS die Änderungen mitteilen soll, dann sind ganz andere Mechanismen erforderlich.
Ach ja, der Siemens OPC-Server pollt auch nur.
 
Ok, nehmen wir an eine read funktion (AGLink) operation 1KB dauert 100ms! Nun habe ich 20 DB jweis 30KB, dann muss ich ja 600 mal die funktion aufrufen, damit ich alles daten der sPS gelesen habe.. dauer 60000ms = 1 minute?? ein kompletter polling vorgang dauer also 1 minute , kann das überhuapt sein?
 
Versuch doch mal mit LibNoDave einen von deinen DBs komplett zu lesen.

Nimm dazu die Funktion daveReadManyBytes und schau mal wie lange das dauert.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hmm ok mach ich;)

d.h. mit readBytes kann ich max. byte in pud größe auslesen, und readmanybytes wird interen blockweise lesen bis alles daten da sind?
sorry das ich nerve, aber für libnodave gibts ja keine doku, bzw. hab kein gefunden.

1KB dauert 78ms;) 40KB dauert 2800ms. habe ich meinentwegen 30DB mit 40KB dauerst halt 84sekunden.
 
Im LibNoDave-Ordner gibts /doc/ da steht doch was drin.

Aber ich denke für deinen Zweck brauchst du eine andere Kommunikationsart. Um Zeit zu sparen würde ich, wie schon mal erwähnt, die Kommunikation über eine projektierte ISO-ON-TCP- oder reine TCP-Verbindung abhandeln. Bei Bausteinänderung / Datenänderung lass' die SPS mit AG_SEND (300er) / AG_LSEND (400er) die Daten senden. Deine Software muss die Daten dann nur über eine Socketverbindung annehmen.
 
Ok, d.h. die SPS muss mir die datenänderung selber über ein packet schicken. Das muss aber auf der SPS auch programmiert werden oder, ein puffer da anlegen wo geänderte variablen drin sind und in nem best. zyklus hoch schicken? Muss das ganze dann vom SPS Programmiere via AWL implementiert werden?
 
Guten Morgen zollel,

kannst du mir das:



genauer erklären?

die sps gibt mir in jedem zyklus daten max 240 byte. Aber welche daten?
Die, die du von der SPS aus sendest. Es muß also in der SPS programmiert werden.

wenn ich viel dbs haben mit insgedamt 500kb geht das nich oder?
Doch, entweder die 500kB in 2000 Häppchen übermitteln oder (Aufwand in der SPS) nur die Änderungen gegenüber dem letzten Zyklus übermitteln (Viel Arbeit für die SPS).
Die theoretische Grenze ist erreicht, wenn die Änderungen größer als der Durchsatz auf dem Profibus sind.

Rainer Hönle schrieb:
Bei der vorgeschlagenen Variante ist allerdings eine Profibus-DP-Masterkarte für den PC erforderlich um die 240 Bytes Nutzdaten lesen zu können.
Ich schrieb: Gateway. Dabei dachte ich an einen kleine Platine mit Profibus und Ethernet Anschluß. Ähnlich einem DP-DP-Koppler, aber eine Seite DP und die andere Ethernet...
 
Zurück
Oben