# VIPA CPU 313SC Datenaustausch mit PC



## torstenh (27 Dezember 2009)

Hallo zusammen,

habe ein Problem mit einem Projekt welches ich im nächsten Jahr neu starten möchte. Bin im Moment noch in der Konzeptfindung und stecke nun ein wenig fest.
Zum Einsatz soll eine CPU 313SC kommen. Mit dieser möchte ich gern alle E/A`s bzw Datenbausteine beobachten und vielleicht auch steuern. Im Vorrang steht aber die Beobachtung der Daten. Die Anbindung möchte ich gern über die integrierte TCP/IP machen. Da diese aber nicht sauber ist, kommt auch ein CP in Frage. Dieses soll Webbasiert funktionieren. Das heißt das ich mir eine Visualisierung in PHP erstellen möchte um hier die Daten der SPS darzustellen. Als Kommunikationsschnittstelle reicht ein xml, txt File welches ich mit PHP auslesen möchte und mir entsprechende Diagramme oder Bitinfos dastellen möchte. Eine Erstellung des Files reicht pro sek.
Nun zu meiner Frage:
Muss ich die Kommunikation unbedingt über einen OPC Server/Client machen?
Wenn ja: was ist eine gute Freeware Version?
Wenn nein: wie kann ich das ohne OPC Server realisieren?
welche Möglichkeit gibt es noch ein Webanwendung zu realisieren?
Entscheidender Nachteil für mich ist, ich habe keine Ahnung von .net.

Ich bin dankbar für jede Hilfe!

bis dann
TH


----------



## S7_Programmer (27 Dezember 2009)

*S7 mit PHP über TCP*

Hallo,

ich habe selbst schon einen Datenaustausch mit PHP hinbekommen.
Eine Datei, die Du mit PHP abholst, kannst Du auf der S7 Seite nicht erstellen.

Ich habe das so gemacht:
1. Ich habe S7-seitig eine TCP-Verbindung zu dem gewüchsten PC
projektiert (IP-Adressen und Ports müssen passen)
2. auf dem gewünschten PC habe ich XAMPP mit PHP installiert. Das PHP-Programm wird in einem Eingabefenster gestartet.
3. Ich habe die Daten, die Du in PHP haben willst, zu einer langen Zeichenkette (in meinem Fall konnte dies über 1000 Zeichen lang sein) zusammengestellt. Jede Variable wird dazu in ASCII-String umgewandelt; als Trennzeichen habe ich des "#" (Gartenzaun) verwendet; Als Abschluß nahm ich das "CR" Zeichen. Die Zeichenkette wird dann über TCP (AG-Send) weggschickt.
4. Auf dem PHP-PC muss ein PHP-Programm laufen, das die Zeichen über Winsock empfängt.
5. Die empfangene Zeichenkette kann dann php-seitig mit "explode" zerlegt werden. Was mit den Daten geschieht muss dann programmiert werden, in meinem Fall wurden die Daten in eine MySQL-Datenbank geschrieben.
6. Bei meiner Anwendung wurden dann (Antworts-)Daten zurückgeschrieben, weibei es sehr viel hilft, wenn die Zeichkettenlänge festgelegt wird, die muss dann bei AG-REC angegeben werden. In meinem Fall waren das 150Zeichen. Die Zeichkettenlänge muss immer fest bleiben, sonst funktioniert das mit AG-REC nicht!; ich hab die fehlenden Zeichen einfach mit "000000" aufgefüllt. Die Zeichekette wird dann über winsock-funktion zur SPS geschickt.
7.Die Zeichenkette wird SPS-Seitig mit AG-REC emfangen und wieder zerlegt. Was dann mit den Variablen passiert, steht im SPS-Programm.

Ich brauchte für meine Anwendung keinen OPC-Server oder ähnliches.
Ich benutze für meine Anwendung ausschließlich OpenSource Software!
Alles lizenzkostenfrei!

Ich hoffe, dass Du erst mal einen Einblick gewonnen hast.

Falls Du nähre Informationen brauchst, melde Dich. Da ich nicht oft online bin, kanns mit der Bearbeitung ein weing dauern...

Gruß
S7_Programmer


----------



## Chefmech (29 Dezember 2009)

Was heisst denn für dich die Schnittstelle ist nicht sauber?

ev. kannst da auch was mit LibNoDave machen...
http://libnodave.sourceforge.net/


----------



## torstenh (29 Dezember 2009)

Hallo,

also diese Variante von S7 Programmer gefällt mir gut. Ich dachte nicht das es so "relativ" einfach zu machen geht. Wie gesagt relativ.
Würde ich sogar bevorzugen. Ja, mehr Infos wären nicht schlecht. 
Da ich noch ein Anfänger was php betrifft bin. Habe schon einige Sachen realisiert aber muss halt noch viel lesen.

....zur Schnittstelle! habe mal probiert mit VIPA ein Netzwerk über andere CP lean aufzubauen. Bin verzweifelt!!!! bis ich dann von VIPA hörte das es nur eine Programmierschnittstelle ist und man für eine Vernetzung mehrerer CPU eine zusätzlichen CP parametrieren muss. Gesagt getan und lief. Darum dachte ich das es keine reine TCP/IP Verbindung ist. Kann mich da auch täuschen 

Grüße,
Torsten


----------



## S7_Programmer (29 Dezember 2009)

Hallo Torsten,

ich sehe, dass Du Interesse an dieser Art der Verbindung hast. Also wollen wir's mal probieren.... (ich mach das mit der Hilfe heute zum erstenmal, wenn mal was nicht so hinhaut, dann übe bitte Nachsicht).

Ich denke dass Du erst mal die Konfiguration der CP hinbekommen mußt.

Ich hatte bei meinen Projekten eine VIPA 315SN/Net-CPU.
Die wird im Simatic-Hardware-Manager als eine Siemens 318-2 projektiert.
Ich hab' dir mal meine Einstellungen als Bildschirm-Copy in der PDF beigelegt; die meiner Meinung nach wichtigen Einstellungen habe ich mit Pfeilen gekennzeichnet.
Ich denke, dass Du Deine CP entsprechend parametrieren kannst.

Als nächstes solltetest Du die Verbindungsparameter eintragen.
Auch hier einige Bildschirm-Copys in der PDF.
Bei der "neuen Verbindung" wählst Du "unspezifizierten" Teilnehmer und "TCP-Verbindung".

Dann füll die Adressen, Ports, Wegewahl, etc. aus und gehe zu
speichern/übersetzen und ins AG spielen.

Dann sollte das AG seitig erst mal sein, denn nun richten wir den PC her.

Auf dem PC solltest Du per Ping die SPS erreichen können.
Also Eingabefenster öffnen und "Ping SPS-IP-Nr" eingeben und die Verbindung sollte IO sein.

Auf dem PC sollte XAMPP installiert sein. Dann machst Du unter c:\xampp\php ein Verzeichnis prg. Hier stellst Du die Datei S7_zu_PHP.php rein. 
Ich habe alles aus dem Programm gelöscht, was Dich nicht intressieren sollte...; kann aber auch sein dass ich zuviel gelöscht habe.
Dann Eingabefenster öffnen, dann cd \c:\xampp\php\prg eingeben, dann Programm starten mit "..\php S7_zu_PRG.php". Das Programm kannst Du mit CTRL+C abbrechen. Vergiss nicht Deine IP-Adresse einzutragen.

Auf dem S7-Netpro solltes Du per "Verbindungsstatus" erkennen können, dass die Verbindung aufgebaut ist; Ein anderer Weg hierfür ist ein Rechts-Click auf CP bei Projektmanager, dann Diagnose und dann Start "Spezialdiagnose". Hier sollte dann unter TCP-Verbindung die Verbindung stehen.

Falls Du das alles geschafft hast, kannst Du dass mit AG-Send und AG-Rec versuchen. Ich hoffe, dass Du das hinkriegst. 

Fallst Du (oder andere hier im Forum) weiter Hilfe brauchst, dann stelle hier die Frage. Ich wäre bei meiner Anwendung froh geweesen, wenn ich Hilfe bekommen hätte. Einer muß mal anfangen... gemeinsam gehts besser!


Gruß und viel Erfolg


PC_Programmer


----------



## torstenh (30 Dezember 2009)

Hi,

DANKE für Deine Unterstützung!!!!!!!!!!!!

also CPU kann ich "anklingeln" und sie meldet sich auch im Netz. Habe ein Netzwerk über einen Router mit 4 PC laufen.
Als Server verwende ich "Jana" Server. PHP ist installiert. Der Zugriff über Port 80 funktioniert auch (http:// SPS-IP). Heißt ich denke das Hardwareseitig die Verbindung steht.
Leider bin ich ab morgen nicht mehr hier, bin bis "nächstes Jahr" auf Achse und kann leider nicht weiter testen. Ich würde mich aber wieder hier melden wenn ich da bin. Spätestens am 3. Januar.Xampp ist ebenfallst eine Serversoftware welche php unterstützt? oder ist hier etwas besonderes zu beachten?
Die Pfadangaben zu Deiner Datei müsste ich dan ändern um den Script aufzurufen.

PS.: ist der zusätzliche CP ein muss? oder geht es auch über die integrierte TCP/IP

Grüße,
Torsten


----------



## S7_Programmer (30 Dezember 2009)

Hallo,

Für die PHP/S7-Verbindung solltest Du nicht den Port 80 benutzen; ich benutze einen Port größer 2000, wie im Beispiel.

XAMPP ist ein Programmpaket für Windows/Linux=X, Apache=A, MySQL=M, Php=P und Perl=P.
Das kannst Du für Inbetriebnahme-Zwecke auf Dein PG  installieren, ich nahm die Zip-Version, die brauchst Du nur entpacken, das schreibt nichts in die Registry und so!. Dann kannst Du den Apache und gegebenenfalls MySQL auf deinem PG starten und du hast dann einen eigenen Apache-Server auf localhost. Ich persönlich habe die XAMPP zusätzlich auf einen Memory-Stick gespeichert, dann kann man das auf jedem beliebigen (Windows)-PC im Netzwerk einfach so starten und mal testen. Fallst Du das Teil nicht mehr brauchst, kannst Du das Unterverzeichnis mit Unterordner einfach löschen (ich befürchte allerdings, das Du für XAMPP auch in Zunkunft eine Verwendung hast).

Hier der Link für XAMPP = http://www.apachefriends.org/de/xampp-windows.html
Der Link für Zip-Datei = http://www.apachefriends.org/download.php?xampp-win32-1.7.3.zip.

Wenn die Verbindung zur S7 steht, solltest Du Versuchen einmal Daten von SPS zu senden (Die Zeichenkette wurde bei mir immer mit "CR" beendet), die Zeichen sollten dann auf dem Eingabefenster "ge_echot" (angezeigt) werden.
Wenn das geht, kannst Du Dir dann ein weiteres PHP-Programm schreiben, dass dann mit diesem "S7_Komunikationsprogramm" Daten per MySQL oder Datei-Schnitttstelle austauscht und dann üblicherweise auf einen Explorer, wie Firefox (oder IEx) als Client die Daten anzeigt und so. Hier ist dann wieder der Port 80 dran.

Ich kann Dir leider nicht aus dem Stand sagen, ob Du eine extra CP brauchst. Wenn die Verbindung wirklich steht, denke dass Du keine weitere CP (damit auch keine weiteren Kosten) brauchst.

Weiter viel Erfolg und einen guten Rutsch ins neue Jahr 2010 

wünscht Dir

PC_Programmer


----------



## torstenh (30 Dezember 2009)

Hi,

OK wie gesagt, bin erst am 3.ten wieder am System und kann dann erst wieder weiter machen.
XAMPP schein eine gute Alternative zu sein. Aber Du weißt:
never touch running systems!
Ich werde mal XAMPP auf einer anderen Maschine installieren und es mal testen.
Ich habe wie gesagt einen Webserver am laufen, da wäre der Port 80 für die Kommunikation mit der CPU etwas mehr beschäftigt als normal*ROFL*
Ich muss dann auch auf die oberen Ports zugreifen und das Netz ein wenig von außen absichern.
Ich glaube auch nicht das ich einen extra CP brauch denn die Kommunikationsschnittstellen der Steuerung ist ja zum programmieren und dort werden auch alle Signale und Zeichenfolgen ausgetauscht. Warum das nicht mit einem CP und einer anderen CPU funktioniert kann ich leider nicht sagen. OK Erfolgs- oder Misserfolgsmeldungen kommen dann ab 3. Januar. 

Dir und allen Mitleser natürlich auch eine guten Rutsch ins neue Jahr und immer ein "BIT" an den Lippen aber zuviel Bit macht Kopfweh!

Viele Grüße,

TH


----------



## Question_mark (30 Dezember 2009)

*...*

Hallo,



			
				S7_Programmer schrieb:
			
		

> Ich hatte bei meinen Projekten eine VIPA 315SN/Net-CPU. Die wird im Simatic-Hardware-Manager als eine Siemens 318-2 projektiert.





			
				torstenh schrieb:
			
		

> bis ich dann von VIPA hörte das es nur eine Programmierschnittstelle ist und man für eine Vernetzung mehrerer CPU eine zusätzlichen CP parametrieren muss.



So ist das nun mal mit Nachbauten ...

Aber mal im Ernst : Bei der Siemens S7-318 brauchst Du keinen zusätzlichen CP zur Kommunikation. Aber da die Kommunikation ja mit der Vipa 315 funktioniert, bist Du hier wohl einer Fehlinformation aufgesessen.

Gruß

Question_mark


----------



## torstenh (31 Dezember 2009)

Question_mark schrieb:


> Aber mal im Ernst : Bei der Siemens S7-318 brauchst Du keinen zusätzlichen CP zur Kommunikation. Aber da die Kommunikation ja mit der Vipa 315 funktioniert, bist Du hier wohl einer Fehlinformation aufgesessen.
> 
> Gruß
> 
> Question_mark



.....nun kann ich leider nicht folgen von welcher Aussage Du sprichst. Welche Fehlinformation meinst Du? sag mir jetzt nur das die Kommunikation mehrerer CPs und einer VIPA im Netz doch funktioniert! dann fr... ich einen .......  ! ich habe es nicht hinbekommen. Habe mit verschiedenen Protokollen versucht es hinzubekommen aber es ging nicht. Erst mit einem neuen CP lief es dann. 
Kleine Ausschweifung!(bitte nicht für Themenwechsel nutzen)[ist meine persönliche Meinung die natürlich auch falsch sein kann!]
Zu den Nachbauten: das stimmt schon, aber jede Anwendung mit der Hardware die nötig ist und nicht die möglich ist. Ich denke das VIPA auch seine Berechtigung für seine Anwendung hat. Zu mal wenn man eine preiswerte Lösung sucht. Natürlich könnte man für selbige Anwendungen auch von Siemens kaufen, aber da sticht eben der Bauer den König! auch der Service von VIPA ist meiner Meinung nach besser als der von Siemens (relativ). Aber das ist ja in diesem Thread nicht der Inhalt also lassen wir es dabei, jeder so wie er es möchte. Wichtig ist das die Anwendungen funktionieren.


----------



## Question_mark (31 Dezember 2009)

*Salzstangen statt Besen*

Hallo,



			
				torstenh schrieb:
			
		

> .....nun kann ich leider nicht folgen von welcher Aussage Du sprichst.



Ich bin über folgendes gestolpert :



			
				S7_Programmer schrieb:
			
		

> Ich hatte bei meinen Projekten eine VIPA 315SN/Net-CPU. Die wird im Simatic-Hardware-Manager als eine Siemens 318-2 projektiert.



Und habe eigentlich vergessen, das Dein Post sich auf eine 313SC bezieht. Ist mir gerade beim Nachlesen aufgefallen. Und nachdem ich gerade nach dem 313 Manual gegoogelt habe, darst Du m.E. einen CP kaufen, den Besen im Schrank lassen und zur Sylvesterparty stattdessen Salzstangen futtern.  

Gruß

Question_mark


----------



## Sarek (31 Dezember 2009)

für die VIPA 313SC kannst Du mit einem PC und libnodave oder OPC-Server
Daten lesen/schreiben.
aktiv senden mit AG_Send funzt nicht!
die Ethernetschnittstelle ist passiv bei der 313SC.
die angestrebte Lösung von S7-Programmer läuft also so nicht


mit einem anderen CP343 (z.B. Siemens oder Speed7 mit NET)
kann man eine passive Kommunikation aufbauen
d.h. auf der CPU mit vollwertigem CP läuft PUT/GET


----------



## torstenh (31 Dezember 2009)

.....ich dachte mir das schon. Deshalb meine Frage. Nun gut CP kaufen gehn!

Sch..........ade!

Naja mal sehen wie das im nächsten Jahr wird!


Grüße,
Torsten


----------



## paula23 (18 November 2010)

S7_Programmer schrieb:


> Hallo,
> 
> ich habe selbst schon einen Datenaustausch mit PHP hinbekommen.
> Eine Datei, die Du mit PHP abholst, kannst Du auf der S7 Seite nicht erstellen.
> ...


 

Hallo ich lese gerade deine PHP Variante, habe auch eine aber mit Umwegen über WinCC. Deine finde ich spannend. 
Ich schreibe Werte aller 5 min in eine Text Datei und diese wird dann in die MySql übernommen. Kann ich über deine Variante auch einen trigger setzen ? Über die Tagzuordnung weiss man auch in welchen Table der eintrag gehört ?

Danke.


----------



## S7_Programmer (22 November 2010)

HAllo, paula23

da ich in der Simatic SPS steuere, wann die Daten(String) weggeschickt werden, ist hier der Trigger in der SPS. Das PHP-Programm ist immer auf Empfang geschaltet und reagiert auf gesendete Daten. 
Der Nachteil dieser MEthode ist, dass Du in der SPS den Sendestring zu PHP im S7-Programm zusammenstellen, und den Empfangsstring im S7-Programm entsprechend dekodieren musst.
Was Du dann im PHP-Programm mit dem Empfangstring von S7 machst, bleibt Dir überlassen; Du kannst Die Daten im PHP-Programm direkt in eine Datenbank wie MySQL (es sind aber auch Funktionen für mssql verfügbar) oder SQLite sowie aber auch in eine ASCII-Datei schreiben. Ich habe in PHP schon mal eine Excel.XLS Datei erzeugt!

Man kommt dafür ohne jegliche Lizenzengebühren aus, Opensource!
Die Daten sind in jeder Hinsicht nachvollziehbar.

Aber irgend einen Tod muss man ja sterben...

Gruß
S7_Programmer


----------



## paula23 (22 November 2010)

So ich habe jetzt doch noch ein paar mehr Fragen.

Die Verbindung zu projektieren bekomme ich noch hin, AG-Send und AG-Rec habe ich noch nie gebraucht, hier werden die Daten übergeben ???

Wie muss ich mir das Vorstellen, ich brauche für meine Archivierung ca. 100 Werte, aller 5 Minuten.

Ich suche grade mal das TXT-File raus in welchem Format ich die Daten nach PHP und MySql schiebe, leider habe ich die Insert Befehle nicht selber geschrieben.

Danke.


----------



## S7_Programmer (23 November 2010)

Hallo Paula,

keine Angst vor AG_Send/AG_Rec!. Bevor Du aber damit beginnst, solltest Du einige Dinge erledigen (erledigt haben) 


Soweit ich sehe, hast Du bereits eine TCP-Verbindung zum PC projektiert. (Ich gege davon aus, dass Du in Netpro "Aktiver Verbindungsaufbau" aktiviert hast)

Bevor wir weitermachen, solltest Du kontrollieren, ob die Verbindung aufgebaut wird.

Ich gehe davon aus, dass es ein Windows-PC ist.

Als erstes kannst Du auf der PC-Seite die SPS anpingen.
(cmd öffnen; dann Ping SPSIP-Nr) hier soll dann die Verbindung wie folgt angezeigt werden:


> C:\>ping 192.168.11.120
> 
> Ping wird ausgeführt für 192.168.11.120 mit 32 Bytes Daten:
> 
> ...


Wenn das funktioniert, sollte man den Verbindungsaufbau testen, dazu benutze ich das Programm "netcat.exe", das "Schweizer Taschenmesser".

Im Cmd-Fenster starte ich Netcat mit Eingabe von (Beispiel):


> nc -l -p 2288


nc = netcat
-l =listen mode (Aktiver Verbindungsaufbau von SPS
-p = Port (muss mit PortNr in Netpro übereinstimmen)
2288 = PortNr Beispiel
Bitte "Space-Zeichen" beachten!

Dann kannst Du den (hoffentlich geglückten) Verbindungsaufbau kontrollieren:
-S7-Manager -S7 Projekt
-Rechtsklick auf CP343
-Objekt-Eigenschaften (... Nur lesen blablabla akzeptieren)
-Tabellenreiter Diagnose anklicken
-Start Spezial-Diagnose anklicken
-Dann in NCM S7-Diagnose Baum Verbindungen aufklicken
-Hier sollte die Verbindung (mit Steckersymbol nicht durchgestrichen) aufgebaut sein.

Wird PC-seitig Netcat mit CTRL+C beendet, Wird die Verbindung in NCM-Diag als nicht verbunden gekennzeichnet.

Wenn alles bisher gutgegengen ist, sollten wir mit AG_Send beginnen:
Ich würde pc-seitig das netcat aktiv lassen, dann werden alle Zeichen
die Du sendest angezeigt.
Zum Test kannst Du auch mit ein paar Chars beginnen, damit Du ein Gefühl für AG_Send bekommst.

Noch ein Tipp für später:
Ich habe alle Variablen in der SPS in Strings umgewandelt, die
Strings dann mit dem "#"-Zeichen als Trenner miteinander verbunden und dann mithilfe von AG_Send abgeschickt.

Ich hoffe, dass Du damit ein Stück weiterkommst.

Gruß
S7_Programmer


----------



## paula23 (23 November 2010)

Danke für die Infos.

Gibt es auch eine Möglichkeit, AG-SEND an einer Ethernet-CPU einzusetzen, habe nur eine 315PN/DP CPU und keinen CP zur Hand.

Danke.


----------

