Step 7 Webserver Datenaustausch mit SPS

Benni89

Level-1
Beiträge
153
Reaktionspunkte
8
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
habe ein kleines vorhaben.

Haber ein Arduino auf den läuft ein Webserver wo ich mir alle Analogwerte ansehen kann (Temperaturen)
Nun habe ich dort 4 schaltflächen zum einschalten bzw abschalten von 4 Relais.

sieht im Brower ungefähr so aus

Analog1: xxxx °C
Analog2: xxxx °C

DO1: EINGESCHALTET
DO2: AUSGESCHALTET
DO3: EINGESCHALTET
DO4: EINGESCHALTET

DI1: 0
DI2: 1
DI3: 0

nun möchte ich, dass die SPS (317 mir CP) die Analgowerte über das HTTP protokell mir in einen DB schreibt, sowie die Di´s

außerdem möchte ich, dass die SPS die DO´s steuern kann.

Klar kann man das auch alles in dem Arduino Programmieren

Wenn ADC1 > 25°C schalte Do1 auf EIN

mir geht es aber darum die Verbindung und den Datenaustausch zu verstehen bzw zu realisieren aus reinem lerninteresse.

hoffe ihr könnt mir da ein paar tipps und Denkanstöße geben =)
 
Finde ich zwar grausam, aber wenn dir der Sinn danach steht:

http://support.automation.siemens.com/WW/view/de/32048373
TCP Verbindung auf Port 80

http://stackoverflow.com/questions/6686261/what-at-the-bare-minimum-is-required-for-an-http-request
http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Client_request

Minimalen http Request reinwerfen. Vorsicht, die Newline (\r\n) sind zwingend notwendig.
> Im Step7 brauchst du dafür nur $N zu schreiben (glaube ich):
$N - Zeilenumbruch - Der Zeilenumbruch belegt 2 Zeichen in der Zeichenkette


In der Antwort wird allerhand "Müll" (http) enthalten sein, darin musst du die gesuchten Werte dann noch ausfindig machen.
 
Ja also da muss ich dann basteln, das mir der arduino dann statt

Bei den analogwerten das mit nullen auffüllt.

350 = 0350 damit ich immer eine Konstanze telegrammlänge habe.

Kann man das eventuell simulieren ohne die SPS über putty oder so?

Somit kann ich erstmal arduinotechnisch alles optimieren und wenn das läuft kann die SPS quasi meine putty eingaben übernehmen

Gruß benni
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Du kannst curl nehmen, wenns nur um die Länge geht.
Ausgabe in eine Datei umleiten, dann bringt er eine Übersicht - auch mit den empfangenen Bytes.

curl google.de > tmp
% Total % Received % Xferd Average Speed Time Time Time Current
100 218 100 218 0 0 2000 0 --:--:-- --:--:-- --:--:-- 2000
 
Hm also das versteh ich noch nicht so ganz,

würde das nun so machen
SPS sendet an den Arduino
GET /index.html HTTP/1.1

danach empfängt die sps ja die webseite als html.

nur wollte ich gerne 8 Ausgänge als eine abfrage übertragen

index.html?DO1=1&DO2=0&DO3=1

das sollte meine ich so funktionieren
 
Solange nichts ausgelesen werden soll, müsste es sogar reichen direkt die URL mit den Parametern anzusprechen.
Vorrausgesetzt natürlich dein Webservern nutzt überhaupt GET im FORM (method="get")?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
warum machst du das über den Webserver? Bau dir doch auf dem Arduino einen TCP-Server auf und kommunizier mit der SPS über ein eigenes Protokoll. Wäre jetzt mein Ansatz für die Geschichte.
 
Hallo, erstmal danke an Pipboy bin etwas am testen, habe aber aktuell auf dem arduino die probleme

Ronnie.b: Gute idee, aber es ist so:

Arduino UNO mit EthernetShield hat ein wiznet w5100 Chip damit klappt das mit TCP/IP

Nun habe ich aber das AVR Net-IO von Pollin, da gibt es eine LIB für nennt sich "Netino" der hat allerdings den "enc28j60" als controller, der kann nur per Webserver fungieren, bzw die Library davon, vielleicht hast du eine idee und kannst da mal reinschauen?

Grundsetzlich geht das so das der Befehl der URL angehängt werden muss Also
index.html?DO1=1 //Ausgang Einschalten
index.html?DO1=0//Ausgang Ausschalten

Aktuell scheitert es an der portierung vom Arduino auf das AVR Net-IO
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Emilio, dass Programm kenne ich schon,

Das funktioniert leider aufgrund der unterschiedlichen Längen der Parameter nicht mit einem cp

Daher den Umweg über http

Emilio du bastelst ja auch viel, hast du den enc Ethernet Chip als reinen Webserver am laufen?
 
Hallo
am Arduino habe ich nur ein LCD kein Webserver. Das AVR benutze ich nicht mehr.
Bei meiner 315 PN konnte man eine TCP verbindung relativ einfach einrichten
 
Zuletzt bearbeitet:
Achso ja mein net-iO kann ich nun wie ein arduino beschreiben :-)

Nur der Netzwerk Chip ist etwas blöd

Wechseln nutzt du an deinem arduino denn?

Tcpip funktioniert auch aber durch die unterschiedlichen Telegrammlängen gibt das Probleme, die pn CPUs können das

Habe ja nur ag_send und ag_recv

Beispiel adc1: 0 - 1023

Habe ich unterschiedliche Längen :-/
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Tcpip funktioniert auch aber durch die unterschiedlichen Telegrammlängen gibt das Probleme, die pn CPUs können das

Das ist so nicht ganz richtig. Man kann das auch mit einem CP machen. Ich hab das selbst schon gemacht für eine Kommunikation zu einem Atlas Copco Schrauber. Man braucht in dem Telegramm allerdings einen Header mit der Längenangabe dann funktioniert das ohne Probleme.

Ich hab mir grad mal die Doku des Net-IO angeschaut. Da ist ja schon ein TCP-Server drauf. Du könntest in deiner S7 immer mit der Länge 1 empfangen und das Empfangene zusammensetzen bis "\r\n" kommt. Dann hast du dir immer die komplette Antwort zusammengesetzt.
 
gab es mit einem byte nicht probleme, dass es nicht alle cps unterstützen?

schön wär es aber, dass man ggf auch über den Webbrowser steuern kann.

Soweit ich weiß, sendet das Net-io standart nur ACK und NAK als quittierung

Bei den Analogwerten kommt aber nur 0,12,123,1023 zurück also variable :-/

get Status wär wieder S11111111

und digital in wär 0 oder 1

glaub mit HTTP wär das besser, bin leider noch nicht dazu gekommen mit dem arduino das anzupassen

Stelle mir das so vor

Webseite
DO : DI
ADC1:ADC2:ADC3:ADC4:11111111:1111

und so würde die sps das dann auslesen aber stehe da leider noch ganz am anfang :-/
 
Zuletzt bearbeitet:
Zurück
Oben