Step 7 SCL vergleichen

ricardos

Level-2
Beiträge
20
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
Ich bin gerade dabei eine Simatic MV500 In betrieb zu nehmen.
Ich muss hierfür eine Auswertung der gelesenen QR-Codes erstellen
Ich gehe hier die verschiedenen QR-Codes und Zeilen durch.
kann mir wer Erklären warum mir diese nicht in den Dafür Vorgesehenen Array (OR-Code_Stk.) geschrieben werden.
Ich bin froh über jede Hilfe (ich bin Anfänger also über die schlechte Struktur hinweg sehen XD).DB.PNG
SCL Programmierung auswerung.PNG
 
Ohne jetzt genau nachgelesen zu haben. aber in Zeile 6 initialisierst du den Index mit 30 und zählst bis 35 du hast aber nur ein Array von 0-6 deklariert. Das müsste dir auch zugriffsfehler im Buffer werfen.
 
1) Woher kommen die Zahlen 30 und 35, der Datenbereich ist doch von 0..17 angegeben?
2) Hast du dir schon das Handbuch zum MV500 durchgelesen?
3) Warum verwendest du zum inkrementieren deiner Schleife die gleiche Variable wie zum Vergleichen deiner Empfangsdaten?

Tipp: Wenn du dir eine UDT erstellst, welche dein Array[0..17] enthält, musst du nicht jedes Byte einzeln verschieben sondern kannst direkt den gesamten Empfangsbereich deinem Arbeitsbereich zuweisen und brauchst dafür keine Schleifen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ah Stimmt,
Ohne jetzt genau nachgelesen zu haben. aber in Zeile 6 initialisierst du den Index mit 30 und zählst bis 35 du hast aber nur ein Array von 0-6 deklariert. Das müsste dir auch zugriffsfehler im Buffer werfen.

ich habe die Programmierung umgebaut und das vergessen zu ändern ich probiere es gleich aus.
 
Code:
IF (NOT AuswertungStart) THEN
Arbeitsbereich:= TempArbeitsbereichLeer;
END_IF;

IF AuswertungStart THEN
Arbeitsbereich:= Empfangsbereich;

    IF Arbeitsbereich = Empfangsbereich THEN
        Zaehler:= Zaehler+1;
        AuswertungStart:= FALSE;
    ELSE
        // Hier koennte ihre Fehlermeldung stehen
        AuswertungStart:= FALSE;
    END_IF;
END_IF;

Wäre so meine Idee
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Warum du überhaupt Byte für Byte anstatt das ganze Array zu vergleichen?

Auch hier beginnt deine Schleife bei 2 und nicht bei 0

Aktuell würde für jedes übereinstimmende Byte einmal der Zähler addiert werden, wenn es funktionieren würde
 
1) Woher kommen die Zahlen 30 und 35, der Datenbereich ist doch von 0..17 angegeben?
2) Hast du dir schon das Handbuch zum MV500 durchgelesen?
3) Warum verwendest du zum inkrementieren deiner Schleife die gleiche Variable wie zum Vergleichen deiner Empfangsdaten?

Tipp: Wenn du dir eine UDT erstellst, welche dein Array[0..17] enthält, musst du nicht jedes Byte einzeln verschieben sondern kannst direkt den gesamten Empfangsbereich deinem Arbeitsbereich zuweisen und brauchst dafür keine Schleifen.
1) Die 30-35 sind die gelesenen QR-Codes die sich in diesem Spektrum sich befinden.
2) Das habe ich natürlich nur ist diese sehr Mager gestaltet und nicht auf das programmieren bezogen.
3) weil ich dadurch nur eine Variable brauch den die zum inkrementierenden Daten = Zu den vergleichenden daten.
 
Warum du überhaupt Byte für Byte anstatt das ganze Array zu vergleichen?

Auch hier beginnt deine Schleife bei 2 und nicht bei 0

Aktuell würde für jedes übereinstimmende Byte einmal der Zähler addiert werden, wenn es funktionieren würde
Der Zähler beginnt bei zwei da in dem Array zum auswerten die ersten 2 Zeilen kein Ergebnis sondern die Anzahl der Gelesenen Codes liefern und nicht den gelesenen Code. Ich vergleiche Byte für Byte da ich die genau Anzahl der Verschiedenen Codes wissen will.
 
Der Zähler beginnt bei zwei da in dem Array zum auswerten die ersten 2 Zeilen kein Ergebnis sondern die Anzahl der Gelesenen Codes liefern und nicht den gelesenen Code. Ich vergleiche Byte für Byte da ich die genau Anzahl der Verschiedenen Codes wissen will.
Wie viele Zeichen sind denn auf dem Code hinterlegt? Mehr als in ein Byte passen (ein Byte = meistens ein Zeichen).

Im Handbuch ist die gesamte Schnittstelle beschrieben.

Normalerweise kenne ich es so, dass man beim Auslesen ein Byte Array bekommt und dann sich daraus einen String zusammensetzen kann und dann sieht was man eingelesen hat.

Aber kenne den MV500 nicht.. da könnte das alles wiederum anders sein
 
Wie viele Zeichen sind denn auf dem Code hinterlegt? Mehr als in ein Byte passen (ein Byte = meistens ein Zeichen).
Die Codes gehen von 0-5, werden mir im Array allerdings von 30-35 angezeigt.

Normalerweise kenne ich es so, dass man beim Auslesen ein Byte Array bekommt und dann sich daraus einen String zusammensetzen kann und dann sieht was man eingelesen hat.
Das weiß ich leider nicht wie das gehen soll.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Für den MV500 gibts doch sogar ein TO, betreibt ihr das als Profinet Teilnehmer oder über eine andere Schnittstelle?
Um diese Inhalte anzuzeigen, benötigen wir die Zustimmung zum Setzen von Drittanbieter-Cookies.
Für weitere Informationen siehe die Seite Verwendung von Cookies.

TIA Portal hat alles onboard um einen MV mit wenig Aufwand einzubinden und zu benutzen.

Die Codes gehen von 0-5, werden mir im Array allerdings von 30-35 angezeigt.


Das weiß ich leider nicht wie das gehen soll.
Dein Array geht doch nur von 0..17, wo kommen denn die 30 und 35 her? Wir sehen nicht deinen Bildschirm, uns fehlt der Bezug!


Hast du mal den QR Code mit deinem Smartphone gescanned damit du siehst was dort hinterlegt ist?

Dann weißt du auch wie viele Zeichen du erwartest.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Für den MV500 gibts doch sogar ein TO, betreibt ihr das als Profinet Teilnehmer oder über eine andere Schnittstelle?
Stimmt habe ich auch angelegt, es geht mir hier auch nicht Primär um die MV500 sondern um die Programmierung um die codes Zählen zu können das einlesen funktioniert gut.

TIA Portal hat alles onboard um einen MV mit wenig Aufwand einzubinden und zu benutzen.
Das Stimmt nur nicht wie gesagt für das weiter verarbeiten, oder habe ich etwas übersehen?

Ganz einfach: die ASCII-Zeichen für die Ziffern 0..5 sind 30hex..35hex alias 48dez..53dez.
Genau so ist es allerdings kann ich trotzdem mit Hexa arbeiten oder.
 
Stimmt habe ich auch angelegt, es geht mir hier auch nicht Primär um die MV500 sondern um die Programmierung um die codes Zählen zu können das einlesen funktioniert gut.


Das Stimmt nur nicht wie gesagt für das weiter verarbeiten, oder habe ich etwas übersehen?


Genau so ist es allerdings kann ich trotzdem mit Hexa arbeiten oder.
dein Array ist dezimal, hexadezimal hat Vorzeichen 16#

Zeig mal bitte was online im Empfangsbereich steht, also direkt am Kommunikationsbaustein in dem Fach
 
Zurück
Oben