Forum: Mikrocontroller und Digitale Elektronik Arduino Webserver Anzahl Verbindungen gleichzeitig


von Seppi (Gast)


Lesenswert?

Hallo,

habe einen Webserver Arduino DUE mit Ethernet Shield.
Der Webserver bekommt seine Daten über eine Serielleschnittstelle.
Die Serielleschnittstelle läuft im Interrupt. Jetzt kann passieren wenn 
zwei auf den Webserver zugreifen das er da durcheinander kommt mit dem 
Abfragen der Daten über die Serielle schnittstelle. Ist es möglich den 
zweiten Teilnehmer kurze Zeit zu blockieren bis die Daten vom ersten 
Teilnehmer kommplett dargestellt sind (oder die Daten komplett Empfangen 
wurden über die Serielleschnittstelle).
Die Webseiten liegen auf der Sd-Karte.
Austausch von dem jeweiligen Zustand erfolgt über Ajax.

von Peter II (Gast)


Lesenswert?

Seppi schrieb:
> Ist es möglich den
> zweiten Teilnehmer kurze Zeit zu blockieren bis die Daten vom ersten
> Teilnehmer kommplett dargestellt sind (oder die Daten komplett Empfangen
> wurden über die Serielleschnittstelle).

ja.

für mehr Infos muss man den code sehen.

von Seppi (Gast)


Lesenswert?

Code wäre jetzt zu lange um den komplett zu senden.
Ist so aufgebaut.
Das Beispiel WEbserver. Die einzelnen Html Seiten je nach Anfrage 
geladen.
Und über Ajax wird der jweielige Stauts zurückgegeben.
Die Daten werden über die Serielle Schnittstelle übertragen.
Wenn ich eine zweite verbindung aufbauen frägt er ja die Daten auch 
wieder ab je nach Webseite und dann kommt es zu schwierigkeiten auf der 
Seriellen Schnittstellt bzw. bei meinem Empfänger. Die Datenafrage 
erfolgt alle Sekunde.

von Seppi (Gast)


Lesenswert?

Wie kann ich den 2 bzw 3 Teilnehmer kurze Zeit zu blockieren so das erst 
die eine Abfrage erfolgt dann für den nächsten Teilnehmer.
Hat wer ein einfaches Beispiel.

Danke

von foo (Gast)


Lesenswert?

Seppi schrieb:
> Code wäre jetzt zu lange um den komplett zu senden.

Seppi schrieb:
> Hat wer ein einfaches Beispiel.

Einfaches Beispiel wäre jetzt zu lange um das komplett zu senden.
Dein Stichwort lautet Mutex.

von Karl H. (kbuchegg)


Lesenswert?

Seppi schrieb:
> Hallo,
>
> habe einen Webserver Arduino DUE mit Ethernet Shield.
> Der Webserver bekommt seine Daten über eine Serielleschnittstelle.
> Die Serielleschnittstelle läuft im Interrupt. Jetzt kann passieren wenn
> zwei auf den Webserver zugreifen das er da durcheinander kommt mit dem
> Abfragen der Daten über die Serielle schnittstelle. Ist es möglich den
> zweiten Teilnehmer kurze Zeit zu blockieren bis die Daten vom ersten
> Teilnehmer kommplett dargestellt sind (oder die Daten komplett Empfangen
> wurden über die Serielleschnittstelle).

Es gibt mehrere Möglichkeiten, wie du das Problem in den Griff kriegen 
kannst.
Wenn es sich nur um relativ wenige mögliche Daten handelt, dann lässt du 
gar nicht von der Web-Verbindung aus auf die Serielle zugreifen. Statt 
dessen hast du einen Mechanismus, der ständig per Serieller die Daten 
abfragt und die Ergebnisse in Variablen im Server vorhält. Eingehende 
Web-Anfragen werden aus diesem Pool bedient.

Das geht natürlich nur, wenn per Serieller nicht tausende verschiedene 
Werte abrufbar sind. Wenn wir aber von ein paar Temperaturen sprechen, 
dann ist das ein gangbarer Weg.

Die andere Alternative ist deutlich aufwändiger und besteht darin zu 
akzeptieren, dass die Serielle eine shared Resource darstellt. D.h. du 
brauchst einen Mechanismus wie der Beginn des Zugriffs auf die Serielle 
eine Blockade für andere Zugriffe errichtet, die erst wieder gelöst 
wird, wenn der Zugriff abgeschlossen ist. Dazu müssen unter Umständen 
auch Anfragen in einer Warteschlange zwischengespeichert werden, ehe sie 
dann an die Reihe kommen.

Ich weiss jetzt auch schon, was als nächstes kommen wird. Du wirst mir 
sagen, dass du ja kein gelernter Informatiker bist und davon eigentlich 
keine Ahnung hast. Dann muss ich zurückfragen: Ja, wie hast du dir das 
denn vorgestellt? Was glaubst du, warum ein Informatik Studium 
mindestens 10 Semester dauert, wenn das im Prinzip jeder Metzger aus dem 
Ärmel schütteln könnte? "Ich will" ist nun mal zu wenig. Du Frage ist 
nicht, was du willst, sondern die Frage ist was du kannst.

von Seppi (Gast)


Lesenswert?

danke für die Antworten. Ich bin kein Informatiker oder Metzger.
Es sind leider nicht nur ein paar Temp werte.
Hab ich mir schon gedacht das nur sowas wie die zweite möglichkeit in 
Frage kommt.

von Personalrat a.D. (Gast)


Lesenswert?

man mutex, man lock

Beispielimplementierungen sucht das nette google für dich.

von Peter II (Gast)


Lesenswert?

Personalrat a.D. schrieb:
> man mutex, man lock
>
> Beispielimplementierungen sucht das nette google für dich.

aber nicht auf einen Arduino DUE

da reicht eine bool variable, die man abfragt.

von Noch einer (Gast)


Lesenswert?

> da reicht ...

Problem sind die Warteschlangen. Speicher rechnen die in Kilobyte. Da 
muss man sich schon Gedanken machen, wie man mehrere Server-Anfragen in 
den Speicher bekommt.

von Peter II (Gast)


Lesenswert?

Noch einer schrieb:
> Problem sind die Warteschlangen. Speicher rechnen die in Kilobyte. Da
> muss man sich schon Gedanken machen, wie man mehrere Server-Anfragen in
> den Speicher bekommt.

die Frage ist wie überhaupt mehre anfragen gleichzeitig bearbeitet 
werden?

ISR können nicht gleichzeitig laufen, und wenn es eine Warteschlange 
gibt erfolgt es der Reihenfolge nach.

Aus dem Grund will ich erst mal den Code sehen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.