Datenbaustein Kommunikation

frielex

Member
Beiträge
21
Punkte Reaktionen
0
Zuviel Werbung?
->Hier kostenlos registrieren
Hallo zusammen

hab hier ein kleines Problem zu lösen.
Hab ein Projekt bekommen, wo ich mit Hilfe einer SPS ein Programm auf dem PC beeinflussen soll.
Das Programm wird über Auto-Start gestartet. Noch alles ok.
Nun aber ich habe bei meiner SPS einen Datenbaustein, der das Programm beeinflussen soll und zwar so:
Das Programm ladet über eine XML-Datei den jeweiligen Job. Dem Job ist jeweils ein Zahl zugeordnet.
Ich will den Job wechseln indem ich nun in meiner SPS eingebe und dadurch den Baustein ändere.
Jetzt muss aber die Zahl aus dem Baustein irgendiwe mit der Zahl aus der XML Datei verglichen und geändert werden.
Weiß jetzt nicht wie ich das anstellen soll. Gibt es da fertige Lösungen dazu oder muss ich erstmal die XML Datei in eine Datenbank
exportieren und dann das Ganze vergleichen und dann die XML Datei ändern????:confused::confused::confused:

Danke im voraus

Schöne Grüße
 

Rainer Hönle

Well-known member
Beiträge
5.669
Punkte Reaktionen
991
Was macht denn das PC-Programm heute schon bzw. was ist denn schon vorhanden?
Wann liest das Programm die XML-Datei ein und vergleicht die Werte? Wird dies nicht durch den Wert aus den Datenbaustein angestossen?
Wassoll nach dem Vergleich passieren?
Welche PC-Programmiersprachen beherrscht Du für die Lösung Deiner Aufgabe?
 
OP
F

frielex

Member
Beiträge
21
Punkte Reaktionen
0
Zuviel Werbung?
->Hier kostenlos registrieren
Also das Programm auf dem Rechner öffnet aus der XML aus den richtigen Job, in der XML Datei ist unter verschiedenen Parametern auch der Parameter für den JOB als integer Zahl abgelegt. Diese Zahl will ich ändern.
Die Zahl wird immer dann geändert, wenn ich meine Anlage in den Stop-Zustand versetze und in meiner SPS dann eine Zahl für den Job eintrage.
Danach wird die Zahl in den Datenbaustein geschrieben. Die integer Zahl aus dem Datenbaustein soll dann in die XML Datei rein geschrieben werden in dem Parameter für den JOB.
Ist mein aller erster Projekt und ich stehe da grad voll auf dem Schlauch.
Mir wäre eine fertige Lösung von Siemens lieber, aber falls nicht vorhanden werde ich mich auch in eine Hochsprache einarbeiten.
 

Rainer Hönle

Well-known member
Beiträge
5.669
Punkte Reaktionen
991
Ich glaube nicht, dass es hier etwas Fertiges von Siemens oder sonst jemand gibt.
Auch verstehe ich den Ablauf noch nicht ganz, deshalb das, was ich glaube verstanden zu haben:
- Mit jedem Stop (oder durch Benutzereingabe?) wird in der SPS eine Integerzahl in einem DB geändert
- Diese Zahl soll vom PC eingelesen und in eine XML-Datei geschrieben werden (mit welcher Kommunikationsbibliothek?)
- Ein Programm auf dem PC liest die XML-Datei ein (wirklich jetzt? wie kommt der Trigger zustande?)
- Wie geht es jetzt weiter? Was macht das PC-Programm mit dem Wert? Soll jetzt etwas in die SPS zurück geschrieben werden?
 
OP
F

frielex

Member
Beiträge
21
Punkte Reaktionen
0
Zu den Punkten nochmal:

1) Die Zahl wird nur dann verändert, wenn ich auf andere Werkstücke umstelle (also eine andere Produktnummer).
Die Zahl wird dann z.B. über eine Visu eingetippt. Das passiert nur in dem Stop-Zustand der Anlage, sonst nicht.
2) Genau die Zahl des Datenbaustein soll in die XML Datein unter dem richtigen Parameter geschrieben werden.
3) Beim Start von dem externen Programm auf dem PC wird die xxx.xml Datei geladen. Diese Zahl aus der Datei verweist wiederum
auf eine andere Datei, wo unter der jeweiligen Zahl ein Pfad mit den Configs für den Job des Programms hinterlegt sind.
4) Als Antwort gibt mir das Programm ob es richtig gestartet wurde. An dieser Schnittstelle arbeite ich mit dem Programm-Anbieter.
D.h. wenn alles korrekt in die xml Datei geschrieben wurde und dann das Programm richtig mit Kamera und allen anderen Sachen verbunden ist,
bekomme ich die Meldung ok.
Hab schon daran gedacht ein Programm zuschreiben in dem ich erstmal die xml in eine Datenbank umwandel. Dann muss die Datenbank der xml Datei mit dem Datenbaustein der SPS verglichen und falls der Wert der xml Datei von der SPS abweicht, die integer Zahl der xml Datenbank an die der SPS angepasst wird. Danach wird die neue Datenbank als eine XML Datei mit dem richtigen Namen und Pfad exportiert und die alte xml Datei gelöscht.
 

Rainer Hönle

Well-known member
Beiträge
5.669
Punkte Reaktionen
991
Zuviel Werbung?
->Hier kostenlos registrieren
Dann ist die eigentlich Aufgabe nur, den Integerwert aus der SPS zu lesen und in die XML-Datei zu schreiben?
Wer startet wann das externe Programm?
Der Umweg über Datenbank bringt meiner Meinung nach ausßer Zusatzaufwand nichts.
 
OP
F

frielex

Member
Beiträge
21
Punkte Reaktionen
0
Genau
Eine der Aufgaben ist es den Integerwert aus der SPS zu lesen und in die XML-Datei zu schreiben.
Die Frage ist halt nur wie ich das machen soll. Hab bis jetzt nichts gefunden was mir helfen könnte.
Dachte da an den OPC Server, aber da habe ich nichts gefunden wie das möglich wäre.
Aber immer nur wenn die Anlage im Stop-Zustand ist.
Das externe Programm muss ich falls es dann möglich ist über eine Schnittstelle starten.
Das wird aber dann noch intern mit den Entwicklern des externen Programms geklärt.
 

LowLevelMahn

Well-known member
Beiträge
766
Punkte Reaktionen
90
darf es auch was kosten?

Das externe Programm muss ich falls es dann möglich ist über eine Schnittstelle starten.
Das wird aber dann noch intern mit den Entwicklern des externen Programms geklärt.

Ich würde einfach AGLink vom Rainer kaufen (könnt ihr ja auch für andere Sache gebrauchen) und den Entwickler der externen Software um integration bitten - mehr als
die Verbindungsnummer, ein Connect und 1-2 Befehle braucht er dafür nicht, alle anderen Lösungen (Datenbank, OPC usw.) sind mehr als unnötig
und haben "Verzweiflungsanschein" :) ... wir reden hier im schlimmsten Fall von 10 Zeile Code oder so

Lad dir mal AGLink runter und schau im API-Guide nach deinen Daten auf der SPS - der API-Guide zeigt dann auch den nötigen Code
in C#,VB,Java,C/C++ den man dann einfach zusammenkopiert

ansonsten kann man auch den Weg über Libnodave (C oder C#/VB.Net) gehen - wobei ich denke wenn der externe Geld kostet ist es mit AGLink schneller

Welche Programmiesprache wird den von externen Entwicklern verwendet?
 

ducati

Well-known member
Beiträge
6.054
Punkte Reaktionen
1.173
Also muss jemand nen kleines Programm schreiben, welches die Daten aus der SPS liest (mittels libnodave oder AGlink) und dann die eine Zeile im xml-file schreibt. Das ist vermutlich wirklich nur nen 10 Zeiler für die Grundfunktion. vielleicht findet sich jemand, der das mal schnell macht :). Meine C-Zeiten sind aber schon zu lange her, um das mal schnell zu machen...
Dich dafür in die Programmierung einzuarbeiten, macht keinen Sinn, da dauert die Einarbeitung 100 mal länger als das Programm zu schreiben.

Gruß.
 

LowLevelMahn

Well-known member
Beiträge
766
Punkte Reaktionen
90
hab ich das jetzt richtig Verstanden...

also ganz genau so:

1.
...der Integer wird in eine XML geschrieben...
- wird eine bestehende verändert oder wird eine neue XML-Datei angelegt?
- ist Parameter in der XML immer gleich?
- ist der Name der XML-Datei immer gleich?

2.
...Beim Start von dem externen Programm auf dem PC wird die xxx.xml Datei geladen...

- wird die Exe direkt gestartet oder mit dem laufenden Programm kommuniziert?
- wie bekommt das externe Programm den XML-Namen mit?

An dieser Schnittstelle arbeite ich mit dem Programm-Anbieter.

Wie arbeitest du mit dem Programmanbieter an einer Schnittstelle wenn du keine Hochsprachen kannst und somit
nicht abschätzen kannst welcher Aufwand hinter Angebotener Lösung x,y oder z steckt?

Ist eine AGLink-Lizenz fuer ~400-500EUR schon ein Hardcore Bugetsprenger? Ansonsten könnte ich auch aushelfen (PN an mich)
implementation und z.B. auch was die Schnittstellendefinition zu dem externen Programm angeht
 
OP
F

frielex

Member
Beiträge
21
Punkte Reaktionen
0
Zuviel Werbung?
->Hier kostenlos registrieren
Also im Moment handelt es sich hier um einen Test-Aufbaue der über keine Kopfsteuerung verfügt. Das externe Programm wird im Moment über eine Verknüpfung gestartet. Falls in der XML-Datei die richtige Jobnummer steht. Diese XML-Datei hat immer den selben Namen und wird beim Start der externen Software aufgerufen. Dann muss ich im GUI des externen Programms auf Connect klicken und dann ist das Programm bereit Daten von einem Kamera-System zu empfangen. Das Programm läuft die ganze Zeit und liefert Daten, die wiederum von einem anderen externen Programm bearbeitet werden (das ist aber hier nicht das entscheidende). Wenn ich jetzt ein Job ändere, muss ich zunächst das externe Programm stoppen. Dann die XML-Datei öffnen und die Zahl ändern. Danach wird im GUI auf "Reinitialisierung" geklickt und das Programm hat nun Bezug auf die veränderte XML-Datei. Dann wird wieder in der GUI auf "Connect" geklickt. Das ganze soll nun mit einer Kopfsteuerung automatisch ablaufen ;)
 

LowLevelMahn

Well-known member
Beiträge
766
Punkte Reaktionen
90
und der Rest...

Wie arbeitest du mit dem Programmanbieter an einer Schnittstelle wenn du keine Hochsprachen kannst und somit
nicht abschätzen kannst welcher Aufwand hinter Angebotener Lösung x,y oder z steckt?

Ist eine AGLink-Lizenz fuer ~400-500EUR schon ein Hardcore Bugetsprenger? Ansonsten könnte ich auch aushelfen (PN an mich)
implementation und z.B. auch was die Schnittstellendefinition zu dem externen Programm angeht

darauf hast du nicht geantwortet :)
 
OP
F

frielex

Member
Beiträge
21
Punkte Reaktionen
0
Bin ein Werkstudent und habe die Aufgabe bekommen ;)
Als das ganze anfing, war ja keine Kopfsteuerung vorgesehen.
Das hat sich im Laufe nur so entwickelt.
Hauptsächlich programmiere ich Roboter.

Wir arbeiten eng mit Siemens zusammen, deswegen war ein cp343 vorgesehen.
 

LowLevelMahn

Well-known member
Beiträge
766
Punkte Reaktionen
90
Zuviel Werbung?
->Hier kostenlos registrieren
na dann mal los :)

1. Definitiv ist klar das dir ein OPC- oder Datenbank-Server absolut 0% hilft - die beiden machen das ganze eher noch schwieriger

2. Wenn du auf die SPS willst brauchst du eine Zugangssoftware z.B. Open-Source Libnodave oder kommerziell AGLink, das sind Direktanbinder d.h. kleine Schnitttstelle wenig Schnick-Schnack, den OPC-Server koenntest du auch dafür
verwenden - aber dann brauchst du einen Client - der auch wieder was kostet (selber schreiben wird da noch schwieriger als Libnodave oder AGLink verwenden)

Einfach mal AGLink-Demo runterladen und den sog. API-Guide aufrufen, dann kannst du einfach mal mit deiner SPS spielen und Werte lesen/schreiben...so als kleiner Einstieg

3. Für den Rest (XML-Datei schreiben,externes Programm starten/stope usw.) würde ich dir zu C# oder VB.Net raten - sonst brauchst du viel zu langen für die Einarbeitung

ansonsten viel Erfolg

Was für ein Studiengang belegst du denn?
 
OP
F

frielex

Member
Beiträge
21
Punkte Reaktionen
0
Bin im Elektrotechnik studium
Habe auch C-Programmierung mitgenommen, aber halt nichts vertieftes:shock:
Mein Schwerpunkt liegt bei Robotik und Automatisierungstechnik
 

Sven Rothenpieler

Well-known member
Beiträge
789
Punkte Reaktionen
192
Guten Morgen,

also hier mal die Demoversion von ACCON-AGLink...

Der API-Guide "führt" dich quasi durch die Befehlswelt von AGLink und man kann diese sogar direkt interaktiv testen. Der Quellcode zu den einzelnen Funktionen wird auch direkt in sämtlichen Programmiersprachen aufgeführt, sodass du im besten Falle den hier schon öfters genannten 10-Zeiler einfach in deine Applikation kopieren könntest.
 
OP
F

frielex

Member
Beiträge
21
Punkte Reaktionen
0
Zuviel Werbung?
->Hier kostenlos registrieren
Habe heute mal ein Programm in C geschrieben, welches mir die Jobnumber in der XML ändert
Nur habe ich ein Problem, wie ich die Variablen mit den aus dem Datenbaustein der SPS verbinden soll.

# include <stdio.h>
# include <stdlib.h>
# include <windows.h>

main () {

FILE *stream2;
int trigger, Jobnumber;
trigger = 1; //später muss sie mit dem DB aus der SPS verknüpft werden
Jobnumber = 30; //später muss sie mit dem DB aus der SPS verknüpft werden

//Schreiben in eine Datei

if(trigger == 0) {
printf("\nNun werden die Daten in Kackwurscht eingetragen!\n");
stream2 = fopen("Kackwurscht.xml","w");
fprintf(stream2,"<MODULE name='BpApplication' valuetype='BpApplication'>\n");
fprintf(stream2,"<MODULE name='BpManager' valuetype='BpManager'>\n");
fprintf(stream2,"</MODULE>\n");
fprintf(stream2,"<MODULE name='ScanningRulerSnapshotCamera' valuetype='ScanningRulerSnapshotCamera'>\n");
fprintf(stream2,"<PARAMETER valuetype='string' name='IPADDRESS' runtime='false' info='Camera IP' >192.168.168.15</PARAMETER>\n");
fprintf(stream2,"<PARAMETER valuetype='string' name='PARAMETER_FILE' runtime='false' info='Relative or full path to camera parameter file' >parameters\parameters_RulerS-2114_2M.prm</PARAMETER>\n");
fprintf(stream2,"<PARAMETER valuetype='string' name='HANDEYECALIBRATION_FILE' runtime='false' info='Relative or full path to handEye calibration param file' >parameters\Calibration_20120628B.txt</PARAMETER>\n");
fprintf(stream2,"</MODULE>\n");
fprintf(stream2,"<MODULE name='FileSnapshotCamera' valuetype='FileSnapshotCamera'>\n");
fprintf(stream2,"<PARAMETER valuetype='string' name='DATA_PATH' runtime='false' >C:\Dokumente und Einstellungen\Rasche\Eigene Dateien\SICK\PLB\Recordings\Recording_2012-04-04T16.58.19.125000\00000000</PARAMETER>\n");
fprintf(stream2,"</MODULE>\n");
fprintf(stream2,"<MODULE name='TCPIPRobotInterface' valuetype='TCPIPRobotInterface'>\n");
fprintf(stream2,"<PARAMETER valuetype='int' name='PORT' min='1024' max='65535' runtime='false' info='Server port for robot communication' >6008</PARAMETER>\n");
fprintf(stream2,"<PARAMETER valuetype='string' name='ROBOT_INTERFACE_TEMPLATE' runtime='false' info='File which points to a CFG template file for robot communication' >parameters\RobotInterfaceTemplateIRPA.cfg</PARAMETER>\n");
fprintf(stream2,"<PARAMETER valuetype='bool' name='ENABLE_SWEEP_DONE' runtime='false' info='Set to true if system shall send SweepDone signal over TCP/IP when scan is completed' >true</PARAMETER>\n");
fprintf(stream2,"</MODULE>\n");
fprintf(stream2,"<MODULE name='CandidateSelectionBinPicking3D' valuetype='CandidateSelectionBinPicking3D'>\n");
fprintf(stream2,"<PARAMETER valuetype='int' name='MODEL_ID' min='0' max='100' runtime='false' info='CAD Model ID to be used' >%i</PARAMETER>\n", Jobnumber);
fprintf(stream2,"<PARAMETER valuetype='int' name='OUTPUT_FORMAT' min='0' max='1' runtime='false' info='Enter rotation description type (valid values: 0=XYZ, 1=ZYX)' >1</PARAMETER>\n");
fprintf(stream2,"</MODULE>\n");
fprintf(stream2,"<PARAMETER valuetype='int' name='SNAPSHOT_CAMERA_TYPE' min='0' max='2' runtime='false' info='ScanningRuler = 0, File = 2' >0</PARAMETER>\n");
fprintf(stream2,"<PARAMETER valuetype='string' name='LICENSE_ACTIVATION_KEY' runtime='false' info='If a key is inserted, it will activate the license, when a camera is next connected. When license is activated, this value can be removed.' >fCcF4-07l8B-XzG6C-4W9Eq-MNl1Q-5G1wV-6Y0LG-bu4Kh-Z0350</PARAMETER>\n");
fprintf(stream2,"</MODULE>\n");
fprintf(stream2,"\n");
fprintf(stream2,"<!-- fCcF4-07l8B-XzG6C-4W9Eq-MNl1Q-5G1wV-6Y0LG-bu4Kh-Z0350 -->\n");
fclose(stream2);
}
else{
sleep();
}
// system("pause");
}
 
OP
F

frielex

Member
Beiträge
21
Punkte Reaktionen
0
das Programm mach auch was es soll. Es überschreibt die XML Datei mit der neuen Jobnumber an der richtigen Stelle ;)
Nun muss es die Ganze Zeit im Hintergrund laufen und auf die Variablen trigger und Jobnumber warten.
Brauche da nun hilfe
 

Rainer Hönle

Well-known member
Beiträge
5.669
Punkte Reaktionen
991
Bei Dir wird nicht eine XML-Datei geändert sonern einfach eine neue angelegt. Wenn dies für Dich ok ist, dann passt das.
Zum Lesen der Daten aus der SPS siehe Link von Sven zu ACCON-AGLink, suche nach libnodave oder verwende Jochen Kühners Bibliothek.
Wenn Du Dich entschieden hast, kannst Du zur Bibliothek Deiner Wahl weitere Fragen stellen.
 
Oben