Programmierung mit SPS

cebalo

Level-1
Beiträge
34
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo leute habe eine frage an euch... ich bin bei einem Projekt wo ich denn kommunikation zwischen RFID System herstellen soll.
ich zeigt euch mal ne kurz code beispiel was ich schon geschrieben habe.

U M 0.5 // Eingang zum Lesen
FP M 11.3 // Flankenmerker damit der Befehl nur einmal gestartet wird
SPB Read // zum Lesen Springen

SPA end2 // Ansonsten ans Ende Springen
Read: L 50 // Adresse 50 im DB47 startet den Schreibbefehl
R E 0.5 // Merker für Lesen zurücksetzen


SPA Star
Star: T "MOBY DB".SLG2.command_DB_address // geladen Wert in Command DB Addresse schreiben
UN "MOBY DB".SLG2.error // Kein Fehler
U "MOBY DB".SLG2.ready // Moby Ready
S "MOBY DB".SLG2.command_start // Start Setzen
S "MOBY DB".SLG2.ANZ_MDS_present


end2: NOP 0

meine Frage leutet dann..
ich habe eine Transponder der über eine SLG(Schreib-leser-gerät) daten lesen/schreiben soll. ich möchte gern jetz jedes mal durch eine if-Anfrage wie in C/C++ dIE Anwesenheit meines Transponder abfragen.

was ich gern erwarte, ist den Befehl für die If-Abfrage wir beim C
 
ich habe eine Transponder der über eine SLG(Schreib-leser-gerät) daten lesen/schreiben soll. ich möchte gern jetz jedes mal durch eine if-Anfrage wie in C/C++ dIE Anwesenheit meines Transponder abfragen.

was ich gern erwarte, ist den Befehl für die If-Abfrage wir beim C
Ich würd das eher so machen:
Code:
U     M      0.5                  // Eingang zum Lesen
U "MOBY DB".SLG2.ANZ_MDS_present // hier ist deine IF-Abfrage
FP    M     11.3                  // Flankenmerker damit der Befehl nur einmal gestartet wird
SPBN   end2                        // zum Ende Springen    
R M 0.5                  // Merker für Lesen zurücksetzen
L     50                          // Adresse 50 im DB47 startet den Schreibbefehl
T     "MOBY DB".SLG2.command_DB_address    // geladen Wert in Command DB Addresse schreiben
UN    "MOBY DB".SLG2.error        // Kein Fehler 
U     "MOBY DB".SLG2.ready        // Moby Ready
S     "MOBY DB".SLG2.command_start    // Start Setzen
end2: NOP   0
Das Bit
Code:
"MOBY DB".SLG2.ANZ_MDS_present
wird vom Standardbaustein (FC45/FB45) bei Anwesenheit eines Tags gesetzt, das kannst du nicht setzen.
Du hast doch sicher die RFID-CD, das sind doch Beispiele drauf ...

Grüße von HaDi
 
Zuviel Werbung?
-> Hier kostenlos registrieren
wird vom Standardbaustein (FC45/FB45) bei Anwesenheit eines Tags gesetzt, das kannst du nicht setzen.
Du hast doch sicher die RFID-CD, das sind doch Beispiele drauf ...

Grüße von HaDi

ja die Anwensenheit des Tags wird/ist immer gesetzt wenn ich der Tag auf die SLGs nähere. ich will einfach das ganze automatisch machen so dass den Schreib und Lese Befehl automatisch geht.

Grüß Cebalo
 
Code:
U "MOBY DB".SLG2.ANZ_MDS_present // MDS anwesend
FP    M     11.3                  // Flankenmerker damit der Befehl nur einmal gestartet wird
SPBN   end2                        // zum Ende Springen
L     50                          // Adresse 50 im DB47 startet den Schreibbefehl
T     "MOBY DB".SLG2.command_DB_address    // geladen Wert in Command DB Addresse schreiben
UN    "MOBY DB".SLG2.error        // Kein Fehler 
U     "MOBY DB".SLG2.ready        // Moby Ready
S     "MOBY DB".SLG2.command_start    // Start Setzen
end2: NOP   0
So, denke ich, würde der im DB47 ab DW50 hinterlegte Befehl ein Mal ausgeführt, wenn ein Tag vor der Schreib-/Lesestelle ankommt.

Grüße von HaDi
 
ja hast du recht:D, aber bei mir ist so dass den Befehl sich nicht automatisch beim ankommen des Tags ausführt, aber wartet immer dass ich selbst auf die Variabletabelle ansteuere.

Grüß Cebalo
 
Den brauchst du doch nicht mehr. Wenn der Befehl mit Anwesenheit des Tags gestartet werden soll dann nimmst du auch nur die Anwesenheitsmeldung als Startbedingung (siehe Beitrag #4).

Grüße von HaDi
 
Zuviel Werbung?
-> Hier kostenlos registrieren
ok du meinst einfach dass ich kein M 0.5 nmicht mehr brauche oder?
ok morgen werde ich einfach an die Steuerung es machen.Ich bedanke mich bei dir im voraus und wunsche eine schöne nacht.........

Grüße Cebalo
 
hi, ich habe wieder mal richtig versucht aber ging nicht die Automaitsche ausführung meiner Befehle bis jetz.
ich zeige dir gern meine Variable Tabelle damit du siehst was da passiert.
auf die Variable Tabelle
Ready = True
Anz_MDS_Present= True

normalerweise nach der Programmierung sollte bei Anwesenheit der Transponder, die daten die geschrieben werden sollen, einfach in DB48 übertagen werden.
moz-screenshot.png
 

Anhänge

  • Variable_Tabelle.JPG
    Variable_Tabelle.JPG
    125,8 KB · Aufrufe: 31
Hi Hadi kannst du mir bitte sagen ob das Befehl mit dem Schreiben möglich ist weil beim lesen funktioniert aber beim schreiben nicht weißt du vielleicht wieso?
 
ok ich lade mein Projekt jetzt hoch.
Im OB1(Programmaufruf) Netzwerk 3 da programmiere ich das Schreiben der Daten durch SLG1
im Netzwerk 4 da programmiere ich das Lesen der Daten durch SLG2 auf die Transponder.
Wie ich dir schon gesagt habe, beim Lesen funktionniert schon die Automatische audführung der Befehl aber beim Schreiben gibt es immer noch ein Problem, muss ich selber noch steuern damit die Daten auf der DB48 übertragen wird.
bedanke mich schon im voraus und bis dann

Grüß Cebalo
 

Anhänge

  • Pjekt_Forum.zip
    592,5 KB · Aufrufe: 13
Ich kann da auf die Schnelle erstmal keinen Fehler finden. Wenn das jeweilige SLG "Ready" und "nicht Error" meldet sollte sowohl Schreiben als auch Lesen funktionieren.
beim Schreiben gibt es immer noch ein Problem, muss ich selber noch steuern damit die Daten auf der DB48 übertragen wird.
Ich habe irgendwie den Eindruck, du verwechselst die Richtung der Datenübertragung für Schreiben und Lesen.
Beim Schreiben werden die Daten aus dem DB gelesen und auf den Datenträger geschrieben und beim Lesen werden die Daten vom Datenträger gelesen und in den DB geschrieben.

Grüße von HaDi
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Beim Schreiben werden die Daten aus dem DB gelesen und auf den Datenträger geschrieben

Aber was ich programmiert habe stimmt was du ssagst oder? oder wie meinst du das...... was soll ich denn bitte machen'?
 
Du hast m.E. Folgendes programmiert:
1. Wenn der Datenträger im Bereich SLG1 steht, werden 10 Bytes ab DB48.DBB0 gelesen und auf den Keks ab Adresse 0 geschrieben.
2. Wenn der Datenträger im Bereich SLG2 steht, werden 10 Bytes ab Adresse 0 vom Keks gelesen und in DB48 ab DBB10 geschrieben.
Wenn du also im Bereich DB48.DBB0-DBB9 Werte einträgst und anschließend den Keks erst vor SLG1 und dann vor SLG2 stellst, dann sollten deine eingegebenen Werte danach in DB48.DBB10-DBB19 erscheinen.
Funktioniert das nicht, würde ich zunächst mal die Steuer- und Rückmeldesignale (Ready, Error, Command Start, MDS present) per VAT beobachten, um zu sehen, ob denn überhaupt ein Befehl rausgeht.
Das alles setzt natürlich voraus, dass deine HW-Konfig i.O. ist und dein BUS und deine CPU ohne Fehler laufen.
Noch eins: Warum hast du in einem Projekt für eine "normale" CPU F-Bausteine drin?

Grüße von HaDi
 
Hallo,
[/Wenn du also im Bereich DB48.DBB0-DBB9 Werte einträgst und anschließend den Keks erst vor SLG1 und dann vor SLG2 stellst, dann sollten deine eingegebenen Werte danach in DB48.DBB10-DBB19 erscheinen.]

wenn du sagst "Werte eintragen" das heißt muss ich die Werte dann selber angeben, das will ich aber nicht will schreiben genauso wie beim Lesen lauft.

ich benütze die F-Baustein um jeweils die Schreib und Leseszeiit zu ermitteln.

Grüß Cebalo
 
Zuviel Werbung?
-> Hier kostenlos registrieren
wenn du sagst "Werte eintragen" das heißt muss ich die Werte dann selber angeben, das will ich aber nicht will schreiben genauso wie beim Lesen lauft.
Du musst natürlich keine Werte in den DB eintragen, dann schreibst und liest du halt nur Nullen.
Mit unterschiedlichen Werten im Lese- und Schreibbereich des DBs lässt sich allerdings deutlich einfacher feststellen, ob Lesen und Schreiben funktionieren.
ich benütze die F-Baustein um jeweils die Schreib und Leseszeiit zu ermitteln.
Du hast in deinem Projekt 2 Bausteine, die in der Erstellsprache F-AWL erstellt sind, die meine ich.

Grüße von HaDi
 
Hallo Hadi,
ich denke du weißt schon welches Problem momentan ich habe.... immer noch diese automatische ausführung der Befehle beim schreiben......... schreiben und lesen kann ich schon, lauf alles ohne Fehler und kann man schon in DB die unterschiedliche Werten auf schreib und Lesebereich feststellen..

bitte noch mal deine Frage die F-AWL, kannst du bitte ein screenshot machen und dieses anhängen damit ich klar verstehe was du meinst und dich einfach erklären kann.

Grüß Cebalo
 
Zuletzt bearbeitet:
ich denke du weißt schon welches Problem momentan ich habe.... immer noch diese automatische ausführung der Befehle beim schreiben.........
So richtig verstehe ich nicht, welches Problem du noch hast. :confused:
Dein Programm beinhaltet einen Lese- und einen Schreibbefehl, die beide automatisch mit der entsprechenden Anwesenheitsmeldung des Datenträgers ausgeführt werden.
schreiben und lesen kann ich schon
Wie machst du das denn, wenn das automatische Lesen/Schreiben nicht geht?
bitte noch mal deine Frage die F-AWL, kannst du bitte ein screenshot machen und dieses anhängen damit ich klar verstehe was du meinst und dich einfach erklären kann.
Ich meine den FB183 und den FB212, die sind bei mir gelb gekennzeichnet, haben die Erstellsprache F-AWL und sind somit Standardbausteine für eine F-Steuerung. So lange du die nicht verwendest oder zu laden versuchst ist es sicher egal, aber in dein Projekt gehören die ganz sicher nicht.

Grüße von HaDi
 
Zurück
Oben