Upload
others
View
2
Download
0
Embed Size (px)
Citation preview
Gruppe: RFID_Writer Yari Belgacem Hubert Sewald 1
RFID Integration in die digitale Fabrik
Teilbereich RFID-Writer beim Zulieferer
Gruppe: RFID_Writer Yari Belgacem Hubert Sewald 2
Inhaltsverzeichnis:
1. Ziel 2. Kommunikationsmodell 3. Hardware 4. Integration der Hardware in das bestehende System 5. Die RS-232 Leitung 6. Position Writer 7. Die DLL (icrdll40.dll) 8. Einbinden der DLL in WIN-CC 9. Neue Funktion RFID_SCHREIBEN(); 10. Änderungen der mes2.pas Aktion 11. Änderungen in der lies_ca.bac (MES2) 12. Änderung des SPS Programms 13. Speicherorganisation Titan Tag
14. Stückliste
15. Funktion RFID_SCHREIBEN();
16. Runtime „bild1.pdl“
17. Headerfile „rfid_funktionen.h“
Gruppe: RFID_Writer Yari Belgacem Hubert Sewald 3
1. Das Ziel:
Ziel des Projektes ist es die Anlage in loser Kopplung fertigen zu lassen und zwar mit Hilfe
von RFID. Mit dieser Technologie ist es den einzelnen Fertigungsstationen möglich, nahezu
unabhängig von den Aktionen der anderen Stationen zu fertigen. Der Zulieferer beschreibt
einmalig für einen Auftrag den in den Zulieferer-Teilen enthaltenen RFID-Tag mit den
aktuellen Auftragsdaten.
An den Fertigungsstationen des Stammwerks kann dieser Tag jetzt wieder ausgelesen
werden, die relevanten Auftragsdaten für die Station extrahiert werden und die für diesen
Baustein notwendigen Arbeitsschritte ausgeführt werden.
Es kann somit zu keiner Verwechselung der Aufträge kommen. Bausteine können vom Band
entfernt werden und zu einem beliebigen Zeitpunkt wieder aufs Band gelegt werden die
Auftragszugehörigkeit geht nicht verloren.
Diese Ausarbeitung beschreibt die Integration von RFID beim Zulieferer.
Schema für Ablauf:
Baustein auf
Band
vorfahren
Baustein unter
RFID-Writer
PLCSIM setzt
RFID-Start = 1
Baustein
beschreiben
MES2 setzt
RFID-Busy = 1
Baustein
weiterfahren
an Werkstor
Warten auf
Lichtschranke
Soft-SPS: M0.1=1
Handshake
MES2 wartet auf
RFID-Start = 1
Handshake
MES2 setzt
RFID-Busy = 0
Gruppe: RFID_Writer Yari Belgacem Hubert Sewald 4
2. Kommunikationsmodell:
Übersicht über die Kommunikationsstruktur des Zulieferers
ERP
MES 2
icrdll40.dll
RFID-Writer Prozessebene
Easy-Port SPS
RS232 RS232
EzOPC
Gruppe: RFID_Writer Yari Belgacem Hubert Sewald 5
3. Hardware: Die Auswahl der Hardware wurde aufgrund von Kriterien wie Preis, Unterstützung von Verbreiteten
Tag-Standards, RS232/RS485-Fähigkeit und Tag-Größe ausgewählt. Ebenso musste die Firma eine
Stabantenne anbieten um mechanisch möglichst flexibel zu bleiben. Unsere Wahl ist auf die Firma
Megaset gefallen, da unsere Kriterien von ihren Produkten erfüllt werden konnten und der Preis
sehr konkurrenzfähig war.
Von uns bestellte Hardware:
RFID-Writer ICR40-RW-RS232
Der Writer ist von der Firma Megaset und wird über RS232
am Server angeschlossen. Er unterstützt sowohl Titan-Tags wie
Unique-Tags.
World Tag Titan 20mm
Kunststoffgehäuse
Lieferant:
MEGASET Systemtechnik GB der MEGATRON Elektronik AG & Co.
Hermann-Oberth-Str. 7
85640 Putzbrunn/ München
Tel.: +49 (0) 89 / 460 94 - 410
Fax: +49 (0) 89 / 460 94 - 411
Email: [email protected]
http://www.megaset.com
Gruppe: RFID_Writer Yari Belgacem Hubert Sewald 6
4. Integration der Hardware in das bestehende System:
Um den RFID-Writer seriell mit RS232 ansteuern zu können, wurde er an den Com4 des Servers
(zusätzlich eingebaute RS232-Karte) angeschlossen. Der VM-Host anackin leitet diesen Com4 um
auf die virtuelle Maschine MES2 wo dieser dann wieder als Com2 zur Verfügung steht.
5. RS-232 Leitung:
Die Verbindung ist mittels einer neu verlegten RS232-Leitung vom Server, welcher sich im Keller des
Schulgebäudes befindet, zum RFID-Writer in Raum 13.25 realisiert. Zur Verbindung der beiden
Etagen wurde das bereits verlegte Ethernet-Kabel (in unserem Fall Farbe Grau) verwendet. Die Pin-
Belegung ist aus folgender Tabelle ersichtlich:
Pin Belegung
Sub-D F 9 pol.
RS232-
Verlängerung
Ethernet-Kabel
Etagendurchbruch
RS232-
Verlängerung
Pin Belegung
Sub-D M 9 pol.
Keller Keller Keller<->13.25 Raum 13.25 Raum 13.25
2 RXD Rot / Schwarz Blau Weiß 2
3 TXD Rot / Braun Braun Grün 3
5 Ground Rot / Gelb Orange Gelb 5
Gruppe: RFID_Writer Yari Belgacem Hubert Sewald 7
6. Position Writer:
Der Writer / Reader ist nahezu am Ende des Bandes angebracht und beschreibt die RFID-Tags von
oben wenn sie mit dem Band an die Schreibposition gefahren werden.
Der Writer besitzt genau ausreichend viel Platz um drei Bausteine (eine Charge) zwischen sich und
dem Werkstor unterzubringen.
RFID_Writer_Antenne
Herr Doll ;-)
RFID_Tag_Lichtschranke
Gruppe: RFID_Writer Yari Belgacem Hubert Sewald 8
7. Die DLL (icrdll40.dll):
Im Lieferumfang des RFID-Writers ist die icrdll40.dll enthalten. Diese DLL enthält bereits alle
Funktionen die für den Betrieb des RFID-Writers notwendig sind.
Alle Funktionen geben bei erfolgreichem Ausführen den Wert 0 zurück. Konnte die Funktion nicht
ausgeführt werden, z.B. wenn der Com Port schon belegt ist, dann gibt die Funktion den Wert -1
zurück.
Die Funktionen der DLL sind wie folgt deklariert:
int ComInit(int, int); ComInit(Com Port Nummer,0=RS232/1=RS485)
Mit dieser Funktion wird die Nummer des Com Ports festgelegt und anschließend geöffnet sowie
der Verbindungsstandart (RS232/RS485) festgelegt. In unserem Fall ist das Com=2 und RS232=0.
Achtung die DLL schließt den Com-Port nicht mehr. Soll dieser für andere Funktionen wieder
freigegeben werden muss neugestartet werden oder mit der ComInit-Funktion ein anderer Com-
Port geöffnet werden, am besten einer der nicht existiert.
int ReadPage(int,*char); ReadPage(Seiten Nummer, Seiteninhalt)
int WritePage(int,*char); WritePage(Seiten Nummer, Seiteninhalt)
Page => 1 DWord (4 Byte)
Mit diesen beiden Funktionen wird ein Titan-Tag entweder beschrieben bzw. ausgelesen. Dazu wird
die betreffende Nummer der Seite (page) übergeben und gleichzeitig der Seiteninhalt als Adresse
einer Stringvariablen mit 4-Bytes-Länge übergeben.
Weitere relevante Funktionen:
int ResetTag(void); Tag neustarten
int ResetSystem(void); System neustarten
int PowerDown(void); Stromsparen
int SetOutput(int); Ausgang z.B. Led oder Alarmton setzen
Gruppe: RFID_Writer Yari Belgacem Hubert Sewald 9
8. Einbinden der DLL in Win-CC:
Die DLL-Datei (icrdll40.dll) muss bevor sie verwendet werden kann in WIN-CC eingebunden werden.
Dazu wurde ein Headerfile erzeugt mit dem Namen rfid_funktionen.h im Projektverzeichnis
\MES2_RFID unter \library (Vollständiger Header siehe Ende Dokumentation).
Um Funktionen einer DLL einbinden zu können benötigt WIN-CC folgende Struktur des C-Codes:
#pragma code ("…DLL-Pfad\DLL-Name…")
int …Funktionsname… (int,int);
#pragma code ()
9. Neue Funktion RFID_SCHREIBEN():
In der Funktion RFID_SCHREIBEN wird die gesamte Schreibroutine abgearbeitet. Als Parameter
muss der Funktion die Nummer des aktuell zu beschreibenden Turmes übergeben werden. Es wird
anschließend bei erfolgreichem Beschreiben der Wert 0 zurückgeliefert. Desweiteren wird der
aktuelle Zustand des Writers immer in der WIN-CC Runtime angezeigt.
Die Funktion benötigt jetzt alle zuvor definierten RFID Funktionen, welche mit
#include „RFID_funktionen.h“ eingebunden wurden.
Funktionsablauf:
Com Port öffnen ComInit();
Abfrage nach Baustein vorhanden ReadPage();
Chargennummer; Turmnummer schreiben WritePage();
Auftragsdaten, Lagerort eines Turmes schreiben WritePage();
Ausgabe der Erfolgsbestätigung in Runtime SetTagCharWait(„Rfid_status“,“…“);
Gruppe: RFID_Writer Yari Belgacem Hubert Sewald 10
10. Änderungen der mes2.pas Aktion:
Die Änderungen der mes2.pas beziehen sich auf das Aufrufen der Funktion RFID_SCHREIBEN(); und
dem Abhandeln des RFID-Handshakes zwischen der SPS und WIN-CC. Die RFID_SCHREIBEN-
Funktion wird aufgerufen nachdem des RFID-Start-Bit gesetzt worden ist. Anschließend wird das
RFID-Busy-Bit gesetzt und die Funktion aufgerufen. War die Funktion erfolgreich wird das RFID-
Busy-Bit zurückgesetzt und der nächste Auftrag wird gestartet.
11. Änderungen in der lies_ca.bac (MES2):
Es waren Anpassungen in der lies_ca.bac notwendig da diese nur die Daten für die jeweils unteren
Bausteine der Türme ausgelesen hat. Sie wurde jetzt auf die Funktionen der lies_ca.bac der MES1
aufgerüstet. Die MES1 muss in loser Kopplung mit RFID gar nicht mehr auf die Aufträge vom ERP-
Server zugreifen. Die Auftragsannahme übernimmt jetzt komplett die MES2. Den Aufbau des
Turmes können die Stationen komplett aus den RFID-Tags herauslesen.
12. Änderung des SPS Programmes:
Aufgrund eines „Timing“ Problems muss das SPS-Programm der Zulieferer-SPS erweitert werden.
Mittels eines Sensors wird erkannt wann ein Baustein unter dem RFID-Writer liegt. Der Sensor ist
an den Eingang E0.1 des Easy-Ports angeschlossen.
Gruppe: RFID_Writer
Um das vollständige Beschreiben des Titan
Schreibens angehalten werden, da sonst der Tag zu schnell den Writer passieren und die
Vollständigkeit der Daten nicht garantiert werden könnte
wird das Band wieder gestartet und de
Für die Kommunikation zwischen WIN
M2.0 RFID_start
M2.1 RFID_busy
deklariert. Das SPS-Programm setzt RFID_start auf E
WIN-CC bestätigt dies mit dem RFID_busy und beschreibt diesen dann
auf Null zurückgesetzt. Nach beendeter Arb
das SPS-Programm setzt seine normale Funktion f
Yari Belgacem Hubert Sewald
Um das vollständige Beschreiben des Titan-Tags zu garantieren muss das Band für die Zeit des
Schreibens angehalten werden, da sonst der Tag zu schnell den Writer passieren und die
Vollständigkeit der Daten nicht garantiert werden könnte. Wenn der Schreibvorgang beendet ist
wird das Band wieder gestartet und der Stein wird bis ans Werkstor des Zulieferers befördert
ür die Kommunikation zwischen WIN-CC und dem SPS-Programm wurden die
Programm setzt RFID_start auf Eins, wenn ein Baustein unter de
CC bestätigt dies mit dem RFID_busy und beschreibt diesen dann. RFID_start wird jetzt wieder
. Nach beendeter Arbeit wird das RFID_busy Bit auf Null zurückgesetzt und
Programm setzt seine normale Funktion fort.
11
ieren muss das Band für die Zeit des
Schreibens angehalten werden, da sonst der Tag zu schnell den Writer passieren und die
der Schreibvorgang beendet ist,
bis ans Werkstor des Zulieferers befördert.
die Merker
tein unter dem Writer liegt.
. RFID_start wird jetzt wieder
ull zurückgesetzt und
Gruppe: RFID_Writer Yari Belgacem Hubert Sewald 12
13. Speicherorganisation Titan Tag: Um zu garantieren, dass die Aufträge welche jetzt nur noch in dem Tag gespeichert sind, von den
Fertigungsstationen richtig verwendet werden, muss festgelegt werden an welcher Stelle des Tags
sich welcher Auftrag befindet und welche Formatierung sie besitzt. Die Größe der Speicherzellen
wurde von der Funktion WritePage übernommen. Deshalb werden immer 4 Byte gleichzeitig
geschrieben und gelesen.
Achtung!! 1 Speicherzelle (page) => 4 Byte => DWORD
Speicherzellen sind Überschneidungsfrei
Alle Zahlen und Nummern sind im ASCII Format
Byte 4 Byte 3 Byte 2 Byte 1
Speicherzelle 1
Herstellerspezifisch reserviert für Tag interne Funktionen
Speicherzelle 2
Speicherzelle 3
Speicherzelle 4 Chargen Nummer Turm Nummer
Speicherzelle 5 Lagerort Baustein oben Baustein mitte Baustein unten
Speicherzelle 6
Reserviert für Erweiterungen (z.B. Zeitstempelung) Speicherzelle 7
Speicherzelle 8
Speicherzelle 9 frei
… frei
14. Stückliste:
Anzahl Art. Nr Beschreibung SNR-Nr.
3 801045 ADIC ICR40-RW-SLAVE-RS485-12 OEM-Read/Write-SLAVE-Controll mitRS485 Schnittstelle LED1, 24047-24049
LED3, Relais, Klemmen und Buzzer bestückt
3 800549 ADIC Gehäuse B3 komplett für ICR40/ISO-Reader
1 800899 ADIC ICR40-RW-RS232-12-B3KL Read/Write-Controller mit RS232-Schnittstelle im Gehäuse B3, 24025
Klemmanschluss; 7-12V Spannungsversorgung
Tags:
Anzahl Art. Nr Beschreibung SNR-Nr.
20 800541 ADIC Disc-PC-Titan-20 Scheibe Polycarbonat d=20mm k.A.
Gruppe: RFID_Writer Yari Belgacem Hubert Sewald 13
15. Funktion „RFID_SCHREIBEN();“
#include "RFID_funktionen.h"
int RFID_SCHREIBEN(int Turm_NR)
{
char Daten [5]; char Test[5];
long long int Time1,Time2;
SetTagChar("Rfid_status","Start");
if(ComInit(2,0)) //Com2 als RFID öffnen
{
SetTagChar("Rfid_status","Error open Com"); //Text bei Com belegt ausgeben
SetBackColor("bild1","EAFeld14",CO_RED);
return(-1); //Bei fehler -1 zurückgeben
}
if (! ReadPage(3, Daten)) // Auf Baustein warten
{
sprintf(Daten,"%2d%2d",Turm_NR,GetTagChar("lesenummer")); // Daten wird beschrieben mit Turm NR und
//Chargen NR
if(WritePage(4,Daten)) //Tag schreiben und Rückmeldung abwarten
{
SetBackColor("bild1","EAFeld14",CO_RED);
SetTagChar("Rfid_status","Error Write Tag");
return(-1); // CharegenNR. Turm NR schreiben
}
//Umformatierung in String
if (Turm_NR==1)
sprintf(Daten,"%1d%1d%1d%1d",GetTagByte("t1u"),GetTagByte("t1m"),GetTagByte("t1o"),GetTagByte("lager"));
if (Turm_NR==2)
sprintf(Daten,"%1d%1d%1d%1d",GetTagByte("t2u"),GetTagByte("t2m"),GetTagByte("t2o"),GetTagByte("lager"));
if (Turm_NR==3)
sprintf(Daten,"%1d%1d%1d%1d",GetTagByte("t3u"),GetTagByte("t3m"),GetTagByte("t3o"),GetTagByte("lager"));
// Daten werden geschrieben mit Turmteilen
//und Lagerort
//if (Turm_NR>=4) return(-1);
if(WritePage(5,Daten))
{
SetBackColor("bild1","EAFeld14",CO_RED);
SetTagChar("Rfid_status","Error Write Tag");
return(-1); // Turmauftrag Lager schreiben
}
//if(WritePage(6,Daten)) return(-1); // Uhrzeit schreiben
SetBackColor("bild1","EAFeld14",CO_GREEN);
SetTagChar("Rfid_status","Write OK");
return(0); //Alles Ausgeführt und OK! 0 als Rückgabe
}
return(-1);
Gruppe: RFID_Writer Yari Belgacem Hubert Sewald 14
16. Runtime „bild1.pdl“:
In der Runtime ist die Anzeige der Handshake-Bits für Start_RFID und Busy_RFID hinzugefügt
worden. Ebenso eine Textausgabe über den Aktuellen Zustand der RFID Schreibfunktion.
Handshake-Bits zwischen SPS und MES2
Zustandsanzeige (Text) der RFID-Funktion
Gruppe: RFID_Writer Yari Belgacem Hubert Sewald 15
17. Headerfile „rfid_funktionen.h“
#pragma code ("C:\Programme\Siemens\WinCC\WinCCProjects\mes2_RFID\icrdll40.dll")
int ComInit (int,int);
#pragma code ()
#pragma code ("C:\Programme\Siemens\WinCC\WinCCProjects\mes2_RFID\icrdll40.dll")
int WritePage (int,char*);
#pragma code ()
#pragma code ("C:\Programme\Siemens\WinCC\WinCCProjects\mes2_RFID\icrdll40.dll")
int ReadPage (int,char*);
#pragma code ()
#pragma code ("C:\Programme\Siemens\WinCC\WinCCProjects\mes2_RFID\icrdll40.dll")
int ReadUnique (char*);
#pragma code ()
#pragma code ("C:\Programme\Siemens\WinCC\WinCCProjects\mes2_RFID\icrdll40.dll")
int ResetTag (void);
#pragma code ()
#pragma code ("C:\Programme\Siemens\WinCC\WinCCProjects\mes2_RFID\icrdll40.dll")
int PowerDown (void);
#pragma code ()
#pragma code ("C:\Programme\Siemens\WinCC\WinCCProjects\mes2_RFID\icrdll40.dll")
int SetOutput (int);
#pragma code ()