SCL -Arrays mit einander vergleichen

MatthiasH24

Level-1
Beiträge
132
Reaktionspunkte
6
Zuviel Werbung?
-> Hier kostenlos registrieren
Erstmal ein Hallo an alle bin Student der Elektrotechnik und befinde mich gerade im Praxissemester.

Soll für ein Projekt eine Funktion entwickeln die 2 Arrays mit einandder vergleicht und dann bei ungleich bzw gleich einen wert ausgibt.

Die Funktion ist als Überprüfung einer eingabe gedacht also wenn neue eingabe muss sie sich ja vom alten unterscheiden nur dann wird der rest des programmes ausgeführt.

Bei beckhoff gibts es das schon vorprogrammiert aber bei Siemens leider nicht.

Wäre für jede Hilfe dankbar

Grüßle Matthias
 
Hallo Matthias,
also ...
wenn es bei Beckhoff da etwas gibt, das du brauchen kannst, warum passt du es dir dann nicht für Siemens an ...?
und dann ...
wie sieht denn dein bisheriger Ansatz zu dem Thema aus ... und woran hängt es bei dem ...?

Gruß
LL
 
Zuletzt bearbeitet:
Hi,

ja das anzupassen ist leider nicht wirklich so einfach da ich davon kein quellcode habe. es gibt schon funktionen im Internet die nachgebaut sind aber die funktionieren leider nur mit REAL und das kann ich nicht gebrauchen.

mein bisheriger Ansatz ist eher bescheiden habe schon was ausprobiert mit na schleife aber komm damit nicht wirklich klar.

Und im internet habe ich auch schon lange rumgesucht. Es ist nur so wenn die funktion nicht steht kann ich nicht weiter programmieren bzw geht ohne die gar nichts
 
dein problem liegt also darin, dass du die programmiersprache nicht kennst und auch nicht kennenlernen willst, irgendwie nicht so richtig lust hast dich da einzulesen, lieber bißchen was zusammenkopierst und dann frustriert zum himmel schreist "sone scheiße hier - warum geht das nicht!?" ???

zeig uns, was du bisher hast, dann werden schon einige kommen und dich in die richtige richtung drücken nd wenn du dran bleibst läuft das dinge ende der woche ... allerdings mußt du dafür deine einstellung zum programmieren nochmal überdenken ...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Was heißt hier keine lust zum programmieren das stimmt nicht wirklichn habe hier das das buch Automatisieren mit Step 7 in AWl und SCL. DAs ich SCL noch nicht wirklich behersche gebe ich zu aber ich arbeite dran.

Ich kann es nur zeigen wie es bei Beckhoff geht das ist halt eine wirklich feine sache

IF M_Change_Var_ix = 1 THEN
MEMCMP_INT[1] := MEMCMP ( pBuf1 := ADR(alterwert) ,pBuf2 := ADR(neuerwert) ,n := SIZEOF (alterwert) );

IF (MEMCMP_INT[1] <> 0) THEN
(* Wenn eine Vorwahl Änderung der WKZ erfolgt, Nockenautomatik ausschalten *)
Vorwahl := TRUE;
END_IF
neuer wert := alter wert;

wobei die alten und neuen werte als Array [1..32] of BOOl

dann habe ich mir überlegt etwas über awl zu probieren was ich aber nicht soll

es gilt n-1 = alter wert
n = neuer wert

L n-1
Ln
<>I
spb aenderung
nop 0

anderung: L n
T n-1

oder ich habe mir es über eine if else funktion überlegt die aber nur auf papier probiert also weiß nicht ob es so gehen kann

if n>n-1
then ergebnis +1
elseif n<n-1
then ergebnis -1

else gleich ergebnis = 0
 
verstehe den einwurf mit AWL nicht...

hast du dir denn die SCL-umgebung mal angeschaut? grundaufbau der bausteine mal angesehen? eine funktionierende funktion mal angeschaut? ... dann wirst du sehen, dass es von dem code, den du dir da irgendwo rausgesucht hast, gar nicht soweit weg ist...
 
ja das steht auch in dem buch wo ich habe. Das schlimme ist ja ich weiß das ich davon gar nicht soweit weg bin wenn nur nicht das memcmp fehlern würde.

Ich muss halt unbedingt diese funktion mit Arrays machen da es so an die SPS ankommt mit schon vorgegebenen varaiblen und alles da kann ich nichts mehr dran ändern.

Eine Idee wäre noch ich lade die arrays in ein datenbaustein und verarbeite sie dann da weiter nachdem ich sie umgewandelt habe das Prob ist nur dabei das zuviel zeit verloren geht. Es muss schnell gehen. Darf leider nicht sagen wofür ich diesen Code brauche
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich muss halt unbedingt diese funktion mit Arrays machen da es so an die SPS ankommt mit schon vorgegebenen varaiblen und alles da kann ich nichts mehr dran ändern.

Wie genau kommen denn die Array-Daten nun an, wo liegen sie zum verarbeiten bereit? In deinem DB, in Eingangsworten? In einem bereits definiertem Array oder als lose folge von Intwerten?
 
Die daten kommen in einem bereits definierten Array an mittels der Viso wenn der einrichter auf F2 drückt werden die daten an die sps übergeben
 
Ok, Spaß beiseite:

ich nehme mal an, die Daten liegen in einem DB, als Array definiert.

Array_1 Array[1..100] of Int
Array_2 Array[1..100[ of Int

Dann könnte so in etwa die Verleichsfunktion aussehen:

Code:
FUNCTION FC100 : INT

VAR_INPUT

aArray_1: ARRAY[1..100] OF INT;
aArray_2: ARRAY[1..100] OF INT;

END_VAR

VAR_IN_OUT

Ergebnis: BOOL;
    
END_VAR
    
VAR_TEMP
    i: Int;
END_VAR

    // Anweisungsteil
    Ergebnis := False;
    FOR i := 1 TO 100 DO
        IF aArray_1[i] = aArray_2[i] THEN Ergebnis := True;
        ELSE
          Ergebnis := False;
          EXIT; 
        END_IF;
    END_FOR;       
   
    ;
    FC100 := 100;
END_FUNCTION

Die Schleife bricht nach dem ersten ungleichen Wert ab, du wolltest ja nur wissen ob gleich oder ungleich. Man könnte auch noch den Index mit ausgeben, ab welchem die Array ungleich sind, so als Goodi :ROFLMAO:.
 
Anhang, der Funktionsaufruf:

Code:
      CALL  FC   100
       aArray_1:="Array".Array_1
       aArray_2:="Array".Array_2
       RET_VAL :=MW10
       Ergebnis:=M12.0

Wobei der DB 100 ("Array" in der Symboltabelle) die beiden definierten Array (Array_1 und Array_2) enthält.
 
Vielen Dank schon mal das wird mir aufjedenfall mal weiter helfen!

Ja das prob ist das der jenige wo mich dabei die ganze zeit jetzt unterstützt hat oder zumindest meine frage beantwortet ncht da ist.

ich gebe zu ich habe vorher noch nichts mit Arrays gemacht. Die Arrays wo ich habe sind:

Vorwahl_1 : ARRAY [1..32] OF BOOL;
EndEin_1 : ARRAY [1..32] OF DINT;
EndAus_1 : ARRAY [1..32] OF DINT;
EndEin_1 : ARRAY [1..32] OF REAL;
EndAus_1 : ARRAY [1..32] OF REAL;
T_Impuls_1 : ARRAY [1..32] OF DINT;

wobei _1 für neuen wert steht

die alten werte die zum vergleich dienen habe ich natürlich auch

geht das dann mit jedem daten typ?
 
Funktion

Vorwahl_1 : ARRAY [1..32] OF BOOL;
EndEin_1 : ARRAY [1..32] OF DINT;
EndAus_1 : ARRAY [1..32] OF DINT;
EndEin_1 : ARRAY [1..32] OF REAL;
EndAus_1 : ARRAY [1..32] OF REAL;
T_Impuls_1 : ARRAY [1..32] OF DINT;

die alten werte die zum vergleich dienen habe ich natürlich auch

geht das dann mit jedem daten typ?

Vergleichen geht nur wenn die Typen gleich sind; so brauchst du je eine Funktion dafür; die eine vom Ralle noch 2x umbauen.

Ne Frage mal: Kannst du überhaupt SCL verwenden?

V.
 
Ne Frage mal: Kannst du überhaupt SCL verwenden?

V.

Wie meinst du ob ich überhaupt SCl verwenden? Wenn du meine persönliche Programmierfähigkeit damit meinst dann kann ich das im mom nicht 100% bejahen:D

Wenn es um das Projekt geht dann ja. Das lustigste ist ja das ich gar nichts anderes machen soll. und an der fh lernt man nur awl und fup habe bis gestern noch nie was von SCL gehört gehabt...
 
Zurück
Oben