Daten über die Freie Kommunikation in die S7-200 laden

hubert

Level-2
Beiträge
405
Reaktionspunkte
26
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo SPS Freunde.

Da ich mich nun mit der Freien Lommunikation mit der S7-200 beschäftigen will bin ich auf ein paar Sachen gestoßen die ich mir nicht erklären kann. Habe folgendes Programm das ich in den Tipps und Tricks der S7-200 gefunden habe (Beispiel ist Programm Nr. 20). Die Programmzeilen lauten wie folgt. Diese Programmzeile werden in einem Interrupt aufgerufen. Es wurde von Siemens für einen Barcodeleser geschrieben.
LD SM0.0
MOVB SMB2, *VD56
INCD VD56
INCW VW54
LDB= SMB2, 10
MOVD VD60, VD66
MOVW +0, VW64
ATCH INT_1, 8
MOVB 2, AB0
Die erste Fräge währe für was brauche ich das INCW VW54 in diesem Programm es werden ja hier keine Daten abgefragt.
Die zweite frage währe zur folgenden Programmzeile LDB= SMB2,10. Was wird da im SMB2 mit 10 vergliechen die Anzahl der übertragenen Daten oder was anders.
Würde mich freuen wenn mir einer diese Fragen erklären könnt. Danke schonmal im voraus.

Hubert
 
Hallo Hubert,

der von dir hier beschrieben Programmteil befindet sich im Empfangs-Interrput (INT_0) der freien seriellen Kommunikation.
Das heisst, mit jedem Zeichen das empfangen wird, wird dieser Interput ausgelöst und das eintreffende Zeichen in Variabeln gespeichert.

SMB2 = das aktuell über Schnittstelle "0" empfangene Zeichen.
VD56 = Pointer auf die Stelle wohin das Zeichen geschrieben wird
*VD56 = "*" bedeutet hier dass die in VD56 stehende Adresse verwendet wird.
Das empfangene Zeichen wird also NICHT in VD56 selbst, sondern in die hier stehende Adresse gelegt!

MOVB SMB2, *VD56 'Das empfangene Zeichen wird an die in VD56 stehende Adresse geschrieben.
INCD VD56 'Der Adress-Pointer wird um 1 erhöht (für das nächste neue Zeichen).


Zu deiner ersten Frage....
INCW VW54 'VW54 um 1 erhöhen.

Da der Interrupt mit jedem empfangenen Zeichen ausgelöst wird, steht in VW54 die Anzahl der Interrupt-Aufrufe.
Anders gesagt, VW54 enthält die Anzahl der über Schnittstelle "0" empfangene Zeichen.
VW 54 ist demnach die Länge der vom Barcodeleser gesendeten Zeichenkette.
(VW54 muss natürlich auch vor jedem neuen Empfang auf "0" gesetzt werden)

Zu deiner zweiten Frage....
LDB= SMB2, 10 'Inhalt von SMB2 mit Dezimal-wert 10 vergleichen.

Ist der Wert in SMB2 gleich DEZ "10" (ASCII "LF") bedeutet dies, dass der Barcodeleser die Übertragung der Zeichenkette
abschliesst und seine "Endkennung" sendet.

Bei der seriellen Kommunikation werden sehr häufig die ASCII-Zeichen "LF" (Wert=10) oder "CRLF" (Wert=13) verwendet.

Ich bin mir zwar nicht 100% sicher, aber ich glaube "LF" ist die Endkennung beim Empfangen von Zeichenketten, und
"CRLF" ist die Endkennung beim Senden einer Zeichenkette an ein angeschlossenes Gerät.
Letzters wird auf deine Anwendung eher nicht zutreffen, weil der Barcodeleser vermutlich nur Daten senden kann.

Ich habe bereits einige Anwendnung mit der freien Kommunikation (Senden & Empfangen) realisiert und hatte eigentlich
keine nennenswerten Probleme damit.

PS. Ich würde dir empfehlen zur Inbetriebnahme deiner Anwendung, eine CPU 226 zu verwenden, weil diese 2 Schnittstellen
besitzt wovon du eine zum Anschluss des Barcodelesers verwenden kannst und die andere für die PPI Verbindung zu deinem PC.
Dadurch kannst du die Empfange Zeichenkette direkt auf dem Bildschirm ansehen ohne jedesmal dein Verbindungskabel zu wechseln.

Gruss Guido
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Guido.

Soweit habe ich die Erklärung von dir verstanden. Aber eine Frage bleibt noch. Wenn ich nochmal auf das Beispielprogramm von Siemens zurückkomme (Programmbeispiel "20") das ist ja das VW54 und VW64 für die Zählung der Empfangen Zeichen an Schnittstelle 0 zuständig. Im Programm werden Sie aber garnicht weiter verwendet (vergleichen mit einem Sollwert). Also nach meiner Meinung brauch ich diese beiden ja nicht, oder habe ich da was noch nicht ganz verstanden. Würde mich freuen wenn mir jemand darauf eine Antwort geben kann. Danke im voraus.

Hubert
 
Hallo Hubert,

freut mich dass ich dir mit meinen Erklärungen weiter helfen konnte.

Ich habe mir das (Programmbeispiel "20") nochmals genauer angesehen und stimme dir zu
dass VW54 und VW 64 nicht weiter im Programm gebraucht werden.
Sie könnten demnach eigentlich wegfallen. Richtig!

Ich denke mal dass man mit VW54/VW64 eigentlich nur die "Möglichkeit" aufzeigen möchte
auch auf die Länge der empfangenen Zeichen-kette des Barcodelesers zu zugreifen.
Ob es nachher wirklich gebraucht wird hängt dann vom jeweiligen Projekt ab.

Ich könnte mir vorstellen dass es bei gewissen Anwendungen interessant sein kann zu
prüfen ob der Barcodeleser die richtige Anzahl an Zeichen gesendet hat.
(Eine fixe Zeichenketten Länge vorausgesetzt!)
Durch prüfen der Zeichenketten-länge könnte einem Bediener, mittels eines roten (Fehler) und
grünen (OK) Signallicht mitgeteilt werden, dass die S7-200 den Barcode richtig empfangen hat.
Bei rotem Licht (Fehler) müsste der Barcode dann nochmals neu eingescannt werden.

Ich hoffe ich konnte dir diese Frage auch noch ausreischend beantworten.

Gruss Guido
 
Hallo Guido.

Danke nochmals für deine Hilfe. Konnte leider nicht schneller antworten, bin momentan stark im Stress. Habe nun den größten teil verstanden und werde mich mal daran versuche ein Programm mit meinem Wissen zuschreiben. Es sollen in diesem Programm ungefähr 100 Codekartennummer eingelesen und gespeichert werden und unterschiedlichen Kunden zugewiesen werden. Sollte ich noch Probleme haben so melde ich mich einfach wieder. Also nochmal Danke für deine Hilfe.

Hubert
 
Zurück
Oben