Eigener AMS/ADS Client

Zuviel Werbung?
-> Hier kostenlos registrieren
deswegen denke ich das wir aneinander vorbeireden

wie schaffst du es das deine read/write_var funktionen und deinen
notifiy entgegennahme sauber gretrennt sind?
dates du einfach die variablen up wenn anstatt deine read-anwort ein notify reinflattert? - ich denke das will er nicht so haben (find ich auch ein bischen schmutzig)

zu COM und .Net - meine Idee (so mach ichs in meiner Lib) lässt sich auf mehrere Welten adaptieren - also kein "es funktioniert gut weil ich .Net bei mir habe" - sonst würde Neals wohl nicht von Linux sprechen (und ich wette das er nicht Mono im Kopf hat)

und ich hab ja schon gesagt das es nicht der Teil ist den der Benutzer sieht - also steckt das alles doch in der Bibliothek - so wie bei dir
(nur das deine Features Teile der Realisierung sind) und mein Thread-Count ist auch nicht wirklich groesser als bei dir - ein Tribut an die saubere Lösung

mfg LowLevelMahn
 
Zuletzt bearbeitet:
Asynchroner und synchroner Teil müssen getrennt werden. Die Notifys sind ja in erster Linie nur dazu da Variablen zu lesen.

Das mit Linux hatte ich schon wieder glatt vergessen. Da haste Recht.

Zum Thema Verbindung. Selbst wenn die ADL-Lib nur ein Handle bereitstellt, es ist eine Netzwerkverbindung zu einer Adresse:port und wirklich nur eine. Daher brauch es auch nur einen Thread für alle Variablen evtl. optional mit Callback.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
jetzt sind wir wieder auf einer ebene

Zum Thema Verbindung. Selbst wenn die ADL-Lib nur ein Handle bereitstellt, es ist eine Netzwerkverbindung zu einer Adresse:port und wirklich nur eine. Daher brauch es auch nur einen Thread für alle Variablen evtl. optional mit Callback.

ist 100% mir klar - mein Ansatz verhindert nur das man mit einem Callback kontextbeschmutzend durchs System wandert - ich brauch keinen - ich hab nur einen auf signalisierung wartenden Abnehmer der Information
 
Ich glaube, ich bin zur Zeit viel zu sehr im Denken in .Net gefangen. Abseits davon sehe ich entweder nur Callbacks oder eine Event-Queque, um daraus wieder Aufrufe von Methoden von Objekten zu machen.

Vielleicht kannst du mir deinen Ansatz etwas anders erklären?
 
Zuletzt bearbeitet:
Hab jetzt nen Mutex, zum stoppen verwendet.
Starte EINEN NotificationThread, der durchgehen (in einer Schleife) nachsieht ob Daten eingehen und bei einer Notifcation das Event feuert.
Wenn jetzt eine Anfrage gestellt wird (bsp. Read), werden die Daten gesendet und der Mutex gesetzt. Dadurch wird das abarbeiten des NotificationThreads gestoppt. Jetzt wird synchron empfangen und differenziert. Wenn es eine Notification ist, wird das Event gefeuert und die Schleife neu gestartet. Wenn es die Antwort auf meine Anfrage ist, werden die Daten zurückgegeben, das Mutex wieder resettet und der NotificationThread läuft somit weiter.

Danke euch beiden für die heiße Diskussion *g*

Benutze die InvokeId des Protokolls zum identifizieren der Packete, programmiere in C# und dem Compact Framework. Das mit Linux am Anfang war nur nen Beispiel zur Verwendung.
 
So, jetzt läufts alles voll synchron und ohne Threads... habs mit dem Windows.Form.Timer umgesetzt

class ReceiveTimer
{
private readonly EventHandler receiveCallback;
private readonly Timer timer;

internal ReceiveTimer(EventHandler Callback, int Period)
{
receiveCallback = Callback;
timer = new Timer {Interval = Period};
timer.Tick += ReceiveTimerTick;
}

void ReceiveTimerTick(object sender, EventArgs e)
{
receiveCallback(sender, e);
}

internal void Start()
{
timer.Enabled = true;
timer.Start();
}

internal void Stop()
{
timer.Stop();
timer.Enabled = false;
}

}
Habs jetzt alles hin, Grundlagen sind fertig, Notifications werden empfangen... bin gerade dabei eventuelle Fehler abzufangen, die Events einzubinden und Doku zu schreiben.

Habe schon bissl am asynchronen Client geschrieben... nur bin ich mir über den Entwurf nicht sicher. Empfangen und senden usw. läuft alles super, habe nur Probleme mit den Funktionsaufrufen. Es müsste ja jeder Funktion des Clients nen Callback übergeben werden. Um dann auch die entsprechenden Rückgabewerte übergeben zu können, müsste für jede Funktion nen extra Callback erstellt werden, das ist doch ein wenig lästig für den User?! Jemand ne Idea, wie ich die Anzahl an Callback-Delegates verringern kann?

Welche Features fehlen noch allgemein? Welche sollten implementiert werden? Auf was sollte ich Rücksicht nehmen?
 
Zuletzt bearbeitet:
Hallo Neals
Stehe gerade vor dem gleichen Problem da Twincat CP nicht mehr als Download angeboten wird. (oder ich habs nicht gefunden:D)
Hast du deinen Client lauffähig zu Ende gebracht und würdest ihn teilen?
Holger
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Holgermaid,

TwinCAT CP kannst du installieren über das TwinCAT2 Setup.
Alernativ (was ich bevorzugen würde) wäre das TwinCAT3 ADS-Setup. Hier wird "nur" der Router ... installiert ohne Echtzeitkomponente o.ä.

Guga
 
Zurück
Oben