Schnelle Datenübertragung, Datenspeicherung und Datenvisualisierung

Zuviel Werbung?
-> Hier kostenlos registrieren
So wie du das schreibst, klingt es so, als wäre Hard- oder Soft-Realtime so einen Art Option zum einschalten. Nur so als Frage: Dir ist klar das Harte Echtzeit nur ein Zeitverhalten garantiert nicht das es besonders schnell ist.

Zum Thema 'Wie ich etwas schreibe' bzw. was du da heraus liest, darf mich mich selber aus Posting Nr.16 zitieren.

Burkhard schrieb:
Grundsaetzlich muss man leider sagen, dass sich die Programmiersprache vb.net nicht fuer harte Echtzeitanwendungen eignet. Echtzeit bedeutet in dem Fall nicht "besonders schnell" sondern "deterministisch", das heisst, man kann Erwarten dass ein Thread innerhalb garantierter Intervalle aufgerufen wird und sein Abarbeitungs-Intervall nicht in Abhaengigkeit von der Auslastung anderer Threads in Mitleidenschaft gezogen wird, wie das bei mir (meiner vb.net Applikation) eben der Fall ist.

Windows ist in gewissen Grenzen ein Soft-Realtime-System und mit meiner Applikation wollte ich diese Grenzen einfach mal austesten um zu sehen wie gut oder schlecht diese Soft-Realtime so ist. So viel zum Thema, warum ich hier von Hard- und Soft-Realtime spreche.

Nun noch meinen Senf zum Thema: 'Windows ist das Problem'. Offensichtlich gibt es Systeme wie TwinCat und IntervalZero RTX die Windows in ein hartes RTOS verwandeln. Mit TwinCat kenne ich mich aus. Das installiert man auf dem PC und hat dann den System-Service in der Task-Leiste. Dann kann man anfangen nach IEC1131 sein Programm zu schreiben und mittels des ADS-OCX Daten mit mit einer vb.net Applikation auszutauschen.

Ich arbeite bei sowas mit C/C++ - damit kann man einfach viel gezielter (weil man gezwungen ist) die Heap-Bewegung usw. kontrollieren - wenn es denn wichtig ist
einen Geschwindigkeitsvergleichen zwischen .Net und C++ resultierendem Code ist zu Anwendungsspezifisch deswegen kann man dazu kaum oder nur schlechtes sagen. Die RTX ist eine Soft-SPS und "könnte" dir kürzere Abtastraten als 30ms bringen - oder meinst du RTX mit C++ programmieren?

Ich meinte das IntervalZero RTX, siehe hier:

https://de.wikipedia.org/wiki/RTX:_Real_Time_eXtensions_für_Windows

Da heisst es:

RTX wird von Embedded-Geräteherstellern verwendet, die Windows als handelsübliches Betriebssystem nutzen, jedoch den Bedarf an einem Echtzeit-Betriebssystem (RTOS) haben. Durch den Software-Einsatz kann auf zusätzliche Echtzeit-Hardware verzichtet werden.Die Anwendungsentwicklung für RTX64/RTX erfolgt mit Microsoft Visual Studio in C/C++ mit Windows-artigen APIs. RTX64/RTX ausführbare Dateien tragen die Namenserweiterungen «.rtss» und DLLs verwenden «.rtdll».


 
Zum Thema 'Wie ich etwas schreibe' bzw. was du da heraus liest, darf mich mich selber aus Posting Nr.16 zitieren.

ich habe mich einfach durch dein "Ich habe bisher immer die Soft-Realtime-Faehigkeiten genutzt" iritieren lassen

Nun noch meinen Senf zum Thema: 'Windows ist das Problem'. Offensichtlich gibt es Systeme wie TwinCat und IntervalZero RTX die Windows in ein hartes RTOS verwandeln.

deren gibt es viele INTime, CeWin (nicht WinCE), und und und - die erlaube harte Echtzeit in einem abgekoppelten Subsystem unter Windows und meist
auch die Kommunikation mit dem Host-Windows

mir ist aber aus deinen Post nicht ganz klar was du erreichen willst

du hast eine NC, eine S7 mit der du mit Libnodave kommuniziert und auch TwinCAT zum daddeln rumliegen, du
hast auch davon gesprochen die Visualisierung in LabView zu machen falls es dafür besser geeignet ist

1. am Anfang ging es nur um die Kommunikation - multiple Threads per SPS, auf n Verbindungen als Thread usw.
mit der du jetzt eine Raten im GUI von 30-40ms erreichst

2. jetzt hast du x Verbesserungen im GUI-Code gemacht und deine Applikation läuft immer schneller/besser

3. dann ging es plötzlich um Harte- und Softe Echtzeit per Windows-Extension - was hat das mit deiner Applikation zu tun?
denkst du deine TCP/IP-Kommunikation oder GUI werden damit schneller?

deine Chart-Komponenten und GUI frisst viel Zeit - wie du ja schon bemerkt hast - deswegen mein Tip auch mal eine andere
Chart-Komponenten zu testen die noch schneller ist - oder sogar für hohe Geschwindigkeit entwickelt wurde

deine Applikation läuft nicht in der Echtzeiterweiterung und selbst wenn
würde dein GUI dadurch auch nicht schneller - eher langsamer

und wenn es dir um Mini-Details und Zeitverhalten geht musst du das ganze eher
auf C/C++ Basis machen, nur Konsole ohne Ausgabe, alles in fix allokierte und Zeiterfassung nutzen die nicht schon per se 10-20ms ungenau ist
damit du 100% frei von Einflüssen bist

was hast du also vor? - das ist es was mich an deinen Postings verwirrt
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
was hast du also vor? - das ist es was mich an deinen Postings verwirrt

Na ich hab doch geschrieben, ich will ein Programm schreiben mit dem ich Daten aus mehreren PLCs lesen kann und gleichzeitig mein Wissen über Multi-Threading erweitern und die Grenzen der Soft-realtime von Windows und vb.net austesten.

Gleichzeitig bin ich auf der Suche nach Verbesserung der Realtime-Faehigkeiten. Denn unter vb.net bin ich da sicher an der Grenze des machbaren.

Wenn ich da mehr C++ programmieren muss, auch gut. Ich habe bereits Erfahrungen mit C++. Beispielsweise habe ich das Lesen und Schreiben mit ReadRequests mit libnodave mit einem kleinen C++ Programm realisiert. Aber ich vermute, das Programmieren von Threads ist unter C++ nicht so einfach wie mit dem .net-Framework. Auch kann ich unter C++ nicht die Toolbox-library von Jochen verwenden.
 
Zuletzt bearbeitet:
Na ich hab doch geschrieben, ich will ein Programm schreiben mit dem ich Daten aus mehreren PLCs lesen kann und gleichzeitig


Das habe ich schon verstanden - nur deine letzten Ausflüge Richtung Echtzeit-Erweiterung passen nicht ins Bild - oder du hast eben immer noch nicht
gesagt was du mit der Erweiterung machen willst/dir erhoffst? Und weil ich nicht verstehe was dir das in deine jetzigen Situation bringen soll wirkt dein
Echtzeitfachwissen ein wenig Wikipedia-basiert :)


mein Wissen über Multi-Threading erweitern und die Grenzen der Soft-realtime von Windows und vb.net austesten.


denkst du das du mit den 30ms per TCP/IP und den paar Threads schon an die Grenze von Windows/VB.Net gehst? - das fehlt aber schon noch was
die SPS ist hier die stark beschränkende Einheit - und moeglicherweise dein Chart wenn schneller Datenkommmen - und da kannst du nur noch mit direkter SPS<->PC TCP/IP-Kommunikation (also mit SPS Programmierung) mehr erreichen
Das hat aber alles absolut nichts mit der Echtzeitfähigkeiten von deinem Betriebssystem noch VB.Net zu tun - oder was denkst du?


Erstmal: Profiler - wo sind deine Bottlenecks


ANTS von Redgate (als Demo) http://www.red-gate.com/de/products/dotnet-development/ants-performance-profiler/


1. Strategie - Belastungstest deiner Infrastruktur (mit Profiler)


Erweiter dein Sytem um eine "künstliche" SPS(libnodave Klasse) die sehr sehr viel schneller Daten liefert als die echte SPS und schau welche Raten du da erreichst
Falls du die libnodave Aufrufe in einer Klasse gekapselt hast diese durch einen libnodave-Fake ersetzbar machen (mit gleichem Interface)
du solltest damit so nah wie moeglich an der SPS bleiben damit deine künstliche SPS auch durch deine normale Infrastruktur Daten liefert - keine Abkürzungen
damit kannst du im Profiler viel deutlicher feststellen wie Performant deine Verarbeitung ist UND Synchronisationsprobleme-Probleme besser/häufiger Aufdecken -> langsam=fast immer sicher, sau-schnell=böse

erstmal deine GUI komplett für das Profiling abkoppel (mach es am besten abkoppelbar) - und keine Ausgabe (auch nicht Konsole - die ist noch langsamer wegen den Consolen-Puffern)

2. Strategie - eine schnellere SPS die ueber libnodave funktioniert


Installier (als Demo) dir die Soft-SPS von Deltalogic damit kannst du unbegrenzt Read/Write per libnodave machen
http://www.deltalogic.de/automatisierungstechnik/software/accontrol-s7-win32.html
nur eben schneller als mit der echten SPS


3. Strategie - auch mal eine andere Kommunikationlibrary - siehe AGLink (http://www.deltalogic.de/automatisierungstechnik/software/accon-aglink.html) - auch mit VB.Net, einfach nur als vergleich
Vergleichen ist immer gut um ein Gefühl für die Komponenten (GUI, SPS-Kommunikation, Infrastruktur) zu bekommen


(4. Strategie) ein anderes Chart-Tool


also

Code:
SPS (echte S7, Accontrol) --------> Kommunikations-Object ( per Libnodave, als Simulation (=brutal schnell), AGLink) ----> deine Infrastruktur (Liste, Puffer, etc) ----> GUI/Chart (z.B. [URL]http://arction.com[/URL])

fuer die Verbindungsabstraktion wuerde ich zur Vereinfachung folgendes machen

Code:
class DBVar
   DB-Nr, Offset, Value

interface Verbindung
  Verbindung(IP, Rack, Slot)
  Read(DBVar)
  Read(DBVar[])

  konrekte Klassen mit den spezifischen Konstruktor und Read-Methoden
  class LibnodaveVerbindung: Verbindung
  class AGLinkVerbindung: Verbindung
  class SimulationVerbindung: Verbindung (liefert einfach fixe Werte - kein Random weil das auch Zeit kostet)

wenn du dann die Verbindungsklasse als generischen-Parameter in deinen Test gibts kannst du leich hin und her wechseln
- und dein ganzer Code mit Thread pro SPS, Thread pro Verbindung usw bleibt voellig unveraendert (das/soll muss auch so sein)

und du musst damit es Sinnvoll ist die Strategie 1 (Profiling, Messen) und dann Strategie 2 fahren

Gleichzeitig bin ich auf der Suche nach Verbesserung der Realtime-Faehigkeiten.
Denn unter vb.net bin ich da sicher an der Grenze des machbaren.


Wenn du auf der TCP/IP-Seite nichts mehr reissen kannst (und die Kommunikation dort ist ja nicht wirklich Umfrangreich)
kannst du nur doch an deinem Programm arbeiten - da wäre Strategie 1-4 schon mal der richtige Weg


Wenn ich da mehr C++ programmieren muss, auch gut.


erstmal dein VB.Net Programm ordentlich Benchmarken (die künstliche Tests mit einer simulierten SPS)


das Wissen laesst sich genau so auf C++ anwenden - nur eben kleiner/statische :)
 
Zuletzt bearbeitet:
Hallo LowLevelMahn, vielen Dank fuer die hilfreichen Hinweise. Ich will gerne soviel wie moeglich lernen.

Das Arction-Chart ist ja schweineteuer!! Wow!!
 
Zuviel Werbung?
-> Hier kostenlos registrieren
du hast eben immer noch nicht
gesagt was du mit der Erweiterung machen willst/dir erhoffst

und?

denkst du das du mit den 30ms per TCP/IP und den paar Threads schon an die Grenze von Windows/VB.Net gehst?

und?

Hallo LowLevelMahn, vielen Dank fuer die hilfreichen Hinweise

keine Hinweise - Arbeitsanweisungen :)

Ich will gerne soviel wie moeglich lernen.

du meinst implementieren - lernen ist immer dabei

Das Arction-Chart ist ja schweineteuer!! Wow!!

deine Arbeitszeit/Versuche/Fehler kosten sehr schnell mehr
 
Zuletzt bearbeitet:
Zurück
Oben