# Subtraction in SCL



## Stargatemaster (28 März 2011)

Hallo ich habe mal eine frage bezüglich der SCL Programmierung.
Ich möchte zwei MD's miteinander Subtraireren. Kann ich das einfach so schreiben:


> FUNCTION FC1 : INT
> 
> VAR_TEMP
> 
> ...


MfG 
Stargatemaster


----------



## zotos (28 März 2011)

Wie bei fast allen Programmiersprachen erfolgt die Zuweisung von rechts nach links.


```
Ergebnis := Zahl_1 - Zahl_2;
```


[edit]
Außer der Reihenfolge ist dazu noch aus dem Code nicht ersichtlich wie die Zahlen zu interpretieren sind.
"MD" kann bei Siemens für DINT, DWORD oder REAL stehen.
Daher sollte man zur symbolischen Darstellung von Variablen wechseln.
[/edit]


----------



## Stargatemaster (28 März 2011)

Also würde es so Funktionieren?


> FUNCTION FC1 : INT
> 
> VAR_TEMP
> 
> ...



Ich hab zur zeit leider keine SPS oder S7 zur verfügung...deshalb die frage.

MfG


----------



## zotos (28 März 2011)

Stargatemaster schrieb:


> Also würde es so Funktionieren?


Nein. Warum nicht habe ich, zeitgleich zu Deiner Nachfrage, editiert.


----------



## Stargatemaster (28 März 2011)

In meinem Beispiel wären es REAL Zahlen. ich habe sie vorher in der Symboltabelle definiert. 
Würde es dann funktionieren oder was muss ich noch dazuschreiben damit es Funktioniert?
Danke für deine Hilfe


----------



## zotos (28 März 2011)

Dann sollte es so funktionieren. Wie hast Du die Variablen denn in der Symboltabelle genannt? Nimm am besten die Namen aus der Symboltabelle.


----------



## Stargatemaster (28 März 2011)

```
Symbol: MD10
Adresse: MD 10
Datentyp: REAL
Kommentar: Minuend
```

genauso hab ich es auch für die anderen MDs gemacht...


----------



## zotos (28 März 2011)

Wie gesagt dann sollte es so gehen. Warum hast Du den Vraiablen keinen griffigeren Namen gegeben?
Für was stehen den die Realwerte (Temperaturen, Füllstände, oder was)?


----------



## Stargatemaster (28 März 2011)

Ja es ist Teil einer Füllstandsregelung. Ich hab Analoge eingänge und ausgänge und die hab ich vorher mit einem FC105 SCALE Baustein in Real werte gewandelt und mit diesen werten wollte ich dann rechnen. Abschließen werden die REAL werte wieder mit einem Unscale baustein in ein PAW ungewandelt.

Hast du denn ein Vorschlag für Griffige Namen? Ich bin da immer so einfallslos...


----------



## Paule (28 März 2011)

Stargatemaster schrieb:


> Hast du denn ein Vorschlag für Griffige Namen? Ich bin da immer so einfallslos...


Da der Kommentar sehr kurz ist, könntest du diesen direkt als Symbolnamen nehmen:

```
Symbol: Minuend
Adresse: MD 10
Datentyp: REAL
Kommentar: Minuend
```
Somit könnte es so ausschauen:

```
Differenz := Minuend - Subtrahend;
//oder 
Ergebnis := Istwert - Korrekturfaktor;
//oder
Leckeres_Essen := Fleisch + Nudeln;
```


----------



## Stargatemaster (28 März 2011)

Gute Idee, ich glaub das mit dem Fleisch und den Nudeln werde ich nehmen, nun muss ich mir nur noch überlegen, wie ich die Tomatensoße mit reinbekomme... ROFLMAO

Danke
MfG


----------



## Paule (28 März 2011)

Stargatemaster schrieb:


> Gute Idee, ich glaub das mit dem Fleisch und den Nudeln werde ich nehmen, nun muss ich mir nur noch überlegen, wie ich die Tomatensoße mit reinbekomme... ROFLMAO


Oh, das geht ja gar nicht: 

```
IF NOT Tomatensoße THEN
   Leckeres_Essen := Fleisch + Nudeln;
END_IF;
```


----------



## Larry Laffer (29 März 2011)

Hallo,
ich denke das es dennoch nicht wie gewünscht funktionieren wird ...
Bei absoluten Speicherzugriffen (und das sollte auch bei den MD's so sein) würden die Variablen immer im Rohformat (hier bei MD also als DWORD) interpretiert werden. Die liessen sich dann nicht subtrahieren.

Es müßte (man möge mich da ggf. korrigieren) zunächst ein Typecast (also DWORD_to_REAL) stattfinden. 

Gruß
Larry


----------

